From patchwork Wed Oct 7 03:48:15 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Scott Wood X-Patchwork-Id: 527109 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 77BEE140D72 for ; Wed, 7 Oct 2015 15:03:05 +1100 (AEDT) Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 41E221A0387 for ; Wed, 7 Oct 2015 15:03:05 +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-bn1on0137.outbound.protection.outlook.com [157.56.110.137]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 4EEAC1A015D for ; Wed, 7 Oct 2015 14:48:53 +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:48:47 +0000 From: Scott Wood To: Subject: [PATCH v2 11/18] powerpc/book3e: support CONFIG_RELOCATABLE Date: Tue, 6 Oct 2015 22:48:15 -0500 Message-ID: <1444189702-17241-12-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:fmv+rjH4ABX+TrZ1EJfoE5nLamhqNYT/E7bA/CTYPgfIWeZc7sFZNLH8fFDRu88xl5P5F0qHHQo9B9cLNt2V19ajFUDZcIQQyvavIMM95NO47w5KiAEiBfTU09CMEVxlmra78HVWmBSIID+wpTsfW0SRVVoPGl0IPyhg1UHI7V4=; 3:srMdt6jzZeResFCwbHRFLgkwiE/aH4oKEQw5tTCuvUrKR1ity+8WUxG5f1oI7s6r9/DhoPD5WADEZ5IYETRnsubzTyOZVXRQ6a6fFdTR6MDHfhhr2yYH6xpTWxS+PKeS21I61Frigoehhl09eU3kfA==; 25:W55bJ1CVeIEgEBuYFM5lR/2VRgjlEXLy2V+sgH1kVHepOKyoecuetpVSQqtYVuLFdyj0ax5DRXoH4KVs4xwA89FFWl2+ALe6FI3pMCk/LjZPittLuACVI9VUoSMyH51SIq5f35G+y4IaH7glC4K4stbJsd7l+JZiQRpjP+dXDUWM6y13dvsf8srZ7CNXbI4hCEoJ8Ls+2bUdueb9iHgi9u/yLG/gaQplHm0PUkQXltge17QV+Cvj7qOLPxWZyTAQXtjfalO+9i0MG68YUsCqSg== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BY1PR03MB1483; X-Microsoft-Exchange-Diagnostics: 1; BY1PR03MB1483; 20:TzB0vMgcDpCYMJ+k4N5b2S33gAPjp6ONgb4nYVqS+LFBLLU/aFWZopISxtsZ1N6VwYr5Osyj/4WE25YOE9UElQW4ji9WezGlC9t6nw8A4LLFOvxsOijkRmvhqSzAGxy43kYCEKgWjHD+gBst5BoFZZ6y3P3Oh6K7vJMydR37BU37J57ocWGXlZ73YIQJTNAdLFCYmLX4ml4QeNYcx4WHcTehy96bjILrehKZiVJIlJOZqHdvhO0gDlDWCFXqWwzJ3FBopi97GpZrzyMU9Ga1ydSL7a/EvmXdeEG9F0x7iveouckvK7TdMWkFDfb4Jhgc2Pm53JHwCEyvhHsq5ldqY5OLszPVXX37viKmjd5GuN4k5IFZZcRHqg6veSFlLouwl1NKUc2VBwYYDoo7wDrPHaMpGuM/kYOnFB5NotXTWTDtS/Tngvkd01FsdnQgHjJrOBWb6LHPGWJieWLc69sSBMxmnowjE1uEroReuM2Ik09ix+Selu1wBZIlqNUUr2bW; 4:DeeM/nYi1ySMtFXwKVux4WXNfghf4hG41Q4yrGAIWcTHZjjK0Aej+BwIZ/FqVfNFvFmbQ+4esnolBfZuZbaBHkz8XToIvDDy1ExgC7+iYQABl0Up0O8Vs4g+EZiL9nu/QPF28ft+I5HYG7vIeUHglyzY+frQ4+rlqse9p5xT8S3H8yWmNUWxsQpTc4eGLGQyBZFVsjnoK4W3+yEwdy580Cavje7m+LePTTfwVIQFwjwwMKD3fTJyhRA/rUydD3D6iw8xCdBWX3GCVuXLBI+faAUCQ1PouF3z7ejNILR0b5L9CPBGCXupTkGMinSGqPBVnIvQdg9Vx2BYGAks7aCNhYkjFucqT5SRPNgInK+TRwA= 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)(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:9IlcK5I6hRS+1KOMr/ff2AkJ6vwp/vCfEgJPQZVX6?= =?us-ascii?Q?WdKoIoJFzJpUxzEzVHtHWBgy9Mmy0yv19u6KbX8t4OTj83fDalbcUWAZOeb8?= =?us-ascii?Q?Uur5oAb8LR4AXI8H1QO3oCR7uDRLzDhAsmqpoIRI4fjhJKoentjS8yvlH/ff?= =?us-ascii?Q?ZSvU/aCsHHTD5+4QqKZShZwa8hDf8Tqw5GlUeoDHO9yTNRRcJILEVcyWu6tF?= =?us-ascii?Q?xvWTDTcd218/3kqJEwJ5Rn6Z5EYPpJeZ9AYligF5RW84Mp60fT8j4hfk5+II?= =?us-ascii?Q?iKfXbhb+OfrCPtHiwlmJGHPE1vYQI4BO94Tlhrf+mUPgnhd90QuTuOrDbkvy?= =?us-ascii?Q?lDF2Br7jBNGnDI5R1jIlSyGS1F5coHv7c7ulzxrhVq6Z2urNx9Idq9z0cxXP?= =?us-ascii?Q?qjKIcDcVlB5qO3Ajeztn+DwNAbBWRY3jAeMC+uq/chL+PwtIwoa6ZR79mg8N?= =?us-ascii?Q?5LFoFCZDzHBRMBMW5qPooxq6XF1iAziwlB6ipi9feJVa4WDA3oK5eQW7eUnB?= =?us-ascii?Q?BkQXI14J2OQsE7jAX4l/L9UNxb0ybl071aFwBp9pFuJFte33qe+MGu9FG3YM?= =?us-ascii?Q?nHVSl6kxRumvZbEeNBE1PJ7y2BZby0vAAQWp7hBIe1JEE9AXrnY3zFNNE4BZ?= =?us-ascii?Q?rQcWKTOdXaj9Z/tl0eAjMA4oXLkCkgWiv+wWavt+cGkpzhnCplCsKrfyiXCW?= =?us-ascii?Q?8sWhfz0J+mU0kCUyPS7e/SvROrfwzNuybHJUS9vS/XLz9GeCC+wMjGICnOYv?= =?us-ascii?Q?ky24sAdeP0YWbYM+Q0c/sTQhmycW/a9HFeA4nxOgYl9OR2I7ckZGJ3f9qKw5?= =?us-ascii?Q?3K0sjsngcNzYaZb8EHwjHZ6DL7lIfKfJ1K/ymInSQqGke7fhnwKiGbYYd3kj?= =?us-ascii?Q?wZMZ7bBdw2BaEe1jfd6D2r320JYiWuNAEoF6OWveYvt59SEOnatMiq7Ch8PW?= =?us-ascii?Q?LlLw+zwUxICoZbHJg3/3RdNo5hgoH4KGJ2xSBD24ooKBa+4iVyx+mWJmrA3i?= =?us-ascii?Q?UQjW21LAmklyhFidHfZdlCYmiKv/hhPODxN9nvt2Q49XqyFZ6IqinSPOrDU+?= =?us-ascii?Q?r++nQZSpVpqzNsAnpIZ83FPIn4Brm1jEpjOMvo6aGW+m4maW+QA9JyQ+hbPI?= =?us-ascii?Q?FtoVv+5sCI=3D?= X-Microsoft-Exchange-Diagnostics: 1; BY1PR03MB1483; 5:hZkm0kHd8z7ooXjUqBDZi3JpIWurY5HCCbItKBmvuKq8nzlWJ9wT9O1Pcd/ouMhbOZkYeVtcs8WZnXdLCij0KVWYfUUFhie7C6qbvvWVqA+uDlkhv1MTTTzT7rFvXwq8IXh+1jyDU86GEkjLYW7Pvw==; 24:7/DCXq1QyvL8FoMTWvuYWv+On9c8RFYBdoc03BT5qtSdQdr0nB1eK4w0CwB04HYq6pJcDzPh9zM8+tgBnOMOrkAodU/WNEmkIai8xFXUU70=; 20:jgL/8yU5Fm5E9Vimr65LiPmzrp2MI3H6TallbBoRFLGxNsT87q7mli2NQyRpKpp2Yfs2BGk6DGXZf8jld4qHgw== X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Oct 2015 03:48:47.8886 (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 book3e is different with book3s since 3s includes the exception vectors code in head_64.S as it relies on absolute addressing which is only possible within this compilation unit. So we have to get that label address with got. And when boot a relocated kernel, we should reset ipvr properly again after .relocate. Signed-off-by: Tiejun Chen [scottwood: cleanup and ifdef removal] Signed-off-by: Scott Wood --- arch/powerpc/include/asm/exception-64e.h | 4 ++-- arch/powerpc/kernel/exceptions-64e.S | 9 +++++++-- arch/powerpc/kernel/head_64.S | 22 +++++++++++++++++++--- 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/arch/powerpc/include/asm/exception-64e.h b/arch/powerpc/include/asm/exception-64e.h index a8b52b6..344fc43 100644 --- a/arch/powerpc/include/asm/exception-64e.h +++ b/arch/powerpc/include/asm/exception-64e.h @@ -204,8 +204,8 @@ exc_##label##_book3e: #endif #define SET_IVOR(vector_number, vector_offset) \ - li r3,vector_offset@l; \ - ori r3,r3,interrupt_base_book3e@l; \ + LOAD_REG_ADDR(r3,interrupt_base_book3e);\ + ori r3,r3,vector_offset@l; \ mtspr SPRN_IVOR##vector_number,r3; #endif /* _ASM_POWERPC_EXCEPTION_64E_H */ diff --git a/arch/powerpc/kernel/exceptions-64e.S b/arch/powerpc/kernel/exceptions-64e.S index 9d4a006..488e631 100644 --- a/arch/powerpc/kernel/exceptions-64e.S +++ b/arch/powerpc/kernel/exceptions-64e.S @@ -1351,7 +1351,10 @@ skpinv: addi r6,r6,1 /* Increment */ * r4 = MAS0 w/TLBSEL & ESEL for the temp mapping */ /* Now we branch the new virtual address mapped by this entry */ - LOAD_REG_IMMEDIATE(r6,2f) + bl 1f /* Find our address */ +1: mflr r6 + addi r6,r6,(2f - 1b) + tovirt(r6,r6) lis r7,MSR_KERNEL@h ori r7,r7,MSR_KERNEL@l mtspr SPRN_SRR0,r6 @@ -1583,9 +1586,11 @@ _GLOBAL(book3e_secondary_thread_init) mflr r28 b 3b + .globl init_core_book3e init_core_book3e: /* Establish the interrupt vector base */ - LOAD_REG_IMMEDIATE(r3, interrupt_base_book3e) + tovirt(r2,r2) + LOAD_REG_ADDR(r3, interrupt_base_book3e) mtspr SPRN_IVPR,r3 sync blr diff --git a/arch/powerpc/kernel/head_64.S b/arch/powerpc/kernel/head_64.S index a1e85ca..1b77956 100644 --- a/arch/powerpc/kernel/head_64.S +++ b/arch/powerpc/kernel/head_64.S @@ -457,12 +457,22 @@ __after_prom_start: /* process relocations for the final address of the kernel */ lis r25,PAGE_OFFSET@highest /* compute virtual base of kernel */ sldi r25,r25,32 +#if defined(CONFIG_PPC_BOOK3E) + tovirt(r26,r26) /* on booke, we already run at PAGE_OFFSET */ +#endif lwz r7,__run_at_load-_stext(r26) +#if defined(CONFIG_PPC_BOOK3E) + tophys(r26,r26) +#endif cmplwi cr0,r7,1 /* flagged to stay where we are ? */ bne 1f add r25,r25,r26 1: mr r3,r25 bl relocate +#if defined(CONFIG_PPC_BOOK3E) + /* IVPR needs to be set after relocation. */ + bl init_core_book3e +#endif #endif /* @@ -490,12 +500,21 @@ __after_prom_start: * variable __run_at_load, if it is set the kernel is treated as relocatable * kernel, otherwise it will be moved to PHYSICAL_START */ +#if defined(CONFIG_PPC_BOOK3E) + tovirt(r26,r26) /* on booke, we already run at PAGE_OFFSET */ +#endif lwz r7,__run_at_load-_stext(r26) cmplwi cr0,r7,1 bne 3f +#ifdef CONFIG_PPC_BOOK3E + LOAD_REG_ADDR(r5, __end_interrupts) + LOAD_REG_ADDR(r11, _stext) + sub r5,r5,r11 +#else /* just copy interrupts */ LOAD_REG_IMMEDIATE(r5, __end_interrupts - _stext) +#endif b 5f 3: #endif @@ -514,9 +533,6 @@ __after_prom_start: p_end: .llong _end - _stext 4: /* Now copy the rest of the kernel up to _end */ -#if defined(CONFIG_PPC_BOOK3E) - tovirt(r26,r26) -#endif addis r5,r26,(p_end - _stext)@ha ld r5,(p_end - _stext)@l(r5) /* get _end */ 5: bl copy_and_flush /* copy the rest */