On Mon, 2 Dec 2019 at 13:05, Damien Hedde <damien.he...@greensocs.com> wrote: > > I don't know why it has been implemented like this but right now the > raspi_init() does the following during machine creation: > | bus = qdev_get_child_bus(DEVICE(&s->soc), "sd-bus"); > | [...] > | carddev = qdev_create(bus, TYPE_SD_CARD); > which put the sd in the BCM2835GpioState.sdbus . > > Then the reset procedure of the BCM2835Gpio move the sd card > to one of the two usable controllers and the sd card can never go back > to the initial BCM2835GpioState.sdbus.
This seems like it's just an oversight. The code in raspi_init() which creates the SD card was added in 2016, a year before the gpio device was added, so when it was written there was only ever one place the SD card could be, I think. We should fix it so it puts the card in the right place to start with. > As far as I understand, it is theorically possible to have the sd card > on no controller at all (it's maybe the reason for the .sdbus "useless" > bus) (for example if the BCM2835Gpio is badly configured) but this is > not implemented in qemu. > > Anyway I can add some plumbing to only call sdbus_reparent_card() when > really needed by: > + not duplicating the sdbus_reparent_card() in gpfsel_update_sdbus() > + adding needed test in reset() method to only do the initial > sdbus_reparent_card() if needed (first time we call reset). I don't think you need the latter if we make the machine model put the card in the right place to start with. thanks -- PMM