17d116dccSCC Ma /* 27d116dccSCC Ma * Copyright (c) 2015, ARM Limited and Contributors. All rights reserved. 37d116dccSCC Ma * 47d116dccSCC Ma * Redistribution and use in source and binary forms, with or without 57d116dccSCC Ma * modification, are permitted provided that the following conditions are met: 67d116dccSCC Ma * 77d116dccSCC Ma * Redistributions of source code must retain the above copyright notice, this 87d116dccSCC Ma * list of conditions and the following disclaimer. 97d116dccSCC Ma * 107d116dccSCC Ma * Redistributions in binary form must reproduce the above copyright notice, 117d116dccSCC Ma * this list of conditions and the following disclaimer in the documentation 127d116dccSCC Ma * and/or other materials provided with the distribution. 137d116dccSCC Ma * 147d116dccSCC Ma * Neither the name of ARM nor the names of its contributors may be used 157d116dccSCC Ma * to endorse or promote products derived from this software without specific 167d116dccSCC Ma * prior written permission. 177d116dccSCC Ma * 187d116dccSCC Ma * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 197d116dccSCC Ma * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 207d116dccSCC Ma * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 217d116dccSCC Ma * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 227d116dccSCC Ma * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 237d116dccSCC Ma * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 247d116dccSCC Ma * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 257d116dccSCC Ma * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 267d116dccSCC Ma * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 277d116dccSCC Ma * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 287d116dccSCC Ma * POSSIBILITY OF SUCH DAMAGE. 297d116dccSCC Ma */ 307d116dccSCC Ma #include <arch.h> 317d116dccSCC Ma #include <debug.h> 327d116dccSCC Ma #include <mmio.h> 337d116dccSCC Ma #include <mt8173_def.h> 347d116dccSCC Ma #include <platform.h> 357d116dccSCC Ma #include <platform_def.h> 367d116dccSCC Ma #include <spm.h> 377d116dccSCC Ma #include <spm_hotplug.h> 387d116dccSCC Ma #include <spm_mcdi.h> 397d116dccSCC Ma 407d116dccSCC Ma /* 417d116dccSCC Ma * System Power Manager (SPM) is a hardware module, which controls cpu or 427d116dccSCC Ma * system power for different power scenarios using different firmware. 437d116dccSCC Ma * This driver controls the cpu power in cpu idle power saving state. 447d116dccSCC Ma */ 457d116dccSCC Ma 467d116dccSCC Ma #define WAKE_SRC_FOR_MCDI (WAKE_SRC_SYSPWREQ | WAKE_SRC_CPU_IRQ) 477d116dccSCC Ma #define PCM_MCDI_HANDSHAKE_SYNC 0xbeefbeef 487d116dccSCC Ma #define PCM_MCDI_HANDSHAKE_ACK 0xdeaddead 497d116dccSCC Ma #define PCM_MCDI_UPDATE_INFORM 0xabcdabcd 507d116dccSCC Ma #define PCM_MCDI_CKECK_DONE 0x12345678 517d116dccSCC Ma #define PCM_MCDI_ALL_CORE_AWAKE 0x0 527d116dccSCC Ma #define PCM_MCDI_OFFLOADED 0xaa55aa55 53*8e53ec53SJimmy Huang #define PCM_MCDI_CA72_CPUTOP_PWRCTL (0x1 << 16) 54*8e53ec53SJimmy Huang #define PCM_MCDI_CA53_CPUTOP_PWRCTL (0x1 << 17) 55*8e53ec53SJimmy Huang #define PCM_MCDI_CA72_PWRSTA_SHIFT 16 56*8e53ec53SJimmy Huang #define PCM_MCDI_CA53_PWRSTA_SHIFT 9 577d116dccSCC Ma 587d116dccSCC Ma static const unsigned int mcdi_binary[] = { 59*8e53ec53SJimmy Huang 0x1a10001f, 0x10006918, 0x81002001, 0xb100a081, 0xb1012081, 0xb101a081, 60*8e53ec53SJimmy Huang 0xb1042081, 0xb104a081, 0xb1052081, 0xb105a081, 0xb1003081, 0xd8200984, 61*8e53ec53SJimmy Huang 0x17c07c1f, 0xe2e00036, 0xe2e0003e, 0x1910001f, 0x1000660c, 0x81041001, 62*8e53ec53SJimmy Huang 0x1a10001f, 0x10006610, 0x82042001, 0x81002004, 0xd82001e4, 0x17c07c1f, 63*8e53ec53SJimmy Huang 0xe2e0003c, 0xe8208000, 0x10006244, 0x00000000, 0x1910001f, 0x10006244, 64*8e53ec53SJimmy Huang 0x81041001, 0xd8000384, 0x17c07c1f, 0x1b80001f, 0x20000030, 0xe2e0007c, 65*8e53ec53SJimmy Huang 0x1b80001f, 0x20000003, 0xe2e0005c, 0xe2e0004c, 0xe2e0004d, 0x1900001f, 66*8e53ec53SJimmy Huang 0x10001250, 0x1a10001f, 0x10001250, 0x8a000008, 0xfffffffb, 0xe1000008, 67*8e53ec53SJimmy Huang 0x1900001f, 0x10001258, 0x1a10001f, 0x10001258, 0x81012001, 0xd8000604, 68*8e53ec53SJimmy Huang 0x17c07c1f, 0x1900001f, 0x10001220, 0x1a10001f, 0x10001220, 0x8a000008, 69*8e53ec53SJimmy Huang 0xdfffffff, 0xe1000008, 0x1900001f, 0x10001228, 0x1a10001f, 0x10001228, 70*8e53ec53SJimmy Huang 0x810ea001, 0xd80007c4, 0x17c07c1f, 0x1900001f, 0x1020002c, 0x1a10001f, 71*8e53ec53SJimmy Huang 0x1020002c, 0x8a000008, 0xffffffef, 0xe1000008, 0xf0000000, 0x17c07c1f, 72*8e53ec53SJimmy Huang 0x1900001f, 0x1020002c, 0x1a10001f, 0x1020002c, 0xaa000008, 0x00000010, 73*8e53ec53SJimmy Huang 0xe1000008, 0x1910001f, 0x10006720, 0x820c1001, 0xd8200aa8, 0x17c07c1f, 74*8e53ec53SJimmy Huang 0x1900001f, 0x10001250, 0x1a10001f, 0x10001250, 0xa2110408, 0xe1000008, 75*8e53ec53SJimmy Huang 0x1900001f, 0x10001258, 0x1a10001f, 0x10001258, 0x81012001, 0xd8200c04, 76*8e53ec53SJimmy Huang 0x17c07c1f, 0x1900001f, 0x10001220, 0x1a10001f, 0x10001220, 0xa21e8408, 77*8e53ec53SJimmy Huang 0xe1000008, 0x1900001f, 0x10001228, 0x1a10001f, 0x10001228, 0x810ea001, 78*8e53ec53SJimmy Huang 0xd8200da4, 0x17c07c1f, 0xe2e0004f, 0xe2e0006f, 0xe2e0002f, 0xe8208000, 79*8e53ec53SJimmy Huang 0x10006244, 0x00000001, 0x1910001f, 0x10006244, 0x81041001, 0xd8200f44, 80*8e53ec53SJimmy Huang 0x17c07c1f, 0xe2e0002e, 0xe2e0003e, 0xe2e0003a, 0xe2e00032, 0x1910001f, 81*8e53ec53SJimmy Huang 0x1000660c, 0x81041001, 0x1a10001f, 0x10006610, 0x82042001, 0xa1002004, 82*8e53ec53SJimmy Huang 0xd8001064, 0x17c07c1f, 0x1910001f, 0x10006b04, 0x01000404, 0x1a00001f, 83*8e53ec53SJimmy Huang 0x10006b04, 0xe2000004, 0xf0000000, 0x17c07c1f, 0x1212841f, 0xe2e00036, 84*8e53ec53SJimmy Huang 0xe2e0003e, 0x1380201f, 0xe2e0003c, 0xe2a00000, 0x1b80001f, 0x20000080, 85*8e53ec53SJimmy Huang 0xe2e0007c, 0x1b80001f, 0x20000003, 0xe2e0005c, 0xe2e0004c, 0xe2e0004d, 86*8e53ec53SJimmy Huang 0xf0000000, 0x17c07c1f, 0xe2e0004f, 0xe2e0006f, 0xe2e0002f, 0xe2a00001, 87*8e53ec53SJimmy Huang 0x1b80001f, 0x20000080, 0xe2e0002e, 0xe2e0003e, 0xe2e0003a, 0xe2e00032, 88*8e53ec53SJimmy Huang 0xf0000000, 0x17c07c1f, 0x1212841f, 0xe2e00026, 0xe2e0002e, 0x1380201f, 89*8e53ec53SJimmy Huang 0x1a00001f, 0x100062b4, 0x1910001f, 0x100062b4, 0x81322804, 0xe2000004, 90*8e53ec53SJimmy Huang 0x81202804, 0xe2000004, 0x1b80001f, 0x20000034, 0x1910001f, 0x100062b4, 91*8e53ec53SJimmy Huang 0x81142804, 0xd80017c4, 0x17c07c1f, 0xe2e0000e, 0xe2e0000c, 0xe2e0000d, 92*8e53ec53SJimmy Huang 0xf0000000, 0x17c07c1f, 0xe2e0002d, 0x1a00001f, 0x100062b4, 0x1910001f, 93*8e53ec53SJimmy Huang 0x100062b4, 0xa1002804, 0xe2000004, 0xa1122804, 0xe2000004, 0x1b80001f, 94*8e53ec53SJimmy Huang 0x20000080, 0x1910001f, 0x100062b4, 0x81142804, 0xd8201a64, 0x17c07c1f, 95*8e53ec53SJimmy Huang 0xe2e0002f, 0xe2e0002b, 0xe2e00023, 0x1380201f, 0xe2e00022, 0xf0000000, 96*8e53ec53SJimmy Huang 0x17c07c1f, 0x1900001f, 0x1020020c, 0x1a10001f, 0x1020020c, 0xaa000008, 97*8e53ec53SJimmy Huang 0x00000001, 0xe1000008, 0x1910001f, 0x10006720, 0x820c9001, 0xd8201cc8, 98*8e53ec53SJimmy Huang 0x17c07c1f, 0x1900001f, 0x10001220, 0x1a10001f, 0x10001220, 0xa21f0408, 99*8e53ec53SJimmy Huang 0xe1000008, 0x1900001f, 0x10001228, 0x1a10001f, 0x10001228, 0x810f2001, 100*8e53ec53SJimmy Huang 0xd8201e24, 0x17c07c1f, 0xe2e0006d, 0xe2e0002d, 0x1a00001f, 0x100062b8, 101*8e53ec53SJimmy Huang 0x1910001f, 0x100062b8, 0xa9000004, 0x00000001, 0xe2000004, 0x1910001f, 102*8e53ec53SJimmy Huang 0x100062b8, 0x81041001, 0xd8202024, 0x17c07c1f, 0xe2e0002c, 0xe2e0003c, 103*8e53ec53SJimmy Huang 0xe2e0003e, 0xe2e0003a, 0xe2e00032, 0x1910001f, 0x1000660c, 0x81079001, 104*8e53ec53SJimmy Huang 0x1a10001f, 0x10006610, 0x8207a001, 0xa1002004, 0xd8002164, 0x17c07c1f, 105*8e53ec53SJimmy Huang 0x1900001f, 0x10006404, 0x1a10001f, 0x10006404, 0xa2168408, 0xe1000008, 106*8e53ec53SJimmy Huang 0xf0000000, 0x17c07c1f, 0x1a10001f, 0x10006918, 0x81022001, 0xb102a081, 107*8e53ec53SJimmy Huang 0xb1062081, 0xb106a081, 0xb1003081, 0xd8202ba4, 0x17c07c1f, 0x1900001f, 108*8e53ec53SJimmy Huang 0x10006404, 0x1a10001f, 0x10006404, 0x8a000008, 0x0000dfff, 0xe1000008, 109*8e53ec53SJimmy Huang 0xe2e00036, 0xe2e0003e, 0x1910001f, 0x1000660c, 0x81079001, 0x1a10001f, 110*8e53ec53SJimmy Huang 0x10006610, 0x8207a001, 0x81002004, 0xd82025c4, 0x17c07c1f, 0xe2e0002e, 111*8e53ec53SJimmy Huang 0x1a00001f, 0x100062b8, 0x1910001f, 0x100062b8, 0x89000004, 0x0000fffe, 112*8e53ec53SJimmy Huang 0xe2000004, 0x1910001f, 0x100062b8, 0x81041001, 0xd80027e4, 0x17c07c1f, 113*8e53ec53SJimmy Huang 0xe2e0006e, 0xe2e0004e, 0xe2e0004c, 0xe2e0004d, 0x1900001f, 0x10001220, 114*8e53ec53SJimmy Huang 0x1a10001f, 0x10001220, 0x8a000008, 0xbfffffff, 0xe1000008, 0x1900001f, 115*8e53ec53SJimmy Huang 0x10001228, 0x1a10001f, 0x10001228, 0x810f2001, 0xd80029e4, 0x17c07c1f, 116*8e53ec53SJimmy Huang 0x1900001f, 0x1020020c, 0x1a10001f, 0x1020020c, 0x8a000008, 0xfffffffe, 117*8e53ec53SJimmy Huang 0xe1000008, 0xf0000000, 0x17c07c1f, 0x18c0001f, 0x10006b6c, 0x1910001f, 118*8e53ec53SJimmy Huang 0x10006b6c, 0xa1002804, 0xe0c00004, 0xf0000000, 0x17c07c1f, 0x17c07c1f, 1197d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 1207d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 1217d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 1227d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 1237d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 1247d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 1257d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 1267d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 1277d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 1287d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 1297d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 1307d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 1317d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 1327d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 1337d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 1347d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 1357d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 1367d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 1377d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 1387d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 1397d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 1407d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 1417d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 1427d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 1437d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 1447d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x1840001f, 0x00000001, 0x11407c1f, 0xe8208000, 1457d116dccSCC Ma 0x10006b6c, 0xa0000000, 0xe8208000, 0x10006310, 0x0b160008, 0x1900001f, 1467d116dccSCC Ma 0x000f7bde, 0x1a00001f, 0x10200268, 0xe2000004, 0xe8208000, 0x10006600, 147*8e53ec53SJimmy Huang 0x00000000, 0xc2802be0, 0x1280041f, 0xe8208000, 0x10006b04, 0x00000000, 148*8e53ec53SJimmy Huang 0x1b00001f, 0x21000001, 0x1b80001f, 0xd0010000, 0xc2802be0, 0x1290841f, 149*8e53ec53SJimmy Huang 0x69200006, 0xbeefbeef, 0xd82047c4, 0x17c07c1f, 0xc2802be0, 0x1291041f, 150*8e53ec53SJimmy Huang 0x1910001f, 0x10006358, 0x810b1001, 0xd8004444, 0x17c07c1f, 0x1980001f, 151*8e53ec53SJimmy Huang 0xdeaddead, 0x69200006, 0xabcdabcd, 0xd8204524, 0x17c07c1f, 0xc2802be0, 152*8e53ec53SJimmy Huang 0x1291841f, 0x88900001, 0x10006814, 0x1910001f, 0x10006400, 0x81271002, 153*8e53ec53SJimmy Huang 0x1880001f, 0x10006600, 0xe0800004, 0x1910001f, 0x10006358, 0x810b1001, 154*8e53ec53SJimmy Huang 0xd80046e4, 0x17c07c1f, 0x1980001f, 0x12345678, 0x60a07c05, 0x89100002, 155*8e53ec53SJimmy Huang 0x10006600, 0x80801001, 0xd8007742, 0x17c07c1f, 0xc2802be0, 0x1292041f, 156*8e53ec53SJimmy Huang 0x1a10001f, 0x10006720, 0x82002001, 0x82201408, 0xd8204a68, 0x17c07c1f, 157*8e53ec53SJimmy Huang 0x1a40001f, 0x10006200, 0x1a80001f, 0x1000625c, 0xc2401480, 0x17c07c1f, 158*8e53ec53SJimmy Huang 0xa1400405, 0xc2802be0, 0x1292841f, 0x1a10001f, 0x10006720, 0x8200a001, 159*8e53ec53SJimmy Huang 0x82209408, 0xd8204c48, 0x17c07c1f, 0x1a40001f, 0x10006218, 0x1a80001f, 160*8e53ec53SJimmy Huang 0x10006264, 0xc2401480, 0x17c07c1f, 0xa1508405, 0xc2802be0, 0x1293041f, 161*8e53ec53SJimmy Huang 0x1a10001f, 0x10006720, 0x82012001, 0x82211408, 0xd8204e28, 0x17c07c1f, 162*8e53ec53SJimmy Huang 0x1a40001f, 0x1000621c, 0x1a80001f, 0x1000626c, 0xc2401480, 0x17c07c1f, 163*8e53ec53SJimmy Huang 0xa1510405, 0x1a10001f, 0x10006720, 0x8201a001, 0x82219408, 0xd8204fc8, 164*8e53ec53SJimmy Huang 0x17c07c1f, 0x1a40001f, 0x10006220, 0x1a80001f, 0x10006274, 0xc2401480, 165*8e53ec53SJimmy Huang 0x17c07c1f, 0xa1518405, 0x1a10001f, 0x10006720, 0x82022001, 0x82221408, 166*8e53ec53SJimmy Huang 0xd8205148, 0x17c07c1f, 0x1a40001f, 0x100062a0, 0x1280041f, 0xc2401900, 167*8e53ec53SJimmy Huang 0x17c07c1f, 0xa1520405, 0x1a10001f, 0x10006720, 0x8202a001, 0x82229408, 168*8e53ec53SJimmy Huang 0xd82052c8, 0x17c07c1f, 0x1a40001f, 0x100062a4, 0x1290841f, 0xc2401900, 169*8e53ec53SJimmy Huang 0x17c07c1f, 0xa1528405, 0x1a10001f, 0x10006720, 0x82032001, 0x82231408, 170*8e53ec53SJimmy Huang 0xd82053a8, 0x17c07c1f, 0xa1530405, 0x1a10001f, 0x10006720, 0x8203a001, 171*8e53ec53SJimmy Huang 0x82239408, 0xd8205488, 0x17c07c1f, 0xa1538405, 0x1a10001f, 0x10006b00, 172*8e53ec53SJimmy Huang 0x8108a001, 0xd8205864, 0x17c07c1f, 0x1a10001f, 0x10006610, 0x8104a001, 173*8e53ec53SJimmy Huang 0xb1052081, 0xb105a081, 0xb1062081, 0xd8005744, 0x17c07c1f, 0x1a10001f, 174*8e53ec53SJimmy Huang 0x10006610, 0x81042001, 0xd8205744, 0x17c07c1f, 0x1a40001f, 0x10006208, 175*8e53ec53SJimmy Huang 0xc24009c0, 0x17c07c1f, 0x1910001f, 0x10006610, 0x81041001, 0xd8005864, 176*8e53ec53SJimmy Huang 0x17c07c1f, 0x1a40001f, 0x10006208, 0xc2400000, 0x17c07c1f, 0x1a10001f, 177*8e53ec53SJimmy Huang 0x10006b00, 0x81082001, 0xd8205ae4, 0x17c07c1f, 0x1a10001f, 0x10006610, 178*8e53ec53SJimmy Huang 0x81082001, 0xb108a081, 0xd8005ae4, 0x17c07c1f, 0x1a10001f, 0x10006610, 179*8e53ec53SJimmy Huang 0x8107a001, 0xd8205ae4, 0x17c07c1f, 0x1a40001f, 0x100062b0, 0xc2401be0, 180*8e53ec53SJimmy Huang 0x17c07c1f, 0x1b80001f, 0x20000208, 0xd82076cc, 0x17c07c1f, 0x1910001f, 181*8e53ec53SJimmy Huang 0x10006610, 0x81079001, 0xd8005c84, 0x17c07c1f, 0x1a40001f, 0x100062b0, 182*8e53ec53SJimmy Huang 0xc2402380, 0x17c07c1f, 0x81001401, 0xd8206004, 0x17c07c1f, 0x1a10001f, 183*8e53ec53SJimmy Huang 0x10006918, 0x81002001, 0xb1042081, 0xb1003081, 0xb10c3081, 0xd8206004, 184*8e53ec53SJimmy Huang 0x17c07c1f, 0x1a40001f, 0x10006200, 0x1a80001f, 0x1000625c, 0xc2401280, 185*8e53ec53SJimmy Huang 0x17c07c1f, 0x89400005, 0xfffffffe, 0xe8208000, 0x10006f00, 0x00000000, 186*8e53ec53SJimmy Huang 0xe8208000, 0x10006b30, 0x00000000, 0xe8208000, 0x100063e0, 0x00000001, 187*8e53ec53SJimmy Huang 0x81009401, 0xd8206364, 0x17c07c1f, 0x1a10001f, 0x10006918, 0x8100a001, 188*8e53ec53SJimmy Huang 0xb104a081, 0xb1003081, 0xd8206364, 0x17c07c1f, 0x1a40001f, 0x10006218, 189*8e53ec53SJimmy Huang 0x1a80001f, 0x10006264, 0xc2401280, 0x17c07c1f, 0x89400005, 0xfffffffd, 190*8e53ec53SJimmy Huang 0xe8208000, 0x10006f04, 0x00000000, 0xe8208000, 0x10006b34, 0x00000000, 191*8e53ec53SJimmy Huang 0xe8208000, 0x100063e0, 0x00000002, 0x81011401, 0xd82066c4, 0x17c07c1f, 192*8e53ec53SJimmy Huang 0x1a10001f, 0x10006918, 0x81012001, 0xb1052081, 0xb1003081, 0xd82066c4, 193*8e53ec53SJimmy Huang 0x17c07c1f, 0x1a40001f, 0x1000621c, 0x1a80001f, 0x1000626c, 0xc2401280, 194*8e53ec53SJimmy Huang 0x17c07c1f, 0x89400005, 0xfffffffb, 0xe8208000, 0x10006f08, 0x00000000, 195*8e53ec53SJimmy Huang 0xe8208000, 0x10006b38, 0x00000000, 0xe8208000, 0x100063e0, 0x00000004, 196*8e53ec53SJimmy Huang 0x81019401, 0xd8206a24, 0x17c07c1f, 0x1a10001f, 0x10006918, 0x8101a001, 197*8e53ec53SJimmy Huang 0xb105a081, 0xb1003081, 0xd8206a24, 0x17c07c1f, 0x1a40001f, 0x10006220, 198*8e53ec53SJimmy Huang 0x1a80001f, 0x10006274, 0xc2401280, 0x17c07c1f, 0x89400005, 0xfffffff7, 199*8e53ec53SJimmy Huang 0xe8208000, 0x10006f0c, 0x00000000, 0xe8208000, 0x10006b3c, 0x00000000, 200*8e53ec53SJimmy Huang 0xe8208000, 0x100063e0, 0x00000008, 0x1910001f, 0x10006610, 0x81079001, 201*8e53ec53SJimmy Huang 0xd8207144, 0x17c07c1f, 0x81021401, 0xd8206e04, 0x17c07c1f, 0x1a10001f, 202*8e53ec53SJimmy Huang 0x10006918, 0x81022001, 0xb1062081, 0xb1003081, 0xd8206e04, 0x17c07c1f, 203*8e53ec53SJimmy Huang 0x1a40001f, 0x100062a0, 0x1280041f, 0xc2401600, 0x17c07c1f, 0x89400005, 204*8e53ec53SJimmy Huang 0xffffffef, 0xe8208000, 0x10006f10, 0x00000000, 0xe8208000, 0x10006b40, 205*8e53ec53SJimmy Huang 0x00000000, 0xe8208000, 0x100063e0, 0x00000010, 0x81029401, 0xd8207144, 206*8e53ec53SJimmy Huang 0x17c07c1f, 0x1a10001f, 0x10006918, 0x8102a001, 0xb106a081, 0xb1003081, 207*8e53ec53SJimmy Huang 0xd8207144, 0x17c07c1f, 0x1a40001f, 0x100062a4, 0x1290841f, 0xc2401600, 208*8e53ec53SJimmy Huang 0x17c07c1f, 0x89400005, 0xffffffdf, 0xe8208000, 0x10006f14, 0x00000000, 209*8e53ec53SJimmy Huang 0xe8208000, 0x10006b44, 0x00000000, 0xe8208000, 0x100063e0, 0x00000020, 210*8e53ec53SJimmy Huang 0x81031401, 0xd82073e4, 0x17c07c1f, 0x1a10001f, 0x10006918, 0x81032001, 211*8e53ec53SJimmy Huang 0xb1072081, 0xb1003081, 0xd82073e4, 0x17c07c1f, 0x89400005, 0xffffffbf, 212*8e53ec53SJimmy Huang 0xe8208000, 0x10006f18, 0x00000000, 0xe8208000, 0x10006b48, 0x00000000, 213*8e53ec53SJimmy Huang 0xe8208000, 0x100063e0, 0x00000040, 0x81039401, 0xd8207684, 0x17c07c1f, 214*8e53ec53SJimmy Huang 0x1a10001f, 0x10006918, 0x8103a001, 0xb107a081, 0xb1003081, 0xd8207684, 2157d116dccSCC Ma 0x17c07c1f, 0x89400005, 0xffffff7f, 0xe8208000, 0x10006f1c, 0x00000000, 2167d116dccSCC Ma 0xe8208000, 0x10006b4c, 0x00000000, 0xe8208000, 0x100063e0, 0x00000080, 217*8e53ec53SJimmy Huang 0xc2802be0, 0x1293841f, 0xd00042c0, 0x17c07c1f, 0xc2802be0, 0x1294041f, 2187d116dccSCC Ma 0xe8208000, 0x10006600, 0x00000000, 0x1ac0001f, 0x55aa55aa, 0x1940001f, 219*8e53ec53SJimmy Huang 0xaa55aa55, 0xc2802be0, 0x1294841f, 0x1b80001f, 0x00001000, 0xf0000000, 2207d116dccSCC Ma 0x17c07c1f 2217d116dccSCC Ma }; 2227d116dccSCC Ma 2237d116dccSCC Ma static const struct pcm_desc mcdi_pcm = { 224*8e53ec53SJimmy Huang .version = "pcm_mcdi_mt8173_20150901_v1", 2257d116dccSCC Ma .base = mcdi_binary, 226*8e53ec53SJimmy Huang .size = 967, 2277d116dccSCC Ma .sess = 2, 2287d116dccSCC Ma .replace = 0, 2297d116dccSCC Ma }; 2307d116dccSCC Ma 2317d116dccSCC Ma static struct pwr_ctrl mcdi_ctrl = { 2327d116dccSCC Ma .wake_src = WAKE_SRC_FOR_MCDI, 2337d116dccSCC Ma .wake_src_md32 = 0, 2347d116dccSCC Ma .wfi_op = WFI_OP_OR, 2357d116dccSCC Ma .mcusys_idle_mask = 1, 2367d116dccSCC Ma .ca7top_idle_mask = 1, 2377d116dccSCC Ma .ca15top_idle_mask = 1, 2387d116dccSCC Ma .disp_req_mask = 1, 2397d116dccSCC Ma .mfg_req_mask = 1, 2407d116dccSCC Ma .md32_req_mask = 1, 2417d116dccSCC Ma }; 2427d116dccSCC Ma 2437d116dccSCC Ma static const struct spm_lp_scen spm_mcdi = { 2447d116dccSCC Ma .pcmdesc = &mcdi_pcm, 2457d116dccSCC Ma .pwrctrl = &mcdi_ctrl, 2467d116dccSCC Ma }; 2477d116dccSCC Ma 2487d116dccSCC Ma void spm_mcdi_cpu_wake_up_event(int wake_up_event, int disable_dormant_power) 2497d116dccSCC Ma { 2507d116dccSCC Ma if (((mmio_read_32(SPM_SLEEP_CPU_WAKEUP_EVENT) & 0x1) == 1) 2517d116dccSCC Ma && ((mmio_read_32(SPM_CLK_CON) & CC_DISABLE_DORM_PWR) == 0)) { 2527d116dccSCC Ma /* MCDI is offload? */ 2537d116dccSCC Ma INFO("%s: SPM_SLEEP_CPU_WAKEUP_EVENT:%x, SPM_CLK_CON %x", 2547d116dccSCC Ma __func__, mmio_read_32(SPM_SLEEP_CPU_WAKEUP_EVENT), 2557d116dccSCC Ma mmio_read_32(SPM_CLK_CON)); 2567d116dccSCC Ma return; 2577d116dccSCC Ma } 2587d116dccSCC Ma /* Inform SPM that CPU wants to program CPU_WAKEUP_EVENT and 2597d116dccSCC Ma * DISABLE_CPU_DROM */ 2607d116dccSCC Ma mmio_write_32(SPM_PCM_REG_DATA_INI, PCM_MCDI_HANDSHAKE_SYNC); 2617d116dccSCC Ma mmio_write_32(SPM_PCM_PWR_IO_EN, PCM_RF_SYNC_R6); 2627d116dccSCC Ma mmio_write_32(SPM_PCM_PWR_IO_EN, 0); 2637d116dccSCC Ma 2647d116dccSCC Ma /* Wait SPM's response, can't use sleep api */ 2657d116dccSCC Ma while (mmio_read_32(SPM_PCM_REG6_DATA) != PCM_MCDI_HANDSHAKE_ACK) 2667d116dccSCC Ma ; 2677d116dccSCC Ma 2687d116dccSCC Ma if (disable_dormant_power) { 2697d116dccSCC Ma mmio_setbits_32(SPM_CLK_CON, CC_DISABLE_DORM_PWR); 2707d116dccSCC Ma while (mmio_read_32(SPM_CLK_CON) != 2717d116dccSCC Ma (mmio_read_32(SPM_CLK_CON) | CC_DISABLE_DORM_PWR)) 2727d116dccSCC Ma ; 2737d116dccSCC Ma 2747d116dccSCC Ma } else { 2757d116dccSCC Ma mmio_clrbits_32(SPM_CLK_CON, CC_DISABLE_DORM_PWR); 2767d116dccSCC Ma while (mmio_read_32(SPM_CLK_CON) != 2777d116dccSCC Ma (mmio_read_32(SPM_CLK_CON) & ~CC_DISABLE_DORM_PWR)) 2787d116dccSCC Ma ; 2797d116dccSCC Ma } 2807d116dccSCC Ma 2817d116dccSCC Ma mmio_write_32(SPM_SLEEP_CPU_WAKEUP_EVENT, wake_up_event); 2827d116dccSCC Ma 2837d116dccSCC Ma while (mmio_read_32(SPM_SLEEP_CPU_WAKEUP_EVENT) != wake_up_event) 2847d116dccSCC Ma ; 2857d116dccSCC Ma 2867d116dccSCC Ma /* Inform SPM to see updated setting */ 2877d116dccSCC Ma mmio_write_32(SPM_PCM_REG_DATA_INI, PCM_MCDI_UPDATE_INFORM); 2887d116dccSCC Ma mmio_write_32(SPM_PCM_PWR_IO_EN, PCM_RF_SYNC_R6); 2897d116dccSCC Ma mmio_write_32(SPM_PCM_PWR_IO_EN, 0); 2907d116dccSCC Ma 2917d116dccSCC Ma while (mmio_read_32(SPM_PCM_REG6_DATA) != PCM_MCDI_CKECK_DONE) 2927d116dccSCC Ma ; 2937d116dccSCC Ma /* END OF sequence */ 2947d116dccSCC Ma 2957d116dccSCC Ma mmio_write_32(SPM_PCM_REG_DATA_INI, 0x0); 2967d116dccSCC Ma mmio_write_32(SPM_PCM_PWR_IO_EN, PCM_RF_SYNC_R6); 2977d116dccSCC Ma mmio_write_32(SPM_PCM_PWR_IO_EN, 0); 2987d116dccSCC Ma } 2997d116dccSCC Ma 3007d116dccSCC Ma void spm_mcdi_wakeup_all_cores(void) 3017d116dccSCC Ma { 3027d116dccSCC Ma if (is_mcdi_ready() == 0) 3037d116dccSCC Ma return; 3047d116dccSCC Ma 3057d116dccSCC Ma spm_mcdi_cpu_wake_up_event(1, 1); 3067d116dccSCC Ma while (mmio_read_32(SPM_PCM_REG5_DATA) != PCM_MCDI_ALL_CORE_AWAKE) 3077d116dccSCC Ma ; 3087d116dccSCC Ma spm_mcdi_cpu_wake_up_event(1, 0); 3097d116dccSCC Ma while (mmio_read_32(SPM_PCM_REG5_DATA) != PCM_MCDI_OFFLOADED) 3107d116dccSCC Ma ; 3117d116dccSCC Ma 3127d116dccSCC Ma spm_clean_after_wakeup(); 3137d116dccSCC Ma clear_all_ready(); 3147d116dccSCC Ma } 3157d116dccSCC Ma 316*8e53ec53SJimmy Huang static void spm_mcdi_wfi_sel_enter(unsigned long mpidr) 3177d116dccSCC Ma { 3187d116dccSCC Ma int core_id_val = mpidr & MPIDR_CPU_MASK; 3197d116dccSCC Ma int cluster_id = (mpidr & MPIDR_CLUSTER_MASK) >> MPIDR_AFFINITY_BITS; 3207d116dccSCC Ma 3217d116dccSCC Ma /* SPM WFI Select by core number */ 3227d116dccSCC Ma if (cluster_id) { 3237d116dccSCC Ma switch (core_id_val) { 3247d116dccSCC Ma case 0: 3257d116dccSCC Ma mmio_write_32(SPM_CA15_CPU0_IRQ_MASK, 1); 3267d116dccSCC Ma mmio_write_32(SPM_SLEEP_CA15_WFI0_EN, 1); 3277d116dccSCC Ma break; 3287d116dccSCC Ma case 1: 3297d116dccSCC Ma mmio_write_32(SPM_CA15_CPU1_IRQ_MASK, 1); 3307d116dccSCC Ma mmio_write_32(SPM_SLEEP_CA15_WFI1_EN, 1); 3317d116dccSCC Ma break; 3327d116dccSCC Ma case 2: 3337d116dccSCC Ma mmio_write_32(SPM_CA15_CPU2_IRQ_MASK, 1); 3347d116dccSCC Ma mmio_write_32(SPM_SLEEP_CA15_WFI2_EN, 1); 3357d116dccSCC Ma break; 3367d116dccSCC Ma case 3: 3377d116dccSCC Ma mmio_write_32(SPM_CA15_CPU3_IRQ_MASK, 1); 3387d116dccSCC Ma mmio_write_32(SPM_SLEEP_CA15_WFI3_EN, 1); 3397d116dccSCC Ma break; 3407d116dccSCC Ma default: 3417d116dccSCC Ma break; 3427d116dccSCC Ma } 3437d116dccSCC Ma } else { 3447d116dccSCC Ma switch (core_id_val) { 3457d116dccSCC Ma case 0: 3467d116dccSCC Ma mmio_write_32(SPM_CA7_CPU0_IRQ_MASK, 1); 3477d116dccSCC Ma mmio_write_32(SPM_SLEEP_CA7_WFI0_EN, 1); 3487d116dccSCC Ma break; 3497d116dccSCC Ma case 1: 3507d116dccSCC Ma mmio_write_32(SPM_CA7_CPU1_IRQ_MASK, 1); 3517d116dccSCC Ma mmio_write_32(SPM_SLEEP_CA7_WFI1_EN, 1); 3527d116dccSCC Ma break; 3537d116dccSCC Ma case 2: 3547d116dccSCC Ma mmio_write_32(SPM_CA7_CPU2_IRQ_MASK, 1); 3557d116dccSCC Ma mmio_write_32(SPM_SLEEP_CA7_WFI2_EN, 1); 3567d116dccSCC Ma break; 3577d116dccSCC Ma case 3: 3587d116dccSCC Ma mmio_write_32(SPM_CA7_CPU3_IRQ_MASK, 1); 3597d116dccSCC Ma mmio_write_32(SPM_SLEEP_CA7_WFI3_EN, 1); 3607d116dccSCC Ma break; 3617d116dccSCC Ma default: 3627d116dccSCC Ma break; 3637d116dccSCC Ma } 3647d116dccSCC Ma } 3657d116dccSCC Ma } 3667d116dccSCC Ma 367*8e53ec53SJimmy Huang static void spm_mcdi_wfi_sel_leave(unsigned long mpidr) 3687d116dccSCC Ma { 3697d116dccSCC Ma int core_id_val = mpidr & MPIDR_CPU_MASK; 3707d116dccSCC Ma int cluster_id = (mpidr & MPIDR_CLUSTER_MASK) >> MPIDR_AFFINITY_BITS; 3717d116dccSCC Ma 3727d116dccSCC Ma /* SPM WFI Select by core number */ 3737d116dccSCC Ma if (cluster_id) { 3747d116dccSCC Ma switch (core_id_val) { 3757d116dccSCC Ma case 0: 3767d116dccSCC Ma mmio_write_32(SPM_SLEEP_CA15_WFI0_EN, 0); 3777d116dccSCC Ma mmio_write_32(SPM_CA15_CPU0_IRQ_MASK, 0); 3787d116dccSCC Ma break; 3797d116dccSCC Ma case 1: 3807d116dccSCC Ma mmio_write_32(SPM_SLEEP_CA15_WFI1_EN, 0); 3817d116dccSCC Ma mmio_write_32(SPM_CA15_CPU1_IRQ_MASK, 0); 3827d116dccSCC Ma break; 3837d116dccSCC Ma case 2: 3847d116dccSCC Ma mmio_write_32(SPM_SLEEP_CA15_WFI2_EN, 0); 3857d116dccSCC Ma mmio_write_32(SPM_CA15_CPU2_IRQ_MASK, 0); 3867d116dccSCC Ma break; 3877d116dccSCC Ma case 3: 3887d116dccSCC Ma mmio_write_32(SPM_SLEEP_CA15_WFI3_EN, 0); 3897d116dccSCC Ma mmio_write_32(SPM_CA15_CPU3_IRQ_MASK, 0); 3907d116dccSCC Ma break; 3917d116dccSCC Ma default: 3927d116dccSCC Ma break; 3937d116dccSCC Ma } 3947d116dccSCC Ma } else { 3957d116dccSCC Ma switch (core_id_val) { 3967d116dccSCC Ma case 0: 3977d116dccSCC Ma mmio_write_32(SPM_SLEEP_CA7_WFI0_EN, 0); 3987d116dccSCC Ma mmio_write_32(SPM_CA7_CPU0_IRQ_MASK, 0); 3997d116dccSCC Ma break; 4007d116dccSCC Ma case 1: 4017d116dccSCC Ma mmio_write_32(SPM_SLEEP_CA7_WFI1_EN, 0); 4027d116dccSCC Ma mmio_write_32(SPM_CA7_CPU1_IRQ_MASK, 0); 4037d116dccSCC Ma break; 4047d116dccSCC Ma case 2: 4057d116dccSCC Ma mmio_write_32(SPM_SLEEP_CA7_WFI2_EN, 0); 4067d116dccSCC Ma mmio_write_32(SPM_CA7_CPU2_IRQ_MASK, 0); 4077d116dccSCC Ma break; 4087d116dccSCC Ma case 3: 4097d116dccSCC Ma mmio_write_32(SPM_SLEEP_CA7_WFI3_EN, 0); 4107d116dccSCC Ma mmio_write_32(SPM_CA7_CPU3_IRQ_MASK, 0); 4117d116dccSCC Ma break; 4127d116dccSCC Ma default: 4137d116dccSCC Ma break; 4147d116dccSCC Ma } 4157d116dccSCC Ma } 4167d116dccSCC Ma } 4177d116dccSCC Ma 418*8e53ec53SJimmy Huang static void spm_mcdi_set_cputop_pwrctrl_for_cluster_off(unsigned long mpidr) 419*8e53ec53SJimmy Huang { 420*8e53ec53SJimmy Huang unsigned long cluster_id = mpidr & MPIDR_CLUSTER_MASK; 421*8e53ec53SJimmy Huang unsigned long cpu_id = mpidr & MPIDR_CPU_MASK; 422*8e53ec53SJimmy Huang unsigned int pwr_status, shift, i, flag = 0; 423*8e53ec53SJimmy Huang 424*8e53ec53SJimmy Huang pwr_status = mmio_read_32(SPM_PWR_STATUS) | 425*8e53ec53SJimmy Huang mmio_read_32(SPM_PWR_STATUS_2ND); 426*8e53ec53SJimmy Huang 427*8e53ec53SJimmy Huang if (cluster_id) { 428*8e53ec53SJimmy Huang for (i = 0; i < PLATFORM_CLUSTER1_CORE_COUNT; i++) { 429*8e53ec53SJimmy Huang if (i == cpu_id) 430*8e53ec53SJimmy Huang continue; 431*8e53ec53SJimmy Huang shift = i + PCM_MCDI_CA72_PWRSTA_SHIFT; 432*8e53ec53SJimmy Huang flag |= (pwr_status & (1 << shift)) >> shift; 433*8e53ec53SJimmy Huang } 434*8e53ec53SJimmy Huang if (!flag) 435*8e53ec53SJimmy Huang mmio_setbits_32(SPM_PCM_RESERVE, 436*8e53ec53SJimmy Huang PCM_MCDI_CA72_CPUTOP_PWRCTL); 437*8e53ec53SJimmy Huang } else { 438*8e53ec53SJimmy Huang for (i = 0; i < PLATFORM_CLUSTER0_CORE_COUNT; i++) { 439*8e53ec53SJimmy Huang if (i == cpu_id) 440*8e53ec53SJimmy Huang continue; 441*8e53ec53SJimmy Huang shift = i + PCM_MCDI_CA53_PWRSTA_SHIFT; 442*8e53ec53SJimmy Huang flag |= (pwr_status & (1 << shift)) >> shift; 443*8e53ec53SJimmy Huang } 444*8e53ec53SJimmy Huang if (!flag) 445*8e53ec53SJimmy Huang mmio_setbits_32(SPM_PCM_RESERVE, 446*8e53ec53SJimmy Huang PCM_MCDI_CA53_CPUTOP_PWRCTL); 447*8e53ec53SJimmy Huang } 448*8e53ec53SJimmy Huang } 449*8e53ec53SJimmy Huang 450*8e53ec53SJimmy Huang static void spm_mcdi_clear_cputop_pwrctrl_for_cluster_on(unsigned long mpidr) 451*8e53ec53SJimmy Huang { 452*8e53ec53SJimmy Huang unsigned long cluster_id = mpidr & MPIDR_CLUSTER_MASK; 453*8e53ec53SJimmy Huang 454*8e53ec53SJimmy Huang if (cluster_id) 455*8e53ec53SJimmy Huang mmio_clrbits_32(SPM_PCM_RESERVE, 456*8e53ec53SJimmy Huang PCM_MCDI_CA72_CPUTOP_PWRCTL); 457*8e53ec53SJimmy Huang else 458*8e53ec53SJimmy Huang mmio_clrbits_32(SPM_PCM_RESERVE, 459*8e53ec53SJimmy Huang PCM_MCDI_CA53_CPUTOP_PWRCTL); 460*8e53ec53SJimmy Huang } 461*8e53ec53SJimmy Huang 462*8e53ec53SJimmy Huang void spm_mcdi_prepare_for_off_state(unsigned long mpidr, unsigned int afflvl) 4637d116dccSCC Ma { 4647d116dccSCC Ma const struct pcm_desc *pcmdesc = spm_mcdi.pcmdesc; 4657d116dccSCC Ma struct pwr_ctrl *pwrctrl = spm_mcdi.pwrctrl; 4667d116dccSCC Ma 4677d116dccSCC Ma spm_lock_get(); 4687d116dccSCC Ma if (is_mcdi_ready() == 0) { 4697d116dccSCC Ma if (is_hotplug_ready() == 1) 4707d116dccSCC Ma spm_clear_hotplug(); 4717d116dccSCC Ma set_pwrctrl_pcm_flags(pwrctrl, 0); 4727d116dccSCC Ma spm_reset_and_init_pcm(); 4737d116dccSCC Ma spm_kick_im_to_fetch(pcmdesc); 4747d116dccSCC Ma spm_set_power_control(pwrctrl); 4757d116dccSCC Ma spm_set_wakeup_event(pwrctrl); 4767d116dccSCC Ma spm_kick_pcm_to_run(pwrctrl); 4777d116dccSCC Ma set_mcdi_ready(); 4787d116dccSCC Ma } 4797d116dccSCC Ma spm_mcdi_wfi_sel_enter(mpidr); 480*8e53ec53SJimmy Huang if (afflvl == MPIDR_AFFLVL1) 481*8e53ec53SJimmy Huang spm_mcdi_set_cputop_pwrctrl_for_cluster_off(mpidr); 4827d116dccSCC Ma spm_lock_release(); 4837d116dccSCC Ma } 4847d116dccSCC Ma 485*8e53ec53SJimmy Huang void spm_mcdi_finish_for_on_state(unsigned long mpidr, unsigned int afflvl) 4867d116dccSCC Ma { 4877d116dccSCC Ma unsigned long linear_id = platform_get_core_pos(mpidr); 4887d116dccSCC Ma 4897d116dccSCC Ma spm_lock_get(); 490*8e53ec53SJimmy Huang spm_mcdi_clear_cputop_pwrctrl_for_cluster_on(mpidr); 4917d116dccSCC Ma spm_mcdi_wfi_sel_leave(mpidr); 4927d116dccSCC Ma mmio_write_32(SPM_PCM_SW_INT_CLEAR, (0x1 << linear_id)); 4937d116dccSCC Ma spm_lock_release(); 4947d116dccSCC Ma } 495