1b0b3c865SKever Yang /* 2b0b3c865SKever Yang * (C) Copyright 2016 Rockchip Electronics Co., Ltd 3b0b3c865SKever Yang * 4b0b3c865SKever Yang * SPDX-License-Identifier: GPL-2.0+ 5b0b3c865SKever Yang */ 6b0b3c865SKever Yang 7b0b3c865SKever Yang #ifndef __ASM_ARCH_CRU_RK3399_H_ 8b0b3c865SKever Yang #define __ASM_ARCH_CRU_RK3399_H_ 9b0b3c865SKever Yang 10b0b3c865SKever Yang #include <common.h> 11b0b3c865SKever Yang 12c8a6bc96SSimon Glass /* Private data for the clock driver - used by rockchip_get_cru() */ 13c8a6bc96SSimon Glass struct rk3399_clk_priv { 14c8a6bc96SSimon Glass struct rk3399_cru *cru; 15*044bc79dSElaine Zhang ulong armlclk_hz; 16*044bc79dSElaine Zhang ulong armlclk_enter_hz; 17*044bc79dSElaine Zhang ulong armlclk_init_hz; 18*044bc79dSElaine Zhang ulong armbclk_hz; 19*044bc79dSElaine Zhang ulong armbclk_enter_hz; 20*044bc79dSElaine Zhang ulong armbclk_init_hz; 21*044bc79dSElaine Zhang bool sync_kernel; 22*044bc79dSElaine Zhang bool set_armclk_rate; 23c8a6bc96SSimon Glass }; 24c8a6bc96SSimon Glass 255ae2fd97SKever Yang struct rk3399_pmuclk_priv { 265ae2fd97SKever Yang struct rk3399_pmucru *pmucru; 275ae2fd97SKever Yang }; 285ae2fd97SKever Yang 29b0b3c865SKever Yang struct rk3399_pmucru { 30b0b3c865SKever Yang u32 ppll_con[6]; 31b0b3c865SKever Yang u32 reserved[0x1a]; 32b0b3c865SKever Yang u32 pmucru_clksel[6]; 33b0b3c865SKever Yang u32 pmucru_clkfrac_con[2]; 34b0b3c865SKever Yang u32 reserved2[0x18]; 35b0b3c865SKever Yang u32 pmucru_clkgate_con[3]; 36b0b3c865SKever Yang u32 reserved3; 37b0b3c865SKever Yang u32 pmucru_softrst_con[2]; 38b0b3c865SKever Yang u32 reserved4[2]; 39b0b3c865SKever Yang u32 pmucru_rstnhold_con[2]; 40b0b3c865SKever Yang u32 reserved5[2]; 41b0b3c865SKever Yang u32 pmucru_gatedis_con[2]; 42b0b3c865SKever Yang }; 43b0b3c865SKever Yang check_member(rk3399_pmucru, pmucru_gatedis_con[1], 0x134); 44b0b3c865SKever Yang 45b0b3c865SKever Yang struct rk3399_cru { 46b0b3c865SKever Yang u32 apll_l_con[6]; 47b0b3c865SKever Yang u32 reserved[2]; 48b0b3c865SKever Yang u32 apll_b_con[6]; 49b0b3c865SKever Yang u32 reserved1[2]; 50b0b3c865SKever Yang u32 dpll_con[6]; 51b0b3c865SKever Yang u32 reserved2[2]; 52b0b3c865SKever Yang u32 cpll_con[6]; 53b0b3c865SKever Yang u32 reserved3[2]; 54b0b3c865SKever Yang u32 gpll_con[6]; 55b0b3c865SKever Yang u32 reserved4[2]; 56b0b3c865SKever Yang u32 npll_con[6]; 57b0b3c865SKever Yang u32 reserved5[2]; 58b0b3c865SKever Yang u32 vpll_con[6]; 59b0b3c865SKever Yang u32 reserved6[0x0a]; 60b0b3c865SKever Yang u32 clksel_con[108]; 61b0b3c865SKever Yang u32 reserved7[0x14]; 62b0b3c865SKever Yang u32 clkgate_con[35]; 63b0b3c865SKever Yang u32 reserved8[0x1d]; 64b0b3c865SKever Yang u32 softrst_con[21]; 65b0b3c865SKever Yang u32 reserved9[0x2b]; 66b0b3c865SKever Yang u32 glb_srst_fst_value; 67b0b3c865SKever Yang u32 glb_srst_snd_value; 68b0b3c865SKever Yang u32 glb_cnt_th; 69b0b3c865SKever Yang u32 misc_con; 70b0b3c865SKever Yang u32 glb_rst_con; 71b0b3c865SKever Yang u32 glb_rst_st; 72b0b3c865SKever Yang u32 reserved10[0x1a]; 73b0b3c865SKever Yang u32 sdmmc_con[2]; 74b0b3c865SKever Yang u32 sdio0_con[2]; 75b0b3c865SKever Yang u32 sdio1_con[2]; 76b0b3c865SKever Yang }; 77b0b3c865SKever Yang check_member(rk3399_cru, sdio1_con[1], 0x594); 78b0b3c865SKever Yang #define MHz 1000000 79b0b3c865SKever Yang #define KHz 1000 80b0b3c865SKever Yang #define OSC_HZ (24*MHz) 81b0b3c865SKever Yang #define APLL_HZ (600*MHz) 826bfdfc4fSElaine Zhang #define GPLL_HZ (800 * MHz) 83b0b3c865SKever Yang #define CPLL_HZ (384*MHz) 846bfdfc4fSElaine Zhang #define NPLL_HZ (600 * MHz) 858389dcbfSKever Yang #define PPLL_HZ (676*MHz) 86b0b3c865SKever Yang 878389dcbfSKever Yang #define PMU_PCLK_HZ (48*MHz) 88b0b3c865SKever Yang 89b0b3c865SKever Yang #define ACLKM_CORE_HZ (300*MHz) 90b0b3c865SKever Yang #define ATCLK_CORE_HZ (300*MHz) 91b0b3c865SKever Yang #define PCLK_DBG_HZ (100*MHz) 92b0b3c865SKever Yang 934897499eSElaine Zhang #define PERIHP_ACLK_HZ (150 * MHz) 944897499eSElaine Zhang #define PERIHP_HCLK_HZ (75 * MHz) 954897499eSElaine Zhang #define PERIHP_PCLK_HZ (37500 * KHz) 96b0b3c865SKever Yang 9741c0dd9bSElaine Zhang #define PERILP0_ACLK_HZ (300 * MHz) 984897499eSElaine Zhang #define PERILP0_HCLK_HZ (100 * MHz) 994897499eSElaine Zhang #define PERILP0_PCLK_HZ (50 * MHz) 100b0b3c865SKever Yang 1014897499eSElaine Zhang #define PERILP1_HCLK_HZ (100 * MHz) 1024897499eSElaine Zhang #define PERILP1_PCLK_HZ (50 * MHz) 103b0b3c865SKever Yang 104b0b3c865SKever Yang #define PWM_CLOCK_HZ PMU_PCLK_HZ 105b0b3c865SKever Yang 106ccced9e1SLin Huang enum apll_frequencies { 107ccced9e1SLin Huang APLL_1600_MHZ, 1088b75ff34SElaine Zhang APLL_816_MHZ, 109ccced9e1SLin Huang APLL_600_MHZ, 110ccced9e1SLin Huang }; 111ccced9e1SLin Huang 112ccced9e1SLin Huang enum cpu_cluster { 113ccced9e1SLin Huang CPU_CLUSTER_LITTLE, 114ccced9e1SLin Huang CPU_CLUSTER_BIG, 115b0b3c865SKever Yang }; 116b0b3c865SKever Yang 1176bfdfc4fSElaine Zhang enum rk3399_pll_id { 1186bfdfc4fSElaine Zhang APLLL_ID = 0, 1196bfdfc4fSElaine Zhang APLLB_ID, 1206bfdfc4fSElaine Zhang DPLL_ID, 1216bfdfc4fSElaine Zhang CPLL_ID, 1226bfdfc4fSElaine Zhang GPLL_ID, 1236bfdfc4fSElaine Zhang NPLL_ID, 1246bfdfc4fSElaine Zhang VPLL_ID, 1256bfdfc4fSElaine Zhang 1266bfdfc4fSElaine Zhang PPLL_ID, 1276bfdfc4fSElaine Zhang 1286bfdfc4fSElaine Zhang END_PLL_ID 1296bfdfc4fSElaine Zhang }; 1306bfdfc4fSElaine Zhang 1318b75ff34SElaine Zhang struct rk3399_clk_info { 1328b75ff34SElaine Zhang unsigned long id; 1338b75ff34SElaine Zhang char *name; 1348b75ff34SElaine Zhang bool is_cru; 1358b75ff34SElaine Zhang }; 1368b75ff34SElaine Zhang 137b0b3c865SKever Yang #endif /* __ASM_ARCH_CRU_RK3399_H_ */ 138