mci: stm32_sdmmc2: use correct card power cycle sequence
The stm32mp157c RM0436 reference manual lists following sequence for resetting the SDMMC: 1. Reset using the RCC.SDMMCxRST register bit -> We do this via reset_control_assert 2. Disable Vcc power to the card -> We don't do this, because the rail often has other 3v3 peripherals hanging off it 3. Set the SDMMC to power-cycle state -> We do this only when the MCI core sets the frequency to zero, not on init! 4. reenable Vcc power to the card after a >1ms -> We don't do this, because we don't disable Vcc 5. Wait >1ms for the power ramp period, then put card into power-off -> We do this in stm32_sdmmc2_pwron 6. Wait >1ms, then put card into power-on state -> We do this in stm32_sdmmc2_pwron 7. Wait 74 SDMMC_CK cycles before sending the first command to the card -> We don't have an explicit delay between mci_startup_{sd,mmc} and mci_set_blocklen, so a low max-speed may run afoul of the timing constraint Fix 3 & 7. 3 is the main one and doing it fixes an issue of timeouts occurring, when having barebox in a reboot loop or the SD-Card inside a USB-SD-Mux. Fixes: ce99d0c86b32ec ("mci: add support for stm32mp sd/mmc controller") Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de> |
---|
|
drivers/mci/stm32_sdmmc2.c |
---|