msf2: Add EMAC block to SmartFusion2 SoC
With SmartFusion2 Ethernet MAC model in place this patch adds the same to SoC. Signed-off-by: Subbaraya Sundeep <sundeep.lkml@gmail.com> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Message-id: 1587048891-30493-3-git-send-email-sundeep.lkml@gmail.com Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
1c66437879
commit
05b7374a58
|
@ -1,7 +1,7 @@
|
||||||
/*
|
/*
|
||||||
* SmartFusion2 SoC emulation.
|
* 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
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
@ -35,11 +35,14 @@
|
||||||
|
|
||||||
#define MSF2_TIMER_BASE 0x40004000
|
#define MSF2_TIMER_BASE 0x40004000
|
||||||
#define MSF2_SYSREG_BASE 0x40038000
|
#define MSF2_SYSREG_BASE 0x40038000
|
||||||
|
#define MSF2_EMAC_BASE 0x40041000
|
||||||
|
|
||||||
#define ENVM_BASE_ADDRESS 0x60000000
|
#define ENVM_BASE_ADDRESS 0x60000000
|
||||||
|
|
||||||
#define SRAM_BASE_ADDRESS 0x20000000
|
#define SRAM_BASE_ADDRESS 0x20000000
|
||||||
|
|
||||||
|
#define MSF2_EMAC_IRQ 12
|
||||||
|
|
||||||
#define MSF2_ENVM_MAX_SIZE (512 * KiB)
|
#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]),
|
sysbus_init_child_obj(obj, "spi[*]", &s->spi[i], sizeof(s->spi[i]),
|
||||||
TYPE_MSS_SPI);
|
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)
|
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);
|
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. */
|
/* Below devices are not modelled yet. */
|
||||||
create_unimplemented_device("i2c_0", 0x40002000, 0x1000);
|
create_unimplemented_device("i2c_0", 0x40002000, 0x1000);
|
||||||
create_unimplemented_device("dma", 0x40003000, 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("can", 0x40015000, 0x1000);
|
||||||
create_unimplemented_device("rtc", 0x40017000, 0x1000);
|
create_unimplemented_device("rtc", 0x40017000, 0x1000);
|
||||||
create_unimplemented_device("apb_config", 0x40020000, 0x10000);
|
create_unimplemented_device("apb_config", 0x40020000, 0x10000);
|
||||||
create_unimplemented_device("emac", 0x40041000, 0x1000);
|
|
||||||
create_unimplemented_device("usb", 0x40043000, 0x1000);
|
create_unimplemented_device("usb", 0x40043000, 0x1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
#include "hw/timer/mss-timer.h"
|
#include "hw/timer/mss-timer.h"
|
||||||
#include "hw/misc/msf2-sysreg.h"
|
#include "hw/misc/msf2-sysreg.h"
|
||||||
#include "hw/ssi/mss-spi.h"
|
#include "hw/ssi/mss-spi.h"
|
||||||
|
#include "hw/net/msf2-emac.h"
|
||||||
|
|
||||||
#define TYPE_MSF2_SOC "msf2-soc"
|
#define TYPE_MSF2_SOC "msf2-soc"
|
||||||
#define MSF2_SOC(obj) OBJECT_CHECK(MSF2State, (obj), TYPE_MSF2_SOC)
|
#define MSF2_SOC(obj) OBJECT_CHECK(MSF2State, (obj), TYPE_MSF2_SOC)
|
||||||
|
@ -62,6 +63,7 @@ typedef struct MSF2State {
|
||||||
MSF2SysregState sysreg;
|
MSF2SysregState sysreg;
|
||||||
MSSTimerState timer;
|
MSSTimerState timer;
|
||||||
MSSSpiState spi[MSF2_NUM_SPIS];
|
MSSSpiState spi[MSF2_NUM_SPIS];
|
||||||
|
MSF2EmacState emac;
|
||||||
} MSF2State;
|
} MSF2State;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue