]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
fixes for 3.18
authorSasha Levin <sashal@kernel.org>
Wed, 8 May 2019 20:23:46 +0000 (16:23 -0400)
committerSasha Levin <sashal@kernel.org>
Wed, 8 May 2019 20:23:46 +0000 (16:23 -0400)
Signed-off-by: Sasha Levin <sashal@kernel.org>
queue-3.18/asoc-cs4270-set-auto-increment-bit-for-register-writ.patch [new file with mode: 0644]
queue-3.18/asoc-soc-pcm-fix-a-codec-fixup-issue-in-tdm-case.patch [new file with mode: 0644]
queue-3.18/asoc-tlv320aic32x4-fix-common-pins.patch [new file with mode: 0644]
queue-3.18/iommu-amd-set-exclusion-range-correctly.patch [new file with mode: 0644]
queue-3.18/scsi-csiostor-fix-missing-data-copy-in-csio_scsi_err.patch [new file with mode: 0644]
queue-3.18/series
queue-3.18/xtensa-fix-initialization-of-pt_regs-syscall-in-star.patch [new file with mode: 0644]

diff --git a/queue-3.18/asoc-cs4270-set-auto-increment-bit-for-register-writ.patch b/queue-3.18/asoc-cs4270-set-auto-increment-bit-for-register-writ.patch
new file mode 100644 (file)
index 0000000..a2c8870
--- /dev/null
@@ -0,0 +1,37 @@
+From 30722230830624d014c99c7981ed446292fc4ca6 Mon Sep 17 00:00:00 2001
+From: Daniel Mack <daniel@zonque.org>
+Date: Wed, 20 Mar 2019 22:41:56 +0100
+Subject: ASoC: cs4270: Set auto-increment bit for register writes
+
+[ Upstream commit f0f2338a9cfaf71db895fa989ea7234e8a9b471d ]
+
+The CS4270 does not by default increment the register address on
+consecutive writes. During normal operation it doesn't matter as all
+register accesses are done individually. At resume time after suspend,
+however, the regcache code gathers the biggest possible block of
+registers to sync and sends them one on one go.
+
+To fix this, set the INCR bit in all cases.
+
+Signed-off-by: Daniel Mack <daniel@zonque.org>
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/soc/codecs/cs4270.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/sound/soc/codecs/cs4270.c b/sound/soc/codecs/cs4270.c
+index 736c1ea8e31e2..756796c064136 100644
+--- a/sound/soc/codecs/cs4270.c
++++ b/sound/soc/codecs/cs4270.c
+@@ -641,6 +641,7 @@ static const struct regmap_config cs4270_regmap = {
+       .reg_defaults =         cs4270_reg_defaults,
+       .num_reg_defaults =     ARRAY_SIZE(cs4270_reg_defaults),
+       .cache_type =           REGCACHE_RBTREE,
++      .write_flag_mask =      CS4270_I2C_INCR,
+       .readable_reg =         cs4270_reg_is_readable,
+       .volatile_reg =         cs4270_reg_is_volatile,
+-- 
+2.20.1
+
diff --git a/queue-3.18/asoc-soc-pcm-fix-a-codec-fixup-issue-in-tdm-case.patch b/queue-3.18/asoc-soc-pcm-fix-a-codec-fixup-issue-in-tdm-case.patch
new file mode 100644 (file)
index 0000000..cab53d1
--- /dev/null
@@ -0,0 +1,62 @@
+From 08fd66da92a12f84aa4aeb1d6456d512af16796a Mon Sep 17 00:00:00 2001
+From: Rander Wang <rander.wang@linux.intel.com>
+Date: Fri, 8 Mar 2019 16:38:57 +0800
+Subject: ASoC:soc-pcm:fix a codec fixup issue in TDM case
+
+[ Upstream commit 570f18b6a8d1f0e60e8caf30e66161b6438dcc91 ]
+
+On HDaudio platforms, if playback is started when capture is working,
+there is no audible output.
+
+This can be root-caused to the use of the rx|tx_mask to store an HDaudio
+stream tag.
+
+If capture is stared before playback, rx_mask would be non-zero on HDaudio
+platform, then the channel number of playback, which is in the same codec
+dai with the capture, would be changed by soc_pcm_codec_params_fixup based
+on the tx_mask at first, then overwritten by this function based on rx_mask
+at last.
+
+According to the author of tx|rx_mask, tx_mask is for playback and rx_mask
+is for capture. And stream direction is checked at all other references of
+tx|rx_mask in ASoC, so here should be an error. This patch checks stream
+direction for tx|rx_mask for fixup function.
+
+This issue would affect not only HDaudio+ASoC, but also I2S codecs if the
+channel number based on rx_mask is not equal to the one for tx_mask. It could
+be rarely reproduecd because most drivers in kernel set the same channel number
+to tx|rx_mask or rx_mask is zero.
+
+Tested on all platforms using stream_tag & HDaudio and intel I2S platforms.
+
+Signed-off-by: Rander Wang <rander.wang@linux.intel.com>
+Acked-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/soc/soc-pcm.c | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/sound/soc/soc-pcm.c b/sound/soc/soc-pcm.c
+index e2fb859fbbaa1..4323002c67db2 100644
+--- a/sound/soc/soc-pcm.c
++++ b/sound/soc/soc-pcm.c
+@@ -847,10 +847,13 @@ static int soc_pcm_hw_params(struct snd_pcm_substream *substream,
+               codec_params = *params;
+               /* fixup params based on TDM slot masks */
+-              if (codec_dai->tx_mask)
++              if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK &&
++                  codec_dai->tx_mask)
+                       soc_pcm_codec_params_fixup(&codec_params,
+                                                  codec_dai->tx_mask);
+-              if (codec_dai->rx_mask)
++
++              if (substream->stream == SNDRV_PCM_STREAM_CAPTURE &&
++                  codec_dai->rx_mask)
+                       soc_pcm_codec_params_fixup(&codec_params,
+                                                  codec_dai->rx_mask);
+-- 
+2.20.1
+
diff --git a/queue-3.18/asoc-tlv320aic32x4-fix-common-pins.patch b/queue-3.18/asoc-tlv320aic32x4-fix-common-pins.patch
new file mode 100644 (file)
index 0000000..8924d4d
--- /dev/null
@@ -0,0 +1,33 @@
+From d5a52293e1f19df2967c11cc4ac945288b64d3bc Mon Sep 17 00:00:00 2001
+From: Annaliese McDermond <nh6z@nh6z.net>
+Date: Sat, 30 Mar 2019 09:02:02 -0700
+Subject: ASoC: tlv320aic32x4: Fix Common Pins
+
+[ Upstream commit c63adb28f6d913310430f14c69f0a2ea55eed0cc ]
+
+The common pins were mistakenly not added to the DAPM graph.
+Adding these pins will allow valid graphs to be created.
+
+Signed-off-by: Annaliese McDermond <nh6z@nh6z.net>
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/soc/codecs/tlv320aic32x4.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/sound/soc/codecs/tlv320aic32x4.c b/sound/soc/codecs/tlv320aic32x4.c
+index 6ea662db24107..fdce75d5c6753 100644
+--- a/sound/soc/codecs/tlv320aic32x4.c
++++ b/sound/soc/codecs/tlv320aic32x4.c
+@@ -234,6 +234,8 @@ static const struct snd_soc_dapm_widget aic32x4_dapm_widgets[] = {
+       SND_SOC_DAPM_INPUT("IN2_R"),
+       SND_SOC_DAPM_INPUT("IN3_L"),
+       SND_SOC_DAPM_INPUT("IN3_R"),
++      SND_SOC_DAPM_INPUT("CM_L"),
++      SND_SOC_DAPM_INPUT("CM_R"),
+ };
+ static const struct snd_soc_dapm_route aic32x4_dapm_routes[] = {
+-- 
+2.20.1
+
diff --git a/queue-3.18/iommu-amd-set-exclusion-range-correctly.patch b/queue-3.18/iommu-amd-set-exclusion-range-correctly.patch
new file mode 100644 (file)
index 0000000..e2e10fb
--- /dev/null
@@ -0,0 +1,38 @@
+From 7152745123ac4950611ca114ce3339c6019faab8 Mon Sep 17 00:00:00 2001
+From: Joerg Roedel <jroedel@suse.de>
+Date: Fri, 12 Apr 2019 12:50:31 +0200
+Subject: iommu/amd: Set exclusion range correctly
+
+[ Upstream commit 3c677d206210f53a4be972211066c0f1cd47fe12 ]
+
+The exlcusion range limit register needs to contain the
+base-address of the last page that is part of the range, as
+bits 0-11 of this register are treated as 0xfff by the
+hardware for comparisons.
+
+So correctly set the exclusion range in the hardware to the
+last page which is _in_ the range.
+
+Fixes: b2026aa2dce44 ('x86, AMD IOMMU: add functions for programming IOMMU MMIO space')
+Signed-off-by: Joerg Roedel <jroedel@suse.de>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/iommu/amd_iommu_init.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/iommu/amd_iommu_init.c b/drivers/iommu/amd_iommu_init.c
+index 2f3475247f0ff..127f9cc563e9b 100644
+--- a/drivers/iommu/amd_iommu_init.c
++++ b/drivers/iommu/amd_iommu_init.c
+@@ -294,7 +294,7 @@ static void iommu_write_l2(struct amd_iommu *iommu, u8 address, u32 val)
+ static void iommu_set_exclusion_range(struct amd_iommu *iommu)
+ {
+       u64 start = iommu->exclusion_start & PAGE_MASK;
+-      u64 limit = (start + iommu->exclusion_length) & PAGE_MASK;
++      u64 limit = (start + iommu->exclusion_length - 1) & PAGE_MASK;
+       u64 entry;
+       if (!iommu->exclusion_start)
+-- 
+2.20.1
+
diff --git a/queue-3.18/scsi-csiostor-fix-missing-data-copy-in-csio_scsi_err.patch b/queue-3.18/scsi-csiostor-fix-missing-data-copy-in-csio_scsi_err.patch
new file mode 100644 (file)
index 0000000..bec774d
--- /dev/null
@@ -0,0 +1,38 @@
+From e6ab2845b3e3713f74c6df3d2702fe3f0c918ff0 Mon Sep 17 00:00:00 2001
+From: Varun Prakash <varun@chelsio.com>
+Date: Fri, 5 Apr 2019 20:39:13 +0530
+Subject: scsi: csiostor: fix missing data copy in csio_scsi_err_handler()
+
+[ Upstream commit 5c2442fd78998af60e13aba506d103f7f43f8701 ]
+
+If scsi cmd sglist is not suitable for DDP then csiostor driver uses
+preallocated buffers for DDP, because of this data copy is required from
+DDP buffer to scsi cmd sglist before calling ->scsi_done().
+
+Signed-off-by: Varun Prakash <varun@chelsio.com>
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/scsi/csiostor/csio_scsi.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/scsi/csiostor/csio_scsi.c b/drivers/scsi/csiostor/csio_scsi.c
+index 86103c8475d8e..fbb2052bc4129 100644
+--- a/drivers/scsi/csiostor/csio_scsi.c
++++ b/drivers/scsi/csiostor/csio_scsi.c
+@@ -1737,8 +1737,11 @@ csio_scsi_err_handler(struct csio_hw *hw, struct csio_ioreq *req)
+       }
+ out:
+-      if (req->nsge > 0)
++      if (req->nsge > 0) {
+               scsi_dma_unmap(cmnd);
++              if (req->dcopy && (host_status == DID_OK))
++                      host_status = csio_scsi_copy_to_sgl(hw, req);
++      }
+       cmnd->result = (((host_status) << 16) | scsi_status);
+       cmnd->scsi_done(cmnd);
+-- 
+2.20.1
+
index b11168455096155ad2d48dbb1ba2357f4856234c..6126df8824b32d11a1a34cb7997acb819971d311 100644 (file)
@@ -50,3 +50,9 @@ staging-iio-adt7316-fix-the-dac-read-calculation.patch
 staging-iio-adt7316-fix-the-dac-write-calculation.patch
 media-v4l2-i2c-ov7670-fix-pll-bypass-register-values.patch
 scsi-libsas-fix-a-race-condition-when-smp-task-timeout.patch
+asoc-soc-pcm-fix-a-codec-fixup-issue-in-tdm-case.patch
+asoc-cs4270-set-auto-increment-bit-for-register-writ.patch
+asoc-tlv320aic32x4-fix-common-pins.patch
+xtensa-fix-initialization-of-pt_regs-syscall-in-star.patch
+scsi-csiostor-fix-missing-data-copy-in-csio_scsi_err.patch
+iommu-amd-set-exclusion-range-correctly.patch
diff --git a/queue-3.18/xtensa-fix-initialization-of-pt_regs-syscall-in-star.patch b/queue-3.18/xtensa-fix-initialization-of-pt_regs-syscall-in-star.patch
new file mode 100644 (file)
index 0000000..afaafd4
--- /dev/null
@@ -0,0 +1,52 @@
+From 3687872fc20b0614e24450fd813624c74c4f508f Mon Sep 17 00:00:00 2001
+From: Max Filippov <jcmvbkbc@gmail.com>
+Date: Wed, 3 Apr 2019 20:22:42 -0700
+Subject: xtensa: fix initialization of pt_regs::syscall in start_thread
+
+[ Upstream commit 2663147dc7465cb29040a05cc4286fdd839978b5 ]
+
+New pt_regs should indicate that there's no syscall, not that there's
+syscall #0. While at it wrap macro body in do/while and parenthesize
+macro arguments.
+
+Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/xtensa/include/asm/processor.h | 21 ++++++++++++---------
+ 1 file changed, 12 insertions(+), 9 deletions(-)
+
+diff --git a/arch/xtensa/include/asm/processor.h b/arch/xtensa/include/asm/processor.h
+index b61bdf0eea254..79b2d1a6b4ffa 100644
+--- a/arch/xtensa/include/asm/processor.h
++++ b/arch/xtensa/include/asm/processor.h
+@@ -152,15 +152,18 @@ struct thread_struct {
+ /* Clearing a0 terminates the backtrace. */
+ #define start_thread(regs, new_pc, new_sp) \
+-      memset(regs, 0, sizeof(*regs)); \
+-      regs->pc = new_pc; \
+-      regs->ps = USER_PS_VALUE; \
+-      regs->areg[1] = new_sp; \
+-      regs->areg[0] = 0; \
+-      regs->wmask = 1; \
+-      regs->depc = 0; \
+-      regs->windowbase = 0; \
+-      regs->windowstart = 1;
++      do { \
++              memset((regs), 0, sizeof(*(regs))); \
++              (regs)->pc = (new_pc); \
++              (regs)->ps = USER_PS_VALUE; \
++              (regs)->areg[1] = (new_sp); \
++              (regs)->areg[0] = 0; \
++              (regs)->wmask = 1; \
++              (regs)->depc = 0; \
++              (regs)->windowbase = 0; \
++              (regs)->windowstart = 1; \
++              (regs)->syscall = NO_SYSCALL; \
++      } while (0)
+ /* Forward declaration */
+ struct task_struct;
+-- 
+2.20.1
+