xref: /rk3399_ARM-atf/plat/mediatek/drivers/apusys/mt8196/apusys_rv_pwr_ctrl.h (revision 7d196ded502d49a2c170fc0f30c8f4b94584d5fe)
183f836c9SKarl Li /*
283f836c9SKarl Li  * Copyright (c) 2024, MediaTek Inc. All rights reserved.
383f836c9SKarl Li  *
483f836c9SKarl Li  * SPDX-License-Identifier: BSD-3-Clause
583f836c9SKarl Li  */
683f836c9SKarl Li 
783f836c9SKarl Li #ifndef APUSYS_RV_PWR_CTL_H
883f836c9SKarl Li #define APUSYS_RV_PWR_CTL_H
983f836c9SKarl Li 
1083f836c9SKarl Li #include <platform_def.h>
1183f836c9SKarl Li 
123ee4b2deSKarl Li #include "apusys_rv.h"
133ee4b2deSKarl Li 
1483f836c9SKarl Li #define SUPPORT_APU_CLEAR_MBOX_DUMMY	(1)
1583f836c9SKarl Li 
1683f836c9SKarl Li enum apu_hw_sem_sys_id {
1783f836c9SKarl Li 	APU_HW_SEM_SYS_APU   = 0UL,	/* mbox0 */
1883f836c9SKarl Li 	APU_HW_SEM_SYS_GZ    = 1UL,	/* mbox1 */
1983f836c9SKarl Li 	APU_HW_SEM_SYS_SCP   = 3UL,	/* mbox3 */
2083f836c9SKarl Li 	APU_HW_SEM_SYS_APMCU = 11UL,	/* mbox11 */
2183f836c9SKarl Li };
2283f836c9SKarl Li 
233ee4b2deSKarl Li int apusys_rv_pwr_ctrl(enum APU_PWR_OP op);
2483f836c9SKarl Li int rv_iommu_hw_sem_unlock(void);
2583f836c9SKarl Li int rv_iommu_hw_sem_trylock(void);
2683f836c9SKarl Li int apu_hw_sema_ctl(uint32_t sem_addr, uint8_t usr_bit, uint8_t ctl, uint32_t timeout,
2783f836c9SKarl Li 		    uint8_t bypass);
2883f836c9SKarl Li 
2983f836c9SKarl Li #define HW_SEM_TIMEOUT	(300) /* 300 us */
30*1ba50c33SChungying Lu #define HW_SEM_NO_WAIT	(0)   /* no wait */
3183f836c9SKarl Li 
3283f836c9SKarl Li /* APU MBOX */
3383f836c9SKarl Li #define MBOX_WKUP_CFG		(0x80)
3483f836c9SKarl Li #define MBOX_WKUP_MASK		(0x84)
3583f836c9SKarl Li #define MBOX_FUNC_CFG		(0xb0)
3683f836c9SKarl Li #define MBOX_DOMAIN_CFG		(0xe0)
3783f836c9SKarl Li 
3883f836c9SKarl Li #define MBOX_CTRL_LOCK		BIT(0)
3983f836c9SKarl Li #define MBOX_NO_MPU_SHIFT	(16)
4083f836c9SKarl Li #define MBOX_RC_SHIFT		(24)
4183f836c9SKarl Li 
4283f836c9SKarl Li #define MBOX_RX_NS_SHIFT	(16)
4383f836c9SKarl Li #define MBOX_RX_DOMAIN_SHIFT	(17)
4483f836c9SKarl Li #define MBOX_TX_NS_SHIFT	(24)
4583f836c9SKarl Li #define MBOX_TX_DOMAIN_SHIFT	(25)
4683f836c9SKarl Li 
4783f836c9SKarl Li #define APU_REG_AO_GLUE_CONFG	(APU_AO_CTRL + 0x20)
4883f836c9SKarl Li 
4983f836c9SKarl Li #define ENABLE_INFRA_WA
5083f836c9SKarl Li 
5183f836c9SKarl Li enum apu_infra_bit_id {
5283f836c9SKarl Li 	APU_INFRA_SYS_APMCU = 1UL,
5383f836c9SKarl Li 	APU_INFRA_SYS_GZ    = 2UL,
5483f836c9SKarl Li 	APU_INFRA_SYS_SCP   = 3UL,
5583f836c9SKarl Li };
5683f836c9SKarl Li 
5783f836c9SKarl Li #define APU_MBOX(i)		(APU_MBOX0 + 0x10000 * i)
5883f836c9SKarl Li 
5983f836c9SKarl Li #define APU_MBOX_FUNC_CFG(i)	(APU_MBOX(i) + MBOX_FUNC_CFG)
6083f836c9SKarl Li #define APU_MBOX_DOMAIN_CFG(i)	(APU_MBOX(i) + MBOX_DOMAIN_CFG)
6183f836c9SKarl Li #define APU_MBOX_WKUP_CFG(i)	(APU_MBOX(i) + MBOX_WKUP_CFG)
6283f836c9SKarl Li 
633ee4b2deSKarl Li enum apu_hw_sem_op {
643ee4b2deSKarl Li 	HW_SEM_PUT = 0,
653ee4b2deSKarl Li 	HW_SEM_GET = 1,
663ee4b2deSKarl Li };
673ee4b2deSKarl Li 
683ee4b2deSKarl Li #define HW_SEM_PUT_BIT_SHIFT	(16)
6983f836c9SKarl Li 
7083f836c9SKarl Li /* bypass mbox register Dump for secure master */
7183f836c9SKarl Li #define APU_MBOX_DBG_EN		(0x190f2380)
7283f836c9SKarl Li 
7383f836c9SKarl Li /* apu_mbox register definition for mbox addr change*/
7483f836c9SKarl Li #define APU_MBOX_SEMA0_CTRL	(0x090)
7583f836c9SKarl Li #define APU_MBOX_SEMA0_RST	(0x094)
7683f836c9SKarl Li #define APU_MBOX_SEMA0_STA	(0x098)
7783f836c9SKarl Li #define APU_MBOX_SEMA1_CTRL	(0x0A0)
7883f836c9SKarl Li #define APU_MBOX_SEMA1_RST	(0x0A4)
7983f836c9SKarl Li #define APU_MBOX_SEMA1_STA	(0x0A8)
8083f836c9SKarl Li #define APU_MBOX_DUMMY		(0x040)
8183f836c9SKarl Li #define APU_MBOX_OFFSET(i)	(0x10000 * i)
8283f836c9SKarl Li 
8383f836c9SKarl Li /* apu infra workaround */
8483f836c9SKarl Li #define APU_INFRA_DISABLE	(APU_INFRA_BASE + 0xC18)
8583f836c9SKarl Li #define APU_INFRA_ENABLE	(APU_INFRA_BASE + 0xC14)
8683f836c9SKarl Li #define APU_INFRA_STATUS	(APU_INFRA_BASE + 0xC10)
873ee4b2deSKarl Li #define APU_INFRA_STATUS_MASK	(0x1fffe)
8883f836c9SKarl Li #define APU_INFRA_HW_SEM	(APUSYS_CE_BASE + 0xE00)
8983f836c9SKarl Li #define APU_RPC_STATUS		(0x190f0044)
9083f836c9SKarl Li 
913ee4b2deSKarl Li #define APU_INFRA_BIT_OFF	(16)
923ee4b2deSKarl Li #define APU_RPC_STATUS_BIT	BIT(0)
933ee4b2deSKarl Li 
9483f836c9SKarl Li #endif /* APUSYS_RV_PWR_CTL_H */
95