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