From patchwork Tue Aug 30 06:53:04 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: AKASHI Takahiro X-Patchwork-Id: 9304919 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 1FED8601C0 for ; Tue, 30 Aug 2016 06:48:42 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0E12C28A79 for ; Tue, 30 Aug 2016 06:48:42 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 02AC528AE7; Tue, 30 Aug 2016 06:48:42 +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_SIGNED, RCVD_IN_DNSWL_MED,T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.9]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id DD6A428A79 for ; Tue, 30 Aug 2016 06:48:40 +0000 (UTC) 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 1becpF-0007KS-Na; Tue, 30 Aug 2016 06:47:13 +0000 Received: from mail-pa0-x233.google.com ([2607:f8b0:400e:c03::233]) by bombadil.infradead.org with esmtps (Exim 4.85_2 #1 (Red Hat Linux)) id 1becpA-000784-0W for linux-arm-kernel@lists.infradead.org; Tue, 30 Aug 2016 06:47:09 +0000 Received: by mail-pa0-x233.google.com with SMTP id fi15so4459101pac.1 for ; Mon, 29 Aug 2016 23:46:47 -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=tUiYd2BR/loYJSyoM6c/trdNoA4/ByPwKxIY+h09U84=; b=RTwZ8w79+xH4RVu8fsdqcw+M92+9cgjE+CPr6lmk4qzIPJCK5lTK4q4ECptbXIqPgn zS3MxZi+UEbdSC1zLmyMVFGNN8O5bijAZcFpEKXflyhIa9ebfgw5F4GHi9PbmhxSm3MR 9HogjTCczPNaQ7zH9Zl9JVwixG0/pMDQOpLnA= 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=tUiYd2BR/loYJSyoM6c/trdNoA4/ByPwKxIY+h09U84=; b=Bj5jFjiwSeeFeuLgodQdNRVHB3FsmYCWm+STIg2bvdWlRKa96NhL3JRyWlEhetMqaO 98ZcLGMOzJpmo35ttLyacCCFG+bDzC4gdj5VPRuoMJy37oTjCkWz85UqYBBZlEDOAv3g ml+ANmwaM85TSqy8AGZzsUHnd+VbPbyuvu9wMYOOYKX3rib9UQ5UyhFyjjOT9b4s/reD 9th6q7G/jH2v1Oxa1mfPu+4WfRt3NjHZlYYUtf72+voOes32kOVBDyLADMvbLVSbtCpq Eq5CDt4upL5xdZcwJo8fr0NLw+7gqtzj898+deJlKFHtVbKjOVZz47KaH23t/Cdf8bjn ArHQ== X-Gm-Message-State: AE9vXwM1LvUC5V+jitMrGS/aYRVaD7k8g8o1Oe2H/8zjB2h2GrloWulnHi2M3/Z+xswRwGxG X-Received: by 10.66.4.41 with SMTP id h9mr3418265pah.69.1472539607239; Mon, 29 Aug 2016 23:46:47 -0700 (PDT) Received: from linaro.org ([121.95.100.191]) by smtp.googlemail.com with ESMTPSA id c82sm53839474pfb.72.2016.08.29.23.46.46 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 29 Aug 2016 23:46:46 -0700 (PDT) From: AKASHI Takahiro To: catalin.marinas@arm.com, will.deacon@arm.com Subject: [PATCH v25] 3/9] arm64: limit memory regions based on DT property, usable-memory-range Date: Tue, 30 Aug 2016 15:53:04 +0900 Message-Id: <20160830065309.19604-1-takahiro.akashi@linaro.org> X-Mailer: git-send-email 2.9.0 In-Reply-To: <20160830064941.19452-2-takahiro.akashi@linaro.org> References: <20160830064941.19452-2-takahiro.akashi@linaro.org> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20160829_234708_201779_EC00BFEC X-CRM114-Status: GOOD ( 12.91 ) 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: mark.rutland@arm.com, geoff@infradead.org, kexec@lists.infradead.org, AKASHI Takahiro , james.morse@arm.com, bauerman@linux.vnet.ibm.com, dyoung@redhat.com, linux-arm-kernel@lists.infradead.org MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP 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-range = 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 Reviewed-by: Geoff Levand --- arch/arm64/mm/init.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c index dd273ec..e3771c4 100644 --- a/arch/arm64/mm/init.c +++ b/arch/arm64/mm/init.c @@ -297,10 +297,45 @@ 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-range", &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_cap_memory_range(reg.base, reg.size); +} + void __init arm64_memblock_init(void) { const s64 linear_region_size = -(s64)PAGE_OFFSET; + /* Handle linux,usable-memory-range 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