|
@@ -1,7 +1,7 @@
|
|
|
/*
|
|
|
* SmartFusion2 SoC emulation.
|
|
|
*
|
|
|
- * Copyright (c) 2017 Subbaraya Sundeep <sundeep.lkml@gmail.com>
|
|
|
+ * Copyright (c) 2017-2020 Subbaraya Sundeep <sundeep.lkml@gmail.com>
|
|
|
*
|
|
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
|
* of this software and associated documentation files (the "Software"), to deal
|
|
@@ -35,11 +35,14 @@
|
|
|
|
|
|
#define MSF2_TIMER_BASE 0x40004000
|
|
|
#define MSF2_SYSREG_BASE 0x40038000
|
|
|
+#define MSF2_EMAC_BASE 0x40041000
|
|
|
|
|
|
#define ENVM_BASE_ADDRESS 0x60000000
|
|
|
|
|
|
#define SRAM_BASE_ADDRESS 0x20000000
|
|
|
|
|
|
+#define MSF2_EMAC_IRQ 12
|
|
|
+
|
|
|
#define MSF2_ENVM_MAX_SIZE (512 * KiB)
|
|
|
|
|
|
/*
|
|
@@ -81,6 +84,13 @@ static void m2sxxx_soc_initfn(Object *obj)
|
|
|
sysbus_init_child_obj(obj, "spi[*]", &s->spi[i], sizeof(s->spi[i]),
|
|
|
TYPE_MSS_SPI);
|
|
|
}
|
|
|
+
|
|
|
+ sysbus_init_child_obj(obj, "emac", &s->emac, sizeof(s->emac),
|
|
|
+ TYPE_MSS_EMAC);
|
|
|
+ if (nd_table[0].used) {
|
|
|
+ qemu_check_nic_model(&nd_table[0], TYPE_MSS_EMAC);
|
|
|
+ qdev_set_nic_properties(DEVICE(&s->emac), &nd_table[0]);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
static void m2sxxx_soc_realize(DeviceState *dev_soc, Error **errp)
|
|
@@ -192,6 +202,19 @@ static void m2sxxx_soc_realize(DeviceState *dev_soc, Error **errp)
|
|
|
g_free(bus_name);
|
|
|
}
|
|
|
|
|
|
+ dev = DEVICE(&s->emac);
|
|
|
+ object_property_set_link(OBJECT(&s->emac), OBJECT(get_system_memory()),
|
|
|
+ "ahb-bus", &error_abort);
|
|
|
+ object_property_set_bool(OBJECT(&s->emac), true, "realized", &err);
|
|
|
+ if (err != NULL) {
|
|
|
+ error_propagate(errp, err);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ busdev = SYS_BUS_DEVICE(dev);
|
|
|
+ sysbus_mmio_map(busdev, 0, MSF2_EMAC_BASE);
|
|
|
+ sysbus_connect_irq(busdev, 0,
|
|
|
+ qdev_get_gpio_in(armv7m, MSF2_EMAC_IRQ));
|
|
|
+
|
|
|
/* Below devices are not modelled yet. */
|
|
|
create_unimplemented_device("i2c_0", 0x40002000, 0x1000);
|
|
|
create_unimplemented_device("dma", 0x40003000, 0x1000);
|
|
@@ -202,7 +225,6 @@ static void m2sxxx_soc_realize(DeviceState *dev_soc, Error **errp)
|
|
|
create_unimplemented_device("can", 0x40015000, 0x1000);
|
|
|
create_unimplemented_device("rtc", 0x40017000, 0x1000);
|
|
|
create_unimplemented_device("apb_config", 0x40020000, 0x10000);
|
|
|
- create_unimplemented_device("emac", 0x40041000, 0x1000);
|
|
|
create_unimplemented_device("usb", 0x40043000, 0x1000);
|
|
|
}
|
|
|
|