[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v2 04/15] xen: arm: add a quirk to handle platforms with unusual GIC layout



On Fri, 2013-11-22 at 16:46 +0000, Julien Grall wrote:
> 
> On 11/22/2013 04:24 PM, Ian Campbell wrote:
> > Use this quirk on the xgene platform.
> 
> With this quirk you only fix xen GIC. What about dom0/guest GIC ? I know 
> that Linux is not using the secondary page, but we expose 2 pages 
> contiguous page. With this quirk the first page is valid ... but the 
> second page could belong to another device.

Damn, good point.

> Can we remove the second page when the quirk is enabled?

I think what I will do is make gicv_setup map the two discontiguous 4K
regions contiguously into the guest space. This is consistent with the
DTB we expose to the guest.

The reason for the discontinuity at the h/w level is (AFAICT) to support
OSes using 64K pages and/or granules. I think we can live without these
for the time being.

Ian.

> 
> > This should ideally be fixed by an extension to the device tree bindings as
> > described in http://www.spinics.net/lists/devicetree/msg10473.html 
> > especially
> > http://www.spinics.net/lists/devicetree/msg10478.html. However for the time
> > being a platform specific quirk will do.
> > Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
> > ---
> > v2: This replaces "xen: arm: GICC_DIR register at offset 0x10000 instead of 
> > 0x1000"
> > ---
> >   xen/arch/arm/gic.c                   |    6 +++++-
> >   xen/arch/arm/platforms/xgene-storm.c |    2 +-
> >   xen/include/asm-arm/platform.h       |    5 +++++
> >   3 files changed, 11 insertions(+), 2 deletions(-)
> >
> > diff --git a/xen/arch/arm/gic.c b/xen/arch/arm/gic.c
> > index ab49106..9711f5d 100644
> > --- a/xen/arch/arm/gic.c
> > +++ b/xen/arch/arm/gic.c
> > @@ -30,6 +30,7 @@
> >   #include <xen/device_tree.h>
> >   #include <asm/p2m.h>
> >   #include <asm/domain.h>
> > +#include <asm/platform.h>
> >
> >   #include <asm/gic.h>
> >
> > @@ -444,7 +445,10 @@ void __init gic_init(void)
> >       BUILD_BUG_ON(FIXMAP_ADDR(FIXMAP_GICC1) !=
> >                    FIXMAP_ADDR(FIXMAP_GICC2)-PAGE_SIZE);
> >       set_fixmap(FIXMAP_GICC1, gic.cbase >> PAGE_SHIFT, DEV_SHARED);
> > -    set_fixmap(FIXMAP_GICC2, (gic.cbase >> PAGE_SHIFT) + 1, DEV_SHARED);
> > +    if ( platform_has_quirk(PLATFORM_QUIRK_GIC_64K_STRIDE) )
> > +        set_fixmap(FIXMAP_GICC2, (gic.cbase >> PAGE_SHIFT) + 0x10, 
> > DEV_SHARED);
> > +    else
> > +        set_fixmap(FIXMAP_GICC2, (gic.cbase >> PAGE_SHIFT) + 0x1, 
> > DEV_SHARED);
> >       set_fixmap(FIXMAP_GICH, gic.hbase >> PAGE_SHIFT, DEV_SHARED);
> >
> >       /* Global settings: interrupt distributor */
> > diff --git a/xen/arch/arm/platforms/xgene-storm.c 
> > b/xen/arch/arm/platforms/xgene-storm.c
> > index 727ac2b..d185a4a 100644
> > --- a/xen/arch/arm/platforms/xgene-storm.c
> > +++ b/xen/arch/arm/platforms/xgene-storm.c
> > @@ -27,7 +27,7 @@
> >
> >   static uint32_t xgene_storm_quirks(void)
> >   {
> > -    return PLATFORM_QUIRK_DOM0_MAPPING_11;
> > +    return PLATFORM_QUIRK_DOM0_MAPPING_11|PLATFORM_QUIRK_GIC_64K_STRIDE;
> >   }
> >
> >
> > diff --git a/xen/include/asm-arm/platform.h b/xen/include/asm-arm/platform.h
> > index c282b30..c9314e5 100644
> > --- a/xen/include/asm-arm/platform.h
> > +++ b/xen/include/asm-arm/platform.h
> > @@ -44,6 +44,11 @@ struct platform_desc {
> >    * Useful on platform where System MMU is not yet implemented
> >    */
> >   #define PLATFORM_QUIRK_DOM0_MAPPING_11 (1 << 0)
> > +/*
> > + * Quirk for platforms where the 4K GIC register ranges are placed at
> > + * 64K stride.
> > + */
> > +#define PLATFORM_QUIRK_GIC_64K_STRIDE (1 << 1)
> >
> >   void __init platform_init(void);
> >   int __init platform_init_time(void);
> >
> 



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.