|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] xen/arm: vgic-v3: Use a struct to describe contiguous rdist regions
commit 196f4ef4e9972a8847598c5317db731598315ddc
Author: Julien Grall <julien.grall@xxxxxxxxxx>
AuthorDate: Mon Feb 16 14:50:47 2015 +0000
Commit: Ian Campbell <ian.campbell@xxxxxxxxxx>
CommitDate: Thu Feb 19 16:55:39 2015 +0000
xen/arm: vgic-v3: Use a struct to describe contiguous rdist regions
Also update the different comment to make clear that we register one MMIO
region per contiguous regions and not per re-distributor.
Signed-off-by: Julien Grall <julien.grall@xxxxxxxxxx>
Acked-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
---
xen/arch/arm/gic-v3.c | 20 ++++++++++----------
xen/arch/arm/vgic-v3.c | 11 ++++++-----
xen/include/asm-arm/domain.h | 11 +++++++----
3 files changed, 23 insertions(+), 19 deletions(-)
diff --git a/xen/arch/arm/gic-v3.c b/xen/arch/arm/gic-v3.c
index 7b33ff7..fdfda0b 100644
--- a/xen/arch/arm/gic-v3.c
+++ b/xen/arch/arm/gic-v3.c
@@ -909,10 +909,10 @@ static int gicv_v3_init(struct domain *d)
for ( i = 0; i < gicv3.rdist_count; i++ )
{
- d->arch.vgic.rbase[i] = gicv3.rdist_regions[i].base;
- d->arch.vgic.rbase_size[i] = gicv3.rdist_regions[i].size;
+ d->arch.vgic.rdist_regions[i].base = gicv3.rdist_regions[i].base;
+ d->arch.vgic.rdist_regions[i].size = gicv3.rdist_regions[i].size;
}
- d->arch.vgic.rdist_count = gicv3.rdist_count;
+ d->arch.vgic.nr_regions = gicv3.rdist_count;
}
else
{
@@ -922,13 +922,13 @@ static int gicv_v3_init(struct domain *d)
/* XXX: Only one Re-distributor region mapped for the guest */
BUILD_BUG_ON(GUEST_GICV3_RDIST_REGIONS != 1);
- d->arch.vgic.rdist_count = GUEST_GICV3_RDIST_REGIONS;
+ d->arch.vgic.nr_regions = GUEST_GICV3_RDIST_REGIONS;
d->arch.vgic.rdist_stride = GUEST_GICV3_RDIST_STRIDE;
/* The first redistributor should contain enough space for all CPUs */
BUILD_BUG_ON((GUEST_GICV3_GICR0_SIZE / GUEST_GICV3_RDIST_STRIDE) <
MAX_VIRT_CPUS);
- d->arch.vgic.rbase[0] = GUEST_GICV3_GICR0_BASE;
- d->arch.vgic.rbase_size[0] = GUEST_GICV3_GICR0_SIZE;
+ d->arch.vgic.rdist_regions[0].base = GUEST_GICV3_GICR0_BASE;
+ d->arch.vgic.rdist_regions[0].size = GUEST_GICV3_GICR0_SIZE;
}
return 0;
@@ -1107,7 +1107,7 @@ static int gicv3_make_dt_node(const struct domain *d,
* CPU interface and virtual cpu interfaces accessesed as System registers
* So cells are created only for Distributor and rdist regions
*/
- len = len * (d->arch.vgic.rdist_count + 1);
+ len = len * (d->arch.vgic.nr_regions + 1);
new_cells = xzalloc_bytes(len);
if ( new_cells == NULL )
return -FDT_ERR_XEN(ENOMEM);
@@ -1116,9 +1116,9 @@ static int gicv3_make_dt_node(const struct domain *d,
dt_set_range(&tmp, node, d->arch.vgic.dbase, d->arch.vgic.dbase_size);
- for ( i = 0; i < d->arch.vgic.rdist_count; i++ )
- dt_set_range(&tmp, node, d->arch.vgic.rbase[i],
- d->arch.vgic.rbase_size[i]);
+ for ( i = 0; i < d->arch.vgic.nr_regions; i++ )
+ dt_set_range(&tmp, node, d->arch.vgic.rdist_regions[i].base,
+ d->arch.vgic.rdist_regions[i].size);
res = fdt_property(fdt, "reg", new_cells, len);
xfree(new_cells);
diff --git a/xen/arch/arm/vgic-v3.c b/xen/arch/arm/vgic-v3.c
index c5a743a..1d0e52d 100644
--- a/xen/arch/arm/vgic-v3.c
+++ b/xen/arch/arm/vgic-v3.c
@@ -1108,13 +1108,14 @@ static int vgic_v3_domain_init(struct domain *d)
d->arch.vgic.dbase_size);
/*
- * Register mmio handler per redistributor region but not for
- * every sgi rdist region which is per core.
- * The redistributor region encompasses per core sgi region.
+ * Register mmio handler per contiguous region occupied by the
+ * redistributors. The handler will take care to choose which
+ * redistributor is targeted.
*/
- for ( i = 0; i < d->arch.vgic.rdist_count; i++ )
+ for ( i = 0; i < d->arch.vgic.nr_regions; i++ )
register_mmio_handler(d, &vgic_rdistr_mmio_handler,
- d->arch.vgic.rbase[i], d->arch.vgic.rbase_size[i]);
+ d->arch.vgic.rdist_regions[i].base,
+ d->arch.vgic.rdist_regions[i].size);
d->arch.vgic.ctlr = VGICD_CTLR_DEFAULT;
diff --git a/xen/include/asm-arm/domain.h b/xen/include/asm-arm/domain.h
index 9018c6a..3eaa7f0 100644
--- a/xen/include/asm-arm/domain.h
+++ b/xen/include/asm-arm/domain.h
@@ -102,10 +102,13 @@ struct arch_domain
#ifdef CONFIG_ARM_64
/* GIC V3 addressing */
paddr_t dbase_size; /* Distributor base size */
- paddr_t rbase[MAX_RDIST_COUNT]; /* Re-Distributor base address */
- paddr_t rbase_size[MAX_RDIST_COUNT]; /* Re-Distributor size */
- uint32_t rdist_stride; /* Re-Distributor stride */
- int rdist_count; /* No. of Re-Distributors */
+ /* List of contiguous occupied by the redistributors */
+ struct vgic_rdist_region {
+ paddr_t base; /* Base address */
+ paddr_t size; /* Size */
+ } rdist_regions[MAX_RDIST_COUNT];
+ int nr_regions; /* Number of rdist regions */
+ uint32_t rdist_stride; /* Re-Distributor stride */
#endif
} vgic;
--
generated by git-patchbot for /home/xen/git/xen.git#master
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |