From patchwork Fri May 20 15:51:27 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Edgar E. Iglesias" X-Patchwork-Id: 9129869 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 4808B6048B for ; Fri, 20 May 2016 15:54:04 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 37E1727BE4 for ; Fri, 20 May 2016 15:54:04 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 2B8D927CAF; Fri, 20 May 2016 15:54:04 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.1 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_MED, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id B339E27BE4 for ; Fri, 20 May 2016 15:54:03 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1b3mif-0007Py-WC; Fri, 20 May 2016 15:52:09 +0000 Received: from mail6.bemta6.messagelabs.com ([85.158.143.247]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1b3mif-0007Pa-51 for xen-devel@lists.xen.org; Fri, 20 May 2016 15:52:09 +0000 Received: from [85.158.143.35] by server-3.bemta-6.messagelabs.com id BE/81-07120-8A23F375; Fri, 20 May 2016 15:52:08 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprNIsWRWlGSWpSXmKPExsXiVRvkorvcyD7 cYP8fK4slHxezODB6HN39mymAMYo1My8pvyKBNePmz8qCs9IVu8/3sTYwNot3MXJyCAn0M0q8 v+wOYrMIvGSRWHo3oIuRi0NCoJ9VYv6PmewgCQmBGIml2y6wQdhVEle3LGGBaFaXOP1uBxtIg 5DADCaJ/deWs4Ik2ARMJPb+ecAEYosISEtc+3yZEcRmFvCVuLnzOFhcWMBaYvLF+ewQm1Ul+n /vAbI5OHgFPCSmTPEBMSUE5CQWXEgHqeAU8JRoX3GOEWKth0TLjoMsExgFFjAyrGJUL04tKks t0jXWSyrKTM8oyU3MzNE1NDDTy00tLk5MT81JTCrWS87P3cQIDCgGINjB2PHP6RCjJAeTkiiv mrh9uBBfUn5KZUZicUZ8UWlOavEhRhkODiUJ3pWGQDnBotT01Iq0zBxgaMOkJTh4lER4L4Gke YsLEnOLM9MhUqcYdTm2TL23lkmIJS8/L1VKnPcqSJEASFFGaR7cCFicXWKUlRLmZQQ6SoinIL UoN7MEVf4VozgHo5IwbzHIFJ7MvBK4Ta+AjmACOuKWmA3IESWJCCmpBsZp/E9+5yvrsmVsTfH gmy3yeBfr94e1z988DzxkOKWq9knS7Jms69ljd8WIHBBWO8Ft5rlAd4XckkfHPFaduG4+wdBb cuG3PYmz0j8vs66UTdx6zEmY43ZtS/rrY0/ufOqbX70s0dXItptzQU73R80DtlmJnvOX15TYz N/WLVnYuWWO+lYGlgIlluKMREMt5qLiRACD5MYargIAAA== X-Env-Sender: edgar.iglesias@gmail.com X-Msg-Ref: server-8.tower-21.messagelabs.com!1463759527!15116719!1 X-Originating-IP: [74.125.82.68] X-SpamReason: No, hits=0.0 required=7.0 tests= X-StarScan-Received: X-StarScan-Version: 8.34; banners=-,-,- X-VirusChecked: Checked Received: (qmail 15630 invoked from network); 20 May 2016 15:52:07 -0000 Received: from mail-wm0-f68.google.com (HELO mail-wm0-f68.google.com) (74.125.82.68) by server-8.tower-21.messagelabs.com with AES128-GCM-SHA256 encrypted SMTP; 20 May 2016 15:52:07 -0000 Received: by mail-wm0-f68.google.com with SMTP id 67so7124408wmg.0 for ; Fri, 20 May 2016 08:52:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=hXlHJ1KN6EwTr9Bbk6l/RBMiiBbQuc+DuUt3kyvoeao=; b=PasjwIPKjBtEWAuVGrMKcrzglSXaJYp6pxlhBN7YMbfDksYLpbfopB2X9BLAv1c2kY Bgd1pzWDJdoLlfBSi4hUUBLvRVonlxVKigQnYK0u6FjhgLRJpvRYQbPqMFawi4xV2bfv bJRROVwXfTKJ+P3Qqi0I5WH3ZOzX9FLzv2yEdxWTAuCo9q1ojxBxhmsQrSXD1Pz0SeQI 0EXkVZ2ABKc26Qh8ItVuEV2b0pgLLmJqEonuHRWeBS+yzY873EiyyTgOafOb5EUn0e04 ZNvEpr/LXOrAl6VNQEXEW73ohU/ZwXbm4wiTO1Pzm+FnoCfM9vUioMwHscFmxyvSEmYt pJ5A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=hXlHJ1KN6EwTr9Bbk6l/RBMiiBbQuc+DuUt3kyvoeao=; b=We0B+G8DSqXyAol0jual5S8VSux4pkYdGQGRHZ3p+yApvGVPmOifhrfhPw6WKxXn6z Q4fpJMu+rqEdfEBH8uhLIDoRSDzRFoYo730/KKonOX4s2vgc4tLxAxF2FiZqAzzdIdUc bNJWqGc1/r64n+HnSzRqF11adPqi4kzGxj9MJCyd0u1rtV8/RxaDota0mX8VkERyMUH/ 1BahT70vD1IQhO/fb5rnAmdaA4RbNt/R7u9jw6vRE8AAnip8zu0IpkvMs6xha3j0vJPp e49j5yTJI7tAWqpfcKdlAPKyT11/fdAuJ2rpCKvBegsns+1AoF4iYB6sEt1FX/yWqd2t 2WZA== X-Gm-Message-State: AOPr4FW7d2+kne3lT6aTOLnaalvfUJ9Cw9jrdPFJ8XgHJegW0j0XPcHIflVA809R4OHWYA== X-Received: by 10.194.153.65 with SMTP id ve1mr4100659wjb.106.1463759496584; Fri, 20 May 2016 08:51:36 -0700 (PDT) Received: from localhost (81-231-233-234-no56.tbcn.telia.com. [81.231.233.234]) by smtp.gmail.com with ESMTPSA id d20sm5193516wmd.12.2016.05.20.08.51.35 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 20 May 2016 08:51:36 -0700 (PDT) From: "Edgar E. Iglesias" To: xen-devel@lists.xen.org Date: Fri, 20 May 2016 17:51:27 +0200 Message-Id: <1463759488-11900-6-git-send-email-edgar.iglesias@gmail.com> X-Mailer: git-send-email 2.5.0 In-Reply-To: <1463759488-11900-1-git-send-email-edgar.iglesias@gmail.com> References: <1463759488-11900-1-git-send-email-edgar.iglesias@gmail.com> Cc: edgar.iglesias@xilinx.com, julien.grall@arm.com, sstabellini@kernel.org Subject: [Xen-devel] [RFC for-4.8 5/6] xen/arm: Add an mmio-sram device X-BeenThere: xen-devel@lists.xen.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" X-Virus-Scanned: ClamAV using ClamSMTP From: "Edgar E. Iglesias" Add an mmio-sram device. This device takes care of mapping mmio-sram regions as MEMORY as opposed to the generic DT mappings as DEVICE. We only map the outer regions as children of mmio-sram nodes describe allocations within it that really only mean something to the guest. Signed-off-by: Edgar E. Iglesias --- xen/arch/arm/Makefile | 1 + xen/arch/arm/mmio-sram.c | 92 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+) create mode 100644 xen/arch/arm/mmio-sram.c diff --git a/xen/arch/arm/Makefile b/xen/arch/arm/Makefile index ead0cc0..224c9ae 100644 --- a/xen/arch/arm/Makefile +++ b/xen/arch/arm/Makefile @@ -18,6 +18,7 @@ obj-y += io.o obj-y += irq.o obj-y += kernel.o obj-y += mm.o +obj-y += mmio-sram.o obj-y += p2m.o obj-y += percpu.o obj-y += guestcopy.o diff --git a/xen/arch/arm/mmio-sram.c b/xen/arch/arm/mmio-sram.c new file mode 100644 index 0000000..e0dbf7c --- /dev/null +++ b/xen/arch/arm/mmio-sram.c @@ -0,0 +1,92 @@ +/* + * xen/arch/arm/mmio-sram.c + * + * MMIO-SRAM + * + * Edgar E. Iglesias + * Copyright (c) 2016 Xilinx Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// #define DEBUG_DT + +#ifdef DEBUG_DT +# define DPRINT(fmt, args...) printk(XENLOG_DEBUG fmt, ##args) +#else +# define DPRINT(fmt, args...) do {} while ( 0 ) +#endif + +static int sram_map(struct domain *d, struct dt_device_node *dev) +{ + unsigned int naddr; + u64 addr, size; + int res = 0; + int i; + + naddr = dt_number_of_address(dev); + + /* Give perms to access the region. */ + res = iomem_permit_access(d, paddr_to_pfn(addr), + paddr_to_pfn(PAGE_ALIGN(addr + size - 1))); + + /* + * Map the memory regions. + * + * We only map the outer regions. Child regions represent + * sub allocations that really are the guest's business. + */ + for (i = 0; i < naddr; i++) + { + res = dt_device_get_address(dev, i, &addr, &size); + if (res) { + printk(XENLOG_ERR + "Unable to retrieve address %u for %s\n", + i, dt_node_full_name(dev)); + return res; + } + + DPRINT(" - MEMORY: %s %010"PRIx64" - %010"PRIx64"\n", + dt_node_full_name(dev), addr, addr + size); + res = map_regions_rwx_cache(d, paddr_to_pfn(addr & PAGE_MASK), + DIV_ROUND_UP(size, PAGE_SIZE), + paddr_to_pfn(addr & PAGE_MASK)); + if (res) + return res; + } + return res; +} + +static const struct dt_device_match sram_dt_match[] __initconst = +{ + DT_MATCH_COMPATIBLE("mmio-sram"), + { /* sentinel */ }, +}; + +DT_DEVICE_START(sram, "MMIO-SRAM", DEVICE_MEMORY) + .dt_match = sram_dt_match, + .map = sram_map, +DT_DEVICE_END