On Thu, Apr 10, 2014 at 1:33 AM, Eric Auger <eric.auger@xxxxxxxxxx> wrote: > From: Kim Phillips <kim.phillips@xxxxxxxxxx> > > This is a hack and only serves as an example of what needs to be > done to make the next RFC - add vfio-platform support - work > for development purposes on a Calxeda Midway system. We don't want > mach-virt to always create this ethernet device - DO NOT APPLY, etc. > > Initial attempts to convince QEMU to create a memory mapped device > on the command line (e.g., -device vfio-platform,name=fff51000.ethernet) > would fail with "Parameter 'driver' expects pluggable device type". Alistair is working on this. cc. Regards, Peter > Any guidance as to how to overcome this apparent design limitation > is welcome. > > RAM is reduced from 30 to 1GiB such as to not overlap the xgmac device's > physical address. Not sure if the 30GiB RAM (or whatever the user sets > it to with -m) could be set up above 0x1_0000_0000, but there is probably > extra work needed to resolve this type of conflict. > > note: vfio-platform interrupt support development may want interrupt > property data filled; here it's omitted for the time being. > > Not-signed-off-by: Kim Phillips <kim.phillips@xxxxxxxxxx> > --- > hw/arm/virt.c | 24 +++++++++++++++++++++++- > 1 file changed, 23 insertions(+), 1 deletion(-) > > diff --git a/hw/arm/virt.c b/hw/arm/virt.c > index 2bbc931..5d43cf0 100644 > --- a/hw/arm/virt.c > +++ b/hw/arm/virt.c > @@ -65,6 +65,7 @@ enum { > VIRT_GIC_CPU, > VIRT_UART, > VIRT_MMIO, > + VIRT_ETHERNET, > }; > > typedef struct MemMapEntry { > @@ -106,7 +107,8 @@ static const MemMapEntry a15memmap[] = { > [VIRT_MMIO] = { 0xa000000, 0x200 }, > /* ...repeating for a total of NUM_VIRTIO_TRANSPORTS, each of that size */ > /* 0x10000000 .. 0x40000000 reserved for PCI */ > - [VIRT_MEM] = { 0x40000000, 30ULL * 1024 * 1024 * 1024 }, > + [VIRT_MEM] = { 0x40000000, 1ULL * 1024 * 1024 * 1024 }, > + [VIRT_ETHERNET] = { 0xfff51000, 0x1000 }, > }; > > static const int a15irqmap[] = { > @@ -291,6 +293,25 @@ static void create_uart(const VirtBoardInfo *vbi, qemu_irq *pic) > g_free(nodename); > } > > +static void create_ethernet(const VirtBoardInfo *vbi, qemu_irq *pic) > +{ > + char *nodename; > + hwaddr base = vbi->memmap[VIRT_ETHERNET].base; > + hwaddr size = vbi->memmap[VIRT_ETHERNET].size; > + const char compat[] = "calxeda,hb-xgmac"; > + > + sysbus_create_simple("vfio-platform", base, NULL); > + > + nodename = g_strdup_printf("/ethernet@%" PRIx64, base); > + qemu_fdt_add_subnode(vbi->fdt, nodename); > + > + /* Note that we can't use setprop_string because of the embedded NUL */ > + qemu_fdt_setprop(vbi->fdt, nodename, "compatible", compat, sizeof(compat)); > + qemu_fdt_setprop_sized_cells(vbi->fdt, nodename, "reg", 2, base, 2, size); > + > + g_free(nodename); > +} > + > static void create_virtio_devices(const VirtBoardInfo *vbi, qemu_irq *pic) > { > int i; > @@ -425,6 +446,7 @@ static void machvirt_init(QEMUMachineInitArgs *args) > } > > create_uart(vbi, pic); > + create_ethernet(vbi, pic); > > /* Create mmio transports, so the user can create virtio backends > * (which will be automatically plugged in to the transports). If > -- > 1.8.3.2 > > _______________________________________________ kvmarm mailing list kvmarm@xxxxxxxxxxxxxxxxxxxxx https://lists.cs.columbia.edu/mailman/listinfo/kvmarm