]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
6.12-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 27 Dec 2024 16:15:33 +0000 (17:15 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 27 Dec 2024 16:15:33 +0000 (17:15 +0100)
added patches:
alsa-memalloc-prefer-dma_mapping_error-over-explicit-address-checking.patch
asoc-amd-ps-fix-for-enabling-dmic-on-acp63-platform-via-_dsd-entry.patch
asoc-dt-bindings-realtek-rt5645-fix-cpvdd-voltage-comment.patch
asoc-intel-sof_sdw-fix-dmi-match-for-lenovo-21q6-and-21q7.patch
asoc-intel-sof_sdw-fix-dmi-match-for-lenovo-21qa-and-21qb.patch
asoc-sof-intel-hda-dai-do-not-release-the-link-dma-on-stop.patch
dmaengine-amd-qdma-remove-using-the-private-get-and-set-dma_ops-apis.patch
dmaengine-apple-admac-avoid-accessing-registers-in-probe.patch
dmaengine-at_xdmac-avoid-null_prt_deref-in-at_xdmac_prep_dma_memset.patch
dmaengine-dw-select-only-supported-masters-for-acpi-devices.patch
dmaengine-fsl-edma-implement-the-cleanup-path-of-fsl_edma3_attach_pd.patch
dmaengine-mv_xor-fix-child-node-refcount-handling-in-early-exit.patch
dmaengine-tegra-return-correct-dma-status-when-paused.patch
mtd-rawnand-arasan-fix-double-assertion-of-chip-select.patch
mtd-rawnand-arasan-fix-missing-de-registration-of-nand.patch
mtd-rawnand-fix-double-free-in-atmel_pmecc_create_user.patch
phy-core-fix-an-of-node-refcount-leakage-in-_of_phy_get.patch
phy-core-fix-an-of-node-refcount-leakage-in-of_phy_provider_lookup.patch
phy-core-fix-that-api-devm_of_phy_provider_unregister-fails-to-unregister-the-phy-provider.patch
phy-core-fix-that-api-devm_phy_destroy-fails-to-destroy-the-phy.patch
phy-core-fix-that-api-devm_phy_put-fails-to-release-the-phy.patch
phy-qcom-qmp-fix-register-name-in-rx-lane-config-of-sc8280xp.patch
phy-rockchip-naneng-combphy-fix-phy-reset.patch
phy-rockchip-samsung-hdptx-set-drvdata-before-enabling-runtime-pm.patch
phy-usb-toggle-the-phy-power-during-init.patch
platform-chrome-cros_ec_lpc-fix-product-identity-for-early-framework-laptops.patch

27 files changed:
queue-6.12/alsa-memalloc-prefer-dma_mapping_error-over-explicit-address-checking.patch [new file with mode: 0644]
queue-6.12/asoc-amd-ps-fix-for-enabling-dmic-on-acp63-platform-via-_dsd-entry.patch [new file with mode: 0644]
queue-6.12/asoc-dt-bindings-realtek-rt5645-fix-cpvdd-voltage-comment.patch [new file with mode: 0644]
queue-6.12/asoc-intel-sof_sdw-fix-dmi-match-for-lenovo-21q6-and-21q7.patch [new file with mode: 0644]
queue-6.12/asoc-intel-sof_sdw-fix-dmi-match-for-lenovo-21qa-and-21qb.patch [new file with mode: 0644]
queue-6.12/asoc-sof-intel-hda-dai-do-not-release-the-link-dma-on-stop.patch [new file with mode: 0644]
queue-6.12/dmaengine-amd-qdma-remove-using-the-private-get-and-set-dma_ops-apis.patch [new file with mode: 0644]
queue-6.12/dmaengine-apple-admac-avoid-accessing-registers-in-probe.patch [new file with mode: 0644]
queue-6.12/dmaengine-at_xdmac-avoid-null_prt_deref-in-at_xdmac_prep_dma_memset.patch [new file with mode: 0644]
queue-6.12/dmaengine-dw-select-only-supported-masters-for-acpi-devices.patch [new file with mode: 0644]
queue-6.12/dmaengine-fsl-edma-implement-the-cleanup-path-of-fsl_edma3_attach_pd.patch [new file with mode: 0644]
queue-6.12/dmaengine-mv_xor-fix-child-node-refcount-handling-in-early-exit.patch [new file with mode: 0644]
queue-6.12/dmaengine-tegra-return-correct-dma-status-when-paused.patch [new file with mode: 0644]
queue-6.12/mtd-rawnand-arasan-fix-double-assertion-of-chip-select.patch [new file with mode: 0644]
queue-6.12/mtd-rawnand-arasan-fix-missing-de-registration-of-nand.patch [new file with mode: 0644]
queue-6.12/mtd-rawnand-fix-double-free-in-atmel_pmecc_create_user.patch [new file with mode: 0644]
queue-6.12/phy-core-fix-an-of-node-refcount-leakage-in-_of_phy_get.patch [new file with mode: 0644]
queue-6.12/phy-core-fix-an-of-node-refcount-leakage-in-of_phy_provider_lookup.patch [new file with mode: 0644]
queue-6.12/phy-core-fix-that-api-devm_of_phy_provider_unregister-fails-to-unregister-the-phy-provider.patch [new file with mode: 0644]
queue-6.12/phy-core-fix-that-api-devm_phy_destroy-fails-to-destroy-the-phy.patch [new file with mode: 0644]
queue-6.12/phy-core-fix-that-api-devm_phy_put-fails-to-release-the-phy.patch [new file with mode: 0644]
queue-6.12/phy-qcom-qmp-fix-register-name-in-rx-lane-config-of-sc8280xp.patch [new file with mode: 0644]
queue-6.12/phy-rockchip-naneng-combphy-fix-phy-reset.patch [new file with mode: 0644]
queue-6.12/phy-rockchip-samsung-hdptx-set-drvdata-before-enabling-runtime-pm.patch [new file with mode: 0644]
queue-6.12/phy-usb-toggle-the-phy-power-during-init.patch [new file with mode: 0644]
queue-6.12/platform-chrome-cros_ec_lpc-fix-product-identity-for-early-framework-laptops.patch [new file with mode: 0644]
queue-6.12/series

diff --git a/queue-6.12/alsa-memalloc-prefer-dma_mapping_error-over-explicit-address-checking.patch b/queue-6.12/alsa-memalloc-prefer-dma_mapping_error-over-explicit-address-checking.patch
new file mode 100644 (file)
index 0000000..b6d0efc
--- /dev/null
@@ -0,0 +1,53 @@
+From fa0308134d26dbbeb209a1581eea46df663866b6 Mon Sep 17 00:00:00 2001
+From: Fedor Pchelkin <pchelkin@ispras.ru>
+Date: Thu, 19 Dec 2024 23:33:45 +0300
+Subject: ALSA: memalloc: prefer dma_mapping_error() over explicit address checking
+
+From: Fedor Pchelkin <pchelkin@ispras.ru>
+
+commit fa0308134d26dbbeb209a1581eea46df663866b6 upstream.
+
+With CONFIG_DMA_API_DEBUG enabled, the following warning is observed:
+
+DMA-API: snd_hda_intel 0000:03:00.1: device driver failed to check map error[device address=0x00000000ffff0000] [size=20480 bytes] [mapped as single]
+WARNING: CPU: 28 PID: 2255 at kernel/dma/debug.c:1036 check_unmap+0x1408/0x2430
+CPU: 28 UID: 42 PID: 2255 Comm: wireplumber Tainted: G  W L  6.12.0-10-133577cad6bf48e5a7848c4338124081393bfe8a+ #759
+debug_dma_unmap_page+0xe9/0xf0
+snd_dma_wc_free+0x85/0x130 [snd_pcm]
+snd_pcm_lib_free_pages+0x1e3/0x440 [snd_pcm]
+snd_pcm_common_ioctl+0x1c9a/0x2960 [snd_pcm]
+snd_pcm_ioctl+0x6a/0xc0 [snd_pcm]
+...
+
+Check for returned DMA addresses using specialized dma_mapping_error()
+helper which is generally recommended for this purpose by
+Documentation/core-api/dma-api.rst.
+
+Fixes: c880a5146642 ("ALSA: memalloc: Use proper DMA mapping API for x86 WC buffer allocations")
+Reported-by: Mikhail Gavrilov <mikhail.v.gavrilov@gmail.com>
+Closes: https://lore.kernel.org/r/CABXGCsNB3RsMGvCucOy3byTEOxoc-Ys+zB_HQ=Opb_GhX1ioDA@mail.gmail.com/
+Tested-by: Mikhail Gavrilov <mikhail.v.gavrilov@gmail.com>
+Signed-off-by: Fedor Pchelkin <pchelkin@ispras.ru>
+Link: https://patch.msgid.link/20241219203345.195898-1-pchelkin@ispras.ru
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ sound/core/memalloc.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/sound/core/memalloc.c b/sound/core/memalloc.c
+index 13b71069ae18..b3853583d2ae 100644
+--- a/sound/core/memalloc.c
++++ b/sound/core/memalloc.c
+@@ -505,7 +505,7 @@ static void *snd_dma_wc_alloc(struct snd_dma_buffer *dmab, size_t size)
+       if (!p)
+               return NULL;
+       dmab->addr = dma_map_single(dmab->dev.dev, p, size, DMA_BIDIRECTIONAL);
+-      if (dmab->addr == DMA_MAPPING_ERROR) {
++      if (dma_mapping_error(dmab->dev.dev, dmab->addr)) {
+               do_free_pages(dmab->area, size, true);
+               return NULL;
+       }
+-- 
+2.47.1
+
diff --git a/queue-6.12/asoc-amd-ps-fix-for-enabling-dmic-on-acp63-platform-via-_dsd-entry.patch b/queue-6.12/asoc-amd-ps-fix-for-enabling-dmic-on-acp63-platform-via-_dsd-entry.patch
new file mode 100644 (file)
index 0000000..612c999
--- /dev/null
@@ -0,0 +1,63 @@
+From 88438444fdddd0244c8b2697713adcca3e71599e Mon Sep 17 00:00:00 2001
+From: Venkata Prasad Potturu <venkataprasad.potturu@amd.com>
+Date: Fri, 13 Dec 2024 11:41:46 +0530
+Subject: ASoC: amd: ps: Fix for enabling DMIC on acp63 platform via _DSD entry
+
+From: Venkata Prasad Potturu <venkataprasad.potturu@amd.com>
+
+commit 88438444fdddd0244c8b2697713adcca3e71599e upstream.
+
+Add condition check to register ACP PDM sound card by reading
+_WOV acpi entry.
+
+Fixes: 0386d765f27a ("ASoC: amd: ps: refactor acp device configuration read logic")
+
+Signed-off-by: Venkata Prasad Potturu <venkataprasad.potturu@amd.com>
+Link: https://patch.msgid.link/20241213061147.1060451-1-venkataprasad.potturu@amd.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ sound/soc/amd/ps/pci-ps.c |   17 ++++++++++++++++-
+ 1 file changed, 16 insertions(+), 1 deletion(-)
+
+--- a/sound/soc/amd/ps/pci-ps.c
++++ b/sound/soc/amd/ps/pci-ps.c
+@@ -375,11 +375,18 @@ static int get_acp63_device_config(struc
+ {
+       struct acpi_device *pdm_dev;
+       const union acpi_object *obj;
++      acpi_handle handle;
++      acpi_integer dmic_status;
+       u32 config;
+       bool is_dmic_dev = false;
+       bool is_sdw_dev = false;
++      bool wov_en, dmic_en;
+       int ret;
++      /* IF WOV entry not found, enable dmic based on acp-audio-device-type entry*/
++      wov_en = true;
++      dmic_en = false;
++
+       config = readl(acp_data->acp63_base + ACP_PIN_CONFIG);
+       switch (config) {
+       case ACP_CONFIG_4:
+@@ -412,10 +419,18 @@ static int get_acp63_device_config(struc
+                       if (!acpi_dev_get_property(pdm_dev, "acp-audio-device-type",
+                                                  ACPI_TYPE_INTEGER, &obj) &&
+                                                  obj->integer.value == ACP_DMIC_DEV)
+-                              is_dmic_dev = true;
++                              dmic_en = true;
+               }
++
++              handle = ACPI_HANDLE(&pci->dev);
++              ret = acpi_evaluate_integer(handle, "_WOV", NULL, &dmic_status);
++              if (!ACPI_FAILURE(ret))
++                      wov_en = dmic_status;
+       }
++      if (dmic_en && wov_en)
++              is_dmic_dev = true;
++
+       if (acp_data->is_sdw_config) {
+               ret = acp_scan_sdw_devices(&pci->dev, ACP63_SDW_ADDR);
+               if (!ret && acp_data->info.link_mask)
diff --git a/queue-6.12/asoc-dt-bindings-realtek-rt5645-fix-cpvdd-voltage-comment.patch b/queue-6.12/asoc-dt-bindings-realtek-rt5645-fix-cpvdd-voltage-comment.patch
new file mode 100644 (file)
index 0000000..4243ff7
--- /dev/null
@@ -0,0 +1,42 @@
+From 6f4a0fd03ce856c6d9811429b9969b4f27e2eaee Mon Sep 17 00:00:00 2001
+From: Chen-Yu Tsai <wenst@chromium.org>
+Date: Wed, 11 Dec 2024 11:54:02 +0800
+Subject: ASoC: dt-bindings: realtek,rt5645: Fix CPVDD voltage comment
+
+From: Chen-Yu Tsai <wenst@chromium.org>
+
+commit 6f4a0fd03ce856c6d9811429b9969b4f27e2eaee upstream.
+
+Both the ALC5645 and ALC5650 datasheets specify a recommended voltage of
+1.8V for CPVDD, not 3.5V.
+
+Fix the comment.
+
+Cc: Matthias Brugger <matthias.bgg@gmail.com>
+Fixes: 26aa19174f0d ("ASoC: dt-bindings: rt5645: add suppliers")
+Fixes: 83d43ab0a1cb ("ASoC: dt-bindings: realtek,rt5645: Convert to dtschema")
+Signed-off-by: Chen-Yu Tsai <wenst@chromium.org>
+Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
+Link: https://patch.msgid.link/20241211035403.4157760-1-wenst@chromium.org
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ Documentation/devicetree/bindings/sound/realtek,rt5645.yaml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Documentation/devicetree/bindings/sound/realtek,rt5645.yaml b/Documentation/devicetree/bindings/sound/realtek,rt5645.yaml
+index 13f09f1bc800..0a698798c22b 100644
+--- a/Documentation/devicetree/bindings/sound/realtek,rt5645.yaml
++++ b/Documentation/devicetree/bindings/sound/realtek,rt5645.yaml
+@@ -51,7 +51,7 @@ properties:
+     description: Power supply for AVDD, providing 1.8V.
+   cpvdd-supply:
+-    description: Power supply for CPVDD, providing 3.5V.
++    description: Power supply for CPVDD, providing 1.8V.
+   hp-detect-gpios:
+     description: 
+-- 
+2.47.1
+
diff --git a/queue-6.12/asoc-intel-sof_sdw-fix-dmi-match-for-lenovo-21q6-and-21q7.patch b/queue-6.12/asoc-intel-sof_sdw-fix-dmi-match-for-lenovo-21q6-and-21q7.patch
new file mode 100644 (file)
index 0000000..fee56a0
--- /dev/null
@@ -0,0 +1,46 @@
+From 7c449ef0fdce540bfb235a2d93e7184864c3388b Mon Sep 17 00:00:00 2001
+From: Richard Fitzgerald <rf@opensource.cirrus.com>
+Date: Mon, 16 Dec 2024 22:08:20 +0800
+Subject: ASoC: Intel: sof_sdw: Fix DMI match for Lenovo 21Q6 and 21Q7
+
+From: Richard Fitzgerald <rf@opensource.cirrus.com>
+
+commit 7c449ef0fdce540bfb235a2d93e7184864c3388b upstream.
+
+Update the DMI match for a Lenovo laptop to the new DMI identifier.
+
+This laptop ships with a different DMI identifier to what was expected,
+and now has two identifiers.
+
+Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com>
+Fixes: 83c062ae81e8 ("ASoC: Intel: sof_sdw: Add quirks for some new Lenovo laptops")
+Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com>
+Link: https://patch.msgid.link/20241216140821.153670-2-yung-chuan.liao@linux.intel.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ sound/soc/intel/boards/sof_sdw.c |   12 ++++++++++--
+ 1 file changed, 10 insertions(+), 2 deletions(-)
+
+--- a/sound/soc/intel/boards/sof_sdw.c
++++ b/sound/soc/intel/boards/sof_sdw.c
+@@ -626,9 +626,17 @@ static const struct dmi_system_id sof_sd
+               .callback = sof_sdw_quirk_cb,
+               .matches = {
+                       DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
+-                      DMI_EXACT_MATCH(DMI_PRODUCT_SKU, "233B")
++                      DMI_MATCH(DMI_PRODUCT_NAME, "21Q6")
+               },
+-              .driver_data = (void *)(SOC_SDW_SIDECAR_AMPS),
++              .driver_data = (void *)(SOC_SDW_SIDECAR_AMPS | SOC_SDW_CODEC_MIC),
++      },
++      {
++              .callback = sof_sdw_quirk_cb,
++              .matches = {
++                      DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
++                      DMI_MATCH(DMI_PRODUCT_NAME, "21Q7")
++              },
++              .driver_data = (void *)(SOC_SDW_SIDECAR_AMPS | SOC_SDW_CODEC_MIC),
+       },
+       /* ArrowLake devices */
diff --git a/queue-6.12/asoc-intel-sof_sdw-fix-dmi-match-for-lenovo-21qa-and-21qb.patch b/queue-6.12/asoc-intel-sof_sdw-fix-dmi-match-for-lenovo-21qa-and-21qb.patch
new file mode 100644 (file)
index 0000000..57f2e1d
--- /dev/null
@@ -0,0 +1,44 @@
+From ba7d47a54bf23a7201bdd2978e16b04fc1cb1f6e Mon Sep 17 00:00:00 2001
+From: Richard Fitzgerald <rf@opensource.cirrus.com>
+Date: Mon, 16 Dec 2024 22:08:21 +0800
+Subject: ASoC: Intel: sof_sdw: Fix DMI match for Lenovo 21QA and 21QB
+
+From: Richard Fitzgerald <rf@opensource.cirrus.com>
+
+commit ba7d47a54bf23a7201bdd2978e16b04fc1cb1f6e upstream.
+
+Update the DMI match for a Lenovo laptop to the new DMI identifier.
+
+This laptop ships with a different DMI identifier to what was expected,
+and now has two identifiers.
+
+Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com>
+Fixes: ea657f6b24e1 ("ASoC: Intel: sof_sdw: Add quirk for cs42l43 system using host DMICs")
+Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com>
+Link: https://patch.msgid.link/20241216140821.153670-3-yung-chuan.liao@linux.intel.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ sound/soc/intel/boards/sof_sdw.c |   11 ++++++++++-
+ 1 file changed, 10 insertions(+), 1 deletion(-)
+
+--- a/sound/soc/intel/boards/sof_sdw.c
++++ b/sound/soc/intel/boards/sof_sdw.c
+@@ -608,7 +608,16 @@ static const struct dmi_system_id sof_sd
+               .callback = sof_sdw_quirk_cb,
+               .matches = {
+                       DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
+-                      DMI_EXACT_MATCH(DMI_PRODUCT_SKU, "233C")
++                      DMI_MATCH(DMI_PRODUCT_NAME, "21QB")
++              },
++              /* Note this quirk excludes the CODEC mic */
++              .driver_data = (void *)(SOC_SDW_CODEC_MIC),
++      },
++      {
++              .callback = sof_sdw_quirk_cb,
++              .matches = {
++                      DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
++                      DMI_MATCH(DMI_PRODUCT_NAME, "21QA")
+               },
+               /* Note this quirk excludes the CODEC mic */
+               .driver_data = (void *)(SOC_SDW_CODEC_MIC),
diff --git a/queue-6.12/asoc-sof-intel-hda-dai-do-not-release-the-link-dma-on-stop.patch b/queue-6.12/asoc-sof-intel-hda-dai-do-not-release-the-link-dma-on-stop.patch
new file mode 100644 (file)
index 0000000..a56a851
--- /dev/null
@@ -0,0 +1,111 @@
+From e8d0ba147d901022bcb69da8d8fd817f84e9f3ca Mon Sep 17 00:00:00 2001
+From: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
+Date: Tue, 17 Dec 2024 11:10:19 +0200
+Subject: ASoC: SOF: Intel: hda-dai: Do not release the link DMA on STOP
+
+From: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
+
+commit e8d0ba147d901022bcb69da8d8fd817f84e9f3ca upstream.
+
+The linkDMA should not be released on stop trigger since a stream re-start
+might happen without closing of the stream. This leaves a short time for
+other streams to 'steal' the linkDMA since it has been released.
+
+This issue is not easy to reproduce under normal conditions as usually
+after stop the stream is closed, or the same stream is restarted, but if
+another stream got in between the stop and start, like this:
+aplay -Dhw:0,3 -c2 -r48000 -fS32_LE /dev/zero -d 120
+CTRL+z
+aplay -Dhw:0,0 -c2 -r48000 -fS32_LE /dev/zero -d 120
+
+then the link DMA channels will be mixed up, resulting firmware error or
+crash.
+
+Fixes: ab5593793e90 ("ASoC: SOF: Intel: hda: Always clean up link DMA during stop")
+Cc: stable@vger.kernel.org
+Closes: https://github.com/thesofproject/sof/issues/9695
+Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
+Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
+Reviewed-by: Liam Girdwood <liam.r.girdwood@intel.com>
+Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
+Link: https://patch.msgid.link/20241217091019.31798-1-peter.ujfalusi@linux.intel.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ sound/soc/sof/intel/hda-dai.c |   25 +++++++++++++++++++------
+ sound/soc/sof/intel/hda.h     |    2 --
+ 2 files changed, 19 insertions(+), 8 deletions(-)
+
+--- a/sound/soc/sof/intel/hda-dai.c
++++ b/sound/soc/sof/intel/hda-dai.c
+@@ -103,8 +103,10 @@ hda_dai_get_ops(struct snd_pcm_substream
+       return sdai->platform_private;
+ }
+-int hda_link_dma_cleanup(struct snd_pcm_substream *substream, struct hdac_ext_stream *hext_stream,
+-                       struct snd_soc_dai *cpu_dai)
++static int
++hda_link_dma_cleanup(struct snd_pcm_substream *substream,
++                   struct hdac_ext_stream *hext_stream,
++                   struct snd_soc_dai *cpu_dai, bool release)
+ {
+       const struct hda_dai_widget_dma_ops *ops = hda_dai_get_ops(substream, cpu_dai);
+       struct sof_intel_hda_stream *hda_stream;
+@@ -128,6 +130,17 @@ int hda_link_dma_cleanup(struct snd_pcm_
+               snd_hdac_ext_bus_link_clear_stream_id(hlink, stream_tag);
+       }
++      if (!release) {
++              /*
++               * Force stream reconfiguration without releasing the channel on
++               * subsequent stream restart (without free), including LinkDMA
++               * reset.
++               * The stream is released via hda_dai_hw_free()
++               */
++              hext_stream->link_prepared = 0;
++              return 0;
++      }
++
+       if (ops->release_hext_stream)
+               ops->release_hext_stream(sdev, cpu_dai, substream);
+@@ -211,7 +224,7 @@ static int __maybe_unused hda_dai_hw_fre
+       if (!hext_stream)
+               return 0;
+-      return hda_link_dma_cleanup(substream, hext_stream, cpu_dai);
++      return hda_link_dma_cleanup(substream, hext_stream, cpu_dai, true);
+ }
+ static int __maybe_unused hda_dai_hw_params_data(struct snd_pcm_substream *substream,
+@@ -304,7 +317,8 @@ static int __maybe_unused hda_dai_trigge
+       switch (cmd) {
+       case SNDRV_PCM_TRIGGER_STOP:
+       case SNDRV_PCM_TRIGGER_SUSPEND:
+-              ret = hda_link_dma_cleanup(substream, hext_stream, dai);
++              ret = hda_link_dma_cleanup(substream, hext_stream, dai,
++                                         cmd == SNDRV_PCM_TRIGGER_STOP ? false : true);
+               if (ret < 0) {
+                       dev_err(sdev->dev, "%s: failed to clean up link DMA\n", __func__);
+                       return ret;
+@@ -656,8 +670,7 @@ static int hda_dai_suspend(struct hdac_b
+                       }
+                       ret = hda_link_dma_cleanup(hext_stream->link_substream,
+-                                                 hext_stream,
+-                                                 cpu_dai);
++                                                 hext_stream, cpu_dai, true);
+                       if (ret < 0)
+                               return ret;
+               }
+--- a/sound/soc/sof/intel/hda.h
++++ b/sound/soc/sof/intel/hda.h
+@@ -1028,8 +1028,6 @@ const struct hda_dai_widget_dma_ops *
+ hda_select_dai_widget_ops(struct snd_sof_dev *sdev, struct snd_sof_widget *swidget);
+ int hda_dai_config(struct snd_soc_dapm_widget *w, unsigned int flags,
+                  struct snd_sof_dai_config_data *data);
+-int hda_link_dma_cleanup(struct snd_pcm_substream *substream, struct hdac_ext_stream *hext_stream,
+-                       struct snd_soc_dai *cpu_dai);
+ static inline struct snd_sof_dev *widget_to_sdev(struct snd_soc_dapm_widget *w)
+ {
diff --git a/queue-6.12/dmaengine-amd-qdma-remove-using-the-private-get-and-set-dma_ops-apis.patch b/queue-6.12/dmaengine-amd-qdma-remove-using-the-private-get-and-set-dma_ops-apis.patch
new file mode 100644 (file)
index 0000000..d1aa83e
--- /dev/null
@@ -0,0 +1,143 @@
+From dcbef0798eb825cd584f7a93f62bed63f7fbbfc9 Mon Sep 17 00:00:00 2001
+From: Lizhi Hou <lizhi.hou@amd.com>
+Date: Wed, 18 Sep 2024 11:10:22 -0700
+Subject: dmaengine: amd: qdma: Remove using the private get and set dma_ops APIs
+
+From: Lizhi Hou <lizhi.hou@amd.com>
+
+commit dcbef0798eb825cd584f7a93f62bed63f7fbbfc9 upstream.
+
+The get_dma_ops and set_dma_ops APIs were never for driver to use. Remove
+these calls from QDMA driver. Instead, pass the DMA device pointer from the
+qdma_platdata structure.
+
+Fixes: 73d5fc92a11c ("dmaengine: amd: qdma: Add AMD QDMA driver")
+Signed-off-by: Lizhi Hou <lizhi.hou@amd.com>
+Reviewed-by: Christoph Hellwig <hch@lst.de>
+Link: https://lore.kernel.org/r/20240918181022.2155715-1-lizhi.hou@amd.com
+Signed-off-by: Vinod Koul <vkoul@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/dma/amd/qdma/qdma.c            | 28 +++++++++++---------------
+ include/linux/platform_data/amd_qdma.h |  2 ++
+ 2 files changed, 14 insertions(+), 16 deletions(-)
+
+diff --git a/drivers/dma/amd/qdma/qdma.c b/drivers/dma/amd/qdma/qdma.c
+index 6d9079458fe9..66f00ad67351 100644
+--- a/drivers/dma/amd/qdma/qdma.c
++++ b/drivers/dma/amd/qdma/qdma.c
+@@ -7,9 +7,9 @@
+ #include <linux/bitfield.h>
+ #include <linux/bitops.h>
+ #include <linux/dmaengine.h>
++#include <linux/dma-mapping.h>
+ #include <linux/module.h>
+ #include <linux/mod_devicetable.h>
+-#include <linux/dma-map-ops.h>
+ #include <linux/platform_device.h>
+ #include <linux/platform_data/amd_qdma.h>
+ #include <linux/regmap.h>
+@@ -492,18 +492,9 @@ static int qdma_device_verify(struct qdma_device *qdev)
+ static int qdma_device_setup(struct qdma_device *qdev)
+ {
+-      struct device *dev = &qdev->pdev->dev;
+       u32 ring_sz = QDMA_DEFAULT_RING_SIZE;
+       int ret = 0;
+-      while (dev && get_dma_ops(dev))
+-              dev = dev->parent;
+-      if (!dev) {
+-              qdma_err(qdev, "dma device not found");
+-              return -EINVAL;
+-      }
+-      set_dma_ops(&qdev->pdev->dev, get_dma_ops(dev));
+-
+       ret = qdma_setup_fmap_context(qdev);
+       if (ret) {
+               qdma_err(qdev, "Failed setup fmap context");
+@@ -548,11 +539,12 @@ static void qdma_free_queue_resources(struct dma_chan *chan)
+ {
+       struct qdma_queue *queue = to_qdma_queue(chan);
+       struct qdma_device *qdev = queue->qdev;
+-      struct device *dev = qdev->dma_dev.dev;
++      struct qdma_platdata *pdata;
+       qdma_clear_queue_context(queue);
+       vchan_free_chan_resources(&queue->vchan);
+-      dma_free_coherent(dev, queue->ring_size * QDMA_MM_DESC_SIZE,
++      pdata = dev_get_platdata(&qdev->pdev->dev);
++      dma_free_coherent(pdata->dma_dev, queue->ring_size * QDMA_MM_DESC_SIZE,
+                         queue->desc_base, queue->dma_desc_base);
+ }
+@@ -565,6 +557,7 @@ static int qdma_alloc_queue_resources(struct dma_chan *chan)
+       struct qdma_queue *queue = to_qdma_queue(chan);
+       struct qdma_device *qdev = queue->qdev;
+       struct qdma_ctxt_sw_desc desc;
++      struct qdma_platdata *pdata;
+       size_t size;
+       int ret;
+@@ -572,8 +565,9 @@ static int qdma_alloc_queue_resources(struct dma_chan *chan)
+       if (ret)
+               return ret;
++      pdata = dev_get_platdata(&qdev->pdev->dev);
+       size = queue->ring_size * QDMA_MM_DESC_SIZE;
+-      queue->desc_base = dma_alloc_coherent(qdev->dma_dev.dev, size,
++      queue->desc_base = dma_alloc_coherent(pdata->dma_dev, size,
+                                             &queue->dma_desc_base,
+                                             GFP_KERNEL);
+       if (!queue->desc_base) {
+@@ -588,7 +582,7 @@ static int qdma_alloc_queue_resources(struct dma_chan *chan)
+       if (ret) {
+               qdma_err(qdev, "Failed to setup SW desc ctxt for %s",
+                        chan->name);
+-              dma_free_coherent(qdev->dma_dev.dev, size, queue->desc_base,
++              dma_free_coherent(pdata->dma_dev, size, queue->desc_base,
+                                 queue->dma_desc_base);
+               return ret;
+       }
+@@ -948,8 +942,9 @@ static int qdma_init_error_irq(struct qdma_device *qdev)
+ static int qdmam_alloc_qintr_rings(struct qdma_device *qdev)
+ {
+-      u32 ctxt[QDMA_CTXT_REGMAP_LEN];
++      struct qdma_platdata *pdata = dev_get_platdata(&qdev->pdev->dev);
+       struct device *dev = &qdev->pdev->dev;
++      u32 ctxt[QDMA_CTXT_REGMAP_LEN];
+       struct qdma_intr_ring *ring;
+       struct qdma_ctxt_intr intr_ctxt;
+       u32 vector;
+@@ -969,7 +964,8 @@ static int qdmam_alloc_qintr_rings(struct qdma_device *qdev)
+               ring->msix_id = qdev->err_irq_idx + i + 1;
+               ring->ridx = i;
+               ring->color = 1;
+-              ring->base = dmam_alloc_coherent(dev, QDMA_INTR_RING_SIZE,
++              ring->base = dmam_alloc_coherent(pdata->dma_dev,
++                                               QDMA_INTR_RING_SIZE,
+                                                &ring->dev_base, GFP_KERNEL);
+               if (!ring->base) {
+                       qdma_err(qdev, "Failed to alloc intr ring %d", i);
+diff --git a/include/linux/platform_data/amd_qdma.h b/include/linux/platform_data/amd_qdma.h
+index 576d952f97ed..967a6ef31cf9 100644
+--- a/include/linux/platform_data/amd_qdma.h
++++ b/include/linux/platform_data/amd_qdma.h
+@@ -26,11 +26,13 @@ struct dma_slave_map;
+  * @max_mm_channels: Maximum number of MM DMA channels in each direction
+  * @device_map: DMA slave map
+  * @irq_index: The index of first IRQ
++ * @dma_dev: The device pointer for dma operations
+  */
+ struct qdma_platdata {
+       u32                     max_mm_channels;
+       u32                     irq_index;
+       struct dma_slave_map    *device_map;
++      struct device           *dma_dev;
+ };
+ #endif /* _PLATDATA_AMD_QDMA_H */
+-- 
+2.47.1
+
diff --git a/queue-6.12/dmaengine-apple-admac-avoid-accessing-registers-in-probe.patch b/queue-6.12/dmaengine-apple-admac-avoid-accessing-registers-in-probe.patch
new file mode 100644 (file)
index 0000000..a5239f7
--- /dev/null
@@ -0,0 +1,47 @@
+From 8d55e8a16f019211163f1180fd9f9fbe05901900 Mon Sep 17 00:00:00 2001
+From: Sasha Finkelstein <fnkl.kernel@gmail.com>
+Date: Sun, 24 Nov 2024 16:48:28 +0100
+Subject: dmaengine: apple-admac: Avoid accessing registers in probe
+
+From: Sasha Finkelstein <fnkl.kernel@gmail.com>
+
+commit 8d55e8a16f019211163f1180fd9f9fbe05901900 upstream.
+
+The ADMAC attached to the AOP has complex power sequencing, and is
+power gated when the probe callback runs. Move the register reads
+to other functions, where we can guarantee that the hardware is
+switched on.
+
+Fixes: 568aa6dd641f ("dmaengine: apple-admac: Allocate cache SRAM to channels")
+Signed-off-by: Sasha Finkelstein <fnkl.kernel@gmail.com>
+Link: https://lore.kernel.org/r/20241124-admac-power-v1-1-58f2165a4d55@gmail.com
+Signed-off-by: Vinod Koul <vkoul@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/dma/apple-admac.c |    7 ++-----
+ 1 file changed, 2 insertions(+), 5 deletions(-)
+
+--- a/drivers/dma/apple-admac.c
++++ b/drivers/dma/apple-admac.c
+@@ -153,6 +153,8 @@ static int admac_alloc_sram_carveout(str
+ {
+       struct admac_sram *sram;
+       int i, ret = 0, nblocks;
++      ad->txcache.size = readl_relaxed(ad->base + REG_TX_SRAM_SIZE);
++      ad->rxcache.size = readl_relaxed(ad->base + REG_RX_SRAM_SIZE);
+       if (dir == DMA_MEM_TO_DEV)
+               sram = &ad->txcache;
+@@ -912,12 +914,7 @@ static int admac_probe(struct platform_d
+               goto free_irq;
+       }
+-      ad->txcache.size = readl_relaxed(ad->base + REG_TX_SRAM_SIZE);
+-      ad->rxcache.size = readl_relaxed(ad->base + REG_RX_SRAM_SIZE);
+-
+       dev_info(&pdev->dev, "Audio DMA Controller\n");
+-      dev_info(&pdev->dev, "imprint %x TX cache %u RX cache %u\n",
+-               readl_relaxed(ad->base + REG_IMPRINT), ad->txcache.size, ad->rxcache.size);
+       return 0;
diff --git a/queue-6.12/dmaengine-at_xdmac-avoid-null_prt_deref-in-at_xdmac_prep_dma_memset.patch b/queue-6.12/dmaengine-at_xdmac-avoid-null_prt_deref-in-at_xdmac_prep_dma_memset.patch
new file mode 100644 (file)
index 0000000..9a834cc
--- /dev/null
@@ -0,0 +1,34 @@
+From c43ec96e8d34399bd9dab2f2dc316b904892133f Mon Sep 17 00:00:00 2001
+From: Chen Ridong <chenridong@huawei.com>
+Date: Tue, 29 Oct 2024 08:28:45 +0000
+Subject: dmaengine: at_xdmac: avoid null_prt_deref in at_xdmac_prep_dma_memset
+
+From: Chen Ridong <chenridong@huawei.com>
+
+commit c43ec96e8d34399bd9dab2f2dc316b904892133f upstream.
+
+The at_xdmac_memset_create_desc may return NULL, which will lead to a
+null pointer dereference. For example, the len input is error, or the
+atchan->free_descs_list is empty and memory is exhausted. Therefore, add
+check to avoid this.
+
+Fixes: b206d9a23ac7 ("dmaengine: xdmac: Add memset support")
+Signed-off-by: Chen Ridong <chenridong@huawei.com>
+Link: https://lore.kernel.org/r/20241029082845.1185380-1-chenridong@huaweicloud.com
+Signed-off-by: Vinod Koul <vkoul@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/dma/at_xdmac.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/drivers/dma/at_xdmac.c
++++ b/drivers/dma/at_xdmac.c
+@@ -1363,6 +1363,8 @@ at_xdmac_prep_dma_memset(struct dma_chan
+               return NULL;
+       desc = at_xdmac_memset_create_desc(chan, atchan, dest, len, value);
++      if (!desc)
++              return NULL;
+       list_add_tail(&desc->desc_node, &desc->descs_list);
+       desc->tx_dma_desc.cookie = -EBUSY;
diff --git a/queue-6.12/dmaengine-dw-select-only-supported-masters-for-acpi-devices.patch b/queue-6.12/dmaengine-dw-select-only-supported-masters-for-acpi-devices.patch
new file mode 100644 (file)
index 0000000..8d61ed6
--- /dev/null
@@ -0,0 +1,124 @@
+From f0e870a0e9c5521f2952ea9f3ea9d3d122631a89 Mon Sep 17 00:00:00 2001
+From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
+Date: Mon, 4 Nov 2024 11:50:50 +0200
+Subject: dmaengine: dw: Select only supported masters for ACPI devices
+
+From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
+
+commit f0e870a0e9c5521f2952ea9f3ea9d3d122631a89 upstream.
+
+The recently submitted fix-commit revealed a problem in the iDMA 32-bit
+platform code. Even though the controller supported only a single master
+the dw_dma_acpi_filter() method hard-coded two master interfaces with IDs
+0 and 1. As a result the sanity check implemented in the commit
+b336268dde75 ("dmaengine: dw: Add peripheral bus width verification")
+got incorrect interface data width and thus prevented the client drivers
+from configuring the DMA-channel with the EINVAL error returned. E.g.,
+the next error was printed for the PXA2xx SPI controller driver trying
+to configure the requested channels:
+
+> [  164.525604] pxa2xx_spi_pci 0000:00:07.1: DMA slave config failed
+> [  164.536105] pxa2xx_spi_pci 0000:00:07.1: failed to get DMA TX descriptor
+> [  164.543213] spidev spi-SPT0001:00: SPI transfer failed: -16
+
+The problem would have been spotted much earlier if the iDMA 32-bit
+controller supported more than one master interfaces. But since it
+supports just a single master and the iDMA 32-bit specific code just
+ignores the master IDs in the CTLLO preparation method, the issue has
+been gone unnoticed so far.
+
+Fix the problem by specifying the default master ID for both memory
+and peripheral devices in the driver data. Thus the issue noticed for
+the iDMA 32-bit controllers will be eliminated and the ACPI-probed
+DW DMA controllers will be configured with the correct master ID by
+default.
+
+Cc: stable@vger.kernel.org
+Fixes: b336268dde75 ("dmaengine: dw: Add peripheral bus width verification")
+Fixes: 199244d69458 ("dmaengine: dw: add support of iDMA 32-bit hardware")
+Reported-by: Ferry Toth <fntoth@gmail.com>
+Closes: https://lore.kernel.org/dmaengine/ZuXbCKUs1iOqFu51@black.fi.intel.com/
+Reported-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
+Closes: https://lore.kernel.org/dmaengine/ZuXgI-VcHpMgbZ91@black.fi.intel.com/
+Tested-by: Ferry Toth <fntoth@gmail.com>
+Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
+Link: https://lore.kernel.org/r/20241104095142.157925-1-andriy.shevchenko@linux.intel.com
+Signed-off-by: Vinod Koul <vkoul@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/dma/dw/acpi.c     |    6 ++++--
+ drivers/dma/dw/internal.h |    8 ++++++++
+ drivers/dma/dw/pci.c      |    4 ++--
+ 3 files changed, 14 insertions(+), 4 deletions(-)
+
+--- a/drivers/dma/dw/acpi.c
++++ b/drivers/dma/dw/acpi.c
+@@ -8,13 +8,15 @@
+ static bool dw_dma_acpi_filter(struct dma_chan *chan, void *param)
+ {
++      struct dw_dma *dw = to_dw_dma(chan->device);
++      struct dw_dma_chip_pdata *data = dev_get_drvdata(dw->dma.dev);
+       struct acpi_dma_spec *dma_spec = param;
+       struct dw_dma_slave slave = {
+               .dma_dev = dma_spec->dev,
+               .src_id = dma_spec->slave_id,
+               .dst_id = dma_spec->slave_id,
+-              .m_master = 0,
+-              .p_master = 1,
++              .m_master = data->m_master,
++              .p_master = data->p_master,
+       };
+       return dw_dma_filter(chan, &slave);
+--- a/drivers/dma/dw/internal.h
++++ b/drivers/dma/dw/internal.h
+@@ -51,11 +51,15 @@ struct dw_dma_chip_pdata {
+       int (*probe)(struct dw_dma_chip *chip);
+       int (*remove)(struct dw_dma_chip *chip);
+       struct dw_dma_chip *chip;
++      u8 m_master;
++      u8 p_master;
+ };
+ static __maybe_unused const struct dw_dma_chip_pdata dw_dma_chip_pdata = {
+       .probe = dw_dma_probe,
+       .remove = dw_dma_remove,
++      .m_master = 0,
++      .p_master = 1,
+ };
+ static const struct dw_dma_platform_data idma32_pdata = {
+@@ -72,6 +76,8 @@ static __maybe_unused const struct dw_dm
+       .pdata = &idma32_pdata,
+       .probe = idma32_dma_probe,
+       .remove = idma32_dma_remove,
++      .m_master = 0,
++      .p_master = 0,
+ };
+ static const struct dw_dma_platform_data xbar_pdata = {
+@@ -88,6 +94,8 @@ static __maybe_unused const struct dw_dm
+       .pdata = &xbar_pdata,
+       .probe = idma32_dma_probe,
+       .remove = idma32_dma_remove,
++      .m_master = 0,
++      .p_master = 0,
+ };
+ #endif /* _DMA_DW_INTERNAL_H */
+--- a/drivers/dma/dw/pci.c
++++ b/drivers/dma/dw/pci.c
+@@ -56,10 +56,10 @@ static int dw_pci_probe(struct pci_dev *
+       if (ret)
+               return ret;
+-      dw_dma_acpi_controller_register(chip->dw);
+-
+       pci_set_drvdata(pdev, data);
++      dw_dma_acpi_controller_register(chip->dw);
++
+       return 0;
+ }
diff --git a/queue-6.12/dmaengine-fsl-edma-implement-the-cleanup-path-of-fsl_edma3_attach_pd.patch b/queue-6.12/dmaengine-fsl-edma-implement-the-cleanup-path-of-fsl_edma3_attach_pd.patch
new file mode 100644 (file)
index 0000000..0f38d9c
--- /dev/null
@@ -0,0 +1,118 @@
+From ccfa3131d4a0347988e73638edea5c8281b6d2c7 Mon Sep 17 00:00:00 2001
+From: Joe Hattori <joe@pf.is.s.u-tokyo.ac.jp>
+Date: Sat, 21 Dec 2024 16:57:12 +0900
+Subject: dmaengine: fsl-edma: implement the cleanup path of fsl_edma3_attach_pd()
+
+From: Joe Hattori <joe@pf.is.s.u-tokyo.ac.jp>
+
+commit ccfa3131d4a0347988e73638edea5c8281b6d2c7 upstream.
+
+Current implementation of fsl_edma3_attach_pd() does not provide a
+cleanup path, resulting in a memory leak. For example,
+dev_pm_domain_detach() is not called after dev_pm_domain_attach_by_id(),
+and the device link created with the DL_FLAG_STATELESS is not released
+explicitly.
+
+Therefore, provide a cleanup function fsl_edma3_detach_pd() and call it
+upon failure. Also add a devm_add_action_or_reset() call with this
+function after a successful fsl_edma3_attach_pd().
+
+Fixes: 72f5801a4e2b ("dmaengine: fsl-edma: integrate v3 support")
+Signed-off-by: Joe Hattori <joe@pf.is.s.u-tokyo.ac.jp>
+Link: https://lore.kernel.org/r/20241221075712.3297200-1-joe@pf.is.s.u-tokyo.ac.jp
+Signed-off-by: Vinod Koul <vkoul@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/dma/fsl-edma-common.h |    1 +
+ drivers/dma/fsl-edma-main.c   |   41 ++++++++++++++++++++++++++++++++++++-----
+ 2 files changed, 37 insertions(+), 5 deletions(-)
+
+--- a/drivers/dma/fsl-edma-common.h
++++ b/drivers/dma/fsl-edma-common.h
+@@ -166,6 +166,7 @@ struct fsl_edma_chan {
+       struct work_struct              issue_worker;
+       struct platform_device          *pdev;
+       struct device                   *pd_dev;
++      struct device_link              *pd_dev_link;
+       u32                             srcid;
+       struct clk                      *clk;
+       int                             priority;
+--- a/drivers/dma/fsl-edma-main.c
++++ b/drivers/dma/fsl-edma-main.c
+@@ -417,10 +417,33 @@ static const struct of_device_id fsl_edm
+ };
+ MODULE_DEVICE_TABLE(of, fsl_edma_dt_ids);
++static void fsl_edma3_detach_pd(struct fsl_edma_engine *fsl_edma)
++{
++      struct fsl_edma_chan *fsl_chan;
++      int i;
++
++      for (i = 0; i < fsl_edma->n_chans; i++) {
++              if (fsl_edma->chan_masked & BIT(i))
++                      continue;
++              fsl_chan = &fsl_edma->chans[i];
++              if (fsl_chan->pd_dev_link)
++                      device_link_del(fsl_chan->pd_dev_link);
++              if (fsl_chan->pd_dev) {
++                      dev_pm_domain_detach(fsl_chan->pd_dev, false);
++                      pm_runtime_dont_use_autosuspend(fsl_chan->pd_dev);
++                      pm_runtime_set_suspended(fsl_chan->pd_dev);
++              }
++      }
++}
++
++static void devm_fsl_edma3_detach_pd(void *data)
++{
++      fsl_edma3_detach_pd(data);
++}
++
+ static int fsl_edma3_attach_pd(struct platform_device *pdev, struct fsl_edma_engine *fsl_edma)
+ {
+       struct fsl_edma_chan *fsl_chan;
+-      struct device_link *link;
+       struct device *pd_chan;
+       struct device *dev;
+       int i;
+@@ -436,15 +459,16 @@ static int fsl_edma3_attach_pd(struct pl
+               pd_chan = dev_pm_domain_attach_by_id(dev, i);
+               if (IS_ERR_OR_NULL(pd_chan)) {
+                       dev_err(dev, "Failed attach pd %d\n", i);
+-                      return -EINVAL;
++                      goto detach;
+               }
+-              link = device_link_add(dev, pd_chan, DL_FLAG_STATELESS |
++              fsl_chan->pd_dev_link = device_link_add(dev, pd_chan, DL_FLAG_STATELESS |
+                                            DL_FLAG_PM_RUNTIME |
+                                            DL_FLAG_RPM_ACTIVE);
+-              if (!link) {
++              if (!fsl_chan->pd_dev_link) {
+                       dev_err(dev, "Failed to add device_link to %d\n", i);
+-                      return -EINVAL;
++                      dev_pm_domain_detach(pd_chan, false);
++                      goto detach;
+               }
+               fsl_chan->pd_dev = pd_chan;
+@@ -455,6 +479,10 @@ static int fsl_edma3_attach_pd(struct pl
+       }
+       return 0;
++
++detach:
++      fsl_edma3_detach_pd(fsl_edma);
++      return -EINVAL;
+ }
+ static int fsl_edma_probe(struct platform_device *pdev)
+@@ -544,6 +572,9 @@ static int fsl_edma_probe(struct platfor
+               ret = fsl_edma3_attach_pd(pdev, fsl_edma);
+               if (ret)
+                       return ret;
++              ret = devm_add_action_or_reset(&pdev->dev, devm_fsl_edma3_detach_pd, fsl_edma);
++              if (ret)
++                      return ret;
+       }
+       if (drvdata->flags & FSL_EDMA_DRV_TCD64)
diff --git a/queue-6.12/dmaengine-mv_xor-fix-child-node-refcount-handling-in-early-exit.patch b/queue-6.12/dmaengine-mv_xor-fix-child-node-refcount-handling-in-early-exit.patch
new file mode 100644 (file)
index 0000000..cebd77a
--- /dev/null
@@ -0,0 +1,44 @@
+From 362f1bf98a3ecb5a2a4fcbdaa9718c8403beceb2 Mon Sep 17 00:00:00 2001
+From: Javier Carrasco <javier.carrasco.cruz@gmail.com>
+Date: Fri, 11 Oct 2024 22:57:59 +0200
+Subject: dmaengine: mv_xor: fix child node refcount handling in early exit
+
+From: Javier Carrasco <javier.carrasco.cruz@gmail.com>
+
+commit 362f1bf98a3ecb5a2a4fcbdaa9718c8403beceb2 upstream.
+
+The for_each_child_of_node() loop requires explicit calls to
+of_node_put() to decrement the child's refcount upon early exits (break,
+goto, return).
+
+Add the missing calls in the two early exits before the goto
+instructions.
+
+Cc: stable@vger.kernel.org
+Fixes: f7d12ef53ddf ("dma: mv_xor: add Device Tree binding")
+Signed-off-by: Javier Carrasco <javier.carrasco.cruz@gmail.com>
+Link: https://lore.kernel.org/r/20241011-dma_mv_xor_of_node_put-v1-1-3c2de819f463@gmail.com
+Signed-off-by: Vinod Koul <vkoul@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/dma/mv_xor.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/drivers/dma/mv_xor.c
++++ b/drivers/dma/mv_xor.c
+@@ -1388,6 +1388,7 @@ static int mv_xor_probe(struct platform_
+                       irq = irq_of_parse_and_map(np, 0);
+                       if (!irq) {
+                               ret = -ENODEV;
++                              of_node_put(np);
+                               goto err_channel_add;
+                       }
+@@ -1396,6 +1397,7 @@ static int mv_xor_probe(struct platform_
+                       if (IS_ERR(chan)) {
+                               ret = PTR_ERR(chan);
+                               irq_dispose_mapping(irq);
++                              of_node_put(np);
+                               goto err_channel_add;
+                       }
diff --git a/queue-6.12/dmaengine-tegra-return-correct-dma-status-when-paused.patch b/queue-6.12/dmaengine-tegra-return-correct-dma-status-when-paused.patch
new file mode 100644 (file)
index 0000000..b461bec
--- /dev/null
@@ -0,0 +1,81 @@
+From ebc008699fd95701c9af5ebaeb0793eef81a71d5 Mon Sep 17 00:00:00 2001
+From: Akhil R <akhilrajeev@nvidia.com>
+Date: Thu, 12 Dec 2024 18:14:12 +0530
+Subject: dmaengine: tegra: Return correct DMA status when paused
+
+From: Akhil R <akhilrajeev@nvidia.com>
+
+commit ebc008699fd95701c9af5ebaeb0793eef81a71d5 upstream.
+
+Currently, the driver does not return the correct DMA status when a DMA
+pause is issued by the client drivers. This causes GPCDMA users to
+assume that DMA is still running, while in reality, the DMA is paused.
+
+Return DMA_PAUSED for tx_status() if the channel is paused in the middle
+of a transfer.
+
+Fixes: ee17028009d4 ("dmaengine: tegra: Add tegra gpcdma driver")
+Cc: stable@vger.kernel.org
+Signed-off-by: Akhil R <akhilrajeev@nvidia.com>
+Signed-off-by: Kartik Rajput <kkartik@nvidia.com>
+Link: https://lore.kernel.org/r/20241212124412.5650-1-kkartik@nvidia.com
+Signed-off-by: Vinod Koul <vkoul@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/dma/tegra186-gpc-dma.c |   10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+--- a/drivers/dma/tegra186-gpc-dma.c
++++ b/drivers/dma/tegra186-gpc-dma.c
+@@ -231,6 +231,7 @@ struct tegra_dma_channel {
+       bool config_init;
+       char name[30];
+       enum dma_transfer_direction sid_dir;
++      enum dma_status status;
+       int id;
+       int irq;
+       int slave_id;
+@@ -393,6 +394,8 @@ static int tegra_dma_pause(struct tegra_
+               tegra_dma_dump_chan_regs(tdc);
+       }
++      tdc->status = DMA_PAUSED;
++
+       return ret;
+ }
+@@ -419,6 +422,8 @@ static void tegra_dma_resume(struct tegr
+       val = tdc_read(tdc, TEGRA_GPCDMA_CHAN_CSRE);
+       val &= ~TEGRA_GPCDMA_CHAN_CSRE_PAUSE;
+       tdc_write(tdc, TEGRA_GPCDMA_CHAN_CSRE, val);
++
++      tdc->status = DMA_IN_PROGRESS;
+ }
+ static int tegra_dma_device_resume(struct dma_chan *dc)
+@@ -544,6 +549,7 @@ static void tegra_dma_xfer_complete(stru
+       tegra_dma_sid_free(tdc);
+       tdc->dma_desc = NULL;
++      tdc->status = DMA_COMPLETE;
+ }
+ static void tegra_dma_chan_decode_error(struct tegra_dma_channel *tdc,
+@@ -716,6 +722,7 @@ static int tegra_dma_terminate_all(struc
+               tdc->dma_desc = NULL;
+       }
++      tdc->status = DMA_COMPLETE;
+       tegra_dma_sid_free(tdc);
+       vchan_get_all_descriptors(&tdc->vc, &head);
+       spin_unlock_irqrestore(&tdc->vc.lock, flags);
+@@ -769,6 +776,9 @@ static enum dma_status tegra_dma_tx_stat
+       if (ret == DMA_COMPLETE)
+               return ret;
++      if (tdc->status == DMA_PAUSED)
++              ret = DMA_PAUSED;
++
+       spin_lock_irqsave(&tdc->vc.lock, flags);
+       vd = vchan_find_desc(&tdc->vc, cookie);
+       if (vd) {
diff --git a/queue-6.12/mtd-rawnand-arasan-fix-double-assertion-of-chip-select.patch b/queue-6.12/mtd-rawnand-arasan-fix-double-assertion-of-chip-select.patch
new file mode 100644 (file)
index 0000000..7f4f5c1
--- /dev/null
@@ -0,0 +1,47 @@
+From b086a46dae48829e11c0c02580e30d920b76743c Mon Sep 17 00:00:00 2001
+From: Maciej Andrzejewski <maciej.andrzejewski@m-works.net>
+Date: Mon, 2 Dec 2024 13:51:07 +0100
+Subject: mtd: rawnand: arasan: Fix double assertion of chip-select
+
+From: Maciej Andrzejewski <maciej.andrzejewski@m-works.net>
+
+commit b086a46dae48829e11c0c02580e30d920b76743c upstream.
+
+When two chip-selects are configured in the device tree, and the second is
+a non-native GPIO, both the GPIO-based chip-select and the first native
+chip-select may be asserted simultaneously. This double assertion causes
+incorrect read and write operations.
+
+The issue occurs because when nfc->ncs <= 2, nfc->spare_cs is always
+initialized to 0 due to static initialization. Consequently, when the
+second chip-select (GPIO-based) is selected in anfc_assert_cs(), it is
+detected by anfc_is_gpio_cs(), and nfc->native_cs is assigned the value 0.
+This results in both the GPIO-based chip-select being asserted and the
+NAND controller register receiving 0, erroneously selecting the native
+chip-select.
+
+This patch resolves the issue, as confirmed by oscilloscope testing with
+configurations involving two or more chip-selects in the device tree.
+
+Fixes: acbd3d0945f9 ("mtd: rawnand: arasan: Leverage additional GPIO CS")
+Cc: stable@vger.kernel.org
+Signed-off-by: Maciej Andrzejewski <maciej.andrzejewski@m-works.net>
+Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/mtd/nand/raw/arasan-nand-controller.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/drivers/mtd/nand/raw/arasan-nand-controller.c
++++ b/drivers/mtd/nand/raw/arasan-nand-controller.c
+@@ -1409,8 +1409,8 @@ static int anfc_parse_cs(struct arasan_n
+        * case, the "not" chosen CS is assigned to nfc->spare_cs and selected
+        * whenever a GPIO CS must be asserted.
+        */
+-      if (nfc->cs_array && nfc->ncs > 2) {
+-              if (!nfc->cs_array[0] && !nfc->cs_array[1]) {
++      if (nfc->cs_array) {
++              if (nfc->ncs > 2 && !nfc->cs_array[0] && !nfc->cs_array[1]) {
+                       dev_err(nfc->dev,
+                               "Assign a single native CS when using GPIOs\n");
+                       return -EINVAL;
diff --git a/queue-6.12/mtd-rawnand-arasan-fix-missing-de-registration-of-nand.patch b/queue-6.12/mtd-rawnand-arasan-fix-missing-de-registration-of-nand.patch
new file mode 100644 (file)
index 0000000..1499118
--- /dev/null
@@ -0,0 +1,41 @@
+From 11e6831fd81468cf48155b9b3c11295c391da723 Mon Sep 17 00:00:00 2001
+From: Maciej Andrzejewski <maciej.andrzejewski@m-works.net>
+Date: Mon, 2 Dec 2024 19:58:36 +0100
+Subject: mtd: rawnand: arasan: Fix missing de-registration of NAND
+
+From: Maciej Andrzejewski <maciej.andrzejewski@m-works.net>
+
+commit 11e6831fd81468cf48155b9b3c11295c391da723 upstream.
+
+The NAND chip-selects are registered for the Arasan driver during
+initialization but are not de-registered when the driver is unloaded. As a
+result, if the driver is loaded again, the chip-selects remain registered
+and busy, making them unavailable for use.
+
+Fixes: 197b88fecc50 ("mtd: rawnand: arasan: Add new Arasan NAND controller")
+Cc: stable@vger.kernel.org
+Signed-off-by: Maciej Andrzejewski ICEYE <maciej.andrzejewski@m-works.net>
+Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/mtd/nand/raw/arasan-nand-controller.c |    7 +++++++
+ 1 file changed, 7 insertions(+)
+
+--- a/drivers/mtd/nand/raw/arasan-nand-controller.c
++++ b/drivers/mtd/nand/raw/arasan-nand-controller.c
+@@ -1478,8 +1478,15 @@ static int anfc_probe(struct platform_de
+ static void anfc_remove(struct platform_device *pdev)
+ {
++      int i;
+       struct arasan_nfc *nfc = platform_get_drvdata(pdev);
++      for (i = 0; i < nfc->ncs; i++) {
++              if (nfc->cs_array[i]) {
++                      gpiod_put(nfc->cs_array[i]);
++              }
++      }
++
+       anfc_chips_cleanup(nfc);
+ }
diff --git a/queue-6.12/mtd-rawnand-fix-double-free-in-atmel_pmecc_create_user.patch b/queue-6.12/mtd-rawnand-fix-double-free-in-atmel_pmecc_create_user.patch
new file mode 100644 (file)
index 0000000..1027c41
--- /dev/null
@@ -0,0 +1,35 @@
+From d8e4771f99c0400a1873235704b28bb803c83d17 Mon Sep 17 00:00:00 2001
+From: Dan Carpenter <dan.carpenter@linaro.org>
+Date: Wed, 23 Oct 2024 11:40:56 +0300
+Subject: mtd: rawnand: fix double free in atmel_pmecc_create_user()
+
+From: Dan Carpenter <dan.carpenter@linaro.org>
+
+commit d8e4771f99c0400a1873235704b28bb803c83d17 upstream.
+
+The "user" pointer was converted from being allocated with kzalloc() to
+being allocated by devm_kzalloc().  Calling kfree(user) will lead to a
+double free.
+
+Fixes: 6d734f1bfc33 ("mtd: rawnand: atmel: Fix possible memory leak")
+Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
+Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/mtd/nand/raw/atmel/pmecc.c |    4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
+
+--- a/drivers/mtd/nand/raw/atmel/pmecc.c
++++ b/drivers/mtd/nand/raw/atmel/pmecc.c
+@@ -380,10 +380,8 @@ atmel_pmecc_create_user(struct atmel_pme
+       user->delta = user->dmu + req->ecc.strength + 1;
+       gf_tables = atmel_pmecc_get_gf_tables(req);
+-      if (IS_ERR(gf_tables)) {
+-              kfree(user);
++      if (IS_ERR(gf_tables))
+               return ERR_CAST(gf_tables);
+-      }
+       user->gf_tables = gf_tables;
diff --git a/queue-6.12/phy-core-fix-an-of-node-refcount-leakage-in-_of_phy_get.patch b/queue-6.12/phy-core-fix-an-of-node-refcount-leakage-in-_of_phy_get.patch
new file mode 100644 (file)
index 0000000..891c0f1
--- /dev/null
@@ -0,0 +1,50 @@
+From 5ebdc6be16c2000e37fcb8b4072d442d268ad492 Mon Sep 17 00:00:00 2001
+From: Zijun Hu <quic_zijuhu@quicinc.com>
+Date: Fri, 13 Dec 2024 20:36:44 +0800
+Subject: phy: core: Fix an OF node refcount leakage in _of_phy_get()
+
+From: Zijun Hu <quic_zijuhu@quicinc.com>
+
+commit 5ebdc6be16c2000e37fcb8b4072d442d268ad492 upstream.
+
+_of_phy_get() will directly return when suffers of_device_is_compatible()
+error, but it forgets to decrease refcount of OF node @args.np before error
+return, the refcount was increased by previous of_parse_phandle_with_args()
+so causes the OF node's refcount leakage.
+
+Fix by decreasing the refcount via of_node_put() before the error return.
+
+Fixes: b7563e2796f8 ("phy: work around 'phys' references to usb-nop-xceiv devices")
+Cc: stable@vger.kernel.org
+Reviewed-by: Johan Hovold <johan+linaro@kernel.org>
+Signed-off-by: Zijun Hu <quic_zijuhu@quicinc.com>
+Link: https://lore.kernel.org/r/20241213-phy_core_fix-v6-4-40ae28f5015a@quicinc.com
+Signed-off-by: Vinod Koul <vkoul@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/phy/phy-core.c |    7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+--- a/drivers/phy/phy-core.c
++++ b/drivers/phy/phy-core.c
+@@ -629,8 +629,10 @@ static struct phy *_of_phy_get(struct de
+               return ERR_PTR(-ENODEV);
+       /* This phy type handled by the usb-phy subsystem for now */
+-      if (of_device_is_compatible(args.np, "usb-nop-xceiv"))
+-              return ERR_PTR(-ENODEV);
++      if (of_device_is_compatible(args.np, "usb-nop-xceiv")) {
++              phy = ERR_PTR(-ENODEV);
++              goto out_put_node;
++      }
+       mutex_lock(&phy_provider_mutex);
+       phy_provider = of_phy_provider_lookup(args.np);
+@@ -652,6 +654,7 @@ out_put_module:
+ out_unlock:
+       mutex_unlock(&phy_provider_mutex);
++out_put_node:
+       of_node_put(args.np);
+       return phy;
diff --git a/queue-6.12/phy-core-fix-an-of-node-refcount-leakage-in-of_phy_provider_lookup.patch b/queue-6.12/phy-core-fix-an-of-node-refcount-leakage-in-of_phy_provider_lookup.patch
new file mode 100644 (file)
index 0000000..f09b5b5
--- /dev/null
@@ -0,0 +1,52 @@
+From a2d633cb1421e679b56f1a9fe1f42f089706f1ed Mon Sep 17 00:00:00 2001
+From: Zijun Hu <quic_zijuhu@quicinc.com>
+Date: Fri, 13 Dec 2024 20:36:45 +0800
+Subject: phy: core: Fix an OF node refcount leakage in of_phy_provider_lookup()
+
+From: Zijun Hu <quic_zijuhu@quicinc.com>
+
+commit a2d633cb1421e679b56f1a9fe1f42f089706f1ed upstream.
+
+For macro for_each_child_of_node(parent, child), refcount of @child has
+been increased before entering its loop body, so normally needs to call
+of_node_put(@child) before returning from the loop body to avoid refcount
+leakage.
+
+of_phy_provider_lookup() has such usage but does not call of_node_put()
+before returning, so cause leakage of the OF node refcount.
+
+Fix by simply calling of_node_put() before returning from the loop body.
+
+The APIs affected by this issue are shown below since they indirectly
+invoke problematic of_phy_provider_lookup().
+phy_get()
+of_phy_get()
+devm_phy_get()
+devm_of_phy_get()
+devm_of_phy_get_by_index()
+
+Fixes: 2a4c37016ca9 ("phy: core: Fix of_phy_provider_lookup to return PHY provider for sub node")
+Cc: stable@vger.kernel.org
+Reviewed-by: Johan Hovold <johan+linaro@kernel.org>
+Signed-off-by: Zijun Hu <quic_zijuhu@quicinc.com>
+Link: https://lore.kernel.org/r/20241213-phy_core_fix-v6-5-40ae28f5015a@quicinc.com
+Signed-off-by: Vinod Koul <vkoul@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/phy/phy-core.c |    4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+--- a/drivers/phy/phy-core.c
++++ b/drivers/phy/phy-core.c
+@@ -145,8 +145,10 @@ static struct phy_provider *of_phy_provi
+                       return phy_provider;
+               for_each_child_of_node(phy_provider->children, child)
+-                      if (child == node)
++                      if (child == node) {
++                              of_node_put(child);
+                               return phy_provider;
++                      }
+       }
+       return ERR_PTR(-EPROBE_DEFER);
diff --git a/queue-6.12/phy-core-fix-that-api-devm_of_phy_provider_unregister-fails-to-unregister-the-phy-provider.patch b/queue-6.12/phy-core-fix-that-api-devm_of_phy_provider_unregister-fails-to-unregister-the-phy-provider.patch
new file mode 100644 (file)
index 0000000..1c500e2
--- /dev/null
@@ -0,0 +1,50 @@
+From c0b82ab95b4f1fbc3e3aeab9d829d012669524b6 Mon Sep 17 00:00:00 2001
+From: Zijun Hu <quic_zijuhu@quicinc.com>
+Date: Fri, 13 Dec 2024 20:36:42 +0800
+Subject: phy: core: Fix that API devm_of_phy_provider_unregister() fails to unregister the phy provider
+
+From: Zijun Hu <quic_zijuhu@quicinc.com>
+
+commit c0b82ab95b4f1fbc3e3aeab9d829d012669524b6 upstream.
+
+For devm_of_phy_provider_unregister(), its comment says it needs to invoke
+of_phy_provider_unregister() to unregister the phy provider, but it will
+not actually invoke the function since devres_destroy() does not call
+devm_phy_provider_release(), and the missing of_phy_provider_unregister()
+call will cause:
+
+- The phy provider fails to be unregistered.
+- Leak both memory and the OF node refcount.
+
+Fortunately, the faulty API has not been used by current kernel tree.
+Fix by using devres_release() instead of devres_destroy() within the API.
+
+Fixes: ff764963479a ("drivers: phy: add generic PHY framework")
+Reviewed-by: Johan Hovold <johan+linaro@kernel.org>
+Signed-off-by: Zijun Hu <quic_zijuhu@quicinc.com>
+Link: https://lore.kernel.org/stable/20241213-phy_core_fix-v6-2-40ae28f5015a%40quicinc.com
+Link: https://lore.kernel.org/r/20241213-phy_core_fix-v6-2-40ae28f5015a@quicinc.com
+Signed-off-by: Vinod Koul <vkoul@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/phy/phy-core.c |    6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+--- a/drivers/phy/phy-core.c
++++ b/drivers/phy/phy-core.c
+@@ -1264,12 +1264,12 @@ EXPORT_SYMBOL_GPL(of_phy_provider_unregi
+  * of_phy_provider_unregister to unregister the phy provider.
+  */
+ void devm_of_phy_provider_unregister(struct device *dev,
+-      struct phy_provider *phy_provider)
++                                   struct phy_provider *phy_provider)
+ {
+       int r;
+-      r = devres_destroy(dev, devm_phy_provider_release, devm_phy_match,
+-              phy_provider);
++      r = devres_release(dev, devm_phy_provider_release, devm_phy_match,
++                         phy_provider);
+       dev_WARN_ONCE(dev, r, "couldn't find PHY provider device resource\n");
+ }
+ EXPORT_SYMBOL_GPL(devm_of_phy_provider_unregister);
diff --git a/queue-6.12/phy-core-fix-that-api-devm_phy_destroy-fails-to-destroy-the-phy.patch b/queue-6.12/phy-core-fix-that-api-devm_phy_destroy-fails-to-destroy-the-phy.patch
new file mode 100644 (file)
index 0000000..9159635
--- /dev/null
@@ -0,0 +1,38 @@
+From 4dc48c88fcf82b89fdebd83a906aaa64f40fb8a9 Mon Sep 17 00:00:00 2001
+From: Zijun Hu <quic_zijuhu@quicinc.com>
+Date: Fri, 13 Dec 2024 20:36:43 +0800
+Subject: phy: core: Fix that API devm_phy_destroy() fails to destroy the phy
+
+From: Zijun Hu <quic_zijuhu@quicinc.com>
+
+commit 4dc48c88fcf82b89fdebd83a906aaa64f40fb8a9 upstream.
+
+For devm_phy_destroy(), its comment says it needs to invoke phy_destroy()
+to destroy the phy, but it will not actually invoke the function since
+devres_destroy() does not call devm_phy_consume(), and the missing
+phy_destroy() call will cause that the phy fails to be destroyed.
+
+Fortunately, the faulty API has not been used by current kernel tree.
+Fix by using devres_release() instead of devres_destroy() within the API.
+
+Fixes: ff764963479a ("drivers: phy: add generic PHY framework")
+Reviewed-by: Johan Hovold <johan+linaro@kernel.org>
+Signed-off-by: Zijun Hu <quic_zijuhu@quicinc.com>
+Link: https://lore.kernel.org/r/20241213-phy_core_fix-v6-3-40ae28f5015a@quicinc.com
+Signed-off-by: Vinod Koul <vkoul@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/phy/phy-core.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/phy/phy-core.c
++++ b/drivers/phy/phy-core.c
+@@ -1126,7 +1126,7 @@ void devm_phy_destroy(struct device *dev
+ {
+       int r;
+-      r = devres_destroy(dev, devm_phy_consume, devm_phy_match, phy);
++      r = devres_release(dev, devm_phy_consume, devm_phy_match, phy);
+       dev_WARN_ONCE(dev, r, "couldn't find PHY resource\n");
+ }
+ EXPORT_SYMBOL_GPL(devm_phy_destroy);
diff --git a/queue-6.12/phy-core-fix-that-api-devm_phy_put-fails-to-release-the-phy.patch b/queue-6.12/phy-core-fix-that-api-devm_phy_put-fails-to-release-the-phy.patch
new file mode 100644 (file)
index 0000000..26e0b25
--- /dev/null
@@ -0,0 +1,66 @@
+From fe4bfa9b6d7bd752bfe4700c937f235aa8ce997b Mon Sep 17 00:00:00 2001
+From: Zijun Hu <quic_zijuhu@quicinc.com>
+Date: Fri, 13 Dec 2024 20:36:41 +0800
+Subject: phy: core: Fix that API devm_phy_put() fails to release the phy
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Zijun Hu <quic_zijuhu@quicinc.com>
+
+commit fe4bfa9b6d7bd752bfe4700c937f235aa8ce997b upstream.
+
+For devm_phy_put(), its comment says it needs to invoke phy_put() to
+release the phy, but it will not actually invoke the function since
+devres_destroy() does not call devm_phy_release(), and the missing
+phy_put() call will cause:
+
+- The phy fails to be released.
+- devm_phy_put() can not fully undo what API devm_phy_get() does.
+- Leak refcount of both the module and device for below typical usage:
+
+  devm_phy_get(); // or its variant
+  ...
+  err = do_something();
+  if (err)
+      goto err_out;
+  ...
+  err_out:
+  devm_phy_put(); // leak refcount here
+
+  The file(s) affected by this issue are shown below since they have such
+  typical usage.
+  drivers/pci/controller/cadence/pcie-cadence.c
+  drivers/net/ethernet/ti/am65-cpsw-nuss.c
+
+Fix by using devres_release() instead of devres_destroy() within the API.
+
+Fixes: ff764963479a ("drivers: phy: add generic PHY framework")
+Cc: stable@vger.kernel.org
+Cc: Lorenzo Pieralisi <lpieralisi@kernel.org>
+Cc: Krzysztof Wilczyński <kw@linux.com>
+Cc: Bjorn Helgaas <bhelgaas@google.com>
+Cc: David S. Miller <davem@davemloft.net>
+Cc: Eric Dumazet <edumazet@google.com>
+Cc: Jakub Kicinski <kuba@kernel.org>
+Cc: Paolo Abeni <pabeni@redhat.com>
+Reviewed-by: Johan Hovold <johan+linaro@kernel.org>
+Signed-off-by: Zijun Hu <quic_zijuhu@quicinc.com>
+Link: https://lore.kernel.org/r/20241213-phy_core_fix-v6-1-40ae28f5015a@quicinc.com
+Signed-off-by: Vinod Koul <vkoul@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/phy/phy-core.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/phy/phy-core.c
++++ b/drivers/phy/phy-core.c
+@@ -742,7 +742,7 @@ void devm_phy_put(struct device *dev, st
+       if (!phy)
+               return;
+-      r = devres_destroy(dev, devm_phy_release, devm_phy_match, phy);
++      r = devres_release(dev, devm_phy_release, devm_phy_match, phy);
+       dev_WARN_ONCE(dev, r, "couldn't find PHY resource\n");
+ }
+ EXPORT_SYMBOL_GPL(devm_phy_put);
diff --git a/queue-6.12/phy-qcom-qmp-fix-register-name-in-rx-lane-config-of-sc8280xp.patch b/queue-6.12/phy-qcom-qmp-fix-register-name-in-rx-lane-config-of-sc8280xp.patch
new file mode 100644 (file)
index 0000000..008af2c
--- /dev/null
@@ -0,0 +1,37 @@
+From 8886fb3240931a0afce82dea87edfe46bcb0a586 Mon Sep 17 00:00:00 2001
+From: Krishna Kurapati <quic_kriskura@quicinc.com>
+Date: Tue, 12 Nov 2024 14:58:31 +0530
+Subject: phy: qcom-qmp: Fix register name in RX Lane config of SC8280XP
+
+From: Krishna Kurapati <quic_kriskura@quicinc.com>
+
+commit 8886fb3240931a0afce82dea87edfe46bcb0a586 upstream.
+
+In RX Lane configuration sequence of SC8280XP, the register
+V5_RX_UCDR_FO_GAIN is incorrectly spelled as RX_UCDR_SO_GAIN and
+hence the programming sequence is wrong. Fix the register sequence
+accordingly to avoid any compliance failures. This has been tested
+on SA8775P by checking device mode enumeration in SuperSpeed.
+
+Cc: stable@vger.kernel.org
+Fixes: c0c7769cdae2 ("phy: qcom-qmp: Add SC8280XP USB3 UNI phy")
+Signed-off-by: Krishna Kurapati <quic_kriskura@quicinc.com>
+Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
+Link: https://lore.kernel.org/r/20241112092831.4110942-1-quic_kriskura@quicinc.com
+Signed-off-by: Vinod Koul <vkoul@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/phy/qualcomm/phy-qcom-qmp-usb.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/phy/qualcomm/phy-qcom-qmp-usb.c
++++ b/drivers/phy/qualcomm/phy-qcom-qmp-usb.c
+@@ -1008,7 +1008,7 @@ static const struct qmp_phy_init_tbl sc8
+       QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_FASTLOCK_FO_GAIN, 0x2f),
+       QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_FASTLOCK_COUNT_LOW, 0xff),
+       QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_FASTLOCK_COUNT_HIGH, 0x0f),
+-      QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_SO_GAIN, 0x0a),
++      QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_FO_GAIN, 0x0a),
+       QMP_PHY_INIT_CFG(QSERDES_V5_RX_VGA_CAL_CNTRL1, 0x54),
+       QMP_PHY_INIT_CFG(QSERDES_V5_RX_VGA_CAL_CNTRL2, 0x0f),
+       QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_EQU_ADAPTOR_CNTRL2, 0x0f),
diff --git a/queue-6.12/phy-rockchip-naneng-combphy-fix-phy-reset.patch b/queue-6.12/phy-rockchip-naneng-combphy-fix-phy-reset.patch
new file mode 100644 (file)
index 0000000..914a2b8
--- /dev/null
@@ -0,0 +1,42 @@
+From fbcbffbac994aca1264e3c14da96ac9bfd90466e Mon Sep 17 00:00:00 2001
+From: Chukun Pan <amadeus@jmu.edu.cn>
+Date: Fri, 22 Nov 2024 15:30:06 +0800
+Subject: phy: rockchip: naneng-combphy: fix phy reset
+
+From: Chukun Pan <amadeus@jmu.edu.cn>
+
+commit fbcbffbac994aca1264e3c14da96ac9bfd90466e upstream.
+
+Currently, the USB port via combophy on the RK3528/RK3588 SoC is broken.
+
+  usb usb8-port1: Cannot enable. Maybe the USB cable is bad?
+
+This is due to the combphy of RK3528/RK3588 SoC has multiple resets, but
+only "phy resets" need assert and deassert, "apb resets" don't need.
+So change the driver to only match the phy resets, which is also what
+the vendor kernel does.
+
+Fixes: 7160820d742a ("phy: rockchip: add naneng combo phy for RK3568")
+Cc: FUKAUMI Naoki <naoki@radxa.com>
+Cc: Michael Zimmermann <sigmaepsilon92@gmail.com>
+Signed-off-by: Chukun Pan <amadeus@jmu.edu.cn>
+Reviewed-by: Heiko Stuebner <heiko@sntech.de>
+Tested-by: FUKAUMI Naoki <naoki@radxa.com>
+Link: https://lore.kernel.org/r/20241122073006.99309-2-amadeus@jmu.edu.cn
+Signed-off-by: Vinod Koul <vkoul@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/phy/rockchip/phy-rockchip-naneng-combphy.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/phy/rockchip/phy-rockchip-naneng-combphy.c
++++ b/drivers/phy/rockchip/phy-rockchip-naneng-combphy.c
+@@ -309,7 +309,7 @@ static int rockchip_combphy_parse_dt(str
+       priv->ext_refclk = device_property_present(dev, "rockchip,ext-refclk");
+-      priv->phy_rst = devm_reset_control_array_get_exclusive(dev);
++      priv->phy_rst = devm_reset_control_get(dev, "phy");
+       if (IS_ERR(priv->phy_rst))
+               return dev_err_probe(dev, PTR_ERR(priv->phy_rst), "failed to get phy reset\n");
diff --git a/queue-6.12/phy-rockchip-samsung-hdptx-set-drvdata-before-enabling-runtime-pm.patch b/queue-6.12/phy-rockchip-samsung-hdptx-set-drvdata-before-enabling-runtime-pm.patch
new file mode 100644 (file)
index 0000000..4337e48
--- /dev/null
@@ -0,0 +1,45 @@
+From 9d23e48654620fdccfcc74cc2cef04eaf7353d07 Mon Sep 17 00:00:00 2001
+From: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
+Date: Wed, 23 Oct 2024 20:29:54 +0300
+Subject: phy: rockchip: samsung-hdptx: Set drvdata before enabling runtime PM
+
+From: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
+
+commit 9d23e48654620fdccfcc74cc2cef04eaf7353d07 upstream.
+
+In some cases, rk_hdptx_phy_runtime_resume() may be invoked before
+platform_set_drvdata() is executed in ->probe(), leading to a NULL
+pointer dereference when using the return of dev_get_drvdata().
+
+Ensure platform_set_drvdata() is called before devm_pm_runtime_enable().
+
+Reported-by: Dmitry Osipenko <dmitry.osipenko@collabora.com>
+Fixes: 553be2830c5f ("phy: rockchip: Add Samsung HDMI/eDP Combo PHY driver")
+Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
+Reviewed-by: Heiko Stuebner <heiko@sntech.de>
+Link: https://lore.kernel.org/r/20241023-phy-sam-hdptx-rpm-fix-v1-1-87f4c994e346@collabora.com
+Signed-off-by: Vinod Koul <vkoul@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/phy/rockchip/phy-rockchip-samsung-hdptx.c |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/drivers/phy/rockchip/phy-rockchip-samsung-hdptx.c
++++ b/drivers/phy/rockchip/phy-rockchip-samsung-hdptx.c
+@@ -1116,6 +1116,8 @@ static int rk_hdptx_phy_probe(struct pla
+               return dev_err_probe(dev, PTR_ERR(hdptx->grf),
+                                    "Could not get GRF syscon\n");
++      platform_set_drvdata(pdev, hdptx);
++
+       ret = devm_pm_runtime_enable(dev);
+       if (ret)
+               return dev_err_probe(dev, ret, "Failed to enable runtime PM\n");
+@@ -1125,7 +1127,6 @@ static int rk_hdptx_phy_probe(struct pla
+               return dev_err_probe(dev, PTR_ERR(hdptx->phy),
+                                    "Failed to create HDMI PHY\n");
+-      platform_set_drvdata(pdev, hdptx);
+       phy_set_drvdata(hdptx->phy, hdptx);
+       phy_set_bus_width(hdptx->phy, 8);
diff --git a/queue-6.12/phy-usb-toggle-the-phy-power-during-init.patch b/queue-6.12/phy-usb-toggle-the-phy-power-during-init.patch
new file mode 100644 (file)
index 0000000..5483a47
--- /dev/null
@@ -0,0 +1,38 @@
+From 0a92ea87bdd6f77ca4e17fe19649882cf5209edd Mon Sep 17 00:00:00 2001
+From: Justin Chen <justin.chen@broadcom.com>
+Date: Thu, 24 Oct 2024 14:35:40 -0700
+Subject: phy: usb: Toggle the PHY power during init
+
+From: Justin Chen <justin.chen@broadcom.com>
+
+commit 0a92ea87bdd6f77ca4e17fe19649882cf5209edd upstream.
+
+When bringing up the PHY, it might be in a bad state if left powered.
+One case is we lose the PLL lock if the PLL is gated while the PHY
+is powered. Toggle the PHY power so we can start from a known state.
+
+Fixes: 4e5b9c9a73b3 ("phy: usb: Add support for new Synopsys USB controller on the 7216")
+Signed-off-by: Justin Chen <justin.chen@broadcom.com>
+Acked-by: Florian Fainelli <florian.fainelli@broadcom.com>
+Link: https://lore.kernel.org/r/20241024213540.1059412-1-justin.chen@broadcom.com
+Signed-off-by: Vinod Koul <vkoul@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/phy/broadcom/phy-brcm-usb-init-synopsys.c |    6 ++++++
+ 1 file changed, 6 insertions(+)
+
+--- a/drivers/phy/broadcom/phy-brcm-usb-init-synopsys.c
++++ b/drivers/phy/broadcom/phy-brcm-usb-init-synopsys.c
+@@ -325,6 +325,12 @@ static void usb_init_common_7216(struct
+       void __iomem *ctrl = params->regs[BRCM_REGS_CTRL];
+       USB_CTRL_UNSET(ctrl, USB_PM, XHC_S2_CLK_SWITCH_EN);
++
++      /*
++       * The PHY might be in a bad state if it is already powered
++       * up. Toggle the power just in case.
++       */
++      USB_CTRL_SET(ctrl, USB_PM, USB_PWRDN);
+       USB_CTRL_UNSET(ctrl, USB_PM, USB_PWRDN);
+       /* 1 millisecond - for USB clocks to settle down */
diff --git a/queue-6.12/platform-chrome-cros_ec_lpc-fix-product-identity-for-early-framework-laptops.patch b/queue-6.12/platform-chrome-cros_ec_lpc-fix-product-identity-for-early-framework-laptops.patch
new file mode 100644 (file)
index 0000000..f198a5a
--- /dev/null
@@ -0,0 +1,51 @@
+From dcd59d0d7d51b2a4b768fc132b0d74a97dfd6d6a Mon Sep 17 00:00:00 2001
+From: "Dustin L. Howett" <dustin@howett.net>
+Date: Tue, 24 Dec 2024 12:55:58 -0600
+Subject: platform/chrome: cros_ec_lpc: fix product identity for early Framework Laptops
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Dustin L. Howett <dustin@howett.net>
+
+commit dcd59d0d7d51b2a4b768fc132b0d74a97dfd6d6a upstream.
+
+The product names for the Framework Laptop (12th and 13th Generation
+Intel Core) are incorrect as of 62be134abf42.
+
+Fixes: 62be134abf42 ("platform/chrome: cros_ec_lpc: switch primary DMI data for Framework Laptop")
+Cc: stable@vger.kernel.org # 6.12.x
+Signed-off-by: Dustin L. Howett <dustin@howett.net>
+Reviewed-by: Thomas Weißschuh <linux@weissschuh.net>
+Link: https://lore.kernel.org/r/20241224-platform-chrome-cros_ec_lpc-fix-product-identity-for-early-framework-laptops-v1-1-0d31d6e1d22c@howett.net
+Signed-off-by: Tzung-Bi Shih <tzungbi@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/platform/chrome/cros_ec_lpc.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/platform/chrome/cros_ec_lpc.c b/drivers/platform/chrome/cros_ec_lpc.c
+index 924bf4d3cc77..8470b7f2b135 100644
+--- a/drivers/platform/chrome/cros_ec_lpc.c
++++ b/drivers/platform/chrome/cros_ec_lpc.c
+@@ -707,7 +707,7 @@ static const struct dmi_system_id cros_ec_lpc_dmi_table[] __initconst = {
+               /* Framework Laptop (12th Gen Intel Core) */
+               .matches = {
+                       DMI_MATCH(DMI_SYS_VENDOR, "Framework"),
+-                      DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "12th Gen Intel Core"),
++                      DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Laptop (12th Gen Intel Core)"),
+               },
+               .driver_data = (void *)&framework_laptop_mec_lpc_driver_data,
+       },
+@@ -715,7 +715,7 @@ static const struct dmi_system_id cros_ec_lpc_dmi_table[] __initconst = {
+               /* Framework Laptop (13th Gen Intel Core) */
+               .matches = {
+                       DMI_MATCH(DMI_SYS_VENDOR, "Framework"),
+-                      DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "13th Gen Intel Core"),
++                      DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Laptop (13th Gen Intel Core)"),
+               },
+               .driver_data = (void *)&framework_laptop_mec_lpc_driver_data,
+       },
+-- 
+2.47.1
+
index 06c52c81595555409a3c64833368d869d6e2a90f..d7a37363b16a5e6a7106fe46f910c0d56f4a9322 100644 (file)
@@ -13,3 +13,29 @@ bpf-check-negative-offsets-in-__bpf_skb_min_len.patch
 nfsd-revert-nfsd-release-svc_expkey-svc_export-with-.patch
 nfsd-restore-callback-functionality-for-nfsv4.0.patch
 mtd-diskonchip-cast-an-operand-to-prevent-potential-overflow.patch
+mtd-rawnand-arasan-fix-double-assertion-of-chip-select.patch
+mtd-rawnand-arasan-fix-missing-de-registration-of-nand.patch
+phy-qcom-qmp-fix-register-name-in-rx-lane-config-of-sc8280xp.patch
+phy-core-fix-an-of-node-refcount-leakage-in-_of_phy_get.patch
+phy-core-fix-an-of-node-refcount-leakage-in-of_phy_provider_lookup.patch
+phy-core-fix-that-api-devm_phy_put-fails-to-release-the-phy.patch
+phy-core-fix-that-api-devm_of_phy_provider_unregister-fails-to-unregister-the-phy-provider.patch
+phy-core-fix-that-api-devm_phy_destroy-fails-to-destroy-the-phy.patch
+phy-usb-toggle-the-phy-power-during-init.patch
+phy-rockchip-samsung-hdptx-set-drvdata-before-enabling-runtime-pm.patch
+phy-rockchip-naneng-combphy-fix-phy-reset.patch
+alsa-memalloc-prefer-dma_mapping_error-over-explicit-address-checking.patch
+dmaengine-mv_xor-fix-child-node-refcount-handling-in-early-exit.patch
+dmaengine-dw-select-only-supported-masters-for-acpi-devices.patch
+dmaengine-tegra-return-correct-dma-status-when-paused.patch
+dmaengine-amd-qdma-remove-using-the-private-get-and-set-dma_ops-apis.patch
+dmaengine-fsl-edma-implement-the-cleanup-path-of-fsl_edma3_attach_pd.patch
+dmaengine-apple-admac-avoid-accessing-registers-in-probe.patch
+dmaengine-at_xdmac-avoid-null_prt_deref-in-at_xdmac_prep_dma_memset.patch
+asoc-sof-intel-hda-dai-do-not-release-the-link-dma-on-stop.patch
+platform-chrome-cros_ec_lpc-fix-product-identity-for-early-framework-laptops.patch
+mtd-rawnand-fix-double-free-in-atmel_pmecc_create_user.patch
+asoc-amd-ps-fix-for-enabling-dmic-on-acp63-platform-via-_dsd-entry.patch
+asoc-intel-sof_sdw-fix-dmi-match-for-lenovo-21qa-and-21qb.patch
+asoc-dt-bindings-realtek-rt5645-fix-cpvdd-voltage-comment.patch
+asoc-intel-sof_sdw-fix-dmi-match-for-lenovo-21q6-and-21q7.patch