From patchwork Wed Oct 7 03:48:22 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Scott Wood X-Patchwork-Id: 527116 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 [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 9817B140D8B for ; Wed, 7 Oct 2015 15:11:16 +1100 (AEDT) Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 7E7A61A2ABB for ; Wed, 7 Oct 2015 15:11:16 +1100 (AEDT) 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-bn1bn0106.outbound.protection.outlook.com [157.56.110.106]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id A7D011A0166 for ; Wed, 7 Oct 2015 14:49:04 +1100 (AEDT) Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=scottwood@freescale.com; Received: from snotra.am.freescale.net (192.88.168.49) by BY1PR03MB1483.namprd03.prod.outlook.com (10.162.210.141) with Microsoft SMTP Server (TLS) id 15.1.286.20; Wed, 7 Oct 2015 03:49:00 +0000 From: Scott Wood To: Subject: [PATCH v2 18/18] powerpc/book3e-64: Enable kexec Date: Tue, 6 Oct 2015 22:48:22 -0500 Message-ID: <1444189702-17241-19-git-send-email-scottwood@freescale.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1444189702-17241-1-git-send-email-scottwood@freescale.com> References: <1444189702-17241-1-git-send-email-scottwood@freescale.com> MIME-Version: 1.0 X-Originating-IP: [192.88.168.49] X-ClientProxiedBy: BLUPR08CA0034.namprd08.prod.outlook.com (10.141.200.14) To BY1PR03MB1483.namprd03.prod.outlook.com (25.162.210.141) X-Microsoft-Exchange-Diagnostics: 1; BY1PR03MB1483; 2:Gz+winuN2280249/RCZwIhEQfH4fgaOxhXkxC/I9amSFSUBZ97xROtO06OhFD3x2jp96PWpo/kpFnB4LaGXkdP1dKNXVa/m+RV3sa/tLRGKDT2EauZfC7NsQkFNxMhZwAULFjz5sYRnmXIFUeOedNeEPNriJNMnDPYtud6bcA+Y=; 3:+dKMZ4Hzqpc6yfQAP1037nuHRprbXrm19MEfoL5ouDMdSlWPwqd/AN4U78K0+Htz7EhKJas6f5kxfPQ4jkoXQb7TUb1/b6wSRp3wo06irPfqv0PqsPzNXVyFGm6r7GV9Hm5ztGlgSYjsNavDzU2arQ==; 25:YOPHkXZBwuzbxhGAGV9W1HY5aJMwCQCG8ysHNXyG5KE6sSEqmVtTF0+CuvZ+WEOTzWOGb3xklDjAqjXhV8YDFG+cQDtB1TiB9bZK8K13Rt8AoadyBXWzzpnBzgEQw7sMtTZs3dSABNWgEZFCI/1auX7GBGhiNFTtjiggIV177mjOiw47GypGslMuFNoSmVidiLpRQeNEvALcCdq7ml4r0OvXJLDFkrdi/XCF7Pda40wZWS/gPJ61UUw32V3phwpE/9bm51LbcVp++f58GWHxYQ== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BY1PR03MB1483; X-Microsoft-Exchange-Diagnostics: 1; BY1PR03MB1483; 20:JyNwc4tXV5qD5fetaljsvkGOclL4pRmtnc9eqAAB2prJRYNdSux73/MM0IVkcQINJDZ/N/6DDqNgZjP3Cffjm/9QlnNzwx8KQYMVqVsQhtZpCDKRRDY+l8hdAAa9/TfNZDwAN+T4Vthh5t2SUPrvjZba5nBhDBpwvDWnkrTs+kJWLd1LIiMp6xOjgTo6lLevAQ6D1wmbF+2X4ElGsAX9xITWqT5JQOvBdlVLl80saJ0DKZVjuiEd4KSchPG1vPjDWIHBzxiH7pz9k8DSjf3ENN8f/rHhnw+o37+yVox+vZOAXLeB/OIE2ylVlNecRvkaH8Wz0aGitmR0eP9J7uciXjWGvT0FAzxExSTJc0dDIezrqgQsBeXxWBfO/zHPfAxw+BAc5XO0WCPR4P/gx3pHBkmP9FgfC+8QtgTHat/JkHba9dyLjllCPwuFiK0Yw+mLeWJYPolg6Xe65KF9lKuJ+JG17PI7M/Bo0WgfrHdhyvZ/Yea0i6a3JeHy4IEMl7sJ; 4:o1R03konqU7n47S+Rj0edcWMxTz7XXyTt7SgBg17WPhg2R5Z54hDT/uwniz/W5VTujDHYc6M+OZFM5AmEisZ+OzkdDlwEqlmwggoZfc8ZdQF55svJQcpZ6AeBtCkXF2ycbO1xxG6f44pA9Wnv2pkizdAO00U+jRmRffURb3hoIKVMKlP9dYFeeoPYhhayN/ewlphvYfZ1YEEQRRy2NkfwuR6EB/NwrFRqSgjrofgH7pISTuq2eYK+GDFBEOED13hWN7L+kxyCKax76HpRjNZFa6WZt47pBmnuS61a3RfeFAil80oc5OiBnPwSeygZO7/kLwW3I6R4WMLAg81d0YUDgLFRHzuLwBh92DbleCZmIg= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(2401047)(5005006)(520078)(8121501046)(3002001); SRVR:BY1PR03MB1483; BCL:0; PCL:0; RULEID:; SRVR:BY1PR03MB1483; X-Forefront-PRVS: 0722981D2A X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(6009001)(199003)(189002)(122386002)(19580395003)(5007970100001)(5003940100001)(189998001)(19580405001)(107886002)(105586002)(46102003)(106356001)(50466002)(77096005)(40100003)(2351001)(110136002)(575784001)(50986999)(64706001)(42186005)(87976001)(86362001)(5004730100002)(47776003)(5001960100002)(76176999)(229853001)(101416001)(50226001)(92566002)(5008740100001)(2950100001)(66066001)(33646002)(36756003)(81156007)(5001920100001)(97736004)(48376002)(4001430100001); DIR:OUT; SFP:1102; SCL:1; SRVR:BY1PR03MB1483; H:snotra.am.freescale.net; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: freescale.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BY1PR03MB1483; 23:oDq1mBT5ZEndMPorXa8KRrAY/0mYSZD4yNwsVbPut?= =?us-ascii?Q?0OrZigXCMUhQTd6l0hv02hWf0QZ3WuFDP8vVbDxjZKBkda9/4+CLeKa4VvWA?= =?us-ascii?Q?0wVwcGBB/pdzEKZdPt7wdpVLUOFd3qqouo7+S0d7wD9XDNW94uoZfCmpdv+R?= =?us-ascii?Q?VuplXKbS4Tm65ED81lJjkp27FLpy7o5Tf+GxOEBqtCfKFUL3nj/gFF3HzCKt?= =?us-ascii?Q?RSKXnxCekOyLIDm1LUKO4KC1e3QkZhSBaKHfX60jjSjxmeM7qXSIQSbUQSie?= =?us-ascii?Q?eEfNlcGThrX1RLGT0eD3ZftRBIMEUD/VvA9Mh9HCv6dBSxUARlJIrrR+5K+D?= =?us-ascii?Q?e/QzVGIlOlzDzYK3HxnMOg/UR25GSjsS6co7sMkvMmaFxK4RJFQrdPg8gaBk?= =?us-ascii?Q?KxKT8tUf3kw5udfy33qtWDIKttqI11IpYzQuCckYYzy0DzPQY0UX+f5CRR1W?= =?us-ascii?Q?A4NcWcownX50HvUWwnq1tD9og+G/2EZYuSoZNshVLBUTgZe+NqxBB6z5QB+6?= =?us-ascii?Q?+ybdMb+qtDXR3bnJ0qRg2Xs4yF7eDyXvZgKb2mBYE/2iiJGqa8Xtql0qWEQl?= =?us-ascii?Q?Kkicm1Lk8HOCJg4gXwlj9PqSHOODF6gJWvcdg/du2FQc2EiZTiCzx/Fi0s4d?= =?us-ascii?Q?rgG5jMWrLLt4bZvsleuRyOn8+Fm6OL9YBP4mpgeeqbSPOjqtt8LuKWlD9UAq?= =?us-ascii?Q?vbMFTdD64tdMZk8xPj14kjqXu/qw1DBaiGcobTA+iDWyt8dCqjUvBxP8PMe2?= =?us-ascii?Q?gs5750PMhyajNGvaJwflnOMbPSx5/JMIrG+FhXJT1HOcMq4NpHUgFj+WBznP?= =?us-ascii?Q?BK95OX4lPUZOsPxgLAhE46avrvUfmIhkYXMrsey9xZZxkCKfwaEq4hiRzsJN?= =?us-ascii?Q?Fitm0lgv6g/yeNggIGiBjMPk6TKuZe68UeKWiiATSoq7o5ZVvF3eUa/DWNTi?= =?us-ascii?Q?GTfbX8VuWPD3bKFjz2/3WOGyyMq8sjXqgwNeLVEnX3VEIqlB5WduZIgsv58W?= =?us-ascii?Q?OqbqTgZTNjGF+hj0O3+xeXA1NFxS70yfn0XYr7i0d0CjkhPYYvRfx7Vr/9R4?= =?us-ascii?Q?WZ9YC4ol2bTxSv5MCzQnR0WpCmKXRg6O2AsWKTCW/G5Pae9mrxjeTbl2Nj48?= =?us-ascii?Q?Eslg28D0+xhjJD0Yfbmbeeue8tI8DmMGx9pEQEedquk0IHCICOoIw=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; BY1PR03MB1483; 5:BEDftIUNr8VWz9QFaUukAo0Tje3Cjls5hGNwN2HJFpNh62EkFb++Hi+IyORNRrz90FQwbwaMmAJiNeC7qDX9wSBDPBevSy3gKBAwFrnOGjkXNlyRxgEP3SUw19W3v68p1yE2oYr0U4MoI8sptoQcRA==; 24:bzWxbNoZRs4/GiWBjAEfkOPu6iPGXMqlcAvNJXv723sMzo3jiUBsidZlsiwl1h7TEYyIqSHtFG3jsiYeLwBYUO0GaTl2YOUsiGRgrT3EN20=; 20:AzqYG48MAkpge90A6FpsmGK2g/a8ORM3g/FGv1jvziojXensw5T/7wGuJBTElR+huJq47PqtRmdA/vtbMLqpCQ== X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Oct 2015 03:49:00.5141 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR03MB1483 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: Tiejun Chen , Tiejun Chen , kexec@lists.infradead.org, Scott Wood 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 | 18 ++++++++++++++++++ arch/powerpc/kernel/misc_64.S | 6 ++++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index 9a7057e..db49e0d 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig @@ -419,7 +419,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 select KEXEC_CORE help kexec is a system call that implements the ability to shutdown your diff --git a/arch/powerpc/kernel/machine_kexec_64.c b/arch/powerpc/kernel/machine_kexec_64.c index 1a74446..0fbd75d 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,4 @@ 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 ddbc535..db475d4 100644 --- a/arch/powerpc/kernel/misc_64.S +++ b/arch/powerpc/kernel/misc_64.S @@ -631,9 +631,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 @@ -655,6 +659,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 */ @@ -663,6 +668,7 @@ _GLOBAL(kexec_sequence) #endif mtctr r12 bctrl /* ppc_md.hpte_clear_all(void); */ +#endif /* !CONFIG_PPC_BOOK3E */ /* * kexec image calling is: