|
[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 |