On 6 July 2018 at 17:21, Philippe Mathieu-Daudé <f4...@amsat.org> wrote: > DeviceClass::reset models a "cold power-on" reset which can > also be use to powercycle a device; but there is no "hot reset" > (a.k.a. soft-reset) method available. > > The OMAP MMC Power-Up Control bit is not designed to powercycle > a card, but to disable it without powering it off (pseudo-reset): > > Multimedia Card (MMC/SD/SDIO) Interface [SPRU765A] > > MMC_CON[11] Power-Up Control (POW) > This bit must be set to 1 before any valid transaction to either > MMC/SD or SPI memory cards. > When 1, the card is considered powered-up and the controller core > is enabled. > When 0, the card is considered powered-down (system dependent), > and the controller core logic is in pseudo-reset state. This is, > the MMC_STAT flags and the FIFO pointers are reset, any access to > MMC_DATA[DATA] has no effect, a write into the MMC.CMD register > is ignored, and a setting of MMC_SPI[STR] to 1 is ignored.
This text says that the card "is considered powered-down (system dependent)", so it's not entirely invalid to reset the card here. Still, if the guests get confused by it I guess that the n8x0 systems didn't do that, and certainly resetting the other parts of the controller state is wrong. Strictly I guess we should also check the enable flag for the other things this text calls out: * accesses to MMC_DATA[DATA] * writes to MMC.CMD (we already do this) * setting MMC_SPI[STR] to 1 (we don't emulate MMC_SPI) but we should probably consider that a separate bug. (And the n8x0 boards are pretty much unmaintained currently, so I don't care very much whether we fix it or not. I don't have any working test images -- I have one of uncertain vintage which seems to be flaky when it gets to the mmc card init, but I think it makes a bit more progress with this patch now.) Applied to target-arm.next, thanks. thanks -- PMM