[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] xen/arm: Handle translated addresses for hardware domains in GICv2
Translated address (in d->arch.vgic.{c,d}base) are now bus addresses which could not always be applied to the DT. Copy the original address from DT directly to get the original untraslated reg property which will give same d->arch.vgic.{c,d}base values once translated again. Signed-off-by: Frediano Ziglio <frediano.ziglio@xxxxxxxxxx> --- xen/arch/arm/gic-v2.c | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) Updated comment and commit message as requested. diff --git a/xen/arch/arm/gic-v2.c b/xen/arch/arm/gic-v2.c index 31fb81a..6899ab1 100644 --- a/xen/arch/arm/gic-v2.c +++ b/xen/arch/arm/gic-v2.c @@ -590,7 +590,7 @@ static int gicv2_make_dt_node(const struct domain *d, const struct dt_device_node *gic = dt_interrupt_controller; const void *compatible = NULL; u32 len; - __be32 *new_cells, *tmp; + const __be32 *regs; int res = 0; compatible = dt_get_property(gic, "compatible", &len); @@ -617,18 +617,22 @@ static int gicv2_make_dt_node(const struct domain *d, if ( res ) return res; - len = dt_cells_to_size(dt_n_addr_cells(node) + dt_n_size_cells(node)); - len *= 2; /* GIC has two memory regions: Distributor + CPU interface */ - new_cells = xzalloc_bytes(len); - if ( new_cells == NULL ) - return -FDT_ERR_XEN(ENOMEM); + /* + * Copy only GICC and GICD regions, not entire regions. + * DTB provides up to 4 regions to handle virtualization + * however dom0 just needs GICC and GICD provided by Xen. + */ + regs = dt_get_property(gic, "reg", &len); + if ( !regs ) + { + dprintk(XENLOG_ERR, "Can't find reg property for the gic node\n"); + return -FDT_ERR_XEN(ENOENT); + } - tmp = new_cells; - dt_set_range(&tmp, node, d->arch.vgic.dbase, PAGE_SIZE); - dt_set_range(&tmp, node, d->arch.vgic.cbase, PAGE_SIZE * 2); + len = dt_cells_to_size(dt_n_addr_cells(node) + dt_n_size_cells(node)); + len *= 2; - res = fdt_property(fdt, "reg", new_cells, len); - xfree(new_cells); + res = fdt_property(fdt, "reg", regs, len); return res; } -- 1.9.1 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |