Re: [PATCH 18/38] mmc: sdhci-esdhc-imx: use modern PM macros

From: Jisheng Zhang
Date: Sat Aug 16 2025 - 02:21:14 EST


On Fri, Aug 15, 2025 at 03:23:56AM +0000, Bough Chen wrote:
> > -----Original Message-----
> > From: Jisheng Zhang <jszhang@xxxxxxxxxx>
> > Sent: 2025Ҵ8�5�9:34
> > To: Ulf Hansson <ulf.hansson@xxxxxxxxxx>; Aubin Constans
> > <aubin.constans@xxxxxxxxxxxxx>; Nicolas Ferre
> > <nicolas.ferre@xxxxxxxxxxxxx>; Alexandre Belloni
> > <alexandre.belloni@xxxxxxxxxxx>; Claudiu Beznea
> > <claudiu.beznea@xxxxxxxxx>; Manuel Lauss <manuel.lauss@xxxxxxxxx>;
> > Micha�� Miros��aw <mirq-linux@xxxxxxxxxxxx>; Jaehoon Chung
> > <jh80.chung@xxxxxxxxxxx>; Krzysztof Kozlowski <krzk@xxxxxxxxxx>; Alim
> > Akhtar <alim.akhtar@xxxxxxxxxxx>; Heiko Stuebner <heiko@xxxxxxxxx>;
> > Russell King <linux@xxxxxxxxxxxxxxx>; Chaotian Jing
> > <chaotian.jing@xxxxxxxxxxxx>; Matthias Brugger <matthias.bgg@xxxxxxxxx>;
> > AngeloGioacchino Del Regno <angelogioacchino.delregno@xxxxxxxxxxxxx>;
> > Shawn Guo <shawnguo@xxxxxxxxxx>; Sascha Hauer <s.hauer@xxxxxxxxxxxxxx>;
> > Pengutronix Kernel Team <kernel@xxxxxxxxxxxxxx>; Fabio Estevam
> > <festevam@xxxxxxxxx>; Adrian Hunter <adrian.hunter@xxxxxxxxx>; Kamal
> > Dasu <kamal.dasu@xxxxxxxxxxxx>; Al Cooper <alcooperx@xxxxxxxxx>;
> > Broadcom internal kernel review list
> > <bcm-kernel-feedback-list@xxxxxxxxxxxx>; Florian Fainelli
> > <florian.fainelli@xxxxxxxxxxxx>; Bough Chen <haibo.chen@xxxxxxx>; Michal
> > Simek <michal.simek@xxxxxxx>; Eugen Hristev <eugen.hristev@xxxxxxxxxx>;
> > Vignesh Raghavendra <vigneshr@xxxxxx>; Ben Dooks <ben-linux@xxxxxxxxx>;
> > Viresh Kumar <vireshk@xxxxxxxxxx>; Orson Zhai <orsonzhai@xxxxxxxxx>;
> > Baolin Wang <baolin.wang@xxxxxxxxxxxxxxxxx>; Chunyan Zhang
> > <zhang.lyra@xxxxxxxxx>; Patrice Chotard <patrice.chotard@xxxxxxxxxxx>;
> > Thierry Reding <thierry.reding@xxxxxxxxx>; Jonathan Hunter
> > <jonathanh@xxxxxxxxxx>; Chen-Yu Tsai <wens@xxxxxxxx>; Jernej Skrabec
> > <jernej.skrabec@xxxxxxxxx>; Samuel Holland <samuel@xxxxxxxxxxxx>; Alexey
> > Charkov <alchark@xxxxxxxxx>
> > Cc: linux-mmc@xxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx
> > 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 <jszhang@xxxxxxxxxx>
> > ---
> > 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
>