Re: sdhci-omap: issues with PM features since 5.16

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

 



Hello,

Le 29/01/2024 à 18:42, Romain Naour a écrit :
> Hello,
> 
> Le 29/01/2024 à 12:17, Tony Lindgren a écrit :
>> * Romain Naour <romain.naour@xxxxxxxx> [240129 10:11]:
>>> Hello,
>>>
>>> Le 27/01/2024 à 05:48, Tony Lindgren a écrit :
>>>> Hi,
>>>>
>>>> * Romain Naour <romain.naour@xxxxxxxx> [240126 20:53]:
>>>>> Hello,
>>>>>
>>>>> I'm upgrading the kernel from 5.10.168 to 6.1.69 (both from TI tree) on a custom
>>>>> board based on a AM574x SoC and I noticed a regression on the sdhci-omap driver.
>>>>>
>>>>> The emmc was working on the 5.10 kernel using mmc-hs200 powered at 1,8v (mmc2).
>>>>
>>>> Is this limited to emmc or does it also happen with the micro-sd or wlan possibly?
>>>
>>> I can't test with a wlan device but I noticed the same issue on micro-sd (the
>>> mmc0 interface in my first post is a micro-sd)
>>
>> OK
>>
>>>> If the issue is emmc related, do you have mmc-pwrseq-emmc configured in the dts?
>>>>
>>>>> I'm able to reproduce on the IDK574x evaluation board (where the emmc is powered
>>>>> at 3v3) with vanilla kernels.
>>>>
>>>> OK, looks like only am5729-beagleboneai.dts has configured mmc-pwrseq-emmc.
>>>>
>>>>> I had to revert all commits related to "PM runtime functions" [1] and "card
>>>>> power off and enable aggressive PM" [2] from kernel 5.16 to use the emmc again
>>>>> on both boards.
>>>>
>>>> OK, this sounds like power sequence related when the emmc gets idled.
>>>
>>> It seems mmc0 ios infos are lost at some point, just after the kernel boot they
>>> are correct:
>>>
>>> cat /sys/kernel/debug/mmc0/ios
>>> clock:		50000000 Hz
>>> vdd:		21 (3.3 ~ 3.4 V)
>>> bus mode:	2 (push-pull)
>>> chip select:	0 (don't care)
>>> power mode:	2 (on)
>>> bus width:	2 (4 bits)
>>> timing spec:	2 (sd high-speed)
>>> signal voltage:	0 (3.30 V)
>>> driver type:	0 (driver type B)
>>>
>>> And without notice, ios became wrong:
>>>
>>> cat /sys/kernel/debug/mmc0/ios
>>> clock:		0 Hz
>>> vdd:		0 (invalid)
>>> bus mode:	2 (push-pull)
>>> chip select:	0 (don't care)
>>> power mode:	0 (off)
>>> bus width:	0 (1 bits)
>>> timing spec:	0 (legacy)
>>> signal voltage:	0 (3.30 V)
>>> driver type:	0 (driver type B)
>>>
>>> # cat /sys/bus/mmc/devices/mmc0:1234/type
>>> SD
>>
>> With a beagle x15, the ios values are correct after I do
>> something like fdisk -l /dev/mmcblk0:
>>
>> # cat /sys/kernel/debug/mmc0/ios
>> clock:          0 Hz
>> vdd:            0 (invalid)
>> bus mode:       2 (push-pull)
>> chip select:    0 (don't care)
>> power mode:     0 (off)
>> bus width:      0 (1 bits)
>> timing spec:    0 (legacy)
>> signal voltage: 0 (3.30 V)
>> driver type:    0 (driver type B)
>>
>> # fdisk -l /dev/mmcblk0
>> ...
>>
>> # cat /sys/kernel/debug/mmc0/ios
>> clock:          50000000 Hz
>> vdd:            21 (3.3 ~ 3.4 V)
>> bus mode:       2 (push-pull)
>> chip select:    0 (don't care)
>> power mode:     2 (on)
>> bus width:      2 (4 bits)
>> timing spec:    2 (sd high-speed)
>> signal voltage: 0 (3.30 V)
>> driver type:    0 (driver type B)
> 
> OK, I reproduced the same behavior on the AM574x evaluation board. I didn't know
> that ios can report clock 0 Hz and vdd invalid when the device is idle. I
> thought that was a symptom of my initial issue "mmc1: cache flush error -110".
> 
> So, there is no issue on AM574x evaluation board.
> 
>>
>> So I'm still guessing your issue is with emmc not getting reinitialized
>> properly as there's no mmc-pwrseq-emmc configured. Can you give it a
>> try? See am5729-beagleboneai.dts for an example.

I can't add such mmc-pwrseq-emmc on the custom board, there is no gpio available
to reset the emmc device.

To resume:
- the emmc doesn't work with mmc-hs200-1_8v mode with PM runtime enabled
- the emmc works with mmc-hs200-1_8v mode without PM runtime (patch series reverted)
- the emmc works with mmc-ddr-1_8v mode with PM runtime enabled

AFAIU the hs200 mode requires some pin iodelay tuning (SDHCI_OMAP_REQUIRE_IODELAY)
is sdhci_omap_runtime_{suspend,resume} needs to take care of that?

The mmc2 clock seems idle when mmc-hs200-1_8v and PM runtime are used.

omapconf dump prcm l3init

(mmc2 clock idle)
| CM_L3INIT_MMC2_CLKCTRL           | 0x4A009330   | 0x01070000 |

(mmc2 clock running)
| CM_L3INIT_MMC2_CLKCTRL           | 0x4A009330   | 0x01040002 |

Thoughts?

Best regards,
Romain

> 
> I don't understand how the emmc_pwrseq node can work on am5729-beagleboneai
> using gpio5_7 as reset-gpio since this pin it's not connected (F13 ball)
> 
> 	emmc_pwrseq: emmc_pwrseq {
> 		compatible = "mmc-pwrseq-emmc";
> 		reset-gpios = <&gpio5 7 GPIO_ACTIVE_LOW>;
> 	};
> 
> https://openbeagle.org/beagleboard/beaglebone-ai/-/blob/master/BeagleBone-AI_RevA2_sch.pdf
> 
> Note that mmc2 node is using ti,needs-special-reset property that is not used in
> shdci-omap driver but only in omap_hsmmc.
> 
> Best regards,
> Romain
> 
>>
>> Regards,
>>
>> Tony
> 





[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux