358 lines
		
	
	
		
			9.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			358 lines
		
	
	
		
			9.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */
 | |
| /*
 | |
|  * Copyright (c) 2023 Rockchip Electronics Co., Ltd.
 | |
|  */
 | |
| 
 | |
| #ifndef __MACH_ROCKCHIP_RV1106_PM_H
 | |
| #define __MACH_ROCKCHIP_RV1106_PM_H
 | |
| 
 | |
| #define RV1106_WAKEUP_TO_SYSTEM_RESET	0
 | |
| #define RV1106_HPMCU_FAST_WKUP_TIMEOUT	2000 /* ms */
 | |
| 
 | |
| #define RV1106_PERIGRF_OFFSET		0x0
 | |
| #define RV1106_VENCGRF_OFFSET		0x10000
 | |
| #define RV1106_NPUGRF_OFFSET		0x18000
 | |
| #define RV1106_PMUGRF_OFFSET		0x20000
 | |
| #define RV1106_DDRGRF_OFFSET		0x30000
 | |
| #define RV1106_COREGRF_OFFSET		0x40000
 | |
| #define RV1106_VIGRF_OFFSET		0x50000
 | |
| #define RV1106_VOGRF_OFFSET		0x60000
 | |
| 
 | |
| #define RV1106_PERISGRF_OFFSET		0x70000
 | |
| #define RV1106_VISGRF_OFFSET		0x72000
 | |
| #define RV1106_NPUSGRF_OFFSET		0x74000
 | |
| #define RV1106_CORESGRF_OFFSET		0x76000
 | |
| #define RV1106_VENCSGRF_OFFSET		0x78000
 | |
| #define RV1106_VOSGRF_OFFSET		0x7a000
 | |
| #define RV1106_PMUSGRF_OFFSET		0x80000
 | |
| 
 | |
| #define RV1106_GIC_OFFSET		0x1f0000
 | |
| #define RV1106_HPTIMER_OFFSET		0x2f0000
 | |
| #define RV1106_PMU_OFFSET		0x300000
 | |
| #define RV1106_GPIO0_OFFSET		0x380000
 | |
| #define RV1106_GPIO0IOC_OFFSET		0x388000
 | |
| #define RV1106_PMUPVTM_OFFSET		0x390000
 | |
| 
 | |
| #define RV1106_PMUCRU_OFFSET		0x3a0000
 | |
| #define RV1106_CRU_OFFSET		0x3b0000
 | |
| #define RV1106_PVTPLLCRU_OFFSET		0x3b1000
 | |
| #define RV1106_PERICRU_OFFSET		0x3b2000
 | |
| #define RV1106_VICRU_OFFSET		0x3b4000
 | |
| #define RV1106_NPUCRU_OFFSET		0x3b6000
 | |
| #define RV1106_CORECRU_OFFSET		0x3b8000
 | |
| #define RV1106_VENCCRU_OFFSET		0x3ba000
 | |
| #define RV1106_VOCRU_OFFSET		0x3bc000
 | |
| 
 | |
| #define RV1106_UART2_OFFSET		0x4c0000
 | |
| 
 | |
| #define RV1106_GPIO1_OFFSET		0x530000
 | |
| #define RV1106_GPIO1IOC_OFFSET		0x538000
 | |
| #define RV1106_GPIO2_OFFSET		0x540000
 | |
| #define RV1106_GPIO2IOC_OFFSET		0x548000
 | |
| #define RV1106_GPIO3_OFFSET		0x550000
 | |
| #define RV1106_GPIO3IOC_OFFSET		0x558000
 | |
| #define RV1106_GPIO4_OFFSET		0x560000
 | |
| #define RV1106_GPIO4IOC_OFFSET		0x568000
 | |
| 
 | |
| #define RV1106_NSTIMER_OFFSET		0x580000
 | |
| #define RV1106_STIMER_OFFSET		0x590000
 | |
| #define RV1106_WDTNS_OFFSET		0x5a0000
 | |
| #define RV1106_WDTS_OFFSET		0x5b0000
 | |
| #define RV1106_MBOX_OFFSET		0x5c0000
 | |
| #define RV1106_PMUSRAM_OFFSET		0x670000
 | |
| #define RV1106_DDRC_OFFSET		0x800000
 | |
| #define RV1106_FW_DDR_OFFSET		0x900000
 | |
| #define RV1106_FW_SRAM_OFFSET		0x910000
 | |
| 
 | |
| #define RV1106_DEV_REG_BASE		0xff000000
 | |
| #define RV1106_DEV_REG_SIZE		0x920000
 | |
| 
 | |
| #define RV1106_PMUSRAM_BASE		\
 | |
| 	(RV1106_DEV_REG_BASE + RV1106_PMUSRAM_OFFSET)
 | |
| 
 | |
| /* cru */
 | |
| #define RV1106_CRU_PLL_CON(pll_id, i)	((pll_id) * 0x20 + (i) * 4)
 | |
| #define RV1106_CRU_MODE_CON00		0x280
 | |
| #define RV1106_CRU_GATE_CON(i)		(0x800 + (i) * 4)
 | |
| #define RV1106_CRU_GATE_CON_NUM		4
 | |
| #define RV1106_CRU_GLB_SRST_FST		0xc08
 | |
| #define RV1106_CRU_GLB_RST_CON		0xc10
 | |
| 
 | |
| #define CRU_PLLCON1_PWRDOWN		BIT(13)
 | |
| #define CRU_PLLCON1_LOCK_STATUS		BIT(10)
 | |
| 
 | |
| #define RV1106_PMUCRU_GATE_CON(i)	(0x800 + (i) * 4)
 | |
| #define RV1106_PMUCRU_CLKSEL_CON(i)	(0x300 + (i) * 4)
 | |
| #define RV1106_PMUCRU_GATE_CON_NUM	3
 | |
| 
 | |
| #define RV1106_PERICRU_GATE_CON(i)	(0x800 + (i) * 4)
 | |
| #define RV1106_PERICRU_CLKSEL_CON(i)	(0x300 + (i) * 4)
 | |
| #define RV1106_PERICRU_GATE_CON_NUM	8
 | |
| 
 | |
| #define RV1106_NPUCRU_GATE_CON(i)	(0x800 + (i) * 4)
 | |
| #define RV1106_NPUCRU_CLKSEL_CON(i)	(0x300 + (i) * 4)
 | |
| #define RV1106_NPUCRU_GATE_CON_NUM	2
 | |
| 
 | |
| #define RV1106_VENCCRU_GATE_CON(i)	(0x800 + (i) * 4)
 | |
| #define RV1106_VENCCRU_CLKSEL_CON(i)	(0x300 + (i) * 4)
 | |
| #define RV1106_VENCCRU_GATE_CON_NUM	3
 | |
| 
 | |
| #define RV1106_VICRU_GATE_CON(i)	(0x800 + (i) * 4)
 | |
| #define RV1106_VICRU_CLKSEL_CON(i)	(0x300 + (i) * 4)
 | |
| #define RV1106_VICRU_GATE_CON_NUM	3
 | |
| 
 | |
| #define RV1106_VOCRU_GATE_CON(i)	(0x800 + (i) * 4)
 | |
| #define RV1106_VOCRU_CLKSEL_CON(i)	(0x300 + (i) * 4)
 | |
| #define RV1106_VOCRU_GATE_CON_NUM	4
 | |
| 
 | |
| #define RV1106_CORECRU_GATE_CON(i)	(0x800 + (i) * 4)
 | |
| #define RV1106_COERCRU_CLKSEL_CON(i)	(0x300 + (i) * 4)
 | |
| #define RV1106_CORECRU_GATE_CON_NUM	2
 | |
| #define RV1106_COERCRU_SFTRST_CON(i)	(0xa00 + (i) * 4)
 | |
| 
 | |
| /* grf */
 | |
| #define RV1106_PMUGRF_SOC_CON(i)	((i) * 4)
 | |
| #define RV1106_PMUGRF_OS_REG(i)		(0x200 + (i) * 4)
 | |
| 
 | |
| #define RV1106_PMUSGRF_SOC_CON(i)	((i) * 4)
 | |
| 
 | |
| #define RV1106_DDRGRF_CON(i)		((i) * 0x4)
 | |
| 
 | |
| #define RV1106_CORESGRF_HPMCU_BOOTADDR		0x44
 | |
| 
 | |
| #define RV1106_COREGRF_CACHE_PERI_ADDR_START	0x24
 | |
| #define RV1106_COREGRF_CACHE_PERI_ADDR_END	0x28
 | |
| 
 | |
| /* pvmt */
 | |
| #define RV1106_PVTM_CON(i)		(0x4 + (i) * 4)
 | |
| #define RV1106_PVTM_INTEN		0x70
 | |
| #define RV1106_PVTM_INTSTS		0x74
 | |
| #define RV1106_PVTM_STATUS(i)		(0x80 + (i) * 4)
 | |
| 
 | |
| #define RV1106_PVTM_CALC_CNT		24000
 | |
| #define RV1106_PVTM_TARGET_FREQ		32768
 | |
| 
 | |
|  /* gpio */
 | |
| #define RV1106_GPIO_SWPORT_DR_L		0x0000
 | |
| #define RV1106_GPIO_SWPORT_DR_H		0x0004
 | |
| #define RV1106_GPIO_SWPORT_DDR_L	0x0008
 | |
| #define RV1106_GPIO_SWPORT_DDR_H	0x000c
 | |
| #define RV1106_GPIO_INT_EN_L		0x0010
 | |
| #define RV1106_GPIO_INT_EN_H		0x0014
 | |
| #define RV1106_GPIO_INT_MASK_L		0x0018
 | |
| #define RV1106_GPIO_INT_MASK_H		0x001c
 | |
| #define RV1106_GPIO_INT_TYPE_L		0x0020
 | |
| #define RV1106_GPIO_INT_TYPE_H		0x0024
 | |
| #define RV1106_GPIO_INT_POLARITY_L	0x0028
 | |
| #define RV1106_GPIO_INT_POLARITY_H	0x002c
 | |
| #define RV1106_GPIO_INT_BOTHEDGE_L	0x0030
 | |
| #define RV1106_GPIO_INT_BOTHEDGE_H	0x0034
 | |
| #define RV1106_GPIO_DEBOUNCE_L		0x0038
 | |
| #define RV1106_GPIO_DEBOUNCE_H		0x003c
 | |
| #define RV1106_GPIO_DBCLK_DIV_EN_L	0x0040
 | |
| #define RV1106_GPIO_DBCLK_DIV_EN_H	0x0044
 | |
| #define RV1106_GPIO_DBCLK_DIV_CON	0x0048
 | |
| #define RV1106_GPIO_INT_STATUS		0x0050
 | |
| #define RV1106_GPIO_INT_RAWSTATUS	0x0058
 | |
| 
 | |
| /* pmu */
 | |
| #define RV1106_PMU_VERSION		0x000
 | |
| #define RV1106_PMU_PWR_CON		0x004
 | |
| #define RV1106_PMU_GLB_POWER_STS	0x008
 | |
| #define RV1106_PMU_INT_MASK_CON		0x00c
 | |
| #define RV1106_PMU_WAKEUP_INT_CON	0x010
 | |
| #define RV1106_PMU_WAKEUP_INT_ST	0x014
 | |
| #define RV1106_PMU_PMIC_STABLE_CNT	0x024
 | |
| #define RV1106_PMU_OSC_STABLE_CNT	0x028
 | |
| #define RV1106_PMU_WAKEUP_RSTCLR_CNT	0x02c
 | |
| #define RV1106_PMU_PLL_LOCK_CNT		0x030
 | |
| #define RV1106_PMU_WAKEUP_TIMEOUT_CNT	0x048
 | |
| #define RV1106_PMU_PWM_SWITCH_CNT	0x04c
 | |
| #define RV1106_PMU_SCU_PWR_CON		0x080
 | |
| #define RV1106_PMU_SCU_STS		0x084
 | |
| #define RV1106_PMU_BIU_IDLE_CON		0x0b0
 | |
| #define RV1106_PMU_BIU_IDLE_SFTCON	0x0c0
 | |
| #define RV1106_PMU_BIU_IDLE_ACK		0x0d0
 | |
| #define RV1106_PMU_BIU_IDLE_ST		0x0d8
 | |
| #define RV1106_PMU_BIU_AUTO_CON		0x0e0
 | |
| #define RV1106_PMU_DDR_PWR_CON		0x0f0
 | |
| #define RV1106_PMU_DDR_PWR_SFTCON	0x0f4
 | |
| #define RV1106_PMU_DDR_POWER_STS	0x0f8
 | |
| #define RV1106_PMU_DDR_STS		0x0fC
 | |
| #define RV1106_PMU_CRU_PWR_CON0		0x120
 | |
| #define RV1106_PMU_CRU_PWR_CON1		0x140
 | |
| #define RV1106_PMU_CRU_PWR_SFTCON	0x124
 | |
| #define RV1106_PMU_CRU_POWER_STS	0x128
 | |
| #define RV1106_PMU_PLLPD_CON		0x130
 | |
| #define RV1106_PMU_PLLPD_SFTCON		0x134
 | |
| #define RV1106_PMU_INFO_TX_CON		0x150
 | |
| #define RV1106_PMU_SYS_REG(i)		(0x1c0 + (i) * 4)
 | |
| 
 | |
| /* wdt */
 | |
| #define RV1106_WDT_CR			0x0
 | |
| #define RV1106_WDT_TORR			0x4
 | |
| #define RV1106_WDT_CCVR			0x8
 | |
| #define RV1106_WDT_CRR			0xc
 | |
| #define RV1106_WDT_STAT			0x10
 | |
| #define RV1106_WDT_EOI			0x14
 | |
| 
 | |
| #define PMU_SUSPEND_MAGIC		0x02468ace
 | |
| #define PMU_RESUME_MAGIC		0x13579bdf
 | |
| 
 | |
| /* mcu */
 | |
| #define RV1106_MBOX_B2A_STATUS		0x2c
 | |
| #define RV1106_MBOX_B2A_CMD_0		0x30
 | |
| 
 | |
| #define RV1106_HPMCU_MBOX_IRQ_AP	33
 | |
| 
 | |
| #define RV1106_HPMCU_BOOT_ADDR		0x40000
 | |
| #define RV1106_MBOX_CMD_AP_SUSPEND	0x12345600
 | |
| #define RV1106_MBOX_CMD_AP_RESUME	0x12345601
 | |
| #define RV1106_SYS_IS_WKUP		0x87654300
 | |
| 
 | |
| #ifndef __ASSEMBLER__
 | |
| extern unsigned long rkpm_bootdata_cpusp;
 | |
| extern unsigned long rkpm_bootdata_cpu_code;
 | |
| extern unsigned long rkpm_bootdata_l2ctlr_f;
 | |
| extern unsigned long rkpm_bootdata_l2ctlr;
 | |
| extern unsigned long rkpm_bootdata_ddr_code;
 | |
| extern unsigned long rkpm_bootdata_ddr_data;
 | |
| extern unsigned long rv1106_bootram_sz;
 | |
| 
 | |
| void rockchip_slp_cpu_resume(void);
 | |
| void rv1106_rockchip_slp_cpu_resume(void);
 | |
| 
 | |
| #ifdef CONFIG_PM_SLEEP
 | |
| void __init rockchip_suspend_init(void);
 | |
| #else
 | |
| static inline void rockchip_suspend_init(void)
 | |
| {
 | |
| }
 | |
| #endif
 | |
| 
 | |
| enum rv1106_pwr_con {
 | |
| 	RV1106_PMU_PWRMODE_EN = 0,
 | |
| 	RV1106_PMU_BUS_BYPASS = 4,
 | |
| 	RV1106_PMU_DDR_BYPASS = 5,
 | |
| 	RV1106_PMU_CRU_BYPASS = 7,
 | |
| };
 | |
| 
 | |
| enum rv1106_int_mask_con {
 | |
| 	RV1106_PMU_GLB_INT_MASK = 0,
 | |
| };
 | |
| 
 | |
| enum rv1106_wakeup_init_con {
 | |
| 	RV1106_PMU_WAKEUP_CPU_INT_EN = 0,
 | |
| 	RV1106_PMU_WAKEUP_GPIO_INT_EN,
 | |
| 	RV1106_PMU_WAKEUP_SDMMC_EN,
 | |
| 	RV1106_PMU_WAKEUP_SDIO_EN,
 | |
| 
 | |
| 	RV1106_PMU_WAKEUP_USBDEV_EN,
 | |
| 	RV1106_PMU_WAKEUP_TIMER_EN,
 | |
| 	RV1106_PMU_WAKEUP_TIMEOUT_EN,
 | |
| 	RV1106_PMU_WAKEUP_SFT_WAKEUP_CFG,
 | |
| };
 | |
| 
 | |
| enum rv1106_scu_pwr_con {
 | |
| 	RV1106_PMU_SCU_INT_MASK_ENA = 0,
 | |
| 	RV1106_PMU_CPU_INT_MASK_ENA,
 | |
| 	RV1106_PMU_STANDBYWFI_BYPASS,
 | |
| };
 | |
| 
 | |
| enum rv1106_scu_sts {
 | |
| 	RV1106_PMU_STANDBYWFI,
 | |
| 	RV1106_PMU_STANDBYWFIL2,
 | |
| };
 | |
| 
 | |
| enum rv1106_biu_idle_con {
 | |
| 	RV1106_PMU_IDLE_REQ_MSCH = 0,
 | |
| 	RV1106_PMU_IDLE_REQ_DDR,
 | |
| 	RV1106_PMU_IDLE_REQ_NPU,
 | |
| 	RV1106_PMU_IDLE_REQ_NPU_ACLK,
 | |
| 
 | |
| 	RV1106_PMU_IDLE_REQ_VI,
 | |
| 	RV1106_PMU_IDLE_REQ_VO,
 | |
| 	RV1106_PMU_IDLE_REQ_PERI,
 | |
| 	RV1106_PMU_IDLE_REQ_CRU,
 | |
| 
 | |
| 	RV1106_PMU_IDLE_REQ_CPU,
 | |
| 	RV1106_PMU_IDLE_REQ_VENC_COM,
 | |
| 	RV1106_PMU_IDLE_REQ_VEPU,
 | |
| };
 | |
| 
 | |
| enum rv1106_biu_auto_con {
 | |
| 	RV1106_PMU_AUTO_IDLE_MSCH = 0,
 | |
| 	RV1106_PMU_AUTO_IDLE_DDR,
 | |
| 	RV1106_PMU_AUTO_IDLE_NPU,
 | |
| 	RV1106_PMU_AUTO_IDLE_NPU_ACLK,
 | |
| 
 | |
| 	RV1106_PMU_AUTO_IDLE_VI,
 | |
| 	RV1106_PMU_AUTO_IDLE_VO,
 | |
| 	RV1106_PMU_AUTO_IDLE_PERI,
 | |
| 	RV1106_PMU_AUTO_IDLE_CRU,
 | |
| 
 | |
| 	RV1106_PMU_AUTO_IDLE_CPU,
 | |
| 	RV1106_PMU_AUTO_IDLE_VENC_COM,
 | |
| 	RV1106_PMU_AUTO_IDLE_VEPU,
 | |
| };
 | |
| 
 | |
| enum rv1106_ddr_pwr_con {
 | |
| 	RV1106_PMU_DDR_SREF_C_ENA = 0,
 | |
| 	RV1106_PMU_DDRIO_RET_ENA,
 | |
| 	RV1106_PMU_DDRIO_EXIT_ENA,
 | |
| 	RV1106_PMU_DDRCTL_C_AUTO_GATING_ENA,
 | |
| 
 | |
| 	RV1106_PMU_MSCH_AUTO_GATING_ENA = 5,
 | |
| 	RV1106_PMU_DDR_SREF_A_ENA,
 | |
| 	RV1106_PMU_DDRCTL_A_AUTO_GATING_ENA,
 | |
| };
 | |
| 
 | |
| enum rv1106_cru_pwr_con0 {
 | |
| 	RV1106_PMU_ALIVE_32K_ENA = 0,
 | |
| 	RV1106_PMU_OSC_DIS_ENA,
 | |
| 	RV1106_PMU_WAKEUP_RST_ENA,
 | |
| 	RV1106_PMU_INPUT_CLAMP_ENA,
 | |
| 
 | |
| 	RV1106_PMU_ALIVE_OSC_ENA,
 | |
| 	RV1106_PMU_POWER_OFF_ENA,
 | |
| 	RV1106_PMU_PWM_SWITCH_ENA,
 | |
| 	RV1106_PMU_GPIO_IOE_ENA,
 | |
| 	RV1106_PMU_PWM_SWITCH_IOUT,
 | |
| };
 | |
| 
 | |
| enum rv1106_cru_pwr_con1 {
 | |
| 	RV1106_PMU_VI_CLK_SRC_GATE_ENA = 0,
 | |
| 	RV1106_PMU_VO_CLK_SRC_GATE_ENA,
 | |
| 	RV1106_PMU_VENC_CLK_SRC_GATE_ENA,
 | |
| 	RV1106_PMU_NPU_CLK_SRC_GATE_ENA,
 | |
| 
 | |
| 	RV1106_PMU_DDR_CLK_SRC_CATE_ENA,
 | |
| 	RV1106_PMU_PERI_CLK_SRC_GATE_ENA,
 | |
| 	RV1106_PMU_CORE_CLK_SRC_GATE_ENA,
 | |
| 	RV1106_PMU_CRU_CLK_SRC_GATE_ENA,
 | |
| };
 | |
| 
 | |
| enum rv1106_pllpd_con {
 | |
| 	RV1106_PMU_APLL_PD_ENA = 0,
 | |
| 	RV1106_PMU_DPLL_PD_ENA,
 | |
| 	RV1106_PMU_CPLL_PD_ENA,
 | |
| 	RV1106_PMU_GPLL_PD_ENA,
 | |
| };
 | |
| 
 | |
| enum rv1106_pllid {
 | |
| 	RV1106_APLL_ID = 0,
 | |
| 	RV1106_CPLL_ID,
 | |
| 	RV1106_DPLL_ID,
 | |
| 	RV1106_GPLL_ID,
 | |
| };
 | |
| 
 | |
| enum pvtm_con0 {
 | |
| 	PVTM_START = 0,
 | |
| 	PVTM_OSC_EN = 1,
 | |
| 	PVTM_OSC_SEL = 2,
 | |
| 	PVTM_RND_SEED_EN = 5,
 | |
| };
 | |
| 
 | |
| #endif
 | |
| #endif /* __MACH_ROCKCHIP_RV1106_PM_H */
 |