Regression tested using Paul Brooks test vector: peterc@PetaLogix-ws2:~/Petalogix/Internal/plgx_install/qemu-upstream-regression/third-party/stellaris-test$ qemu-system-arm -M lm3s6965evb -serial stdio -kernel sd_card.bin -sd sdcard.img VNC server running on `127.0.0.1:5900'
SD Card Example Program Type 'help' for help. /> ls Open SD: Unknown CMD8 listing ----A 2012/04/25 17:44 12 README.TXT 1 File(s), 12 bytes total 0 Dir(s), 61182K bytes free /> cat README.TXT Hello World Gui based test works as well. On Mon, Jun 4, 2012 at 6:08 PM, Peter A. G. Crosthwaite <peter.crosthwa...@petalogix.com> wrote: > Setup the stellaris_ssi_bus device to use a single multi-slave ssi bus instead > of two busses. > > Signed-off-by: Peter A. G. Crosthwaite <peter.crosthwa...@petalogix.com> > --- > changed from v3: > This patch is new > > hw/stellaris.c | 17 +++++++---------- > 1 files changed, 7 insertions(+), 10 deletions(-) > > diff --git a/hw/stellaris.c b/hw/stellaris.c > index e0600a1..07a4187 100644 > --- a/hw/stellaris.c > +++ b/hw/stellaris.c > @@ -1164,22 +1164,21 @@ static int stellaris_adc_init(SysBusDevice *dev) > typedef struct { > SSISlave ssidev; > qemu_irq irq; Just curiously, AFAICT, this irq is completely dead. Paul can it be removed in a trivial patch or is there some GPIO related black magic occurring here? > - int current_dev; > - SSIBus *bus[2]; > + SSIBus *bus; > } stellaris_ssi_bus_state; > > static void stellaris_ssi_bus_select(void *opaque, int irq, int level) > { > stellaris_ssi_bus_state *s = (stellaris_ssi_bus_state *)opaque; > > - s->current_dev = level; > + ssi_select_slave(s->bus, (uint32_t)level); > } > > static uint32_t stellaris_ssi_bus_transfer(SSISlave *dev, uint32_t val) > { > stellaris_ssi_bus_state *s = FROM_SSI_SLAVE(stellaris_ssi_bus_state, dev); > > - return ssi_transfer(s->bus[s->current_dev], val); > + return ssi_transfer(s->bus, val); > } > > static const VMStateDescription vmstate_stellaris_ssi_bus = { > @@ -1188,7 +1187,6 @@ static const VMStateDescription > vmstate_stellaris_ssi_bus = { > .minimum_version_id = 1, > .minimum_version_id_old = 1, > .fields = (VMStateField[]) { > - VMSTATE_INT32(current_dev, stellaris_ssi_bus_state), > VMSTATE_END_OF_LIST() > } > }; > @@ -1197,8 +1195,7 @@ static int stellaris_ssi_bus_init(SSISlave *dev) > { > stellaris_ssi_bus_state *s = FROM_SSI_SLAVE(stellaris_ssi_bus_state, dev); > > - s->bus[0] = ssi_create_bus(&dev->qdev, "ssi0"); > - s->bus[1] = ssi_create_bus(&dev->qdev, "ssi1"); > + s->bus = ssi_create_bus(&dev->qdev, "ssi"); > qdev_init_gpio_in(&dev->qdev, stellaris_ssi_bus_select, 1); > > vmstate_register(&dev->qdev, -1, &vmstate_stellaris_ssi_bus, s); > @@ -1312,11 +1309,11 @@ static void stellaris_init(const char > *kernel_filename, const char *cpu_model, > mux = ssi_create_slave(bus, "evb6965-ssi", 0); > gpio_out[GPIO_D][0] = qdev_get_gpio_in(mux, 0); > > - bus = qdev_get_child_bus(mux, "ssi0"); > + bus = qdev_get_child_bus(mux, "ssi"); > + > ssi_create_slave(bus, "ssi-sd", 0); > > - bus = qdev_get_child_bus(mux, "ssi1"); > - dev = ssi_create_slave(bus, "ssd0323", 0); > + dev = ssi_create_slave(bus, "ssd0323", 1); > gpio_out[GPIO_C][7] = qdev_get_gpio_in(dev, 0); > > /* Make sure the select pin is high. */ > -- > 1.7.3.2 >