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