On Thu, 19 Jun 2025 at 00:06, Jackson Donaldson <jackson88...@gmail.com> wrote: > > This commit adds UART to max78000_soc > > Signed-off-by: Jackson Donaldson <jc...@duck.com> > --- > hw/arm/max78000_soc.c | 28 ++++++++++++++++++++++++---- > include/hw/arm/max78000_soc.h | 3 +++ > 2 files changed, 27 insertions(+), 4 deletions(-) > > diff --git a/hw/arm/max78000_soc.c b/hw/arm/max78000_soc.c > index 8d8d2dce61..7217924191 100644 > --- a/hw/arm/max78000_soc.c > +++ b/hw/arm/max78000_soc.c > @@ -18,6 +18,10 @@ > #include "hw/misc/unimp.h" > > static const uint32_t max78000_icc_addr[] = {0x4002a000, 0x4002a800}; > +static const uint32_t max78000_uart_addr[] = {0x40042000, 0x40043000, > + 0x40044000}; > + > +static const int max78000_uart_irq[] = {14, 15, 34}; > > static void max78000_soc_initfn(Object *obj) > { > @@ -30,6 +34,11 @@ static void max78000_soc_initfn(Object *obj) > object_initialize_child(obj, "icc[*]", &s->icc[i], > TYPE_MAX78000_ICC); > } > > + for (i = 0; i < MAX78000_NUM_UART; i++) { > + object_initialize_child(obj, "uart[*]", &s->uart[i], > + TYPE_MAX78000_UART);
As with the earlier patch, give each object a unique name. > + } > + > s->sysclk = qdev_init_clock_in(DEVICE(s), "sysclk", NULL, NULL, 0); > } > > @@ -38,6 +47,7 @@ static void max78000_soc_realize(DeviceState *dev_soc, > Error **errp) > MAX78000State *s = MAX78000_SOC(dev_soc); > MemoryRegion *system_memory = get_system_memory(); > DeviceState *dev, *armv7m; > + SysBusDevice *busdev; > Error *err = NULL; > int i; > > @@ -88,6 +98,20 @@ static void max78000_soc_realize(DeviceState *dev_soc, > Error **errp) > sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, max78000_icc_addr[i]); > } > > + for (i = 0; i < MAX78000_NUM_UART; i++) { > + dev = DEVICE(&(s->uart[i])); > + qdev_prop_set_chr(dev, "chardev", serial_hd(i)); > + if (!sysbus_realize(SYS_BUS_DEVICE(&s->uart[i]), errp)) { > + return; > + } > + dev->id = g_strdup_printf("uart%d", i); This looks odd -- the SoC code shouldn't need to reach in and set anything directly in the DeviceState struct. > + > + busdev = SYS_BUS_DEVICE(dev); > + sysbus_mmio_map(busdev, 0, max78000_uart_addr[i]); > + sysbus_connect_irq(busdev, 0, qdev_get_gpio_in(armv7m, > + > max78000_uart_irq[i])); > + } > + > create_unimplemented_device("globalControl", 0x40000000, 0x400); > create_unimplemented_device("systemInterface", 0x40000400, 0x400); > create_unimplemented_device("functionControl", 0x40000800, 0x400); thanks -- PMM