Message ID | 20241114210010.34502-20-philmd@linaro.org |
---|---|
State | New |
Headers | show |
Series | hw/net/xilinx_ethlite: Map RAM buffers as RAM and remove tswap() calls | expand |
Philippe Mathieu-Daudé <philmd@linaro.org> writes: > In order to track access to reserved I/O space, use yet > another UnimplementedDevice covering the whole device > memory range. Mapped with lower priority (-1). > > The memory flat view becomes: > > (qemu) info mtree -f > FlatView #0 > Root memory region: system > 0000000081000000-00000000810007e3 (prio 0, ram): ethlite.tx[0]buf > 00000000810007e4-00000000810007f3 (prio 0, i/o): ethlite.mdio > 00000000810007f4-00000000810007ff (prio 0, i/o): ethlite.tx[0]io > 0000000081000800-0000000081000fe3 (prio 0, ram): ethlite.tx[1]buf > 0000000081000fe4-0000000081000ff3 (prio -1, i/o): ethlite.reserved @0000000000000fe4 > 0000000081000ff4-0000000081000fff (prio 0, i/o): ethlite.tx[1]io > 0000000081001000-00000000810017e3 (prio 0, ram): ethlite.rx[0]buf > 00000000810017e4-00000000810017fb (prio -1, i/o): ethlite.reserved @00000000000017e4 > 00000000810017fc-00000000810017ff (prio 0, i/o): ethlite.rx[0]io > 0000000081001800-0000000081001fe3 (prio 0, ram): ethlite.rx[1]buf > 0000000081001fe4-0000000081001ffb (prio -1, i/o): ethlite.reserved @0000000000001fe4 > 0000000081001ffc-0000000081001fff (prio 0, i/o): ethlite.rx[1]io > > Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Alex Bennée <alex.bennee@linaro.org> > --- > hw/net/xilinx_ethlite.c | 11 +++++++++++ > 1 file changed, 11 insertions(+) > > diff --git a/hw/net/xilinx_ethlite.c b/hw/net/xilinx_ethlite.c > index 5f1ff7b712..1be38c44dd 100644 > --- a/hw/net/xilinx_ethlite.c > +++ b/hw/net/xilinx_ethlite.c > @@ -95,6 +95,7 @@ struct XlnxXpsEthLite > uint32_t c_rx_pingpong; > unsigned int port_index; /* dual port RAM index */ > > + UnimplementedDeviceState rsvd; > UnimplementedDeviceState mdio; > XlnxXpsEthLitePort port[2]; > }; > @@ -304,6 +305,16 @@ static void xilinx_ethlite_realize(DeviceState *dev, Error **errp) > memory_region_init(&s->container, OBJECT(dev), > "xlnx.xps-ethernetlite", 0x2000); > > + object_initialize_child(OBJECT(dev), "ethlite.reserved", &s->rsvd, > + TYPE_UNIMPLEMENTED_DEVICE); > + qdev_prop_set_string(DEVICE(&s->rsvd), "name", "ethlite.reserved"); > + qdev_prop_set_uint64(DEVICE(&s->rsvd), "size", > + memory_region_size(&s->container)); > + sysbus_realize(SYS_BUS_DEVICE(&s->rsvd), &error_fatal); > + memory_region_add_subregion_overlap(&s->container, 0, > + sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->rsvd), 0), > + -1); > + > object_initialize_child(OBJECT(dev), "ethlite.mdio", &s->mdio, > TYPE_UNIMPLEMENTED_DEVICE); > qdev_prop_set_string(DEVICE(&s->mdio), "name", "ethlite.mdio");
diff --git a/hw/net/xilinx_ethlite.c b/hw/net/xilinx_ethlite.c index 5f1ff7b712..1be38c44dd 100644 --- a/hw/net/xilinx_ethlite.c +++ b/hw/net/xilinx_ethlite.c @@ -95,6 +95,7 @@ struct XlnxXpsEthLite uint32_t c_rx_pingpong; unsigned int port_index; /* dual port RAM index */ + UnimplementedDeviceState rsvd; UnimplementedDeviceState mdio; XlnxXpsEthLitePort port[2]; }; @@ -304,6 +305,16 @@ static void xilinx_ethlite_realize(DeviceState *dev, Error **errp) memory_region_init(&s->container, OBJECT(dev), "xlnx.xps-ethernetlite", 0x2000); + object_initialize_child(OBJECT(dev), "ethlite.reserved", &s->rsvd, + TYPE_UNIMPLEMENTED_DEVICE); + qdev_prop_set_string(DEVICE(&s->rsvd), "name", "ethlite.reserved"); + qdev_prop_set_uint64(DEVICE(&s->rsvd), "size", + memory_region_size(&s->container)); + sysbus_realize(SYS_BUS_DEVICE(&s->rsvd), &error_fatal); + memory_region_add_subregion_overlap(&s->container, 0, + sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->rsvd), 0), + -1); + object_initialize_child(OBJECT(dev), "ethlite.mdio", &s->mdio, TYPE_UNIMPLEMENTED_DEVICE); qdev_prop_set_string(DEVICE(&s->mdio), "name", "ethlite.mdio");
In order to track access to reserved I/O space, use yet another UnimplementedDevice covering the whole device memory range. Mapped with lower priority (-1). The memory flat view becomes: (qemu) info mtree -f FlatView #0 Root memory region: system 0000000081000000-00000000810007e3 (prio 0, ram): ethlite.tx[0]buf 00000000810007e4-00000000810007f3 (prio 0, i/o): ethlite.mdio 00000000810007f4-00000000810007ff (prio 0, i/o): ethlite.tx[0]io 0000000081000800-0000000081000fe3 (prio 0, ram): ethlite.tx[1]buf 0000000081000fe4-0000000081000ff3 (prio -1, i/o): ethlite.reserved @0000000000000fe4 0000000081000ff4-0000000081000fff (prio 0, i/o): ethlite.tx[1]io 0000000081001000-00000000810017e3 (prio 0, ram): ethlite.rx[0]buf 00000000810017e4-00000000810017fb (prio -1, i/o): ethlite.reserved @00000000000017e4 00000000810017fc-00000000810017ff (prio 0, i/o): ethlite.rx[0]io 0000000081001800-0000000081001fe3 (prio 0, ram): ethlite.rx[1]buf 0000000081001fe4-0000000081001ffb (prio -1, i/o): ethlite.reserved @0000000000001fe4 0000000081001ffc-0000000081001fff (prio 0, i/o): ethlite.rx[1]io Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> --- hw/net/xilinx_ethlite.c | 11 +++++++++++ 1 file changed, 11 insertions(+)