From patchwork Sat Jul 18 19:57:19 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Scott Wood X-Patchwork-Id: 497398 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [103.22.144.68]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 54A3C140781 for ; Sun, 19 Jul 2015 05:59:42 +1000 (AEST) Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 317361A1D39 for ; Sun, 19 Jul 2015 05:59:42 +1000 (AEST) X-Original-To: linuxppc-dev@lists.ozlabs.org Delivered-To: linuxppc-dev@lists.ozlabs.org Received: from na01-bn1-obe.outbound.protection.outlook.com (mail-bn1on0117.outbound.protection.outlook.com [157.56.110.117]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 563BB1A0CEC for ; Sun, 19 Jul 2015 05:57:39 +1000 (AEST) Authentication-Results: verge.net.au; dkim=none (message not signed) header.d=none; Received: from snotra.am.freescale.net (192.88.168.49) by BY1PR03MB1482.namprd03.prod.outlook.com (10.162.210.140) with Microsoft SMTP Server (TLS) id 15.1.213.14; Sat, 18 Jul 2015 19:57:30 +0000 From: Scott Wood To: Simon Horman Subject: [PATCH 2/2] ppc64: Add a flag to tell the kernel it's booting from kexec Date: Sat, 18 Jul 2015 14:57:19 -0500 Message-ID: <1437249439-31496-2-git-send-email-scottwood@freescale.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1437249439-31496-1-git-send-email-scottwood@freescale.com> References: <1437249439-31496-1-git-send-email-scottwood@freescale.com> MIME-Version: 1.0 X-Originating-IP: [192.88.168.49] X-ClientProxiedBy: BN1PR02CA0026.namprd02.prod.outlook.com (10.141.56.26) To BY1PR03MB1482.namprd03.prod.outlook.com (25.162.210.140) X-Microsoft-Exchange-Diagnostics: 1; BY1PR03MB1482; 2:ERQqljXyBlspuv3W22e0iSmuOJOFOxcS7hkdjcbklqU7Yn5KbyeHFebxQkyRc9XC; 3:4qVnVPcWycKt55Mm/dtQs8cm7iOtz9PRzsVxL1vrBu1kGsqSA7k3eyiR+snYXaSIm2otQA/dYyZdixuYA0KkBjAvwIQxhXkFDsErCBXQ0GSw/PA3F1aaxBtXc9zPVVCrg5BB7icgrDD6rQDMkw1TFw==; 25:ITgxQo5Je44E9z1ArGPee2UyILFn3u9Z7GmsFbcCM5J3MAf1adw0hqJmCB9SLA+54+jtitHqWfa2byR1fjGtRVUdWkRKrB86MFdEpV4SlSzyiOOFP+yxhKqUsG+f1ikF3U4AnHFM4mx5sjyVctAP2vr1/LwqJIyhFtsUDtUzo+YGOOkBNUvpB4IDuvt7Cszt+PmDYfsZTBGtyeshCypTmNr2QVQvmnMgSgaEfmeVo6U1cIcyZyaYODZSSbdZ02aT3Bhw3w73WxRtY4ii5Yplsw== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BY1PR03MB1482; X-Microsoft-Exchange-Diagnostics: 1; BY1PR03MB1482; 20:hHIUXeFPYVODkH6UT2s00Fh7avMVq8SKFW9/12RJSMaR12OapRn5q5csPkglNGaWwheZGkFBp0BqqlqAMjZSfrXU+JbtlU7G+VlcDoeNaYny2wdbI4VoLKig3TZYMWuVAFejEl9Cu4yEp0fT1ubUTNyflMswC2vfmX+wuWQ3bFn4EYegDzoywY+zBXZ9CYdZsK6aAeg78GGWAuauVXikqMqXUOnzt3afUFIgXarZVLjtKTQNEYY1OjdqG0ZPJPm3EK++2RAXVrFyLEmDQTi+lJU0ZmUyhucmif6lD6of/xQ1BWDfQIjMvqraE8fSvFkcymSSuylJzmLRE/H2YQNHuNXfrVJi+xCpi+ZD6rACIO5U3cracywL+DmY4RiY3C/s+6Gu1U3qAzD5NjiC0/Q2q5bbAIvVkwSKXVudaSAxFrirBSeT4yydW7CyzLCDVzMa3o+pSiHkPZx90P6t9GzzH5aNFRz0ec3EIQfCQ+pNH3VRAsX1xSKyEyAJb2lwUtZl; 4:dWqkCpUJFoMiT3ENUOfBjIgOF51xPH1edwEkrm79e6mmd4dkJmXrFsvoQwXKDTY4VfhglAZPcx4+GEPPxmsn6rHRqFQgA3hD8HgQ4liU0n99JM+KqI5S+iwHUCWId29sa2dLkMV4MTDVXkVXc4KkikWWQwqNe56vRGn+Vbvb790XxYaR06eU6i3Or7+uvuHZD5FFSoKt41Vm56VN2Isucs+Zi34/VctLcZWQSIK4FX3sCVDJ958w1lIbaazdHRMGM4v3wnOJi9WzLnnpZSr8HR88HsjZdCBXIgXRhmMRHhM= BY1PR03MB1482: X-MS-Exchange-Organization-RulesExecuted X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(5005006)(3002001); SRVR:BY1PR03MB1482; BCL:0; PCL:0; RULEID:; SRVR:BY1PR03MB1482; X-Forefront-PRVS: 0641678E68 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(6009001)(229853001)(92566002)(48376002)(19580395003)(66066001)(19580405001)(86362001)(62966003)(189998001)(77156002)(47776003)(40100003)(50466002)(76176999)(50986999)(110136002)(5001960100002)(107886002)(122386002)(77096005)(36756003)(42186005)(46102003)(33646002)(87976001)(2950100001)(5003940100001)(50226001)(4001430100001); DIR:OUT; SFP:1102; SCL:1; SRVR:BY1PR03MB1482; H:snotra.am.freescale.net; FPR:; SPF:None; MLV:sfv; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BY1PR03MB1482; 23:qVoaddKYruA/yT97cIyKpJb41k5t8H3YYbgWJPq5p1yq/NAdvMmc2zSQBdqPjgcb2gWF9p0WoULm28w3R8OUPIzOCX0lrUxmLHeIWUCueEs3hWzKgjTVS4lW2o8yUKjf0NjbhWWj01l3dyx7VuP5jq1eLu1V2NJGTLu7ePzDPaj0frE1BNkpdxDdWlHCUH1CWXS85EsMCe2LTf3IuPWdbjS0vPiDStMwm9eG5gBdZvRl5r+kkRo+hcfwuVa5D7KpYzXbyR77ZZtlX6C1uNJpDQVOrJ33E7DwrtoU5VtCIVaEqPzFVNrvLQlmnFuiP23n6vyMGfc9wbw8mA+ykbRTLo6LcSZlvvxHA++XD8zd3g+kvePCcVtYNZcoTMXBOQ4VOEAzihGkYx2jlrPbxHfwwTH9ltcyJN1cfT/laGjcSJsLW5oSZZpijZHSPfIo87s1XprAovB9mdu2XxBP9VX6P/mVX1xloyhQhmWPUfUrhNIuqGPn2lTYZKHvzi+AVgT6laR/5EtsNSFVJevaW6HExQMxQQ1v3oKRyup1NKVd3IIzToHADNiWeZX/MWFUbW6+O98eOOu9dCXvcCTwAjBi30y4AjT7kYXUk/hrWAOVrfaFNUSd9uUoUqeEJDg42CLXXlGP2b1fL//lWXR8rxT5sQqt7CvIKKR+ERhAd0ZbmAsBXyPjOFaBE+CtDaazohnCaaEv1qI1Wc9NM/jHIiGyRnD1Yiqd8nYCCg7LSoYxT6Xh+IR+0LB2F3iojoLmy407n/1KAkPm4rj1KVgBZ4mWz/yL06Qhekd2CsxMDz6AcSqJNUt1l/JiybnG7E6Uaixyb6bUAw90mLhmpHjFl9eGBw== X-Microsoft-Exchange-Diagnostics: 1; BY1PR03MB1482; 5:uPb44UyVhHyy/yWQs+TWhD1gZ5U1HKrnzVLbYCf3OzN9d94Li+GqD7rWvWXyzB3FxkShJ6p3kXUtEDBdmnqcLSsZMlpyUBgJB4Zg7RZsu+7Wc30uLkyj7rkChbsVQ3AqnjkVPeGZMxdSJPHXqCHLzA==; 24:4PXS14qhfKaDwpSswytwNVNyVKHQmy97nphwhePsItyucErKAeWIxPEFUJuPwLj+Ha3PSKcUPbSUb+S1AwkNpbpkSJLIBmA25xlpMM4YQ3o=; 20:z+4kZD9gAuCbxNlKyjYmzvjvE4WR81dnj9rkNTgsedZeCYAHs9Bs7z+tTRqw6UkczloWjj4e/5i16qtzBvA/JQ== X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Jul 2015 19:57:30.4347 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR03MB1482 X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Scott Wood , linuxppc-dev@lists.ozlabs.org, kexec@lists.infradead.org Errors-To: linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org Sender: "Linuxppc-dev" It needs to know this because the SMP release mechanism for Freescale book3e is different from when booting with normal hardware. In theory we could simulate the normal spin table mechanism, but not (easily) at the addresses U-Boot put in the device tree -- so there'd need to be even more communication between the kernel and kexec to set that up. Since there's already a similar flag being set (for kdump only), this seemed like a reasonable approach. Signed-off-by: Scott Wood --- kexec/arch/ppc64/kexec-elf-ppc64.c | 11 ++++++++++- kexec/arch/ppc64/kexec-ppc64.h | 2 ++ purgatory/arch/ppc64/v2wrap.S | 11 +++++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/kexec/arch/ppc64/kexec-elf-ppc64.c b/kexec/arch/ppc64/kexec-elf-ppc64.c index adcee4c..ebd91b1 100644 --- a/kexec/arch/ppc64/kexec-elf-ppc64.c +++ b/kexec/arch/ppc64/kexec-elf-ppc64.c @@ -112,7 +112,7 @@ int elf_ppc64_load(int argc, char **argv, const char *buf, off_t len, unsigned int my_panic_kernel; uint64_t my_stack, my_backup_start; uint64_t toc_addr; - uint32_t my_run_at_load; + uint32_t my_run_at_load, my_booted_from_kexec; unsigned int slave_code[256/sizeof (unsigned int)], master_entry; /* See options.h -- add any more there, too. */ @@ -314,6 +314,15 @@ int elf_ppc64_load(int argc, char **argv, const char *buf, off_t len, sizeof(my_run_at_load)); } + elf_rel_get_symbol(&info->rhdr, "booted_from_kexec", + &my_booted_from_kexec, + sizeof(my_booted_from_kexec)); + if (my_booted_from_kexec == KERNEL_BOOTED_FROM_KEXEC_MAGIC) + my_booted_from_kexec = 1; + elf_rel_set_symbol(&info->rhdr, "booted_from_kexec", + &my_booted_from_kexec, + sizeof(my_booted_from_kexec)); + /* Set stack address */ my_stack = locate_hole(info, 16*1024, 0, 0, max_addr, 1); my_stack += 16*1024; diff --git a/kexec/arch/ppc64/kexec-ppc64.h b/kexec/arch/ppc64/kexec-ppc64.h index 89ee942..0e9f63d 100644 --- a/kexec/arch/ppc64/kexec-ppc64.h +++ b/kexec/arch/ppc64/kexec-ppc64.h @@ -14,6 +14,8 @@ #define HAVE_DYNAMIC_MEMORY #define NEED_RESERVE_DTB +#define KERNEL_BOOTED_FROM_KEXEC_MAGIC 0x6e6b7863 /* "nkxc" */ + int setup_memory_ranges(unsigned long kexec_flags); int elf_ppc64_probe(const char *buf, off_t len); diff --git a/purgatory/arch/ppc64/v2wrap.S b/purgatory/arch/ppc64/v2wrap.S index dc5034f..8ed9880 100644 --- a/purgatory/arch/ppc64/v2wrap.S +++ b/purgatory/arch/ppc64/v2wrap.S @@ -51,11 +51,19 @@ .align 8 .globl purgatory_start purgatory_start: b master + + .org purgatory_start + 0x58 # ABI: possible booted_from_kexec flag + .globl booted_from_kexec +booted_from_kexec: + .long 0 + .size booted_from_kexec, . - booted_from_kexec + .org purgatory_start + 0x5c # ABI: possible run_at_load flag at 0x5c .globl run_at_load run_at_load: .long 0 .size run_at_load, . - run_at_load + .org purgatory_start + 0x60 # ABI: slaves start at 60 with r3=phys slave: b $ .org purgatory_start + 0x100 # ABI: end of copied region @@ -111,6 +119,9 @@ master: ld 9,0(6) # load the OPAL entry address in r9 LOADADDR(6,kernel) ld 4,0(6) # load the kernel address + LOADADDR(6,booted_from_kexec) + lwz 7,0(6) # possibly patched by kexec-elf-ppc64 + stw 7,0x58(4) # and patch it into the kernel LOADADDR(6,run_at_load) # the load flag lwz 7,0(6) # possibly patched by kexec-elf-ppc64 stw 7,0x5c(4) # and patch it into the kernel