]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Fixes for 6.0
authorSasha Levin <sashal@kernel.org>
Wed, 30 Nov 2022 12:55:52 +0000 (07:55 -0500)
committerSasha Levin <sashal@kernel.org>
Wed, 30 Nov 2022 12:55:52 +0000 (07:55 -0500)
Signed-off-by: Sasha Levin <sashal@kernel.org>
43 files changed:
queue-6.0/asoc-amd-yc-add-alienware-m17-r5-amd-into-dmi-table.patch [new file with mode: 0644]
queue-6.0/asoc-hda-intel-dsp-config-add-es83x6-quirk-for-icela.patch [new file with mode: 0644]
queue-6.0/asoc-intel-bytcht_es8316-add-quirk-for-the-nanote-um.patch [new file with mode: 0644]
queue-6.0/asoc-intel-soc-acpi-add-es83x6-support-to-icelake.patch [new file with mode: 0644]
queue-6.0/asoc-sof-ipc3-topology-use-old-pipeline-teardown-flo.patch [new file with mode: 0644]
queue-6.0/asoc-sof_es8336-reduce-pop-noise-on-speaker.patch [new file with mode: 0644]
queue-6.0/asoc-stm32-dfsdm-manage-cb-buffers-cleanup.patch [new file with mode: 0644]
queue-6.0/block-make-blk_set_default_limits-private.patch [new file with mode: 0644]
queue-6.0/bpf-convert-bpf_dispatcher-to-use-static_call-not-ft.patch [new file with mode: 0644]
queue-6.0/dm-integrity-clear-the-journal-on-suspend.patch [new file with mode: 0644]
queue-6.0/dm-integrity-flush-the-journal-on-suspend.patch [new file with mode: 0644]
queue-6.0/dm-integrity-set-dma_alignment-limit-in-io_hints.patch [new file with mode: 0644]
queue-6.0/dm-log-writes-set-dma_alignment-limit-in-io_hints.patch [new file with mode: 0644]
queue-6.0/drm-amd-display-use-uclk-pstate-latency-for-fw-assis.patch [new file with mode: 0644]
queue-6.0/drm-amdgpu-disable-baco-support-on-more-cards.patch [new file with mode: 0644]
queue-6.0/drm-amdkfd-fix-a-memory-limit-issue.patch [new file with mode: 0644]
queue-6.0/gpu-host1x-avoid-trying-to-use-gart-on-tegra20.patch [new file with mode: 0644]
queue-6.0/input-goodix-try-resetting-the-controller-when-no-co.patch [new file with mode: 0644]
queue-6.0/input-i8042-apply-probe-defer-to-more-asus-zenbook-m.patch [new file with mode: 0644]
queue-6.0/input-soc_button_array-add-acer-switch-v-10-to-dmi_u.patch [new file with mode: 0644]
queue-6.0/input-soc_button_array-add-use_low_level_irq-module-.patch [new file with mode: 0644]
queue-6.0/input-synaptics-switch-touchpad-on-hp-laptop-15-da30.patch [new file with mode: 0644]
queue-6.0/net-usb-qmi_wwan-add-telit-0x103a-composition.patch [new file with mode: 0644]
queue-6.0/pinctrl-qcom-sc8280xp-rectify-ufs-reset-pins.patch [new file with mode: 0644]
queue-6.0/platform-surface-aggregator_registry-add-support-for.patch [new file with mode: 0644]
queue-6.0/platform-surface-aggregator_registry-add-support-for.patch-2290 [new file with mode: 0644]
queue-6.0/platform-x86-acer-wmi-enable-sw_tablet_mode-on-switc.patch [new file with mode: 0644]
queue-6.0/platform-x86-asus-wmi-add-missing-pci_dev_put-in-asu.patch [new file with mode: 0644]
queue-6.0/platform-x86-hp-wmi-ignore-smart-experience-app-even.patch [new file with mode: 0644]
queue-6.0/platform-x86-ideapad-laptop-add-module-parameters-to.patch [new file with mode: 0644]
queue-6.0/platform-x86-ideapad-laptop-fix-interrupt-storm-on-f.patch [new file with mode: 0644]
queue-6.0/platform-x86-thinkpad_acpi-enable-s2idle-quirk-for-2.patch [new file with mode: 0644]
queue-6.0/revert-tty-n_gsm-avoid-call-of-sleeping-functions-fr.patch [new file with mode: 0644]
queue-6.0/revert-tty-n_gsm-replace-kicktimer-with-delayed_work.patch [new file with mode: 0644]
queue-6.0/scsi-iscsi-fix-possible-memory-leak-when-device_regi.patch [new file with mode: 0644]
queue-6.0/scsi-mpi3mr-suppress-command-reply-debug-prints.patch [new file with mode: 0644]
queue-6.0/serial-8250-8250_omap-avoid-rs485-rts-glitch-on-set_.patch [new file with mode: 0644]
queue-6.0/series
queue-6.0/tcp-configurable-source-port-perturb-table-size.patch [new file with mode: 0644]
queue-6.0/tools-iio-iio_generic_buffer-fix-read-size.patch [new file with mode: 0644]
queue-6.0/xen-pciback-allow-setting-pci_msix_flags_maskall-too.patch [new file with mode: 0644]
queue-6.0/xen-platform-pci-add-missing-free_irq-in-error-path.patch [new file with mode: 0644]
queue-6.0/zonefs-fix-zone-report-size-in-__zonefs_io_error.patch [new file with mode: 0644]

diff --git a/queue-6.0/asoc-amd-yc-add-alienware-m17-r5-amd-into-dmi-table.patch b/queue-6.0/asoc-amd-yc-add-alienware-m17-r5-amd-into-dmi-table.patch
new file mode 100644 (file)
index 0000000..9821ac4
--- /dev/null
@@ -0,0 +1,44 @@
+From 1fc4e5997ed1e7a0e5d9129b85fbdbab95be30df Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 24 Oct 2022 18:42:27 +0100
+Subject: ASoC: amd: yc: Add Alienware m17 R5 AMD into DMI table
+
+From: Brent Mendelsohn <mendiebm@gmail.com>
+
+[ Upstream commit d40b6529c6269cd5afddb1116a383cab9f126694 ]
+
+This model requires an additional detection quirk to enable the
+internal microphone - BIOS doesn't seem to support AcpDmicConnected
+(nothing in acpidump output).
+
+Link: https://bugzilla.kernel.org/show_bug.cgi?id=216590
+Signed-off-by: Brent Mendelsohn <mendiebm@gmail.com>
+Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
+Link: https://lore.kernel.org/r/20221024174227.4160-1-mendiebm@gmail.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/soc/amd/yc/acp6x-mach.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/sound/soc/amd/yc/acp6x-mach.c b/sound/soc/amd/yc/acp6x-mach.c
+index 6c0f1de10429..d9715bea965e 100644
+--- a/sound/soc/amd/yc/acp6x-mach.c
++++ b/sound/soc/amd/yc/acp6x-mach.c
+@@ -206,6 +206,13 @@ static const struct dmi_system_id yc_acp_quirk_table[] = {
+                       DMI_MATCH(DMI_PRODUCT_NAME, "UM5302TA"),
+               }
+       },
++      {
++              .driver_data = &acp6x_card,
++              .matches = {
++                      DMI_MATCH(DMI_BOARD_VENDOR, "Alienware"),
++                      DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m17 R5 AMD"),
++              }
++      },
+       {}
+ };
+-- 
+2.35.1
+
diff --git a/queue-6.0/asoc-hda-intel-dsp-config-add-es83x6-quirk-for-icela.patch b/queue-6.0/asoc-hda-intel-dsp-config-add-es83x6-quirk-for-icela.patch
new file mode 100644 (file)
index 0000000..ff88787
--- /dev/null
@@ -0,0 +1,41 @@
+From b4518570e92462e2e27c2e1ecfd05535201f8670 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 31 Oct 2022 15:56:39 -0400
+Subject: ASoC: hda: intel-dsp-config: add ES83x6 quirk for IceLake
+
+From: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
+
+[ Upstream commit 5d73263f9e7c54ccb20814dc50809b9deb9e2bc7 ]
+
+Yet another hardware variant we need to handle.
+
+Link: https://github.com/thesofproject/linux/issues/3873
+Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
+Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
+Reviewed-by: Takashi Iwai <tiwai@suse.de>
+Link: https://lore.kernel.org/r/20221031195639.250062-1-pierre-louis.bossart@linux.intel.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/hda/intel-dsp-config.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/sound/hda/intel-dsp-config.c b/sound/hda/intel-dsp-config.c
+index b9eb3208f288..ae31bb127594 100644
+--- a/sound/hda/intel-dsp-config.c
++++ b/sound/hda/intel-dsp-config.c
+@@ -320,6 +320,11 @@ static const struct config_entry config_table[] = {
+                       {}
+               }
+       },
++      {
++              .flags = FLAG_SOF,
++              .device = 0x34c8,
++              .codec_hid =  &essx_83x6,
++      },
+       {
+               .flags = FLAG_SOF | FLAG_SOF_ONLY_IF_DMIC_OR_SOUNDWIRE,
+               .device = 0x34c8,
+-- 
+2.35.1
+
diff --git a/queue-6.0/asoc-intel-bytcht_es8316-add-quirk-for-the-nanote-um.patch b/queue-6.0/asoc-intel-bytcht_es8316-add-quirk-for-the-nanote-um.patch
new file mode 100644 (file)
index 0000000..a49eefe
--- /dev/null
@@ -0,0 +1,42 @@
+From 27c00cb1a0a6148ffbd8049111fd885a28c6fde3 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 25 Oct 2022 16:09:42 +0200
+Subject: ASoC: Intel: bytcht_es8316: Add quirk for the Nanote UMPC-01
+
+From: Hans de Goede <hdegoede@redhat.com>
+
+[ Upstream commit 8bb0ac0e6f64ebdf15d963c26b028de391c9bcf9 ]
+
+The Nanote UMPC-01 mini laptop has stereo speakers, while the default
+bytcht_es8316 settings assume a mono speaker setup. Add a quirk for this.
+
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+Acked-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
+Link: https://lore.kernel.org/r/20221025140942.509066-1-hdegoede@redhat.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/soc/intel/boards/bytcht_es8316.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/sound/soc/intel/boards/bytcht_es8316.c b/sound/soc/intel/boards/bytcht_es8316.c
+index 6432b83f616f..a935c5fd9edb 100644
+--- a/sound/soc/intel/boards/bytcht_es8316.c
++++ b/sound/soc/intel/boards/bytcht_es8316.c
+@@ -443,6 +443,13 @@ static const struct dmi_system_id byt_cht_es8316_quirk_table[] = {
+                                       | BYT_CHT_ES8316_INTMIC_IN2_MAP
+                                       | BYT_CHT_ES8316_JD_INVERTED),
+       },
++      {       /* Nanote UMPC-01 */
++              .matches = {
++                      DMI_MATCH(DMI_SYS_VENDOR, "RWC CO.,LTD"),
++                      DMI_MATCH(DMI_PRODUCT_NAME, "UMPC-01"),
++              },
++              .driver_data = (void *)BYT_CHT_ES8316_INTMIC_IN1_MAP,
++      },
+       {       /* Teclast X98 Plus II */
+               .matches = {
+                       DMI_MATCH(DMI_SYS_VENDOR, "TECLAST"),
+-- 
+2.35.1
+
diff --git a/queue-6.0/asoc-intel-soc-acpi-add-es83x6-support-to-icelake.patch b/queue-6.0/asoc-intel-soc-acpi-add-es83x6-support-to-icelake.patch
new file mode 100644 (file)
index 0000000..539d8c6
--- /dev/null
@@ -0,0 +1,55 @@
+From 3f81296063253c733be13b862eb159af72e98110 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 31 Oct 2022 15:58:36 -0400
+Subject: ASoC: Intel: soc-acpi: add ES83x6 support to IceLake
+
+From: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
+
+[ Upstream commit 9a1d248bb4beaf1b43d17ba12481ee0629fa29b9 ]
+
+Missing entry to find a machine driver for ES83x6-based platforms.
+
+Link: https://github.com/thesofproject/linux/issues/3873
+Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
+Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
+Link: https://lore.kernel.org/r/20221031195836.250193-1-pierre-louis.bossart@linux.intel.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/soc/intel/common/soc-acpi-intel-icl-match.c | 13 +++++++++++++
+ 1 file changed, 13 insertions(+)
+
+diff --git a/sound/soc/intel/common/soc-acpi-intel-icl-match.c b/sound/soc/intel/common/soc-acpi-intel-icl-match.c
+index b032bc07de8b..d0062f2cd256 100644
+--- a/sound/soc/intel/common/soc-acpi-intel-icl-match.c
++++ b/sound/soc/intel/common/soc-acpi-intel-icl-match.c
+@@ -10,6 +10,11 @@
+ #include <sound/soc-acpi-intel-match.h>
+ #include "../skylake/skl.h"
++static const struct snd_soc_acpi_codecs essx_83x6 = {
++      .num_codecs = 3,
++      .codecs = { "ESSX8316", "ESSX8326", "ESSX8336"},
++};
++
+ static struct skl_machine_pdata icl_pdata = {
+       .use_tplg_pcm = true,
+ };
+@@ -27,6 +32,14 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_icl_machines[] = {
+               .drv_name = "sof_rt5682",
+               .sof_tplg_filename = "sof-icl-rt5682.tplg",
+       },
++      {
++              .comp_ids = &essx_83x6,
++              .drv_name = "sof-essx8336",
++              .sof_tplg_filename = "sof-icl-es8336", /* the tplg suffix is added at run time */
++              .tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_SSP_NUMBER |
++                                      SND_SOC_ACPI_TPLG_INTEL_SSP_MSB |
++                                      SND_SOC_ACPI_TPLG_INTEL_DMIC_NUMBER,
++      },
+       {},
+ };
+ EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_icl_machines);
+-- 
+2.35.1
+
diff --git a/queue-6.0/asoc-sof-ipc3-topology-use-old-pipeline-teardown-flo.patch b/queue-6.0/asoc-sof-ipc3-topology-use-old-pipeline-teardown-flo.patch
new file mode 100644 (file)
index 0000000..dcf44a5
--- /dev/null
@@ -0,0 +1,115 @@
+From 2f7cdce6e630423bb6d05ec08bc331b3fc83d3d3 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 1 Nov 2022 13:49:13 +0200
+Subject: ASoC: SOF: ipc3-topology: use old pipeline teardown flow with SOF2.1
+ and older
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Kai Vehmanen <kai.vehmanen@linux.intel.com>
+
+[ Upstream commit 003b786b678919e072c2b12ffa73901ef840963e ]
+
+Originally in commit b2ebcf42a48f ("ASoC: SOF: free widgets in
+sof_tear_down_pipelines() for static pipelines"), freeing of pipeline
+components at suspend was only done with recent FW as there were known
+limitations in older firmware versions.
+
+Tests show that if static pipelines are used, i.e. all pipelines are
+setup whenever firmware is powered up, the reverse action of freeing all
+components at power down, leads to firmware failures with also SOF2.0
+and SOF2.1 based firmware.
+
+The problems can be specific to certain topologies with e.g. components
+not prepared to be freed at suspend (as this did not happen with older
+SOF kernels).
+
+To avoid hitting these problems when kernel is upgraded and used with an
+older firmware, bump the firmware requirement to SOF2.2 or newer. If an
+older firmware is used, and pipeline is a static one, do not free the
+components at suspend. This ensures the suspend flow remains backwards
+compatible with older firmware versions. This limitation does not apply
+if the product configuration is updated to dynamic pipelines.
+
+The limitation is not linked to firmware ABI, as the interface to free
+pipeline components has been available already before ABI3.19. The
+problem is in the implementation, so firmware version should be used to
+decide whether it is safe to use the newer flow or not. This patch adds
+a new SOF_FW_VER() macro to compare SOF firmware release versions.
+
+Link: https://github.com/thesofproject/sof/issues/6475
+Signed-off-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
+Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
+Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
+Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
+Link: https://lore.kernel.org/r/20221101114913.1292671-1-kai.vehmanen@linux.intel.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ include/sound/sof/info.h      |  4 ++++
+ sound/soc/sof/ipc3-topology.c | 15 ++++++++++-----
+ 2 files changed, 14 insertions(+), 5 deletions(-)
+
+diff --git a/include/sound/sof/info.h b/include/sound/sof/info.h
+index 65e86e4e9fd8..75193850ead0 100644
+--- a/include/sound/sof/info.h
++++ b/include/sound/sof/info.h
+@@ -36,6 +36,10 @@ enum sof_ipc_ext_data {
+       SOF_IPC_EXT_USER_ABI_INFO       = 4,
+ };
++/* Build u32 number in format MMmmmppp */
++#define SOF_FW_VER(MAJOR, MINOR, PATCH) ((uint32_t)( \
++      ((MAJOR) << 24) | ((MINOR) << 12) | (PATCH)))
++
+ /* FW version - SOF_IPC_GLB_VERSION */
+ struct sof_ipc_fw_version {
+       struct sof_ipc_hdr hdr;
+diff --git a/sound/soc/sof/ipc3-topology.c b/sound/soc/sof/ipc3-topology.c
+index a39b43850f0e..bf8a46463cec 100644
+--- a/sound/soc/sof/ipc3-topology.c
++++ b/sound/soc/sof/ipc3-topology.c
+@@ -2242,6 +2242,7 @@ static int sof_ipc3_tear_down_all_pipelines(struct snd_sof_dev *sdev, bool verif
+       struct sof_ipc_fw_version *v = &sdev->fw_ready.version;
+       struct snd_sof_widget *swidget;
+       struct snd_sof_route *sroute;
++      bool dyn_widgets = false;
+       int ret;
+       /*
+@@ -2251,12 +2252,14 @@ static int sof_ipc3_tear_down_all_pipelines(struct snd_sof_dev *sdev, bool verif
+        * topology loading the sound card unavailable to open PCMs.
+        */
+       list_for_each_entry(swidget, &sdev->widget_list, list) {
+-              if (swidget->dynamic_pipeline_widget)
++              if (swidget->dynamic_pipeline_widget) {
++                      dyn_widgets = true;
+                       continue;
++              }
+-              /* Do not free widgets for static pipelines with FW ABI older than 3.19 */
++              /* Do not free widgets for static pipelines with FW older than SOF2.2 */
+               if (!verify && !swidget->dynamic_pipeline_widget &&
+-                  v->abi_version < SOF_ABI_VER(3, 19, 0)) {
++                  SOF_FW_VER(v->major, v->minor, v->micro) < SOF_FW_VER(2, 2, 0)) {
+                       swidget->use_count = 0;
+                       swidget->complete = 0;
+                       continue;
+@@ -2270,9 +2273,11 @@ static int sof_ipc3_tear_down_all_pipelines(struct snd_sof_dev *sdev, bool verif
+       /*
+        * Tear down all pipelines associated with PCMs that did not get suspended
+        * and unset the prepare flag so that they can be set up again during resume.
+-       * Skip this step for older firmware.
++       * Skip this step for older firmware unless topology has any
++       * dynamic pipeline (in which case the step is mandatory).
+        */
+-      if (!verify && v->abi_version >= SOF_ABI_VER(3, 19, 0)) {
++      if (!verify && (dyn_widgets || SOF_FW_VER(v->major, v->minor, v->micro) >=
++          SOF_FW_VER(2, 2, 0))) {
+               ret = sof_tear_down_left_over_pipelines(sdev);
+               if (ret < 0) {
+                       dev_err(sdev->dev, "failed to tear down paused pipelines\n");
+-- 
+2.35.1
+
diff --git a/queue-6.0/asoc-sof_es8336-reduce-pop-noise-on-speaker.patch b/queue-6.0/asoc-sof_es8336-reduce-pop-noise-on-speaker.patch
new file mode 100644 (file)
index 0000000..930d763
--- /dev/null
@@ -0,0 +1,138 @@
+From dcefdd329bc6a57e6cc9d7e667c29516f8aefbad Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 28 Oct 2022 10:04:56 +0800
+Subject: ASoC: sof_es8336: reduce pop noise on speaker
+
+From: Zhu Ning <zhuning0077@gmail.com>
+
+[ Upstream commit 89cdb224f2abe37ec4ac21ba0d9ddeb5a6a9cf68 ]
+
+The Speaker GPIO needs to be turned on slightly behind the codec turned on.
+It also need to be turned off slightly before the codec turned down.
+Current code uses delay in DAPM_EVENT to do it but the mdelay delays the
+DAPM itself and thus has no effect. A delayed_work is added to turn on the
+speaker.
+The Speaker is turned off in .trigger since trigger is called slightly
+before the DAPM events.
+
+Signed-off-by: Zhu Ning <zhuning@everest-semi.com>
+
+------------
+
+v1: cancel delayed work while disabling speaker.
+Link: https://lore.kernel.org/r/20221028020456.90286-1-zhuning0077@gmail.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/soc/intel/boards/sof_es8336.c | 60 ++++++++++++++++++++++-------
+ 1 file changed, 46 insertions(+), 14 deletions(-)
+
+diff --git a/sound/soc/intel/boards/sof_es8336.c b/sound/soc/intel/boards/sof_es8336.c
+index 606cc3242a60..5c218a39ca20 100644
+--- a/sound/soc/intel/boards/sof_es8336.c
++++ b/sound/soc/intel/boards/sof_es8336.c
+@@ -63,6 +63,7 @@ struct sof_es8336_private {
+       struct snd_soc_jack jack;
+       struct list_head hdmi_pcm_list;
+       bool speaker_en;
++      struct delayed_work pcm_pop_work;
+ };
+ struct sof_hdmi_pcm {
+@@ -111,6 +112,46 @@ static void log_quirks(struct device *dev)
+               dev_info(dev, "quirk headset at mic1 port enabled\n");
+ }
++static void pcm_pop_work_events(struct work_struct *work)
++{
++      struct sof_es8336_private *priv =
++              container_of(work, struct sof_es8336_private, pcm_pop_work.work);
++
++      gpiod_set_value_cansleep(priv->gpio_speakers, priv->speaker_en);
++
++      if (quirk & SOF_ES8336_HEADPHONE_GPIO)
++              gpiod_set_value_cansleep(priv->gpio_headphone, priv->speaker_en);
++
++}
++
++static int sof_8336_trigger(struct snd_pcm_substream *substream, int cmd)
++{
++      struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream);
++      struct snd_soc_card *card = rtd->card;
++      struct sof_es8336_private *priv = snd_soc_card_get_drvdata(card);
++
++      switch (cmd) {
++      case SNDRV_PCM_TRIGGER_START:
++      case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
++      case SNDRV_PCM_TRIGGER_RESUME:
++              break;
++
++      case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
++      case SNDRV_PCM_TRIGGER_SUSPEND:
++      case SNDRV_PCM_TRIGGER_STOP:
++              if (priv->speaker_en == false)
++                      if (substream->stream == 0) {
++                              cancel_delayed_work(&priv->pcm_pop_work);
++                              gpiod_set_value_cansleep(priv->gpio_speakers, true);
++                      }
++              break;
++      default:
++              return -EINVAL;
++      }
++
++      return 0;
++}
++
+ static int sof_es8316_speaker_power_event(struct snd_soc_dapm_widget *w,
+                                         struct snd_kcontrol *kcontrol, int event)
+ {
+@@ -122,19 +163,7 @@ static int sof_es8316_speaker_power_event(struct snd_soc_dapm_widget *w,
+       priv->speaker_en = !SND_SOC_DAPM_EVENT_ON(event);
+-      if (SND_SOC_DAPM_EVENT_ON(event))
+-              msleep(70);
+-
+-      gpiod_set_value_cansleep(priv->gpio_speakers, priv->speaker_en);
+-
+-      if (!(quirk & SOF_ES8336_HEADPHONE_GPIO))
+-              return 0;
+-
+-      if (SND_SOC_DAPM_EVENT_ON(event))
+-              msleep(70);
+-
+-      gpiod_set_value_cansleep(priv->gpio_headphone, priv->speaker_en);
+-
++      queue_delayed_work(system_wq, &priv->pcm_pop_work, msecs_to_jiffies(70));
+       return 0;
+ }
+@@ -344,6 +373,7 @@ static int sof_es8336_hw_params(struct snd_pcm_substream *substream,
+ /* machine stream operations */
+ static struct snd_soc_ops sof_es8336_ops = {
+       .hw_params = sof_es8336_hw_params,
++      .trigger = sof_8336_trigger,
+ };
+ static struct snd_soc_dai_link_component platform_component[] = {
+@@ -722,7 +752,8 @@ static int sof_es8336_probe(struct platform_device *pdev)
+       }
+       INIT_LIST_HEAD(&priv->hdmi_pcm_list);
+-
++      INIT_DELAYED_WORK(&priv->pcm_pop_work,
++                              pcm_pop_work_events);
+       snd_soc_card_set_drvdata(card, priv);
+       if (mach->mach_params.dmic_num > 0) {
+@@ -751,6 +782,7 @@ static int sof_es8336_remove(struct platform_device *pdev)
+       struct snd_soc_card *card = platform_get_drvdata(pdev);
+       struct sof_es8336_private *priv = snd_soc_card_get_drvdata(card);
++      cancel_delayed_work(&priv->pcm_pop_work);
+       gpiod_put(priv->gpio_speakers);
+       device_remove_software_node(priv->codec_dev);
+       put_device(priv->codec_dev);
+-- 
+2.35.1
+
diff --git a/queue-6.0/asoc-stm32-dfsdm-manage-cb-buffers-cleanup.patch b/queue-6.0/asoc-stm32-dfsdm-manage-cb-buffers-cleanup.patch
new file mode 100644 (file)
index 0000000..09de6da
--- /dev/null
@@ -0,0 +1,52 @@
+From 75d560cb88eb72835721e2a542e655fe409aa1f4 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 9 Nov 2022 18:08:49 +0100
+Subject: ASoC: stm32: dfsdm: manage cb buffers cleanup
+
+From: Olivier Moysan <olivier.moysan@foss.st.com>
+
+[ Upstream commit 7d945b046be3d2605dbb1806e73095aadd7ae129 ]
+
+Ensure that resources allocated by iio_channel_get_all_cb()
+are released on driver unbind.
+
+Signed-off-by: Olivier Moysan <olivier.moysan@foss.st.com>
+Link: https://lore.kernel.org/r/20221109170849.273719-1-olivier.moysan@foss.st.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/soc/stm/stm32_adfsdm.c | 11 +++++++++++
+ 1 file changed, 11 insertions(+)
+
+diff --git a/sound/soc/stm/stm32_adfsdm.c b/sound/soc/stm/stm32_adfsdm.c
+index 643fc8a17018..837c1848d9bf 100644
+--- a/sound/soc/stm/stm32_adfsdm.c
++++ b/sound/soc/stm/stm32_adfsdm.c
+@@ -304,6 +304,11 @@ static int stm32_adfsdm_dummy_cb(const void *data, void *private)
+       return 0;
+ }
++static void stm32_adfsdm_cleanup(void *data)
++{
++      iio_channel_release_all_cb(data);
++}
++
+ static struct snd_soc_component_driver stm32_adfsdm_soc_platform = {
+       .open           = stm32_adfsdm_pcm_open,
+       .close          = stm32_adfsdm_pcm_close,
+@@ -350,6 +355,12 @@ static int stm32_adfsdm_probe(struct platform_device *pdev)
+       if (IS_ERR(priv->iio_cb))
+               return PTR_ERR(priv->iio_cb);
++      ret = devm_add_action_or_reset(&pdev->dev, stm32_adfsdm_cleanup, priv->iio_cb);
++      if (ret < 0)  {
++              dev_err(&pdev->dev, "Unable to add action\n");
++              return ret;
++      }
++
+       component = devm_kzalloc(&pdev->dev, sizeof(*component), GFP_KERNEL);
+       if (!component)
+               return -ENOMEM;
+-- 
+2.35.1
+
diff --git a/queue-6.0/block-make-blk_set_default_limits-private.patch b/queue-6.0/block-make-blk_set_default_limits-private.patch
new file mode 100644 (file)
index 0000000..5d86818
--- /dev/null
@@ -0,0 +1,61 @@
+From 3670616107d4e541e715b7921fb5a31510157dbf Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 10 Nov 2022 10:44:59 -0800
+Subject: block: make blk_set_default_limits() private
+
+From: Keith Busch <kbusch@kernel.org>
+
+[ Upstream commit b3228254bb6e91e57f920227f72a1a7d81925d81 ]
+
+There are no external users of this function.
+
+Signed-off-by: Keith Busch <kbusch@kernel.org>
+Reviewed-by: Christoph Hellwig <hch@lst.de>
+Link: https://lore.kernel.org/r/20221110184501.2451620-4-kbusch@meta.com
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ block/blk-settings.c   | 1 -
+ block/blk.h            | 1 +
+ include/linux/blkdev.h | 1 -
+ 3 files changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/block/blk-settings.c b/block/blk-settings.c
+index 4949ed3ce7c9..8ac1038d0c79 100644
+--- a/block/blk-settings.c
++++ b/block/blk-settings.c
+@@ -59,7 +59,6 @@ void blk_set_default_limits(struct queue_limits *lim)
+       lim->zone_write_granularity = 0;
+       lim->dma_alignment = 511;
+ }
+-EXPORT_SYMBOL(blk_set_default_limits);
+ /**
+  * blk_set_stacking_limits - set default limits for stacking devices
+diff --git a/block/blk.h b/block/blk.h
+index 52432eab621e..ff0bec16f0fa 100644
+--- a/block/blk.h
++++ b/block/blk.h
+@@ -324,6 +324,7 @@ void blk_rq_set_mixed_merge(struct request *rq);
+ bool blk_rq_merge_ok(struct request *rq, struct bio *bio);
+ enum elv_merge blk_try_merge(struct request *rq, struct bio *bio);
++void blk_set_default_limits(struct queue_limits *lim);
+ int blk_dev_init(void);
+ /*
+diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
+index 79624711fda7..e6bf06dc0770 100644
+--- a/include/linux/blkdev.h
++++ b/include/linux/blkdev.h
+@@ -946,7 +946,6 @@ extern void blk_queue_io_min(struct request_queue *q, unsigned int min);
+ extern void blk_limits_io_opt(struct queue_limits *limits, unsigned int opt);
+ extern void blk_queue_io_opt(struct request_queue *q, unsigned int opt);
+ extern void blk_set_queue_depth(struct request_queue *q, unsigned int depth);
+-extern void blk_set_default_limits(struct queue_limits *lim);
+ extern void blk_set_stacking_limits(struct queue_limits *lim);
+ extern int blk_stack_limits(struct queue_limits *t, struct queue_limits *b,
+                           sector_t offset);
+-- 
+2.35.1
+
diff --git a/queue-6.0/bpf-convert-bpf_dispatcher-to-use-static_call-not-ft.patch b/queue-6.0/bpf-convert-bpf_dispatcher-to-use-static_call-not-ft.patch
new file mode 100644 (file)
index 0000000..fab9f2d
--- /dev/null
@@ -0,0 +1,184 @@
+From 0a292d88e44e6f83d32d264c18fce66fbcfbe263 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 3 Nov 2022 13:00:14 +0100
+Subject: bpf: Convert BPF_DISPATCHER to use static_call() (not ftrace)
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Peter Zijlstra <peterz@infradead.org>
+
+[ Upstream commit c86df29d11dfba27c0a1f5039cd6fe387fbf4239 ]
+
+The dispatcher function is currently abusing the ftrace __fentry__
+call location for its own purposes -- this obviously gives trouble
+when the dispatcher and ftrace are both in use.
+
+A previous solution tried using __attribute__((patchable_function_entry()))
+which works, except it is GCC-8+ only, breaking the build on the
+earlier still supported compilers. Instead use static_call() -- which
+has its own annotations and does not conflict with ftrace -- to
+rewrite the dispatch function.
+
+By using: return static_call()(ctx, insni, bpf_func) you get a perfect
+forwarding tail call as function body (iow a single jmp instruction).
+By having the default static_call() target be bpf_dispatcher_nop_func()
+it retains the default behaviour (an indirect call to the argument
+function). Only once a dispatcher program is attached is the target
+rewritten to directly call the JIT'ed image.
+
+Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
+Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
+Tested-by: Björn Töpel <bjorn@kernel.org>
+Tested-by: Jiri Olsa <jolsa@kernel.org>
+Acked-by: Björn Töpel <bjorn@kernel.org>
+Acked-by: Jiri Olsa <jolsa@kernel.org>
+Link: https://lkml.kernel.org/r/Y1/oBlK0yFk5c/Im@hirez.programming.kicks-ass.net
+Link: https://lore.kernel.org/bpf/20221103120647.796772565@infradead.org
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ include/linux/bpf.h     | 39 ++++++++++++++++++++++++++++++++++++++-
+ kernel/bpf/dispatcher.c | 22 ++++++++--------------
+ 2 files changed, 46 insertions(+), 15 deletions(-)
+
+diff --git a/include/linux/bpf.h b/include/linux/bpf.h
+index 73662fbabd78..e811e2f99a61 100644
+--- a/include/linux/bpf.h
++++ b/include/linux/bpf.h
+@@ -27,6 +27,7 @@
+ #include <linux/bpfptr.h>
+ #include <linux/btf.h>
+ #include <linux/rcupdate_trace.h>
++#include <linux/static_call.h>
+ struct bpf_verifier_env;
+ struct bpf_verifier_log;
+@@ -894,6 +895,10 @@ struct bpf_dispatcher {
+       void *rw_image;
+       u32 image_off;
+       struct bpf_ksym ksym;
++#ifdef CONFIG_HAVE_STATIC_CALL
++      struct static_call_key *sc_key;
++      void *sc_tramp;
++#endif
+ };
+ static __always_inline __nocfi unsigned int bpf_dispatcher_nop_func(
+@@ -911,6 +916,34 @@ struct bpf_trampoline *bpf_trampoline_get(u64 key,
+                                         struct bpf_attach_target_info *tgt_info);
+ void bpf_trampoline_put(struct bpf_trampoline *tr);
+ int arch_prepare_bpf_dispatcher(void *image, void *buf, s64 *funcs, int num_funcs);
++
++/*
++ * When the architecture supports STATIC_CALL replace the bpf_dispatcher_fn
++ * indirection with a direct call to the bpf program. If the architecture does
++ * not have STATIC_CALL, avoid a double-indirection.
++ */
++#ifdef CONFIG_HAVE_STATIC_CALL
++
++#define __BPF_DISPATCHER_SC_INIT(_name)                               \
++      .sc_key = &STATIC_CALL_KEY(_name),                      \
++      .sc_tramp = STATIC_CALL_TRAMP_ADDR(_name),
++
++#define __BPF_DISPATCHER_SC(name)                             \
++      DEFINE_STATIC_CALL(bpf_dispatcher_##name##_call, bpf_dispatcher_nop_func)
++
++#define __BPF_DISPATCHER_CALL(name)                           \
++      static_call(bpf_dispatcher_##name##_call)(ctx, insnsi, bpf_func)
++
++#define __BPF_DISPATCHER_UPDATE(_d, _new)                     \
++      __static_call_update((_d)->sc_key, (_d)->sc_tramp, (_new))
++
++#else
++#define __BPF_DISPATCHER_SC_INIT(name)
++#define __BPF_DISPATCHER_SC(name)
++#define __BPF_DISPATCHER_CALL(name)           bpf_func(ctx, insnsi)
++#define __BPF_DISPATCHER_UPDATE(_d, _new)
++#endif
++
+ #define BPF_DISPATCHER_INIT(_name) {                          \
+       .mutex = __MUTEX_INITIALIZER(_name.mutex),              \
+       .func = &_name##_func,                                  \
+@@ -922,25 +955,29 @@ int arch_prepare_bpf_dispatcher(void *image, void *buf, s64 *funcs, int num_func
+               .name  = #_name,                                \
+               .lnode = LIST_HEAD_INIT(_name.ksym.lnode),      \
+       },                                                      \
++      __BPF_DISPATCHER_SC_INIT(_name##_call)                  \
+ }
+ #define DEFINE_BPF_DISPATCHER(name)                                   \
++      __BPF_DISPATCHER_SC(name);                                      \
+       noinline __nocfi unsigned int bpf_dispatcher_##name##_func(     \
+               const void *ctx,                                        \
+               const struct bpf_insn *insnsi,                          \
+               bpf_func_t bpf_func)                                    \
+       {                                                               \
+-              return bpf_func(ctx, insnsi);                           \
++              return __BPF_DISPATCHER_CALL(name);                     \
+       }                                                               \
+       EXPORT_SYMBOL(bpf_dispatcher_##name##_func);                    \
+       struct bpf_dispatcher bpf_dispatcher_##name =                   \
+               BPF_DISPATCHER_INIT(bpf_dispatcher_##name);
++
+ #define DECLARE_BPF_DISPATCHER(name)                                  \
+       unsigned int bpf_dispatcher_##name##_func(                      \
+               const void *ctx,                                        \
+               const struct bpf_insn *insnsi,                          \
+               bpf_func_t bpf_func);                                   \
+       extern struct bpf_dispatcher bpf_dispatcher_##name;
++
+ #define BPF_DISPATCHER_FUNC(name) bpf_dispatcher_##name##_func
+ #define BPF_DISPATCHER_PTR(name) (&bpf_dispatcher_##name)
+ void bpf_dispatcher_change_prog(struct bpf_dispatcher *d, struct bpf_prog *from,
+diff --git a/kernel/bpf/dispatcher.c b/kernel/bpf/dispatcher.c
+index fa64b80b8bca..7dfb8d0d5202 100644
+--- a/kernel/bpf/dispatcher.c
++++ b/kernel/bpf/dispatcher.c
+@@ -4,6 +4,7 @@
+ #include <linux/hash.h>
+ #include <linux/bpf.h>
+ #include <linux/filter.h>
++#include <linux/static_call.h>
+ /* The BPF dispatcher is a multiway branch code generator. The
+  * dispatcher is a mechanism to avoid the performance penalty of an
+@@ -104,17 +105,11 @@ static int bpf_dispatcher_prepare(struct bpf_dispatcher *d, void *image, void *b
+ static void bpf_dispatcher_update(struct bpf_dispatcher *d, int prev_num_progs)
+ {
+-      void *old, *new, *tmp;
+-      u32 noff;
+-      int err;
+-
+-      if (!prev_num_progs) {
+-              old = NULL;
+-              noff = 0;
+-      } else {
+-              old = d->image + d->image_off;
++      void *new, *tmp;
++      u32 noff = 0;
++
++      if (prev_num_progs)
+               noff = d->image_off ^ (PAGE_SIZE / 2);
+-      }
+       new = d->num_progs ? d->image + noff : NULL;
+       tmp = d->num_progs ? d->rw_image + noff : NULL;
+@@ -128,11 +123,10 @@ static void bpf_dispatcher_update(struct bpf_dispatcher *d, int prev_num_progs)
+                       return;
+       }
+-      err = bpf_arch_text_poke(d->func, BPF_MOD_JUMP, old, new);
+-      if (err || !new)
+-              return;
++      __BPF_DISPATCHER_UPDATE(d, new ?: &bpf_dispatcher_nop_func);
+-      d->image_off = noff;
++      if (new)
++              d->image_off = noff;
+ }
+ void bpf_dispatcher_change_prog(struct bpf_dispatcher *d, struct bpf_prog *from,
+-- 
+2.35.1
+
diff --git a/queue-6.0/dm-integrity-clear-the-journal-on-suspend.patch b/queue-6.0/dm-integrity-clear-the-journal-on-suspend.patch
new file mode 100644 (file)
index 0000000..185d932
--- /dev/null
@@ -0,0 +1,72 @@
+From e2db1c738c2945f7e1f867459a32db110527dc48 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 15 Nov 2022 12:51:50 -0500
+Subject: dm integrity: clear the journal on suspend
+
+From: Mikulas Patocka <mpatocka@redhat.com>
+
+[ Upstream commit 984bf2cc531e778e49298fdf6730e0396166aa21 ]
+
+There was a problem that a user burned a dm-integrity image on CDROM
+and could not activate it because it had a non-empty journal.
+
+Fix this problem by flushing the journal (done by the previous commit)
+and clearing the journal (done by this commit). Once the journal is
+cleared, dm-integrity won't attempt to replay it on the next
+activation.
+
+Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
+Signed-off-by: Mike Snitzer <snitzer@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/md/dm-integrity.c | 13 +++++++++++++
+ 1 file changed, 13 insertions(+)
+
+diff --git a/drivers/md/dm-integrity.c b/drivers/md/dm-integrity.c
+index f26a6cd09e0c..e97e9f97456d 100644
+--- a/drivers/md/dm-integrity.c
++++ b/drivers/md/dm-integrity.c
+@@ -263,6 +263,7 @@ struct dm_integrity_c {
+       struct completion crypto_backoff;
++      bool wrote_to_journal;
+       bool journal_uptodate;
+       bool just_formatted;
+       bool recalculate_flag;
+@@ -2375,6 +2376,8 @@ static void integrity_commit(struct work_struct *w)
+       if (!commit_sections)
+               goto release_flush_bios;
++      ic->wrote_to_journal = true;
++
+       i = commit_start;
+       for (n = 0; n < commit_sections; n++) {
+               for (j = 0; j < ic->journal_section_entries; j++) {
+@@ -3100,6 +3103,14 @@ static void dm_integrity_postsuspend(struct dm_target *ti)
+               queue_work(ic->writer_wq, &ic->writer_work);
+               drain_workqueue(ic->writer_wq);
+               dm_integrity_flush_buffers(ic, true);
++              if (ic->wrote_to_journal) {
++                      init_journal(ic, ic->free_section,
++                                   ic->journal_sections - ic->free_section, ic->commit_seq);
++                      if (ic->free_section) {
++                              init_journal(ic, 0, ic->free_section,
++                                           next_commit_seq(ic->commit_seq));
++                      }
++              }
+       }
+       if (ic->mode == 'B') {
+@@ -3127,6 +3138,8 @@ static void dm_integrity_resume(struct dm_target *ti)
+       DEBUG_print("resume\n");
++      ic->wrote_to_journal = false;
++
+       if (ic->provided_data_sectors != old_provided_data_sectors) {
+               if (ic->provided_data_sectors > old_provided_data_sectors &&
+                   ic->mode == 'B' &&
+-- 
+2.35.1
+
diff --git a/queue-6.0/dm-integrity-flush-the-journal-on-suspend.patch b/queue-6.0/dm-integrity-flush-the-journal-on-suspend.patch
new file mode 100644 (file)
index 0000000..bbd787c
--- /dev/null
@@ -0,0 +1,52 @@
+From 8d56fb9b595a74dc5092b3a42c9c2dbff2ae04c0 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 15 Nov 2022 12:48:26 -0500
+Subject: dm integrity: flush the journal on suspend
+
+From: Mikulas Patocka <mpatocka@redhat.com>
+
+[ Upstream commit 5e5dab5ec763d600fe0a67837dd9155bdc42f961 ]
+
+This commit flushes the journal on suspend. It is prerequisite for the
+next commit that enables activating dm integrity devices in read-only mode.
+
+Note that we deliberately didn't flush the journal on suspend, so that the
+journal replay code would be tested. However, the dm-integrity code is 5
+years old now, so that journal replay is well-tested, and we can make this
+change now.
+
+Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
+Signed-off-by: Mike Snitzer <snitzer@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/md/dm-integrity.c | 7 +------
+ 1 file changed, 1 insertion(+), 6 deletions(-)
+
+diff --git a/drivers/md/dm-integrity.c b/drivers/md/dm-integrity.c
+index e1e7b205573f..f26a6cd09e0c 100644
+--- a/drivers/md/dm-integrity.c
++++ b/drivers/md/dm-integrity.c
+@@ -2591,10 +2591,6 @@ static void integrity_writer(struct work_struct *w)
+       unsigned prev_free_sectors;
+-      /* the following test is not needed, but it tests the replay code */
+-      if (unlikely(dm_post_suspending(ic->ti)) && !ic->meta_dev)
+-              return;
+-
+       spin_lock_irq(&ic->endio_wait.lock);
+       write_start = ic->committed_section;
+       write_sections = ic->n_committed_sections;
+@@ -3101,8 +3097,7 @@ static void dm_integrity_postsuspend(struct dm_target *ti)
+       drain_workqueue(ic->commit_wq);
+       if (ic->mode == 'J') {
+-              if (ic->meta_dev)
+-                      queue_work(ic->writer_wq, &ic->writer_work);
++              queue_work(ic->writer_wq, &ic->writer_work);
+               drain_workqueue(ic->writer_wq);
+               dm_integrity_flush_buffers(ic, true);
+       }
+-- 
+2.35.1
+
diff --git a/queue-6.0/dm-integrity-set-dma_alignment-limit-in-io_hints.patch b/queue-6.0/dm-integrity-set-dma_alignment-limit-in-io_hints.patch
new file mode 100644 (file)
index 0000000..37e3467
--- /dev/null
@@ -0,0 +1,37 @@
+From 665238dfe2cde01ae3e047a17b113ab2df0594ec Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 10 Nov 2022 10:45:00 -0800
+Subject: dm-integrity: set dma_alignment limit in io_hints
+
+From: Keith Busch <kbusch@kernel.org>
+
+[ Upstream commit 29aa778bb66795e6a78b1c99beadc83887827868 ]
+
+This device mapper needs bio vectors to be sized and memory aligned to
+the logical block size. Set the minimum required queue limit
+accordingly.
+
+Signed-off-by: Keith Busch <kbusch@kernel.org>
+Reviewed-by: Mike Snitzer <snitzer@kernel.org>
+Link: https://lore.kernel.org/r/20221110184501.2451620-5-kbusch@meta.com
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/md/dm-integrity.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/md/dm-integrity.c b/drivers/md/dm-integrity.c
+index aaf2472df6e5..e1e7b205573f 100644
+--- a/drivers/md/dm-integrity.c
++++ b/drivers/md/dm-integrity.c
+@@ -3370,6 +3370,7 @@ static void dm_integrity_io_hints(struct dm_target *ti, struct queue_limits *lim
+               limits->logical_block_size = ic->sectors_per_block << SECTOR_SHIFT;
+               limits->physical_block_size = ic->sectors_per_block << SECTOR_SHIFT;
+               blk_limits_io_min(limits, ic->sectors_per_block << SECTOR_SHIFT);
++              limits->dma_alignment = limits->logical_block_size - 1;
+       }
+ }
+-- 
+2.35.1
+
diff --git a/queue-6.0/dm-log-writes-set-dma_alignment-limit-in-io_hints.patch b/queue-6.0/dm-log-writes-set-dma_alignment-limit-in-io_hints.patch
new file mode 100644 (file)
index 0000000..19d75f9
--- /dev/null
@@ -0,0 +1,37 @@
+From a2bb97fda79bb557402e0412c36255dcbdd773fe Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 10 Nov 2022 10:45:01 -0800
+Subject: dm-log-writes: set dma_alignment limit in io_hints
+
+From: Keith Busch <kbusch@kernel.org>
+
+[ Upstream commit 50a893359cd2643ee1afc96eedc9e7084cab49fa ]
+
+This device mapper needs bio vectors to be sized and memory aligned to
+the logical block size. Set the minimum required queue limit
+accordingly.
+
+Signed-off-by: Keith Busch <kbusch@kernel.org>
+Reviewed-by: Mike Snitzer <snitzer@kernel.org>
+Link: https://lore.kernel.org/r/20221110184501.2451620-6-kbusch@meta.com
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/md/dm-log-writes.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/md/dm-log-writes.c b/drivers/md/dm-log-writes.c
+index 20fd688f72e7..178e13a5b059 100644
+--- a/drivers/md/dm-log-writes.c
++++ b/drivers/md/dm-log-writes.c
+@@ -875,6 +875,7 @@ static void log_writes_io_hints(struct dm_target *ti, struct queue_limits *limit
+       limits->logical_block_size = bdev_logical_block_size(lc->dev->bdev);
+       limits->physical_block_size = bdev_physical_block_size(lc->dev->bdev);
+       limits->io_min = limits->physical_block_size;
++      limits->dma_alignment = limits->logical_block_size - 1;
+ }
+ #if IS_ENABLED(CONFIG_FS_DAX)
+-- 
+2.35.1
+
diff --git a/queue-6.0/drm-amd-display-use-uclk-pstate-latency-for-fw-assis.patch b/queue-6.0/drm-amd-display-use-uclk-pstate-latency-for-fw-assis.patch
new file mode 100644 (file)
index 0000000..2a458cf
--- /dev/null
@@ -0,0 +1,73 @@
+From 0c1e3577bdc59c024e42824b68f4dba2d31c0c33 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 3 Nov 2022 18:38:13 -0400
+Subject: drm/amd/display: use uclk pstate latency for fw assisted mclk
+ validation dcn32
+
+From: Dillon Varone <Dillon.Varone@amd.com>
+
+[ Upstream commit c149947b188c651b943c1d8ca1494d1a98a3e27f ]
+
+[WHY?]
+DCN32 uses fclk pstate watermarks for dummy pstate, and must always be
+supported.
+
+[HOW?]
+Validation needs to be run with fclk pstate latency set
+as the dummy pstate latency to get correct prefetch and bandwidth outputs.
+
+Reviewed-by: Jun Lei <Jun.Lei@amd.com>
+Acked-by: Tom Chung <chiahsuan.chung@amd.com>
+Signed-off-by: Dillon Varone <Dillon.Varone@amd.com>
+Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ .../gpu/drm/amd/display/dc/dml/dcn32/dcn32_fpu.c | 16 +++++++++++++++-
+ 1 file changed, 15 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/amd/display/dc/dml/dcn32/dcn32_fpu.c b/drivers/gpu/drm/amd/display/dc/dml/dcn32/dcn32_fpu.c
+index b9d3a4000c3d..6ed76e194423 100644
+--- a/drivers/gpu/drm/amd/display/dc/dml/dcn32/dcn32_fpu.c
++++ b/drivers/gpu/drm/amd/display/dc/dml/dcn32/dcn32_fpu.c
+@@ -1700,6 +1700,12 @@ void dcn32_calculate_wm_and_dlg_fpu(struct dc *dc, struct dc_state *context,
+                        */
+                       context->bw_ctx.dml.soc.dram_clock_change_latency_us =
+                                       dc->clk_mgr->bw_params->wm_table.nv_entries[WM_A].dml_input.pstate_latency_us;
++                      /* For DCN32/321 need to validate with fclk pstate change latency equal to dummy so
++                       * prefetch is scheduled correctly to account for dummy pstate.
++                       */
++                      if (dummy_latency_index == 0)
++                              context->bw_ctx.dml.soc.fclk_change_latency_us =
++                                              dc->clk_mgr->bw_params->dummy_pstate_table[dummy_latency_index].dummy_pstate_latency_us;
+                       dcn32_internal_validate_bw(dc, context, pipes, &pipe_cnt, &vlevel, false);
+                       maxMpcComb = context->bw_ctx.dml.vba.maxMpcComb;
+                       dcfclk = context->bw_ctx.dml.vba.DCFCLKState[vlevel][context->bw_ctx.dml.vba.maxMpcComb];
+@@ -1879,6 +1885,10 @@ void dcn32_calculate_wm_and_dlg_fpu(struct dc *dc, struct dc_state *context,
+       context->perf_params.stutter_period_us = context->bw_ctx.dml.vba.StutterPeriod;
++      if (context->bw_ctx.bw.dcn.clk.fw_based_mclk_switching && dummy_latency_index == 0)
++              context->bw_ctx.dml.soc.fclk_change_latency_us =
++                              dc->clk_mgr->bw_params->dummy_pstate_table[dummy_latency_index].dummy_pstate_latency_us;
++
+       dcn32_calculate_dlg_params(dc, context, pipes, pipe_cnt, vlevel);
+       if (!pstate_en)
+@@ -1886,8 +1896,12 @@ void dcn32_calculate_wm_and_dlg_fpu(struct dc *dc, struct dc_state *context,
+               context->bw_ctx.dml.soc.dram_clock_change_latency_us =
+                               dc->clk_mgr->bw_params->wm_table.nv_entries[WM_A].dml_input.pstate_latency_us;
+-      if (context->bw_ctx.bw.dcn.clk.fw_based_mclk_switching)
++      if (context->bw_ctx.bw.dcn.clk.fw_based_mclk_switching) {
+               dcn30_setup_mclk_switch_using_fw_based_vblank_stretch(dc, context);
++              if (dummy_latency_index == 0)
++                      context->bw_ctx.dml.soc.fclk_change_latency_us =
++                                      dc->clk_mgr->bw_params->wm_table.nv_entries[WM_A].dml_input.fclk_change_latency_us;
++      }
+ }
+ static void dcn32_get_optimal_dcfclk_fclk_for_uclk(unsigned int uclk_mts,
+-- 
+2.35.1
+
diff --git a/queue-6.0/drm-amdgpu-disable-baco-support-on-more-cards.patch b/queue-6.0/drm-amdgpu-disable-baco-support-on-more-cards.patch
new file mode 100644 (file)
index 0000000..7d87c5b
--- /dev/null
@@ -0,0 +1,38 @@
+From 670c61040b8c4af7d67e9c6e0325e984cbd5dd38 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 11 Nov 2022 16:54:18 +0800
+Subject: drm/amdgpu: disable BACO support on more cards
+
+From: Guchun Chen <guchun.chen@amd.com>
+
+[ Upstream commit 192039f12233c9063d040266e7c98188c7c89dec ]
+
+Otherwise, some unexpected PCIE AER errors will be observed
+in runtime suspend/resume cycle.
+
+Signed-off-by: Guchun Chen <guchun.chen@amd.com>
+Acked-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c
+index 8292839bc42a..9ce0dcc5bb90 100644
+--- a/drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c
++++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c
+@@ -378,6 +378,10 @@ static void sienna_cichlid_check_bxco_support(struct smu_context *smu)
+                   ((adev->pdev->device == 0x73BF) &&
+                   (adev->pdev->revision == 0xCF)) ||
+                   ((adev->pdev->device == 0x7422) &&
++                  (adev->pdev->revision == 0x00)) ||
++                  ((adev->pdev->device == 0x73A3) &&
++                  (adev->pdev->revision == 0x00)) ||
++                  ((adev->pdev->device == 0x73E3) &&
+                   (adev->pdev->revision == 0x00)))
+                       smu_baco->platform_support = false;
+-- 
+2.35.1
+
diff --git a/queue-6.0/drm-amdkfd-fix-a-memory-limit-issue.patch b/queue-6.0/drm-amdkfd-fix-a-memory-limit-issue.patch
new file mode 100644 (file)
index 0000000..8bd63f8
--- /dev/null
@@ -0,0 +1,42 @@
+From 43a3c386fdd95d504d1c92b33034909d81bd8ddc Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 14 Nov 2022 11:43:48 -0500
+Subject: drm/amdkfd: Fix a memory limit issue
+
+From: Eric Huang <jinhuieric.huang@amd.com>
+
+[ Upstream commit 6f9eea4392a178af19360694b1db64f985d0b459 ]
+
+It is to resolve a regression, which fails to allocate
+VRAM due to no free memory in application, the reason
+is we add check of vram_pin_size for memory limit, and
+application is pinning the memory for Peerdirect, KFD
+should not count it in memory limit. So removing
+vram_pin_size will resolve it.
+
+Signed-off-by: Eric Huang <jinhuieric.huang@amd.com>
+Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
+index 93ad00453f4b..7db4aef9c45c 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
+@@ -170,9 +170,7 @@ int amdgpu_amdkfd_reserve_mem_limit(struct amdgpu_device *adev,
+           (kfd_mem_limit.ttm_mem_used + ttm_mem_needed >
+            kfd_mem_limit.max_ttm_mem_limit) ||
+           (adev && adev->kfd.vram_used + vram_needed >
+-           adev->gmc.real_vram_size -
+-           atomic64_read(&adev->vram_pin_size) -
+-           reserved_for_pt)) {
++           adev->gmc.real_vram_size - reserved_for_pt)) {
+               ret = -ENOMEM;
+               goto release;
+       }
+-- 
+2.35.1
+
diff --git a/queue-6.0/gpu-host1x-avoid-trying-to-use-gart-on-tegra20.patch b/queue-6.0/gpu-host1x-avoid-trying-to-use-gart-on-tegra20.patch
new file mode 100644 (file)
index 0000000..ea0f41d
--- /dev/null
@@ -0,0 +1,61 @@
+From 30e93bd81c72da68126ef2b35ee2699b6199fada Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 20 Oct 2022 15:23:40 +0100
+Subject: gpu: host1x: Avoid trying to use GART on Tegra20
+
+From: Robin Murphy <robin.murphy@arm.com>
+
+[ Upstream commit c2418f911a31a266af4fbaca998dc73d3676475a ]
+
+Since commit c7e3ca515e78 ("iommu/tegra: gart: Do not register with
+bus") quite some time ago, the GART driver has effectively disabled
+itself to avoid issues with the GPU driver expecting it to work in ways
+that it doesn't. As of commit 57365a04c921 ("iommu: Move bus setup to
+IOMMU device registration") that bodge no longer works, but really the
+GPU driver should be responsible for its own behaviour anyway. Make the
+workaround explicit.
+
+Reported-by: Jon Hunter <jonathanh@nvidia.com>
+Suggested-by: Dmitry Osipenko <digetx@gmail.com>
+Signed-off-by: Robin Murphy <robin.murphy@arm.com>
+Tested-by: Jon Hunter <jonathanh@nvidia.com>
+Signed-off-by: Thierry Reding <treding@nvidia.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/tegra/drm.c | 4 ++++
+ drivers/gpu/host1x/dev.c    | 4 ++++
+ 2 files changed, 8 insertions(+)
+
+diff --git a/drivers/gpu/drm/tegra/drm.c b/drivers/gpu/drm/tegra/drm.c
+index 6748ec1e0005..a1f909dac89a 100644
+--- a/drivers/gpu/drm/tegra/drm.c
++++ b/drivers/gpu/drm/tegra/drm.c
+@@ -1093,6 +1093,10 @@ static bool host1x_drm_wants_iommu(struct host1x_device *dev)
+       struct host1x *host1x = dev_get_drvdata(dev->dev.parent);
+       struct iommu_domain *domain;
++      /* Our IOMMU usage policy doesn't currently play well with GART */
++      if (of_machine_is_compatible("nvidia,tegra20"))
++              return false;
++
+       /*
+        * If the Tegra DRM clients are backed by an IOMMU, push buffers are
+        * likely to be allocated beyond the 32-bit boundary if sufficient
+diff --git a/drivers/gpu/host1x/dev.c b/drivers/gpu/host1x/dev.c
+index 0cd3f97e7e49..f60ea24db0ec 100644
+--- a/drivers/gpu/host1x/dev.c
++++ b/drivers/gpu/host1x/dev.c
+@@ -292,6 +292,10 @@ static void host1x_setup_virtualization_tables(struct host1x *host)
+ static bool host1x_wants_iommu(struct host1x *host1x)
+ {
++      /* Our IOMMU usage policy doesn't currently play well with GART */
++      if (of_machine_is_compatible("nvidia,tegra20"))
++              return false;
++
+       /*
+        * If we support addressing a maximum of 32 bits of physical memory
+        * and if the host1x firewall is enabled, there's no need to enable
+-- 
+2.35.1
+
diff --git a/queue-6.0/input-goodix-try-resetting-the-controller-when-no-co.patch b/queue-6.0/input-goodix-try-resetting-the-controller-when-no-co.patch
new file mode 100644 (file)
index 0000000..66aead3
--- /dev/null
@@ -0,0 +1,68 @@
+From b8612b4408985ce1dace2964ae67bd48846e1bbb Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 3 Nov 2022 11:31:43 -0700
+Subject: Input: goodix - try resetting the controller when no config is set
+
+From: Hans de Goede <hdegoede@redhat.com>
+
+[ Upstream commit c7e37cc6240767f794678d11704935d49cc81d59 ]
+
+On ACPI systems (irq_pin_access_method == IRQ_PIN_ACCESS_ACPI_*) the driver
+does not reset the controller at probe time, because sometimes the system
+firmware loads a config and resetting might loose this config.
+
+On the Nanote UMPC-01 device OTOH the config is in flash of the controller,
+the controller needs a reset to load this; and the system firmware does not
+reset the controller on a cold boot.
+
+To fix the Nanote UMPC-01 touchscreen not working on a cold boot, try
+resetting the controller and then re-reading the config when encountering
+a config with 0 width/height/max_touch_num value and the controller has
+not already been reset by goodix_ts_probe().
+
+This should be safe to do in general because normally we should never
+encounter a config with 0 width/height/max_touch_num. Doing this in
+general not only avoids the need for a DMI quirk, but also might help
+other systems.
+
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+Reviewed-by: Bastien Nocera <hadess@hadess.net>
+Link: https://lore.kernel.org/r/20221025122930.421377-2-hdegoede@redhat.com
+Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/input/touchscreen/goodix.c | 11 +++++++++++
+ 1 file changed, 11 insertions(+)
+
+diff --git a/drivers/input/touchscreen/goodix.c b/drivers/input/touchscreen/goodix.c
+index 21c0dddbe41d..25e6ba132bbc 100644
+--- a/drivers/input/touchscreen/goodix.c
++++ b/drivers/input/touchscreen/goodix.c
+@@ -1158,6 +1158,7 @@ static int goodix_configure_dev(struct goodix_ts_data *ts)
+       input_set_abs_params(ts->input_dev, ABS_MT_WIDTH_MAJOR, 0, 255, 0, 0);
+       input_set_abs_params(ts->input_dev, ABS_MT_TOUCH_MAJOR, 0, 255, 0, 0);
++retry_read_config:
+       /* Read configuration and apply touchscreen parameters */
+       goodix_read_config(ts);
+@@ -1165,6 +1166,16 @@ static int goodix_configure_dev(struct goodix_ts_data *ts)
+       touchscreen_parse_properties(ts->input_dev, true, &ts->prop);
+       if (!ts->prop.max_x || !ts->prop.max_y || !ts->max_touch_num) {
++              if (!ts->reset_controller_at_probe &&
++                  ts->irq_pin_access_method != IRQ_PIN_ACCESS_NONE) {
++                      dev_info(&ts->client->dev, "Config not set, resetting controller\n");
++                      /* Retry after a controller reset */
++                      ts->reset_controller_at_probe = true;
++                      error = goodix_reset(ts);
++                      if (error)
++                              return error;
++                      goto retry_read_config;
++              }
+               dev_err(&ts->client->dev,
+                       "Invalid config (%d, %d, %d), using defaults\n",
+                       ts->prop.max_x, ts->prop.max_y, ts->max_touch_num);
+-- 
+2.35.1
+
diff --git a/queue-6.0/input-i8042-apply-probe-defer-to-more-asus-zenbook-m.patch b/queue-6.0/input-i8042-apply-probe-defer-to-more-asus-zenbook-m.patch
new file mode 100644 (file)
index 0000000..3b1ad1d
--- /dev/null
@@ -0,0 +1,52 @@
+From 586d1794280b1a92d9f63f5345ae085261781f3e Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 8 Nov 2022 09:30:52 -0800
+Subject: Input: i8042 - apply probe defer to more ASUS ZenBook models
+
+From: Takashi Iwai <tiwai@suse.de>
+
+[ Upstream commit 26c263bf1847d4dadba016a0457c4c5f446407bf ]
+
+There are yet a few more ASUS ZenBook models that require the deferred
+probe.  At least, there are different ZenBook UX325x and UX425x
+models.  Let's extend the DMI matching table entries for adapting
+those missing models.
+
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Link: https://lore.kernel.org/r/20221108142027.28480-1-tiwai@suse.de
+Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/input/serio/i8042-x86ia64io.h | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h
+index 4fbec7bbecca..5043dc7b8fb3 100644
+--- a/drivers/input/serio/i8042-x86ia64io.h
++++ b/drivers/input/serio/i8042-x86ia64io.h
+@@ -114,18 +114,18 @@ static const struct dmi_system_id i8042_dmi_quirk_table[] __initconst = {
+               .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_NEVER)
+       },
+       {
+-              /* ASUS ZenBook UX425UA */
++              /* ASUS ZenBook UX425UA/QA */
+               .matches = {
+                       DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
+-                      DMI_MATCH(DMI_PRODUCT_NAME, "ZenBook UX425UA"),
++                      DMI_MATCH(DMI_PRODUCT_NAME, "ZenBook UX425"),
+               },
+               .driver_data = (void *)(SERIO_QUIRK_PROBE_DEFER | SERIO_QUIRK_RESET_NEVER)
+       },
+       {
+-              /* ASUS ZenBook UM325UA */
++              /* ASUS ZenBook UM325UA/QA */
+               .matches = {
+                       DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
+-                      DMI_MATCH(DMI_PRODUCT_NAME, "ZenBook UX325UA_UM325UA"),
++                      DMI_MATCH(DMI_PRODUCT_NAME, "ZenBook UX325"),
+               },
+               .driver_data = (void *)(SERIO_QUIRK_PROBE_DEFER | SERIO_QUIRK_RESET_NEVER)
+       },
+-- 
+2.35.1
+
diff --git a/queue-6.0/input-soc_button_array-add-acer-switch-v-10-to-dmi_u.patch b/queue-6.0/input-soc_button_array-add-acer-switch-v-10-to-dmi_u.patch
new file mode 100644 (file)
index 0000000..05064ac
--- /dev/null
@@ -0,0 +1,46 @@
+From aefcfc8061670dae400960a2f9e5ace8c069e691 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 7 Nov 2022 10:30:41 -0800
+Subject: Input: soc_button_array - add Acer Switch V 10 to
+ dmi_use_low_level_irq[]
+
+From: Hans de Goede <hdegoede@redhat.com>
+
+[ Upstream commit e13757f52496444b994a7ac67b6e517a15d89bbc ]
+
+Like on the Acer Switch 10 SW5-012, the Acer Switch V 10 SW5-017's _LID
+method messes with home- and power-button GPIO IRQ settings, causing an
+IRQ storm.
+
+Add a quirk entry for the Acer Switch V 10 to the dmi_use_low_level_irq[]
+DMI quirk list, to use low-level IRQs on this model, fixing the IRQ storm.
+
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+Link: https://lore.kernel.org/r/20221106215320.67109-2-hdegoede@redhat.com
+Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/input/misc/soc_button_array.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/drivers/input/misc/soc_button_array.c b/drivers/input/misc/soc_button_array.c
+index 50497dd05027..09489380afda 100644
+--- a/drivers/input/misc/soc_button_array.c
++++ b/drivers/input/misc/soc_button_array.c
+@@ -77,6 +77,13 @@ static const struct dmi_system_id dmi_use_low_level_irq[] = {
+                       DMI_MATCH(DMI_PRODUCT_NAME, "Aspire SW5-012"),
+               },
+       },
++      {
++              /* Acer Switch V 10 SW5-017, same issue as Acer Switch 10 SW5-012. */
++              .matches = {
++                      DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
++                      DMI_MATCH(DMI_PRODUCT_NAME, "SW5-017"),
++              },
++      },
+       {
+               /*
+                * Acer One S1003. _LID method messes with power-button GPIO
+-- 
+2.35.1
+
diff --git a/queue-6.0/input-soc_button_array-add-use_low_level_irq-module-.patch b/queue-6.0/input-soc_button_array-add-use_low_level_irq-module-.patch
new file mode 100644 (file)
index 0000000..8139b99
--- /dev/null
@@ -0,0 +1,64 @@
+From 707312e150e7abadd4497700ac8b284c93b3a53a Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 7 Nov 2022 10:30:25 -0800
+Subject: Input: soc_button_array - add use_low_level_irq module parameter
+
+From: Hans de Goede <hdegoede@redhat.com>
+
+[ Upstream commit 8e9ada1d0e72b4737df400fe1bba48dc42a68df7 ]
+
+It seems that the Windows drivers for the ACPI0011 soc_button_array
+device use low level triggered IRQs rather then using edge triggering.
+
+Some ACPI tables depend on this, directly poking the GPIO controller's
+registers to clear the trigger type when closing a laptop's/2-in-1's lid
+and re-instating the trigger when opening the lid again.
+
+Linux sets the edge/level on which to trigger to both low+high since
+it is using edge type IRQs, the ACPI tables then ends up also setting
+the bit for level IRQs and since both low and high level have been
+selected by Linux we get an IRQ storm leading to soft lockups.
+
+As a workaround for this the soc_button_array already contains
+a DMI quirk table with device models known to have this issue.
+
+Add a module parameter for this so that users can easily test if their
+device is affected too and so that they can use the module parameter
+as a workaround.
+
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+Link: https://lore.kernel.org/r/20221106215320.67109-1-hdegoede@redhat.com
+Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/input/misc/soc_button_array.c | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/input/misc/soc_button_array.c b/drivers/input/misc/soc_button_array.c
+index 480476121c01..50497dd05027 100644
+--- a/drivers/input/misc/soc_button_array.c
++++ b/drivers/input/misc/soc_button_array.c
+@@ -18,6 +18,10 @@
+ #include <linux/gpio.h>
+ #include <linux/platform_device.h>
++static bool use_low_level_irq;
++module_param(use_low_level_irq, bool, 0444);
++MODULE_PARM_DESC(use_low_level_irq, "Use low-level triggered IRQ instead of edge triggered");
++
+ struct soc_button_info {
+       const char *name;
+       int acpi_index;
+@@ -164,7 +168,8 @@ soc_button_device_create(struct platform_device *pdev,
+               }
+               /* See dmi_use_low_level_irq[] comment */
+-              if (!autorepeat && dmi_check_system(dmi_use_low_level_irq)) {
++              if (!autorepeat && (use_low_level_irq ||
++                                  dmi_check_system(dmi_use_low_level_irq))) {
+                       irq_set_irq_type(irq, IRQ_TYPE_LEVEL_LOW);
+                       gpio_keys[n_buttons].irq = irq;
+                       gpio_keys[n_buttons].gpio = -ENOENT;
+-- 
+2.35.1
+
diff --git a/queue-6.0/input-synaptics-switch-touchpad-on-hp-laptop-15-da30.patch b/queue-6.0/input-synaptics-switch-touchpad-on-hp-laptop-15-da30.patch
new file mode 100644 (file)
index 0000000..893605a
--- /dev/null
@@ -0,0 +1,35 @@
+From 9c200f4d192cec4c3b31136e176c06d164ca453e Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 15 Oct 2022 20:41:17 -0700
+Subject: Input: synaptics - switch touchpad on HP Laptop 15-da3001TU to RMI
+ mode
+
+From: Aman Dhoot <amandhoot12@gmail.com>
+
+[ Upstream commit ac5408991ea6b06e29129b4d4861097c4c3e0d59 ]
+
+The device works fine in native RMI mode, there is no reason to use legacy
+PS/2 mode with it.
+
+Signed-off-by: Aman Dhoot <amandhoot12@gmail.com>
+Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/input/mouse/synaptics.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
+index ffad142801b3..973a4c1d5d09 100644
+--- a/drivers/input/mouse/synaptics.c
++++ b/drivers/input/mouse/synaptics.c
+@@ -191,6 +191,7 @@ static const char * const smbus_pnp_ids[] = {
+       "SYN3221", /* HP 15-ay000 */
+       "SYN323d", /* HP Spectre X360 13-w013dx */
+       "SYN3257", /* HP Envy 13-ad105ng */
++      "SYN3286", /* HP Laptop 15-da3001TU */
+       NULL
+ };
+-- 
+2.35.1
+
diff --git a/queue-6.0/net-usb-qmi_wwan-add-telit-0x103a-composition.patch b/queue-6.0/net-usb-qmi_wwan-add-telit-0x103a-composition.patch
new file mode 100644 (file)
index 0000000..72f3de6
--- /dev/null
@@ -0,0 +1,40 @@
+From 752a8021987d339cfc266c0243e53f0ce637135b Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 15 Nov 2022 11:58:59 +0100
+Subject: net: usb: qmi_wwan: add Telit 0x103a composition
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Enrico Sau <enrico.sau@gmail.com>
+
+[ Upstream commit e103ba33998d0f25653cc8ebe745b68d1ee10cda ]
+
+Add the following Telit LE910C4-WWX composition:
+
+0x103a: rmnet
+
+Signed-off-by: Enrico Sau <enrico.sau@gmail.com>
+Acked-by: Bjørn Mork <bjorn@mork.no>
+Link: https://lore.kernel.org/r/20221115105859.14324-1-enrico.sau@gmail.com
+Signed-off-by: Paolo Abeni <pabeni@redhat.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/usb/qmi_wwan.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c
+index 26c34a7c21bd..afd6faa4c2ec 100644
+--- a/drivers/net/usb/qmi_wwan.c
++++ b/drivers/net/usb/qmi_wwan.c
+@@ -1357,6 +1357,7 @@ static const struct usb_device_id products[] = {
+       {QMI_FIXED_INTF(0x2357, 0x0201, 4)},    /* TP-LINK HSUPA Modem MA180 */
+       {QMI_FIXED_INTF(0x2357, 0x9000, 4)},    /* TP-LINK MA260 */
+       {QMI_QUIRK_SET_DTR(0x1bc7, 0x1031, 3)}, /* Telit LE910C1-EUX */
++      {QMI_QUIRK_SET_DTR(0x1bc7, 0x103a, 0)}, /* Telit LE910C4-WWX */
+       {QMI_QUIRK_SET_DTR(0x1bc7, 0x1040, 2)}, /* Telit LE922A */
+       {QMI_QUIRK_SET_DTR(0x1bc7, 0x1050, 2)}, /* Telit FN980 */
+       {QMI_QUIRK_SET_DTR(0x1bc7, 0x1057, 2)}, /* Telit FN980 */
+-- 
+2.35.1
+
diff --git a/queue-6.0/pinctrl-qcom-sc8280xp-rectify-ufs-reset-pins.patch b/queue-6.0/pinctrl-qcom-sc8280xp-rectify-ufs-reset-pins.patch
new file mode 100644 (file)
index 0000000..c21ba97
--- /dev/null
@@ -0,0 +1,41 @@
+From dc73f0976666a20806474b3ea69001765203d826 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 3 Nov 2022 11:10:51 -0700
+Subject: pinctrl: qcom: sc8280xp: Rectify UFS reset pins
+
+From: Anjana Hari <quic_ahari@quicinc.com>
+
+[ Upstream commit f04a2862f9c3f64962b8709c75d788efba6df26b ]
+
+UFS reset pin offsets are wrongly configured for SC8280XP,
+correcting the same for both UFS instances here.
+
+Signed-off-by: Anjana Hari <quic_ahari@quicinc.com>
+Signed-off-by: Bjorn Andersson <quic_bjorande@quicinc.com>
+Reviewed-by: Andrew Halaney <ahalaney@redhat.com>
+Tested-by: Andrew Halaney <ahalaney@redhat.com> # QDrive3
+Link: https://lore.kernel.org/r/20221103181051.26912-1-quic_bjorande@quicinc.com
+Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/pinctrl/qcom/pinctrl-sc8280xp.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/pinctrl/qcom/pinctrl-sc8280xp.c b/drivers/pinctrl/qcom/pinctrl-sc8280xp.c
+index aa2075390f3e..e96c00686a25 100644
+--- a/drivers/pinctrl/qcom/pinctrl-sc8280xp.c
++++ b/drivers/pinctrl/qcom/pinctrl-sc8280xp.c
+@@ -1873,8 +1873,8 @@ static const struct msm_pingroup sc8280xp_groups[] = {
+       [225] = PINGROUP(225, hs3_mi2s, phase_flag, _, _, _, _, egpio),
+       [226] = PINGROUP(226, hs3_mi2s, phase_flag, _, _, _, _, egpio),
+       [227] = PINGROUP(227, hs3_mi2s, phase_flag, _, _, _, _, egpio),
+-      [228] = UFS_RESET(ufs_reset, 0xf1004),
+-      [229] = UFS_RESET(ufs1_reset, 0xf3004),
++      [228] = UFS_RESET(ufs_reset, 0xf1000),
++      [229] = UFS_RESET(ufs1_reset, 0xf3000),
+       [230] = SDC_QDSD_PINGROUP(sdc2_clk, 0xe8000, 14, 6),
+       [231] = SDC_QDSD_PINGROUP(sdc2_cmd, 0xe8000, 11, 3),
+       [232] = SDC_QDSD_PINGROUP(sdc2_data, 0xe8000, 9, 0),
+-- 
+2.35.1
+
diff --git a/queue-6.0/platform-surface-aggregator_registry-add-support-for.patch b/queue-6.0/platform-surface-aggregator_registry-add-support-for.patch
new file mode 100644 (file)
index 0000000..a8da681
--- /dev/null
@@ -0,0 +1,78 @@
+From 836e34422e5030be12ec6a3fcaa062922f9ea295 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 13 Nov 2022 19:59:51 +0100
+Subject: platform/surface: aggregator_registry: Add support for Surface Pro 9
+
+From: Maximilian Luz <luzmaximilian@gmail.com>
+
+[ Upstream commit d076f30957b1d026e9f6340691624926db0d369d ]
+
+Add device nodes to enable support for battery and charger status, the
+ACPI platform profile, as well as internal and type-cover HID devices
+(including sensors, touchpad, keyboard, and other miscellaneous devices)
+on the Surface Pro 9.
+
+This does not include support for a tablet-mode switch yet, as that is
+now handled via the POS subsystem (unlike the Surface Pro 8, where it is
+handled via the KIP subsystem) and therefore needs further changes.
+
+While we're at it, also add the missing comment for the Surface Pro 8.
+
+Signed-off-by: Maximilian Luz <luzmaximilian@gmail.com>
+Link: https://lore.kernel.org/r/20221113185951.224759-2-luzmaximilian@gmail.com
+Reviewed-by: Hans de Goede <hdegoede@redhat.com>
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ .../surface/surface_aggregator_registry.c     | 21 +++++++++++++++++++
+ 1 file changed, 21 insertions(+)
+
+diff --git a/drivers/platform/surface/surface_aggregator_registry.c b/drivers/platform/surface/surface_aggregator_registry.c
+index 585911020cea..db82c2a7c567 100644
+--- a/drivers/platform/surface/surface_aggregator_registry.c
++++ b/drivers/platform/surface/surface_aggregator_registry.c
+@@ -268,6 +268,7 @@ static const struct software_node *ssam_node_group_sp7[] = {
+       NULL,
+ };
++/* Devices for Surface Pro 8 */
+ static const struct software_node *ssam_node_group_sp8[] = {
+       &ssam_node_root,
+       &ssam_node_hub_kip,
+@@ -284,6 +285,23 @@ static const struct software_node *ssam_node_group_sp8[] = {
+       NULL,
+ };
++/* Devices for Surface Pro 9 */
++static const struct software_node *ssam_node_group_sp9[] = {
++      &ssam_node_root,
++      &ssam_node_hub_kip,
++      &ssam_node_bat_ac,
++      &ssam_node_bat_main,
++      &ssam_node_tmp_pprof,
++      /* TODO: Tablet mode switch (via POS subsystem) */
++      &ssam_node_hid_kip_keyboard,
++      &ssam_node_hid_kip_penstash,
++      &ssam_node_hid_kip_touchpad,
++      &ssam_node_hid_kip_fwupd,
++      &ssam_node_hid_sam_sensors,
++      &ssam_node_hid_sam_ucm_ucsi,
++      NULL,
++};
++
+ /* -- SSAM platform/meta-hub driver. ---------------------------------------- */
+@@ -303,6 +321,9 @@ static const struct acpi_device_id ssam_platform_hub_match[] = {
+       /* Surface Pro 8 */
+       { "MSHW0263", (unsigned long)ssam_node_group_sp8 },
++      /* Surface Pro 9 */
++      { "MSHW0343", (unsigned long)ssam_node_group_sp9 },
++
+       /* Surface Book 2 */
+       { "MSHW0107", (unsigned long)ssam_node_group_gen5 },
+-- 
+2.35.1
+
diff --git a/queue-6.0/platform-surface-aggregator_registry-add-support-for.patch-2290 b/queue-6.0/platform-surface-aggregator_registry-add-support-for.patch-2290
new file mode 100644 (file)
index 0000000..2fb4911
--- /dev/null
@@ -0,0 +1,59 @@
+From 46f493e43408250d0f8b58e3a235e22c8b83a2c7 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 16 Nov 2022 00:14:40 +0100
+Subject: platform/surface: aggregator_registry: Add support for Surface Laptop
+ 5
+
+From: Maximilian Luz <luzmaximilian@gmail.com>
+
+[ Upstream commit 4a567d164d0e0c57e7b694b988db86361f130cb7 ]
+
+Add device nodes to enable support for battery and charger status, the
+ACPI platform profile, as well as internal HID devices (including
+touchpad and keyboard) on the Surface Laptop 5.
+
+Signed-off-by: Maximilian Luz <luzmaximilian@gmail.com>
+Link: https://lore.kernel.org/r/20221115231440.1338142-1-luzmaximilian@gmail.com
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ .../surface/surface_aggregator_registry.c        | 16 ++++++++++++++++
+ 1 file changed, 16 insertions(+)
+
+diff --git a/drivers/platform/surface/surface_aggregator_registry.c b/drivers/platform/surface/surface_aggregator_registry.c
+index db82c2a7c567..023f126121d7 100644
+--- a/drivers/platform/surface/surface_aggregator_registry.c
++++ b/drivers/platform/surface/surface_aggregator_registry.c
+@@ -234,6 +234,19 @@ static const struct software_node *ssam_node_group_sl3[] = {
+       NULL,
+ };
++/* Devices for Surface Laptop 5. */
++static const struct software_node *ssam_node_group_sl5[] = {
++      &ssam_node_root,
++      &ssam_node_bat_ac,
++      &ssam_node_bat_main,
++      &ssam_node_tmp_pprof,
++      &ssam_node_hid_main_keyboard,
++      &ssam_node_hid_main_touchpad,
++      &ssam_node_hid_main_iid5,
++      &ssam_node_hid_sam_ucm_ucsi,
++      NULL,
++};
++
+ /* Devices for Surface Laptop Studio. */
+ static const struct software_node *ssam_node_group_sls[] = {
+       &ssam_node_root,
+@@ -345,6 +358,9 @@ static const struct acpi_device_id ssam_platform_hub_match[] = {
+       /* Surface Laptop 4 (13", Intel) */
+       { "MSHW0250", (unsigned long)ssam_node_group_sl3 },
++      /* Surface Laptop 5 */
++      { "MSHW0350", (unsigned long)ssam_node_group_sl5 },
++
+       /* Surface Laptop Go 1 */
+       { "MSHW0118", (unsigned long)ssam_node_group_slg1 },
+-- 
+2.35.1
+
diff --git a/queue-6.0/platform-x86-acer-wmi-enable-sw_tablet_mode-on-switc.patch b/queue-6.0/platform-x86-acer-wmi-enable-sw_tablet_mode-on-switc.patch
new file mode 100644 (file)
index 0000000..108b347
--- /dev/null
@@ -0,0 +1,48 @@
+From 0f680638773025470dff1b3daf60aa13bde4c083 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 11 Nov 2022 12:16:39 +0100
+Subject: platform/x86: acer-wmi: Enable SW_TABLET_MODE on Switch V 10
+ (SW5-017)
+
+From: Hans de Goede <hdegoede@redhat.com>
+
+[ Upstream commit 1e817b889c7d8c14e7005258e15fec62edafe03c ]
+
+Like the Acer Switch 10 (SW5-012) and Acer Switch 10 (S1003) models
+the Acer Switch V 10 (SW5-017) supports reporting SW_TABLET_MODE
+through acer-wmi.
+
+Add a DMI quirk for the SW5-017 setting force_caps to ACER_CAP_KBD_DOCK
+(these devices have no other acer-wmi based functionality).
+
+Cc: Rudolf Polzer <rpolzer@google.com>
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+Link: https://lore.kernel.org/r/20221111111639.35730-1-hdegoede@redhat.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/platform/x86/acer-wmi.c | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+diff --git a/drivers/platform/x86/acer-wmi.c b/drivers/platform/x86/acer-wmi.c
+index f1259d81d86d..df4c1f08f0c6 100644
+--- a/drivers/platform/x86/acer-wmi.c
++++ b/drivers/platform/x86/acer-wmi.c
+@@ -564,6 +564,15 @@ static const struct dmi_system_id acer_quirks[] __initconst = {
+               },
+               .driver_data = (void *)ACER_CAP_KBD_DOCK,
+       },
++      {
++              .callback = set_force_caps,
++              .ident = "Acer Aspire Switch V 10 SW5-017",
++              .matches = {
++                      DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Acer"),
++                      DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "SW5-017"),
++              },
++              .driver_data = (void *)ACER_CAP_KBD_DOCK,
++      },
+       {
+               .callback = set_force_caps,
+               .ident = "Acer One 10 (S1003)",
+-- 
+2.35.1
+
diff --git a/queue-6.0/platform-x86-asus-wmi-add-missing-pci_dev_put-in-asu.patch b/queue-6.0/platform-x86-asus-wmi-add-missing-pci_dev_put-in-asu.patch
new file mode 100644 (file)
index 0000000..8fedeed
--- /dev/null
@@ -0,0 +1,39 @@
+From f3275794226d0d8529b511862195385331b718c8 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 11 Nov 2022 18:07:52 +0800
+Subject: platform/x86: asus-wmi: add missing pci_dev_put() in
+ asus_wmi_set_xusb2pr()
+
+From: Xiongfeng Wang <wangxiongfeng2@huawei.com>
+
+[ Upstream commit d0cdd85046b15089df71a50548617ac1025300d0 ]
+
+pci_get_device() will increase the reference count for the returned
+pci_dev. We need to use pci_dev_put() to decrease the reference count
+before asus_wmi_set_xusb2pr() returns.
+
+Signed-off-by: Xiongfeng Wang <wangxiongfeng2@huawei.com>
+Link: https://lore.kernel.org/r/20221111100752.134311-1-wangxiongfeng2@huawei.com
+Reviewed-by: Hans de Goede <hdegoede@redhat.com>
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/platform/x86/asus-wmi.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
+index eec7d0ed7cf2..8e1979b477a7 100644
+--- a/drivers/platform/x86/asus-wmi.c
++++ b/drivers/platform/x86/asus-wmi.c
+@@ -1656,6 +1656,8 @@ static void asus_wmi_set_xusb2pr(struct asus_wmi *asus)
+       pci_write_config_dword(xhci_pdev, USB_INTEL_XUSB2PR,
+                               cpu_to_le32(ports_available));
++      pci_dev_put(xhci_pdev);
++
+       pr_info("set USB_INTEL_XUSB2PR old: 0x%04x, new: 0x%04x\n",
+                       orig_ports_available, ports_available);
+ }
+-- 
+2.35.1
+
diff --git a/queue-6.0/platform-x86-hp-wmi-ignore-smart-experience-app-even.patch b/queue-6.0/platform-x86-hp-wmi-ignore-smart-experience-app-even.patch
new file mode 100644 (file)
index 0000000..9003b2e
--- /dev/null
@@ -0,0 +1,48 @@
+From 2ff5bcbdc196bd24a3057200f46799418f2c0d3a Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 14 Nov 2022 15:38:41 +0800
+Subject: platform/x86: hp-wmi: Ignore Smart Experience App event
+
+From: Kai-Heng Feng <kai.heng.feng@canonical.com>
+
+[ Upstream commit 8b9b6a044b408283b086702b1d9e3cf4ba45b426 ]
+
+Sometimes hp-wmi driver complains on system resume:
+[ 483.116451] hp_wmi: Unknown event_id - 33 - 0x0
+
+According to HP it's a feature called "HP Smart Experience App" and it's
+safe to be ignored.
+
+Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
+Link: https://lore.kernel.org/r/20221114073842.205392-1-kai.heng.feng@canonical.com
+Reviewed-by: Hans de Goede <hdegoede@redhat.com>
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/platform/x86/hp-wmi.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/drivers/platform/x86/hp-wmi.c b/drivers/platform/x86/hp-wmi.c
+index 4fbe91769c91..788381e4c6a6 100644
+--- a/drivers/platform/x86/hp-wmi.c
++++ b/drivers/platform/x86/hp-wmi.c
+@@ -90,6 +90,7 @@ enum hp_wmi_event_ids {
+       HPWMI_PEAKSHIFT_PERIOD          = 0x0F,
+       HPWMI_BATTERY_CHARGE_PERIOD     = 0x10,
+       HPWMI_SANITIZATION_MODE         = 0x17,
++      HPWMI_SMART_EXPERIENCE_APP      = 0x21,
+ };
+ /*
+@@ -857,6 +858,8 @@ static void hp_wmi_notify(u32 value, void *context)
+               break;
+       case HPWMI_SANITIZATION_MODE:
+               break;
++      case HPWMI_SMART_EXPERIENCE_APP:
++              break;
+       default:
+               pr_info("Unknown event_id - %d - 0x%x\n", event_id, event_data);
+               break;
+-- 
+2.35.1
+
diff --git a/queue-6.0/platform-x86-ideapad-laptop-add-module-parameters-to.patch b/queue-6.0/platform-x86-ideapad-laptop-add-module-parameters-to.patch
new file mode 100644 (file)
index 0000000..bd2d0e4
--- /dev/null
@@ -0,0 +1,64 @@
+From 7d66922145f6cf8fe214b457061b2fdcb0971c80 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 15 Nov 2022 20:34:00 +0100
+Subject: platform/x86: ideapad-laptop: Add module parameters to match DMI
+ quirk tables
+
+From: Hans de Goede <hdegoede@redhat.com>
+
+[ Upstream commit b44fd994e45112b58b6c1dec4451d9a925784589 ]
+
+Add module parameters to allow setting the hw_rfkill_switch and
+set_fn_lock_led feature flags for testing these on laptops which are not
+on the DMI-id based allow lists for these 2 flags.
+
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+Link: https://lore.kernel.org/r/20221115193400.376159-1-hdegoede@redhat.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/platform/x86/ideapad-laptop.c | 22 +++++++++++++++++++---
+ 1 file changed, 19 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/platform/x86/ideapad-laptop.c b/drivers/platform/x86/ideapad-laptop.c
+index 6c460cdc05bb..3ea8fc6a9ca3 100644
+--- a/drivers/platform/x86/ideapad-laptop.c
++++ b/drivers/platform/x86/ideapad-laptop.c
+@@ -155,7 +155,21 @@ MODULE_PARM_DESC(no_bt_rfkill, "No rfkill for bluetooth.");
+ static bool allow_v4_dytc;
+ module_param(allow_v4_dytc, bool, 0444);
+-MODULE_PARM_DESC(allow_v4_dytc, "Enable DYTC version 4 platform-profile support.");
++MODULE_PARM_DESC(allow_v4_dytc,
++      "Enable DYTC version 4 platform-profile support. "
++      "If you need this please report this to: platform-driver-x86@vger.kernel.org");
++
++static bool hw_rfkill_switch;
++module_param(hw_rfkill_switch, bool, 0444);
++MODULE_PARM_DESC(hw_rfkill_switch,
++      "Enable rfkill support for laptops with a hw on/off wifi switch/slider. "
++      "If you need this please report this to: platform-driver-x86@vger.kernel.org");
++
++static bool set_fn_lock_led;
++module_param(set_fn_lock_led, bool, 0444);
++MODULE_PARM_DESC(set_fn_lock_led,
++      "Enable driver based updates of the fn-lock LED on fn-lock changes. "
++      "If you need this please report this to: platform-driver-x86@vger.kernel.org");
+ /*
+  * ACPI Helpers
+@@ -1572,8 +1586,10 @@ static void ideapad_check_features(struct ideapad_private *priv)
+       acpi_handle handle = priv->adev->handle;
+       unsigned long val;
+-      priv->features.set_fn_lock_led = dmi_check_system(set_fn_lock_led_list);
+-      priv->features.hw_rfkill_switch = dmi_check_system(hw_rfkill_list);
++      priv->features.set_fn_lock_led =
++              set_fn_lock_led || dmi_check_system(set_fn_lock_led_list);
++      priv->features.hw_rfkill_switch =
++              hw_rfkill_switch || dmi_check_system(hw_rfkill_list);
+       /* Most ideapads with ELAN0634 touchpad don't use EC touchpad switch */
+       if (acpi_dev_present("ELAN0634", NULL, -1))
+-- 
+2.35.1
+
diff --git a/queue-6.0/platform-x86-ideapad-laptop-fix-interrupt-storm-on-f.patch b/queue-6.0/platform-x86-ideapad-laptop-fix-interrupt-storm-on-f.patch
new file mode 100644 (file)
index 0000000..e8b9461
--- /dev/null
@@ -0,0 +1,83 @@
+From 2d33848f119effee23a56cddc83df78b207c94b0 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 11 Nov 2022 14:32:09 +0000
+Subject: platform/x86: ideapad-laptop: Fix interrupt storm on fn-lock toggle
+ on some Yoga laptops
+
+From: Arnav Rawat <arnavr3@illinois.edu>
+
+[ Upstream commit 81a5603a0f50fd7cf17ff21d106052215eaf2028 ]
+
+Commit 3ae86d2d4704 ("platform/x86: ideapad-laptop: Fix Legion 5 Fn lock
+LED") uses the WMI event-id for the fn-lock event on some Legion 5 laptops
+to manually toggle the fn-lock LED because the EC does not do it itself.
+However, the same WMI ID is also sent on some Yoga laptops. Here, setting
+the fn-lock state is not valid behavior, and causes the EC to spam
+interrupts until the laptop is rebooted.
+
+Add a set_fn_lock_led_list[] DMI-id list and only enable the workaround to
+manually set the LED on models on this list.
+
+Link: https://bugzilla.kernel.org/show_bug.cgi?id=212671
+Cc: Meng Dong <whenov@gmail.com>
+Signed-off-by: Arnav Rawat <arnavr3@illinois.edu>
+Link: https://lore.kernel.org/r/12093851.O9o76ZdvQC@fedora
+[hdegoede@redhat.com: Check DMI-id list only once and store the result]
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/platform/x86/ideapad-laptop.c | 17 +++++++++++++++++
+ 1 file changed, 17 insertions(+)
+
+diff --git a/drivers/platform/x86/ideapad-laptop.c b/drivers/platform/x86/ideapad-laptop.c
+index 33b3dfdd1b08..6c460cdc05bb 100644
+--- a/drivers/platform/x86/ideapad-laptop.c
++++ b/drivers/platform/x86/ideapad-laptop.c
+@@ -136,6 +136,7 @@ struct ideapad_private {
+               bool dytc                 : 1;
+               bool fan_mode             : 1;
+               bool fn_lock              : 1;
++              bool set_fn_lock_led      : 1;
+               bool hw_rfkill_switch     : 1;
+               bool kbd_bl               : 1;
+               bool touchpad_ctrl_via_ec : 1;
+@@ -1501,6 +1502,9 @@ static void ideapad_wmi_notify(u32 value, void *context)
+               ideapad_input_report(priv, value);
+               break;
+       case 208:
++              if (!priv->features.set_fn_lock_led)
++                      break;
++
+               if (!eval_hals(priv->adev->handle, &result)) {
+                       bool state = test_bit(HALS_FNLOCK_STATE_BIT, &result);
+@@ -1514,6 +1518,18 @@ static void ideapad_wmi_notify(u32 value, void *context)
+ }
+ #endif
++/* On some models we need to call exec_sals(SALS_FNLOCK_ON/OFF) to set the LED */
++static const struct dmi_system_id set_fn_lock_led_list[] = {
++      {
++              /* https://bugzilla.kernel.org/show_bug.cgi?id=212671 */
++              .matches = {
++                      DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
++                      DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo Legion R7000P2020H"),
++              }
++      },
++      {}
++};
++
+ /*
+  * Some ideapads have a hardware rfkill switch, but most do not have one.
+  * Reading VPCCMD_R_RF always results in 0 on models without a hardware rfkill,
+@@ -1556,6 +1572,7 @@ static void ideapad_check_features(struct ideapad_private *priv)
+       acpi_handle handle = priv->adev->handle;
+       unsigned long val;
++      priv->features.set_fn_lock_led = dmi_check_system(set_fn_lock_led_list);
+       priv->features.hw_rfkill_switch = dmi_check_system(hw_rfkill_list);
+       /* Most ideapads with ELAN0634 touchpad don't use EC touchpad switch */
+-- 
+2.35.1
+
diff --git a/queue-6.0/platform-x86-thinkpad_acpi-enable-s2idle-quirk-for-2.patch b/queue-6.0/platform-x86-thinkpad_acpi-enable-s2idle-quirk-for-2.patch
new file mode 100644 (file)
index 0000000..49b3fe2
--- /dev/null
@@ -0,0 +1,51 @@
+From 68dcd50fe26fdb4b37ddad0b29393b4b0c8755bd Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 8 Nov 2022 08:20:23 +0100
+Subject: platform/x86: thinkpad_acpi: Enable s2idle quirk for 21A1 machine
+ type
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Lennard Gäher <gaeher@mpi-sws.org>
+
+[ Upstream commit 53e16a6e3e69425081f8352e13e9fd23bf1abfca ]
+
+Previously, the s2idle quirk was only active for the 21A0 machine type
+of the P14s Gen2a product. This also enables it for the second 21A1 type,
+thus reducing wake-up times from s2idle.
+
+Signed-off-by: Lennard Gäher <gaeher@mpi-sws.org>
+Suggested-by: Mario Limonciello <mario.limonciello@amd.com>
+Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
+Link: https://gitlab.freedesktop.org/drm/amd/-/issues/2181
+Link: https://lore.kernel.org/r/20221108072023.17069-1-gaeher@mpi-sws.org
+Reviewed-by: Hans de Goede <hdegoede@redhat.com>
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/platform/x86/thinkpad_acpi.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
+index 353507d18e11..67dc335fca0c 100644
+--- a/drivers/platform/x86/thinkpad_acpi.c
++++ b/drivers/platform/x86/thinkpad_acpi.c
+@@ -4497,6 +4497,14 @@ static const struct dmi_system_id fwbug_list[] __initconst = {
+                       DMI_MATCH(DMI_PRODUCT_NAME, "21A0"),
+               }
+       },
++      {
++              .ident = "P14s Gen2 AMD",
++              .driver_data = &quirk_s2idle_bug,
++              .matches = {
++                      DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
++                      DMI_MATCH(DMI_PRODUCT_NAME, "21A1"),
++              }
++      },
+       {}
+ };
+-- 
+2.35.1
+
diff --git a/queue-6.0/revert-tty-n_gsm-avoid-call-of-sleeping-functions-fr.patch b/queue-6.0/revert-tty-n_gsm-avoid-call-of-sleeping-functions-fr.patch
new file mode 100644 (file)
index 0000000..35c58c4
--- /dev/null
@@ -0,0 +1,264 @@
+From 1c67b8d787b5f9ed65c3f17ad111725eb417ab17 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 8 Oct 2022 14:02:20 +0300
+Subject: Revert "tty: n_gsm: avoid call of sleeping functions from atomic
+ context"
+
+From: Fedor Pchelkin <pchelkin@ispras.ru>
+
+[ Upstream commit acdab4cb4ba7e5f94d2b422ebd7bf4bf68178fb2 ]
+
+This reverts commit 902e02ea9385373ce4b142576eef41c642703955.
+
+The above commit is reverted as the usage of tx_mutex seems not to solve
+the problem described in 902e02ea9385 ("tty: n_gsm: avoid call of sleeping
+functions from atomic context") and just moves the bug to another place.
+
+Signed-off-by: Fedor Pchelkin <pchelkin@ispras.ru>
+Signed-off-by: Alexey Khoroshilov <khoroshilov@ispras.ru>
+Reviewed-by: Daniel Starke <daniel.starke@siemens.com>
+Link: https://lore.kernel.org/r/20221008110221.13645-2-pchelkin@ispras.ru
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/tty/n_gsm.c | 53 +++++++++++++++++++++++++--------------------
+ 1 file changed, 29 insertions(+), 24 deletions(-)
+
+diff --git a/drivers/tty/n_gsm.c b/drivers/tty/n_gsm.c
+index 2a0de70e0be4..3cd6a2c55d9c 100644
+--- a/drivers/tty/n_gsm.c
++++ b/drivers/tty/n_gsm.c
+@@ -248,7 +248,7 @@ struct gsm_mux {
+       bool constipated;               /* Asked by remote to shut up */
+       bool has_devices;               /* Devices were registered */
+-      struct mutex tx_mutex;
++      spinlock_t tx_lock;
+       unsigned int tx_bytes;          /* TX data outstanding */
+ #define TX_THRESH_HI          8192
+ #define TX_THRESH_LO          2048
+@@ -680,6 +680,7 @@ static int gsm_send(struct gsm_mux *gsm, int addr, int cr, int control)
+       struct gsm_msg *msg;
+       u8 *dp;
+       int ocr;
++      unsigned long flags;
+       msg = gsm_data_alloc(gsm, addr, 0, control);
+       if (!msg)
+@@ -701,10 +702,10 @@ static int gsm_send(struct gsm_mux *gsm, int addr, int cr, int control)
+       gsm_print_packet("Q->", addr, cr, control, NULL, 0);
+-      mutex_lock(&gsm->tx_mutex);
++      spin_lock_irqsave(&gsm->tx_lock, flags);
+       list_add_tail(&msg->list, &gsm->tx_ctrl_list);
+       gsm->tx_bytes += msg->len;
+-      mutex_unlock(&gsm->tx_mutex);
++      spin_unlock_irqrestore(&gsm->tx_lock, flags);
+       gsmld_write_trigger(gsm);
+       return 0;
+@@ -729,7 +730,7 @@ static void gsm_dlci_clear_queues(struct gsm_mux *gsm, struct gsm_dlci *dlci)
+       spin_unlock_irqrestore(&dlci->lock, flags);
+       /* Clear data packets in MUX write queue */
+-      mutex_lock(&gsm->tx_mutex);
++      spin_lock_irqsave(&gsm->tx_lock, flags);
+       list_for_each_entry_safe(msg, nmsg, &gsm->tx_data_list, list) {
+               if (msg->addr != addr)
+                       continue;
+@@ -737,7 +738,7 @@ static void gsm_dlci_clear_queues(struct gsm_mux *gsm, struct gsm_dlci *dlci)
+               list_del(&msg->list);
+               kfree(msg);
+       }
+-      mutex_unlock(&gsm->tx_mutex);
++      spin_unlock_irqrestore(&gsm->tx_lock, flags);
+ }
+ /**
+@@ -1023,9 +1024,10 @@ static void __gsm_data_queue(struct gsm_dlci *dlci, struct gsm_msg *msg)
+ static void gsm_data_queue(struct gsm_dlci *dlci, struct gsm_msg *msg)
+ {
+-      mutex_lock(&dlci->gsm->tx_mutex);
++      unsigned long flags;
++      spin_lock_irqsave(&dlci->gsm->tx_lock, flags);
+       __gsm_data_queue(dlci, msg);
+-      mutex_unlock(&dlci->gsm->tx_mutex);
++      spin_unlock_irqrestore(&dlci->gsm->tx_lock, flags);
+ }
+ /**
+@@ -1037,7 +1039,7 @@ static void gsm_data_queue(struct gsm_dlci *dlci, struct gsm_msg *msg)
+  *    is data. Keep to the MRU of the mux. This path handles the usual tty
+  *    interface which is a byte stream with optional modem data.
+  *
+- *    Caller must hold the tx_mutex of the mux.
++ *    Caller must hold the tx_lock of the mux.
+  */
+ static int gsm_dlci_data_output(struct gsm_mux *gsm, struct gsm_dlci *dlci)
+@@ -1097,7 +1099,7 @@ static int gsm_dlci_data_output(struct gsm_mux *gsm, struct gsm_dlci *dlci)
+  *    is data. Keep to the MRU of the mux. This path handles framed data
+  *    queued as skbuffs to the DLCI.
+  *
+- *    Caller must hold the tx_mutex of the mux.
++ *    Caller must hold the tx_lock of the mux.
+  */
+ static int gsm_dlci_data_output_framed(struct gsm_mux *gsm,
+@@ -1113,7 +1115,7 @@ static int gsm_dlci_data_output_framed(struct gsm_mux *gsm,
+       if (dlci->adaption == 4)
+               overhead = 1;
+-      /* dlci->skb is locked by tx_mutex */
++      /* dlci->skb is locked by tx_lock */
+       if (dlci->skb == NULL) {
+               dlci->skb = skb_dequeue_tail(&dlci->skb_list);
+               if (dlci->skb == NULL)
+@@ -1167,7 +1169,7 @@ static int gsm_dlci_data_output_framed(struct gsm_mux *gsm,
+  *    Push an empty frame in to the transmit queue to update the modem status
+  *    bits and to transmit an optional break.
+  *
+- *    Caller must hold the tx_mutex of the mux.
++ *    Caller must hold the tx_lock of the mux.
+  */
+ static int gsm_dlci_modem_output(struct gsm_mux *gsm, struct gsm_dlci *dlci,
+@@ -1281,12 +1283,13 @@ static int gsm_dlci_data_sweep(struct gsm_mux *gsm)
+ static void gsm_dlci_data_kick(struct gsm_dlci *dlci)
+ {
++      unsigned long flags;
+       int sweep;
+       if (dlci->constipated)
+               return;
+-      mutex_lock(&dlci->gsm->tx_mutex);
++      spin_lock_irqsave(&dlci->gsm->tx_lock, flags);
+       /* If we have nothing running then we need to fire up */
+       sweep = (dlci->gsm->tx_bytes < TX_THRESH_LO);
+       if (dlci->gsm->tx_bytes == 0) {
+@@ -1297,7 +1300,7 @@ static void gsm_dlci_data_kick(struct gsm_dlci *dlci)
+       }
+       if (sweep)
+               gsm_dlci_data_sweep(dlci->gsm);
+-      mutex_unlock(&dlci->gsm->tx_mutex);
++      spin_unlock_irqrestore(&dlci->gsm->tx_lock, flags);
+ }
+ /*
+@@ -1991,13 +1994,14 @@ static void gsm_dlci_command(struct gsm_dlci *dlci, const u8 *data, int len)
+ static void gsm_kick_timeout(struct work_struct *work)
+ {
+       struct gsm_mux *gsm = container_of(work, struct gsm_mux, kick_timeout.work);
++      unsigned long flags;
+       int sent = 0;
+-      mutex_lock(&gsm->tx_mutex);
++      spin_lock_irqsave(&gsm->tx_lock, flags);
+       /* If we have nothing running then we need to fire up */
+       if (gsm->tx_bytes < TX_THRESH_LO)
+               sent = gsm_dlci_data_sweep(gsm);
+-      mutex_unlock(&gsm->tx_mutex);
++      spin_unlock_irqrestore(&gsm->tx_lock, flags);
+       if (sent && debug & 4)
+               pr_info("%s TX queue stalled\n", __func__);
+@@ -2527,7 +2531,6 @@ static void gsm_free_mux(struct gsm_mux *gsm)
+                       break;
+               }
+       }
+-      mutex_destroy(&gsm->tx_mutex);
+       mutex_destroy(&gsm->mutex);
+       kfree(gsm->txframe);
+       kfree(gsm->buf);
+@@ -2599,7 +2602,6 @@ static struct gsm_mux *gsm_alloc_mux(void)
+       }
+       spin_lock_init(&gsm->lock);
+       mutex_init(&gsm->mutex);
+-      mutex_init(&gsm->tx_mutex);
+       kref_init(&gsm->ref);
+       INIT_LIST_HEAD(&gsm->tx_ctrl_list);
+       INIT_LIST_HEAD(&gsm->tx_data_list);
+@@ -2608,6 +2610,7 @@ static struct gsm_mux *gsm_alloc_mux(void)
+       INIT_WORK(&gsm->tx_work, gsmld_write_task);
+       init_waitqueue_head(&gsm->event);
+       spin_lock_init(&gsm->control_lock);
++      spin_lock_init(&gsm->tx_lock);
+       gsm->t1 = T1;
+       gsm->t2 = T2;
+@@ -2632,7 +2635,6 @@ static struct gsm_mux *gsm_alloc_mux(void)
+       }
+       spin_unlock(&gsm_mux_lock);
+       if (i == MAX_MUX) {
+-              mutex_destroy(&gsm->tx_mutex);
+               mutex_destroy(&gsm->mutex);
+               kfree(gsm->txframe);
+               kfree(gsm->buf);
+@@ -2788,16 +2790,17 @@ static void gsmld_write_trigger(struct gsm_mux *gsm)
+ static void gsmld_write_task(struct work_struct *work)
+ {
+       struct gsm_mux *gsm = container_of(work, struct gsm_mux, tx_work);
++      unsigned long flags;
+       int i, ret;
+       /* All outstanding control channel and control messages and one data
+        * frame is sent.
+        */
+       ret = -ENODEV;
+-      mutex_lock(&gsm->tx_mutex);
++      spin_lock_irqsave(&gsm->tx_lock, flags);
+       if (gsm->tty)
+               ret = gsm_data_kick(gsm);
+-      mutex_unlock(&gsm->tx_mutex);
++      spin_unlock_irqrestore(&gsm->tx_lock, flags);
+       if (ret >= 0)
+               for (i = 0; i < NUM_DLCI; i++)
+@@ -3005,6 +3008,7 @@ static ssize_t gsmld_write(struct tty_struct *tty, struct file *file,
+                          const unsigned char *buf, size_t nr)
+ {
+       struct gsm_mux *gsm = tty->disc_data;
++      unsigned long flags;
+       int space;
+       int ret;
+@@ -3012,13 +3016,13 @@ static ssize_t gsmld_write(struct tty_struct *tty, struct file *file,
+               return -ENODEV;
+       ret = -ENOBUFS;
+-      mutex_lock(&gsm->tx_mutex);
++      spin_lock_irqsave(&gsm->tx_lock, flags);
+       space = tty_write_room(tty);
+       if (space >= nr)
+               ret = tty->ops->write(tty, buf, nr);
+       else
+               set_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
+-      mutex_unlock(&gsm->tx_mutex);
++      spin_unlock_irqrestore(&gsm->tx_lock, flags);
+       return ret;
+ }
+@@ -3315,13 +3319,14 @@ static struct tty_ldisc_ops tty_ldisc_packet = {
+ static void gsm_modem_upd_via_data(struct gsm_dlci *dlci, u8 brk)
+ {
+       struct gsm_mux *gsm = dlci->gsm;
++      unsigned long flags;
+       if (dlci->state != DLCI_OPEN || dlci->adaption != 2)
+               return;
+-      mutex_lock(&gsm->tx_mutex);
++      spin_lock_irqsave(&gsm->tx_lock, flags);
+       gsm_dlci_modem_output(gsm, dlci, brk);
+-      mutex_unlock(&gsm->tx_mutex);
++      spin_unlock_irqrestore(&gsm->tx_lock, flags);
+ }
+ /**
+-- 
+2.35.1
+
diff --git a/queue-6.0/revert-tty-n_gsm-replace-kicktimer-with-delayed_work.patch b/queue-6.0/revert-tty-n_gsm-replace-kicktimer-with-delayed_work.patch
new file mode 100644 (file)
index 0000000..9454ed9
--- /dev/null
@@ -0,0 +1,89 @@
+From bed94b769d73f6b09ea9a4e8678f7c0541e28472 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 8 Oct 2022 14:02:21 +0300
+Subject: Revert "tty: n_gsm: replace kicktimer with delayed_work"
+
+From: Fedor Pchelkin <pchelkin@ispras.ru>
+
+[ Upstream commit 15743ae50e04aa907131e3ae8d66e9a2964ea232 ]
+
+This reverts commit c9ab053e56ce13a949977398c8edc12e6c02fc95.
+
+The above commit is reverted as it was a prerequisite for tx_mutex
+introduction and tx_mutex has been removed as it does not correctly
+work in order to protect tx data.
+
+Signed-off-by: Fedor Pchelkin <pchelkin@ispras.ru>
+Signed-off-by: Alexey Khoroshilov <khoroshilov@ispras.ru>
+Reviewed-by: Daniel Starke <daniel.starke@siemens.com>
+Link: https://lore.kernel.org/r/20221008110221.13645-3-pchelkin@ispras.ru
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/tty/n_gsm.c | 16 ++++++++--------
+ 1 file changed, 8 insertions(+), 8 deletions(-)
+
+diff --git a/drivers/tty/n_gsm.c b/drivers/tty/n_gsm.c
+index 3cd6a2c55d9c..ae02aed6bd0c 100644
+--- a/drivers/tty/n_gsm.c
++++ b/drivers/tty/n_gsm.c
+@@ -256,7 +256,7 @@ struct gsm_mux {
+       struct list_head tx_data_list;  /* Pending data packets */
+       /* Control messages */
+-      struct delayed_work kick_timeout;       /* Kick TX queuing on timeout */
++      struct timer_list kick_timer;   /* Kick TX queuing on timeout */
+       struct timer_list t2_timer;     /* Retransmit timer for commands */
+       int cretries;                   /* Command retry counter */
+       struct gsm_control *pending_cmd;/* Our current pending command */
+@@ -1009,7 +1009,7 @@ static void __gsm_data_queue(struct gsm_dlci *dlci, struct gsm_msg *msg)
+       gsm->tx_bytes += msg->len;
+       gsmld_write_trigger(gsm);
+-      schedule_delayed_work(&gsm->kick_timeout, 10 * gsm->t1 * HZ / 100);
++      mod_timer(&gsm->kick_timer, jiffies + 10 * gsm->t1 * HZ / 100);
+ }
+ /**
+@@ -1984,16 +1984,16 @@ static void gsm_dlci_command(struct gsm_dlci *dlci, const u8 *data, int len)
+ }
+ /**
+- *    gsm_kick_timeout        -       transmit if possible
+- *    @work: work contained in our gsm object
++ *    gsm_kick_timer  -       transmit if possible
++ *    @t: timer contained in our gsm object
+  *
+  *    Transmit data from DLCIs if the queue is empty. We can't rely on
+  *    a tty wakeup except when we filled the pipe so we need to fire off
+  *    new data ourselves in other cases.
+  */
+-static void gsm_kick_timeout(struct work_struct *work)
++static void gsm_kick_timer(struct timer_list *t)
+ {
+-      struct gsm_mux *gsm = container_of(work, struct gsm_mux, kick_timeout.work);
++      struct gsm_mux *gsm = from_timer(gsm, t, kick_timer);
+       unsigned long flags;
+       int sent = 0;
+@@ -2458,7 +2458,7 @@ static void gsm_cleanup_mux(struct gsm_mux *gsm, bool disc)
+       }
+       /* Finish outstanding timers, making sure they are done */
+-      cancel_delayed_work_sync(&gsm->kick_timeout);
++      del_timer_sync(&gsm->kick_timer);
+       del_timer_sync(&gsm->t2_timer);
+       /* Finish writing to ldisc */
+@@ -2605,7 +2605,7 @@ static struct gsm_mux *gsm_alloc_mux(void)
+       kref_init(&gsm->ref);
+       INIT_LIST_HEAD(&gsm->tx_ctrl_list);
+       INIT_LIST_HEAD(&gsm->tx_data_list);
+-      INIT_DELAYED_WORK(&gsm->kick_timeout, gsm_kick_timeout);
++      timer_setup(&gsm->kick_timer, gsm_kick_timer, 0);
+       timer_setup(&gsm->t2_timer, gsm_control_retransmit, 0);
+       INIT_WORK(&gsm->tx_work, gsmld_write_task);
+       init_waitqueue_head(&gsm->event);
+-- 
+2.35.1
+
diff --git a/queue-6.0/scsi-iscsi-fix-possible-memory-leak-when-device_regi.patch b/queue-6.0/scsi-iscsi-fix-possible-memory-leak-when-device_regi.patch
new file mode 100644 (file)
index 0000000..64bb5ec
--- /dev/null
@@ -0,0 +1,136 @@
+From d34fadc36c2e7fdf1b912aa640463febbe1ceb09 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 10 Nov 2022 03:37:29 +0000
+Subject: scsi: iscsi: Fix possible memory leak when device_register() failed
+
+From: Zhou Guanghui <zhouguanghui1@huawei.com>
+
+[ Upstream commit f014165faa7b953b81dcbf18835936e5f8d01f2a ]
+
+If device_register() returns error, the name allocated by the
+dev_set_name() need be freed. As described in the comment of
+device_register(), we should use put_device() to give up the reference in
+the error path.
+
+Fix this by calling put_device(), the name will be freed in the
+kobject_cleanup(), and this patch modified resources will be released by
+calling the corresponding callback function in the device_release().
+
+Signed-off-by: Zhou Guanghui <zhouguanghui1@huawei.com>
+Link: https://lore.kernel.org/r/20221110033729.1555-1-zhouguanghui1@huawei.com
+Reviewed-by: Mike Christie <michael.christie@oracle.com>
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/scsi/scsi_transport_iscsi.c | 31 +++++++++++++++--------------
+ 1 file changed, 16 insertions(+), 15 deletions(-)
+
+diff --git a/drivers/scsi/scsi_transport_iscsi.c b/drivers/scsi/scsi_transport_iscsi.c
+index cd3db9684e52..f473c002fa4d 100644
+--- a/drivers/scsi/scsi_transport_iscsi.c
++++ b/drivers/scsi/scsi_transport_iscsi.c
+@@ -231,7 +231,7 @@ iscsi_create_endpoint(int dd_size)
+       dev_set_name(&ep->dev, "ep-%d", id);
+       err = device_register(&ep->dev);
+         if (err)
+-              goto free_id;
++              goto put_dev;
+       err = sysfs_create_group(&ep->dev.kobj, &iscsi_endpoint_group);
+       if (err)
+@@ -245,10 +245,12 @@ iscsi_create_endpoint(int dd_size)
+       device_unregister(&ep->dev);
+       return NULL;
+-free_id:
++put_dev:
+       mutex_lock(&iscsi_ep_idr_mutex);
+       idr_remove(&iscsi_ep_idr, id);
+       mutex_unlock(&iscsi_ep_idr_mutex);
++      put_device(&ep->dev);
++      return NULL;
+ free_ep:
+       kfree(ep);
+       return NULL;
+@@ -766,7 +768,7 @@ iscsi_create_iface(struct Scsi_Host *shost, struct iscsi_transport *transport,
+       err = device_register(&iface->dev);
+       if (err)
+-              goto free_iface;
++              goto put_dev;
+       err = sysfs_create_group(&iface->dev.kobj, &iscsi_iface_group);
+       if (err)
+@@ -780,9 +782,8 @@ iscsi_create_iface(struct Scsi_Host *shost, struct iscsi_transport *transport,
+       device_unregister(&iface->dev);
+       return NULL;
+-free_iface:
+-      put_device(iface->dev.parent);
+-      kfree(iface);
++put_dev:
++      put_device(&iface->dev);
+       return NULL;
+ }
+ EXPORT_SYMBOL_GPL(iscsi_create_iface);
+@@ -1251,15 +1252,15 @@ iscsi_create_flashnode_sess(struct Scsi_Host *shost, int index,
+       err = device_register(&fnode_sess->dev);
+       if (err)
+-              goto free_fnode_sess;
++              goto put_dev;
+       if (dd_size)
+               fnode_sess->dd_data = &fnode_sess[1];
+       return fnode_sess;
+-free_fnode_sess:
+-      kfree(fnode_sess);
++put_dev:
++      put_device(&fnode_sess->dev);
+       return NULL;
+ }
+ EXPORT_SYMBOL_GPL(iscsi_create_flashnode_sess);
+@@ -1299,15 +1300,15 @@ iscsi_create_flashnode_conn(struct Scsi_Host *shost,
+       err = device_register(&fnode_conn->dev);
+       if (err)
+-              goto free_fnode_conn;
++              goto put_dev;
+       if (dd_size)
+               fnode_conn->dd_data = &fnode_conn[1];
+       return fnode_conn;
+-free_fnode_conn:
+-      kfree(fnode_conn);
++put_dev:
++      put_device(&fnode_conn->dev);
+       return NULL;
+ }
+ EXPORT_SYMBOL_GPL(iscsi_create_flashnode_conn);
+@@ -4815,7 +4816,7 @@ iscsi_register_transport(struct iscsi_transport *tt)
+       dev_set_name(&priv->dev, "%s", tt->name);
+       err = device_register(&priv->dev);
+       if (err)
+-              goto free_priv;
++              goto put_dev;
+       err = sysfs_create_group(&priv->dev.kobj, &iscsi_transport_group);
+       if (err)
+@@ -4850,8 +4851,8 @@ iscsi_register_transport(struct iscsi_transport *tt)
+ unregister_dev:
+       device_unregister(&priv->dev);
+       return NULL;
+-free_priv:
+-      kfree(priv);
++put_dev:
++      put_device(&priv->dev);
+       return NULL;
+ }
+ EXPORT_SYMBOL_GPL(iscsi_register_transport);
+-- 
+2.35.1
+
diff --git a/queue-6.0/scsi-mpi3mr-suppress-command-reply-debug-prints.patch b/queue-6.0/scsi-mpi3mr-suppress-command-reply-debug-prints.patch
new file mode 100644 (file)
index 0000000..96277b3
--- /dev/null
@@ -0,0 +1,46 @@
+From 1570a98bd9ee478af6f5c94b0e923ae6162f4d7f Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 11 Nov 2022 10:44:49 +0900
+Subject: scsi: mpi3mr: Suppress command reply debug prints
+
+From: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
+
+[ Upstream commit 7d21fcfb409500dc9b114567f0ef8d30b3190dee ]
+
+After it receives command reply, mpi3mr driver checks command result. If
+the result is not zero, it prints out command information. This debug
+information is confusing since they are printed even when the non-zero
+result is expected. "Power-on or device reset occurred" is printed for Test
+Unit Ready command at drive detection. Inquiry failure for unsupported VPD
+page header is also printed. They are harmless but look like failures.
+
+To avoid the confusion, print the command reply debug information only when
+the module parameter logging_level has value MPI3_DEBUG_SCSI_ERROR= 64, in
+same manner as mpt3sas driver.
+
+Signed-off-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
+Link: https://lore.kernel.org/r/20221111014449.1649968-1-shinichiro.kawasaki@wdc.com
+Reviewed-by: Damien Le Moal <damien.lemoal@opensource.wdc.com>
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/scsi/mpi3mr/mpi3mr_os.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/scsi/mpi3mr/mpi3mr_os.c b/drivers/scsi/mpi3mr/mpi3mr_os.c
+index bfa1165e23b6..1b4d1e562de8 100644
+--- a/drivers/scsi/mpi3mr/mpi3mr_os.c
++++ b/drivers/scsi/mpi3mr/mpi3mr_os.c
+@@ -2930,7 +2930,8 @@ void mpi3mr_process_op_reply_desc(struct mpi3mr_ioc *mrioc,
+       }
+       if (scmd->result != (DID_OK << 16) && (scmd->cmnd[0] != ATA_12) &&
+-          (scmd->cmnd[0] != ATA_16)) {
++          (scmd->cmnd[0] != ATA_16) &&
++          mrioc->logging_level & MPI3_DEBUG_SCSI_ERROR) {
+               ioc_info(mrioc, "%s :scmd->result 0x%x\n", __func__,
+                   scmd->result);
+               scsi_print_command(scmd);
+-- 
+2.35.1
+
diff --git a/queue-6.0/serial-8250-8250_omap-avoid-rs485-rts-glitch-on-set_.patch b/queue-6.0/serial-8250-8250_omap-avoid-rs485-rts-glitch-on-set_.patch
new file mode 100644 (file)
index 0000000..6b20645
--- /dev/null
@@ -0,0 +1,94 @@
+From b64e1cdf6a96d74d12b1673b5a2050ba41a23963 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 27 Sep 2022 13:52:34 +0200
+Subject: serial: 8250: 8250_omap: Avoid RS485 RTS glitch on ->set_termios()
+
+From: Lukas Wunner <lukas@wunner.de>
+
+[ Upstream commit 038ee49fef18710bedd38b531d173ccd746b2d8d ]
+
+RS485-enabled UART ports on TI Sitara SoCs with active-low polarity
+exhibit a Transmit Enable glitch on ->set_termios():
+
+omap8250_restore_regs(), which is called from omap_8250_set_termios(),
+sets the TCRTLR bit in the MCR register and clears all other bits,
+including RTS.  If RTS uses active-low polarity, it is now asserted
+for no reason.
+
+The TCRTLR bit is subsequently cleared by writing up->mcr to the MCR
+register.  That variable is always zero, so the RTS bit is still cleared
+(incorrectly so if RTS is active-high).
+
+(up->mcr is not, as one might think, a cache of the MCR register's
+current value.  Rather, it only caches a single bit of that register,
+the AFE bit.  And it only does so if the UART supports the AFE bit,
+which OMAP does not.  For details see serial8250_do_set_termios() and
+serial8250_do_set_mctrl().)
+
+Finally at the end of omap8250_restore_regs(), the MCR register is
+restored (and RTS deasserted) by a call to up->port.ops->set_mctrl()
+(which equals serial8250_set_mctrl()) and serial8250_em485_stop_tx().
+
+So there's an RTS glitch between setting TCRTLR and calling
+serial8250_em485_stop_tx().  Avoid by using a read-modify-write
+when setting TCRTLR.
+
+While at it, drop a redundant initialization of up->mcr.  As explained
+above, the variable isn't used by the driver and it is already
+initialized to zero because it is part of the static struct
+serial8250_ports[] declared in 8250_core.c.  (Static structs are
+initialized to zero per section 6.7.8 nr. 10 of the C99 standard.)
+
+Cc: Jan Kiszka <jan.kiszka@siemens.com>
+Cc: Su Bao Cheng <baocheng.su@siemens.com>
+Tested-by: Matthias Schiffer <matthias.schiffer@ew.tq-group.com>
+Signed-off-by: Lukas Wunner <lukas@wunner.de>
+Link: https://lore.kernel.org/r/6554b0241a2c7fd50f32576fdbafed96709e11e8.1664278942.git.lukas@wunner.de
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/tty/serial/8250/8250_omap.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/tty/serial/8250/8250_omap.c b/drivers/tty/serial/8250/8250_omap.c
+index b96fbf8d31df..2ad735dd6c05 100644
+--- a/drivers/tty/serial/8250/8250_omap.c
++++ b/drivers/tty/serial/8250/8250_omap.c
+@@ -293,6 +293,7 @@ static void omap8250_restore_regs(struct uart_8250_port *up)
+ {
+       struct omap8250_priv *priv = up->port.private_data;
+       struct uart_8250_dma    *dma = up->dma;
++      u8 mcr = serial8250_in_MCR(up);
+       if (dma && dma->tx_running) {
+               /*
+@@ -309,7 +310,7 @@ static void omap8250_restore_regs(struct uart_8250_port *up)
+       serial_out(up, UART_EFR, UART_EFR_ECB);
+       serial_out(up, UART_LCR, UART_LCR_CONF_MODE_A);
+-      serial8250_out_MCR(up, UART_MCR_TCRTLR);
++      serial8250_out_MCR(up, mcr | UART_MCR_TCRTLR);
+       serial_out(up, UART_FCR, up->fcr);
+       omap8250_update_scr(up, priv);
+@@ -325,7 +326,8 @@ static void omap8250_restore_regs(struct uart_8250_port *up)
+       serial_out(up, UART_LCR, 0);
+       /* drop TCR + TLR access, we setup XON/XOFF later */
+-      serial8250_out_MCR(up, up->mcr);
++      serial8250_out_MCR(up, mcr);
++
+       serial_out(up, UART_IER, up->ier);
+       serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B);
+@@ -670,7 +672,6 @@ static int omap_8250_startup(struct uart_port *port)
+       pm_runtime_get_sync(port->dev);
+-      up->mcr = 0;
+       serial_out(up, UART_FCR, UART_FCR_CLEAR_RCVR | UART_FCR_CLEAR_XMIT);
+       serial_out(up, UART_LCR, UART_LCR_WLEN8);
+-- 
+2.35.1
+
index acca2e2417f22da75d931415e816fac49c8af5c6..9878dc65773bc50a43077f087fe3c734565c92af 100644 (file)
@@ -221,3 +221,45 @@ asoc-sof-fix-compilation-when-hda_audio_codec-config-is-disabled.patch
 asoc-intel-fix-unused-variable-warning-in-probe_codec.patch
 asoc-intel-skylake-fix-possible-memory-leak-in-skl_codec_device_init.patch
 asoc-sof-intel-hda-codec-fix-possible-memory-leak-in-hda_codec_device_init.patch
+input-synaptics-switch-touchpad-on-hp-laptop-15-da30.patch
+asoc-amd-yc-add-alienware-m17-r5-amd-into-dmi-table.patch
+asoc-intel-bytcht_es8316-add-quirk-for-the-nanote-um.patch
+asoc-intel-soc-acpi-add-es83x6-support-to-icelake.patch
+tools-iio-iio_generic_buffer-fix-read-size.patch
+asoc-hda-intel-dsp-config-add-es83x6-quirk-for-icela.patch
+asoc-sof-ipc3-topology-use-old-pipeline-teardown-flo.patch
+serial-8250-8250_omap-avoid-rs485-rts-glitch-on-set_.patch
+revert-tty-n_gsm-avoid-call-of-sleeping-functions-fr.patch
+revert-tty-n_gsm-replace-kicktimer-with-delayed_work.patch
+input-goodix-try-resetting-the-controller-when-no-co.patch
+bpf-convert-bpf_dispatcher-to-use-static_call-not-ft.patch
+asoc-sof_es8336-reduce-pop-noise-on-speaker.patch
+input-soc_button_array-add-use_low_level_irq-module-.patch
+input-soc_button_array-add-acer-switch-v-10-to-dmi_u.patch
+pinctrl-qcom-sc8280xp-rectify-ufs-reset-pins.patch
+input-i8042-apply-probe-defer-to-more-asus-zenbook-m.patch
+asoc-stm32-dfsdm-manage-cb-buffers-cleanup.patch
+xen-pciback-allow-setting-pci_msix_flags_maskall-too.patch
+xen-platform-pci-add-missing-free_irq-in-error-path.patch
+platform-x86-thinkpad_acpi-enable-s2idle-quirk-for-2.patch
+platform-x86-asus-wmi-add-missing-pci_dev_put-in-asu.patch
+platform-x86-acer-wmi-enable-sw_tablet_mode-on-switc.patch
+platform-surface-aggregator_registry-add-support-for.patch
+drm-amd-display-use-uclk-pstate-latency-for-fw-assis.patch
+drm-amdgpu-disable-baco-support-on-more-cards.patch
+drm-amdkfd-fix-a-memory-limit-issue.patch
+zonefs-fix-zone-report-size-in-__zonefs_io_error.patch
+platform-surface-aggregator_registry-add-support-for.patch-2290
+platform-x86-hp-wmi-ignore-smart-experience-app-even.patch
+platform-x86-ideapad-laptop-fix-interrupt-storm-on-f.patch
+platform-x86-ideapad-laptop-add-module-parameters-to.patch
+tcp-configurable-source-port-perturb-table-size.patch
+block-make-blk_set_default_limits-private.patch
+dm-integrity-set-dma_alignment-limit-in-io_hints.patch
+dm-log-writes-set-dma_alignment-limit-in-io_hints.patch
+net-usb-qmi_wwan-add-telit-0x103a-composition.patch
+scsi-mpi3mr-suppress-command-reply-debug-prints.patch
+scsi-iscsi-fix-possible-memory-leak-when-device_regi.patch
+gpu-host1x-avoid-trying-to-use-gart-on-tegra20.patch
+dm-integrity-flush-the-journal-on-suspend.patch
+dm-integrity-clear-the-journal-on-suspend.patch
diff --git a/queue-6.0/tcp-configurable-source-port-perturb-table-size.patch b/queue-6.0/tcp-configurable-source-port-perturb-table-size.patch
new file mode 100644 (file)
index 0000000..b814783
--- /dev/null
@@ -0,0 +1,78 @@
+From 7ef22f540d7aa521374692af71bb0dbcefeec166 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 14 Nov 2022 22:56:16 +0000
+Subject: tcp: configurable source port perturb table size
+
+From: Gleb Mazovetskiy <glex.spb@gmail.com>
+
+[ Upstream commit aeac4ec8f46d610a10adbaeff5e2edf6a88ffc62 ]
+
+On embedded systems with little memory and no relevant
+security concerns, it is beneficial to reduce the size
+of the table.
+
+Reducing the size from 2^16 to 2^8 saves 255 KiB
+of kernel RAM.
+
+Makes the table size configurable as an expert option.
+
+The size was previously increased from 2^8 to 2^16
+in commit 4c2c8f03a5ab ("tcp: increase source port perturb table to
+2^16").
+
+Signed-off-by: Gleb Mazovetskiy <glex.spb@gmail.com>
+Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/ipv4/Kconfig           | 10 ++++++++++
+ net/ipv4/inet_hashtables.c | 10 +++++-----
+ 2 files changed, 15 insertions(+), 5 deletions(-)
+
+diff --git a/net/ipv4/Kconfig b/net/ipv4/Kconfig
+index e983bb0c5012..2dfb12230f08 100644
+--- a/net/ipv4/Kconfig
++++ b/net/ipv4/Kconfig
+@@ -402,6 +402,16 @@ config INET_IPCOMP
+         If unsure, say Y.
++config INET_TABLE_PERTURB_ORDER
++      int "INET: Source port perturbation table size (as power of 2)" if EXPERT
++      default 16
++      help
++        Source port perturbation table size (as power of 2) for
++        RFC 6056 3.3.4.  Algorithm 4: Double-Hash Port Selection Algorithm.
++
++        The default is almost always what you want.
++        Only change this if you know what you are doing.
++
+ config INET_XFRM_TUNNEL
+       tristate
+       select INET_TUNNEL
+diff --git a/net/ipv4/inet_hashtables.c b/net/ipv4/inet_hashtables.c
+index f5950a7172d6..1e45fe6276f7 100644
+--- a/net/ipv4/inet_hashtables.c
++++ b/net/ipv4/inet_hashtables.c
+@@ -679,13 +679,13 @@ EXPORT_SYMBOL_GPL(inet_unhash);
+  * Note that we use 32bit integers (vs RFC 'short integers')
+  * because 2^16 is not a multiple of num_ephemeral and this
+  * property might be used by clever attacker.
++ *
+  * RFC claims using TABLE_LENGTH=10 buckets gives an improvement, though
+- * attacks were since demonstrated, thus we use 65536 instead to really
+- * give more isolation and privacy, at the expense of 256kB of kernel
+- * memory.
++ * attacks were since demonstrated, thus we use 65536 by default instead
++ * to really give more isolation and privacy, at the expense of 256kB
++ * of kernel memory.
+  */
+-#define INET_TABLE_PERTURB_SHIFT 16
+-#define INET_TABLE_PERTURB_SIZE (1 << INET_TABLE_PERTURB_SHIFT)
++#define INET_TABLE_PERTURB_SIZE (1 << CONFIG_INET_TABLE_PERTURB_ORDER)
+ static u32 *table_perturb;
+ int __inet_hash_connect(struct inet_timewait_death_row *death_row,
+-- 
+2.35.1
+
diff --git a/queue-6.0/tools-iio-iio_generic_buffer-fix-read-size.patch b/queue-6.0/tools-iio-iio_generic_buffer-fix-read-size.patch
new file mode 100644 (file)
index 0000000..9b8ff51
--- /dev/null
@@ -0,0 +1,62 @@
+From 1aff34bdac8e42351b02ce589f544b581784b8e8 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 14 Oct 2022 10:15:19 +0300
+Subject: tools: iio: iio_generic_buffer: Fix read size
+
+From: Matti Vaittinen <mazziesaccount@gmail.com>
+
+[ Upstream commit 7c919b619bcc68158921b1bd968f0e704549bbb6 ]
+
+When noevents is true and small buffer is used the allocated memory for
+holding the data may be smaller than the hard-coded 64 bytes. This can
+cause the iio_generic_buffer to crash.
+
+Following was recorded on beagle bone black with v6.0 kernel and the
+digit fix patch:
+https://lore.kernel.org/all/Y0f+tKCz+ZAIoroQ@dc75zzyyyyyyyyyyyyycy-3.rev.dnainternet.fi/
+using valgrind;
+
+==339== Using Valgrind-3.18.1 and LibVEX; rerun with -h for copyright info
+==339== Command: /iio_generic_buffer -n kx022-accel -T0 -e -l 10 -a -w 2000000
+==339== Parent PID: 307
+==339==
+==339== Syscall param read(buf) points to unaddressable byte(s)
+==339==    at 0x496BFA4: read (read.c:26)
+==339==    by 0x11699: main (iio_generic_buffer.c:724)
+==339==  Address 0x4ab3518 is 0 bytes after a block of size 160 alloc'd
+==339==    at 0x4864B70: malloc (vg_replace_malloc.c:381)
+==339==    by 0x115BB: main (iio_generic_buffer.c:677)
+
+Fix this by always using the same size for reading as was used for
+data storage allocation.
+
+Signed-off-by: Matti Vaittinen <mazziesaccount@gmail.com>
+Link: https://lore.kernel.org/r/Y0kMh0t5qUXJw3nQ@dc75zzyyyyyyyyyyyyycy-3.rev.dnainternet.fi
+Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ tools/iio/iio_generic_buffer.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/tools/iio/iio_generic_buffer.c b/tools/iio/iio_generic_buffer.c
+index 2491c54a5e4f..f8deae4e26a1 100644
+--- a/tools/iio/iio_generic_buffer.c
++++ b/tools/iio/iio_generic_buffer.c
+@@ -715,12 +715,12 @@ int main(int argc, char **argv)
+                               continue;
+                       }
+-                      toread = buf_len;
+               } else {
+                       usleep(timedelay);
+-                      toread = 64;
+               }
++              toread = buf_len;
++
+               read_size = read(buf_fd, data, toread * scan_size);
+               if (read_size < 0) {
+                       if (errno == EAGAIN) {
+-- 
+2.35.1
+
diff --git a/queue-6.0/xen-pciback-allow-setting-pci_msix_flags_maskall-too.patch b/queue-6.0/xen-pciback-allow-setting-pci_msix_flags_maskall-too.patch
new file mode 100644 (file)
index 0000000..b37be34
--- /dev/null
@@ -0,0 +1,69 @@
+From 9eaa35e6af36afee584272b0995ca99401a59d16 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 14 Nov 2022 11:31:08 +0100
+Subject: xen-pciback: Allow setting PCI_MSIX_FLAGS_MASKALL too
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
+
+[ Upstream commit 5e29500eba2aa19e1323df46f64dafcd4a327092 ]
+
+When Xen domain configures MSI-X, the usual approach is to enable MSI-X
+together with masking all of them via the config space, then fill the
+table and only then clear PCI_MSIX_FLAGS_MASKALL. Allow doing this via
+QEMU running in a stub domain.
+
+Previously, when changing PCI_MSIX_FLAGS_MASKALL was not allowed, the
+whole write was aborted, preventing change to the PCI_MSIX_FLAGS_ENABLE
+bit too.
+
+Note the Xen hypervisor intercepts this write anyway, and may keep the
+PCI_MSIX_FLAGS_MASKALL bit set if it wishes to. It will store the
+guest-requested state and will apply it eventually.
+
+Signed-off-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
+Reviewed-by: Jan Beulich <jbeulich@suse.com>
+Link: https://lore.kernel.org/r/20221114103110.1519413-1-marmarek@invisiblethingslab.com
+Signed-off-by: Juergen Gross <jgross@suse.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/xen/xen-pciback/conf_space_capability.c | 9 ++++++---
+ 1 file changed, 6 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/xen/xen-pciback/conf_space_capability.c b/drivers/xen/xen-pciback/conf_space_capability.c
+index 5e53b4817f16..097316a74126 100644
+--- a/drivers/xen/xen-pciback/conf_space_capability.c
++++ b/drivers/xen/xen-pciback/conf_space_capability.c
+@@ -190,13 +190,16 @@ static const struct config_field caplist_pm[] = {
+ };
+ static struct msi_msix_field_config {
+-      u16          enable_bit; /* bit for enabling MSI/MSI-X */
+-      unsigned int int_type;   /* interrupt type for exclusiveness check */
++      u16          enable_bit;   /* bit for enabling MSI/MSI-X */
++      u16          allowed_bits; /* bits allowed to be changed */
++      unsigned int int_type;     /* interrupt type for exclusiveness check */
+ } msi_field_config = {
+       .enable_bit     = PCI_MSI_FLAGS_ENABLE,
++      .allowed_bits   = PCI_MSI_FLAGS_ENABLE,
+       .int_type       = INTERRUPT_TYPE_MSI,
+ }, msix_field_config = {
+       .enable_bit     = PCI_MSIX_FLAGS_ENABLE,
++      .allowed_bits   = PCI_MSIX_FLAGS_ENABLE | PCI_MSIX_FLAGS_MASKALL,
+       .int_type       = INTERRUPT_TYPE_MSIX,
+ };
+@@ -229,7 +232,7 @@ static int msi_msix_flags_write(struct pci_dev *dev, int offset, u16 new_value,
+               return 0;
+       if (!dev_data->allow_interrupt_control ||
+-          (new_value ^ old_value) & ~field_config->enable_bit)
++          (new_value ^ old_value) & ~field_config->allowed_bits)
+               return PCIBIOS_SET_FAILED;
+       if (new_value & field_config->enable_bit) {
+-- 
+2.35.1
+
diff --git a/queue-6.0/xen-platform-pci-add-missing-free_irq-in-error-path.patch b/queue-6.0/xen-platform-pci-add-missing-free_irq-in-error-path.patch
new file mode 100644 (file)
index 0000000..d00a0b1
--- /dev/null
@@ -0,0 +1,54 @@
+From 22b468ef30cb12be910a9d250fc9af59ce3f58a0 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 14 Nov 2022 19:21:24 +0800
+Subject: xen/platform-pci: add missing free_irq() in error path
+
+From: ruanjinjie <ruanjinjie@huawei.com>
+
+[ Upstream commit c53717e1e3f0d0f9129b2e0dbc6dcc5e0a8132e9 ]
+
+free_irq() is missing in case of error in platform_pci_probe(), fix that.
+
+Signed-off-by: ruanjinjie <ruanjinjie@huawei.com>
+Reviewed-by: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>
+Link: https://lore.kernel.org/r/20221114112124.1965611-1-ruanjinjie@huawei.com
+Signed-off-by: Juergen Gross <jgross@suse.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/xen/platform-pci.c | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/xen/platform-pci.c b/drivers/xen/platform-pci.c
+index 18f0ed8b1f93..6ebd819338ec 100644
+--- a/drivers/xen/platform-pci.c
++++ b/drivers/xen/platform-pci.c
+@@ -144,7 +144,7 @@ static int platform_pci_probe(struct pci_dev *pdev,
+               if (ret) {
+                       dev_warn(&pdev->dev, "Unable to set the evtchn callback "
+                                        "err=%d\n", ret);
+-                      goto out;
++                      goto irq_out;
+               }
+       }
+@@ -152,13 +152,16 @@ static int platform_pci_probe(struct pci_dev *pdev,
+       grant_frames = alloc_xen_mmio(PAGE_SIZE * max_nr_gframes);
+       ret = gnttab_setup_auto_xlat_frames(grant_frames);
+       if (ret)
+-              goto out;
++              goto irq_out;
+       ret = gnttab_init();
+       if (ret)
+               goto grant_out;
+       return 0;
+ grant_out:
+       gnttab_free_auto_xlat_frames();
++irq_out:
++      if (!xen_have_vector_callback)
++              free_irq(pdev->irq, pdev);
+ out:
+       pci_release_region(pdev, 0);
+ mem_out:
+-- 
+2.35.1
+
diff --git a/queue-6.0/zonefs-fix-zone-report-size-in-__zonefs_io_error.patch b/queue-6.0/zonefs-fix-zone-report-size-in-__zonefs_io_error.patch
new file mode 100644 (file)
index 0000000..1251ea2
--- /dev/null
@@ -0,0 +1,142 @@
+From ad042a7659e2b492b96af717a8e9e6e5598c27a2 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 25 Oct 2022 13:39:31 +0900
+Subject: zonefs: fix zone report size in __zonefs_io_error()
+
+From: Damien Le Moal <damien.lemoal@opensource.wdc.com>
+
+[ Upstream commit 7dd12d65ac646046a3fe0bbf9a4e86f4514207b3 ]
+
+When an IO error occurs, the function __zonefs_io_error() is used to
+issue a zone report to obtain the latest zone information from the
+device. This function gets a zone report for all zones used as storage
+for a file, which is always 1 zone except for files representing
+aggregated conventional zones.
+
+The number of zones of a zone report for a file is calculated in
+__zonefs_io_error() by doing a bit-shift of the inode i_zone_size field,
+which is equal to or larger than the device zone size. However, this
+calculation does not take into account that the last zone of a zoned
+device may be smaller than the zone size reported by bdev_zone_sectors()
+(which is used to set the bit shift size). As a result, if an error
+occurs for an IO targetting such last smaller zone, the zone report will
+ask for 0 zones, leading to an invalid zone report.
+
+Fix this by using the fact that all files require a 1 zone report,
+except if the inode i_zone_size field indicates a zone size larger than
+the device zone size. This exception case corresponds to a mount with
+aggregated conventional zones.
+
+A check for this exception is added to the file inode initialization
+during mount. If an invalid setup is detected, emit an error and fail
+the mount (check contributed by Johannes Thumshirn).
+
+Signed-off-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
+Signed-off-by: Damien Le Moal <damien.lemoal@opensource.wdc.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/zonefs/super.c | 37 +++++++++++++++++++++++++++----------
+ 1 file changed, 27 insertions(+), 10 deletions(-)
+
+diff --git a/fs/zonefs/super.c b/fs/zonefs/super.c
+index dfe7d410d1e4..2c53fbb8d918 100644
+--- a/fs/zonefs/super.c
++++ b/fs/zonefs/super.c
+@@ -489,14 +489,22 @@ static void __zonefs_io_error(struct inode *inode, bool write)
+       struct super_block *sb = inode->i_sb;
+       struct zonefs_sb_info *sbi = ZONEFS_SB(sb);
+       unsigned int noio_flag;
+-      unsigned int nr_zones =
+-              zi->i_zone_size >> (sbi->s_zone_sectors_shift + SECTOR_SHIFT);
++      unsigned int nr_zones = 1;
+       struct zonefs_ioerr_data err = {
+               .inode = inode,
+               .write = write,
+       };
+       int ret;
++      /*
++       * The only files that have more than one zone are conventional zone
++       * files with aggregated conventional zones, for which the inode zone
++       * size is always larger than the device zone size.
++       */
++      if (zi->i_zone_size > bdev_zone_sectors(sb->s_bdev))
++              nr_zones = zi->i_zone_size >>
++                      (sbi->s_zone_sectors_shift + SECTOR_SHIFT);
++
+       /*
+        * Memory allocations in blkdev_report_zones() can trigger a memory
+        * reclaim which may in turn cause a recursion into zonefs as well as
+@@ -1418,6 +1426,14 @@ static int zonefs_init_file_inode(struct inode *inode, struct blk_zone *zone,
+       zi->i_ztype = type;
+       zi->i_zsector = zone->start;
+       zi->i_zone_size = zone->len << SECTOR_SHIFT;
++      if (zi->i_zone_size > bdev_zone_sectors(sb->s_bdev) << SECTOR_SHIFT &&
++          !(sbi->s_features & ZONEFS_F_AGGRCNV)) {
++              zonefs_err(sb,
++                         "zone size %llu doesn't match device's zone sectors %llu\n",
++                         zi->i_zone_size,
++                         bdev_zone_sectors(sb->s_bdev) << SECTOR_SHIFT);
++              return -EINVAL;
++      }
+       zi->i_max_size = min_t(loff_t, MAX_LFS_FILESIZE,
+                              zone->capacity << SECTOR_SHIFT);
+@@ -1467,11 +1483,11 @@ static struct dentry *zonefs_create_inode(struct dentry *parent,
+       struct inode *dir = d_inode(parent);
+       struct dentry *dentry;
+       struct inode *inode;
+-      int ret;
++      int ret = -ENOMEM;
+       dentry = d_alloc_name(parent, name);
+       if (!dentry)
+-              return NULL;
++              return ERR_PTR(ret);
+       inode = new_inode(parent->d_sb);
+       if (!inode)
+@@ -1496,7 +1512,7 @@ static struct dentry *zonefs_create_inode(struct dentry *parent,
+ dput:
+       dput(dentry);
+-      return NULL;
++      return ERR_PTR(ret);
+ }
+ struct zonefs_zone_data {
+@@ -1516,7 +1532,7 @@ static int zonefs_create_zgroup(struct zonefs_zone_data *zd,
+       struct blk_zone *zone, *next, *end;
+       const char *zgroup_name;
+       char *file_name;
+-      struct dentry *dir;
++      struct dentry *dir, *dent;
+       unsigned int n = 0;
+       int ret;
+@@ -1534,8 +1550,8 @@ static int zonefs_create_zgroup(struct zonefs_zone_data *zd,
+               zgroup_name = "seq";
+       dir = zonefs_create_inode(sb->s_root, zgroup_name, NULL, type);
+-      if (!dir) {
+-              ret = -ENOMEM;
++      if (IS_ERR(dir)) {
++              ret = PTR_ERR(dir);
+               goto free;
+       }
+@@ -1581,8 +1597,9 @@ static int zonefs_create_zgroup(struct zonefs_zone_data *zd,
+                * Use the file number within its group as file name.
+                */
+               snprintf(file_name, ZONEFS_NAME_MAX - 1, "%u", n);
+-              if (!zonefs_create_inode(dir, file_name, zone, type)) {
+-                      ret = -ENOMEM;
++              dent = zonefs_create_inode(dir, file_name, zone, type);
++              if (IS_ERR(dent)) {
++                      ret = PTR_ERR(dent);
+                       goto free;
+               }
+-- 
+2.35.1
+