Re: [PATCH v2 3/3] mmc: core: Add power-off-delay-us support

"Mendez, Judith" <[email protected]> Fri, 31 Jul 2026 12:03:30 -0500
Newsgroups org.kernel.vger.linux-mmc,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-kernel
Message-ID <[email protected]>
Hi Ulf,

On 7/28/2026 4:56 PM, Judith Mendez wrote:
> Hi Ulf,
> 
> On 7/27/26 10:16 AM, Ulf Hansson wrote:
>> On Wed, Jul 22, 2026 at 10:57 PM Judith Mendez <[email protected]> wrote:
>>>
>>> Add support for power-off-delay-us which shall be used to specify
>>> value of delay after deasserting power during MMC power cycles.
>>> Default for delay is 1000us but custom delay can be passed in to work
>>> around hardware issues such as slow RC discharge on MMC VDD rails.
>>>
>>> Signed-off-by: Judith Mendez <[email protected]>
>>> ---
>>> Changes since v1:
>>> - Move delay to mmc_power_off
>>> - Fix dt checks and remove print
>>> - Move from mmc_host struct to mmc_ios struct
>>> - Rename post-power-off-delay-ms to power_off_delay_us
>>> ---
>>>   drivers/mmc/core/core.c  | 2 +-
>>>   drivers/mmc/core/host.c  | 8 ++++++++
>>>   include/linux/mmc/host.h | 1 +
>>>   3 files changed, 10 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c
>>> index 29e80e5f928e9..9472041fe1c20 100644
>>> --- a/drivers/mmc/core/core.c
>>> +++ b/drivers/mmc/core/core.c
>>> @@ -1388,7 +1388,7 @@ void mmc_power_off(struct mmc_host *host)
>>>           * XO-1.5, require a short delay after poweroff before the card
>>>           * can be successfully turned on again.
>>>           */
>>> -       mmc_delay(1);
>>> +       mmc_delay_us(host->ios.power_off_delay_us);
>>>   }
>>>
>>>   void mmc_power_cycle(struct mmc_host *host, u32 ocr)
>>> diff --git a/drivers/mmc/core/host.c b/drivers/mmc/core/host.c
>>> index b7ce3137d4529..fac50a2860211 100644
>>> --- a/drivers/mmc/core/host.c
>>> +++ b/drivers/mmc/core/host.c
>>> @@ -421,6 +421,13 @@ int mmc_of_parse(struct mmc_host *host)
>>>          device_property_read_u32(dev, "post-power-on-delay-ms",
>>>                                   &host->ios.power_delay_ms);
>>>
>>> +       device_property_read_u32(dev, "power-off-delay-us",
>>> +                                &host->ios.power_off_delay_us);
>>> +       if (host->ios.power_off_delay_us < 1)
>>> +               host->ios.power_off_delay_us = 1000;
>>
>> If power-off-delay-us is specified and the value >= 0, I think we can
>> respect it as is.
>>
>> This means we need to treat "0" a bit special and bail out in 
>> mmc_delay_us().
> 
> Ok, just to confirm, then, you want to drop these guards in mmc_of_parse
> and instead catch 0 in mmc_power_off?
> 
> What if DT parse gets garbled and host->ios.power_off_delay_us < 1 is
> passed?
Gentle ping on the above. Please let me know if you really want to drop
all the guards here and only catch value 0 in power off function, all
other values directly pass them to sleep function.

Thanks ^.^

~ Judith