Re: [PATCH] mmc: core: Add power off notify feature(eMMC 4.5)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



dear mr park,
I will consider it and update the poweroff handling.
thanks a lot
girish


On 2 September 2011 13:48, Kyungmin Park <kmpark@xxxxxxxxxxxxx> wrote:
> Hi,
>
> Good job on eMMC v4.5. but this patch is incomplete for power off
> notification feature.
> Now you just enable the Power off notification, and don't handle the
> reaming one.
> As you read the spec, it takes more time the sleep & wake-up and next
> booting time if no proper power off notification
>
> Please also consider it.
>
> Thank you,
> Kyungmin Park
>
> On Fri, Sep 2, 2011 at 4:25 PM, Girish K S
> <girish.shivananjappa@xxxxxxxxxx> wrote:
>> This patch adds the support for power off notify feature
>> available in eMMC 4.5 devices.
>>        If the the host has support for this feature, then the
>> mmc core will notify it to the device by setting the
>> POWER_OFF_NOTIFICATION byte in the extended csd register
>> with a value 1(POWER_ON).
>>        This patch should be applied after Seungwon Jeon's
>> patch for cmd6 timeout.
>>
>> Signed-off-by: Girish K S <girish.shivananjappa@xxxxxxxxxx>
>> ---
>>  drivers/mmc/core/mmc.c   |   19 +++++++++++++++++--
>>  include/linux/mmc/card.h |    1 +
>>  include/linux/mmc/host.h |    1 +
>>  include/linux/mmc/mmc.h  |    8 +++++++-
>>  4 files changed, 26 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c
>> index 68eb368..2f06b37 100644
>> --- a/drivers/mmc/core/mmc.c
>> +++ b/drivers/mmc/core/mmc.c
>> @@ -410,10 +410,12 @@ static int mmc_read_ext_csd(struct mmc_card *card, u8 *ext_csd)
>>        else
>>                card->erased_byte = 0x0;
>>
>> -       if (card->ext_csd.rev >= 6)
>> +       if (card->ext_csd.rev >= 6) {
>>                card->ext_csd.generic_cmd6_time = 10 *
>>                        ext_csd[EXT_CSD_GENERIC_CMD6_TIME];
>> -
>> +               card->ext_csd.power_off_longtime = 10 *
>> +                       ext_csd[EXT_CSD_POWER_OFF_LONG_TIME];
>> +       }
>>  out:
>>        return err;
>>  }
>> @@ -710,6 +712,19 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr,
>>        }
>>
>>        /*
>> +        * If the host supports the power_off_notify capability then
>> +        * set the notification byte in the ext_csd register of device
>> +        */
>> +       if (host->caps & MMC_CAP_POWER_OFF_NOTIFY) {
>> +               err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
>> +                               EXT_CSD_POWER_OFF_NOTIFICATION,
>> +                               EXT_CSD_POWER_ON,
>> +                               card->ext_csd.generic_cmd6_time);
>> +               if (err && err != -EBADMSG)
>> +                       goto free_card;
>> +       }
>> +
>> +       /*
>>         * Activate high speed (if supported)
>>         */
>>        if ((card->ext_csd.hs_max_dtr != 0) &&
>> diff --git a/include/linux/mmc/card.h b/include/linux/mmc/card.h
>> index e992fe3..2bf2843 100644
>> --- a/include/linux/mmc/card.h
>> +++ b/include/linux/mmc/card.h
>> @@ -53,6 +53,7 @@ struct mmc_ext_csd {
>>        unsigned int            part_time;              /* Units: ms */
>>        unsigned int            sa_timeout;             /* Units: 100ns */
>>        unsigned int            generic_cmd6_time;      /* Units: ms */
>> +       unsigned int            power_off_longtime;     /* Units: ms */
>>        unsigned int            hs_max_dtr;
>>        unsigned int            sectors;
>>        unsigned int            card_type;
>> diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h
>> index 1d09562..21c85e1 100644
>> --- a/include/linux/mmc/host.h
>> +++ b/include/linux/mmc/host.h
>> @@ -229,6 +229,7 @@ struct mmc_host {
>>  #define MMC_CAP_MAX_CURRENT_600        (1 << 28)       /* Host max current limit is 600mA */
>>  #define MMC_CAP_MAX_CURRENT_800        (1 << 29)       /* Host max current limit is 800mA */
>>  #define MMC_CAP_CMD23          (1 << 30)       /* CMD23 supported. */
>> +#define MMC_CAP_POWER_OFF_NOTIFY    (1 << 31)/*NOtify poweroff supported */
>>
>>        mmc_pm_flag_t           pm_caps;        /* supported pm features */
>>
>> diff --git a/include/linux/mmc/mmc.h b/include/linux/mmc/mmc.h
>> index e869f00..8e86d77 100644
>> --- a/include/linux/mmc/mmc.h
>> +++ b/include/linux/mmc/mmc.h
>> @@ -269,7 +269,7 @@ struct _mmc_csd {
>>  /*
>>  * EXT_CSD fields
>>  */
>> -
>> +#define EXT_CSD_POWER_OFF_NOTIFICATION 34 /* R/W */
>>  #define EXT_CSD_PARTITION_ATTRIBUTE    156     /* R/W */
>>  #define EXT_CSD_PARTITION_SUPPORT      160     /* RO */
>>  #define EXT_CSD_WR_REL_PARAM           166     /* RO */
>> @@ -293,6 +293,7 @@ struct _mmc_csd {
>>  #define EXT_CSD_SEC_ERASE_MULT         230     /* RO */
>>  #define EXT_CSD_SEC_FEATURE_SUPPORT    231     /* RO */
>>  #define EXT_CSD_TRIM_MULT              232     /* RO */
>> +#define EXT_CSD_POWER_OFF_LONG_TIME    247 /*RO*/
>>  #define EXT_CSD_GENERIC_CMD6_TIME      248     /* RO */
>>
>>  /*
>> @@ -329,6 +330,11 @@ struct _mmc_csd {
>>  #define EXT_CSD_SEC_BD_BLK_EN  BIT(2)
>>  #define EXT_CSD_SEC_GB_CL_EN   BIT(4)
>>
>> +#define EXT_CSD_NO_POWER_NOTIFICATION  0
>> +#define EXT_CSD_POWER_ON       1
>> +#define EXT_CSD_POWER_OFF_SHORT        2
>> +#define EXT_CSD_POWER_OFF_LONG 3
>> +
>>  /*
>>  * MMC_SWITCH access modes
>>  */
>> --
>> 1.7.1
>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in
>> the body of a message to majordomo@xxxxxxxxxxxxxxx
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>>
>
--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux