[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [RFC PATCH 14/19] xen/arm: vits: Map ITS translation space
On Mon, 2 Mar 2015, vijay.kilari@xxxxxxxxx wrote: > From: Vijaya Kumar K <Vijaya.Kumar@xxxxxxxxxxxxxxxxxx> > > ITS translation space contains GITS_TRANSLATOR > register which is written by device to raise > LPI. This space needs to mapped to every domain > address space so that device can access GITS_TRANSLATOR > register using SMMU > > Signed-off-by: Vijaya Kumar K <Vijaya.Kumar@xxxxxxxxxxxxxxxxxx> > --- > xen/arch/arm/vgic-v3-its.c | 33 +++++++++++++++++++++++++++++++-- > 1 file changed, 31 insertions(+), 2 deletions(-) > > diff --git a/xen/arch/arm/vgic-v3-its.c b/xen/arch/arm/vgic-v3-its.c > index 48c880a..e7e587e 100644 > --- a/xen/arch/arm/vgic-v3-its.c > +++ b/xen/arch/arm/vgic-v3-its.c > @@ -1504,7 +1504,35 @@ static const struct mmio_handler_ops > vgic_gits_mmio_handler = { > .write_handler = vgic_v3_gits_mmio_write, > }; > > -int vgic_its_domain_init(struct domain *d) > +/* > + * Map the 64K ITS translation space in guest. > + * This is required purely for device smmu writes. > + */ > + > +static int vgic_map_translation_space(struct domain *d) > +{ > + u64 addr, size; > + int ret; > + addr = d->arch.vits->phys_base + SZ_64K; > + size = SZ_64K; > + > + ret = map_mmio_regions(d, > + paddr_to_pfn(addr & PAGE_MASK), > + DIV_ROUND_UP(size, PAGE_SIZE), > + paddr_to_pfn(addr & PAGE_MASK)); > + > + if ( ret ) > + { > + printk(XENLOG_ERR "Unable to map to dom%d access to" > + " 0x%"PRIx64" - 0x%"PRIx64"\n", > + d->domain_id, > + addr & PAGE_MASK, PAGE_ALIGN(addr + size) - 1); > + } > + > + return ret; > +} Although we might want to map it 1:1 anyway, I think that this function should be able to cope with a virtual GITS_TRANSLATOR address different from the physical translator address. > +int vgic_its_domain_init(struct domain *d) > { > d->arch.vits = xzalloc(struct vgic_its); > if ( d->arch.vits == NULL ) > @@ -1516,9 +1544,10 @@ int vgic_its_domain_init(struct domain *d) > register_mmio_handler(d, &vgic_gits_mmio_handler, > d->arch.vits->phys_base, > SZ_64K); > > - return 0; > + return vgic_map_translation_space(d); > } > > + > /* > * Local variables: > * mode: C > -- > 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 |