From patchwork Mon Jan 18 04:27:25 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dongsheng Wang X-Patchwork-Id: 569421 X-Patchwork-Delegate: yorksun@freescale.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from theia.denx.de (theia.denx.de [85.214.87.163]) by ozlabs.org (Postfix) with ESMTP id 6F59314031B for ; Mon, 18 Jan 2016 15:36:36 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id E530AA7803; Mon, 18 Jan 2016 05:36:34 +0100 (CET) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 0zXHAlSU6WDk; Mon, 18 Jan 2016 05:36:34 +0100 (CET) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 70BA2A74E3; Mon, 18 Jan 2016 05:36:34 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id D41A4A778F for ; Mon, 18 Jan 2016 05:36:30 +0100 (CET) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 4vuAujyQ2v9n for ; Mon, 18 Jan 2016 05:36:30 +0100 (CET) X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 (only DNSBL check requested) Received: from na01-bl2-obe.outbound.protection.outlook.com (mail-bl2on0087.outbound.protection.outlook.com [65.55.169.87]) by theia.denx.de (Postfix) with ESMTPS id 4231BA74E3 for ; Mon, 18 Jan 2016 05:36:26 +0100 (CET) Received: from BN3PR0301CA0027.namprd03.prod.outlook.com (10.160.180.165) by BL2PR03MB355.namprd03.prod.outlook.com (10.141.89.25) with Microsoft SMTP Server (TLS) id 15.1.361.13; Mon, 18 Jan 2016 04:36:25 +0000 Received: from BL2FFO11FD051.protection.gbl (2a01:111:f400:7c09::177) by BN3PR0301CA0027.outlook.office365.com (2a01:111:e400:4000::37) with Microsoft SMTP Server (TLS) id 15.1.365.19 via Frontend Transport; Mon, 18 Jan 2016 04:36:24 +0000 Authentication-Results: spf=fail (sender IP is 192.88.168.50) smtp.mailfrom=nxp.com; nxp.com; dkim=none (message not signed) header.d=none;nxp.com; dmarc=none action=none header.from=nxp.com; Received-SPF: Fail (protection.outlook.com: domain of nxp.com does not designate 192.88.168.50 as permitted sender) receiver=protection.outlook.com; client-ip=192.88.168.50; helo=tx30smr01.am.freescale.net; Received: from tx30smr01.am.freescale.net (192.88.168.50) by BL2FFO11FD051.mail.protection.outlook.com (10.173.161.213) with Microsoft SMTP Server (TLS) id 15.1.355.15 via Frontend Transport; Mon, 18 Jan 2016 04:36:18 +0000 Received: from titan.ap.freescale.net ([10.192.208.233]) by tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id u0I4ZtuL023388; Sun, 17 Jan 2016 21:36:13 -0700 From: Dongsheng Wang To: Date: Mon, 18 Jan 2016 12:27:25 +0800 Message-ID: <1453091251-17433-4-git-send-email-dongsheng.wang@nxp.com> X-Mailer: git-send-email 2.1.0.27.g96db324 In-Reply-To: <1453091251-17433-1-git-send-email-dongsheng.wang@nxp.com> References: <1453091251-17433-1-git-send-email-dongsheng.wang@nxp.com> X-EOPAttributedMessage: 0 X-Matching-Connectors: 130975653845291891; (91ab9b29-cfa4-454e-5278-08d120cd25b8); () X-Microsoft-Exchange-Diagnostics: 1; BL2FFO11FD051; 1:OhRN7rcqQPkCpHiNaj5FAKOQRCjmDwFoaLFV1vMl0yLM+V6h8INm/pVUzf+6UjLDu034HBcmxyNRjj27hujliUYlqDl659tuLtSVd4FlGd63fdFL+/DUgZNnC/nlg7/fGa8zpFR3nneaSPvSmCJlwtxSqI1wx2qG/HcMMYeN47ln/i59kWFh39eUZaRRKVdcatCLDZ6Vx3PkSEaQoeuElX41Ii9h1/CpodOh0pz4c10YNGNFt0QW7gvPdZlBsI6Nj17yjV0vmkpSKEHhktYGOGeRuCVGAD26IWR8owPATW/qlfxUMo9dnPBY1O7O+3keekorVUgjUWgJ3Hsn07zx1CQWqujFJ/8+x3jk3zdLS50r0+kmNJj25LvxYzHf70sBDHotcBYM4TJAfhZ1wXp80Xo1oZr7vEK0xLS88JgphFRpBgG+M6DlAZeu0aEnOVGy0Oo43e4jLSYcNTwRZzRjrxVC4PVtk7F6KuKQNUe7kmrI0HNE9Rr2JfJz9djjFQoy X-Forefront-Antispam-Report: CIP:192.88.168.50; CTRY:US; IPV:NLI; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(2980300002)(1110001)(1109001)(339900001)(189002)(199003)(50226001)(6806005)(104016004)(33646002)(2351001)(1220700001)(36756003)(97736004)(85426001)(87936001)(229853001)(5003940100001)(105606002)(5001960100002)(19580405001)(19580395003)(77096005)(106466001)(1096002)(86362001)(92566002)(81156007)(575784001)(110136002)(2906002)(586003)(48376002)(47776003)(76176999)(2950100001)(5008740100001)(4326007)(50466002)(50986999)(189998001)(7059030); DIR:OUT; SFP:1101; SCL:1; SRVR:BL2PR03MB355; H:tx30smr01.am.freescale.net; FPR:; SPF:Fail; PTR:InfoDomainNonexistent; MX:1; A:1; LANG:en; MIME-Version: 1.0 X-Microsoft-Exchange-Diagnostics: 1; BL2PR03MB355; 2:HCpGHWlZeN7TIbmxcoESzvBRdAOr631VPoFf2CXkSDMgaubYW2rnMaj2MoVOr17mR0kGFxgtu5vAJBLBDcc6B3E7cAOOhbiUAEmnxpS/ExXvZqWb/GOohRzLgzSxDiMqqP0FKTCFvfm8DFVggd0wWA==; 3:gadNuMUIALfiMSC/QE7uYcfj5xVVh67hmJHl4SWNbXvTITmpMpz9MKP30Sp6xESnoyJ9VuD1T3Epnwzo5mq3tHXbsJfAYYFuL5gSzmUMXWBA/11/1hwlH7TOkR4PFNfm6VtTagbS/mdTGUkF/wCUO+Dxe3Dkn9RE4pw09YbNzn5pcVfZdNVLt9ix6Y3BUDf7Uc4ws8RLyQaEpHG32MHfbFf/WeFfOc7iwIjNt5tCP2o=; 25:1MP5ER/WSwnOKpQZKwCo6EyrNoHcrPPY6toAha6cPYQwRjr1RlWHW++QKoBAL6SHnnEssX9u2wvh8/Q0haAiy5TO2tYhtX8F9flDjF75F4E7W6JGnVp9HufIAIiklnyYTpwD7wl1EskA138sLJM2vobWpvy7PMcmdPLAt9yWdlYIo45QJ6bc9SZ+bjzF3qFs0Ruf0mYY2G9liscAhbjfgYl3HtJ6ADW28WW+pAPDmajZem/zF7VpTz15FHzgvEO4 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BL2PR03MB355; X-MS-Office365-Filtering-Correlation-Id: ee1d1c14-be9a-4d9a-f215-08d31fc0ec20 X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(2401047)(5005006)(13017025)(13015025)(8121501046)(520078)(13018025)(10201501046)(3002001); SRVR:BL2PR03MB355; BCL:0; PCL:0; RULEID:(400006); SRVR:BL2PR03MB355; X-Microsoft-Exchange-Diagnostics: 1; BL2PR03MB355; 4:sSICnRJsFZHPyIUBTieQ6sVqDqJl5+VFq0neZibFzvsbPVqVeFlWYkCcXep0zawXOkMzKTrnWiSK9Xzeu/lYGbW/FQt+I1r2q7dLOoA2ifAz2D4wCGonFlueK/LDipCq256ABUELyhQc57lVYx47xfZQ9vxD8eaj6Gi3V5lvD/L7CCmec6f4Ivt9Ma2B27WvM+knlt3jUkHLVZkGcXDXCTPQucRUoFfjL33vUUX/VtpxByWT8cU02g6xeoaTTF/t4O5uVdns/faPw48Qzup5UKrH7pOxRbfvfJCFd2ZZgwHleCxKRTs/DtxZVdZjXQ35JBMDKtp5xEe1L2jAx/SZeVT7FI2NYzgbBB8QJNiJYTwNBdJNyRMeSfjL+MTXz3hco3uBE+TFxrCsE8h8ZFczn9dMNBlygEiqvQasrCRwUV9wHlMd1wvUjFzRmHQDEt7cpDyTTeadzY3SYTZEGY67OecvczuMKOtzbJusRZo5GUI= X-Forefront-PRVS: 08252193F3 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BL2PR03MB355; 23:x2LsMwqlS5FODgqUEDDNnQ8mE/wWMQzFeEdlvqhY3h?= =?us-ascii?Q?lNXFN+KTliLrCCCSS5ncKOc1yjrzxWgtedTeUN7GlTcVriqOTywAtB3ak9SZ?= =?us-ascii?Q?Y0wcf0AHkhLU+ZgwSVJyo5efyUQ1m0EUn/NQeKL8vr4AAvoKTOpycuVvzN4n?= =?us-ascii?Q?EBK0k5NJKktukQ8Kf8Sz2NxFR2LzlkNSRhhLzQIu9uOTK7/BqyobSEtMNYvK?= =?us-ascii?Q?WmsqCCqng1cR0rtKh5tIIPjJ0wh+hd6mYi9AEBI77JrNV8iXF27mmZ0FZxuq?= =?us-ascii?Q?TypMKgDTQq5HTq7QUmAUDvvde3lp0viTw2C6mfYRhIqAq2QJnxRdkYORZDv5?= =?us-ascii?Q?BZ0Qw2AzCcIsdDC8fFkZl5WrrXLzlJZjwHT/GJCDUU+g/tPrUypySoSkEFY9?= =?us-ascii?Q?7tvrPpMtcIPj6gnCwUEeg1Jur3Y05UjWQ2Z2gjLu/+3BWEyjnHcUzp21hkkP?= =?us-ascii?Q?DEdJ+QkzyjrsRDvPSylWAZDIiPzAMT2FKtN7cI6QHv72hi1yV8PRv80+efly?= =?us-ascii?Q?JFQXzQtAGf94QhzRcq/BP3ZKl/SVwULOw6WPDdeuUd2fsVDXil2Bt6q6o0T6?= =?us-ascii?Q?SbGNO9VZot2Y9wudnYGUv2fCO08vVP0jhz5NYLYGCB2cT6P+O/co/oahO/Rl?= =?us-ascii?Q?t6vUjShoDZ+9tvPoCSV5MGhT4iGbqBfE8aeM/EsoG1Rppz3zT65iDEJFcXBc?= =?us-ascii?Q?iRBWKib/8+TlU2GurnhQyJ6IQ3q6aMRVOA2FBxc2HenVZxbsQklYKQQDRNK4?= =?us-ascii?Q?uKy05OhYIhkW8qojc5i9+skww8JZ6gfXOFdn4Uoi/tzSZ+SS9UfBfqFPd1cw?= =?us-ascii?Q?5XXEsMaJbsVh/7cDGInTf/22gQ3MfxaZTsFS7l+Lq6DVOaw/c21Vt1amQVbv?= =?us-ascii?Q?V1miW1x0JeEd2wW+woVg145WaTI0PzxbQm9NawURuez7QYWgWKHRPGSTsITQ?= =?us-ascii?Q?sAhp4h30StifDEWAWyvkWinfpqpsl1a9GQ+XezzX7bNOxrRHkvRxv66w+zmv?= =?us-ascii?Q?gq7mR/f5J996fN4uIOG+sQzxNZce4zn2xiQmtEGZ1BD2OIm2n2kcIHLvPqR/?= =?us-ascii?Q?3hGcF+Ev6dMiqsMgQRHCU0wnfeY0Urf15aIq2epePolCdQb3b0Yu42epUq5r?= =?us-ascii?Q?+QTs/3KQ8=3D?= X-Microsoft-Exchange-Diagnostics: 1; BL2PR03MB355; 5:ZhROT3HeLGWJcIwMg8VkX8/Pkd02YkDWHosBtgKbVL9u/+NRFLA1SeI6RtbWUZqgUHfCMhupf6T1DCGteyJYDSxNZY9kRAq0ymGCms7Jj5EDtETJRrvRS+A3mJpdRVu8Rdpf1FxuawvB5EErd0agWsK9Ocm4xbYKHEmK3OOfBhQ=; 24:WGCFDa/0kmTceR+td1nXSdK1pxGAS3jju1T1F1gT85zTvUSw9e2CSnD9XcwVFl0dd6yMYjdWRQGFlcWH+ziZMV2E32K+OnUoYlkGy+Y06m0= SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Jan 2016 04:36:18.5388 (UTC) X-MS-Exchange-CrossTenant-Id: 5afe0b00-7697-4969-b663-5eab37d5f47e X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e; Ip=[192.88.168.50]; Helo=[tx30smr01.am.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL2PR03MB355 Cc: trini@konsulko.com, chenhui.zhao@nxp.com, jason.jin@nxp.com, u-boot@lists.denx.de, jan.kiszka@siemens.com, alison.wang@nxp.com, frank.li@nxp.com, oss@buserror.net, twarren@nvidia.com, ijc@hellion.org.uk Subject: [U-Boot] [PATCH 3/9] ARM: ARMv7: PSCI: move target PC in each CPU stack no longer is shared X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.15 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" From: Wang Dongsheng All of cpu share the same targetPC space that is unsafe. So move target PC save space into CPU stack. Signed-off-by: Wang Dongsheng --- arch/arm/cpu/armv7/ls102xa/psci.S | 4 +-- arch/arm/cpu/armv7/mx7/psci.S | 4 +-- arch/arm/cpu/armv7/psci.S | 51 ++++++++++++++++++++++++++++------- arch/arm/cpu/armv7/sunxi/psci_sun6i.S | 4 +-- arch/arm/cpu/armv7/sunxi/psci_sun7i.S | 4 +-- arch/arm/cpu/armv7/virt-dt.c | 3 ++- arch/arm/include/asm/psci.h | 4 +++ arch/arm/mach-tegra/psci.S | 4 +-- 8 files changed, 53 insertions(+), 25 deletions(-) diff --git a/arch/arm/cpu/armv7/ls102xa/psci.S b/arch/arm/cpu/armv7/ls102xa/psci.S index 0b067d9..3a34064 100644 --- a/arch/arm/cpu/armv7/ls102xa/psci.S +++ b/arch/arm/cpu/armv7/ls102xa/psci.S @@ -36,9 +36,7 @@ psci_cpu_on: and r1, r1, #0xff mov r0, r1 - bl psci_get_cpu_stack_top - str r2, [r0] - dsb + bl psci_save_target_pc @ Get DCFG base address movw r4, #(CONFIG_SYS_FSL_GUTS_ADDR & 0xffff) diff --git a/arch/arm/cpu/armv7/mx7/psci.S b/arch/arm/cpu/armv7/mx7/psci.S index 34c6ab3..cb39f27 100644 --- a/arch/arm/cpu/armv7/mx7/psci.S +++ b/arch/arm/cpu/armv7/mx7/psci.S @@ -30,9 +30,7 @@ psci_cpu_on: push {lr} mov r0, r1 - bl psci_get_cpu_stack_top - str r2, [r0] - dsb + bl psci_save_target_pc ldr r2, =psci_cpu_entry bl imx_cpu_on diff --git a/arch/arm/cpu/armv7/psci.S b/arch/arm/cpu/armv7/psci.S index 2425f6a..0e0f98e 100644 --- a/arch/arm/cpu/armv7/psci.S +++ b/arch/arm/cpu/armv7/psci.S @@ -20,6 +20,8 @@ #include #include +#define SAVE_SPACE_TARGET_PC_OFFSET 0x0 + .pushsection ._secure.text, "ax" .arch_extension sec @@ -196,27 +198,58 @@ ENDPROC(psci_cpu_off_common) @ expects CPU ID in r0 and returns stack top in r0 ENTRY(psci_get_cpu_stack_top) - mov r5, #0x400 @ 1kB of stack per CPU - mul r0, r0, r5 - + @ Align psci_text_end minumum page size. Even if page is greater than + @ 4K, we still can ensure that data is always safe access by the CPU. ldr r5, =psci_text_end @ end of monitor text - add r5, r5, #0x2000 @ Skip two pages - lsr r5, r5, #12 @ Align to start of page + @ Detect page border + lsl r4, r5, #20 + cmp r4, #0 + beq out_psci_stack_align + add r5, r5, #PSCI_STACK_ALIGN_SIZE + lsr r5, r5, #12 lsl r5, r5, #12 - sub r5, r5, #4 @ reserve 1 word for target PC - sub r0, r5, r0 @ here's our stack! + +out_psci_stack_align: + mov r4, #PSCI_PERCPU_STACK_SIZE + add r0, r0, #1 + mul r0, r0, r4 + add r0, r0, r5 bx lr ENDPROC(psci_get_cpu_stack_top) +@ Save space in percpu stack tail. +@ expects CPU ID in r0 and returns save space address in r0. +ENTRY(psci_get_cpu_save_space) + mov r10, lr + + bl psci_get_cpu_stack_top + sub r0, r0, #PSCI_PERCPU_STACK_SIZE + + bx r10 +ENDPROC(psci_get_cpu_save_space) + +@ Expects cpu ID in r0 and PC in r2, please ignore the return value. +ENTRY(psci_save_target_pc) + push {lr} + + @ Save target PC into stack + bl psci_get_cpu_save_space + str r2, [r0, #SAVE_SPACE_TARGET_PC_OFFSET] + dsb + + pop {lr} + bx lr +ENDPROC(psci_save_target_pc) + ENTRY(psci_cpu_entry) bl psci_enable_smp bl _nonsec_init bl psci_get_cpu_id @ CPU ID => r0 - bl psci_get_cpu_stack_top @ stack top => r0 - ldr r0, [r0] @ target PC at stack top + bl psci_get_cpu_save_space + ldr r0, [r0, #SAVE_SPACE_TARGET_PC_OFFSET] b _do_nonsec_entry ENDPROC(psci_cpu_entry) diff --git a/arch/arm/cpu/armv7/sunxi/psci_sun6i.S b/arch/arm/cpu/armv7/sunxi/psci_sun6i.S index b96c5ef..e8981af 100644 --- a/arch/arm/cpu/armv7/sunxi/psci_sun6i.S +++ b/arch/arm/cpu/armv7/sunxi/psci_sun6i.S @@ -135,9 +135,7 @@ psci_cpu_on: push {lr} mov r0, r1 - bl psci_get_cpu_stack_top @ get stack top of target CPU - str r2, [r0] @ store target PC at stack top - dsb + bl psci_save_target_pc movw r0, #(SUN6I_CPUCFG_BASE & 0xffff) movt r0, #(SUN6I_CPUCFG_BASE >> 16) diff --git a/arch/arm/cpu/armv7/sunxi/psci_sun7i.S b/arch/arm/cpu/armv7/sunxi/psci_sun7i.S index 59d7ff0..a1fcc71 100644 --- a/arch/arm/cpu/armv7/sunxi/psci_sun7i.S +++ b/arch/arm/cpu/armv7/sunxi/psci_sun7i.S @@ -124,9 +124,7 @@ psci_cpu_on: push {lr} mov r0, r1 - bl psci_get_cpu_stack_top @ get stack top of target CPU - str r2, [r0] @ store target PC at stack top - dsb + bl psci_save_target_pc movw r0, #(SUN7I_CPUCFG_BASE & 0xffff) movt r0, #(SUN7I_CPUCFG_BASE >> 16) diff --git a/arch/arm/cpu/armv7/virt-dt.c b/arch/arm/cpu/armv7/virt-dt.c index f1251d1..5ca353c 100644 --- a/arch/arm/cpu/armv7/virt-dt.c +++ b/arch/arm/cpu/armv7/virt-dt.c @@ -126,7 +126,8 @@ int psci_update_dt(void *fdt) #ifndef CONFIG_ARMV7_SECURE_BASE /* secure code lives in RAM, keep it alive */ fdt_add_mem_rsv(fdt, (unsigned long)__secure_start, - __secure_end - __secure_start); + __secure_end + CONFIG_MAX_CPUS * PSCI_PERCPU_STACK_SIZE + + PSCI_STACK_ALIGN_SIZE - __secure_start); #endif return fdt_psci(fdt); diff --git a/arch/arm/include/asm/psci.h b/arch/arm/include/asm/psci.h index f7b8f65..274dbda 100644 --- a/arch/arm/include/asm/psci.h +++ b/arch/arm/include/asm/psci.h @@ -18,6 +18,10 @@ #ifndef __ARM_PSCI_H__ #define __ARM_PSCI_H__ +#define PSCI_STACK_ALIGN_SIZE 0x1000 + +/* 1kB for percpu stack */ +#define PSCI_PERCPU_STACK_SIZE 0x400 #define PSCI_FN_BASE 0x84000000 #define PSCI_FN_ID(n) (PSCI_FN_BASE + (n)) diff --git a/arch/arm/mach-tegra/psci.S b/arch/arm/mach-tegra/psci.S index 5f326c9..e83566e 100644 --- a/arch/arm/mach-tegra/psci.S +++ b/arch/arm/mach-tegra/psci.S @@ -91,9 +91,7 @@ ENTRY(psci_cpu_on) push {lr} mov r0, r1 - bl psci_get_cpu_stack_top @ get stack top of target CPU - str r2, [r0] @ store target PC at stack top - dsb + bl psci_save_target_pc ldr r6, =TEGRA_RESET_EXCEPTION_VECTOR ldr r5, =psci_cpu_entry