17d116dccSCC Ma /* 27d116dccSCC Ma * Copyright (c) 2015, ARM Limited and Contributors. All rights reserved. 37d116dccSCC Ma * 482cb2c1aSdp-arm * SPDX-License-Identifier: BSD-3-Clause 57d116dccSCC Ma */ 6*09d40e0eSAntonio Nino Diaz 7201d535fSKoan-Sin Tan #include <arch.h> 8*09d40e0eSAntonio Nino Diaz #include <lib/mmio.h> 97d116dccSCC Ma #include <mt8173_def.h> 10*09d40e0eSAntonio Nino Diaz #include <plat/common/platform.h> 11*09d40e0eSAntonio Nino Diaz 127d116dccSCC Ma #include <spm.h> 137d116dccSCC Ma #include <spm_hotplug.h> 147d116dccSCC Ma #include <spm_mcdi.h> 157d116dccSCC Ma 167d116dccSCC Ma /* 177d116dccSCC Ma * System Power Manager (SPM) is a hardware module, which controls cpu or 187d116dccSCC Ma * system power for different power scenarios using different firmware. 197d116dccSCC Ma * This driver controls the cpu power in cpu hotplug flow. 207d116dccSCC Ma */ 217d116dccSCC Ma 228e53ec53SJimmy Huang #define PCM_HOTPLUG_VALID_MASK 0x0000ff00 237d116dccSCC Ma #define PCM_HOTPLUG_VALID_SHIFT 0x8 247d116dccSCC Ma 257d116dccSCC Ma /********************************************************** 267d116dccSCC Ma * PCM sequence for CPU hotplug 277d116dccSCC Ma **********************************************************/ 287d116dccSCC Ma static const unsigned int hotplug_binary[] = { 297d116dccSCC Ma 0x1900001f, 0x1020020c, 0x1950001f, 0x1020020c, 0xa9400005, 0x00000001, 307d116dccSCC Ma 0xe1000005, 0x1910001f, 0x10006720, 0x814c9001, 0xd82000e5, 0x17c07c1f, 317d116dccSCC Ma 0x1900001f, 0x10001220, 0x1950001f, 0x10001220, 0xa15f0405, 0xe1000005, 327d116dccSCC Ma 0x1900001f, 0x10001228, 0x1950001f, 0x10001228, 0x810f1401, 0xd8200244, 337d116dccSCC Ma 0x17c07c1f, 0xe2e0006d, 0xe2e0002d, 0x1a00001f, 0x100062b8, 0x1910001f, 347d116dccSCC Ma 0x100062b8, 0xa9000004, 0x00000001, 0xe2000004, 0x1910001f, 0x100062b8, 357d116dccSCC Ma 0x81142804, 0xd8200444, 0x17c07c1f, 0xe2e0002c, 0xe2e0003c, 0xe2e0003e, 367d116dccSCC Ma 0xe2e0003a, 0xe2e00032, 0x1910001f, 0x1000660c, 0x81079001, 0x1950001f, 377d116dccSCC Ma 0x10006610, 0x81479401, 0xa1001404, 0xd8000584, 0x17c07c1f, 0x1900001f, 387d116dccSCC Ma 0x10006404, 0x1950001f, 0x10006404, 0xa1568405, 0xe1000005, 0xf0000000, 397d116dccSCC Ma 0x17c07c1f, 0x1900001f, 0x10006404, 0x1950001f, 0x10006404, 0x89400005, 407d116dccSCC Ma 0x0000dfff, 0xe1000005, 0xe2e00036, 0xe2e0003e, 0x1910001f, 0x1000660c, 417d116dccSCC Ma 0x81079001, 0x1950001f, 0x10006610, 0x81479401, 0x81001404, 0xd82008c4, 427d116dccSCC Ma 0x17c07c1f, 0xe2e0002e, 0x1a00001f, 0x100062b8, 0x1910001f, 0x100062b8, 437d116dccSCC Ma 0x89000004, 0x0000fffe, 0xe2000004, 0x1910001f, 0x100062b8, 0x81142804, 447d116dccSCC Ma 0xd8000ae4, 0x17c07c1f, 0xe2e0006e, 0xe2e0004e, 0xe2e0004c, 0xe2e0004d, 457d116dccSCC Ma 0x1900001f, 0x10001220, 0x1950001f, 0x10001220, 0x89400005, 0xbfffffff, 467d116dccSCC Ma 0xe1000005, 0x1900001f, 0x10001228, 0x1950001f, 0x10001228, 0x810f1401, 477d116dccSCC Ma 0xd8000ce4, 0x17c07c1f, 0x1900001f, 0x1020020c, 0x1950001f, 0x1020020c, 487d116dccSCC Ma 0x89400005, 0xfffffffe, 0xe1000005, 0xf0000000, 0x17c07c1f, 0x1212841f, 497d116dccSCC Ma 0xe2e00036, 0xe2e0003e, 0x1380201f, 0xe2e0003c, 0xe2a00000, 0x1b80001f, 507d116dccSCC Ma 0x20000080, 0xe2e0007c, 0x1b80001f, 0x20000003, 0xe2e0005c, 0xe2e0004c, 517d116dccSCC Ma 0xe2e0004d, 0xf0000000, 0x17c07c1f, 0xe2e0004f, 0xe2e0006f, 0xe2e0002f, 527d116dccSCC Ma 0xe2a00001, 0x1b80001f, 0x20000080, 0xe2e0002e, 0xe2e0003e, 0xe2e00032, 537d116dccSCC Ma 0xf0000000, 0x17c07c1f, 0x1212841f, 0xe2e00026, 0xe2e0002e, 0x1380201f, 547d116dccSCC Ma 0x1a00001f, 0x100062b4, 0x1910001f, 0x100062b4, 0x81322804, 0xe2000004, 557d116dccSCC Ma 0x81202804, 0xe2000004, 0x1b80001f, 0x20000034, 0x1910001f, 0x100062b4, 567d116dccSCC Ma 0x81142804, 0xd8001404, 0x17c07c1f, 0xe2e0000e, 0xe2e0000c, 0xe2e0000d, 577d116dccSCC Ma 0xf0000000, 0x17c07c1f, 0xe2e0002d, 0x1a00001f, 0x100062b4, 0x1910001f, 587d116dccSCC Ma 0x100062b4, 0xa1002804, 0xe2000004, 0xa1122804, 0xe2000004, 0x1b80001f, 597d116dccSCC Ma 0x20000080, 0x1910001f, 0x100062b4, 0x81142804, 0xd82016a4, 0x17c07c1f, 607d116dccSCC Ma 0xe2e0002f, 0xe2e0002b, 0xe2e00023, 0x1380201f, 0xe2e00022, 0xf0000000, 617d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 627d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 637d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 647d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 657d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 667d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 677d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 687d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 697d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 707d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 717d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 727d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 737d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 747d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 757d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 767d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 777d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 787d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 797d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 807d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 817d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 827d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 837d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 847d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 857d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 867d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 877d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 887d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 897d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 907d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 917d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 927d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 937d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 947d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 957d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 967d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 977d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 987d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 997d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 1007d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 1017d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 1027d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 1037d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 1047d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 1057d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 1067d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 1077d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 1087d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 1097d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 1107d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 1117d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 1127d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 1137d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 1147d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x1840001f, 0x00000001, 0x1840001f, 0x00000001, 1157d116dccSCC Ma 0x1840001f, 0x00000001, 0xa1d48407, 0x1b00001f, 0x2f7be75f, 0xe8208000, 1167d116dccSCC Ma 0x10006354, 0xfffe7b47, 0xa1d10407, 0x1b80001f, 0x20000020, 0x17c07c1f, 1177d116dccSCC Ma 0x1910001f, 0x10006b00, 0x81461001, 0xb14690a1, 0xd82044e5, 0x17c07c1f, 1187d116dccSCC Ma 0x1910001f, 0x10006610, 0x81079001, 0xd80044e4, 0x17c07c1f, 0x1990001f, 1197d116dccSCC Ma 0x10006b00, 0x81421801, 0x82429801, 0x81402405, 0xd80044e5, 0x17c07c1f, 1207d116dccSCC Ma 0x1a40001f, 0x100062b0, 0x1280041f, 0xc24007a0, 0x17c07c1f, 0x1910001f, 1217d116dccSCC Ma 0x10006b00, 0x81449001, 0xd8204be5, 0x17c07c1f, 0x1910001f, 0x10006b00, 1227d116dccSCC Ma 0x81009001, 0xd8204984, 0x17c07c1f, 0x1910001f, 0x10006610, 0x81051001, 1237d116dccSCC Ma 0xd8204be4, 0x17c07c1f, 0x1910001f, 0x10006720, 0x81489001, 0xd82046c5, 1247d116dccSCC Ma 0x17c07c1f, 0x1a40001f, 0x10006218, 0x1a80001f, 0x10006264, 0xc24010e0, 1257d116dccSCC Ma 0x17c07c1f, 0x1910001f, 0x1000660c, 0x81051001, 0x1950001f, 0x10006610, 1267d116dccSCC Ma 0x81451401, 0xa1001404, 0xd8004824, 0x17c07c1f, 0xd0004b00, 0x17c07c1f, 1277d116dccSCC Ma 0x17c07c1f, 0x1910001f, 0x10006610, 0x81051001, 0xd8004be4, 0x17c07c1f, 1287d116dccSCC Ma 0x1a40001f, 0x10006218, 0x1a80001f, 0x10006264, 0xc2400ee0, 0x17c07c1f, 1297d116dccSCC Ma 0x1910001f, 0x10006b00, 0x89000004, 0xfffffdff, 0x1940001f, 0x10006b00, 1307d116dccSCC Ma 0xe1400004, 0x17c07c1f, 0x1910001f, 0x10006b00, 0x81451001, 0xd8205305, 1317d116dccSCC Ma 0x17c07c1f, 0x1910001f, 0x10006b00, 0x81011001, 0xd82050a4, 0x17c07c1f, 1327d116dccSCC Ma 0x1910001f, 0x10006610, 0x81059001, 0xd8205304, 0x17c07c1f, 0x1910001f, 1337d116dccSCC Ma 0x10006720, 0x81491001, 0xd8204de5, 0x17c07c1f, 0x1a40001f, 0x1000621c, 1347d116dccSCC Ma 0x1a80001f, 0x1000626c, 0xc24010e0, 0x17c07c1f, 0x1910001f, 0x1000660c, 1357d116dccSCC Ma 0x81059001, 0x1950001f, 0x10006610, 0x81459401, 0xa1001404, 0xd8004f44, 1367d116dccSCC Ma 0x17c07c1f, 0xd0005220, 0x17c07c1f, 0x17c07c1f, 0x1910001f, 0x10006610, 1377d116dccSCC Ma 0x81059001, 0xd8005304, 0x17c07c1f, 0x1a40001f, 0x1000621c, 0x1a80001f, 1387d116dccSCC Ma 0x1000626c, 0xc2400ee0, 0x17c07c1f, 0x1910001f, 0x10006b00, 0x89000004, 1397d116dccSCC Ma 0xfffffbff, 0x1940001f, 0x10006b00, 0xe1400004, 0x17c07c1f, 0x1910001f, 1407d116dccSCC Ma 0x10006b00, 0x81459001, 0xd8205a25, 0x17c07c1f, 0x1910001f, 0x10006b00, 1417d116dccSCC Ma 0x81019001, 0xd82057c4, 0x17c07c1f, 0x1910001f, 0x10006610, 0x81061001, 1427d116dccSCC Ma 0xd8205a24, 0x17c07c1f, 0x1910001f, 0x10006720, 0x81499001, 0xd8205505, 1437d116dccSCC Ma 0x17c07c1f, 0x1a40001f, 0x10006220, 0x1a80001f, 0x10006274, 0xc24010e0, 1447d116dccSCC Ma 0x17c07c1f, 0x1910001f, 0x1000660c, 0x81061001, 0x1950001f, 0x10006610, 1457d116dccSCC Ma 0x81461401, 0xa1001404, 0xd8005664, 0x17c07c1f, 0xd0005940, 0x17c07c1f, 1467d116dccSCC Ma 0x17c07c1f, 0x1910001f, 0x10006610, 0x81061001, 0xd8005a24, 0x17c07c1f, 1477d116dccSCC Ma 0x1a40001f, 0x10006220, 0x1a80001f, 0x10006274, 0xc2400ee0, 0x17c07c1f, 1487d116dccSCC Ma 0x1910001f, 0x10006b00, 0x89000004, 0xfffff7ff, 0x1940001f, 0x10006b00, 1497d116dccSCC Ma 0xe1400004, 0x17c07c1f, 0x1910001f, 0x10006b00, 0x81461001, 0xd8206185, 1507d116dccSCC Ma 0x17c07c1f, 0x1910001f, 0x10006b00, 0x81021001, 0xd8205ec4, 0x17c07c1f, 1517d116dccSCC Ma 0x1910001f, 0x10006610, 0x81081001, 0xd8206184, 0x17c07c1f, 0x1910001f, 1527d116dccSCC Ma 0x10006720, 0x814a1001, 0xd8205c25, 0x17c07c1f, 0x1a40001f, 0x100062a0, 1537d116dccSCC Ma 0x1280041f, 0xc2401540, 0x17c07c1f, 0x1910001f, 0x1000660c, 0x81081001, 1547d116dccSCC Ma 0x1950001f, 0x10006610, 0x81481401, 0xa1001404, 0xd8005d64, 0x17c07c1f, 1557d116dccSCC Ma 0xd00060a0, 0x17c07c1f, 0x17c07c1f, 0x1910001f, 0x10006610, 0x81479001, 1567d116dccSCC Ma 0x81881001, 0x69a00006, 0x00000000, 0x81401805, 0xd8206185, 0x17c07c1f, 1577d116dccSCC Ma 0x1a40001f, 0x100062a0, 0x1280041f, 0xc2401240, 0x17c07c1f, 0x1910001f, 1587d116dccSCC Ma 0x10006b00, 0x89000004, 0xffffefff, 0x1940001f, 0x10006b00, 0xe1400004, 1597d116dccSCC Ma 0x17c07c1f, 0x1910001f, 0x10006b00, 0x81469001, 0xd82068e5, 0x17c07c1f, 1607d116dccSCC Ma 0x1910001f, 0x10006b00, 0x81029001, 0xd8206624, 0x17c07c1f, 0x1910001f, 1617d116dccSCC Ma 0x10006610, 0x81089001, 0xd82068e4, 0x17c07c1f, 0x1910001f, 0x10006720, 1627d116dccSCC Ma 0x814a9001, 0xd8206385, 0x17c07c1f, 0x1a40001f, 0x100062a4, 0x1290841f, 1637d116dccSCC Ma 0xc2401540, 0x17c07c1f, 0x1910001f, 0x1000660c, 0x81089001, 0x1950001f, 1647d116dccSCC Ma 0x10006610, 0x81489401, 0xa1001404, 0xd80064c4, 0x17c07c1f, 0xd0006800, 1657d116dccSCC Ma 0x17c07c1f, 0x17c07c1f, 0x1910001f, 0x10006610, 0x81479001, 0x81889001, 1667d116dccSCC Ma 0x69a00006, 0x00000000, 0x81401805, 0xd82068e5, 0x17c07c1f, 0x1a40001f, 1677d116dccSCC Ma 0x100062a4, 0x1290841f, 0xc2401240, 0x17c07c1f, 0x1910001f, 0x10006b00, 1687d116dccSCC Ma 0x89000004, 0xffffdfff, 0x1940001f, 0x10006b00, 0xe1400004, 0x1910001f, 1697d116dccSCC Ma 0x10006610, 0x81479001, 0x81881001, 0x69600005, 0x00000000, 0xa1401805, 1707d116dccSCC Ma 0x81889001, 0xa1401805, 0xd8006bc5, 0x17c07c1f, 0x1910001f, 0x10006b00, 1717d116dccSCC Ma 0x81421001, 0x82429001, 0x82802405, 0xd8206bca, 0x17c07c1f, 0x1a40001f, 1727d116dccSCC Ma 0x100062b0, 0x1280041f, 0xc2400000, 0x17c07c1f, 0x1990001f, 0x10006b00, 1737d116dccSCC Ma 0x89800006, 0x00003f00, 0x69200006, 0x00000000, 0xd82041e4, 0x17c07c1f, 1747d116dccSCC Ma 0x1990001f, 0x10006320, 0x69200006, 0xbeefbeef, 0xd8006dc4, 0x17c07c1f, 1757d116dccSCC Ma 0xd00041e0, 0x17c07c1f, 0x1910001f, 0x10006358, 0x810b1001, 0xd8006dc4, 1767d116dccSCC Ma 0x17c07c1f, 0x1980001f, 0xdeaddead, 0x19c0001f, 0x01411820, 0xf0000000 1777d116dccSCC Ma }; 1787d116dccSCC Ma static const struct pcm_desc hotplug_pcm = { 1797d116dccSCC Ma .version = "pcm_power_down_mt8173_V37", 1807d116dccSCC Ma .base = hotplug_binary, 1817d116dccSCC Ma .size = 888, 1827d116dccSCC Ma .sess = 2, 1837d116dccSCC Ma .replace = 0, 1847d116dccSCC Ma }; 1857d116dccSCC Ma 1867d116dccSCC Ma static struct pwr_ctrl hotplug_ctrl = { 1877d116dccSCC Ma .wake_src = 0, 1887d116dccSCC Ma .wake_src_md32 = 0, 1897d116dccSCC Ma .wfi_op = WFI_OP_OR, 1907d116dccSCC Ma .mcusys_idle_mask = 1, 1917d116dccSCC Ma .ca7top_idle_mask = 1, 1927d116dccSCC Ma .ca15top_idle_mask = 1, 1937d116dccSCC Ma .disp_req_mask = 1, 1947d116dccSCC Ma .mfg_req_mask = 1, 1957d116dccSCC Ma .md32_req_mask = 1, 1967d116dccSCC Ma .syspwreq_mask = 1, 1977d116dccSCC Ma .pcm_flags = 0, 1987d116dccSCC Ma }; 1997d116dccSCC Ma 2007d116dccSCC Ma static const struct spm_lp_scen spm_hotplug = { 2017d116dccSCC Ma .pcmdesc = &hotplug_pcm, 2027d116dccSCC Ma .pwrctrl = &hotplug_ctrl, 2037d116dccSCC Ma }; 2047d116dccSCC Ma 2057d116dccSCC Ma void spm_go_to_hotplug(void) 2067d116dccSCC Ma { 2077d116dccSCC Ma const struct pcm_desc *pcmdesc = spm_hotplug.pcmdesc; 2087d116dccSCC Ma struct pwr_ctrl *pwrctrl = spm_hotplug.pwrctrl; 2097d116dccSCC Ma 2107d116dccSCC Ma set_pwrctrl_pcm_flags(pwrctrl, 0); 2117d116dccSCC Ma spm_reset_and_init_pcm(); 2127d116dccSCC Ma spm_kick_im_to_fetch(pcmdesc); 2137d116dccSCC Ma spm_set_power_control(pwrctrl); 2147d116dccSCC Ma spm_set_wakeup_event(pwrctrl); 2157d116dccSCC Ma spm_kick_pcm_to_run(pwrctrl); 2167d116dccSCC Ma } 2177d116dccSCC Ma 2187d116dccSCC Ma void spm_clear_hotplug(void) 2197d116dccSCC Ma { 2207d116dccSCC Ma /* Inform SPM that CPU wants to program CPU_WAKEUP_EVENT and 2217d116dccSCC Ma * DISABLE_CPU_DROM */ 2227d116dccSCC Ma 2237d116dccSCC Ma mmio_write_32(SPM_PCM_REG_DATA_INI, PCM_HANDSHAKE_SEND1); 2247d116dccSCC Ma mmio_write_32(SPM_PCM_PWR_IO_EN, PCM_RF_SYNC_R6); 2257d116dccSCC Ma mmio_write_32(SPM_PCM_PWR_IO_EN, 0); 2267d116dccSCC Ma 2277d116dccSCC Ma /* Wait SPM's response, can't use sleep api */ 2287d116dccSCC Ma while ((mmio_read_32(SPM_PCM_FSM_STA) & PCM_END_FSM_STA_MASK) 2297d116dccSCC Ma != PCM_END_FSM_STA_DEF) 2307d116dccSCC Ma ; 2317d116dccSCC Ma 2327d116dccSCC Ma /* no hotplug pcm running */ 2337d116dccSCC Ma clear_all_ready(); 2347d116dccSCC Ma } 2357d116dccSCC Ma 2367d116dccSCC Ma void spm_hotplug_on(unsigned long mpidr) 2377d116dccSCC Ma { 2387d116dccSCC Ma unsigned long linear_id; 2397d116dccSCC Ma 240201d535fSKoan-Sin Tan linear_id = ((mpidr & MPIDR_CLUSTER_MASK) >> 6) | 241201d535fSKoan-Sin Tan (mpidr & MPIDR_CPU_MASK); 242201d535fSKoan-Sin Tan 2437d116dccSCC Ma spm_lock_get(); 2447d116dccSCC Ma if (is_hotplug_ready() == 0) { 2457d116dccSCC Ma spm_mcdi_wakeup_all_cores(); 2467d116dccSCC Ma mmio_clrbits_32(SPM_PCM_RESERVE, PCM_HOTPLUG_VALID_MASK); 2477d116dccSCC Ma spm_go_to_hotplug(); 2487d116dccSCC Ma set_hotplug_ready(); 2497d116dccSCC Ma } 2507d116dccSCC Ma /* turn on CPUx */ 2517d116dccSCC Ma mmio_clrsetbits_32(SPM_PCM_RESERVE, 2527d116dccSCC Ma PCM_HOTPLUG_VALID_MASK | (1 << linear_id), 2537d116dccSCC Ma 1 << (linear_id + PCM_HOTPLUG_VALID_SHIFT)); 2547d116dccSCC Ma spm_lock_release(); 2557d116dccSCC Ma } 2567d116dccSCC Ma 2577d116dccSCC Ma void spm_hotplug_off(unsigned long mpidr) 2587d116dccSCC Ma { 2597d116dccSCC Ma unsigned long linear_id; 2607d116dccSCC Ma 261201d535fSKoan-Sin Tan linear_id = ((mpidr & MPIDR_CLUSTER_MASK) >> 6) | 262201d535fSKoan-Sin Tan (mpidr & MPIDR_CPU_MASK); 263201d535fSKoan-Sin Tan 2647d116dccSCC Ma spm_lock_get(); 2657d116dccSCC Ma if (is_hotplug_ready() == 0) { 2667d116dccSCC Ma spm_mcdi_wakeup_all_cores(); 2677d116dccSCC Ma mmio_clrbits_32(SPM_PCM_RESERVE, PCM_HOTPLUG_VALID_MASK); 2687d116dccSCC Ma spm_go_to_hotplug(); 2697d116dccSCC Ma set_hotplug_ready(); 2707d116dccSCC Ma } 2717d116dccSCC Ma mmio_clrsetbits_32(SPM_PCM_RESERVE, PCM_HOTPLUG_VALID_MASK, 2727d116dccSCC Ma (1 << linear_id) | 2737d116dccSCC Ma (1 << (linear_id + PCM_HOTPLUG_VALID_SHIFT))); 2747d116dccSCC Ma spm_lock_release(); 2757d116dccSCC Ma } 276