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 >