[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [RFC PATCH 15/19] xen/arm: gicv3: Refactor redistributor information
From: Vijaya Kumar K <Vijaya.Kumar@xxxxxxxxxxxxxxxxxx> Separate redistributor information into rdist and rdist_prop structures. The rdist_prop holds the redistributor common information and rdist holds the per cpu specific information. This percpu rdist defined as global and shared with ITS driver Signed-off-by: Vijaya Kumar K <Vijaya.Kumar@xxxxxxxxxxxxxxxxxx> --- xen/arch/arm/gic-v3.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/xen/arch/arm/gic-v3.c b/xen/arch/arm/gic-v3.c index 5c35ac5..02e71dd 100644 --- a/xen/arch/arm/gic-v3.c +++ b/xen/arch/arm/gic-v3.c @@ -39,6 +39,7 @@ #include <asm/device.h> #include <asm/gic.h> #include <asm/gic_v3_defs.h> +#include <asm/gic-its.h> #include <asm/cpufeature.h> struct rdist_region { @@ -52,6 +53,7 @@ static struct { paddr_t dbase; /* Address of distributor registers */ paddr_t dbase_size; void __iomem *map_dbase; /* Mapped address of distributor registers */ + struct rdist_prop rdist_data; struct rdist_region *rdist_regions; uint32_t rdist_stride; unsigned int rdist_count; /* Number of rdist regions count */ @@ -62,11 +64,10 @@ static struct { static struct gic_info gicv3_info; /* per-cpu re-distributor base */ -static DEFINE_PER_CPU(void __iomem*, rbase); DEFINE_PER_CPU(struct rdist, rdist); #define GICD (gicv3.map_dbase) -#define GICD_RDIST_BASE (this_cpu(rbase)) +#define GICD_RDIST_BASE (per_cpu(rdist,smp_processor_id()).rbase) #define GICD_RDIST_SGI_BASE (GICD_RDIST_BASE + SZ_64K) /* @@ -595,6 +596,7 @@ static int __init gicv3_populate_rdist(void) uint32_t aff; uint32_t reg; uint64_t typer; + uint64_t offset; uint64_t mpidr = cpu_logical_map(smp_processor_id()); /* @@ -630,9 +632,12 @@ static int __init gicv3_populate_rdist(void) if ( (typer >> 32) == aff ) { - this_cpu(rbase) = ptr; - printk("GICv3: CPU%d: Found redistributor in region %d @%p\n", - smp_processor_id(), i, ptr); + offset = ptr - gicv3.rdist_regions[i].map_base; + per_cpu(rdist, smp_processor_id()).rbase = ptr; + per_cpu(rdist, smp_processor_id()).phys_base = gicv3.rdist_regions[i].base + offset; + printk("GICv3: CPU%d: Found redistributor in region %d @%"PRIpaddr"\n", + smp_processor_id(), i, + per_cpu(rdist, smp_processor_id()).phys_base); return 0; } if ( gicv3.rdist_stride ) -- 1.7.9.5 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |