|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 1/2] xen/arm: gic: Refactor the code for creating gic node
Since fdt_begin_node() is called by all gicXX_make_dt_node() to create
the interrupt-controller devicetree node, this patch refactors the call
and moves it inside make_gic_node(). This also matches the fdt_end_node()
call at the end of make_gic_node().
This patch also move the call to gic_make_node() wrapper to be after all
other generic properties are setup. This allows creating sub-node inside
gic_make_node() in order to support v2m sub-node.
Signed-off-by: Suravee Suthikulpanit <Suravee.Suthikulpanit@xxxxxxx>
---
xen/arch/arm/domain_build.c | 18 +++++++++++++++---
xen/arch/arm/gic-hip04.c | 4 ----
xen/arch/arm/gic-v2.c | 4 ----
xen/arch/arm/gic-v3.c | 4 ----
4 files changed, 15 insertions(+), 15 deletions(-)
diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c
index 987ee1e..a2cd471 100644
--- a/xen/arch/arm/domain_build.c
+++ b/xen/arch/arm/domain_build.c
@@ -808,8 +808,8 @@ static int make_gic_node(const struct domain *d, void *fdt,
{
const struct dt_device_node *gic = dt_interrupt_controller;
int res = 0;
- const void *addrcells;
- u32 addrcells_len;
+ const void *addrcells, *sizecells;
+ u32 addrcells_len, sizecells_len;
/*
* Xen currently supports only a single GIC. Discard any secondary
@@ -823,7 +823,7 @@ static int make_gic_node(const struct domain *d, void *fdt,
DPRINT("Create gic node\n");
- res = gic_make_node(d, node, fdt);
+ res = fdt_begin_node(fdt, "interrupt-controller");
if ( res )
return res;
@@ -847,6 +847,14 @@ static int make_gic_node(const struct domain *d, void *fdt,
return res;
}
+ sizecells = dt_get_property(gic, "#size-cells", &sizecells_len);
+ if ( sizecells )
+ {
+ res = fdt_property(fdt, "#size-cells", sizecells, sizecells_len);
+ if ( res )
+ return res;
+ }
+
res = fdt_property_cell(fdt, "#interrupt-cells", 3);
if ( res )
return res;
@@ -855,6 +863,10 @@ static int make_gic_node(const struct domain *d, void *fdt,
if ( res )
return res;
+ res = gic_make_node(d, node, fdt);
+ if ( res )
+ return res;
+
res = fdt_end_node(fdt);
return res;
diff --git a/xen/arch/arm/gic-hip04.c b/xen/arch/arm/gic-hip04.c
index 223c414..6d527f1 100644
--- a/xen/arch/arm/gic-hip04.c
+++ b/xen/arch/arm/gic-hip04.c
@@ -628,10 +628,6 @@ static int hip04gic_make_dt_node(const struct domain *d,
compatible = DT_COMPAT_GIC_CORTEX_A15;
len = strlen((char*) compatible) + 1;
- res = fdt_begin_node(fdt, "interrupt-controller");
- if ( res )
- return res;
-
res = fdt_property(fdt, "compatible", compatible, len);
if ( res )
return res;
diff --git a/xen/arch/arm/gic-v2.c b/xen/arch/arm/gic-v2.c
index 073fec2..80acc62 100644
--- a/xen/arch/arm/gic-v2.c
+++ b/xen/arch/arm/gic-v2.c
@@ -616,10 +616,6 @@ static int gicv2_make_dt_node(const struct domain *d,
return -FDT_ERR_XEN(ENOENT);
}
- res = fdt_begin_node(fdt, "interrupt-controller");
- if ( res )
- return res;
-
res = fdt_property(fdt, "compatible", compatible, len);
if ( res )
return res;
diff --git a/xen/arch/arm/gic-v3.c b/xen/arch/arm/gic-v3.c
index e9a8eda..db498ed 100644
--- a/xen/arch/arm/gic-v3.c
+++ b/xen/arch/arm/gic-v3.c
@@ -1098,10 +1098,6 @@ static int gicv3_make_dt_node(const struct domain *d,
return -FDT_ERR_XEN(ENOENT);
}
- res = fdt_begin_node(fdt, "interrupt-controller");
- if ( res )
- return res;
-
res = fdt_property(fdt, "compatible", compatible, len);
if ( res )
return res;
--
2.1.0
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |