| /* |
| * 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(); |
| } |