On Fri, Aug 15, 2025 at 03:23:56AM +0000, Bough Chen wrote: > > -----Original Message----- > > From: Jisheng Zhang > > Sent: 2025Ò´8êÅ15ìí 9:34 > > To: Ulf Hansson ; Aubin Constans > > ; Nicolas Ferre > > ; Alexandre Belloni > > ; Claudiu Beznea > > ; Manuel Lauss ; > > Micha©© Miros©©aw ; Jaehoon Chung > > ; Krzysztof Kozlowski ; Alim > > Akhtar ; Heiko Stuebner ; > > Russell King ; Chaotian Jing > > ; Matthias Brugger ; > > AngeloGioacchino Del Regno ; > > Shawn Guo ; Sascha Hauer ; > > Pengutronix Kernel Team ; Fabio Estevam > > ; Adrian Hunter ; Kamal > > Dasu ; Al Cooper ; > > Broadcom internal kernel review list > > ; Florian Fainelli > > ; Bough Chen ; Michal > > Simek ; Eugen Hristev ; > > Vignesh Raghavendra ; Ben Dooks ; > > Viresh Kumar ; Orson Zhai ; > > Baolin Wang ; Chunyan Zhang > > ; Patrice Chotard ; > > Thierry Reding ; Jonathan Hunter > > ; Chen-Yu Tsai ; Jernej Skrabec > > ; Samuel Holland ; Alexey > > Charkov > > Cc: linux-mmc@vger.kernel.org; linux-kernel@vger.kernel.org > > Subject: [PATCH 18/38] mmc: sdhci-esdhc-imx: use modern PM macros > > > > Use the modern PM macros for the suspend and resume functions to be > > automatically dropped by the compiler when CONFIG_PM or > > CONFIG_PM_SLEEP are disabled, without having to use #ifdef guards. > > > > This has the advantage of always compiling these functions in, independently of > > any Kconfig option. Thanks to that, bugs and other regressions are subsequently > > easier to catch. > > Hi Jisheng, Hi, > > When I remove all the configs under Power management options I got the following build warning: > > drivers/mmc/host/sdhci-esdhc-imx.c:2079:12: warning: ¡®sdhci_esdhc_resume¡¯ defined but not used [-Wunused-function] > 2079 | static int sdhci_esdhc_resume(struct device *dev) > | ^~~~~~~~~~~~~~~~~~ > CC drivers/mmc/host/cqhci-core.o > drivers/mmc/host/sdhci-esdhc-imx.c:2017:12: warning: ¡®sdhci_esdhc_suspend¡¯ defined but not used [-Wunused-function] > 2017 | static int sdhci_esdhc_suspend(struct device *dev) > | ^~~~~~~~~~~~~~~~~~~ Hmm interesting, what's test toolchain? I tested this patch with gcc14 with below three combinations before sending out, no warnings at all: PM + PM_SLEEP PM only !PM + ! PM_SLEEP The sdhci_esdhc_suspend|resume are referenced by SYSTEM_SLEEP_PM_OPS. The pm_sleep_ptr() macro does the tricky, when both PM and PM_SLEEP are disabled, they are optimized out. So can you plz kindly show your toolchain? I will check Thanks > > Regards > Haibo Chen > > > > Signed-off-by: Jisheng Zhang > > --- > > drivers/mmc/host/sdhci-esdhc-imx.c | 13 +++---------- > > 1 file changed, 3 insertions(+), 10 deletions(-) > > > > diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c > > b/drivers/mmc/host/sdhci-esdhc-imx.c > > index a040c0896a7b..a7a5df673b0f 100644 > > --- a/drivers/mmc/host/sdhci-esdhc-imx.c > > +++ b/drivers/mmc/host/sdhci-esdhc-imx.c > > @@ -1650,7 +1650,6 @@ static void sdhci_esdhc_imx_hwinit(struct sdhci_host > > *host) > > } > > } > > > > -#ifdef CONFIG_PM_SLEEP > > static void sdhc_esdhc_tuning_save(struct sdhci_host *host) { > > struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); @@ -1707,7 > > +1706,6 @@ static void sdhc_esdhc_tuning_restore(struct sdhci_host *host) > > host->ioaddr + ESDHC_TUNE_CTRL_STATUS); > > } > > } > > -#endif > > > > static void esdhc_cqe_enable(struct mmc_host *mmc) { @@ -2016,7 > > +2014,6 @@ static void sdhci_esdhc_imx_remove(struct platform_device > > *pdev) > > cpu_latency_qos_remove_request(&imx_data->pm_qos_req); > > } > > > > -#ifdef CONFIG_PM_SLEEP > > static int sdhci_esdhc_suspend(struct device *dev) { > > struct sdhci_host *host = dev_get_drvdata(dev); @@ -2112,9 +2109,7 @@ > > static int sdhci_esdhc_resume(struct device *dev) > > > > return ret; > > } > > -#endif > > > > -#ifdef CONFIG_PM > > static int sdhci_esdhc_runtime_suspend(struct device *dev) { > > struct sdhci_host *host = dev_get_drvdata(dev); @@ -2188,12 +2183,10 > > @@ static int sdhci_esdhc_runtime_resume(struct device *dev) > > cpu_latency_qos_remove_request(&imx_data->pm_qos_req); > > return err; > > } > > -#endif > > > > static const struct dev_pm_ops sdhci_esdhc_pmops = { > > - SET_SYSTEM_SLEEP_PM_OPS(sdhci_esdhc_suspend, sdhci_esdhc_resume) > > - SET_RUNTIME_PM_OPS(sdhci_esdhc_runtime_suspend, > > - sdhci_esdhc_runtime_resume, NULL) > > + SYSTEM_SLEEP_PM_OPS(sdhci_esdhc_suspend, sdhci_esdhc_resume) > > + RUNTIME_PM_OPS(sdhci_esdhc_runtime_suspend, > > +sdhci_esdhc_runtime_resume, NULL) > > }; > > > > static struct platform_driver sdhci_esdhc_imx_driver = { @@ -2201,7 +2194,7 > > @@ static struct platform_driver sdhci_esdhc_imx_driver = { > > .name = "sdhci-esdhc-imx", > > .probe_type = PROBE_PREFER_ASYNCHRONOUS, > > .of_match_table = imx_esdhc_dt_ids, > > - .pm = &sdhci_esdhc_pmops, > > + .pm = pm_ptr(&sdhci_esdhc_pmops), > > }, > > .probe = sdhci_esdhc_imx_probe, > > .remove = sdhci_esdhc_imx_remove, > > -- > > 2.50.0 >