blob: 9741667037fa14db4f915dff274df2a235ae08c5 [file] [log] [blame]
/*
* Copyright (c) 2015, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include <common/debug.h>
#include <drivers/delay_timer.h>
#include <lib/bakery_lock.h>
#include <lib/mmio.h>
#include <mt8516_def.h>
#include <spm.h>
#include <spm_suspend.h>
/*
* System Power Manager (SPM) is a hardware module, which controls cpu or
* system power for different power scenarios using different firmware.
* This driver controls the system power in system suspend flow.
*/
#define WAKE_SRC_FOR_SUSPEND \
(WAKE_SRC_KP | WAKE_SRC_EINT | WAKE_SRC_CONN_WDT | WAKE_SRC_CONN2AP | \
WAKE_SRC_USB_CD | WAKE_SRC_USB_PDN | WAKE_SRC_ETH | WAKE_SRC_IRRX |\
WAKE_SRC_SYSPWREQ)
#define WAKE_SRC_FOR_MD32 0
#define spm_is_wakesrc_invalid(wakesrc) \
(!!((unsigned int)(wakesrc) & 0xc0003803))
const unsigned int spm_flags = SPM_INFRA_PDN_DIS | SPM_26M_OFF_DIS | SPM_32K_LESS;
enum wake_reason_t spm_wake_reason = WR_NONE;
/**********************************************************
* PCM sequence for cpu suspend
**********************************************************/
static const unsigned int suspend_binary_ca7[] = {
0x803d0400, 0x803b0400, 0xa1d58407, 0x81f68407, 0x803a0400, 0x1b80001f,
0x20000000, 0x80300400, 0x80328400, 0xa1d28407, 0x81f20407, 0x80338400,
0x80318400, 0xa15f8405, 0x82851801, 0xd80002ca, 0x17c07c1f, 0x18c0001f,
0x10006234, 0xc0c02c20, 0x1200041f, 0xa15e8405, 0x81f00407, 0xc2803a80,
0x1290041f, 0x82069801, 0x82471801, 0xa2002408, 0xd8000f88, 0x17c07c1f,
0xe8208000, 0x1000009c, 0x04000000, 0xe8208000, 0x100000b0, 0x00010000,
0xe8208000, 0x1000007c, 0x00002508, 0x1ad0001f, 0x10006c30, 0x8a80000b,
0x00000030, 0x1294281f, 0xa2922c0a, 0xaa80000a, 0x00000004, 0x1a00001f,
0x10210008, 0xe8208000, 0x10210004, 0x00001d00, 0xaa40000a, 0x00900000,
0xe2000009, 0xe8208000, 0x10210000, 0x00080401, 0x1b80001f, 0x20000032,
0xe8208000, 0x10210004, 0x00001d00, 0xe8208000, 0x10210008, 0x00100c00,
0xe8208000, 0x10210000, 0x00080401, 0x1b80001f, 0x2000079e, 0xe8208000,
0x10210004, 0x00001d00, 0xe8208000, 0x10210008, 0x00100400, 0xe8208000,
0x10210000, 0x00080401, 0x1b80001f, 0x20000032, 0xe8208000, 0x10210004,
0x00001d00, 0xe8208000, 0x10210008, 0x03400048, 0xe8208000, 0x10210000,
0x00080401, 0x1b80001f, 0x20000032, 0xe8208000, 0x10210004, 0x00001d00,
0xe8208000, 0x10210008, 0x00400004, 0xe8208000, 0x10210000, 0x00080401,
0x1b80001f, 0x20000032, 0xe8208000, 0x10210004, 0x00001d00, 0xe8208000,
0x10210008, 0x00702000, 0xe8208000, 0x10210000, 0x00080401, 0x1b80001f,
0x20000032, 0xe8208000, 0x1000006c, 0x04000000, 0xe8208000, 0x100000a0,
0x00010000, 0xe8208000, 0x1000007c, 0x00002528, 0x1b00001f, 0x7fffd7ff,
0xe8208000, 0x10000054, 0x00400000, 0xf0000000, 0x17c07c1f, 0x1b00001f,
0x3fffc7ff, 0xd800152c, 0x17c07c1f, 0x82281801, 0xc8c031c8, 0x17c07c1f,
0xe8208000, 0x10000084, 0x00400000, 0x82851801, 0xd80012aa, 0x17c07c1f,
0x18c0001f, 0x10006234, 0xc0c02da0, 0x17c07c1f, 0xa15e0405, 0xc2803a80,
0x1290841f, 0xa0138400, 0x1b00001f, 0x3fffcfff, 0xa0128400, 0xa0118400,
0x81f58407, 0xa1d68407, 0x82069801, 0x82471801, 0x82a02401, 0xa15f0405,
0xa1d20407, 0x81f28407, 0xa0100400, 0xd8001528, 0xa01a0400, 0xa01d2400,
0xa01b2800, 0xf0000000, 0x17c07c1f, 0x82059801, 0xd8001628, 0x17c07c1f,
0xa15f8405, 0x80318400, 0x80328400, 0x1b00001f, 0x7fffd7ff, 0xf0000000,
0x17c07c1f, 0x82059801, 0xd80017e8, 0x17c07c1f, 0xa15f0405, 0xa0128400,
0xa0118400, 0xc2803a80, 0x1290841f, 0xc2803a80, 0x129f041f, 0x1b00001f,
0x3fffcfff, 0xf0000000, 0x17c07c1f, 0x81f30407, 0x82831801, 0xd8001f0a,
0x17c07c1f, 0x82839801, 0xd8001b4a, 0x17c07c1f, 0x1a00001f, 0x10006240,
0xe220001e, 0xe220000c, 0x1b80001f, 0x2000001a, 0xe220000d, 0x1a00001f,
0x10006c60, 0x1a50001f, 0x10006c60, 0xa2540409, 0xe2000009, 0x1b80001f,
0x20000300, 0xa15d8405, 0xa2548409, 0xe2000009, 0x81fa8407, 0x81f80407,
0x1b80001f, 0x20000004, 0x81f88407, 0x1b80001f, 0x20000004, 0x80370400,
0x80310400, 0x1b80001f, 0x20000004, 0xe8208000, 0x102111a4, 0x0ffffffc,
0xe8208000, 0x102121a4, 0x0ffffffc, 0x1b80001f, 0x2000001a, 0x80368400,
0x81fa0407, 0x82aab401, 0xa156a805, 0x81f08407, 0x821a840d, 0xd8001e88,
0x17c07c1f, 0xa15c8405, 0xe8208000, 0x10006354, 0xfffff421, 0x82059801,
0xd8002028, 0x17c07c1f, 0xe8208000, 0x10006354, 0xfffff423, 0xa1df0407,
0xc2803a80, 0x1291041f, 0x1b00001f, 0xbfffc7ff, 0xf0000000, 0x17c07c1f,
0x1a40001f, 0x10006c2c, 0x1a10001f, 0x10006c2c, 0x02000408, 0xe2400008,
0x1a50001f, 0x10006608, 0x820ba401, 0x8217a00d, 0xd82024a8, 0x17c07c1f,
0x81f08407, 0xe8208000, 0x10006354, 0xfffff421, 0xa1df0407, 0x1b00001f,
0x3fffc7ff, 0x1b80001f, 0x20000004, 0xd8002bec, 0x17c07c1f, 0x1b00001f,
0xbfffc7ff, 0x1b80001f, 0x20000004, 0xd8002bec, 0x17c07c1f, 0x82831801,
0xd8002aea, 0x17c07c1f, 0x81ff0407, 0xc0c03060, 0x17c07c1f, 0xd8002283,
0x17c07c1f, 0xa1da0407, 0xa0170400, 0xa0168400, 0xe8208000, 0x102111a4,
0x0ffffff8, 0xe8208000, 0x102121a4, 0x0ffffff8, 0xa0110400, 0xa1d88407,
0xa1d80407, 0xa1da8407, 0x1a00001f, 0x10006c60, 0x1a700008, 0x17c07c1f,
0x82748409, 0xe2000009, 0xa15c0405, 0x1ad0001f, 0x10006b00, 0x82d1840b,
0xd800282b, 0x17c07c1f, 0x82839801, 0xd8002aea, 0x17c07c1f, 0x1a00001f,
0x10006c60, 0x82740409, 0xe2000009, 0x18c0001f, 0x10006240, 0xc0c02fc0,
0x17c07c1f, 0xa15d0405, 0x1ad0001f, 0x10006b00, 0x82d2040b, 0xd8002a4b,
0x17c07c1f, 0x82041801, 0xd8002b68, 0x17c07c1f, 0xa1d30407, 0xc2803a80,
0x1291841f, 0x1b00001f, 0x7fffd7ff, 0xf0000000, 0x17c07c1f, 0xe0f07f16,
0x1380201f, 0xe0f07f1e, 0x1380201f, 0xe0f07f0e, 0x1b80001f, 0x20000100,
0xe0f07f0c, 0xe0f07f0d, 0xe0f07e0d, 0xf0000000, 0x17c07c1f, 0xe0f07f0d,
0xe0f07f0f, 0xe0f07f1e, 0xe0f07f12, 0x1b80001f, 0x2000000a, 0xf0000000,
0x17c07c1f, 0xe0e00016, 0x1380201f, 0xe0e0001e, 0x1380201f, 0xe0e0000e,
0xe0e0000c, 0xe0e0000d, 0xf0000000, 0x17c07c1f, 0xe0e0000f, 0xe0e0001e,
0xe0e00012, 0xf0000000, 0x17c07c1f, 0x1212841f, 0xa1d08407, 0xd8203128,
0x80eab401, 0xd80030a3, 0x02200408, 0x1a00001f, 0x10006814, 0xe2000003,
0xf0000000, 0x17c07c1f, 0xa1d00407, 0x1211041f, 0x02200408, 0x1b80001f,
0x20000104, 0x80ca3401, 0xd8003363, 0x17c07c1f, 0xd8003208, 0x17c07c1f,
0x1a00001f, 0x10006814, 0xe2000001, 0xf0000000, 0x17c07c1f, 0xd800346a,
0x17c07c1f, 0xe2e00036, 0xe2e0003e, 0x1380201f, 0xe2e0003c, 0xd82035aa,
0x17c07c1f, 0x1b80001f, 0x20000018, 0xe2e0007c, 0x1b80001f, 0x20000003,
0xe2e0005c, 0xe2e0004c, 0xe2e0004d, 0xf0000000, 0x17c07c1f, 0xa1d40407,
0x1391841f, 0xf0000000, 0x17c07c1f, 0xd800370a, 0x17c07c1f, 0xe2e0004f,
0xe2e0006f, 0xe2e0002f, 0xd82037aa, 0x17c07c1f, 0xe2e0002e, 0xe2e0003e,
0xe2e00032, 0xf0000000, 0x17c07c1f, 0x82481801, 0xd82038c9, 0x17c07c1f,
0x1b80001f, 0x20000050, 0xd8003969, 0x17c07c1f, 0x18d0001f, 0x10006604,
0x10cf8c1f, 0xd82037e3, 0x17c07c1f, 0xf0000000, 0x17c07c1f, 0x1ad0001f,
0x10006b00, 0x82c0280b, 0xd80039ab, 0x17c07c1f, 0xf0000000, 0x17c07c1f,
0x1a00001f, 0x10006b18, 0x1a50001f, 0x10006b18, 0xa2402809, 0xe2000009,
0xf0000000, 0x17c07c1f, 0xe2200000, 0x1a700008, 0x17c07c1f, 0x17c07c1f,
0x82482401, 0xd8003ba9, 0x17c07c1f, 0xf0000000, 0x17c07c1f, 0xe2200004,
0x1a700008, 0x17c07c1f, 0x17c07c1f, 0x82482401, 0xd8203cc9, 0x17c07c1f,
0xf0000000, 0x17c07c1f, 0xe220004f, 0xe220000f, 0xe220002f, 0xe220002e,
0xe220003e, 0xe2200032, 0xf0000000, 0x17c07c1f, 0xe2200036, 0x1a50001f,
0x1000660c, 0x82400809, 0xd8203ee9, 0x17c07c1f, 0xe220003e, 0x1a50001f,
0x10006610, 0x82400809, 0xd8203fa9, 0x17c07c1f, 0xe220007e, 0xe220007c,
0xe220005c, 0xe220004c, 0xe220004d, 0xf0000000, 0x17c07c1f, 0xc7c03dc0,
0x17c07c1f, 0xe2400001, 0x1259081f, 0x1a10001f, 0x1000660c, 0x82002408,
0xd82041a8, 0x17c07c1f, 0x1a10001f, 0x10006c60, 0xa2002808, 0x1a40001f,
0x10006c60, 0xe2400008, 0xf0000000, 0x17c07c1f, 0xc7c03dc0, 0x17c07c1f,
0xd800450a, 0x1254041f, 0xe8208000, 0x10006248, 0x00000000, 0x1a10001f,
0x10006248, 0x82002408, 0xd8004428, 0x17c07c1f, 0xf0000000, 0x17c07c1f,
0xe8208000, 0x10006244, 0x00000001, 0x1a10001f, 0x10006244, 0x82002408,
0xd8204568, 0x17c07c1f, 0xf0000000, 0x17c07c1f, 0x18d0001f, 0x10006c60,
0x82800c0a, 0x18c0001f, 0x10006c60, 0xe0c0000a, 0xe240001f, 0x1259081f,
0x1a90001f, 0x1000660c, 0x82802809, 0xd800474a, 0x17c07c1f, 0xc7c03ec0,
0x17c07c1f, 0xf0000000, 0x17c07c1f, 0xd80049ea, 0x1254041f, 0xe8208000,
0x10006248, 0x00000001, 0x1a90001f, 0x10006248, 0x8280240a, 0xd820490a,
0x17c07c1f, 0xd0004ae0, 0x17c07c1f, 0xe8208000, 0x10006244, 0x00000000,
0x1a90001f, 0x10006244, 0x8280240a, 0xd8004a4a, 0x17c07c1f, 0xc7c03ec0,
0x17c07c1f, 0xf0000000, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x1840001f, 0x00000001,
0xe8208000, 0x10006b18, 0x00000000, 0xe8208000, 0x10006c00, 0x00000000,
0x11407c1f, 0x1a10001f, 0x1000660c, 0x8166a001, 0x82662001, 0xa150a405,
0x8265a001, 0xa1512405, 0x82652001, 0xa151a405, 0x8264a001, 0xa1562405,
0x1990001f, 0x10006b08, 0x82089801, 0xd800a6e8, 0x17c07c1f, 0xd000a320,
0x17c07c1f, 0x1100241f, 0x1b00001f, 0x3ffec6fd, 0x82461401, 0xd8008d29,
0x17c07c1f, 0x1a10001f, 0x10006720, 0x82002001, 0x82201408, 0x82201008,
0xd82085a8, 0x17c07c1f, 0x1a00001f, 0x10006c40, 0xc7c03b80, 0x17c07c1f,
0xa1400405, 0x1a10001f, 0x10006720, 0x8200a001, 0x82209408, 0x82209008,
0xd8208728, 0x17c07c1f, 0x1a00001f, 0x10006c44, 0xc7c03b80, 0x17c07c1f,
0xa1508405, 0x1a10001f, 0x10006720, 0x82012001, 0x82211408, 0x82211008,
0xd82088a8, 0x17c07c1f, 0x1a00001f, 0x10006c48, 0xc7c03b80, 0x17c07c1f,
0xa1510405, 0x1a10001f, 0x10006720, 0x8201a001, 0x82219408, 0x82219008,
0xd8208a28, 0x17c07c1f, 0x1a00001f, 0x10006c4c, 0xc7c03b80, 0x17c07c1f,
0xa1518405, 0xa260141f, 0x8a400009, 0x0000000f, 0xd8008d29, 0x17c07c1f,
0x82661401, 0x82661009, 0xd8208d29, 0x17c07c1f, 0x1a50001f, 0x10006720,
0x828c2401, 0xd8208b4a, 0x17c07c1f, 0x1a00001f, 0x10006c50, 0xe8208000,
0x10006c54, 0x00000001, 0xc7c03b80, 0x17c07c1f, 0xa1560405, 0x1b80001f,
0x90100000, 0x82261401, 0xd8008ee8, 0x17c07c1f, 0x8a000004, 0x0000100f,
0xd8008e48, 0x17c07c1f, 0xd8208eec, 0x17c07c1f, 0x1a00001f, 0x10006c50,
0xc7c03ca0, 0x17c07c1f, 0x81760405, 0x82461401, 0xd800a269, 0x17c07c1f,
0x82001401, 0xd82093c8, 0x17c07c1f, 0x82401001, 0xd8009109, 0x17c07c1f,
0x8a40000c, 0x07fde7ff, 0x1a10001f, 0x10006918, 0x822e2001, 0xa2402009,
0xd82093c9, 0x17c07c1f, 0x1a40001f, 0x10006c24, 0x1a10001f, 0x10006918,
0x8a000008, 0xf0000000, 0xa2003008, 0xe2400008, 0x1a00001f, 0x10006c40,
0xc7c03ca0, 0x17c07c1f, 0x81600405, 0xe8208000, 0x10006f00, 0x00000000,
0xe8208000, 0x10006b30, 0x00000000, 0xe8208000, 0x100063e0, 0x00000001,
0x82009401, 0xd82098a8, 0x17c07c1f, 0x82409001, 0xd80095e9, 0x17c07c1f,
0x824db001, 0x1a10001f, 0x10006918, 0x822ea001, 0xa2402009, 0x1a90001f,
0x10006b04, 0x82a0a801, 0xb24c312a, 0xd82098a9, 0x17c07c1f, 0x1a40001f,
0x10006c28, 0x1a10001f, 0x10006918, 0x8a000008, 0xf0000000, 0xa2003008,
0xe2400008, 0x1a00001f, 0x10006c44, 0xc7c03ca0, 0x17c07c1f, 0x81708405,
0xe8208000, 0x10006f04, 0x00000000, 0xe8208000, 0x10006b34, 0x00000000,
0xe8208000, 0x100063e0, 0x00000002, 0x82011401, 0xd8209d88, 0x17c07c1f,
0x82411001, 0xd8009ac9, 0x17c07c1f, 0x824e3001, 0x1a10001f, 0x10006918,
0x822f2001, 0xa2402009, 0x1a90001f, 0x10006b04, 0x82a12801, 0xb24c312a,
0xd8209d89, 0x17c07c1f, 0x1a40001f, 0x10006c2c, 0x1a10001f, 0x10006918,
0x8a000008, 0xf0000000, 0xa2003008, 0xe2400008, 0x1a00001f, 0x10006c48,
0xc7c03ca0, 0x17c07c1f, 0x81710405, 0xe8208000, 0x10006f08, 0x00000000,
0xe8208000, 0x10006b38, 0x00000000, 0xe8208000, 0x100063e0, 0x00000004,
0x82019401, 0xd820a268, 0x17c07c1f, 0x82419001, 0xd8009fa9, 0x17c07c1f,
0x824eb001, 0x1a10001f, 0x10006918, 0x822fa001, 0xa2402009, 0x1a90001f,
0x10006b04, 0x82a1a801, 0xb24c312a, 0xd820a269, 0x17c07c1f, 0x1a40001f,
0x10006c30, 0x1a10001f, 0x10006918, 0x8a000008, 0xf0000000, 0xa2003008,
0xe2400008, 0x1a00001f, 0x10006c4c, 0xc7c03ca0, 0x17c07c1f, 0x81718405,
0xe8208000, 0x10006f0c, 0x00000000, 0xe8208000, 0x10006b3c, 0x00000000,
0xe8208000, 0x100063e0, 0x00000008, 0x8a000004, 0xffff0000, 0x6aa00008,
0xabcd0000, 0xd800a62a, 0x17c07c1f, 0x1a50001f, 0x10006b00, 0x8a000009,
0xffff0000, 0x6aa00008, 0xbeef0000, 0xd800836a, 0x17c07c1f, 0x6aa00008,
0xabcd0000, 0xd800836a, 0x17c07c1f, 0x6aa00008, 0x50d10000, 0xd800a6ea,
0x17c07c1f, 0x6aa00008, 0xdcba0000, 0xd800a62a, 0x1100241f, 0x1b80001f,
0x20000104, 0xd000a320, 0x17c07c1f, 0x8a000004, 0xffff0000, 0xa9000008,
0x0000dead, 0xf0000000, 0x17c07c1f, 0xa1d50407, 0x1b80001f, 0x2000037e,
0x81f50407, 0xa1d48407, 0x1990001f, 0x10006b08, 0xe8208000, 0x10006b18,
0x00000000, 0x11407c1f, 0x1b00001f, 0x3fffc7ff, 0x1b80001f, 0xd00f0000,
0xd800c9ec, 0x17c07c1f, 0xa1578405, 0xe8208000, 0x10006354, 0xfffff423,
0x82059801, 0xd820aa48, 0x17c07c1f, 0xe8208000, 0x10006354, 0xfffff421,
0x1b80001f, 0x20000020, 0x82801801, 0xd800afca, 0x17c07c1f, 0x81f60407,
0x1a00001f, 0x10006c40, 0xc7c03b80, 0x17c07c1f, 0xa1580405, 0xc20039a0,
0x1290041f, 0xa1d10407, 0x82809801, 0xd800afca, 0x17c07c1f, 0x1a00001f,
0x10006c54, 0x82a11801, 0xe200000a, 0x1a00001f, 0x10006c50, 0xc7c03b80,
0x17c07c1f, 0xa1590405, 0xc20039a0, 0x1290841f, 0x82819801, 0xd800afca,
0x17c07c1f, 0x1a00001f, 0x10006290, 0xc2003dc0, 0x17c07c1f, 0x1b80001f,
0x20000027, 0x82811801, 0xa1d1a807, 0xa15a0405, 0xc20039a0, 0x1291041f,
0xc2803a80, 0x1292041f, 0x82499801, 0xd800b149, 0x17c07c1f, 0x1a00001f,
0x10006294, 0xe8208000, 0x10006294, 0x0003ffff, 0xe2203fff, 0xe22003ff,
0xd000b1a0, 0x17c07c1f, 0xe8208000, 0x10006294, 0x0003fc3f, 0xc20039a0,
0x1293041f, 0x82021801, 0xd800b3a8, 0x17c07c1f, 0x1a10001f, 0x10000004,
0x1a40001f, 0x10000004, 0x82378408, 0xe2400008, 0x1b80001f, 0x2000000a,
0xa1d40407, 0x1b80001f, 0x20000003, 0x82049801, 0xd800b4c8, 0x17c07c1f,
0xe8208000, 0x10006604, 0x00000001, 0xc0c037e0, 0x17c07c1f, 0xa15b0405,
0x82879801, 0xd800b86a, 0x17c07c1f, 0xa1d38407, 0x82829801, 0xd800b5ca,
0x17c07c1f, 0xa1d98407, 0xa0108400, 0xa0148400, 0xa0188400, 0x82829801,
0xd800b86a, 0x17c07c1f, 0xa0120400, 0xa0150400, 0xa0158400, 0xa01f0400,
0xa0190400, 0xa0198400, 0x82891801, 0xd800b86a, 0x17c07c1f, 0x1a10001f,
0x10018000, 0x82398408, 0x1a40001f, 0x10018000, 0xe2400008, 0xe8208000,
0x10006310, 0x0b160008, 0xe8208000, 0x10006c00, 0x0000000f, 0x1b00001f,
0xbfffc7ff, 0x82861801, 0xb2859941, 0xd820baca, 0x17c07c1f, 0xe8208000,
0x10006c00, 0x0000003c, 0x1b80001f, 0x90100000, 0xd000bba0, 0x17c07c1f,
0x1b80001f, 0x90100000, 0x82000001, 0xc8c00008, 0x17c07c1f, 0xd000bc00,
0x17c07c1f, 0x82028001, 0xc8c01568, 0x17c07c1f, 0x820f1c01, 0xc8e01868,
0x17c07c1f, 0x1b00001f, 0x3fffc7ff, 0x82499801, 0xd800be49, 0x17c07c1f,
0x1a00001f, 0x10006294, 0xe22007fe, 0xe2200ffc, 0xe2201ff8, 0xe2203ff0,
0xe2203fe0, 0xe2203fc0, 0xd000c080, 0x17c07c1f, 0xe8208000, 0x10006294,
0x0003fc1f, 0xe8208000, 0x10006294, 0x0003fc0f, 0xe8208000, 0x10006294,
0x0003fc0e, 0xe8208000, 0x10006294, 0x0003fc0c, 0xe8208000, 0x10006294,
0x0003fc08, 0xe8208000, 0x10006294, 0x0003fc00, 0x1b80001f, 0x20000020,
0xe8208000, 0x10006294, 0x0003ffc0, 0xe8208000, 0x10006294, 0x0003fc00,
0x82049801, 0xd800c2a8, 0x17c07c1f, 0xe8208000, 0x10006604, 0x00000000,
0xc0c037e0, 0x17c07c1f, 0xa15b8405, 0x82891801, 0xd800c40a, 0x17c07c1f,
0x1a10001f, 0x10018000, 0xa2198408, 0x1a40001f, 0x10018000, 0xe2400008,
0x1b80001f, 0x2000001a, 0x80388400, 0x80390400, 0x80398400, 0x803f0400,
0x1b80001f, 0x20000300, 0x80348400, 0x80350400, 0x80358400, 0x1b80001f,
0x20000104, 0x10007c1f, 0x81f38407, 0x81f98407, 0x81f40407, 0x82801801,
0xd800c9ea, 0x17c07c1f, 0x82809801, 0xd800c88a, 0x17c07c1f, 0x82819801,
0xd800c7ea, 0x17c07c1f, 0x82811801, 0x81f1a807, 0x1a00001f, 0x10006290,
0xc2003ec0, 0x1097841f, 0xa15a8405, 0x1a00001f, 0x10006c50, 0xc7c03ca0,
0x17c07c1f, 0xa1598405, 0x1a00001f, 0x10006c40, 0xc7c03ca0, 0x17c07c1f,
0xa1588405, 0x1a10001f, 0x10000004, 0x1a40001f, 0x10000004, 0xa2178408,
0xe2400008, 0x82079401, 0xd800cc28, 0x17c07c1f, 0x82001801, 0xd800cc28,
0x17c07c1f, 0xa1570405, 0x13007c1f, 0x1b80001f, 0xd00f0000, 0x1a00001f,
0x10006c40, 0xc7c03b80, 0x17c07c1f, 0x1a00001f, 0x10006c40, 0xc7c03ca0,
0x17c07c1f, 0xa1db0407, 0x81f10407, 0xa1d60407, 0x81f48407, 0xe8208000,
0x10006b00, 0x00000000, 0x1ac0001f, 0x55aa55aa, 0x82289801, 0xd800a328,
0x17c07c1f, 0xf0000000, 0x17c07c1f
};
/*
* PCM binary for suspend scenario
*/
static const struct pcm_desc suspend_pcm_ca7 = {
.version = "SPM_FW_v0.1_6SPMC",
.base = suspend_binary_ca7,
.size = 1647,
.sess = 2,
.replace = 0,
.vec0 = EVENT_VEC(11, 1, 0, 0), /* FUNC_26M_WAKEUP */
.vec1 = EVENT_VEC(12, 1, 0, 131), /* FUNC_26M_SLEEP */
.vec2 = EVENT_VEC(30, 1, 0, 195), /* FUNC_APSRC_WAKEUP */
.vec3 = EVENT_VEC(31, 1, 0, 264), /* FUNC_APSRC_SLEEP */
.vec4 = EVENT_VEC(11, 1, 0, 171), /* FUNC_26MIDLE_WAKEUP */
.vec5 = EVENT_VEC(12, 1, 0, 181), /* FUNC_26MIDLE_SLEEP */
};
/*
* SPM settings for suspend scenario
*/
static struct pwr_ctrl spm_ctrl = {
.wake_src = WAKE_SRC_FOR_SUSPEND,
.timer_val = 600,
.r0_ctrl_en = 1,
.r7_ctrl_en = 1,
.infra_dcm_lock = 1,
.wfi_op = WFI_OP_AND,
.ca7top_idle_mask = 0,
.ca15top_idle_mask = 1,
.mcusys_idle_mask = 0,
.disp0_req_mask = 0,
.mfg_req_mask = 0,
.srclkenai_mask = 1,
.ca7_wfi0_en = 1,
.ca7_wfi1_en = 1,
.ca7_wfi2_en = 1,
.ca7_wfi3_en = 1,
.ca15_wfi0_en = 0,
.ca15_wfi1_en = 0,
.ca15_wfi2_en = 0,
.ca15_wfi3_en = 0,
};
/*
* go_to_sleep_before_wfi() - trigger SPM to enter suspend scenario
*/
static void go_to_sleep_before_wfi(const unsigned int spm_flags)
{
struct pwr_ctrl *pwrctrl;
struct wake_status wakesta;
spm_get_wakeup_status(&wakesta);
spm_output_wake_reason(&wakesta);
pwrctrl = &spm_ctrl;
set_pwrctrl_pcm_flags(pwrctrl, spm_flags);
spm_set_sysclk_settle();
INFO("sec = %u, wakesrc = 0x%x (%u)(%u)\n",
pwrctrl->timer_val, pwrctrl->wake_src,
is_cpu_pdn(pwrctrl->pcm_flags),
is_infra_pdn(pwrctrl->pcm_flags));
spm_reset_and_init_pcm();
spm_kick_im_to_fetch(&suspend_pcm_ca7);
spm_init_pcm_register();
spm_init_event_vector(&suspend_pcm_ca7);
spm_write(SPM_PCM_MAS_PAUSE_MASK, 0xffffffff);
spm_write(SPM_PCM_REG_DATA_INI, 0);
spm_write(SPM_PCM_PWR_IO_EN, PCM_PWRIO_EN_R0 | PCM_PWRIO_EN_R7);
uint32_t con0 = spm_read(SPM_PCM_CON0) & ~(CON0_IM_KICK | CON0_PCM_KICK);
spm_write(SPM_PCM_CON0, con0 | CON0_CFG_KEY | CON0_PCM_KICK);
spm_write(SPM_PCM_CON0, con0 | CON0_CFG_KEY);
spm_set_power_control(pwrctrl);
pwrctrl->timer_val = pwrctrl->timer_val * 32768;
spm_set_wakeup_event(pwrctrl);
spm_kick_pcm_to_run(pwrctrl);
spm_write(SPM_PCM_RESERVE, (spm_read(SPM_PCM_RESERVE) & ~PCM_CMD_MASK) | PCM_CMD_SUSPEND_PCM);
}
/*
* go_to_sleep_after_wfi() - get wakeup reason after
* leaving suspend scenario and clean up SPM settings
*/
static enum wake_reason_t go_to_sleep_after_wfi(void)
{
struct wake_status wakesta;
static enum wake_reason_t last_wr = WR_NONE;
spm_get_wakeup_status(&wakesta);
spm_clean_after_wakeup();
last_wr = spm_output_wake_reason(&wakesta);
return last_wr;
}
void spm_system_suspend(void)
{
spm_lock_get();
go_to_sleep_before_wfi(spm_flags);
set_suspend_ready();
spm_lock_release();
}
void spm_system_suspend_finish(void)
{
spm_lock_get();
spm_wake_reason = go_to_sleep_after_wfi();
INFO("spm_wake_reason=%d\n", spm_wake_reason);
clear_all_ready();
spm_lock_release();
}