16fba6e04STony Xie /* 26fba6e04STony Xie * Copyright (c) 2016, ARM Limited and Contributors. All rights reserved. 36fba6e04STony Xie * 482cb2c1aSdp-arm * SPDX-License-Identifier: BSD-3-Clause 56fba6e04STony Xie */ 66fba6e04STony Xie 7c3cf06f1SAntonio Nino Diaz #ifndef SOC_H 8c3cf06f1SAntonio Nino Diaz #define SOC_H 96fba6e04STony Xie 106fba6e04STony Xie enum plls_id { 116fba6e04STony Xie ABPLL_ID = 0, 126fba6e04STony Xie ALPLL_ID, 136fba6e04STony Xie DPLL_ID, 146fba6e04STony Xie CPLL_ID, 156fba6e04STony Xie GPLL_ID, 166fba6e04STony Xie NPLL_ID, 176fba6e04STony Xie END_PLL_ID, 186fba6e04STony Xie }; 196fba6e04STony Xie 206fba6e04STony Xie /***************************************************************************** 216fba6e04STony Xie * secure timer 226fba6e04STony Xie *****************************************************************************/ 236fba6e04STony Xie #define TIMER_LOADE_COUNT0 0x00 246fba6e04STony Xie #define TIMER_LOADE_COUNT1 0x04 256fba6e04STony Xie #define TIMER_CURRENT_VALUE0 0x08 266fba6e04STony Xie #define TIMER_CURRENT_VALUE1 0x0C 276fba6e04STony Xie #define TIMER_CONTROL_REG 0x10 286fba6e04STony Xie #define TIMER_INTSTATUS 0x18 296fba6e04STony Xie 306fba6e04STony Xie #define TIMER_EN 0x1 316fba6e04STony Xie 326fba6e04STony Xie #define STIMER1_BASE (STIME_BASE + 0x20) 336fba6e04STony Xie 346fba6e04STony Xie #define CYCL_24M_CNT_US(us) (24 * us) 356fba6e04STony Xie #define CYCL_24M_CNT_MS(ms) (ms * CYCL_24M_CNT_US(1000)) 366fba6e04STony Xie 376fba6e04STony Xie /***************************************************************************** 386fba6e04STony Xie * sgrf reg, offset 396fba6e04STony Xie *****************************************************************************/ 406fba6e04STony Xie #define SGRF_SOC_CON(n) (0x0 + (n) * 4) 416fba6e04STony Xie #define SGRF_BUSDMAC_CON(n) (0x100 + (n) * 4) 426fba6e04STony Xie 436fba6e04STony Xie #define SGRF_SOC_CON_NS 0xffff0000 446fba6e04STony Xie 456fba6e04STony Xie /***************************************************************************** 466fba6e04STony Xie * con6[2]pmusram is security. 476fba6e04STony Xie * con6[6]stimer is security. 486fba6e04STony Xie *****************************************************************************/ 496fba6e04STony Xie #define PMUSRAM_S_SHIFT 2 506fba6e04STony Xie #define PMUSRAM_S 1 516fba6e04STony Xie #define STIMER_S_SHIFT 6 526fba6e04STony Xie #define STIMER_S 1 53*79ca7807SJustin Chadwell #define SGRF_SOC_CON7_BITS ((0xffffu << 16) | \ 546fba6e04STony Xie (PMUSRAM_S << PMUSRAM_S_SHIFT) | \ 556fba6e04STony Xie (STIMER_S << STIMER_S_SHIFT)) 566fba6e04STony Xie 576fba6e04STony Xie #define SGRF_BUSDMAC_CON0_NS 0xfffcfff8 586fba6e04STony Xie #define SGRF_BUSDMAC_CON1_NS 0xffff0fff 596fba6e04STony Xie 606fba6e04STony Xie /* 616fba6e04STony Xie * sgrf_soc_con1~2, mask and offset 626fba6e04STony Xie */ 636fba6e04STony Xie #define CPU_BOOT_ADDR_WMASK 0xffff0000 646fba6e04STony Xie #define CPU_BOOT_ADDR_ALIGN 16 656fba6e04STony Xie 666fba6e04STony Xie /***************************************************************************** 676fba6e04STony Xie * cru reg, offset 686fba6e04STony Xie *****************************************************************************/ 696fba6e04STony Xie #define CRU_SOFTRST_CON 0x300 706fba6e04STony Xie #define CRU_SOFTRSTS_CON(n) (CRU_SOFTRST_CON + ((n) * 4)) 716fba6e04STony Xie #define CRU_SOFTRSTS_CON_CNT 15 726fba6e04STony Xie 736fba6e04STony Xie #define SOFTRST_DMA1 0x40004 746fba6e04STony Xie #define SOFTRST_DMA2 0x10001 756fba6e04STony Xie 766fba6e04STony Xie #define RST_DMA1_MSK 0x4 776fba6e04STony Xie #define RST_DMA2_MSK 0x0 786fba6e04STony Xie 796fba6e04STony Xie #define CRU_CLKSEL_CON 0x100 806fba6e04STony Xie #define CRU_CLKSELS_CON(i) (CRU_CLKSEL_CON + ((i) * 4)) 816fba6e04STony Xie #define CRU_CLKSEL_CON_CNT 56 826fba6e04STony Xie 836fba6e04STony Xie #define CRU_CLKGATE_CON 0x200 846fba6e04STony Xie #define CRU_CLKGATES_CON(i) (CRU_CLKGATE_CON + ((i) * 4)) 856fba6e04STony Xie #define CRU_CLKGATES_CON_CNT 25 866fba6e04STony Xie 876fba6e04STony Xie #define CRU_GLB_SRST_FST 0x280 886fba6e04STony Xie #define CRU_GLB_SRST_SND 0x284 896fba6e04STony Xie #define CRU_GLB_RST_CON 0x388 906fba6e04STony Xie 916fba6e04STony Xie #define CRU_CONS_GATEID(i) (16 * (i)) 926fba6e04STony Xie #define GATE_ID(reg, bit) ((reg * 16) + bit) 936fba6e04STony Xie 946fba6e04STony Xie #define PMU_RST_BY_SECOND_SFT (BIT(1) << 2) 956fba6e04STony Xie #define PMU_RST_NOT_BY_SFT (BIT(1) << 2) 966fba6e04STony Xie 976fba6e04STony Xie /*************************************************************************** 986fba6e04STony Xie * pll 996fba6e04STony Xie ***************************************************************************/ 1006fba6e04STony Xie #define PLL_PWR_DN_MSK (0x1 << 1) 1016fba6e04STony Xie #define PLL_PWR_DN REG_WMSK_BITS(1, 1, 0x1) 1026fba6e04STony Xie #define PLL_PWR_ON REG_WMSK_BITS(0, 1, 0x1) 1036fba6e04STony Xie #define PLL_RESET REG_WMSK_BITS(1, 5, 0x1) 1046fba6e04STony Xie #define PLL_RESET_RESUME REG_WMSK_BITS(0, 5, 0x1) 1056fba6e04STony Xie #define PLL_BYPASS_MSK (0x1 << 0) 1066fba6e04STony Xie #define PLL_BYPASS_W_MSK (PLL_BYPASS_MSK << 16) 1076fba6e04STony Xie #define PLL_BYPASS REG_WMSK_BITS(1, 0, 0x1) 1086fba6e04STony Xie #define PLL_NO_BYPASS REG_WMSK_BITS(0, 0, 0x1) 1096fba6e04STony Xie #define PLL_MODE_SHIFT 8 1106fba6e04STony Xie #define PLL_MODE_MSK 0x3 1116fba6e04STony Xie #define PLLS_MODE_WMASK (PLL_MODE_MSK << (16 + PLL_MODE_SHIFT)) 1126fba6e04STony Xie #define PLL_SLOW 0x0 1136fba6e04STony Xie #define PLL_NORM 0x1 1146fba6e04STony Xie #define PLL_DEEP 0x2 1156fba6e04STony Xie #define PLL_SLOW_BITS REG_WMSK_BITS(PLL_SLOW, 8, 0x3) 1166fba6e04STony Xie #define PLL_NORM_BITS REG_WMSK_BITS(PLL_NORM, 8, 0x3) 1176fba6e04STony Xie #define PLL_DEEP_BITS REG_WMSK_BITS(PLL_DEEP, 8, 0x3) 1186fba6e04STony Xie 1196fba6e04STony Xie #define PLL_CONS(id, i) ((id) * 0x10 + ((i) * 4)) 1206fba6e04STony Xie 1216fba6e04STony Xie #define REG_W_MSK(bits_shift, msk) \ 1226fba6e04STony Xie ((msk) << ((bits_shift) + 16)) 1236fba6e04STony Xie #define REG_VAL_CLRBITS(val, bits_shift, msk) \ 1246fba6e04STony Xie (val & (~(msk << bits_shift))) 1256fba6e04STony Xie #define REG_SET_BITS(bits, bits_shift, msk) \ 1266fba6e04STony Xie (((bits) & (msk)) << (bits_shift)) 1276fba6e04STony Xie #define REG_WMSK_BITS(bits, bits_shift, msk) \ 1286fba6e04STony Xie (REG_W_MSK(bits_shift, msk) | \ 1296fba6e04STony Xie REG_SET_BITS(bits, bits_shift, msk)) 1306fba6e04STony Xie 1316fba6e04STony Xie #define regs_updata_bit_set(addr, shift) \ 1326fba6e04STony Xie regs_updata_bits((addr), 0x1, 0x1, (shift)) 1336fba6e04STony Xie #define regs_updata_bit_clr(addr, shift) \ 1346fba6e04STony Xie regs_updata_bits((addr), 0x0, 0x1, (shift)) 1356fba6e04STony Xie 1366fba6e04STony Xie void regs_updata_bits(uintptr_t addr, uint32_t val, 1376fba6e04STony Xie uint32_t mask, uint32_t shift); 1386fba6e04STony Xie void soc_sleep_config(void); 1396fba6e04STony Xie void pm_plls_resume(void); 1406fba6e04STony Xie 141c3cf06f1SAntonio Nino Diaz #endif /* SOC_H */ 142