From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:56516) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WYEzl-00005N-Aq for qemu-devel@nongnu.org; Thu, 10 Apr 2014 09:26:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WYEzf-0004JW-Ls for qemu-devel@nongnu.org; Thu, 10 Apr 2014 09:26:21 -0400 Received: from mail-we0-f179.google.com ([74.125.82.179]:49470) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WYEzf-0004If-FY for qemu-devel@nongnu.org; Thu, 10 Apr 2014 09:26:15 -0400 Received: by mail-we0-f179.google.com with SMTP id x48so3822762wes.24 for ; Thu, 10 Apr 2014 06:26:14 -0700 (PDT) MIME-Version: 1.0 Sender: peter.crosthwaite@petalogix.com In-Reply-To: <1397057589-11779-2-git-send-email-eric.auger@linaro.org> References: <1397057589-11779-1-git-send-email-eric.auger@linaro.org> <1397057589-11779-2-git-send-email-eric.auger@linaro.org> Date: Thu, 10 Apr 2014 23:26:14 +1000 Message-ID: From: Peter Crosthwaite Content-Type: text/plain; charset=ISO-8859-1 Subject: Re: [Qemu-devel] [RFC v2 1/6] hw/arm/virt: add a xgmac device List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Eric Auger , Alistair Francis Cc: Peter Maydell , Kim Phillips , eric.auger@st.com, Kim Phillips , "qemu-devel@nongnu.org Developers" , Alexander Graf , stuart.yoder@freescale.com, alex.williamson@redhat.com, christophe.barnichon@st.com, a.motakis@virtualopensystems.com, "kvmarm@lists.cs.columbia.edu" , Christoffer Dall On Thu, Apr 10, 2014 at 1:33 AM, Eric Auger wrote: > From: Kim Phillips > > 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 > --- > 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 > >