Message ID | 1466159816-28509-1-git-send-email-pbonzini@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 06/17/2016 12:36 PM, Paolo Bonzini wrote: > This allows specifying the property via -drive if=none and creating > the flash device with -device. > > Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> > --- > Cedric, can you put it at the beginning of your ast2400 > series and adjust aspeed_smc_init_flashes along these > lines? It does not affect command line usage. It looks good : https://github.com/legoater/qemu/commits/aspeed-ssi I will send a v2 beginning with your patch. Thanks, C. > hw/arm/xilinx_zynq.c | 8 +++++++- > hw/arm/xlnx-ep108.c | 9 ++++++++- > hw/block/m25p80.c | 10 ++-------- > hw/microblaze/petalogix_ml605_mmu.c | 9 ++++++++- > 4 files changed, 25 insertions(+), 11 deletions(-) > > diff --git a/hw/arm/xilinx_zynq.c b/hw/arm/xilinx_zynq.c > index aefebcf..b0cabe2 100644 > --- a/hw/arm/xilinx_zynq.c > +++ b/hw/arm/xilinx_zynq.c > @@ -138,7 +138,13 @@ static inline void zynq_init_spi_flashes(uint32_t base_addr, qemu_irq irq, > spi = (SSIBus *)qdev_get_child_bus(dev, bus_name); > > for (j = 0; j < num_ss; ++j) { > - flash_dev = ssi_create_slave(spi, "n25q128"); > + DriveInfo *dinfo = drive_get_next(IF_MTD); > + flash_dev = ssi_create_slave_no_init(spi, "n25q128"); > + if (dinfo) { > + qdev_prop_set_drive(flash_dev, "drive", > + blk_by_legacy_dinfo(dinfo), &error_fatal); > + } > + qdev_init_nofail(flash_dev); > > cs_line = qdev_get_gpio_in_named(flash_dev, SSI_GPIO_CS, 0); > sysbus_connect_irq(busdev, i * num_ss + j + 1, cs_line); > diff --git a/hw/arm/xlnx-ep108.c b/hw/arm/xlnx-ep108.c > index 34b4641..4ec590a 100644 > --- a/hw/arm/xlnx-ep108.c > +++ b/hw/arm/xlnx-ep108.c > @@ -88,12 +88,19 @@ static void xlnx_ep108_init(MachineState *machine) > SSIBus *spi_bus; > DeviceState *flash_dev; > qemu_irq cs_line; > + DriveInfo *dinfo = drive_get_next(IF_MTD); > gchar *bus_name = g_strdup_printf("spi%d", i); > > spi_bus = (SSIBus *)qdev_get_child_bus(DEVICE(&s->soc), bus_name); > g_free(bus_name); > > - flash_dev = ssi_create_slave(spi_bus, "sst25wf080"); > + flash_dev = ssi_create_slave_no_init(spi_bus, "sst25wf080"); > + if (dinfo) { > + qdev_prop_set_drive(flash_dev, "drive", blk_by_legacy_dinfo(dinfo), > + &error_fatal); > + } > + qdev_init_nofail(flash_dev); > + > cs_line = qdev_get_gpio_in_named(flash_dev, SSI_GPIO_CS, 0); > > sysbus_connect_irq(SYS_BUS_DEVICE(&s->soc.spi[i]), 1, cs_line); > diff --git a/hw/block/m25p80.c b/hw/block/m25p80.c > index 51d8596..1a44b4c 100644 > --- a/hw/block/m25p80.c > +++ b/hw/block/m25p80.c > @@ -880,7 +880,6 @@ static uint32_t m25p80_transfer8(SSISlave *ss, uint32_t tx) > > static int m25p80_init(SSISlave *ss) > { > - DriveInfo *dinfo; > Flash *s = M25P80(ss); > M25P80Class *mc = M25P80_GET_CLASS(s); > > @@ -889,14 +888,8 @@ static int m25p80_init(SSISlave *ss) > s->size = s->pi->sector_size * s->pi->n_sectors; > s->dirty_page = -1; > > - /* FIXME use a qdev drive property instead of drive_get_next() */ > - dinfo = drive_get_next(IF_MTD); > - > - if (dinfo) { > + if (s->blk) { > DB_PRINT_L(0, "Binding to IF_MTD drive\n"); > - s->blk = blk_by_legacy_dinfo(dinfo); > - blk_attach_dev_nofail(s->blk, s); > - > s->storage = blk_blockalign(s->blk, s->size); > > /* FIXME: Move to late init */ > @@ -927,6 +920,7 @@ static void m25p80_pre_save(void *opaque) > > static Property m25p80_properties[] = { > DEFINE_PROP_UINT32("nonvolatile-cfg", Flash, nonvolatile_cfg, 0x8FFF), > + DEFINE_PROP_DRIVE("drive", Flash, blk), > DEFINE_PROP_END_OF_LIST(), > }; > > diff --git a/hw/microblaze/petalogix_ml605_mmu.c b/hw/microblaze/petalogix_ml605_mmu.c > index 07527b6..4968bdb 100644 > --- a/hw/microblaze/petalogix_ml605_mmu.c > +++ b/hw/microblaze/petalogix_ml605_mmu.c > @@ -191,9 +191,16 @@ petalogix_ml605_init(MachineState *machine) > spi = (SSIBus *)qdev_get_child_bus(dev, "spi"); > > for (i = 0; i < NUM_SPI_FLASHES; i++) { > + DriveInfo *dinfo = drive_get_next(IF_MTD); > qemu_irq cs_line; > > - dev = ssi_create_slave(spi, "n25q128"); > + dev = ssi_create_slave_no_init(spi, "n25q128"); > + if (dinfo) { > + qdev_prop_set_drive(dev, "drive", blk_by_legacy_dinfo(dinfo), > + &error_fatal); > + } > + qdev_init_nofail(dev); > + > cs_line = qdev_get_gpio_in_named(dev, SSI_GPIO_CS, 0); > sysbus_connect_irq(busdev, i+1, cs_line); > } >
diff --git a/hw/arm/xilinx_zynq.c b/hw/arm/xilinx_zynq.c index aefebcf..b0cabe2 100644 --- a/hw/arm/xilinx_zynq.c +++ b/hw/arm/xilinx_zynq.c @@ -138,7 +138,13 @@ static inline void zynq_init_spi_flashes(uint32_t base_addr, qemu_irq irq, spi = (SSIBus *)qdev_get_child_bus(dev, bus_name); for (j = 0; j < num_ss; ++j) { - flash_dev = ssi_create_slave(spi, "n25q128"); + DriveInfo *dinfo = drive_get_next(IF_MTD); + flash_dev = ssi_create_slave_no_init(spi, "n25q128"); + if (dinfo) { + qdev_prop_set_drive(flash_dev, "drive", + blk_by_legacy_dinfo(dinfo), &error_fatal); + } + qdev_init_nofail(flash_dev); cs_line = qdev_get_gpio_in_named(flash_dev, SSI_GPIO_CS, 0); sysbus_connect_irq(busdev, i * num_ss + j + 1, cs_line); diff --git a/hw/arm/xlnx-ep108.c b/hw/arm/xlnx-ep108.c index 34b4641..4ec590a 100644 --- a/hw/arm/xlnx-ep108.c +++ b/hw/arm/xlnx-ep108.c @@ -88,12 +88,19 @@ static void xlnx_ep108_init(MachineState *machine) SSIBus *spi_bus; DeviceState *flash_dev; qemu_irq cs_line; + DriveInfo *dinfo = drive_get_next(IF_MTD); gchar *bus_name = g_strdup_printf("spi%d", i); spi_bus = (SSIBus *)qdev_get_child_bus(DEVICE(&s->soc), bus_name); g_free(bus_name); - flash_dev = ssi_create_slave(spi_bus, "sst25wf080"); + flash_dev = ssi_create_slave_no_init(spi_bus, "sst25wf080"); + if (dinfo) { + qdev_prop_set_drive(flash_dev, "drive", blk_by_legacy_dinfo(dinfo), + &error_fatal); + } + qdev_init_nofail(flash_dev); + cs_line = qdev_get_gpio_in_named(flash_dev, SSI_GPIO_CS, 0); sysbus_connect_irq(SYS_BUS_DEVICE(&s->soc.spi[i]), 1, cs_line); diff --git a/hw/block/m25p80.c b/hw/block/m25p80.c index 51d8596..1a44b4c 100644 --- a/hw/block/m25p80.c +++ b/hw/block/m25p80.c @@ -880,7 +880,6 @@ static uint32_t m25p80_transfer8(SSISlave *ss, uint32_t tx) static int m25p80_init(SSISlave *ss) { - DriveInfo *dinfo; Flash *s = M25P80(ss); M25P80Class *mc = M25P80_GET_CLASS(s); @@ -889,14 +888,8 @@ static int m25p80_init(SSISlave *ss) s->size = s->pi->sector_size * s->pi->n_sectors; s->dirty_page = -1; - /* FIXME use a qdev drive property instead of drive_get_next() */ - dinfo = drive_get_next(IF_MTD); - - if (dinfo) { + if (s->blk) { DB_PRINT_L(0, "Binding to IF_MTD drive\n"); - s->blk = blk_by_legacy_dinfo(dinfo); - blk_attach_dev_nofail(s->blk, s); - s->storage = blk_blockalign(s->blk, s->size); /* FIXME: Move to late init */ @@ -927,6 +920,7 @@ static void m25p80_pre_save(void *opaque) static Property m25p80_properties[] = { DEFINE_PROP_UINT32("nonvolatile-cfg", Flash, nonvolatile_cfg, 0x8FFF), + DEFINE_PROP_DRIVE("drive", Flash, blk), DEFINE_PROP_END_OF_LIST(), }; diff --git a/hw/microblaze/petalogix_ml605_mmu.c b/hw/microblaze/petalogix_ml605_mmu.c index 07527b6..4968bdb 100644 --- a/hw/microblaze/petalogix_ml605_mmu.c +++ b/hw/microblaze/petalogix_ml605_mmu.c @@ -191,9 +191,16 @@ petalogix_ml605_init(MachineState *machine) spi = (SSIBus *)qdev_get_child_bus(dev, "spi"); for (i = 0; i < NUM_SPI_FLASHES; i++) { + DriveInfo *dinfo = drive_get_next(IF_MTD); qemu_irq cs_line; - dev = ssi_create_slave(spi, "n25q128"); + dev = ssi_create_slave_no_init(spi, "n25q128"); + if (dinfo) { + qdev_prop_set_drive(dev, "drive", blk_by_legacy_dinfo(dinfo), + &error_fatal); + } + qdev_init_nofail(dev); + cs_line = qdev_get_gpio_in_named(dev, SSI_GPIO_CS, 0); sysbus_connect_irq(busdev, i+1, cs_line); }
This allows specifying the property via -drive if=none and creating the flash device with -device. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> --- Cedric, can you put it at the beginning of your ast2400 series and adjust aspeed_smc_init_flashes along these lines? It does not affect command line usage. hw/arm/xilinx_zynq.c | 8 +++++++- hw/arm/xlnx-ep108.c | 9 ++++++++- hw/block/m25p80.c | 10 ++-------- hw/microblaze/petalogix_ml605_mmu.c | 9 ++++++++- 4 files changed, 25 insertions(+), 11 deletions(-)