From mboxrd@z Thu Jan 1 00:00:00 1970 From: vijay.kilari@gmail.com Subject: [PATCH v4 15/17] xen/arm: ITS: Map ITS translation space Date: Fri, 10 Jul 2015 13:12:50 +0530 Message-ID: <1436514172-3263-16-git-send-email-vijay.kilari@gmail.com> References: <1436514172-3263-1-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: <1436514172-3263-1-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: Ian.Campbell@citrix.com, julien.grall@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 K , manish.jaggi@caviumnetworks.com, vijay.kilari@gmail.com List-Id: xen-devel@lists.xenproject.org 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 --- xen/arch/arm/vgic-v3-its.c | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/xen/arch/arm/vgic-v3-its.c b/xen/arch/arm/vgic-v3-its.c index 74e6ee7..301f065 100644 --- a/xen/arch/arm/vgic-v3-its.c +++ b/xen/arch/arm/vgic-v3-its.c @@ -1082,6 +1082,35 @@ 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; + + addr = d->arch.vits->gits_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 ) + { + dprintk(XENLOG_G_ERR, "vITS: 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 vits_domain_init(struct domain *d) { int i; @@ -1112,7 +1141,7 @@ int vits_domain_init(struct domain *d) d->arch.vits->gits_base, SZ_64K); - return 0; + return vits_map_translation_space(d); } void vgic_its_init(void) -- 1.7.9.5