* [PATCH 0/2] mmc: tmio: remove Gen2+ workaround and fix up
@ 2019-07-16 15:01 Ulrich Hecht
2019-07-16 15:01 ` [PATCH 1/2] mmc: tmio: leave clock handling to PM if enabled Ulrich Hecht
` (2 more replies)
0 siblings, 3 replies; 9+ messages in thread
From: Ulrich Hecht @ 2019-07-16 15:01 UTC (permalink / raw)
To: linux-renesas-soc, linux-mmc
Cc: niklas.soderlund, wsa, yamada.masahiro, geert, ulf.hansson,
magnus.damm, Ulrich Hecht
Hi!
The second patch in this series removes a workaround that forced eMMC devices
always on and that is no longer required.
Removing it does expose a bug, however, that leads to a clock imbalance due
to the clock being enabled by both PM and the hardware driver. (See
https://www.spinics.net/lists/linux-mmc/msg54009.html for discussion.)
This bug is taken care of by the first patch.
Tested on r8a7790 (Lager), r8a7795 and r8a7796 (Salvator-X) with SD and
eMMC, before and after suspend.
CU
Uli
Ulrich Hecht (2):
mmc: tmio: leave clock handling to PM if enabled
mmc: tmio: remove obsolete PM workaround
drivers/mmc/host/tmio_mmc_core.c | 33 ++++++---------------------------
1 file changed, 6 insertions(+), 27 deletions(-)
--
2.7.4
^ permalink raw reply [flat|nested] 9+ messages in thread* [PATCH 1/2] mmc: tmio: leave clock handling to PM if enabled 2019-07-16 15:01 [PATCH 0/2] mmc: tmio: remove Gen2+ workaround and fix up Ulrich Hecht @ 2019-07-16 15:01 ` Ulrich Hecht 2019-07-16 19:05 ` Wolfram Sang 2019-07-25 13:43 ` Ulf Hansson 2019-07-16 15:01 ` [PATCH 2/2] mmc: tmio: remove obsolete PM workaround Ulrich Hecht 2019-07-25 21:15 ` [PATCH 0/2] mmc: tmio: remove Gen2+ workaround and fix up Niklas Söderlund 2 siblings, 2 replies; 9+ messages in thread From: Ulrich Hecht @ 2019-07-16 15:01 UTC (permalink / raw) To: linux-renesas-soc, linux-mmc Cc: niklas.soderlund, wsa, yamada.masahiro, geert, ulf.hansson, magnus.damm, Ulrich Hecht This fixes a clock imbalance that occurs because the SD clock is handled by both PM and the hardware driver. See https://www.spinics.net/lists/linux-mmc/msg44431.html for details. This patch removes the clock handling from the driver's PM callbacks and turns the clock off after probing. Reported-by: Geert Uytterhoeven <geert+renesas@glider.be> Signed-off-by: Ulrich Hecht <uli+renesas@fpond.eu> --- drivers/mmc/host/tmio_mmc_core.c | 24 ++++++------------------ 1 file changed, 6 insertions(+), 18 deletions(-) diff --git a/drivers/mmc/host/tmio_mmc_core.c b/drivers/mmc/host/tmio_mmc_core.c index 31ffcc3..26dcbba 100644 --- a/drivers/mmc/host/tmio_mmc_core.c +++ b/drivers/mmc/host/tmio_mmc_core.c @@ -1260,9 +1260,14 @@ int tmio_mmc_host_probe(struct tmio_mmc_host *_host) /* See if we also get DMA */ tmio_mmc_request_dma(_host, pdata); - pm_runtime_set_active(&pdev->dev); +#ifdef CONFIG_PM + /* PM handles the clock; disable it so it won't be enabled twice. */ + if (_host->clk_disable) + _host->clk_disable(_host); + pm_runtime_get_sync(&pdev->dev); pm_runtime_set_autosuspend_delay(&pdev->dev, 50); pm_runtime_use_autosuspend(&pdev->dev); +#endif ret = mmc_add_host(mmc); if (ret) @@ -1302,20 +1307,6 @@ void tmio_mmc_host_remove(struct tmio_mmc_host *host) EXPORT_SYMBOL_GPL(tmio_mmc_host_remove); #ifdef CONFIG_PM -static int tmio_mmc_clk_enable(struct tmio_mmc_host *host) -{ - if (!host->clk_enable) - return -ENOTSUPP; - - return host->clk_enable(host); -} - -static void tmio_mmc_clk_disable(struct tmio_mmc_host *host) -{ - if (host->clk_disable) - host->clk_disable(host); -} - int tmio_mmc_host_runtime_suspend(struct device *dev) { struct tmio_mmc_host *host = dev_get_drvdata(dev); @@ -1325,8 +1316,6 @@ int tmio_mmc_host_runtime_suspend(struct device *dev) if (host->clk_cache) host->set_clock(host, 0); - tmio_mmc_clk_disable(host); - return 0; } EXPORT_SYMBOL_GPL(tmio_mmc_host_runtime_suspend); @@ -1340,7 +1329,6 @@ int tmio_mmc_host_runtime_resume(struct device *dev) { struct tmio_mmc_host *host = dev_get_drvdata(dev); - tmio_mmc_clk_enable(host); tmio_mmc_hw_reset(host->mmc); if (host->clk_cache) -- 2.7.4 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 1/2] mmc: tmio: leave clock handling to PM if enabled 2019-07-16 15:01 ` [PATCH 1/2] mmc: tmio: leave clock handling to PM if enabled Ulrich Hecht @ 2019-07-16 19:05 ` Wolfram Sang 2019-07-17 1:13 ` Niklas Söderlund 2019-07-25 13:43 ` Ulf Hansson 1 sibling, 1 reply; 9+ messages in thread From: Wolfram Sang @ 2019-07-16 19:05 UTC (permalink / raw) To: Ulrich Hecht Cc: linux-renesas-soc, linux-mmc, niklas.soderlund, yamada.masahiro, geert, ulf.hansson, magnus.damm [-- Attachment #1: Type: text/plain, Size: 642 bytes --] On Tue, Jul 16, 2019 at 05:01:03PM +0200, Ulrich Hecht wrote: > This fixes a clock imbalance that occurs because the SD clock is handled > by both PM and the hardware driver. > See https://www.spinics.net/lists/linux-mmc/msg44431.html for details. > > This patch removes the clock handling from the driver's PM callbacks and > turns the clock off after probing. > > Reported-by: Geert Uytterhoeven <geert+renesas@glider.be> > Signed-off-by: Ulrich Hecht <uli+renesas@fpond.eu> Thanks, Uli! Niklas, I'd really like your feedback on this one because you did the PM refactorization lately. I will have a look later, too. [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 833 bytes --] ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/2] mmc: tmio: leave clock handling to PM if enabled 2019-07-16 19:05 ` Wolfram Sang @ 2019-07-17 1:13 ` Niklas Söderlund 0 siblings, 0 replies; 9+ messages in thread From: Niklas Söderlund @ 2019-07-17 1:13 UTC (permalink / raw) To: Wolfram Sang Cc: Ulrich Hecht, linux-renesas-soc, linux-mmc, yamada.masahiro, geert, ulf.hansson, magnus.damm On 2019-07-16 21:05:24 +0200, Wolfram Sang wrote: > On Tue, Jul 16, 2019 at 05:01:03PM +0200, Ulrich Hecht wrote: > > This fixes a clock imbalance that occurs because the SD clock is handled > > by both PM and the hardware driver. > > See https://www.spinics.net/lists/linux-mmc/msg44431.html for details. > > > > This patch removes the clock handling from the driver's PM callbacks and > > turns the clock off after probing. > > > > Reported-by: Geert Uytterhoeven <geert+renesas@glider.be> > > Signed-off-by: Ulrich Hecht <uli+renesas@fpond.eu> > > Thanks, Uli! > > Niklas, I'd really like your feedback on this one because you did the PM > refactorization lately. I would like to test this too. Unfortunately I'm on the road and will be back in the office the 23rd so I will have to postpone doing so until then. My initial comment is that this looks good, thanks Ulrich. > > I will have a look later, too. > -- Regards, Niklas Söderlund ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/2] mmc: tmio: leave clock handling to PM if enabled 2019-07-16 15:01 ` [PATCH 1/2] mmc: tmio: leave clock handling to PM if enabled Ulrich Hecht 2019-07-16 19:05 ` Wolfram Sang @ 2019-07-25 13:43 ` Ulf Hansson 2019-07-29 8:44 ` Geert Uytterhoeven 1 sibling, 1 reply; 9+ messages in thread From: Ulf Hansson @ 2019-07-25 13:43 UTC (permalink / raw) To: Ulrich Hecht Cc: Linux-Renesas, linux-mmc@vger.kernel.org, Niklas Söderlund, Wolfram Sang, Masahiro Yamada, Geert Uytterhoeven, Magnus Damm On Tue, 16 Jul 2019 at 17:01, Ulrich Hecht <uli+renesas@fpond.eu> wrote: > > This fixes a clock imbalance that occurs because the SD clock is handled > by both PM and the hardware driver. > See https://www.spinics.net/lists/linux-mmc/msg44431.html for details. This is a generic problem, when a device are being attached to a genpd and when the genpd has got the ->stop|start() callbacks assigned, as to manage device clocks. Can you try to describe this problem a little bit more in detail, as I think that's important to carry in the change log. > > This patch removes the clock handling from the driver's PM callbacks and runtime PM callbacks and/or system PM callbacks? > turns the clock off after probing. > > Reported-by: Geert Uytterhoeven <geert+renesas@glider.be> > Signed-off-by: Ulrich Hecht <uli+renesas@fpond.eu> > --- > drivers/mmc/host/tmio_mmc_core.c | 24 ++++++------------------ > 1 file changed, 6 insertions(+), 18 deletions(-) > > diff --git a/drivers/mmc/host/tmio_mmc_core.c b/drivers/mmc/host/tmio_mmc_core.c > index 31ffcc3..26dcbba 100644 > --- a/drivers/mmc/host/tmio_mmc_core.c > +++ b/drivers/mmc/host/tmio_mmc_core.c > @@ -1260,9 +1260,14 @@ int tmio_mmc_host_probe(struct tmio_mmc_host *_host) > /* See if we also get DMA */ > tmio_mmc_request_dma(_host, pdata); > > - pm_runtime_set_active(&pdev->dev); > +#ifdef CONFIG_PM > + /* PM handles the clock; disable it so it won't be enabled twice. */ > + if (_host->clk_disable) > + _host->clk_disable(_host); The clock managed here, is that the same clock as being managed by genpd's ->stop|start() callbacks? > + pm_runtime_get_sync(&pdev->dev); > pm_runtime_set_autosuspend_delay(&pdev->dev, 50); > pm_runtime_use_autosuspend(&pdev->dev); > +#endif So what happens if you have CONFIG_PM set, but the device doesn't have a genpd attached? I am guessing the driver should handle the clock in such scenario, right? > > ret = mmc_add_host(mmc); > if (ret) > @@ -1302,20 +1307,6 @@ void tmio_mmc_host_remove(struct tmio_mmc_host *host) > EXPORT_SYMBOL_GPL(tmio_mmc_host_remove); > > #ifdef CONFIG_PM > -static int tmio_mmc_clk_enable(struct tmio_mmc_host *host) > -{ > - if (!host->clk_enable) > - return -ENOTSUPP; > - > - return host->clk_enable(host); > -} > - > -static void tmio_mmc_clk_disable(struct tmio_mmc_host *host) > -{ > - if (host->clk_disable) > - host->clk_disable(host); > -} > - > int tmio_mmc_host_runtime_suspend(struct device *dev) > { > struct tmio_mmc_host *host = dev_get_drvdata(dev); > @@ -1325,8 +1316,6 @@ int tmio_mmc_host_runtime_suspend(struct device *dev) > if (host->clk_cache) > host->set_clock(host, 0); > > - tmio_mmc_clk_disable(host); > - > return 0; > } > EXPORT_SYMBOL_GPL(tmio_mmc_host_runtime_suspend); > @@ -1340,7 +1329,6 @@ int tmio_mmc_host_runtime_resume(struct device *dev) > { > struct tmio_mmc_host *host = dev_get_drvdata(dev); > > - tmio_mmc_clk_enable(host); > tmio_mmc_hw_reset(host->mmc); > > if (host->clk_cache) > -- > 2.7.4 > Kind regards Uffe ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/2] mmc: tmio: leave clock handling to PM if enabled 2019-07-25 13:43 ` Ulf Hansson @ 2019-07-29 8:44 ` Geert Uytterhoeven 0 siblings, 0 replies; 9+ messages in thread From: Geert Uytterhoeven @ 2019-07-29 8:44 UTC (permalink / raw) To: Ulf Hansson Cc: Ulrich Hecht, Linux-Renesas, linux-mmc@vger.kernel.org, Niklas Söderlund, Wolfram Sang, Masahiro Yamada, Magnus Damm Hi Ulf, On Thu, Jul 25, 2019 at 3:44 PM Ulf Hansson <ulf.hansson@linaro.org> wrote: > On Tue, 16 Jul 2019 at 17:01, Ulrich Hecht <uli+renesas@fpond.eu> wrote: > > This fixes a clock imbalance that occurs because the SD clock is handled > > by both PM and the hardware driver. > > See https://www.spinics.net/lists/linux-mmc/msg44431.html for details. > > This is a generic problem, when a device are being attached to a genpd > and when the genpd has got the ->stop|start() callbacks assigned, as > to manage device clocks. > > Can you try to describe this problem a little bit more in detail, as I > think that's important to carry in the change log. > > > > > This patch removes the clock handling from the driver's PM callbacks and > > runtime PM callbacks and/or system PM callbacks? > > > turns the clock off after probing. > > > > Reported-by: Geert Uytterhoeven <geert+renesas@glider.be> > > Signed-off-by: Ulrich Hecht <uli+renesas@fpond.eu> > > --- > > drivers/mmc/host/tmio_mmc_core.c | 24 ++++++------------------ > > 1 file changed, 6 insertions(+), 18 deletions(-) > > > > diff --git a/drivers/mmc/host/tmio_mmc_core.c b/drivers/mmc/host/tmio_mmc_core.c > > index 31ffcc3..26dcbba 100644 > > --- a/drivers/mmc/host/tmio_mmc_core.c > > +++ b/drivers/mmc/host/tmio_mmc_core.c > > @@ -1260,9 +1260,14 @@ int tmio_mmc_host_probe(struct tmio_mmc_host *_host) > > /* See if we also get DMA */ > > tmio_mmc_request_dma(_host, pdata); > > > > - pm_runtime_set_active(&pdev->dev); > > +#ifdef CONFIG_PM > > + /* PM handles the clock; disable it so it won't be enabled twice. */ > > + if (_host->clk_disable) > > + _host->clk_disable(_host); > > The clock managed here, is that the same clock as being managed by > genpd's ->stop|start() callbacks? > > > + pm_runtime_get_sync(&pdev->dev); > > pm_runtime_set_autosuspend_delay(&pdev->dev, 50); > > pm_runtime_use_autosuspend(&pdev->dev); > > +#endif > > So what happens if you have CONFIG_PM set, but the device doesn't have > a genpd attached? That's OK for all SoCs served by renesas_sdhi_internal_dmac.c and renesas_sdhi_sys_dmac.c, as they all have their clock domain described in DT... > I am guessing the driver should handle the clock in such scenario, right? ... but it's not for (non-Renesas) systems served by tmio_mmc.c. Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 2/2] mmc: tmio: remove obsolete PM workaround 2019-07-16 15:01 [PATCH 0/2] mmc: tmio: remove Gen2+ workaround and fix up Ulrich Hecht 2019-07-16 15:01 ` [PATCH 1/2] mmc: tmio: leave clock handling to PM if enabled Ulrich Hecht @ 2019-07-16 15:01 ` Ulrich Hecht 2019-07-29 8:37 ` Geert Uytterhoeven 2019-07-25 21:15 ` [PATCH 0/2] mmc: tmio: remove Gen2+ workaround and fix up Niklas Söderlund 2 siblings, 1 reply; 9+ messages in thread From: Ulrich Hecht @ 2019-07-16 15:01 UTC (permalink / raw) To: linux-renesas-soc, linux-mmc Cc: niklas.soderlund, wsa, yamada.masahiro, geert, ulf.hansson, magnus.damm, Ulrich Hecht Obsoleted by "mmc: tmio: move runtime PM enablement to the driver implementations". Signed-off-by: Ulrich Hecht <uli+renesas@fpond.eu> --- drivers/mmc/host/tmio_mmc_core.c | 9 --------- 1 file changed, 9 deletions(-) diff --git a/drivers/mmc/host/tmio_mmc_core.c b/drivers/mmc/host/tmio_mmc_core.c index 26dcbba..29c0d2c 100644 --- a/drivers/mmc/host/tmio_mmc_core.c +++ b/drivers/mmc/host/tmio_mmc_core.c @@ -1221,15 +1221,6 @@ int tmio_mmc_host_probe(struct tmio_mmc_host *_host) _host->reset = tmio_mmc_reset; /* - * On Gen2+, eMMC with NONREMOVABLE currently fails because native - * hotplug gets disabled. It seems RuntimePM related yet we need further - * research. Since we are planning a PM overhaul anyway, let's enforce - * for now the device being active by enabling native hotplug always. - */ - if (pdata->flags & TMIO_MMC_MIN_RCAR2) - _host->native_hotplug = true; - - /* * While using internal tmio hardware logic for card detection, we need * to ensure it stays powered for it to work. */ -- 2.7.4 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 2/2] mmc: tmio: remove obsolete PM workaround 2019-07-16 15:01 ` [PATCH 2/2] mmc: tmio: remove obsolete PM workaround Ulrich Hecht @ 2019-07-29 8:37 ` Geert Uytterhoeven 0 siblings, 0 replies; 9+ messages in thread From: Geert Uytterhoeven @ 2019-07-29 8:37 UTC (permalink / raw) To: Ulrich Hecht Cc: Linux-Renesas, Linux MMC List, Niklas Söderlund, Wolfram Sang, Masahiro Yamada, Ulf Hansson, Magnus Damm On Tue, Jul 16, 2019 at 5:01 PM Ulrich Hecht <uli+renesas@fpond.eu> wrote: > Obsoleted by > "mmc: tmio: move runtime PM enablement to the driver implementations". commit 7ff213193310ef8d ("mmc: tmio: move runtime PM enablement to the driver implementations") > > Signed-off-by: Ulrich Hecht <uli+renesas@fpond.eu> > --- > drivers/mmc/host/tmio_mmc_core.c | 9 --------- > 1 file changed, 9 deletions(-) > > diff --git a/drivers/mmc/host/tmio_mmc_core.c b/drivers/mmc/host/tmio_mmc_core.c > index 26dcbba..29c0d2c 100644 > --- a/drivers/mmc/host/tmio_mmc_core.c > +++ b/drivers/mmc/host/tmio_mmc_core.c > @@ -1221,15 +1221,6 @@ int tmio_mmc_host_probe(struct tmio_mmc_host *_host) > _host->reset = tmio_mmc_reset; > > /* > - * On Gen2+, eMMC with NONREMOVABLE currently fails because native > - * hotplug gets disabled. It seems RuntimePM related yet we need further > - * research. Since we are planning a PM overhaul anyway, let's enforce > - * for now the device being active by enabling native hotplug always. > - */ > - if (pdata->flags & TMIO_MMC_MIN_RCAR2) > - _host->native_hotplug = true; > - > - /* > * While using internal tmio hardware logic for card detection, we need > * to ensure it stays powered for it to work. > */ Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 0/2] mmc: tmio: remove Gen2+ workaround and fix up 2019-07-16 15:01 [PATCH 0/2] mmc: tmio: remove Gen2+ workaround and fix up Ulrich Hecht 2019-07-16 15:01 ` [PATCH 1/2] mmc: tmio: leave clock handling to PM if enabled Ulrich Hecht 2019-07-16 15:01 ` [PATCH 2/2] mmc: tmio: remove obsolete PM workaround Ulrich Hecht @ 2019-07-25 21:15 ` Niklas Söderlund 2 siblings, 0 replies; 9+ messages in thread From: Niklas Söderlund @ 2019-07-25 21:15 UTC (permalink / raw) To: Ulrich Hecht Cc: linux-renesas-soc, linux-mmc, wsa, yamada.masahiro, geert, ulf.hansson, magnus.damm Hi Ulrich, Thanks for your work. On 2019-07-16 17:01:02 +0200, Ulrich Hecht wrote: > Hi! > > The second patch in this series removes a workaround that forced eMMC devices > always on and that is no longer required. > > Removing it does expose a bug, however, that leads to a clock imbalance due > to the clock being enabled by both PM and the hardware driver. (See > https://www.spinics.net/lists/linux-mmc/msg54009.html for discussion.) > This bug is taken care of by the first patch. > > Tested on r8a7790 (Lager), r8a7795 and r8a7796 (Salvator-X) with SD and > eMMC, before and after suspend. > > CU > Uli > > > Ulrich Hecht (2): > mmc: tmio: leave clock handling to PM if enabled > mmc: tmio: remove obsolete PM workaround Tested-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> > > drivers/mmc/host/tmio_mmc_core.c | 33 ++++++--------------------------- > 1 file changed, 6 insertions(+), 27 deletions(-) > > -- > 2.7.4 > -- Regards, Niklas Söderlund ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2019-07-29 8:44 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2019-07-16 15:01 [PATCH 0/2] mmc: tmio: remove Gen2+ workaround and fix up Ulrich Hecht 2019-07-16 15:01 ` [PATCH 1/2] mmc: tmio: leave clock handling to PM if enabled Ulrich Hecht 2019-07-16 19:05 ` Wolfram Sang 2019-07-17 1:13 ` Niklas Söderlund 2019-07-25 13:43 ` Ulf Hansson 2019-07-29 8:44 ` Geert Uytterhoeven 2019-07-16 15:01 ` [PATCH 2/2] mmc: tmio: remove obsolete PM workaround Ulrich Hecht 2019-07-29 8:37 ` Geert Uytterhoeven 2019-07-25 21:15 ` [PATCH 0/2] mmc: tmio: remove Gen2+ workaround and fix up Niklas Söderlund
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.