From patchwork Sat Jul 18 20:08:47 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Scott Wood X-Patchwork-Id: 497408 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 F0DAF14077A for ; Sun, 19 Jul 2015 06:22:04 +1000 (AEST) Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id D44FB1A3007 for ; Sun, 19 Jul 2015 06:22:04 +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 664D51A17F7 for ; Sun, 19 Jul 2015 06:09:33 +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:26 +0000 From: Scott Wood To: Subject: [RFC PATCH 10/17] powerpc/book3e: support CONFIG_RELOCATABLE Date: Sat, 18 Jul 2015 15:08:47 -0500 Message-ID: <1437250134-307-11-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:r2v8YMwW73V2GLDjW85ubB97dQgjNBaYGCSZF/HCXRsrGMxo0UuEzywgYLdIfZZm; 3:BhIOo9FXPatkWGv4a/uuxP9kI3LQ/cTh+xtBL9KRrzkFsn7v/4wmuVAbP/+/jAnsiBugeCN5Fz8gHoS+mUwA/Xgk2ml/EQRgdVltX1GBtKt8mGKbq4M/6JEU8eaPrk//Cc+jMtUxQMGdVwHBPzmX4g==; 25:lMC83YSahbfW3VYz3ZN5dsankaX3sfxNK05MbmZJNw5YXMZ/+VVI1UBg3liMnC2eVxra73Bxlpr+8vBhrYY21hZFv1dl0pqqIPzTx86xjZUHjd/Lc1ehxUqh3qOhdskk1oe0x3yxK+LgjGYO23NgGR9B6kFt8qo1/t7Vc9O8nlXoFYkJQBQeyMYSNf3JH3Q7ZaPX//zPZCDLMDo2Ujq0dv+MfmV+1p8NkxE1G+Q/eKZsTlWeL8Y7IXTEeAf4FZHoumCokZBTm2SnTFP1MqKi6Q== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:CY1PR03MB1486; X-Microsoft-Exchange-Diagnostics: 1; CY1PR03MB1486; 20:m2CADildB7uzXVQ5xU74BvSe4axnLMGTskArtmTzT/sXotIxDimYTsUuGIJlFq4UgfVHCO2xEoJpZerT/DI3JPtsh3WMTfp1jaRx2z7HKPvyHmwaE7CzRoZrmkrsH57fQ/E3fc33xOQY1CxaBOYlSlqsHWwvzBzovJWo6yAfgLBffqNNqcRT1Y6kvggkjUaq8M0kObVfV+4kKR1RxmCoMtpq1u2BBwoaJvfOervSGY88rH6avCyAvECP6YwL7UOqFiqBQcnjBG7P/lwYiE+aRzrraRFv/ByXfCRnYXRq0t66Pi6Umk0OcJFKLo7k+SIK4r80RkrJGxbel0mFcKBBVjHRu5V6gvU+xGMGZRe62dGbS5GWR0fbfX8RZXiYuzUCgeAH/UbkHjNBBnYYjtqgoYRsh/zF8YDsybelpOc8URuSIOfWZgtVwz4D9Kv1eGvCiuL9Ao2qUZ2V1yfUBKeBXnb1sDK2XLZEfdCtc5yr5JZq6zzmol3scAM2I1W3Y+/E; 4:dtCQSvxpobAFBzYqN6RH0CL6NmTOAdWARqw06h6MQs7SfQf9R1a5Zulvf8JcNg6Airb+3Igc/sIZi12Dp+TsSWGa+eyUNX6Ev+hTYBBe6cTIMBm7KJmajGRvovdNzcmAt7ZeTvPwYBqwa6Eiag9EH1uvn0ZwwbizlCzIPwlM9L6JyvkQNIn+ojzAHa3DhdFEXGB5o03A5iy1u3wnIgH5Dzy4jXaZbhYDVAxEdqi5D0H5TjZaELqKu14A9hhi/mzIZj/kDenktDr5T6sKUf63QFH0PuDAqaztjXgA9Pq8ZYo= 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)(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:va0xTWvG10Ua+ppGTego4Ac4BaRRHkPXvc/hqjjRsBgQB9nu4HUHKy8ctpW+pEs/uutStfYHjUVaS/efnMMhBI+3CQpHGuSJHk+vpgxKXlf4YNUeCPy1vqvEvMeiCt/uUjAU4ocd1RTnubXQLsYqimVXJOmr5aCeEA16Y8AA0vSSAmoj6EFqyF/v2if9sjGD6Ob6UpjFxSxacyTaGuEP+/THUkIhvP4hVzkJ51lFBe06NQtYFMegZ85YI+rHyQcUCHVN9IPoLae7ZnORxmlVeTTqjtYFL2bbf6FOHORzF7p+PwFKz+J18AZPSwXuUFjOhmjE269GBRPnS+cRsxrMt60eYUD2lvbPNZaGcaCxm7QQjVnRYO2eh9vjgykxVRoHWT3SD1mXRT2MbFgmC664XKA5ChxsFIxYCNh+VvhytgDqaVbhUqVk104RVflvfHVsvFHYGNbSqN6Q07vsRv3o7cdR6MkVw+QIdjc5Fzo/pklavWrXC2Lc5eb2CmoodmqbSZGpkNsIliqT18Y/kkBm++6YFdnlidAxqUPba3tA+HBaN4Sgp4Nx4atfu3miabX9rGS04lPG4FZ8+Bkkee2SEp9vSBTnTXhGeYmMHKAtbm3suNkVYRSmtf+vHO0YW3ekuLr398wHBTvaouveoBsBq0orTP/dNYMLz9RN8hBeaENrasOopV+Kaj1bEfb+8j9ZIbZMZXYnGy4StgP4Dm/ihN0XuMWY+JuvRS+UUTTQe3wqs407LaV+dPzP1/CdbuWprPkP6ef7eRrXkHBZGiP4hHMowzjKX/jt6mkHZlAetdpti0ih9bRGH6kV8rFFPdoEsClCwjVXBPVaLyPMccO4+Yjt18vjD2aibBPCX32CswhmrWhcmaxAhL5q7mDCPDzuxBB0YU6KoancKTav2WD19Hp9eOcO2vHgDguVS+Od7zE= X-Microsoft-Exchange-Diagnostics: 1; CY1PR03MB1486; 5:NizqOQFOu8Kmgb0IoXcYbtsEHeWWw2bxt85AksbZ1Nm8laxroo8udf7YXyOjuB977vuhFY1LGf9MVpJkNB9mLj//y0wO/qJ0wpIBWwNZs9cwW6zomujieBa3v6rCKADiwLE+/WzDG/uUaew1KB/k4A==; 24:netuRrwRIl9/tgZsfKzZQTGl4nzUqtOKk3fw0+ydx+iyc1hiL+Sd6RKGVbG5b+WdtW2YiIxMy0EyEBX/x/FG3cr1HAVx/eAmqZpJ/RIJpdw=; 20:1wV5D6Nutmcj+J3OLvZuUcrn28Lq0Ney778d3RkJWruLPLt0RbFkP3K8DJGUlN1X3P4Hr63rKm+QjauOn8EXbA== X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Jul 2015 20:09:26.0287 (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 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 */