From patchwork Wed Jul 6 07:52:20 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: AKASHI Takahiro X-Patchwork-Id: 71417 Delivered-To: patch@linaro.org Received: by 10.140.28.4 with SMTP id 4csp730871qgy; Wed, 6 Jul 2016 00:49:29 -0700 (PDT) X-Received: by 10.98.61.90 with SMTP id k87mr39556317pfa.86.1467791369422; Wed, 06 Jul 2016 00:49:29 -0700 (PDT) Return-Path: Received: from bombadil.infradead.org (bombadil.infradead.org. [2001:1868:205::9]) by mx.google.com with ESMTPS id q7si2915653pfb.208.2016.07.06.00.49.29 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 06 Jul 2016 00:49:29 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-arm-kernel-bounces+patch=linaro.org@lists.infradead.org designates 2001:1868:205::9 as permitted sender) client-ip=2001:1868:205::9; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org; spf=pass (google.com: best guess record for domain of linux-arm-kernel-bounces+patch=linaro.org@lists.infradead.org designates 2001:1868:205::9 as permitted sender) smtp.mailfrom=linux-arm-kernel-bounces+patch=linaro.org@lists.infradead.org; dmarc=fail (p=NONE dis=NONE) header.from=linaro.org Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.85_2 #1 (Red Hat Linux)) id 1bKhZP-00061I-0A; Wed, 06 Jul 2016 07:48:31 +0000 Received: from mail-pf0-x233.google.com ([2607:f8b0:400e:c00::233]) by bombadil.infradead.org with esmtps (Exim 4.85_2 #1 (Red Hat Linux)) id 1bKhZK-0005na-S4 for linux-arm-kernel@lists.infradead.org; Wed, 06 Jul 2016 07:48:27 +0000 Received: by mail-pf0-x233.google.com with SMTP id t190so77764249pfb.3 for ; Wed, 06 Jul 2016 00:48:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=tRWeFDFoedRmL5HcSJ7Cu0j19GWjiNNywSYSAVcpl70=; b=KjMzWvHmIC1PCe753jv7Kc73s5ExwF0klhjnYOQCHtOgJSuvo68xLiRT9EG0WPSa1+ JVuDw+OPr5AKdoaGtDm0NlKLRHP2Wefs300vmDdPJv6kkoyk9FIRegFRp6Em1ZGnCAPl IfVnk5kbluHysC0OUuxjP98OUJhIdDJBs9fiI= 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=tRWeFDFoedRmL5HcSJ7Cu0j19GWjiNNywSYSAVcpl70=; b=QN9maZvb0Jm9ITWYRx6WvBq9PZucCeXAVtb1ZObUMqle+hdOK09bJA7nLZRgCE3ikb B6CFRdp/l1SdVfQRGAOL9cSEcFZiMV7jr/Ib7ppxP0avUzDgFBrWqFRzI01Zd8lZb05m 9ECJgRKBpaPq40iNsYeD9ylRgtvjLr3BQV1h0Oeb47Xg1n5FkjV7vXv/B3kUJO0mlRmp bw8ibW94k9adNbRl8QwMcs6BNi8IUkasQvIHvIdx6lzAxJ27CqbVpyBchRzBu73ooEmP 8Glkf2y/frYmAaBswh6WVxUQJ1Sy6n7psYB8BEyiF2Hk3Ey1BKmFeayDAz4xUPyDiKcY 8lmQ== X-Gm-Message-State: ALyK8tKjRxn5xzfRbyEsHwqTf2bTPLupb8Md91p7xCfgcn4IMiij+IFVyToABwjKLF0xpZDy X-Received: by 10.98.206.77 with SMTP id y74mr39986292pfg.55.1467791286133; Wed, 06 Jul 2016 00:48:06 -0700 (PDT) Received: from linaro.org ([121.95.100.191]) by smtp.googlemail.com with ESMTPSA id bm8sm2460889pad.10.2016.07.06.00.48.04 (version=TLS1_2 cipher=AES128-SHA bits=128/128); Wed, 06 Jul 2016 00:48:04 -0700 (PDT) From: AKASHI Takahiro To: catalin.marinas@arm.com, will.deacon@arm.com Subject: [PATCH v21 2/8] arm64: limit memory regions based on DT property, usable-memory Date: Wed, 6 Jul 2016 16:52:20 +0900 Message-Id: <20160706075226.27609-3-takahiro.akashi@linaro.org> X-Mailer: git-send-email 2.9.0 In-Reply-To: <20160706075226.27609-1-takahiro.akashi@linaro.org> References: <20160706075226.27609-1-takahiro.akashi@linaro.org> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20160706_004827_036475_B690029A X-CRM114-Status: GOOD ( 12.71 ) X-Spam-Score: -2.7 (--) X-Spam-Report: SpamAssassin version 3.4.0 on bombadil.infradead.org summary: Content analysis details: (-2.7 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/, low trust [2607:f8b0:400e:c00:0:0:0:233 listed in] [list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: geoff@infradead.org, kexec@lists.infradead.org, james.morse@arm.com, linux-arm-kernel@lists.infradead.org, AKASHI Takahiro MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patch=linaro.org@lists.infradead.org Crash dump kernel will be run with a limited range of memory as System RAM. On arm64, we will use a device-tree property under /chosen, linux,usable-memory = in order for primary kernel either on uefi or non-uefi (device tree only) system to hand over the information about usable memory region to crash dump kernel. This property will supercede entries in uefi memory map table and "memory" nodes in a device tree. Signed-off-by: AKASHI Takahiro --- arch/arm64/mm/init.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) -- 2.9.0 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c index e1134fb..88fd99a 100644 --- a/arch/arm64/mm/init.c +++ b/arch/arm64/mm/init.c @@ -247,10 +247,48 @@ static int __init early_mem(char *p) } early_param("mem", early_mem); +static int __init early_init_dt_scan_usablemem(unsigned long node, + const char *uname, int depth, void *data) +{ + struct memblock_region *usablemem = (struct memblock_region *)data; + const __be32 *reg; + int len; + + usablemem->size = 0; + + if (depth != 1 || strcmp(uname, "chosen") != 0) + return 0; + + reg = of_get_flat_dt_prop(node, "linux,usable-memory", &len); + if (!reg || (len < (dt_root_addr_cells + dt_root_size_cells))) + return 1; + + usablemem->base = dt_mem_next_cell(dt_root_addr_cells, ®); + usablemem->size = dt_mem_next_cell(dt_root_size_cells, ®); + + return 1; +} + +static void __init fdt_enforce_memory_region(void) +{ + struct memblock_region reg; + + of_scan_flat_dt(early_init_dt_scan_usablemem, ®); + + if (reg.size) { + memblock_remove(0, PAGE_ALIGN(reg.base)); + memblock_remove(round_down(reg.base + reg.size, PAGE_SIZE), + ULLONG_MAX); + } +} + void __init arm64_memblock_init(void) { const s64 linear_region_size = -(s64)PAGE_OFFSET; + /* Handle linux,usable-memory property */ + fdt_enforce_memory_region(); + /* * Ensure that the linear region takes up exactly half of the kernel * virtual address space. This way, we can distinguish a linear address