mirror of
https://github.com/xemu-project/xemu.git
synced 2024-11-24 03:59:52 +00:00
xlnx-zcu102: Add support for the ZynqMP QSPI
Add support for the ZynqMP QSPI (consisting of the Generic QSPI and Legacy QSPI) and connect Numonyx n25q512a11 flashes to it. Signed-off-by: Francisco Iglesias <frasse.iglesias@gmail.com> Reviewed-by: Alistair Francis <alistair.francis@xilinx.com> Reviewed-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com> Tested-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Message-id: 20171126231634.9531-14-frasse.iglesias@gmail.com Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
c95997a39d
commit
babc1f3009
@ -151,6 +151,29 @@ static void xlnx_zynqmp_init(XlnxZCU102 *s, MachineState *machine)
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->soc.spi[i]), 1, cs_line);
|
||||
}
|
||||
|
||||
for (i = 0; i < XLNX_ZYNQMP_NUM_QSPI_FLASH; i++) {
|
||||
SSIBus *spi_bus;
|
||||
DeviceState *flash_dev;
|
||||
qemu_irq cs_line;
|
||||
DriveInfo *dinfo = drive_get_next(IF_MTD);
|
||||
int bus = i / XLNX_ZYNQMP_NUM_QSPI_BUS_CS;
|
||||
gchar *bus_name = g_strdup_printf("qspi%d", bus);
|
||||
|
||||
spi_bus = (SSIBus *)qdev_get_child_bus(DEVICE(&s->soc), bus_name);
|
||||
g_free(bus_name);
|
||||
|
||||
flash_dev = ssi_create_slave_no_init(spi_bus, "n25q512a11");
|
||||
if (dinfo) {
|
||||
qdev_prop_set_drive(flash_dev, "drive", blk_by_legacy_dinfo(dinfo),
|
||||
&error_fatal);
|
||||
}
|
||||
qdev_init_nofail(flash_dev);
|
||||
|
||||
cs_line = qdev_get_gpio_in_named(flash_dev, SSI_GPIO_CS, 0);
|
||||
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->soc.qspi), i + 1, cs_line);
|
||||
}
|
||||
|
||||
/* TODO create and connect IDE devices for ide_drive_get() */
|
||||
|
||||
xlnx_zcu102_binfo.ram_size = ram_size;
|
||||
|
@ -40,6 +40,10 @@
|
||||
#define SATA_ADDR 0xFD0C0000
|
||||
#define SATA_NUM_PORTS 2
|
||||
|
||||
#define QSPI_ADDR 0xff0f0000
|
||||
#define LQSPI_ADDR 0xc0000000
|
||||
#define QSPI_IRQ 15
|
||||
|
||||
#define DP_ADDR 0xfd4a0000
|
||||
#define DP_IRQ 113
|
||||
|
||||
@ -171,6 +175,9 @@ static void xlnx_zynqmp_init(Object *obj)
|
||||
qdev_set_parent_bus(DEVICE(&s->spi[i]), sysbus_get_default());
|
||||
}
|
||||
|
||||
object_initialize(&s->qspi, sizeof(s->qspi), TYPE_XLNX_ZYNQMP_QSPIPS);
|
||||
qdev_set_parent_bus(DEVICE(&s->qspi), sysbus_get_default());
|
||||
|
||||
object_initialize(&s->dp, sizeof(s->dp), TYPE_XLNX_DP);
|
||||
qdev_set_parent_bus(DEVICE(&s->dp), sysbus_get_default());
|
||||
|
||||
@ -411,6 +418,25 @@ static void xlnx_zynqmp_realize(DeviceState *dev, Error **errp)
|
||||
g_free(bus_name);
|
||||
}
|
||||
|
||||
object_property_set_bool(OBJECT(&s->qspi), true, "realized", &err);
|
||||
sysbus_mmio_map(SYS_BUS_DEVICE(&s->qspi), 0, QSPI_ADDR);
|
||||
sysbus_mmio_map(SYS_BUS_DEVICE(&s->qspi), 1, LQSPI_ADDR);
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->qspi), 0, gic_spi[QSPI_IRQ]);
|
||||
|
||||
for (i = 0; i < XLNX_ZYNQMP_NUM_QSPI_BUS; i++) {
|
||||
gchar *bus_name;
|
||||
gchar *target_bus;
|
||||
|
||||
/* Alias controller SPI bus to the SoC itself */
|
||||
bus_name = g_strdup_printf("qspi%d", i);
|
||||
target_bus = g_strdup_printf("spi%d", i);
|
||||
object_property_add_alias(OBJECT(s), bus_name,
|
||||
OBJECT(&s->qspi), target_bus,
|
||||
&error_abort);
|
||||
g_free(bus_name);
|
||||
g_free(target_bus);
|
||||
}
|
||||
|
||||
object_property_set_bool(OBJECT(&s->dp), true, "realized", &err);
|
||||
if (err) {
|
||||
error_propagate(errp, err);
|
||||
|
@ -40,6 +40,10 @@
|
||||
#define XLNX_ZYNQMP_NUM_SDHCI 2
|
||||
#define XLNX_ZYNQMP_NUM_SPIS 2
|
||||
|
||||
#define XLNX_ZYNQMP_NUM_QSPI_BUS 2
|
||||
#define XLNX_ZYNQMP_NUM_QSPI_BUS_CS 2
|
||||
#define XLNX_ZYNQMP_NUM_QSPI_FLASH 4
|
||||
|
||||
#define XLNX_ZYNQMP_NUM_OCM_BANKS 4
|
||||
#define XLNX_ZYNQMP_OCM_RAM_0_ADDRESS 0xFFFC0000
|
||||
#define XLNX_ZYNQMP_OCM_RAM_SIZE 0x10000
|
||||
@ -83,6 +87,7 @@ typedef struct XlnxZynqMPState {
|
||||
SysbusAHCIState sata;
|
||||
SDHCIState sdhci[XLNX_ZYNQMP_NUM_SDHCI];
|
||||
XilinxSPIPS spi[XLNX_ZYNQMP_NUM_SPIS];
|
||||
XlnxZynqMPQSPIPS qspi;
|
||||
XlnxDPState dp;
|
||||
XlnxDPDMAState dpdma;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user