From 5dc68330376c02bc468996b0877423ad9463999d Mon Sep 17 00:00:00 2001 From: Sasha Levin Date: Wed, 30 Nov 2022 07:55:52 -0500 Subject: [PATCH] Fixes for 6.0 Signed-off-by: Sasha Levin --- ...-alienware-m17-r5-amd-into-dmi-table.patch | 44 +++ ...sp-config-add-es83x6-quirk-for-icela.patch | 41 +++ ...t_es8316-add-quirk-for-the-nanote-um.patch | 42 +++ ...c-acpi-add-es83x6-support-to-icelake.patch | 55 ++++ ...pology-use-old-pipeline-teardown-flo.patch | 115 ++++++++ ...f_es8336-reduce-pop-noise-on-speaker.patch | 138 +++++++++ ...tm32-dfsdm-manage-cb-buffers-cleanup.patch | 52 ++++ ...-make-blk_set_default_limits-private.patch | 61 ++++ ...dispatcher-to-use-static_call-not-ft.patch | 184 ++++++++++++ ...tegrity-clear-the-journal-on-suspend.patch | 72 +++++ ...tegrity-flush-the-journal-on-suspend.patch | 52 ++++ ...-set-dma_alignment-limit-in-io_hints.patch | 37 +++ ...-set-dma_alignment-limit-in-io_hints.patch | 37 +++ ...use-uclk-pstate-latency-for-fw-assis.patch | 73 +++++ ...u-disable-baco-support-on-more-cards.patch | 38 +++ .../drm-amdkfd-fix-a-memory-limit-issue.patch | 42 +++ ...-avoid-trying-to-use-gart-on-tegra20.patch | 61 ++++ ...-resetting-the-controller-when-no-co.patch | 68 +++++ ...y-probe-defer-to-more-asus-zenbook-m.patch | 52 ++++ ..._array-add-acer-switch-v-10-to-dmi_u.patch | 46 +++ ..._array-add-use_low_level_irq-module-.patch | 64 +++++ ...switch-touchpad-on-hp-laptop-15-da30.patch | 35 +++ ...mi_wwan-add-telit-0x103a-composition.patch | 40 +++ ...qcom-sc8280xp-rectify-ufs-reset-pins.patch | 41 +++ ...-aggregator_registry-add-support-for.patch | 78 ++++++ ...egator_registry-add-support-for.patch-2290 | 59 ++++ ...r-wmi-enable-sw_tablet_mode-on-switc.patch | 48 ++++ ...s-wmi-add-missing-pci_dev_put-in-asu.patch | 39 +++ ...wmi-ignore-smart-experience-app-even.patch | 48 ++++ ...apad-laptop-add-module-parameters-to.patch | 64 +++++ ...apad-laptop-fix-interrupt-storm-on-f.patch | 83 ++++++ ...nkpad_acpi-enable-s2idle-quirk-for-2.patch | 51 ++++ ...-avoid-call-of-sleeping-functions-fr.patch | 264 ++++++++++++++++++ ...-replace-kicktimer-with-delayed_work.patch | 89 ++++++ ...ossible-memory-leak-when-device_regi.patch | 136 +++++++++ ...-suppress-command-reply-debug-prints.patch | 46 +++ ..._omap-avoid-rs485-rts-glitch-on-set_.patch | 94 +++++++ queue-6.0/series | 42 +++ ...rable-source-port-perturb-table-size.patch | 78 ++++++ ...iio-iio_generic_buffer-fix-read-size.patch | 62 ++++ ...w-setting-pci_msix_flags_maskall-too.patch | 69 +++++ ...i-add-missing-free_irq-in-error-path.patch | 54 ++++ ...one-report-size-in-__zonefs_io_error.patch | 142 ++++++++++ 43 files changed, 3036 insertions(+) create mode 100644 queue-6.0/asoc-amd-yc-add-alienware-m17-r5-amd-into-dmi-table.patch create mode 100644 queue-6.0/asoc-hda-intel-dsp-config-add-es83x6-quirk-for-icela.patch create mode 100644 queue-6.0/asoc-intel-bytcht_es8316-add-quirk-for-the-nanote-um.patch create mode 100644 queue-6.0/asoc-intel-soc-acpi-add-es83x6-support-to-icelake.patch create mode 100644 queue-6.0/asoc-sof-ipc3-topology-use-old-pipeline-teardown-flo.patch create mode 100644 queue-6.0/asoc-sof_es8336-reduce-pop-noise-on-speaker.patch create mode 100644 queue-6.0/asoc-stm32-dfsdm-manage-cb-buffers-cleanup.patch create mode 100644 queue-6.0/block-make-blk_set_default_limits-private.patch create mode 100644 queue-6.0/bpf-convert-bpf_dispatcher-to-use-static_call-not-ft.patch create mode 100644 queue-6.0/dm-integrity-clear-the-journal-on-suspend.patch create mode 100644 queue-6.0/dm-integrity-flush-the-journal-on-suspend.patch create mode 100644 queue-6.0/dm-integrity-set-dma_alignment-limit-in-io_hints.patch create mode 100644 queue-6.0/dm-log-writes-set-dma_alignment-limit-in-io_hints.patch create mode 100644 queue-6.0/drm-amd-display-use-uclk-pstate-latency-for-fw-assis.patch create mode 100644 queue-6.0/drm-amdgpu-disable-baco-support-on-more-cards.patch create mode 100644 queue-6.0/drm-amdkfd-fix-a-memory-limit-issue.patch create mode 100644 queue-6.0/gpu-host1x-avoid-trying-to-use-gart-on-tegra20.patch create mode 100644 queue-6.0/input-goodix-try-resetting-the-controller-when-no-co.patch create mode 100644 queue-6.0/input-i8042-apply-probe-defer-to-more-asus-zenbook-m.patch create mode 100644 queue-6.0/input-soc_button_array-add-acer-switch-v-10-to-dmi_u.patch create mode 100644 queue-6.0/input-soc_button_array-add-use_low_level_irq-module-.patch create mode 100644 queue-6.0/input-synaptics-switch-touchpad-on-hp-laptop-15-da30.patch create mode 100644 queue-6.0/net-usb-qmi_wwan-add-telit-0x103a-composition.patch create mode 100644 queue-6.0/pinctrl-qcom-sc8280xp-rectify-ufs-reset-pins.patch create mode 100644 queue-6.0/platform-surface-aggregator_registry-add-support-for.patch create mode 100644 queue-6.0/platform-surface-aggregator_registry-add-support-for.patch-2290 create mode 100644 queue-6.0/platform-x86-acer-wmi-enable-sw_tablet_mode-on-switc.patch create mode 100644 queue-6.0/platform-x86-asus-wmi-add-missing-pci_dev_put-in-asu.patch create mode 100644 queue-6.0/platform-x86-hp-wmi-ignore-smart-experience-app-even.patch create mode 100644 queue-6.0/platform-x86-ideapad-laptop-add-module-parameters-to.patch create mode 100644 queue-6.0/platform-x86-ideapad-laptop-fix-interrupt-storm-on-f.patch create mode 100644 queue-6.0/platform-x86-thinkpad_acpi-enable-s2idle-quirk-for-2.patch create mode 100644 queue-6.0/revert-tty-n_gsm-avoid-call-of-sleeping-functions-fr.patch create mode 100644 queue-6.0/revert-tty-n_gsm-replace-kicktimer-with-delayed_work.patch create mode 100644 queue-6.0/scsi-iscsi-fix-possible-memory-leak-when-device_regi.patch create mode 100644 queue-6.0/scsi-mpi3mr-suppress-command-reply-debug-prints.patch create mode 100644 queue-6.0/serial-8250-8250_omap-avoid-rs485-rts-glitch-on-set_.patch create mode 100644 queue-6.0/tcp-configurable-source-port-perturb-table-size.patch create mode 100644 queue-6.0/tools-iio-iio_generic_buffer-fix-read-size.patch create mode 100644 queue-6.0/xen-pciback-allow-setting-pci_msix_flags_maskall-too.patch create mode 100644 queue-6.0/xen-platform-pci-add-missing-free_irq-in-error-path.patch create mode 100644 queue-6.0/zonefs-fix-zone-report-size-in-__zonefs_io_error.patch 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 index 00000000000..9821ac46ec1 --- /dev/null +++ b/queue-6.0/asoc-amd-yc-add-alienware-m17-r5-amd-into-dmi-table.patch @@ -0,0 +1,44 @@ +From 1fc4e5997ed1e7a0e5d9129b85fbdbab95be30df Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 24 Oct 2022 18:42:27 +0100 +Subject: ASoC: amd: yc: Add Alienware m17 R5 AMD into DMI table + +From: Brent Mendelsohn + +[ 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 +Reviewed-by: Mario Limonciello +Link: https://lore.kernel.org/r/20221024174227.4160-1-mendiebm@gmail.com +Signed-off-by: Mark Brown +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..ff887872a7d --- /dev/null +++ b/queue-6.0/asoc-hda-intel-dsp-config-add-es83x6-quirk-for-icela.patch @@ -0,0 +1,41 @@ +From b4518570e92462e2e27c2e1ecfd05535201f8670 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 31 Oct 2022 15:56:39 -0400 +Subject: ASoC: hda: intel-dsp-config: add ES83x6 quirk for IceLake + +From: Pierre-Louis Bossart + +[ 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 +Reviewed-by: Bard Liao +Reviewed-by: Takashi Iwai +Link: https://lore.kernel.org/r/20221031195639.250062-1-pierre-louis.bossart@linux.intel.com +Signed-off-by: Mark Brown +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..a49eefe700a --- /dev/null +++ b/queue-6.0/asoc-intel-bytcht_es8316-add-quirk-for-the-nanote-um.patch @@ -0,0 +1,42 @@ +From 27c00cb1a0a6148ffbd8049111fd885a28c6fde3 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +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 + +[ 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 +Acked-by: Pierre-Louis Bossart +Link: https://lore.kernel.org/r/20221025140942.509066-1-hdegoede@redhat.com +Signed-off-by: Mark Brown +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..539d8c6ae7f --- /dev/null +++ b/queue-6.0/asoc-intel-soc-acpi-add-es83x6-support-to-icelake.patch @@ -0,0 +1,55 @@ +From 3f81296063253c733be13b862eb159af72e98110 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 31 Oct 2022 15:58:36 -0400 +Subject: ASoC: Intel: soc-acpi: add ES83x6 support to IceLake + +From: Pierre-Louis Bossart + +[ 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 +Reviewed-by: Bard Liao +Link: https://lore.kernel.org/r/20221031195836.250193-1-pierre-louis.bossart@linux.intel.com +Signed-off-by: Mark Brown +Signed-off-by: Sasha Levin +--- + 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 + #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 index 00000000000..dcf44a59923 --- /dev/null +++ b/queue-6.0/asoc-sof-ipc3-topology-use-old-pipeline-teardown-flo.patch @@ -0,0 +1,115 @@ +From 2f7cdce6e630423bb6d05ec08bc331b3fc83d3d3 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +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 + +[ 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 +Reviewed-by: Pierre-Louis Bossart +Reviewed-by: Ranjani Sridharan +Reviewed-by: Péter Ujfalusi +Link: https://lore.kernel.org/r/20221101114913.1292671-1-kai.vehmanen@linux.intel.com +Signed-off-by: Mark Brown +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..930d7633ff5 --- /dev/null +++ b/queue-6.0/asoc-sof_es8336-reduce-pop-noise-on-speaker.patch @@ -0,0 +1,138 @@ +From dcefdd329bc6a57e6cc9d7e667c29516f8aefbad Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 28 Oct 2022 10:04:56 +0800 +Subject: ASoC: sof_es8336: reduce pop noise on speaker + +From: Zhu Ning + +[ 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 + +------------ + +v1: cancel delayed work while disabling speaker. +Link: https://lore.kernel.org/r/20221028020456.90286-1-zhuning0077@gmail.com +Signed-off-by: Mark Brown +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..09de6da021c --- /dev/null +++ b/queue-6.0/asoc-stm32-dfsdm-manage-cb-buffers-cleanup.patch @@ -0,0 +1,52 @@ +From 75d560cb88eb72835721e2a542e655fe409aa1f4 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 9 Nov 2022 18:08:49 +0100 +Subject: ASoC: stm32: dfsdm: manage cb buffers cleanup + +From: Olivier Moysan + +[ Upstream commit 7d945b046be3d2605dbb1806e73095aadd7ae129 ] + +Ensure that resources allocated by iio_channel_get_all_cb() +are released on driver unbind. + +Signed-off-by: Olivier Moysan +Link: https://lore.kernel.org/r/20221109170849.273719-1-olivier.moysan@foss.st.com +Signed-off-by: Mark Brown +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..5d868186aad --- /dev/null +++ b/queue-6.0/block-make-blk_set_default_limits-private.patch @@ -0,0 +1,61 @@ +From 3670616107d4e541e715b7921fb5a31510157dbf Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 10 Nov 2022 10:44:59 -0800 +Subject: block: make blk_set_default_limits() private + +From: Keith Busch + +[ Upstream commit b3228254bb6e91e57f920227f72a1a7d81925d81 ] + +There are no external users of this function. + +Signed-off-by: Keith Busch +Reviewed-by: Christoph Hellwig +Link: https://lore.kernel.org/r/20221110184501.2451620-4-kbusch@meta.com +Signed-off-by: Jens Axboe +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..fab9f2ddba8 --- /dev/null +++ b/queue-6.0/bpf-convert-bpf_dispatcher-to-use-static_call-not-ft.patch @@ -0,0 +1,184 @@ +From 0a292d88e44e6f83d32d264c18fce66fbcfbe263 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +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 + +[ 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) +Signed-off-by: Daniel Borkmann +Tested-by: Björn Töpel +Tested-by: Jiri Olsa +Acked-by: Björn Töpel +Acked-by: Jiri Olsa +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 +--- + 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 + #include + #include ++#include + + 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 + #include + #include ++#include + + /* 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 index 00000000000..185d932b7b9 --- /dev/null +++ b/queue-6.0/dm-integrity-clear-the-journal-on-suspend.patch @@ -0,0 +1,72 @@ +From e2db1c738c2945f7e1f867459a32db110527dc48 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 15 Nov 2022 12:51:50 -0500 +Subject: dm integrity: clear the journal on suspend + +From: Mikulas Patocka + +[ 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 +Signed-off-by: Mike Snitzer +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..bbd787cfd83 --- /dev/null +++ b/queue-6.0/dm-integrity-flush-the-journal-on-suspend.patch @@ -0,0 +1,52 @@ +From 8d56fb9b595a74dc5092b3a42c9c2dbff2ae04c0 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 15 Nov 2022 12:48:26 -0500 +Subject: dm integrity: flush the journal on suspend + +From: Mikulas Patocka + +[ 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 +Signed-off-by: Mike Snitzer +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..37e346799f0 --- /dev/null +++ b/queue-6.0/dm-integrity-set-dma_alignment-limit-in-io_hints.patch @@ -0,0 +1,37 @@ +From 665238dfe2cde01ae3e047a17b113ab2df0594ec Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 10 Nov 2022 10:45:00 -0800 +Subject: dm-integrity: set dma_alignment limit in io_hints + +From: Keith Busch + +[ 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 +Reviewed-by: Mike Snitzer +Link: https://lore.kernel.org/r/20221110184501.2451620-5-kbusch@meta.com +Signed-off-by: Jens Axboe +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..19d75f97c2a --- /dev/null +++ b/queue-6.0/dm-log-writes-set-dma_alignment-limit-in-io_hints.patch @@ -0,0 +1,37 @@ +From a2bb97fda79bb557402e0412c36255dcbdd773fe Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 10 Nov 2022 10:45:01 -0800 +Subject: dm-log-writes: set dma_alignment limit in io_hints + +From: Keith Busch + +[ 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 +Reviewed-by: Mike Snitzer +Link: https://lore.kernel.org/r/20221110184501.2451620-6-kbusch@meta.com +Signed-off-by: Jens Axboe +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..2a458cfc9b7 --- /dev/null +++ b/queue-6.0/drm-amd-display-use-uclk-pstate-latency-for-fw-assis.patch @@ -0,0 +1,73 @@ +From 0c1e3577bdc59c024e42824b68f4dba2d31c0c33 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +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 + +[ 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 +Acked-by: Tom Chung +Signed-off-by: Dillon Varone +Tested-by: Daniel Wheeler +Signed-off-by: Alex Deucher +Signed-off-by: Sasha Levin +--- + .../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 index 00000000000..7d87c5b571a --- /dev/null +++ b/queue-6.0/drm-amdgpu-disable-baco-support-on-more-cards.patch @@ -0,0 +1,38 @@ +From 670c61040b8c4af7d67e9c6e0325e984cbd5dd38 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 11 Nov 2022 16:54:18 +0800 +Subject: drm/amdgpu: disable BACO support on more cards + +From: Guchun Chen + +[ Upstream commit 192039f12233c9063d040266e7c98188c7c89dec ] + +Otherwise, some unexpected PCIE AER errors will be observed +in runtime suspend/resume cycle. + +Signed-off-by: Guchun Chen +Acked-by: Alex Deucher +Signed-off-by: Alex Deucher +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..8bd63f8be22 --- /dev/null +++ b/queue-6.0/drm-amdkfd-fix-a-memory-limit-issue.patch @@ -0,0 +1,42 @@ +From 43a3c386fdd95d504d1c92b33034909d81bd8ddc Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 14 Nov 2022 11:43:48 -0500 +Subject: drm/amdkfd: Fix a memory limit issue + +From: Eric Huang + +[ 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 +Reviewed-by: Felix Kuehling +Signed-off-by: Alex Deucher +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..ea0f41df091 --- /dev/null +++ b/queue-6.0/gpu-host1x-avoid-trying-to-use-gart-on-tegra20.patch @@ -0,0 +1,61 @@ +From 30e93bd81c72da68126ef2b35ee2699b6199fada Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 20 Oct 2022 15:23:40 +0100 +Subject: gpu: host1x: Avoid trying to use GART on Tegra20 + +From: Robin Murphy + +[ 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 +Suggested-by: Dmitry Osipenko +Signed-off-by: Robin Murphy +Tested-by: Jon Hunter +Signed-off-by: Thierry Reding +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..66aead3c060 --- /dev/null +++ b/queue-6.0/input-goodix-try-resetting-the-controller-when-no-co.patch @@ -0,0 +1,68 @@ +From b8612b4408985ce1dace2964ae67bd48846e1bbb Mon Sep 17 00:00:00 2001 +From: Sasha Levin +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 + +[ 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 +Reviewed-by: Bastien Nocera +Link: https://lore.kernel.org/r/20221025122930.421377-2-hdegoede@redhat.com +Signed-off-by: Dmitry Torokhov +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..3b1ad1da1f1 --- /dev/null +++ b/queue-6.0/input-i8042-apply-probe-defer-to-more-asus-zenbook-m.patch @@ -0,0 +1,52 @@ +From 586d1794280b1a92d9f63f5345ae085261781f3e Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 8 Nov 2022 09:30:52 -0800 +Subject: Input: i8042 - apply probe defer to more ASUS ZenBook models + +From: Takashi Iwai + +[ 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 +Link: https://lore.kernel.org/r/20221108142027.28480-1-tiwai@suse.de +Signed-off-by: Dmitry Torokhov +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..05064ac9e3e --- /dev/null +++ b/queue-6.0/input-soc_button_array-add-acer-switch-v-10-to-dmi_u.patch @@ -0,0 +1,46 @@ +From aefcfc8061670dae400960a2f9e5ace8c069e691 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +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 + +[ 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 +Link: https://lore.kernel.org/r/20221106215320.67109-2-hdegoede@redhat.com +Signed-off-by: Dmitry Torokhov +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..8139b999d68 --- /dev/null +++ b/queue-6.0/input-soc_button_array-add-use_low_level_irq-module-.patch @@ -0,0 +1,64 @@ +From 707312e150e7abadd4497700ac8b284c93b3a53a Mon Sep 17 00:00:00 2001 +From: Sasha Levin +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 + +[ 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 +Link: https://lore.kernel.org/r/20221106215320.67109-1-hdegoede@redhat.com +Signed-off-by: Dmitry Torokhov +Signed-off-by: Sasha Levin +--- + 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 + #include + ++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 index 00000000000..893605a3174 --- /dev/null +++ b/queue-6.0/input-synaptics-switch-touchpad-on-hp-laptop-15-da30.patch @@ -0,0 +1,35 @@ +From 9c200f4d192cec4c3b31136e176c06d164ca453e Mon Sep 17 00:00:00 2001 +From: Sasha Levin +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 + +[ 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 +Signed-off-by: Dmitry Torokhov +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..72f3de64b9c --- /dev/null +++ b/queue-6.0/net-usb-qmi_wwan-add-telit-0x103a-composition.patch @@ -0,0 +1,40 @@ +From 752a8021987d339cfc266c0243e53f0ce637135b Mon Sep 17 00:00:00 2001 +From: Sasha Levin +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 + +[ Upstream commit e103ba33998d0f25653cc8ebe745b68d1ee10cda ] + +Add the following Telit LE910C4-WWX composition: + +0x103a: rmnet + +Signed-off-by: Enrico Sau +Acked-by: Bjørn Mork +Link: https://lore.kernel.org/r/20221115105859.14324-1-enrico.sau@gmail.com +Signed-off-by: Paolo Abeni +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..c21ba97e2dc --- /dev/null +++ b/queue-6.0/pinctrl-qcom-sc8280xp-rectify-ufs-reset-pins.patch @@ -0,0 +1,41 @@ +From dc73f0976666a20806474b3ea69001765203d826 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 3 Nov 2022 11:10:51 -0700 +Subject: pinctrl: qcom: sc8280xp: Rectify UFS reset pins + +From: Anjana Hari + +[ 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 +Signed-off-by: Bjorn Andersson +Reviewed-by: Andrew Halaney +Tested-by: Andrew Halaney # QDrive3 +Link: https://lore.kernel.org/r/20221103181051.26912-1-quic_bjorande@quicinc.com +Signed-off-by: Linus Walleij +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..a8da6819922 --- /dev/null +++ b/queue-6.0/platform-surface-aggregator_registry-add-support-for.patch @@ -0,0 +1,78 @@ +From 836e34422e5030be12ec6a3fcaa062922f9ea295 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Sun, 13 Nov 2022 19:59:51 +0100 +Subject: platform/surface: aggregator_registry: Add support for Surface Pro 9 + +From: Maximilian Luz + +[ 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 +Link: https://lore.kernel.org/r/20221113185951.224759-2-luzmaximilian@gmail.com +Reviewed-by: Hans de Goede +Signed-off-by: Hans de Goede +Signed-off-by: Sasha Levin +--- + .../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 index 00000000000..2fb4911c269 --- /dev/null +++ b/queue-6.0/platform-surface-aggregator_registry-add-support-for.patch-2290 @@ -0,0 +1,59 @@ +From 46f493e43408250d0f8b58e3a235e22c8b83a2c7 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 16 Nov 2022 00:14:40 +0100 +Subject: platform/surface: aggregator_registry: Add support for Surface Laptop + 5 + +From: Maximilian Luz + +[ 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 +Link: https://lore.kernel.org/r/20221115231440.1338142-1-luzmaximilian@gmail.com +Signed-off-by: Hans de Goede +Signed-off-by: Sasha Levin +--- + .../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 index 00000000000..108b347f9e4 --- /dev/null +++ b/queue-6.0/platform-x86-acer-wmi-enable-sw_tablet_mode-on-switc.patch @@ -0,0 +1,48 @@ +From 0f680638773025470dff1b3daf60aa13bde4c083 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +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 + +[ 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 +Signed-off-by: Hans de Goede +Link: https://lore.kernel.org/r/20221111111639.35730-1-hdegoede@redhat.com +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..8fedeed05e5 --- /dev/null +++ b/queue-6.0/platform-x86-asus-wmi-add-missing-pci_dev_put-in-asu.patch @@ -0,0 +1,39 @@ +From f3275794226d0d8529b511862195385331b718c8 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +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 + +[ 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 +Link: https://lore.kernel.org/r/20221111100752.134311-1-wangxiongfeng2@huawei.com +Reviewed-by: Hans de Goede +Signed-off-by: Hans de Goede +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..9003b2e1498 --- /dev/null +++ b/queue-6.0/platform-x86-hp-wmi-ignore-smart-experience-app-even.patch @@ -0,0 +1,48 @@ +From 2ff5bcbdc196bd24a3057200f46799418f2c0d3a Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 14 Nov 2022 15:38:41 +0800 +Subject: platform/x86: hp-wmi: Ignore Smart Experience App event + +From: Kai-Heng Feng + +[ 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 +Link: https://lore.kernel.org/r/20221114073842.205392-1-kai.heng.feng@canonical.com +Reviewed-by: Hans de Goede +Signed-off-by: Hans de Goede +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..bd2d0e444c5 --- /dev/null +++ b/queue-6.0/platform-x86-ideapad-laptop-add-module-parameters-to.patch @@ -0,0 +1,64 @@ +From 7d66922145f6cf8fe214b457061b2fdcb0971c80 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +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 + +[ 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 +Link: https://lore.kernel.org/r/20221115193400.376159-1-hdegoede@redhat.com +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..e8b9461ae6e --- /dev/null +++ b/queue-6.0/platform-x86-ideapad-laptop-fix-interrupt-storm-on-f.patch @@ -0,0 +1,83 @@ +From 2d33848f119effee23a56cddc83df78b207c94b0 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +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 + +[ 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 +Signed-off-by: Arnav Rawat +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 +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..49b3fe29b79 --- /dev/null +++ b/queue-6.0/platform-x86-thinkpad_acpi-enable-s2idle-quirk-for-2.patch @@ -0,0 +1,51 @@ +From 68dcd50fe26fdb4b37ddad0b29393b4b0c8755bd Mon Sep 17 00:00:00 2001 +From: Sasha Levin +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 + +[ 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 +Suggested-by: Mario Limonciello +Reviewed-by: Mario Limonciello +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 +Signed-off-by: Hans de Goede +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..35c58c41891 --- /dev/null +++ b/queue-6.0/revert-tty-n_gsm-avoid-call-of-sleeping-functions-fr.patch @@ -0,0 +1,264 @@ +From 1c67b8d787b5f9ed65c3f17ad111725eb417ab17 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +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 + +[ 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 +Signed-off-by: Alexey Khoroshilov +Reviewed-by: Daniel Starke +Link: https://lore.kernel.org/r/20221008110221.13645-2-pchelkin@ispras.ru +Signed-off-by: Greg Kroah-Hartman +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..9454ed9efbc --- /dev/null +++ b/queue-6.0/revert-tty-n_gsm-replace-kicktimer-with-delayed_work.patch @@ -0,0 +1,89 @@ +From bed94b769d73f6b09ea9a4e8678f7c0541e28472 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Sat, 8 Oct 2022 14:02:21 +0300 +Subject: Revert "tty: n_gsm: replace kicktimer with delayed_work" + +From: Fedor Pchelkin + +[ 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 +Signed-off-by: Alexey Khoroshilov +Reviewed-by: Daniel Starke +Link: https://lore.kernel.org/r/20221008110221.13645-3-pchelkin@ispras.ru +Signed-off-by: Greg Kroah-Hartman +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..64bb5ec67b8 --- /dev/null +++ b/queue-6.0/scsi-iscsi-fix-possible-memory-leak-when-device_regi.patch @@ -0,0 +1,136 @@ +From d34fadc36c2e7fdf1b912aa640463febbe1ceb09 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 10 Nov 2022 03:37:29 +0000 +Subject: scsi: iscsi: Fix possible memory leak when device_register() failed + +From: Zhou Guanghui + +[ 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 +Link: https://lore.kernel.org/r/20221110033729.1555-1-zhouguanghui1@huawei.com +Reviewed-by: Mike Christie +Signed-off-by: Martin K. Petersen +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..96277b3df8b --- /dev/null +++ b/queue-6.0/scsi-mpi3mr-suppress-command-reply-debug-prints.patch @@ -0,0 +1,46 @@ +From 1570a98bd9ee478af6f5c94b0e923ae6162f4d7f Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 11 Nov 2022 10:44:49 +0900 +Subject: scsi: mpi3mr: Suppress command reply debug prints + +From: Shin'ichiro Kawasaki + +[ 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 +Link: https://lore.kernel.org/r/20221111014449.1649968-1-shinichiro.kawasaki@wdc.com +Reviewed-by: Damien Le Moal +Signed-off-by: Martin K. Petersen +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..6b20645ef3b --- /dev/null +++ b/queue-6.0/serial-8250-8250_omap-avoid-rs485-rts-glitch-on-set_.patch @@ -0,0 +1,94 @@ +From b64e1cdf6a96d74d12b1673b5a2050ba41a23963 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 27 Sep 2022 13:52:34 +0200 +Subject: serial: 8250: 8250_omap: Avoid RS485 RTS glitch on ->set_termios() + +From: Lukas Wunner + +[ 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 +Cc: Su Bao Cheng +Tested-by: Matthias Schiffer +Signed-off-by: Lukas Wunner +Link: https://lore.kernel.org/r/6554b0241a2c7fd50f32576fdbafed96709e11e8.1664278942.git.lukas@wunner.de +Signed-off-by: Greg Kroah-Hartman +Signed-off-by: Sasha Levin +--- + 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 + diff --git a/queue-6.0/series b/queue-6.0/series index acca2e2417f..9878dc65773 100644 --- a/queue-6.0/series +++ b/queue-6.0/series @@ -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 index 00000000000..b814783e323 --- /dev/null +++ b/queue-6.0/tcp-configurable-source-port-perturb-table-size.patch @@ -0,0 +1,78 @@ +From 7ef22f540d7aa521374692af71bb0dbcefeec166 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 14 Nov 2022 22:56:16 +0000 +Subject: tcp: configurable source port perturb table size + +From: Gleb Mazovetskiy + +[ 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 +Reviewed-by: Kuniyuki Iwashima +Signed-off-by: David S. Miller +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..9b8ff51d199 --- /dev/null +++ b/queue-6.0/tools-iio-iio_generic_buffer-fix-read-size.patch @@ -0,0 +1,62 @@ +From 1aff34bdac8e42351b02ce589f544b581784b8e8 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 14 Oct 2022 10:15:19 +0300 +Subject: tools: iio: iio_generic_buffer: Fix read size + +From: Matti Vaittinen + +[ 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 +Link: https://lore.kernel.org/r/Y0kMh0t5qUXJw3nQ@dc75zzyyyyyyyyyyyyycy-3.rev.dnainternet.fi +Signed-off-by: Jonathan Cameron +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..b37be34a13e --- /dev/null +++ b/queue-6.0/xen-pciback-allow-setting-pci_msix_flags_maskall-too.patch @@ -0,0 +1,69 @@ +From 9eaa35e6af36afee584272b0995ca99401a59d16 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +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 + +[ 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 +Reviewed-by: Jan Beulich +Link: https://lore.kernel.org/r/20221114103110.1519413-1-marmarek@invisiblethingslab.com +Signed-off-by: Juergen Gross +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..d00a0b1d106 --- /dev/null +++ b/queue-6.0/xen-platform-pci-add-missing-free_irq-in-error-path.patch @@ -0,0 +1,54 @@ +From 22b468ef30cb12be910a9d250fc9af59ce3f58a0 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 14 Nov 2022 19:21:24 +0800 +Subject: xen/platform-pci: add missing free_irq() in error path + +From: ruanjinjie + +[ Upstream commit c53717e1e3f0d0f9129b2e0dbc6dcc5e0a8132e9 ] + +free_irq() is missing in case of error in platform_pci_probe(), fix that. + +Signed-off-by: ruanjinjie +Reviewed-by: Oleksandr Tyshchenko +Link: https://lore.kernel.org/r/20221114112124.1965611-1-ruanjinjie@huawei.com +Signed-off-by: Juergen Gross +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..1251ea295e7 --- /dev/null +++ b/queue-6.0/zonefs-fix-zone-report-size-in-__zonefs_io_error.patch @@ -0,0 +1,142 @@ +From ad042a7659e2b492b96af717a8e9e6e5598c27a2 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 25 Oct 2022 13:39:31 +0900 +Subject: zonefs: fix zone report size in __zonefs_io_error() + +From: Damien Le Moal + +[ 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 +Signed-off-by: Damien Le Moal +Signed-off-by: Sasha Levin +--- + 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 + -- 2.47.3