From: Adrian Hunter <adrian.hunter@nokia.com>
To: Madhusudhan <madhu.cr@ti.com>
Cc: 'Andrew Morton' <akpm@linux-foundation.org>,
"Lavinen Jarkko (Nokia-D/Helsinki)" <jarkko.lavinen@nokia.com>,
'linux-omap Mailing List' <linux-omap@vger.kernel.org>,
'Pierre Ossman' <pierre@ossman.eu>,
"Karpov Denis.2 (EXT-Teleca/Helsinki)"
<ext-denis.2.karpov@nokia.com>,
'Matt Fleming' <matt@console-pimps.org>,
'lkml' <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH V2 13/32] omap_hsmmc: context save/restore support
Date: Thu, 30 Jul 2009 10:40:09 +0300 [thread overview]
Message-ID: <4A714E59.7080902@nokia.com> (raw)
In-Reply-To: <00ad01ca10b9$82a5d260$544ff780@am.dhcp.ti.com>
Madhusudhan wrote:
>
>> -----Original Message-----
>> From: linux-omap-owner@vger.kernel.org [mailto:linux-omap-
>> owner@vger.kernel.org] On Behalf Of Adrian Hunter
>> Sent: Tuesday, July 28, 2009 5:40 AM
>> To: Andrew Morton
>> Cc: Jarkko Lavinen; Adrian Hunter; linux-omap Mailing List; Pierre Ossman;
>> Denis Karpov; Matt Fleming; lkml
>> Subject: [PATCH V2 13/32] omap_hsmmc: context save/restore support
>>
>> From 43e9fa346d7e386328876a8535dc8619bd1f47ae Mon Sep 17 00:00:00 2001
>> From: Denis Karpov <ext-denis.2.karpov@nokia.com>
>> Date: Wed, 22 Apr 2009 16:04:25 +0200
>> Subject: [PATCH] omap_hsmmc: context save/restore support
>>
>> Keep the context over PM dynamic OFF states.
>>
>> Signed-off-by: Denis Karpov <ext-denis.2.karpov@nokia.com>
>> Signed-off-by: Adrian Hunter <adrian.hunter@nokia.com>
>> ---
>> drivers/mmc/host/omap_hsmmc.c | 194
>> ++++++++++++++++++++++++++++++++++++++--
>> 1 files changed, 184 insertions(+), 10 deletions(-)
>>
>> diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c
>> index c28d055..ac1a3bf 100644
>> --- a/drivers/mmc/host/omap_hsmmc.c
>> +++ b/drivers/mmc/host/omap_hsmmc.c
>> @@ -37,6 +37,7 @@
>>
>> /* OMAP HSMMC Host Controller Registers */
>> #define OMAP_HSMMC_SYSCONFIG 0x0010
>> +#define OMAP_HSMMC_SYSSTATUS 0x0014
>> #define OMAP_HSMMC_CON 0x002C
>> #define OMAP_HSMMC_BLK 0x0104
>> #define OMAP_HSMMC_ARG 0x0108
>> @@ -94,6 +95,8 @@
>> #define DUAL_VOLT_OCR_BIT 7
>> #define SRC (1 << 25)
>> #define SRD (1 << 26)
>> +#define SOFTRESET (1 << 1)
>> +#define RESETDONE (1 << 0)
>>
>> /*
>> * FIXME: Most likely all the data using these _DEVID defines should come
>> @@ -152,6 +155,8 @@ struct mmc_omap_host {
>> int slot_id;
>> int dbclk_enabled;
>> int response_busy;
>> + int context_loss;
>> +
>> struct omap_mmc_platform_data *pdata;
>> };
>>
>> @@ -166,6 +171,166 @@ static void omap_mmc_stop_clock(struct mmc_omap_host
>> *host)
>> dev_dbg(mmc_dev(host->mmc), "MMC Clock is not stoped\n");
>> }
>>
>> +#ifdef CONFIG_PM
>> +
>> +/*
>> + * Restore the MMC host context, if it was lost as result of a
>> + * power state change.
>> + */
>> +static int omap_mmc_restore_ctx(struct mmc_omap_host *host)
>> +{
>> + struct mmc_ios *ios = &host->mmc->ios;
>> + struct omap_mmc_platform_data *pdata = host->pdata;
>> + int context_loss = 0;
>> + u32 hctl, capa, con;
>> + u16 dsor = 0;
>> + unsigned long timeout;
>> +
>> + if (pdata->get_context_loss_count) {
>> + context_loss = pdata->get_context_loss_count(host->dev);
>> + if (context_loss < 0)
>> + return 1;
>> + }
> This seems to restore the context always. The context should be restored
> only if the card was powered OFF, Right?
Not exactly. The "context" is just the host controller registers, which get
lost if power management decides to power off the host controller, which it
will if it decides it is not doing anything. For us, switching off the
functional clock lets PM power off the host controller. The card can be in
any power state: on, off, card/regulator sleep.
The context is restored only when it has been lost - see the following
lines. But this is done from the "enable" method, so this is only called
if someone is trying to access the card.
+ dev_dbg(mmc_dev(host->mmc), "context was %slost\n",
+ context_loss == host->context_loss ? "not " : "");
+ if (host->context_loss == context_loss)
+ return 1;
And then further down, we skip some things if the card is off:
+ /* Do not initialize card-specific things if the power is off */
+ if (host->power_mode == MMC_POWER_OFF)
+ goto out;
> The context could also be lost if the CORE transitions to OFF. I assume that
> case gets handled here without anything extra required if "power_saving" is
> set to true. Am I right?
Yes, "power_saving" is not related to "Power Management". "power_saving"
is about controlling the power regulators, which the host controller does
itself without any support from PM.
To put it another way, "power_saving" and CONFIG_PM can be set independently
of one another.
> How about the case of eMMC? Since it is not a removable device the card is
> not powered OFF. But the CORE OFF would result in context loss. Do we hit
> the restore_ctx path in that case?
On the contrary, eMMC *is* powered off. After 100ms of inactivity, eMMC is
put to card sleep, and the regulator is put to sleep also - in fact there
are two regulators and one is powered off here. After 8 seconds
the other regulator is powered off and consequently after that the eMMC must
be reinitialised (rescanned) before it can be used.
next prev parent reply other threads:[~2009-07-30 7:40 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-07-28 10:38 [PATCH V2 0/32] mmc and omap_hsmmc patches Adrian Hunter
2009-07-28 10:38 ` [PATCH V2 1/32] mmc: add 'enable' and 'disable' methods to mmc host Adrian Hunter
2009-07-28 10:38 ` [PATCH V2 2/32] mmc: allow host claim / release nesting Adrian Hunter
2009-07-28 10:38 ` [PATCH V2 3/32] mmc: add MMC_CAP_NONREMOVABLE host capability Adrian Hunter
2009-07-28 10:39 ` [PATCH V2 4/32] mmc: add ability to save power by powering off cards Adrian Hunter
2009-07-30 1:05 ` Madhusudhan
2009-07-30 7:16 ` Adrian Hunter
2009-07-28 10:39 ` [PATCH V2 5/32] mmc: add mmc card sleep and awake support Adrian Hunter
2009-07-28 10:39 ` [PATCH V2 6/32] mmc: power off once at removal Adrian Hunter
2009-07-28 10:39 ` [PATCH V2 7/32] mmc: add host capabilities for SD only and MMC only Adrian Hunter
2009-07-28 10:39 ` [PATCH V2 8/32] mmc: check status after MMC SWITCH command Adrian Hunter
2009-07-28 10:39 ` [PATCH V2 9/32] omap_hsmmc: add debugfs entry (host registers) Adrian Hunter
2009-07-28 10:39 ` [PATCH V2 10/32] omap_hsmmc: make use of new enable/disable interface Adrian Hunter
2009-07-28 10:39 ` [PATCH V2 11/32] ARM: OMAP: mmc-twl4030: add context loss counter support Adrian Hunter
2009-07-28 10:40 ` [PATCH V2 12/32] omap_hsmmc: keep track of power mode Adrian Hunter
2009-07-28 10:40 ` [PATCH V2 13/32] omap_hsmmc: context save/restore support Adrian Hunter
2009-07-30 2:00 ` Madhusudhan
2009-07-30 7:40 ` Adrian Hunter [this message]
2009-07-30 19:12 ` Madhusudhan
2009-07-30 19:33 ` Adrian Hunter
2009-07-28 10:40 ` [PATCH V2 14/32] omap_hsmmc: set open drain bit correctly Adrian Hunter
2009-07-28 10:40 ` [PATCH V2 15/32] omap_hsmmc: ensure workqueues are empty before suspend Adrian Hunter
2009-07-28 10:40 ` [PATCH V2 16/32] omap_hsmmc: fix scatter-gather list sanity checking Adrian Hunter
2009-07-28 10:40 ` [PATCH V2 17/32] omap_hsmmc: make use of new MMC_CAP_NONREMOVABLE host capability Adrian Hunter
2009-07-28 10:40 ` [PATCH V2 18/32] omap_hsmmc: support for deeper power saving states Adrian Hunter
2009-07-28 10:40 ` [PATCH V2 19/32] ARM: OMAP: mmc-twl4030: add regulator sleep / wake function Adrian Hunter
2009-07-28 10:41 ` [PATCH V2 20/32] omap_hsmmc: put MMC regulator to sleep Adrian Hunter
2009-07-28 10:41 ` [PATCH V2 21/32] omap_hsmmc: add mmc card sleep and awake support Adrian Hunter
2009-07-28 10:41 ` [PATCH V2 22/32] omap_hsmmc: fix NULL pointer dereference Adrian Hunter
2009-07-28 10:41 ` [PATCH V2 23/32] omap_hsmmc: cleanup macro usage Adrian Hunter
2009-07-28 10:41 ` [PATCH V2 24/32] omap_hsmmc: clear interrupt status after init sequence Adrian Hunter
2009-07-28 10:41 ` [PATCH V2 25/32] omap_hsmmc: cater for weird CMD6 behaviour Adrian Hunter
2009-07-28 10:41 ` [PATCH V2 26/32] omap_hsmmc: prevent races with irq handler Adrian Hunter
2009-07-28 10:41 ` [PATCH V2 27/32] omap_hsmmc: pass host capabilities for SD only and MMC only Adrian Hunter
2009-07-28 10:42 ` [PATCH V2 28/32] omap_hsmmc: code refactoring Adrian Hunter
2009-07-28 10:42 ` [PATCH V2 29/32] omap_hsmmc: protect the card when the cover is open Adrian Hunter
2009-07-28 10:42 ` [PATCH V2 30/32] omap_hsmmc: ensure all clock enables and disables are paired Adrian Hunter
2009-07-28 10:42 ` [PATCH V2 31/32] omap_hsmmc: set a large data timeout for commands with busy signal Adrian Hunter
2009-07-28 10:42 ` [PATCH V2 32/32] ARM: OMAP: RX51: set MMC capabilities and power-saving flag Adrian Hunter
2009-07-29 11:13 ` [PATCH V2 0/32] mmc and omap_hsmmc patches Matt Fleming
2009-07-31 0:52 ` Madhusudhan
2009-08-13 15:27 ` Madhusudhan
2009-08-13 16:29 ` Andrew Morton
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=4A714E59.7080902@nokia.com \
--to=adrian.hunter@nokia.com \
--cc=akpm@linux-foundation.org \
--cc=ext-denis.2.karpov@nokia.com \
--cc=jarkko.lavinen@nokia.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-omap@vger.kernel.org \
--cc=madhu.cr@ti.com \
--cc=matt@console-pimps.org \
--cc=pierre@ossman.eu \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox