From 7264e8a9315349cb1e897a29968a207b9dc4a71e Mon Sep 17 00:00:00 2001 From: Sasha Levin Date: Wed, 8 May 2019 16:23:46 -0400 Subject: [PATCH] fixes for 4.4 Signed-off-by: Sasha Levin --- ...auto-increment-bit-for-register-writ.patch | 37 +++++++++++ ...-fix-a-codec-fixup-issue-in-tdm-case.patch | 62 +++++++++++++++++++ .../asoc-tlv320aic32x4-fix-common-pins.patch | 33 ++++++++++ ...mu-amd-set-exclusion-range-correctly.patch | 38 ++++++++++++ ...ix-handling-of-wakeup_events-for-mul.patch | 59 ++++++++++++++++++ ...x-missing-data-copy-in-csio_scsi_err.patch | 38 ++++++++++++ queue-4.4/series | 7 +++ ...alization-of-pt_regs-syscall-in-star.patch | 52 ++++++++++++++++ 8 files changed, 326 insertions(+) create mode 100644 queue-4.4/asoc-cs4270-set-auto-increment-bit-for-register-writ.patch create mode 100644 queue-4.4/asoc-soc-pcm-fix-a-codec-fixup-issue-in-tdm-case.patch create mode 100644 queue-4.4/asoc-tlv320aic32x4-fix-common-pins.patch create mode 100644 queue-4.4/iommu-amd-set-exclusion-range-correctly.patch create mode 100644 queue-4.4/perf-x86-intel-fix-handling-of-wakeup_events-for-mul.patch create mode 100644 queue-4.4/scsi-csiostor-fix-missing-data-copy-in-csio_scsi_err.patch create mode 100644 queue-4.4/xtensa-fix-initialization-of-pt_regs-syscall-in-star.patch diff --git a/queue-4.4/asoc-cs4270-set-auto-increment-bit-for-register-writ.patch b/queue-4.4/asoc-cs4270-set-auto-increment-bit-for-register-writ.patch new file mode 100644 index 00000000000..ad8e2c37396 --- /dev/null +++ b/queue-4.4/asoc-cs4270-set-auto-increment-bit-for-register-writ.patch @@ -0,0 +1,37 @@ +From 7e966c62929d0013fe907c1668bcebb519d3b248 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 3670086b9227c..f273533c66535 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-4.4/asoc-soc-pcm-fix-a-codec-fixup-issue-in-tdm-case.patch b/queue-4.4/asoc-soc-pcm-fix-a-codec-fixup-issue-in-tdm-case.patch new file mode 100644 index 00000000000..531da55362a --- /dev/null +++ b/queue-4.4/asoc-soc-pcm-fix-a-codec-fixup-issue-in-tdm-case.patch @@ -0,0 +1,62 @@ +From 63233ede4779d7d8993abd85214df5433e3b90a9 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 f99eb8f442829..1c0d44c86c018 100644 +--- a/sound/soc/soc-pcm.c ++++ b/sound/soc/soc-pcm.c +@@ -882,10 +882,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-4.4/asoc-tlv320aic32x4-fix-common-pins.patch b/queue-4.4/asoc-tlv320aic32x4-fix-common-pins.patch new file mode 100644 index 00000000000..0ddaeae9bc5 --- /dev/null +++ b/queue-4.4/asoc-tlv320aic32x4-fix-common-pins.patch @@ -0,0 +1,33 @@ +From eb33cc190aea75317dab19ed97eaf6f3483ca4b1 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 f2d3191961e14..714bd0e3fc71e 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-4.4/iommu-amd-set-exclusion-range-correctly.patch b/queue-4.4/iommu-amd-set-exclusion-range-correctly.patch new file mode 100644 index 00000000000..b87fc790629 --- /dev/null +++ b/queue-4.4/iommu-amd-set-exclusion-range-correctly.patch @@ -0,0 +1,38 @@ +From 4ec2a01b0a4d1f6b1d729535d9a8d3163b69d811 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 94f1bf772ec93..db85cc5791dce 100644 +--- a/drivers/iommu/amd_iommu_init.c ++++ b/drivers/iommu/amd_iommu_init.c +@@ -295,7 +295,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-4.4/perf-x86-intel-fix-handling-of-wakeup_events-for-mul.patch b/queue-4.4/perf-x86-intel-fix-handling-of-wakeup_events-for-mul.patch new file mode 100644 index 00000000000..62d81c2f91f --- /dev/null +++ b/queue-4.4/perf-x86-intel-fix-handling-of-wakeup_events-for-mul.patch @@ -0,0 +1,59 @@ +From ff9acdd435edf2a89c5c9ec652b792dbe8df0a1f Mon Sep 17 00:00:00 2001 +From: Stephane Eranian +Date: Wed, 6 Mar 2019 11:50:48 -0800 +Subject: perf/x86/intel: Fix handling of wakeup_events for multi-entry PEBS + +[ Upstream commit 583feb08e7f7ac9d533b446882eb3a54737a6dbb ] + +When an event is programmed with attr.wakeup_events=N (N>0), it means +the caller is interested in getting a user level notification after +N samples have been recorded in the kernel sampling buffer. + +With precise events on Intel processors, the kernel uses PEBS. +The kernel tries minimize sampling overhead by verifying +if the event configuration is compatible with multi-entry PEBS mode. +If so, the kernel is notified only when the buffer has reached its threshold. +Other PEBS operates in single-entry mode, the kenrel is notified for each +PEBS sample. + +The problem is that the current implementation look at frequency +mode and event sample_type but ignores the wakeup_events field. Thus, +it may not be possible to receive a notification after each precise event. + +This patch fixes this problem by disabling multi-entry PEBS if wakeup_events +is non-zero. + +Signed-off-by: Stephane Eranian +Signed-off-by: Peter Zijlstra (Intel) +Reviewed-by: Andi Kleen +Cc: Alexander Shishkin +Cc: Arnaldo Carvalho de Melo +Cc: Jiri Olsa +Cc: Linus Torvalds +Cc: Peter Zijlstra +Cc: Thomas Gleixner +Cc: Vince Weaver +Cc: kan.liang@intel.com +Link: https://lkml.kernel.org/r/20190306195048.189514-1-eranian@google.com +Signed-off-by: Ingo Molnar +Signed-off-by: Sasha Levin +--- + arch/x86/kernel/cpu/perf_event_intel.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/arch/x86/kernel/cpu/perf_event_intel.c b/arch/x86/kernel/cpu/perf_event_intel.c +index 7b79c80ce029a..325ed90511cff 100644 +--- a/arch/x86/kernel/cpu/perf_event_intel.c ++++ b/arch/x86/kernel/cpu/perf_event_intel.c +@@ -2513,7 +2513,7 @@ static int intel_pmu_hw_config(struct perf_event *event) + return ret; + + if (event->attr.precise_ip) { +- if (!event->attr.freq) { ++ if (!(event->attr.freq || event->attr.wakeup_events)) { + event->hw.flags |= PERF_X86_EVENT_AUTO_RELOAD; + if (!(event->attr.sample_type & + ~intel_pmu_free_running_flags(event))) +-- +2.20.1 + diff --git a/queue-4.4/scsi-csiostor-fix-missing-data-copy-in-csio_scsi_err.patch b/queue-4.4/scsi-csiostor-fix-missing-data-copy-in-csio_scsi_err.patch new file mode 100644 index 00000000000..3708ae86375 --- /dev/null +++ b/queue-4.4/scsi-csiostor-fix-missing-data-copy-in-csio_scsi_err.patch @@ -0,0 +1,38 @@ +From 6da83a52630a8882a36890624f32350fd4b862a9 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 c2a6f9f294271..ddbdaade654d6 100644 +--- a/drivers/scsi/csiostor/csio_scsi.c ++++ b/drivers/scsi/csiostor/csio_scsi.c +@@ -1713,8 +1713,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-4.4/series b/queue-4.4/series index d2d731137eb..2a0c7b06a53 100644 --- a/queue-4.4/series +++ b/queue-4.4/series @@ -141,3 +141,10 @@ selinux-never-allow-relabeling-on-context-mounts.patch x86-mce-improve-error-message-when-kernel-cannot-recover-p2.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 +perf-x86-intel-fix-handling-of-wakeup_events-for-mul.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-4.4/xtensa-fix-initialization-of-pt_regs-syscall-in-star.patch b/queue-4.4/xtensa-fix-initialization-of-pt_regs-syscall-in-star.patch new file mode 100644 index 00000000000..b23834f608d --- /dev/null +++ b/queue-4.4/xtensa-fix-initialization-of-pt_regs-syscall-in-star.patch @@ -0,0 +1,52 @@ +From c62f2eccd4b585dc51e064ce3a720d0681fb5434 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 d3ac00fcb15cc..9e3b4e75094dc 100644 +--- a/arch/xtensa/include/asm/processor.h ++++ b/arch/xtensa/include/asm/processor.h +@@ -183,15 +183,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 + -- 2.47.2