developer | 312ade3 | 2022-11-15 20:33:18 +0800 | [diff] [blame^] | 1 | /* |
| 2 | * Copyright (c) 2023, MediaTek Inc. All rights reserved. |
| 3 | * |
| 4 | * SPDX-License-Identifier: BSD-3-Clause |
| 5 | */ |
| 6 | |
| 7 | #include <common/debug.h> |
| 8 | #include <lib/mmio.h> |
| 9 | #include "mt_spm_notifier.h" |
| 10 | #include "mt_spm_sspm_intc.h" |
| 11 | #include <platform_def.h> |
| 12 | |
| 13 | #define MT_SPM_SSPM_MBOX_OFF(x) (SSPM_MBOX_3_BASE + x) |
| 14 | #define MT_SPM_MBOX(slot) MT_SPM_SSPM_MBOX_OFF((slot << 2UL)) |
| 15 | |
| 16 | /* LOOKUP SSPM_MBOX_SPM_LP1 */ |
| 17 | #define SSPM_MBOX_SPM_LP_LOOKUP1 MT_SPM_MBOX(0) |
| 18 | /* LOOKUP SSPM_MBOX_SPM_LP2 */ |
| 19 | #define SSPM_MBOX_SPM_LP_LOOKUP2 MT_SPM_MBOX(1) |
| 20 | |
| 21 | #define SSPM_MBOX_SPM_LP1 MT_SPM_MBOX(2) |
| 22 | #define SSPM_MBOX_SPM_LP2 MT_SPM_MBOX(3) |
| 23 | |
| 24 | int mt_spm_sspm_notify_u32(int type, unsigned int val) |
| 25 | { |
| 26 | switch (type) { |
| 27 | case MT_SPM_NOTIFY_LP_ENTER: |
| 28 | mmio_write_32(SSPM_MBOX_SPM_LP1, val); |
| 29 | DO_SPM_SSPM_LP_SUSPEND(); |
| 30 | break; |
| 31 | case MT_SPM_NOTIFY_LP_LEAVE: |
| 32 | mmio_write_32(SSPM_MBOX_SPM_LP1, val); |
| 33 | DO_SPM_SSPM_LP_RESUME(); |
| 34 | break; |
| 35 | default: |
| 36 | panic(); |
| 37 | break; |
| 38 | } |
| 39 | return 0; |
| 40 | } |