From: Kevin Hilman <khilman@ti.com>
To: "T Krishnamoorthy, Balaji" <balajitk@ti.com>
Cc: linux-omap@vger.kernel.org, linux-mmc@vger.kernel.org,
cjb@laptop.org, tony@atomide.com, madhu.cr@ti.com,
b-cousson@ti.com
Subject: Re: [PATCH 2/3] MMC: OMAP: HSMMC: add runtime pm support
Date: Thu, 23 Jun 2011 07:50:02 -0700 [thread overview]
Message-ID: <87boxod2lh.fsf@ti.com> (raw)
In-Reply-To: <BANLkTi=WnsoETEooK6gsL7jgxf8vuRN97Q@mail.gmail.com> (T. Krishnamoorthy's message of "Thu, 23 Jun 2011 18:01:40 +0530")
"T Krishnamoorthy, Balaji" <balajitk@ti.com> writes:
> On Thu, Jun 23, 2011 at 12:08 AM, Kevin Hilman <khilman@ti.com> wrote:
>> Balaji T K <balajitk@ti.com> writes:
>>
>
>>> @@ -1880,18 +1873,12 @@ static int __init omap_hsmmc_probe(struct platform_device *pdev)
>>>
>>> mmc->caps |= MMC_CAP_DISABLE;
>>>
>>> - if (clk_enable(host->iclk) != 0) {
>>> - clk_put(host->iclk);
>>> - clk_put(host->fclk);
>>> - goto err1;
>>> - }
>>> -
>>> - if (mmc_host_enable(host->mmc) != 0) {
>>> - clk_disable(host->iclk);
>>> - clk_put(host->iclk);
>>> - clk_put(host->fclk);
>>> - goto err1;
>>> - }
>>> + pm_runtime_enable(host->dev);
>>> + pm_runtime_allow(host->dev);
>>> + pm_runtime_get_sync(host->dev);
>>> + pm_runtime_set_autosuspend_delay(host->dev, MMC_AUTOSUSPEND_DELAY);
>>> + pm_runtime_use_autosuspend(host->dev);
>>> + pm_suspend_ignore_children(host->dev, 1);
>>
>> Why is ignore_children needed for this device? Is this device the
>> parent of other devices? If it is, why should it ignore it's
>> children?
>>
>
> No, I will remove. Added it for testing only.
>
>>> if (cpu_is_omap2430()) {
>>> host->dbclk = clk_get(&pdev->dev, "mmchsdb_fck");
>>> @@ -2018,6 +2005,8 @@ static int __init omap_hsmmc_probe(struct platform_device *pdev)
>>> }
>>>
>>> omap_hsmmc_debugfs(mmc);
>>> + pm_runtime_mark_last_busy(host->dev);
>>> + pm_runtime_put_autosuspend(host->dev);
>>>
>>> return 0;
>>>
>>> @@ -2033,8 +2022,8 @@ err_reg:
>>> err_irq_cd_init:
>>> free_irq(host->irq, host);
>>> err_irq:
>>> - mmc_host_disable(host->mmc);
>>> - clk_disable(host->iclk);
>>> + pm_runtime_mark_last_busy(host->dev);
>>> + pm_runtime_put_autosuspend(host->dev);
>>> clk_put(host->fclk);
>>> clk_put(host->iclk);
>>> if (host->got_dbclk) {
>>> @@ -2058,7 +2047,7 @@ static int omap_hsmmc_remove(struct platform_device *pdev)
>>> struct resource *res;
>>>
>>> if (host) {
>>> - mmc_host_enable(host->mmc);
>>> + pm_runtime_get_sync(host->dev);
>>> mmc_remove_host(host->mmc);
>>> if (host->use_reg)
>>> omap_hsmmc_reg_put(host);
>>> @@ -2069,8 +2058,9 @@ static int omap_hsmmc_remove(struct platform_device *pdev)
>>> free_irq(mmc_slot(host).card_detect_irq, host);
>>> flush_work_sync(&host->mmc_carddetect_work);
>>>
>>> - mmc_host_disable(host->mmc);
>>> - clk_disable(host->iclk);
>>> + pm_runtime_put_sync(host->dev);
>>> + pm_runtime_forbid(host->dev);
>>
>> Why?
>>
>
> Added for balancing pm_runtime_allow added in _probe.
> But forbid also resume the device on remove.
> Should this be removed, keeping _allow in _probe ?
Neither the _allow or _forbid are needed, _enable and _disable are enough.
>>> + pm_runtime_disable(host->dev);
>>> clk_put(host->fclk);
>>> clk_put(host->iclk);
>>> if (host->got_dbclk) {
>>> @@ -2102,6 +2092,8 @@ static int omap_hsmmc_suspend(struct device *dev)
>>> return 0;
>>>
>>> if (host) {
>>> + /* FIXME: TODO move get_sync to proper dev_pm_ops function */
>>
>> what does this mean?
>
> get_sync is needed to enable clock before accessing the registers but
> the discusssion @
> http://www.mail-archive.com/linux-omap@vger.kernel.org/msg50819.html
> suggested to move runtime get_sync calls to .prepare
> Haven't tried it yet.
The _get is fine here, it's the _put that may be the problem.
Based on that thread you mentioned, it is the using of _put and
_put_sync in the suspend path that is the problem. Basically, use of
runtime PM calls in the suspend/resume path is not recommended and not
guaranteed to work. It currently works on OMAP, but I may have to
change this.
For now, what is certain is that runtime PM calls in the suspend
callbacks must be the _sync versions. I'm still working on how to
properly implement the PM domain part for OMAP to correctly implement
the restrictions that the linux-pm maintainers want to enforce.
Kevin
next prev parent reply other threads:[~2011-06-23 14:57 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-06-22 14:18 [PATCH 0/3] OMAP: HSMMC: cleanup and runtime pm Balaji T K
2011-06-22 14:18 ` [PATCH 1/3] MMC: OMAP: HSMMC: Remove lazy_disable Balaji T K
2011-06-22 18:26 ` Kevin Hilman
2011-06-23 12:31 ` T Krishnamoorthy, Balaji
2011-06-22 14:18 ` [PATCH 2/3] MMC: OMAP: HSMMC: add runtime pm support Balaji T K
2011-06-22 18:38 ` Kevin Hilman
2011-06-23 12:31 ` T Krishnamoorthy, Balaji
2011-06-23 14:50 ` Kevin Hilman [this message]
2011-06-28 17:22 ` Paul Walmsley
2011-06-28 17:48 ` T Krishnamoorthy, Balaji
2011-06-28 18:41 ` Paul Walmsley
2011-06-29 14:17 ` T Krishnamoorthy, Balaji
2011-06-29 14:42 ` Paul Walmsley
2011-06-29 16:14 ` T Krishnamoorthy, Balaji
2011-06-29 19:04 ` Paul Walmsley
2011-06-29 15:38 ` Paul Walmsley
2011-06-29 16:34 ` S, Venkatraman
2011-06-29 20:07 ` Paul Walmsley
2011-06-29 20:07 ` Paul Walmsley
2011-06-30 5:20 ` S, Venkatraman
2011-06-30 5:20 ` S, Venkatraman
2011-06-28 20:30 ` Kevin Hilman
2011-06-29 14:33 ` T Krishnamoorthy, Balaji
2011-06-29 17:39 ` Kevin Hilman
2011-06-30 0:40 ` Paul Walmsley
2011-06-30 5:26 ` S, Venkatraman
2011-06-22 14:18 ` [PATCH 3/3] MMC: OMAP: HSMMC: Remove unused iclk Balaji T K
2011-06-22 16:27 ` Cousson, Benoit
2011-06-27 14:41 ` T Krishnamoorthy, Balaji
2011-06-22 16:05 ` [PATCH 0/3] OMAP: HSMMC: cleanup and runtime pm Cousson, Benoit
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87boxod2lh.fsf@ti.com \
--to=khilman@ti.com \
--cc=b-cousson@ti.com \
--cc=balajitk@ti.com \
--cc=cjb@laptop.org \
--cc=linux-mmc@vger.kernel.org \
--cc=linux-omap@vger.kernel.org \
--cc=madhu.cr@ti.com \
--cc=tony@atomide.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.