From patchwork Tue May 3 10:23:07 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Russell King X-Patchwork-Id: 9002671 Return-Path: X-Original-To: patchwork-linux-arm@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 920E8BF29F for ; Tue, 3 May 2016 10:43:01 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id AB0CF201B4 for ; Tue, 3 May 2016 10:43:00 +0000 (UTC) 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.kernel.org (Postfix) with ESMTPS id C9A362011D for ; Tue, 3 May 2016 10:42:59 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1axXkx-0006TG-KO; Tue, 03 May 2016 10:40:43 +0000 Received: from merlin.infradead.org ([2001:4978:20e::2]) by bombadil.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1axXip-00028N-Pf for linux-arm-kernel@bombadil.infradead.org; Tue, 03 May 2016 10:38:31 +0000 Received: from pandora.arm.linux.org.uk ([2001:4d48:ad52:3201:214:fdff:fe10:1be6]) by merlin.infradead.org with esmtps (Exim 4.85_2 #1 (Red Hat Linux)) id 1axXUZ-0002lS-8R for linux-arm-kernel@lists.infradead.org; Tue, 03 May 2016 10:23:49 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=arm.linux.org.uk; s=pandora-2014; h=Date:Sender:Message-Id:Content-Type:Content-Transfer-Encoding:MIME-Version:Subject:Cc:To:From:References:In-Reply-To; bh=6p8phqiaeCfL1qzCtm1pkyD6+SZNoJRzYx+FYyLXbnA=; b=SgSwaZDmtgegL3BUmpkxQm/+KmPwsPHUn9lB8KgNfvMauVf9Ha2y9+vUWn9p9vwuiY1HpFizSJOEYEfM8oYtTN5iL9sCwTHc+d6565neSLpZNGBd+LXFDYXKcafDh74UqQKntiBcbv9y4qVrad33d1bcdg7yUNOcARCqG2BC/SM=; Received: from [2001:4d48:ad52:3201:452d:3855:1c55:6d46] (port=48580 helo=e0050434b2927.dyn.arm.linux.org.uk) by pandora.arm.linux.org.uk with esmtpsa (TLSv1:DHE-RSA-AES128-SHA:128) (Exim 4.82_1-5b7a7c0-XX) (envelope-from ) id 1axXU1-0004yO-Tr; Tue, 03 May 2016 11:23:14 +0100 Received: from rmk by e0050434b2927.dyn.arm.linux.org.uk with local (Exim 4.82) (envelope-from ) id 1axXTv-0004jI-UH; Tue, 03 May 2016 11:23:08 +0100 In-Reply-To: References: From: Russell King To: kexec@lists.infradead.org,linux-arm-kernel@lists.infradead.org Subject: [PATCH kexec-tools 24/32] arm: add support for platforms with boot memory aliases MIME-Version: 1.0 Content-Disposition: inline Message-Id: Date: Tue, 03 May 2016 11:23:07 +0100 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20160503_062348_109026_D6065B54 X-CRM114-Status: GOOD ( 16.09 ) X-Spam-Score: -5.3 (-----) 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: Pratyush Anand Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Spam-Status: No, score=-5.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_MED,RP_MATCHES_RCVD,T_DKIM_INVALID,UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP The kexec API deals with boot-view addresses, rather than normal system view addresses. This causes problems for platforms such as Keystone 2, where the boot view is substantially different from the normal system view. This is because Keystone 2 boots from a memory alias in the lower 4GiB, before switching to a high alias at 32GiB. We handle this in a generic way by introducing boot alias resources in /proc/iomem: 80000000-dfffffff : System RAM (boot alias) 9f800000-9fffffff : Crash kernel (boot alias) 800000000-85fffffff : System RAM 800008000-800790e37 : Kernel code 8007ec000-8008b856f : Kernel data 81f800000-81fffffff : Crash kernel To allow kexec to load a kernel, we need to add the boot alias of RAM to the memory ranges returned by get_memory_ranges(). Parse the system RAM boot alias into the memory ranges. Signed-off-by: Russell King Reviewed-by: Pratyush Anand --- kexec/arch/arm/iomem.h | 2 ++ kexec/arch/arm/kexec-arm.c | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/kexec/arch/arm/iomem.h b/kexec/arch/arm/iomem.h index 81c593d..85f958e 100644 --- a/kexec/arch/arm/iomem.h +++ b/kexec/arch/arm/iomem.h @@ -2,6 +2,8 @@ #define IOMEM_H #define SYSTEM_RAM "System RAM\n" +#define SYSTEM_RAM_BOOT "System RAM (boot alias)\n" #define CRASH_KERNEL "Crash kernel\n" +#define CRASH_KERNEL_BOOT "Crash kernel (boot alias)\n" #endif diff --git a/kexec/arch/arm/kexec-arm.c b/kexec/arch/arm/kexec-arm.c index eeb27b4..2194b7c 100644 --- a/kexec/arch/arm/kexec-arm.c +++ b/kexec/arch/arm/kexec-arm.c @@ -18,6 +18,7 @@ #include "kexec-arm.h" #include #include "../../fs2dt.h" +#include "iomem.h" #define MAX_MEMORY_RANGES 64 #define MAX_LINE 160 @@ -52,7 +53,8 @@ int get_memory_ranges(struct memory_range **range, int *ranges, continue; str = line + consumed; - if (memcmp(str, "System RAM\n", 11) == 0) { + if (memcmp(str, SYSTEM_RAM_BOOT, strlen(SYSTEM_RAM_BOOT)) == 0 || + memcmp(str, SYSTEM_RAM, strlen(SYSTEM_RAM)) == 0) { type = RANGE_RAM; } else if (memcmp(str, "reserved\n", 9) == 0) {