Commit 1de9610c8ff80aa2a47b6cbe8c198b935916feda

Authored by Paul Brook
1 parent e325e1f8

Stellaris I2C qdev conversion

Signed-off-by: Paul Brook <paul@codesourcery.com>
Showing 1 changed file with 18 additions and 7 deletions
hw/stellaris.c
@@ -680,6 +680,7 @@ static void stellaris_sys_init(uint32_t base, qemu_irq irq, @@ -680,6 +680,7 @@ static void stellaris_sys_init(uint32_t base, qemu_irq irq,
680 /* I2C controller. */ 680 /* I2C controller. */
681 681
682 typedef struct { 682 typedef struct {
  683 + SysBusDevice busdev;
683 i2c_bus *bus; 684 i2c_bus *bus;
684 qemu_irq irq; 685 qemu_irq irq;
685 uint32_t msa; 686 uint32_t msa;
@@ -870,18 +871,19 @@ static int stellaris_i2c_load(QEMUFile *f, void *opaque, int version_id) @@ -870,18 +871,19 @@ static int stellaris_i2c_load(QEMUFile *f, void *opaque, int version_id)
870 return 0; 871 return 0;
871 } 872 }
872 873
873 -static void stellaris_i2c_init(uint32_t base, qemu_irq irq, i2c_bus *bus) 874 +static void stellaris_i2c_init(SysBusDevice * dev)
874 { 875 {
875 - stellaris_i2c_state *s; 876 + stellaris_i2c_state *s = FROM_SYSBUS(stellaris_i2c_state, dev);
  877 + i2c_bus *bus = i2c_init_bus();
876 int iomemtype; 878 int iomemtype;
877 879
878 - s = (stellaris_i2c_state *)qemu_mallocz(sizeof(stellaris_i2c_state));  
879 - s->irq = irq; 880 + sysbus_init_irq(dev, &s->irq);
  881 + qdev_attach_child_bus(&dev->qdev, "i2c", bus);
880 s->bus = bus; 882 s->bus = bus;
881 883
882 iomemtype = cpu_register_io_memory(0, stellaris_i2c_readfn, 884 iomemtype = cpu_register_io_memory(0, stellaris_i2c_readfn,
883 stellaris_i2c_writefn, s); 885 stellaris_i2c_writefn, s);
884 - cpu_register_physical_memory(base, 0x00001000, iomemtype); 886 + sysbus_init_mmio(dev, 0x1000, iomemtype);
885 /* ??? For now we only implement the master interface. */ 887 /* ??? For now we only implement the master interface. */
886 stellaris_i2c_reset(s); 888 stellaris_i2c_reset(s);
887 register_savevm("stellaris_i2c", -1, 1, 889 register_savevm("stellaris_i2c", -1, 1,
@@ -1321,8 +1323,9 @@ static void stellaris_init(const char *kernel_filename, const char *cpu_model, @@ -1321,8 +1323,9 @@ static void stellaris_init(const char *kernel_filename, const char *cpu_model,
1321 } 1323 }
1322 1324
1323 if (board->dc2 & (1 << 12)) { 1325 if (board->dc2 & (1 << 12)) {
1324 - i2c = i2c_init_bus();  
1325 - stellaris_i2c_init(0x40020000, pic[8], i2c); 1326 + DeviceState *dev;
  1327 + dev = sysbus_create_simple("stellaris-i2c", 0x40020000, pic[8]);
  1328 + i2c = qdev_get_child_bus(dev, "i2c");
1326 if (board->peripherals & BP_OLED_I2C) { 1329 if (board->peripherals & BP_OLED_I2C) {
1327 i2c_create_slave(i2c, "ssd0303", 0x3d); 1330 i2c_create_slave(i2c, "ssd0303", 0x3d);
1328 } 1331 }
@@ -1409,3 +1412,11 @@ QEMUMachine lm3s6965evb_machine = { @@ -1409,3 +1412,11 @@ QEMUMachine lm3s6965evb_machine = {
1409 .desc = "Stellaris LM3S6965EVB", 1412 .desc = "Stellaris LM3S6965EVB",
1410 .init = lm3s6965evb_init, 1413 .init = lm3s6965evb_init,
1411 }; 1414 };
  1415 +
  1416 +static void stellaris_register_devices(void)
  1417 +{
  1418 + sysbus_register_dev("stellaris-i2c", sizeof(stellaris_i2c_state),
  1419 + stellaris_i2c_init);
  1420 +}
  1421 +
  1422 +device_init(stellaris_register_devices)