|
[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 |