From patchwork Sat Jul 18 20:08:54 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Scott Wood X-Patchwork-Id: 497420 X-Patchwork-Delegate: scottwood@freescale.com Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 86656140781 for ; Sun, 19 Jul 2015 06:30:41 +1000 (AEST) Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 6C5921A35EE for ; Sun, 19 Jul 2015 06:30:41 +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-bn1on0130.outbound.protection.outlook.com [157.56.110.130]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 162931A0EFB for ; Sun, 19 Jul 2015 06:09:41 +1000 (AEST) Authentication-Results: lists.ozlabs.org; dkim=none (message not signed) header.d=none; Received: from snotra.am.freescale.net (192.88.168.49) by CY1PR03MB1486.namprd03.prod.outlook.com (10.163.17.16) with Microsoft SMTP Server (TLS) id 15.1.213.14; Sat, 18 Jul 2015 20:09:35 +0000 From: Scott Wood To: Subject: [RFC PATCH 17/17] powerpc/book3e-64: Enable kexec Date: Sat, 18 Jul 2015 15:08:54 -0500 Message-ID: <1437250134-307-18-git-send-email-scottwood@freescale.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1437250134-307-1-git-send-email-scottwood@freescale.com> References: <1437250134-307-1-git-send-email-scottwood@freescale.com> MIME-Version: 1.0 X-Originating-IP: [192.88.168.49] X-ClientProxiedBy: BY2PR21CA0002.namprd21.prod.outlook.com (25.162.74.140) To CY1PR03MB1486.namprd03.prod.outlook.com (25.163.17.16) X-Microsoft-Exchange-Diagnostics: 1; CY1PR03MB1486; 2:QXNU0kvep8AibJAArEv5WtnO49hbg9ThoI0jDkxLaP2LV0xGaOjllNe0B4uukthJ; 3:5nBp+dU5/ca5/Ptob9l4Fm8Or5kZ7H6JcJp/qjOX5h9AZlEhSfGgVNrEHv7D/V/LxGm14vQuu6IACpSAm4lcfavMCDgqT9iTJVKhxpoan1gEISX5GcpU3I65arCbyyPfFqEpPFS2OKe7THVqYd3HYw==; 25:lIlpBu9nUoPskt3hBFV2/j4T6rw0QlDaHEcFrfX7iY+Acfxl3Ct1ggF1gtVslRZFN4fTjvALUsXTm1ggFsessEK48sfmTRU+fXNXzBAaLIogLP5xl57MSM1O0lvQQTzepa5N+RnrRJnP31S7CelmPAFOWezDnhW8b6REM4VrMo+ISvs+dPfEXwMhv2kQihFjaNarXch7F730p8euMGeBb34skcc6k0qsyGh3FTAwbI3HnyspX+roznWfoIbeymSHtWDymA7ivkPnrW+jaT5Xow== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:CY1PR03MB1486; X-Microsoft-Exchange-Diagnostics: 1; CY1PR03MB1486; 20:edb6o45kBEpJTW3XZmwY3+X25vIr2YZemxmYGnGqZ/91TVPKPN1GEeq6L53NrXw350bRK4mOJPnt13mhWszR5NjOZVM0GaJHoZYw9KjBVvfIL9Pm+VKd2U+Uc8HkouUASSHzdhomcapRrkkJOQuVcvWsIu3UHmFGP9fe0v87ALdtXEDrFbRhtHeGt4Vbd8659o2d35GEH4cOkNzfD3TSkjb5bfbli9Sqx2qJfefmyxsFnyKUf8AQqykf2gm3HKe1hUemKBK6Llm81zqOKFe0al/ETlJYgF5EuUq0bHMv4n5QLgwmLtP86k0WyqNZdj2cMVrwFjfVKO/mnpb7UjztC5mJr7NiMemSVXTgl+0RLF2YjdNiY7ijcPS5tZ34J9vm77BzimCjIE3q4zzDmN1unMB+iXfHWwo0hD6V2SM5aVmNGTtyFSZQYbfaWmIDdnBDmrKSTLM+FkWxEU4pIdUneRppyCW6jO69NFHYeBTkDfdBptG1OXRRsoU2yXuwN0OO; 4:IdEtwPF+ibD/qeME6h2SbIOP95nl+S+2HrnnCIVpzfP3l26jtQZREaU4w0vHzPKTZem3svIVJ/5JvsoeILWF4y0JbouXJ5bzDuoMOf2jfyddsWIkoQtWyjiErjL/rErQow7+DZicKW3Kry5zFKP68a1IqxIi7Z8EkdLdWbbIpIhzNiRH7Kka9uWqn46WP9+6WAPqx3Q2A1PF48LltqEgU1F29ZaKHXGU2WamsVISntCm+D7hIDOlS9F0MdZ4pyn+y43ZDIccic057Ujd9fEWX1Ui9cqJB3j7rtPn+l9WGZY= CY1PR03MB1486: 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:CY1PR03MB1486; BCL:0; PCL:0; RULEID:; SRVR:CY1PR03MB1486; X-Forefront-PRVS: 0641678E68 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(6009001)(19580395003)(50466002)(19580405001)(229853001)(36756003)(46102003)(2351001)(42186005)(40100003)(87976001)(122386002)(33646002)(575784001)(86362001)(62966003)(5001960100002)(5001920100001)(92566002)(2950100001)(110136002)(77096005)(107886002)(48376002)(77156002)(50986999)(76176999)(66066001)(47776003)(50226001)(5003940100001)(189998001)(217873001)(4001430100001); DIR:OUT; SFP:1102; SCL:1; SRVR:CY1PR03MB1486; H:snotra.am.freescale.net; FPR:; SPF:None; MLV:sfv; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; CY1PR03MB1486; 23:XYCnkw2O2UYk1qSOZvbJk6I/9SNvkQWkhHqO39MvLRGeI6e/ISufSGIOrHnAszjG82maFfcR/qVXbVjMa7gshNkO3OzKDpX4q4gGy6aaQqrVhKP//AqsPn5wu3PkujPRl0t0xt2INQxZIIRNbUaf5KJgD4sOuOjmI4mYT33YsUsGe3JY8Q3S0o6mpyO1G+zp1Wh6DzPUSgR4RhEt15b1+hD5qMrH4F8MmioigGBMEjkyfsc+MoGkSm4LusfVGZrYZvtlDn7+CCqZuyW/dTVbfFJPSqIaERxdy5YgRnyogex7hJeERdZx+DATx2fkUvJW+v3aoj2oy52Wt/kp4x70YK6s8bXv4Piz1zIZfR71PaQYlP/lyVL9lvAXfyJnXa3ICHOg+DavYMwSDAjO3OVKmrj1iGGAfIQ5wjCMvRBBi9AEUso6l57030bAfO3HY1MF62oRmtzwJNwLFhI5eBlMuZOcZfun8DLBtKrPwHGiGTJMaZlSnhHQDNwBXEuhZRR5pme2M9KeUL5RV/SdVxTDpgL+1/eNIkEh6ADe0gKLwZJxvXTf2CDwxdvHzo/1P/l0J71PpApiQ/nqtBzO9Zid84EWqrbRb/jbMehWd/QvYUxmkfmsyD1T17EDwkFAS2SefSSejTk3LvRUiIDtc4Huf3LpO91hXf1OzqTijOIPiDWn7e7R+S/qG9gu7Kcl2PNRETycRLCI2zXEox1yK3DXwRU4mjdbrx+OdHfr5o7JY+SQQLxbJY/sTuvM0oxaB/CbL9oYKEzAlE0MDz6++sKQMqS41ZyeKLEoh8uNRCDz1w88/peGO3tPRH5BPs8Dk9aP/nrRXgYoUrmv/FILMQHplSelhVRWW4siBEz55oGTKa7WD57oF7iaQuskbrc5FJkhHYuq7GRLiLlYSjh+yVAXVp2CqpY2EdYhwtC6U5sScyIAH/QsyJH/zNNWDz2Pie9c X-Microsoft-Exchange-Diagnostics: 1; CY1PR03MB1486; 5:YcygEse9vGJxsEM22hl0AK9eSjp8Qyo+rbzNNKEGVAa5Sy3cNT0oWRknTmQaF287rJHEgoA0G/CTGF3FT1Gt/ZVk6m1uRtBucE1bp7logTCpinRlNOlg1xLr+ftzez/QkujvUsPRk89gKmuw8PNypg==; 24:24BgftI93oqgZQB9yeXMef/a/7gMSSIPKaBzZ3z6Z+dJ8y/OMtNAYa4d8uWv6DWuEYNxvE/qTNWu3WqEvG/YoPenkbwRVKjAf/Ehq5T/C6I=; 20:OF9nGRR+nD8K22+9nH7t+8cNZuMszlEOIOLR5F0naM89ZCaawgngJUlsSgVxaTaZXEVyJrrcTSC1W4HSK1NOnw== X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Jul 2015 20:09:35.6104 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR03MB1486 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 , Tiejun Chen , kexec@lists.infradead.org, Tiejun Chen Errors-To: linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org Sender: "Linuxppc-dev" From: Tiejun Chen Allow KEXEC for book3e, and bypass or convert non-book3e stuff in kexec code. Signed-off-by: Tiejun Chen [scottwood@freescale.com: move code to minimize diff, and cleanup] Signed-off-by: Scott Wood --- arch/powerpc/Kconfig | 2 +- arch/powerpc/kernel/machine_kexec_64.c | 19 +++++++++++++++++++ arch/powerpc/kernel/misc_64.S | 6 ++++++ 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index 5ef2711..710dcdb 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig @@ -414,7 +414,7 @@ config PPC64_SUPPORTS_MEMORY_FAILURE config KEXEC bool "kexec system call" - depends on (PPC_BOOK3S || FSL_BOOKE || (44x && !SMP)) + depends on (PPC_BOOK3S || FSL_BOOKE || (44x && !SMP)) || PPC_BOOK3E help kexec is a system call that implements the ability to shutdown your current kernel, and to start another kernel. It is like a reboot diff --git a/arch/powerpc/kernel/machine_kexec_64.c b/arch/powerpc/kernel/machine_kexec_64.c index 1a74446..b0d42a7 100644 --- a/arch/powerpc/kernel/machine_kexec_64.c +++ b/arch/powerpc/kernel/machine_kexec_64.c @@ -30,6 +30,21 @@ #include #include +#ifdef CONFIG_PPC_BOOK3E +int default_machine_kexec_prepare(struct kimage *image) +{ + int i; + /* + * Since we use the kernel fault handlers and paging code to + * handle the virtual mode, we must make sure no destination + * overlaps kernel static data or bss. + */ + for (i = 0; i < image->nr_segments; i++) + if (image->segment[i].mem < __pa(_end)) + return -ETXTBSY; + return 0; +} +#else int default_machine_kexec_prepare(struct kimage *image) { int i; @@ -95,6 +110,7 @@ int default_machine_kexec_prepare(struct kimage *image) return 0; } +#endif /* !CONFIG_PPC_BOOK3E */ static void copy_segments(unsigned long ind) { @@ -365,6 +381,7 @@ void default_machine_kexec(struct kimage *image) /* NOTREACHED */ } +#ifndef CONFIG_PPC_BOOK3E /* Values we need to export to the second kernel via the device tree. */ static unsigned long htab_base; static unsigned long htab_size; @@ -411,3 +428,5 @@ static int __init export_htab_values(void) return 0; } late_initcall(export_htab_values); +#endif /* !CONFIG_PPC_BOOK3E */ + diff --git a/arch/powerpc/kernel/misc_64.S b/arch/powerpc/kernel/misc_64.S index fb955d9..8cf0b8ae 100644 --- a/arch/powerpc/kernel/misc_64.S +++ b/arch/powerpc/kernel/misc_64.S @@ -624,9 +624,13 @@ _GLOBAL(kexec_sequence) lhz r25,PACAHWCPUID(r13) /* get our phys cpu from paca */ /* disable interrupts, we are overwriting kernel data next */ +#ifdef CONFIG_PPC_BOOK3E + wrteei 0 +#else mfmsr r3 rlwinm r3,r3,0,17,15 mtmsrd r3,1 +#endif /* copy dest pages, flush whole dest image */ mr r3,r29 @@ -648,6 +652,7 @@ _GLOBAL(kexec_sequence) li r6,1 stw r6,kexec_flag-1b(5) +#ifndef CONFIG_PPC_BOOK3E /* clear out hardware hash page table and tlb */ #if !defined(_CALL_ELF) || _CALL_ELF != 2 ld r12,0(r27) /* deref function descriptor */ @@ -656,6 +661,7 @@ _GLOBAL(kexec_sequence) #endif mtctr r12 bctrl /* ppc_md.hpte_clear_all(void); */ +#endif /* !CONFIG_PPC_BOOK3E */ /* * kexec image calling is: