From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julien Grall Subject: Re: [PATCH v5 20/22] xen/arm: ITS: Map ITS translation space Date: Mon, 17 Aug 2015 12:20:46 -0700 Message-ID: <55D2340E.3000303@citrix.com> References: <1437995524-19772-1-git-send-email-vijay.kilari@gmail.com> <1437995524-19772-21-git-send-email-vijay.kilari@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii"; Format="flowed" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1437995524-19772-21-git-send-email-vijay.kilari@gmail.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: vijay.kilari@gmail.com, Ian.Campbell@citrix.com, stefano.stabellini@eu.citrix.com, stefano.stabellini@citrix.com, tim@xen.org, xen-devel@lists.xen.org Cc: Prasun.Kapoor@caviumnetworks.com, manish.jaggi@caviumnetworks.com, Vijaya Kumar K List-Id: xen-devel@lists.xenproject.org Hi Vijay, On 27/07/2015 04:12, vijay.kilari@gmail.com wrote: > From: Vijaya Kumar K > > 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 for all physical > ITS available,so that device can access GITS_TRANSLATOR > register using SMMU. > > Signed-off-by: Vijaya Kumar K > Acked-by: Ian Campbell > --- > xen/arch/arm/vgic-v3-its.c | 38 +++++++++++++++++++++++++++++++++++++- > 1 file changed, 37 insertions(+), 1 deletion(-) > > diff --git a/xen/arch/arm/vgic-v3-its.c b/xen/arch/arm/vgic-v3-its.c > index e182cee..27523f4 100644 > --- a/xen/arch/arm/vgic-v3-its.c > +++ b/xen/arch/arm/vgic-v3-its.c > @@ -1060,6 +1060,42 @@ static const struct mmio_handler_ops vgic_gits_mmio_handler = { > .write_handler = vgic_v3_gits_mmio_write, > }; > > +/* > + * Map the 64K ITS translation space in guest. > + * This is required purely for device smmu writes. > +*/ > + > +static int vits_map_translation_space(struct domain *d) > +{ > + uint64_t addr, size; > + int ret; > + > + if ( !is_hardware_domain(d) ) Well this code is surely wrong. If you happen to have a guest domain, you won't map anything and say you've done it. Given that vits_domain_init is only called for DOM0, you should drop this check. > + return 0; > + > + ASSERT(is_domain_direct_mapped(d)); > + > + addr = d->arch.vgic.vits->gits_base + SZ_64K; > + size = SZ_64K; > + > + /* Using 1:1 mapping to map translation space */ > + /* TODO: Handle DomU mapping */ > + 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 ) > + { > + dprintk(XENLOG_G_ERR, "vITS: Unable to map to dom%d access to" > + " 0x%"PRIx64" - 0x%"PRIx64"\n", "Unable to map 0x...-0x... to dom%d" > + d->domain_id, > + addr & PAGE_MASK, PAGE_ALIGN(addr + size) - 1); > + } > + > + return ret; > +} > + > int vits_domain_init(struct domain *d) > { > struct vgic_its *vits; > @@ -1120,7 +1156,7 @@ int vits_domain_init(struct domain *d) > > register_mmio_handler(d, &vgic_gits_mmio_handler, vits->gits_base, SZ_64K); > > - return 0; > + return vits_map_translation_space(d); > } > > void vits_domain_free(struct domain *d) > Regards, -- Julien Grall