From patchwork Wed Aug 26 12:09:46 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: chenhui zhao X-Patchwork-Id: 510832 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 867651402A3 for ; Wed, 26 Aug 2015 22:13:51 +1000 (AEST) Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 6CDFE1A2B40 for ; Wed, 26 Aug 2015 22:13:51 +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-bn1bon0110.outbound.protection.outlook.com [157.56.111.110]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id ED9941A0179 for ; Wed, 26 Aug 2015 22:10:00 +1000 (AEST) Received: from BN3PR0301MB1281.namprd03.prod.outlook.com (10.161.210.145) by BN3PR0301MB1235.namprd03.prod.outlook.com (10.161.207.23) with Microsoft SMTP Server (TLS) id 15.1.256.15; Wed, 26 Aug 2015 12:09:54 +0000 Received: from BN3PR0301CA0058.namprd03.prod.outlook.com (10.160.152.154) by BN3PR0301MB1281.namprd03.prod.outlook.com (10.161.210.145) with Microsoft SMTP Server (TLS) id 15.1.243.23; Wed, 26 Aug 2015 12:09:52 +0000 Received: from BN1AFFO11FD022.protection.gbl (2a01:111:f400:7c10::132) by BN3PR0301CA0058.outlook.office365.com (2a01:111:e400:401e::26) with Microsoft SMTP Server (TLS) id 15.1.256.15 via Frontend Transport; Wed, 26 Aug 2015 12:09:52 +0000 Authentication-Results: spf=fail (sender IP is 192.88.158.2) smtp.mailfrom=freescale.com; freescale.mail.onmicrosoft.com; dkim=none (message not signed) header.d=none; Received-SPF: Fail (protection.outlook.com: domain of freescale.com does not designate 192.88.158.2 as permitted sender) receiver=protection.outlook.com; client-ip=192.88.158.2; helo=az84smr01.freescale.net; Received: from az84smr01.freescale.net (192.88.158.2) by BN1AFFO11FD022.mail.protection.outlook.com (10.58.52.82) with Microsoft SMTP Server (TLS) id 15.1.256.10 via Frontend Transport; Wed, 26 Aug 2015 12:09:52 +0000 Received: from localhost.localdomain ([10.193.20.174]) by az84smr01.freescale.net (8.14.3/8.14.0) with ESMTP id t7QC9iML012923; Wed, 26 Aug 2015 05:09:49 -0700 From: Chenhui Zhao To: , Subject: [PATCH v2,3/5] Powerpc: mpc85xx: refactor the PM operations Date: Wed, 26 Aug 2015 20:09:46 +0800 Message-ID: <1440590988-25594-3-git-send-email-chenhui.zhao@freescale.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1440590988-25594-1-git-send-email-chenhui.zhao@freescale.com> References: <1440590988-25594-1-git-send-email-chenhui.zhao@freescale.com> X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1; BN1AFFO11FD022; 1:uizGI95t+thHWrzSUReeN6HWVjrxQIliTXZxZUhq8s3SnJhAgMk918iEp74UKHu1BewFVxlla0+OYSHR6C1kG7qmSPP5kT1AHQAyfjliUdak7UKSMqTOEfKyS4l061j9aJio34F/zw76CyoYgav6/oGCXHiWeXiegkL7hLbwdSVmUZi7+Q/zDDO9xeDfTiKFbK0+WFXRUlbJFC1wxGEpdFGbJgjWZCaFrT4grFbL1g1LawQpM0sAMIN+WYa7NwtWgiI8m7K+UbfnIL0ui59jvR7A3miaPAzMyYzWAnbzNQnhXPfZHsIlk7Oje4QTfJWAjvsGMH4pk8FMDzNPS40Xt3YuUnVtXHOEMynlBNbE0T1L+edzUEkc0KI2bIrGyrnV3XhZq9AVcwHr4GzlSmtnG6T50BiYYjuySruq2Fow4Rw= X-Forefront-Antispam-Report: CIP:192.88.158.2; CTRY:US; IPV:NLI; EFV:NLI; SFV:NSPM; SFS:(10019020)(6009001)(2980300002)(3050300001)(339900001)(189002)(199003)(50466002)(4001450100002)(107886002)(36756003)(48376002)(189998001)(33646002)(76176999)(64706001)(47776003)(5003940100001)(50986999)(106466001)(19580405001)(5001960100002)(5001830100001)(5007970100001)(229853001)(46102003)(97736004)(19580395003)(77096005)(49486002)(69596002)(85426001)(5001860100001)(5001770100001)(6806004)(86362001)(104016003)(77156002)(105606002)(2950100001)(81156007)(62966003)(50226001)(68736005)(87936001)(92566002)(4001540100001)(2004002)(4001430100001); DIR:OUT; SFP:1102; SCL:1; SRVR:BN3PR0301MB1281; H:az84smr01.freescale.net; FPR:; SPF:Fail; PTR:InfoDomainNonexistent; MX:1; A:1; LANG:en; MIME-Version: 1.0 X-Microsoft-Exchange-Diagnostics: 1; BN3PR0301MB1281; 2:xFq3Y+b/GVtwazfG0hZEmTUtqd+R9MUfXTDbbsj7y58FFDoAainE+mmWwYtYDH0rrznsNiBL3SxKA2z+a2a4MEco79Xe11Q4/EkTeS5Y39gEkMRIeTkQRcY6WftfwR11TBIuDkQ1n1jyVBUg9VBTgkDdwmx+H63FCF8A+wKN+3o=; 3:r6vp8rhGGkO5+DzeDoicHpq23FL04tmV2Gh+wLX7nxiGPRBHpx/MCx5augJbHjHtYthMS9RZIT/56WDh2jXaX+caVoBN7S4MtocCbgze22YUGn9QvZQR6nuiVjrRjkBnRcCpaZolZgo5i4qayQ5Hb8ljd25aP5cmP9TJZVh7UosuaS6ACH3qKUL69DL2C/J/YYXDlsu//fJZEig6GgS8BjY1t0ukD861R+pdWyb0q5g=; 25:8fDGVSzQy4KKt/YOr8AQ3Z+l6Hgi3shZdUJ1jIX/Fnfhz+tfnNkwtdWl1GxkjP0QEFsP78Z8PQ2riZpOxzwd36n1E0N+GkqeJhD1eFWWyuJs/3cV+4vEFDROx46eoj/Pnw+g7PopMaSATMePNBPzNKvVQxTcPhryRV/bt6RjFvVzibOwDnWTnWX8HVxGy7SlvadpL2VjI1yge/91gbjupYuiwWJCJkR8YBJlYqFTXLNnuRXv/ztEVuf90BkzUgEePN+pEaoj1E/3pLHaFAbZxw== X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:; SRVR:BN3PR0301MB1281; UriScan:; BCL:0; PCL:0; RULEID:; SRVR:BN3PR0301MB1235; X-Microsoft-Exchange-Diagnostics: 1; BN3PR0301MB1281; 20:I4l9rhy8fcXdwTZZ6XBnsluWjr3qIwjg2HPwIbZ7jbNnDr8+9KVu5ILR6OgGfh+7PODrODPexmoeFq2bwwe2oFcYryDlwn3CnqU1cpb5iAHYTuAb9WY/tmjm9jZbKVVVot17W+p7sXKHKIf3Tng27GlzxcPxZthd9j/XzJPOSrwfPjInYIYTkX640GSDMyr9OcRVgBHPU8qO5x3dg+SIAZqbfvj+kOQLaemd/aWsWsX7L+OcCgupVPTDJxnq8785M7zUCcTCN6xmL8HLXE4r9l4ekuxIyw71tzlaucDIGBLheLAnhChoCN+Xkay642XWynlzCM0YwJOmNbi8yn2v284HwxqU1sn8WkUeTWtrORM=; 4:zR4mLnTCCFzug2eUBPKN/PWgRIW8OjpEOMBT94R23NbJP1XcVv7WjmDLPbYPYi4AnGiBBMiO/E4ULhZQ2BjbQsgb0fida4jnGcOY8UAEkiXzVTt+SjcOrvrugzv6nCIMQzC5xlrvMnYrhzOOgHrA+F8EQ7WQPDwuUqjcE0XjBEBIGJ37uCZIZ+JX71Xuh8FqKCoTr6mGvTQf6+7kt5Ird/V98SKHyEyTLIT6C17PKogInT/6mIUaM1UjhLoYvold4CEsciIjOgYp54v1YyyxaiDeNuP3taKjAjHXGZOmwhUMbLVHZRKADCYke7L/NhE6 X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(5005006)(8121501046)(3002001); SRVR:BN3PR0301MB1281; BCL:0; PCL:0; RULEID:; SRVR:BN3PR0301MB1281; X-Forefront-PRVS: 0680FADD48 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BN3PR0301MB1281; 23:fghgqppObwET24LWnmFbUo57qbpp0lxeWR4NaYc?= =?us-ascii?Q?JeFQ5GsRQ04FiWEtS7zOiOek7bsRCWDU5I/KSsCh+NDrdJnPLkv2bcbhGPEM?= =?us-ascii?Q?9C7wvVt6KOBWg1sCwoWMQxf98ZGfFqSeyw29iNSphIZBvLDinwQVfTXWc1A3?= =?us-ascii?Q?yZ4Cy+iQe0ITZWJXDDe/kxu8gmlXlpJuyBVf5Nd4/1EpXz/FVoRafgutQ/X4?= =?us-ascii?Q?nE2GCo2XAcINB4FltCrmqMu2U+DL2QmTEiQHYp1n4btDSDojAVRxOYyNbO2f?= =?us-ascii?Q?TAd1jbTTChB4/JZVJFSdfNkJ7sBOtJO1Xb9kCyh6Onjdh35Sop3pZriXU4TT?= =?us-ascii?Q?lBh7+i+qlupbUj1Xw27LvPRpPj0EmJfur11YbUwH/NNDaPYn6d3477F00Cwe?= =?us-ascii?Q?1hCtT2nN7ZTAW2i/D6WjIEQCE1MIvz+/Yl5mOhXsVdOp5cKFKCJehJspFGb/?= =?us-ascii?Q?p3eSjGhMi6DUqjgSRXmaNfvTWMrcwHXk7cGB/P0L4HDqObclyKMSu8tP5UvY?= =?us-ascii?Q?5+AFkxwz/7L1RPiVehPnktt0/XFlGG8IRecDZuTqMvxPqCH5rJU8NRfwxeSY?= =?us-ascii?Q?HWxZATilN/4OCk32UioWeK8Ng3BmqE275ocM2Tvxsc35HmoojAZ14/ijmV2e?= =?us-ascii?Q?qM7iOTbr1l9Uade0XqliqKknj25sBTgwJuhIuCFwdM8mrnH0VniYWe9jaxrj?= =?us-ascii?Q?Mdau9jpAWfeOvLCaip5Dgn3Fz/gj/J45lq5aGphZYlClqljaxRSm53pgLtla?= =?us-ascii?Q?q2fnLSBRrMM+N5VeDpCT8oVOpqieolVLxmrJjKJ6pqBjgg8+ncdOYTUaOfb3?= =?us-ascii?Q?gpJjtjIcQihgou+3hxOdPmstZ7e+uvqgsPhLS6/80dmQQXZFznvFUdHoAjae?= =?us-ascii?Q?pxWpWrTicGObXzX0rWPHVse1X2wfvK2X0n5dgpRWOXahFZCc7MTG/ys+47bU?= =?us-ascii?Q?UFQKs2NEDm0otHMs3PD2VskeLLed7r1f3gDPfA6V43vXHUepgz4dANjtQV+k?= =?us-ascii?Q?+aceEzqS8LzZyEAV9ZyPJEnNbtQjrDsWoqp2HjR6HE7lnL9u0KSnf4jxpVKL?= =?us-ascii?Q?3JSucf20eEbavz1w9KM+fQzo4jEcloxbdlQlpcb3RLEgn6++kcTmkGj9SrAS?= =?us-ascii?Q?qvoh9pGKZMTVIcYYRhv30JWIvRV5EFe4LBxo+46k58Auenal1aLwEhaIBOQS?= =?us-ascii?Q?dTYOfEQsPepTy0sLaFJWszAGwYZownMX8lJAW4gle52z9QIuGcR49aQhuSro?= =?us-ascii?Q?4uf729Rl1tVwobplIqvvS/L3PsNKgswVJEgM7mVeHLd+nNqSvU3LmputvZjK?= =?us-ascii?Q?mC+J7A5Olzjw/dWhy+aboZkM=3D?= X-Microsoft-Exchange-Diagnostics: 1; BN3PR0301MB1281; 5:EsT3A1n5pD2VbHqNSKbI0O0myiWd68t6nvKzogFmlHSFX1urn3vkpGbW+asCO6QUa/ekZVcaZosqAq+oSpGYeN8xSqk6OAgbsKQLaKG+v6VHr3v/Wq4qL21kAm3Gr5y6dpKrr91smaH+Al0RPmg2Pw==; 24:x0E5yoY/jSQN3Fqe0/DvbciLqc+cfprbP75xBRkldJpRfuRI5iUzvAVEKqSlFt8oYEumFAqs030uyT1HfZnHouxUH9Ec5pqGefMNkRRpjEc=; 20:QdY7eRKaEUjKyJsLVKU9kOQEP+rEvz+i5vHVLEs+HwLZgFJoxZ+cEhpixvRM21WoqfC8lEYmBE4U2gTlXNo7Fw== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Aug 2015 12:09:52.1354 (UTC) X-MS-Exchange-CrossTenant-Id: 710a03f5-10f6-4d38-9ff4-a80b81da590d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=710a03f5-10f6-4d38-9ff4-a80b81da590d; Ip=[192.88.158.2]; Helo=[az84smr01.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN3PR0301MB1281 X-Microsoft-Exchange-Diagnostics: 1; BN3PR0301MB1235; 2:N32oqTo8dHcdgNjLWNCINf3f8ULGFGZtEDPic9kgpcQCJPltOlusbWUKHg0Vo9c+bRnUmXQ8JtY82S/gqDYHEBLKbDA5AqA8w9LWo4bjXjszIjPYrIayfoJkzaJNm3Aa98aNMO+3bu+GChAex9nRsMCOyFWi8AxXka3OJ/Dm6Mc=; 3:sZdJCt13F7JFwYNuBHg1a/7vvKbN7/K+r71Hs5YczG5vRa/C1c1E8mrfWXtOdffBIK0IQytZnz9AuHeUHRou4N5Yy24UgmAjO3ZnFESCFy5aYScQPTcrFDJC3tjN5l7Pb6emGmjZwh6ctbuDTmMl+cuLh4qOMvPB48+WtOBBSuSAU7Xvn1eo+gj+oO+dV8hmpqyHAuBb52E+JkuNdKm+dBjOpXv+CPRweNM8vvLG6/4=; 25:/M+vu8MDZAe3+hpJJrBrFNruhcPLANDoCXN7ljJ0Cb07AQCWFLAAdDpapVCQbL1R7hqBFv8wVzBy5zuNrv5c9701RM7qTEg5EI5AQFEkTajCww/1MDU1TJ8lG8D+aXgNeHXE00XaTYS64lDd4kCYhg5naWTVTY8crH+lpAlU93+9tnnvu4FXqWNCisyuQ4FIjfAecsnOBgcwn03yHIOS2qNNVwcGS9l4fXqhNfqhF8r8VXK5GNqq3O3i3aoEk6jYgVlXFg6zbxhVH1Fe13wIRg==; 23:7n2c2J22Xwn2BYe9xweqkGhh0MKZV+gEADVnzl7KKYa4udkybdP74oDVP/b7VIDRfleGD7PVtc+TZOA564U5UhZrx6zXyHspy9X/LTCgPPl4TYIyYDhH9eYdZDe/xiiqFtzeg6yOl/2+mL5fV9z3unA4dkOuyzSZh71cEO3oiiMIXtzONaopeOi2BATUS1Jt X-OriginatorOrg: freescale.com 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: linux-kernel@vger.kernel.org, Jason.Jin@freescale.com Errors-To: linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org Sender: "Linuxppc-dev" Freescale CoreNet-based and Non-CoreNet-based platforms require different PM operations. This patch extracted existing PM operations on Non-CoreNet-based platforms to a new file which can accommodate both platforms. In this way, PM operation codes are clearer structurally. Signed-off-by: Chenhui Zhao Signed-off-by: Tang Yuantian --- major changes for v2: * moved mpc85xx_cpu_die() * added qoriq_pm_ops->cpu_die() in smp_85xx_mach_cpu_die(). it puts the dying cpu in a low power mode arch/powerpc/platforms/85xx/Makefile | 1 + arch/powerpc/platforms/85xx/mpc85xx_pm_ops.c | 106 +++++++++++++++++++++++++++ arch/powerpc/platforms/85xx/smp.c | 74 +++++-------------- arch/powerpc/platforms/85xx/smp.h | 1 + 4 files changed, 127 insertions(+), 55 deletions(-) create mode 100644 arch/powerpc/platforms/85xx/mpc85xx_pm_ops.c diff --git a/arch/powerpc/platforms/85xx/Makefile b/arch/powerpc/platforms/85xx/Makefile index 1fe7fb9..7bc86da 100644 --- a/arch/powerpc/platforms/85xx/Makefile +++ b/arch/powerpc/platforms/85xx/Makefile @@ -2,6 +2,7 @@ # Makefile for the PowerPC 85xx linux kernel. # obj-$(CONFIG_SMP) += smp.o +obj-$(CONFIG_FSL_PMC) += mpc85xx_pm_ops.o obj-y += common.o diff --git a/arch/powerpc/platforms/85xx/mpc85xx_pm_ops.c b/arch/powerpc/platforms/85xx/mpc85xx_pm_ops.c new file mode 100644 index 0000000..ed356dd --- /dev/null +++ b/arch/powerpc/platforms/85xx/mpc85xx_pm_ops.c @@ -0,0 +1,106 @@ +/* + * MPC85xx PM operators + * + * Copyright 2015 Freescale Semiconductor Inc. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + */ + +#define pr_fmt(fmt) "%s: " fmt, __func__ + +#include +#include +#include + +#include +#include +#include + +static struct ccsr_guts __iomem *guts; + +static void mpc85xx_irq_mask(int cpu) +{ + +} + +static void mpc85xx_irq_unmask(int cpu) +{ + +} + +static void mpc85xx_cpu_die(int cpu) +{ + u32 tmp; + + tmp = (mfspr(SPRN_HID0) & ~(HID0_DOZE|HID0_SLEEP)) | HID0_NAP; + mtspr(SPRN_HID0, tmp); + + /* Enter NAP mode. */ + tmp = mfmsr(); + tmp |= MSR_WE; + asm volatile( + "msync\n" + "mtmsr %0\n" + "isync\n" + : + : "r" (tmp)); +} + +static void mpc85xx_cpu_up_prepare(int cpu) +{ + +} + +static void mpc85xx_freeze_time_base(bool freeze) +{ + uint32_t mask; + + mask = CCSR_GUTS_DEVDISR_TB0 | CCSR_GUTS_DEVDISR_TB1; + if (freeze) + setbits32(&guts->devdisr, mask); + else + clrbits32(&guts->devdisr, mask); + + in_be32(&guts->devdisr); +} + +static const struct of_device_id mpc85xx_smp_guts_ids[] = { + { .compatible = "fsl,mpc8572-guts", }, + { .compatible = "fsl,p1020-guts", }, + { .compatible = "fsl,p1021-guts", }, + { .compatible = "fsl,p1022-guts", }, + { .compatible = "fsl,p1023-guts", }, + { .compatible = "fsl,p2020-guts", }, + { .compatible = "fsl,bsc9132-guts", }, + {}, +}; + +static const struct fsl_pm_ops mpc85xx_pm_ops = { + .freeze_time_base = mpc85xx_freeze_time_base, + .irq_mask = mpc85xx_irq_mask, + .irq_unmask = mpc85xx_irq_unmask, + .cpu_die = mpc85xx_cpu_die, + .cpu_up_prepare = mpc85xx_cpu_up_prepare, +}; + +int __init mpc85xx_setup_pmc(void) +{ + struct device_node *np; + + np = of_find_matching_node(NULL, mpc85xx_smp_guts_ids); + if (np) { + guts = of_iomap(np, 0); + of_node_put(np); + if (!guts) { + pr_err("Could not map guts node address\n"); + return -ENOMEM; + } + } + + qoriq_pm_ops = &mpc85xx_pm_ops; + + return 0; +} diff --git a/arch/powerpc/platforms/85xx/smp.c b/arch/powerpc/platforms/85xx/smp.c index 0b75e8e..f9552b8 100644 --- a/arch/powerpc/platforms/85xx/smp.c +++ b/arch/powerpc/platforms/85xx/smp.c @@ -2,7 +2,7 @@ * Author: Andy Fleming * Kumar Gala * - * Copyright 2006-2008, 2011-2012 Freescale Semiconductor Inc. + * Copyright 2006-2008, 2011-2012, 2015 Freescale Semiconductor Inc. * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the @@ -15,7 +15,6 @@ #include #include #include -#include #include #include #include @@ -26,9 +25,9 @@ #include #include #include -#include #include #include +#include #include #include @@ -43,24 +42,11 @@ struct epapr_spin_table { u32 pir; }; -static struct ccsr_guts __iomem *guts; +#ifdef CONFIG_HOTPLUG_CPU static u64 timebase; static int tb_req; static int tb_valid; -static void mpc85xx_timebase_freeze(int freeze) -{ - uint32_t mask; - - mask = CCSR_GUTS_DEVDISR_TB0 | CCSR_GUTS_DEVDISR_TB1; - if (freeze) - setbits32(&guts->devdisr, mask); - else - clrbits32(&guts->devdisr, mask); - - in_be32(&guts->devdisr); -} - static void mpc85xx_give_timebase(void) { unsigned long flags; @@ -71,7 +57,7 @@ static void mpc85xx_give_timebase(void) barrier(); tb_req = 0; - mpc85xx_timebase_freeze(1); + qoriq_pm_ops->freeze_time_base(true); #ifdef CONFIG_PPC64 /* * e5500/e6500 have a workaround for erratum A-006958 in place @@ -104,7 +90,7 @@ static void mpc85xx_give_timebase(void) while (tb_valid) barrier(); - mpc85xx_timebase_freeze(0); + qoriq_pm_ops->freeze_time_base(false); local_irq_restore(flags); } @@ -126,31 +112,25 @@ static void mpc85xx_take_timebase(void) local_irq_restore(flags); } -#ifdef CONFIG_HOTPLUG_CPU static void smp_85xx_mach_cpu_die(void) { unsigned int cpu = smp_processor_id(); - u32 tmp; local_irq_disable(); + hard_irq_disable(); + /* mask all irqs to prevent cpu wakeup */ + qoriq_pm_ops->irq_mask(cpu); + idle_task_exit(); - generic_set_cpu_dead(cpu); - mb(); mtspr(SPRN_TCR, 0); + mtspr(SPRN_TSR, mfspr(SPRN_TSR)); - cur_cpu_spec->cpu_down_flush(); + generic_set_cpu_dead(cpu); - tmp = (mfspr(SPRN_HID0) & ~(HID0_DOZE|HID0_SLEEP)) | HID0_NAP; - mtspr(SPRN_HID0, tmp); - isync(); + cur_cpu_spec->cpu_down_flush(); - /* Enter NAP mode. */ - tmp = mfmsr(); - tmp |= MSR_WE; - mb(); - mtmsr(tmp); - isync(); + qoriq_pm_ops->cpu_die(cpu); while (1) ; @@ -398,16 +378,6 @@ static void smp_85xx_setup_cpu(int cpu_nr) smp_85xx_basic_setup(cpu_nr); } -static const struct of_device_id mpc85xx_smp_guts_ids[] = { - { .compatible = "fsl,mpc8572-guts", }, - { .compatible = "fsl,p1020-guts", }, - { .compatible = "fsl,p1021-guts", }, - { .compatible = "fsl,p1022-guts", }, - { .compatible = "fsl,p1023-guts", }, - { .compatible = "fsl,p2020-guts", }, - {}, -}; - void __init mpc85xx_smp_init(void) { struct device_node *np; @@ -431,22 +401,16 @@ void __init mpc85xx_smp_init(void) smp_85xx_ops.probe = NULL; } - np = of_find_matching_node(NULL, mpc85xx_smp_guts_ids); - if (np) { - guts = of_iomap(np, 0); - of_node_put(np); - if (!guts) { - pr_err("%s: Could not map guts node address\n", - __func__); - return; - } +#ifdef CONFIG_HOTPLUG_CPU +#ifdef CONFIG_FSL_PMC + mpc85xx_setup_pmc(); +#endif + if (qoriq_pm_ops) { smp_85xx_ops.give_timebase = mpc85xx_give_timebase; smp_85xx_ops.take_timebase = mpc85xx_take_timebase; -#ifdef CONFIG_HOTPLUG_CPU ppc_md.cpu_die = smp_85xx_mach_cpu_die; -#endif } - +#endif smp_ops = &smp_85xx_ops; #ifdef CONFIG_KEXEC diff --git a/arch/powerpc/platforms/85xx/smp.h b/arch/powerpc/platforms/85xx/smp.h index e2b4493..0b20ae3 100644 --- a/arch/powerpc/platforms/85xx/smp.h +++ b/arch/powerpc/platforms/85xx/smp.h @@ -5,6 +5,7 @@ #ifdef CONFIG_SMP void __init mpc85xx_smp_init(void); +int __init mpc85xx_setup_pmc(void); #else static inline void mpc85xx_smp_init(void) {