mirror of https://github.com/xemu-project/xemu.git
hw/arm/xlnx-zynqmp: Connect ZynqMP's USB controllers
Connect ZynqMP's USB controllers. Signed-off-by: Francisco Iglesias <francisco.iglesias@amd.com> Acked-by: Alistair Francis <alistair.francis@wdc.com> Message-id: 20220920081517.25401-1-frasse.iglesias@gmail.com Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
042e85d14c
commit
acc0b8b05a
|
@ -143,6 +143,14 @@ static const int adma_ch_intr[XLNX_ZYNQMP_NUM_ADMA_CH] = {
|
||||||
77, 78, 79, 80, 81, 82, 83, 84
|
77, 78, 79, 80, 81, 82, 83, 84
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const uint64_t usb_addr[XLNX_ZYNQMP_NUM_USB] = {
|
||||||
|
0xFE200000, 0xFE300000
|
||||||
|
};
|
||||||
|
|
||||||
|
static const int usb_intr[XLNX_ZYNQMP_NUM_USB] = {
|
||||||
|
65, 70
|
||||||
|
};
|
||||||
|
|
||||||
typedef struct XlnxZynqMPGICRegion {
|
typedef struct XlnxZynqMPGICRegion {
|
||||||
int region_index;
|
int region_index;
|
||||||
uint32_t address;
|
uint32_t address;
|
||||||
|
@ -428,6 +436,10 @@ static void xlnx_zynqmp_init(Object *obj)
|
||||||
object_initialize_child(obj, "qspi-dma", &s->qspi_dma, TYPE_XLNX_CSU_DMA);
|
object_initialize_child(obj, "qspi-dma", &s->qspi_dma, TYPE_XLNX_CSU_DMA);
|
||||||
object_initialize_child(obj, "qspi-irq-orgate",
|
object_initialize_child(obj, "qspi-irq-orgate",
|
||||||
&s->qspi_irq_orgate, TYPE_OR_IRQ);
|
&s->qspi_irq_orgate, TYPE_OR_IRQ);
|
||||||
|
|
||||||
|
for (i = 0; i < XLNX_ZYNQMP_NUM_USB; i++) {
|
||||||
|
object_initialize_child(obj, "usb[*]", &s->usb[i], TYPE_USB_DWC3);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void xlnx_zynqmp_realize(DeviceState *dev, Error **errp)
|
static void xlnx_zynqmp_realize(DeviceState *dev, Error **errp)
|
||||||
|
@ -814,6 +826,30 @@ static void xlnx_zynqmp_realize(DeviceState *dev, Error **errp)
|
||||||
object_property_add_alias(OBJECT(s), bus_name,
|
object_property_add_alias(OBJECT(s), bus_name,
|
||||||
OBJECT(&s->qspi), target_bus);
|
OBJECT(&s->qspi), target_bus);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < XLNX_ZYNQMP_NUM_USB; i++) {
|
||||||
|
if (!object_property_set_link(OBJECT(&s->usb[i].sysbus_xhci), "dma",
|
||||||
|
OBJECT(system_memory), errp)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
qdev_prop_set_uint32(DEVICE(&s->usb[i].sysbus_xhci), "intrs", 4);
|
||||||
|
qdev_prop_set_uint32(DEVICE(&s->usb[i].sysbus_xhci), "slots", 2);
|
||||||
|
|
||||||
|
if (!sysbus_realize(SYS_BUS_DEVICE(&s->usb[i]), errp)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
sysbus_mmio_map(SYS_BUS_DEVICE(&s->usb[i]), 0, usb_addr[i]);
|
||||||
|
sysbus_connect_irq(SYS_BUS_DEVICE(&s->usb[i].sysbus_xhci), 0,
|
||||||
|
gic_spi[usb_intr[i]]);
|
||||||
|
sysbus_connect_irq(SYS_BUS_DEVICE(&s->usb[i].sysbus_xhci), 1,
|
||||||
|
gic_spi[usb_intr[i] + 1]);
|
||||||
|
sysbus_connect_irq(SYS_BUS_DEVICE(&s->usb[i].sysbus_xhci), 2,
|
||||||
|
gic_spi[usb_intr[i] + 2]);
|
||||||
|
sysbus_connect_irq(SYS_BUS_DEVICE(&s->usb[i].sysbus_xhci), 3,
|
||||||
|
gic_spi[usb_intr[i] + 3]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static Property xlnx_zynqmp_props[] = {
|
static Property xlnx_zynqmp_props[] = {
|
||||||
|
|
|
@ -42,6 +42,7 @@
|
||||||
#include "hw/misc/xlnx-zynqmp-apu-ctrl.h"
|
#include "hw/misc/xlnx-zynqmp-apu-ctrl.h"
|
||||||
#include "hw/misc/xlnx-zynqmp-crf.h"
|
#include "hw/misc/xlnx-zynqmp-crf.h"
|
||||||
#include "hw/timer/cadence_ttc.h"
|
#include "hw/timer/cadence_ttc.h"
|
||||||
|
#include "hw/usb/hcd-dwc3.h"
|
||||||
|
|
||||||
#define TYPE_XLNX_ZYNQMP "xlnx-zynqmp"
|
#define TYPE_XLNX_ZYNQMP "xlnx-zynqmp"
|
||||||
OBJECT_DECLARE_SIMPLE_TYPE(XlnxZynqMPState, XLNX_ZYNQMP)
|
OBJECT_DECLARE_SIMPLE_TYPE(XlnxZynqMPState, XLNX_ZYNQMP)
|
||||||
|
@ -56,6 +57,7 @@ OBJECT_DECLARE_SIMPLE_TYPE(XlnxZynqMPState, XLNX_ZYNQMP)
|
||||||
#define XLNX_ZYNQMP_NUM_SPIS 2
|
#define XLNX_ZYNQMP_NUM_SPIS 2
|
||||||
#define XLNX_ZYNQMP_NUM_GDMA_CH 8
|
#define XLNX_ZYNQMP_NUM_GDMA_CH 8
|
||||||
#define XLNX_ZYNQMP_NUM_ADMA_CH 8
|
#define XLNX_ZYNQMP_NUM_ADMA_CH 8
|
||||||
|
#define XLNX_ZYNQMP_NUM_USB 2
|
||||||
|
|
||||||
#define XLNX_ZYNQMP_NUM_QSPI_BUS 2
|
#define XLNX_ZYNQMP_NUM_QSPI_BUS 2
|
||||||
#define XLNX_ZYNQMP_NUM_QSPI_BUS_CS 2
|
#define XLNX_ZYNQMP_NUM_QSPI_BUS_CS 2
|
||||||
|
@ -132,6 +134,7 @@ struct XlnxZynqMPState {
|
||||||
XlnxZynqMPAPUCtrl apu_ctrl;
|
XlnxZynqMPAPUCtrl apu_ctrl;
|
||||||
XlnxZynqMPCRF crf;
|
XlnxZynqMPCRF crf;
|
||||||
CadenceTTCState ttc[XLNX_ZYNQMP_NUM_TTC];
|
CadenceTTCState ttc[XLNX_ZYNQMP_NUM_TTC];
|
||||||
|
USBDWC3 usb[XLNX_ZYNQMP_NUM_USB];
|
||||||
|
|
||||||
char *boot_cpu;
|
char *boot_cpu;
|
||||||
ARMCPU *boot_cpu_ptr;
|
ARMCPU *boot_cpu_ptr;
|
||||||
|
|
Loading…
Reference in New Issue