From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julien Grall Subject: Re: [RFC PATCH v2 17/22] xen/arm: its: Map ITS translation space Date: Fri, 27 Mar 2015 17:07:06 +0000 Message-ID: <55158E3A.8080809@linaro.org> References: <1426775889-29442-1-git-send-email-vijay.kilari@gmail.com> <1426775889-29442-18-git-send-email-vijay.kilari@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1426775889-29442-18-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, vijaya.kumar@caviumnetworks.com, manish.jaggi@caviumnetworks.com List-Id: xen-devel@lists.xenproject.org Hello Vijay, On 19/03/15 14:38, vijay.kilari@gmail.com wrote: > +/* > + * Map the 64K ITS translation space in guest. > + * This is required purely for device smmu writes. > +*/ Could this be avoid if the SMMU is not present? > + > +static int vgic_map_translation_space(uint32_t nr_its, struct domain *d) > +{ > + uint64_t addr, size; > + int ret; > + > + addr = d->arch.vits[nr_its].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)); The translation space may not be mapped 1:1 to the guest. > + > + 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; > +} > + > int vgic_its_domain_init(struct domain *d) > { > uint32_t num_its; > @@ -1420,6 +1448,8 @@ int vgic_its_domain_init(struct domain *d) > register_mmio_handler(d, &vgic_gits_mmio_handler, > d->arch.vits[i].phys_base, > SZ_64K); > + > + return vgic_map_translation_space(i, d); With this you can't support multiple ITS as the loop will return just after mapping the translation space. Regards, -- Julien Grall