[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
On 25/02/15 11:14, Frediano Ziglio wrote: > Translated address (in d->arch.vgic.{c,d}base) are now bus addresses addresses > which could not always be applied to the DT. > Copy the original address from DT directly to get the original addresses > untraslated reg property which will give same d->arch.vgic.{c,d}base untranslated > 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. The 2 sentences say pretty much the same things. Although, the second one is more complete. I would only keep the second one. > + */ > + 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; > } > Regards, -- Julien Grall _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |