From: Sasha Levin Date: Wed, 8 May 2019 20:23:46 +0000 (-0400) Subject: fixes for 3.18 X-Git-Tag: v4.9.175~31 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1def3d04d489615dfcdedd321eebe15dc44c4b2d;p=thirdparty%2Fkernel%2Fstable-queue.git fixes for 3.18 Signed-off-by: Sasha Levin --- 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 index 00000000000..a2c88705345 --- /dev/null +++ b/queue-3.18/asoc-cs4270-set-auto-increment-bit-for-register-writ.patch @@ -0,0 +1,37 @@ +From 30722230830624d014c99c7981ed446292fc4ca6 Mon Sep 17 00:00:00 2001 +From: Daniel Mack +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 +Signed-off-by: Mark Brown +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..cab53d1e6a8 --- /dev/null +++ b/queue-3.18/asoc-soc-pcm-fix-a-codec-fixup-issue-in-tdm-case.patch @@ -0,0 +1,62 @@ +From 08fd66da92a12f84aa4aeb1d6456d512af16796a Mon Sep 17 00:00:00 2001 +From: Rander Wang +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 +Acked-by: Pierre-Louis Bossart +Signed-off-by: Mark Brown +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..8924d4dd2b6 --- /dev/null +++ b/queue-3.18/asoc-tlv320aic32x4-fix-common-pins.patch @@ -0,0 +1,33 @@ +From d5a52293e1f19df2967c11cc4ac945288b64d3bc Mon Sep 17 00:00:00 2001 +From: Annaliese McDermond +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 +Signed-off-by: Mark Brown +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..e2e10fb36ff --- /dev/null +++ b/queue-3.18/iommu-amd-set-exclusion-range-correctly.patch @@ -0,0 +1,38 @@ +From 7152745123ac4950611ca114ce3339c6019faab8 Mon Sep 17 00:00:00 2001 +From: Joerg Roedel +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 +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..bec774d3b2e --- /dev/null +++ b/queue-3.18/scsi-csiostor-fix-missing-data-copy-in-csio_scsi_err.patch @@ -0,0 +1,38 @@ +From e6ab2845b3e3713f74c6df3d2702fe3f0c918ff0 Mon Sep 17 00:00:00 2001 +From: Varun Prakash +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 +Signed-off-by: Martin K. Petersen +Signed-off-by: Sasha Levin +--- + 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 + diff --git a/queue-3.18/series b/queue-3.18/series index b1116845509..6126df8824b 100644 --- a/queue-3.18/series +++ b/queue-3.18/series @@ -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 index 00000000000..afaafd41403 --- /dev/null +++ b/queue-3.18/xtensa-fix-initialization-of-pt_regs-syscall-in-star.patch @@ -0,0 +1,52 @@ +From 3687872fc20b0614e24450fd813624c74c4f508f Mon Sep 17 00:00:00 2001 +From: Max Filippov +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 +Signed-off-by: Sasha Levin +--- + 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 +