summaryrefslogtreecommitdiffstats
path: root/hw
diff options
context:
space:
mode:
authorJean-Christophe Dubois2016-05-30 19:26:14 +0200
committerJason Wang2016-06-02 04:42:46 +0200
commit517b5e9a175fe7d47cc0fab6c2310241fd33c115 (patch)
tree3df03725a2f876f68b8fe883a85f68e67b596d5a /hw
parentAdd ENET/Gbps Ethernet support to FEC device (diff)
downloadqemu-517b5e9a175fe7d47cc0fab6c2310241fd33c115.tar.gz
qemu-517b5e9a175fe7d47cc0fab6c2310241fd33c115.tar.xz
qemu-517b5e9a175fe7d47cc0fab6c2310241fd33c115.zip
Add ENET device to i.MX6 SOC.
This adds the ENET device to the i.MX6 SOC. This was tested by booting Linux on an Qemu i.MX6 instance and accessing the internet from the linux guest. Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Jean-Christophe Dubois <jcd@tribudubois.net> Signed-off-by: Jason Wang <jasowang@redhat.com>
Diffstat (limited to 'hw')
-rw-r--r--hw/arm/fsl-imx6.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/hw/arm/fsl-imx6.c b/hw/arm/fsl-imx6.c
index a5331bfd33..0c00e7a560 100644
--- a/hw/arm/fsl-imx6.c
+++ b/hw/arm/fsl-imx6.c
@@ -105,6 +105,10 @@ static void fsl_imx6_init(Object *obj)
snprintf(name, NAME_SIZE, "spi%d", i + 1);
object_property_add_child(obj, name, OBJECT(&s->spi[i]), NULL);
}
+
+ object_initialize(&s->eth, sizeof(s->eth), TYPE_IMX_ENET);
+ qdev_set_parent_bus(DEVICE(&s->eth), sysbus_get_default());
+ object_property_add_child(obj, "eth", OBJECT(&s->eth), NULL);
}
static void fsl_imx6_realize(DeviceState *dev, Error **errp)
@@ -381,6 +385,19 @@ static void fsl_imx6_realize(DeviceState *dev, Error **errp)
spi_table[i].irq));
}
+ object_property_set_bool(OBJECT(&s->eth), true, "realized", &err);
+ if (err) {
+ error_propagate(errp, err);
+ return;
+ }
+ sysbus_mmio_map(SYS_BUS_DEVICE(&s->eth), 0, FSL_IMX6_ENET_ADDR);
+ sysbus_connect_irq(SYS_BUS_DEVICE(&s->eth), 0,
+ qdev_get_gpio_in(DEVICE(&s->a9mpcore),
+ FSL_IMX6_ENET_MAC_IRQ));
+ sysbus_connect_irq(SYS_BUS_DEVICE(&s->eth), 1,
+ qdev_get_gpio_in(DEVICE(&s->a9mpcore),
+ FSL_IMX6_ENET_MAC_1588_IRQ));
+
/* ROM memory */
memory_region_init_rom_device(&s->rom, NULL, NULL, NULL, "imx6.rom",
FSL_IMX6_ROM_SIZE, &err);