From: Greg Kroah-Hartman Date: Sun, 25 May 2025 12:34:38 +0000 (+0200) Subject: drop broken mmc patch X-Git-Tag: v6.12.31~39 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c23ab07a57cbdeb036be74c8ea995636d3478844;p=thirdparty%2Fkernel%2Fstable-queue.git drop broken mmc patch --- diff --git a/queue-6.12/mmc-sdhci-of-dwcmshc-add-pd-workaround-on-rk3576.patch b/queue-6.12/mmc-sdhci-of-dwcmshc-add-pd-workaround-on-rk3576.patch deleted file mode 100644 index 9f0119769f..0000000000 --- a/queue-6.12/mmc-sdhci-of-dwcmshc-add-pd-workaround-on-rk3576.patch +++ /dev/null @@ -1,113 +0,0 @@ -From 08f959759e1e6e9c4b898c51a7d387ac3480630b Mon Sep 17 00:00:00 2001 -From: Nicolas Frattaroli -Date: Wed, 23 Apr 2025 09:53:32 +0200 -Subject: mmc: sdhci-of-dwcmshc: add PD workaround on RK3576 - -From: Nicolas Frattaroli - -commit 08f959759e1e6e9c4b898c51a7d387ac3480630b upstream. - -RK3576's power domains have a peculiar design where the PD_NVM power -domain, of which the sdhci controller is a part, seemingly does not have -idempotent runtime disable/enable. The end effect is that if PD_NVM gets -turned off by the generic power domain logic because all the devices -depending on it are suspended, then the next time the sdhci device is -unsuspended, it'll hang the SoC as soon as it tries accessing the CQHCI -registers. - -RK3576's UFS support needed a new dev_pm_genpd_rpm_always_on function -added to the generic power domains API to handle what appears to be a -similar hardware design. - -Use this new function to ask for the same treatment in the sdhci -controller by giving rk3576 its own platform data with its own postinit -function. The benefit of doing this instead of marking the power domains -always on in the power domain core is that we only do this if we know -the platform we're running on actually uses the sdhci controller. For -others, keeping PD_NVM always on would be a waste, as they won't run -into this specific issue. The only other IP in PD_NVM that could be -affected is FSPI0. If it gets a mainline driver, it will probably want -to do the same thing. - -Acked-by: Adrian Hunter -Signed-off-by: Nicolas Frattaroli -Reviewed-by: Shawn Lin -Fixes: cfee1b507758 ("pmdomain: rockchip: Add support for RK3576 SoC") -Cc: # v6.15+ -Link: https://lore.kernel.org/r/20250423-rk3576-emmc-fix-v3-1-0bf80e29967f@collabora.com -Signed-off-by: Ulf Hansson -Signed-off-by: Greg Kroah-Hartman ---- - drivers/mmc/host/sdhci-of-dwcmshc.c | 40 ++++++++++++++++++++++++++++++++++++ - 1 file changed, 40 insertions(+) - ---- a/drivers/mmc/host/sdhci-of-dwcmshc.c -+++ b/drivers/mmc/host/sdhci-of-dwcmshc.c -@@ -17,6 +17,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -787,6 +788,29 @@ static void dwcmshc_rk35xx_postinit(stru - } - } - -+static void dwcmshc_rk3576_postinit(struct sdhci_host *host, struct dwcmshc_priv *dwc_priv) -+{ -+ struct device *dev = mmc_dev(host->mmc); -+ int ret; -+ -+ /* -+ * This works around the design of the RK3576's power domains, which -+ * makes the PD_NVM power domain, which the sdhci controller on the -+ * RK3576 is in, never come back the same way once it's run-time -+ * suspended once. This can happen during early kernel boot if no driver -+ * is using either PD_NVM or its child power domain PD_SDGMAC for a -+ * short moment, leading to it being turned off to save power. By -+ * keeping it on, sdhci suspending won't lead to PD_NVM becoming a -+ * candidate for getting turned off. -+ */ -+ ret = dev_pm_genpd_rpm_always_on(dev, true); -+ if (ret && ret != -EOPNOTSUPP) -+ dev_warn(dev, "failed to set PD rpm always on, SoC may hang later: %pe\n", -+ ERR_PTR(ret)); -+ -+ dwcmshc_rk35xx_postinit(host, dwc_priv); -+} -+ - static int th1520_execute_tuning(struct sdhci_host *host, u32 opcode) - { - struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); -@@ -1218,6 +1242,18 @@ static const struct dwcmshc_pltfm_data s - .postinit = dwcmshc_rk35xx_postinit, - }; - -+static const struct dwcmshc_pltfm_data sdhci_dwcmshc_rk3576_pdata = { -+ .pdata = { -+ .ops = &sdhci_dwcmshc_rk35xx_ops, -+ .quirks = SDHCI_QUIRK_CAP_CLOCK_BASE_BROKEN | -+ SDHCI_QUIRK_BROKEN_TIMEOUT_VAL, -+ .quirks2 = SDHCI_QUIRK2_PRESET_VALUE_BROKEN | -+ SDHCI_QUIRK2_CLOCK_DIV_ZERO_BROKEN, -+ }, -+ .init = dwcmshc_rk35xx_init, -+ .postinit = dwcmshc_rk3576_postinit, -+}; -+ - static const struct dwcmshc_pltfm_data sdhci_dwcmshc_th1520_pdata = { - .pdata = { - .ops = &sdhci_dwcmshc_th1520_ops, -@@ -1317,6 +1353,10 @@ static const struct of_device_id sdhci_d - .data = &sdhci_dwcmshc_rk35xx_pdata, - }, - { -+ .compatible = "rockchip,rk3576-dwcmshc", -+ .data = &sdhci_dwcmshc_rk3576_pdata, -+ }, -+ { - .compatible = "rockchip,rk3568-dwcmshc", - .data = &sdhci_dwcmshc_rk35xx_pdata, - }, diff --git a/queue-6.12/series b/queue-6.12/series index 804e509e66..d374ade235 100644 --- a/queue-6.12/series +++ b/queue-6.12/series @@ -589,7 +589,6 @@ can-kvaser_pciefd-continue-parsing-dma-buf-after-dropped-rx.patch can-kvaser_pciefd-fix-echo_skb-race.patch net-dsa-microchip-linearize-skb-for-tail-tagging-switches.patch vmxnet3-update-mtu-after-device-quiesce.patch -mmc-sdhci-of-dwcmshc-add-pd-workaround-on-rk3576.patch pmdomain-renesas-rcar-remove-obsolete-nullify-checks.patch pmdomain-core-fix-error-checking-in-genpd_dev_pm_attach_by_id.patch platform-x86-dell-wmi-sysman-avoid-buffer-overflow-in-current_password_store.patch diff --git a/queue-6.14/mmc-sdhci-of-dwcmshc-add-pd-workaround-on-rk3576.patch b/queue-6.14/mmc-sdhci-of-dwcmshc-add-pd-workaround-on-rk3576.patch deleted file mode 100644 index 9f0119769f..0000000000 --- a/queue-6.14/mmc-sdhci-of-dwcmshc-add-pd-workaround-on-rk3576.patch +++ /dev/null @@ -1,113 +0,0 @@ -From 08f959759e1e6e9c4b898c51a7d387ac3480630b Mon Sep 17 00:00:00 2001 -From: Nicolas Frattaroli -Date: Wed, 23 Apr 2025 09:53:32 +0200 -Subject: mmc: sdhci-of-dwcmshc: add PD workaround on RK3576 - -From: Nicolas Frattaroli - -commit 08f959759e1e6e9c4b898c51a7d387ac3480630b upstream. - -RK3576's power domains have a peculiar design where the PD_NVM power -domain, of which the sdhci controller is a part, seemingly does not have -idempotent runtime disable/enable. The end effect is that if PD_NVM gets -turned off by the generic power domain logic because all the devices -depending on it are suspended, then the next time the sdhci device is -unsuspended, it'll hang the SoC as soon as it tries accessing the CQHCI -registers. - -RK3576's UFS support needed a new dev_pm_genpd_rpm_always_on function -added to the generic power domains API to handle what appears to be a -similar hardware design. - -Use this new function to ask for the same treatment in the sdhci -controller by giving rk3576 its own platform data with its own postinit -function. The benefit of doing this instead of marking the power domains -always on in the power domain core is that we only do this if we know -the platform we're running on actually uses the sdhci controller. For -others, keeping PD_NVM always on would be a waste, as they won't run -into this specific issue. The only other IP in PD_NVM that could be -affected is FSPI0. If it gets a mainline driver, it will probably want -to do the same thing. - -Acked-by: Adrian Hunter -Signed-off-by: Nicolas Frattaroli -Reviewed-by: Shawn Lin -Fixes: cfee1b507758 ("pmdomain: rockchip: Add support for RK3576 SoC") -Cc: # v6.15+ -Link: https://lore.kernel.org/r/20250423-rk3576-emmc-fix-v3-1-0bf80e29967f@collabora.com -Signed-off-by: Ulf Hansson -Signed-off-by: Greg Kroah-Hartman ---- - drivers/mmc/host/sdhci-of-dwcmshc.c | 40 ++++++++++++++++++++++++++++++++++++ - 1 file changed, 40 insertions(+) - ---- a/drivers/mmc/host/sdhci-of-dwcmshc.c -+++ b/drivers/mmc/host/sdhci-of-dwcmshc.c -@@ -17,6 +17,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -787,6 +788,29 @@ static void dwcmshc_rk35xx_postinit(stru - } - } - -+static void dwcmshc_rk3576_postinit(struct sdhci_host *host, struct dwcmshc_priv *dwc_priv) -+{ -+ struct device *dev = mmc_dev(host->mmc); -+ int ret; -+ -+ /* -+ * This works around the design of the RK3576's power domains, which -+ * makes the PD_NVM power domain, which the sdhci controller on the -+ * RK3576 is in, never come back the same way once it's run-time -+ * suspended once. This can happen during early kernel boot if no driver -+ * is using either PD_NVM or its child power domain PD_SDGMAC for a -+ * short moment, leading to it being turned off to save power. By -+ * keeping it on, sdhci suspending won't lead to PD_NVM becoming a -+ * candidate for getting turned off. -+ */ -+ ret = dev_pm_genpd_rpm_always_on(dev, true); -+ if (ret && ret != -EOPNOTSUPP) -+ dev_warn(dev, "failed to set PD rpm always on, SoC may hang later: %pe\n", -+ ERR_PTR(ret)); -+ -+ dwcmshc_rk35xx_postinit(host, dwc_priv); -+} -+ - static int th1520_execute_tuning(struct sdhci_host *host, u32 opcode) - { - struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); -@@ -1218,6 +1242,18 @@ static const struct dwcmshc_pltfm_data s - .postinit = dwcmshc_rk35xx_postinit, - }; - -+static const struct dwcmshc_pltfm_data sdhci_dwcmshc_rk3576_pdata = { -+ .pdata = { -+ .ops = &sdhci_dwcmshc_rk35xx_ops, -+ .quirks = SDHCI_QUIRK_CAP_CLOCK_BASE_BROKEN | -+ SDHCI_QUIRK_BROKEN_TIMEOUT_VAL, -+ .quirks2 = SDHCI_QUIRK2_PRESET_VALUE_BROKEN | -+ SDHCI_QUIRK2_CLOCK_DIV_ZERO_BROKEN, -+ }, -+ .init = dwcmshc_rk35xx_init, -+ .postinit = dwcmshc_rk3576_postinit, -+}; -+ - static const struct dwcmshc_pltfm_data sdhci_dwcmshc_th1520_pdata = { - .pdata = { - .ops = &sdhci_dwcmshc_th1520_ops, -@@ -1317,6 +1353,10 @@ static const struct of_device_id sdhci_d - .data = &sdhci_dwcmshc_rk35xx_pdata, - }, - { -+ .compatible = "rockchip,rk3576-dwcmshc", -+ .data = &sdhci_dwcmshc_rk3576_pdata, -+ }, -+ { - .compatible = "rockchip,rk3568-dwcmshc", - .data = &sdhci_dwcmshc_rk35xx_pdata, - }, diff --git a/queue-6.14/series b/queue-6.14/series index e06cb7008d..d42d37220a 100644 --- a/queue-6.14/series +++ b/queue-6.14/series @@ -743,7 +743,6 @@ io_uring-net-only-retry-recv-bundle-for-a-full-transfer.patch net-dsa-microchip-linearize-skb-for-tail-tagging-switches.patch vmxnet3-update-mtu-after-device-quiesce.patch mmc-sdhci_am654-add-sdhci_quirk2_suppress_v1p8_ena-quirk-to-am62-compatible.patch -mmc-sdhci-of-dwcmshc-add-pd-workaround-on-rk3576.patch pmdomain-renesas-rcar-remove-obsolete-nullify-checks.patch pmdomain-core-fix-error-checking-in-genpd_dev_pm_attach_by_id.patch platform-x86-dell-wmi-sysman-avoid-buffer-overflow-in-current_password_store.patch