|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [RFC PATCH v2 22/22] xen/arm: its: Generate ITS dt node for DomU
From: Vijaya Kumar K <Vijaya.Kumar@xxxxxxxxxxxxxxxxxx>
Generate ITS device tree node for DomU.
This patch generate ITS node outside the GICv3 node
for DomU.
Signed-off-by: Vijaya Kumar K <Vijaya.Kumar@xxxxxxxxxxxxxxxxxx>
---
tools/libxl/libxl_arm.c | 36 ++++++++++++++++++++++++++++++++++++
xen/arch/arm/gic-v3-its.c | 7 ++++++-
xen/include/public/arch-arm.h | 3 +++
3 files changed, 45 insertions(+), 1 deletion(-)
diff --git a/tools/libxl/libxl_arm.c b/tools/libxl/libxl_arm.c
index 65a762b..af6ab39 100644
--- a/tools/libxl/libxl_arm.c
+++ b/tools/libxl/libxl_arm.c
@@ -53,6 +53,7 @@ static struct arch_info {
enum {
PHANDLE_NONE = 0,
PHANDLE_GIC,
+ PHANDLE_ITS,
};
typedef uint32_t be32;
@@ -362,6 +363,36 @@ static int make_gicv2_node(libxl__gc *gc, void *fdt,
return 0;
}
+static int make_its_node(libxl__gc *gc, void *fdt,
+ uint64_t its_base, uint64_t its_size)
+{
+ int res;
+ const char *name = GCSPRINTF("gic-its@%"PRIx64, its_base);
+
+ res = fdt_begin_node(fdt, name);
+ if (res) return res;
+
+ res = fdt_property_compat(gc, fdt, 1,
+ "arm,gic-v3-its");
+ if (res) return res;
+
+ res = fdt_property(fdt, "msi-controller", NULL, 0);
+ if (res) return res;
+
+ res = fdt_property_regs(gc, fdt, ROOT_ADDRESS_CELLS, ROOT_SIZE_CELLS,
+ 1,
+ its_base, its_size);
+ if (res) return res;
+
+ res = fdt_property_cell(fdt, "phandle", PHANDLE_ITS);
+ if (res) return res;
+
+ res = fdt_end_node(fdt);
+ if (res) return res;
+
+ return 0;
+}
+
static int make_gicv3_node(libxl__gc *gc, void *fdt)
{
int res;
@@ -600,6 +631,11 @@ next_resize:
break;
case XEN_DOMCTL_CONFIG_GIC_V3:
FDT( make_gicv3_node(gc, fdt) );
+ /*
+ * TODO: Need to generate based on Config and its node should be
+ * generated inside gicv3 node
+ */
+ FDT( make_its_node(gc, fdt, GUEST_GICV3_ITS_BASE,
GUEST_GICV3_ITS_SIZE) );
break;
default:
LOG(ERROR, "Unknown GIC version %d", config.gic_version);
diff --git a/xen/arch/arm/gic-v3-its.c b/xen/arch/arm/gic-v3-its.c
index c2c59fa..dda4c20 100644
--- a/xen/arch/arm/gic-v3-its.c
+++ b/xen/arch/arm/gic-v3-its.c
@@ -1098,7 +1098,12 @@ void its_domain_init(uint32_t its_nr, struct domain *d)
d->arch.vits[its_nr].phys_size = its->phys_size;
d->arch.vits[its_nr].its = its;
}
- /* TODO: Update for DomU */
+ else
+ {
+ /* Only one vITS is supported for DomU */
+ d->arch.vits[0].phys_base = GUEST_GICV3_ITS_BASE ;
+ d->arch.vits[0].phys_size = GUEST_GICV3_ITS_SIZE;
+ }
}
static int its_probe(struct dt_device_node *node)
diff --git a/xen/include/public/arch-arm.h b/xen/include/public/arch-arm.h
index c2dcb66..0f129a2 100644
--- a/xen/include/public/arch-arm.h
+++ b/xen/include/public/arch-arm.h
@@ -381,6 +381,9 @@ typedef uint64_t xen_callback_t;
#define GUEST_GICV3_GICR0_BASE 0x03020000ULL /* vCPU0 - vCPU7 */
#define GUEST_GICV3_GICR0_SIZE 0x00100000ULL
+#define GUEST_GICV3_ITS_BASE 0x03200000ULL
+#define GUEST_GICV3_ITS_SIZE 0x00200000ULL
+
/*
* 16MB == 4096 pages reserved for guest to use as a region to map its
* grant table in.
--
1.7.9.5
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |