From mboxrd@z Thu Jan 1 00:00:00 1970 From: vijay.kilari@gmail.com Subject: [PATCH v6 29/31] xen/arm: ITS: Map ITS translation space Date: Mon, 31 Aug 2015 16:36:46 +0530 Message-ID: <1441019208-2764-30-git-send-email-vijay.kilari@gmail.com> References: <1441019208-2764-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: <1441019208-2764-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_TRANSLATER 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_TRANSLATER register using SMMU. Signed-off-by: Vijaya Kumar K Acked-by: Ian Campbell --- v6: - corrected typo in commit message - Removed check for dom0 --- xen/arch/arm/vgic-v3-its.c | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/xen/arch/arm/vgic-v3-its.c b/xen/arch/arm/vgic-v3-its.c index 6334ca3..328c4db 100644 --- a/xen/arch/arm/vgic-v3-its.c +++ b/xen/arch/arm/vgic-v3-its.c @@ -885,6 +885,39 @@ 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; + + 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" + " 0x%"PRIx64" - 0x%"PRIx64" to dom%d\n", + addr & PAGE_MASK, PAGE_ALIGN(addr + size) - 1, + d->domain_id); + } + + return ret; +} + int vits_domain_init(struct domain *d) { struct vgic_its *vits; @@ -938,7 +971,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) -- 1.7.9.5