|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 7/7] xen/arm: Move vGIC registers on Hip04 platform
> On Tue, 2014-11-04 at 14:42 +0000, Frediano Ziglio wrote:
> > >
> > > Hi Frediano,
> > >
> > > On 11/03/2014 04:46 PM, Frediano Ziglio wrote:
> > > > Signed-off-by: Frediano Ziglio <frediano.ziglio@xxxxxxxxxx>
> > > > Signed-off-by: Zoltan Kiss <zoltan.kiss@xxxxxxxxxx>
> > > > ---
> > > > xen/arch/arm/gic-v2.c | 15 +++++++++++++--
> > > > xen/include/asm-arm/gic.h | 2 ++
> > > > 2 files changed, 15 insertions(+), 2 deletions(-)
> > > >
> > > > diff --git a/xen/arch/arm/gic-v2.c b/xen/arch/arm/gic-v2.c index
> > > > cea9edc..eb8cc19 100644
> > > > --- a/xen/arch/arm/gic-v2.c
> > > > +++ b/xen/arch/arm/gic-v2.c
> > > > @@ -669,8 +669,19 @@ static int gicv2_make_dt_node(const struct
> > > domain *d,
> > > > return -FDT_ERR_XEN(ENOMEM);
> > > >
> > > > 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);
> > > > +
> > > > + if ( nr_gic_cpu_if == 16 )
> > > > + {
> > > > + dt_set_range(&tmp, node, d->arch.vgic.dbase -
> > > HIP04_VGIC_REG_OFFSET,
> > > > + PAGE_SIZE);
> > > > + dt_set_range(&tmp, node, d->arch.vgic.cbase -
> > > HIP04_VGIC_REG_OFFSET,
> > > > + PAGE_SIZE * 2);
> > > > + }
> > > > + else
> > > > + {
> > > > + dt_set_range(&tmp, node, d->arch.vgic.dbase, PAGE_SIZE);
> > > > + dt_set_range(&tmp, node, d->arch.vgic.cbase, PAGE_SIZE *
> 2);
> > > > + }
> > > >
> > > > res = fdt_property(fdt, "reg", new_cells, len);
> > > > xfree(new_cells);
> > > > diff --git a/xen/include/asm-arm/gic.h b/xen/include/asm-
> arm/gic.h
> > > > index 3d2b3db..5af8201 100644
> > > > --- a/xen/include/asm-arm/gic.h
> > > > +++ b/xen/include/asm-arm/gic.h
> > > > @@ -147,6 +147,8 @@
> > > > #define GICH_LR_PENDING 1
> > > > #define GICH_LR_ACTIVE 2
> > > >
> > > > +#define HIP04_VGIC_REG_OFFSET 0xe0000000
> > > > +
> > >
> > > Please move this define in gic-v2.c. The header gic.h should only
> > > contains value that needs to be shared with the vgic and/or the
> > > other GIC drivers.
> > >
> > > Also, where does come from the offset? Any pointer to the
> documentation?
> > >
> >
> > Well,
> > I think I already sent a mail for this problem but got no reply (or
> I missed it).
> >
> > The problem came from how the DTB is in Linux and how Xen override
> devices in the DTB.
> >
> > On Linux I have
> >
> > / {
> > ...
> > soc {
> > /* It's a 32-bit SoC. */
> > #address-cells = <1>;
> > #size-cells = <1>;
> > compatible = "simple-bus";
> > interrupt-parent = <&gic>;
> > ranges = <0 0 0xe0000000 0x10000000>;
> >
> > gic: interrupt-controller@c01000 {
> > compatible = "hisilicon,hip04-intc";
> > #interrupt-cells = <3>;
> > #address-cells = <0>;
> > interrupt-controller;
> > interrupts = <1 9 0xf04>;
> >
> > reg = <0xc01000 0x1000>, <0xc02000 0x1000>,
> > <0xc04000 0x2000>, <0xc06000 0x2000>;
> > };
> > ...
> >
> > So the address of controller is 0xec01000 (see ranges in /soc and reg
> in /soc/interrupt-controller@c01000).
> >
> > Now Xen compute address as 0xec01000 (which is fine) but then when it
> has to provide a virtual gic it just replace the gic entry with one
> with reg with 0xec01000 not taking into account the range is putting
> the reg into. This lead kernel to think the address is
> 0xe0000000+0xec01000 instead of 0xe00000000+0xc01000. Now... the DTB
> from Linux is perfectly legal but Xen does not handle it properly. I
> mostly consider this as a temporary workaround (I wrote a small comment
> on first version).
> >
> > About solution to this there are different options:
> > - put gic always in the root to to have full range without any offset;
> > - fix reg according to range. This however could lead to extend the
> > range;
> > - remove all ranges (and fix all devices' reg) to have always no
> offsets.
>
> - Propagate the host GICC register value literally over, having
> mapping the GICV there. i.e. don't translate the value which is
> written to the DT.
>
> None of the other options sound very good to me.
>
> Ian.
Yes,
You are right, KISS rule apply!
Implemented and working correctly.
Regards,
Frediano
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |