1*6fba6e04STony Xie /* 2*6fba6e04STony Xie * Copyright (c) 2016, ARM Limited and Contributors. All rights reserved. 3*6fba6e04STony Xie * 4*6fba6e04STony Xie * Redistribution and use in source and binary forms, with or without 5*6fba6e04STony Xie * modification, are permitted provided that the following conditions are met: 6*6fba6e04STony Xie * 7*6fba6e04STony Xie * Redistributions of source code must retain the above copyright notice, this 8*6fba6e04STony Xie * list of conditions and the following disclaimer. 9*6fba6e04STony Xie * 10*6fba6e04STony Xie * Redistributions in binary form must reproduce the above copyright notice, 11*6fba6e04STony Xie * this list of conditions and the following disclaimer in the documentation 12*6fba6e04STony Xie * and/or other materials provided with the distribution. 13*6fba6e04STony Xie * 14*6fba6e04STony Xie * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 15*6fba6e04STony Xie * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16*6fba6e04STony Xie * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17*6fba6e04STony Xie * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 18*6fba6e04STony Xie * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 19*6fba6e04STony Xie * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 20*6fba6e04STony Xie * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 21*6fba6e04STony Xie * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 22*6fba6e04STony Xie * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 23*6fba6e04STony Xie * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 24*6fba6e04STony Xie * POSSIBILITY OF SUCH DAMAGE. 25*6fba6e04STony Xie */ 26*6fba6e04STony Xie 27*6fba6e04STony Xie #ifndef __SOC_H__ 28*6fba6e04STony Xie #define __SOC_H__ 29*6fba6e04STony Xie 30*6fba6e04STony Xie enum plls_id { 31*6fba6e04STony Xie ABPLL_ID = 0, 32*6fba6e04STony Xie ALPLL_ID, 33*6fba6e04STony Xie DPLL_ID, 34*6fba6e04STony Xie CPLL_ID, 35*6fba6e04STony Xie GPLL_ID, 36*6fba6e04STony Xie NPLL_ID, 37*6fba6e04STony Xie END_PLL_ID, 38*6fba6e04STony Xie }; 39*6fba6e04STony Xie 40*6fba6e04STony Xie /***************************************************************************** 41*6fba6e04STony Xie * secure timer 42*6fba6e04STony Xie *****************************************************************************/ 43*6fba6e04STony Xie #define TIMER_LOADE_COUNT0 0x00 44*6fba6e04STony Xie #define TIMER_LOADE_COUNT1 0x04 45*6fba6e04STony Xie #define TIMER_CURRENT_VALUE0 0x08 46*6fba6e04STony Xie #define TIMER_CURRENT_VALUE1 0x0C 47*6fba6e04STony Xie #define TIMER_CONTROL_REG 0x10 48*6fba6e04STony Xie #define TIMER_INTSTATUS 0x18 49*6fba6e04STony Xie 50*6fba6e04STony Xie #define TIMER_EN 0x1 51*6fba6e04STony Xie 52*6fba6e04STony Xie #define STIMER1_BASE (STIME_BASE + 0x20) 53*6fba6e04STony Xie 54*6fba6e04STony Xie #define CYCL_24M_CNT_US(us) (24 * us) 55*6fba6e04STony Xie #define CYCL_24M_CNT_MS(ms) (ms * CYCL_24M_CNT_US(1000)) 56*6fba6e04STony Xie 57*6fba6e04STony Xie /***************************************************************************** 58*6fba6e04STony Xie * sgrf reg, offset 59*6fba6e04STony Xie *****************************************************************************/ 60*6fba6e04STony Xie #define SGRF_SOC_CON(n) (0x0 + (n) * 4) 61*6fba6e04STony Xie #define SGRF_BUSDMAC_CON(n) (0x100 + (n) * 4) 62*6fba6e04STony Xie 63*6fba6e04STony Xie #define SGRF_SOC_CON_NS 0xffff0000 64*6fba6e04STony Xie 65*6fba6e04STony Xie /***************************************************************************** 66*6fba6e04STony Xie * con6[2]pmusram is security. 67*6fba6e04STony Xie * con6[6]stimer is security. 68*6fba6e04STony Xie *****************************************************************************/ 69*6fba6e04STony Xie #define PMUSRAM_S_SHIFT 2 70*6fba6e04STony Xie #define PMUSRAM_S 1 71*6fba6e04STony Xie #define STIMER_S_SHIFT 6 72*6fba6e04STony Xie #define STIMER_S 1 73*6fba6e04STony Xie #define SGRF_SOC_CON7_BITS ((0xffff << 16) | \ 74*6fba6e04STony Xie (PMUSRAM_S << PMUSRAM_S_SHIFT) | \ 75*6fba6e04STony Xie (STIMER_S << STIMER_S_SHIFT)) 76*6fba6e04STony Xie 77*6fba6e04STony Xie #define SGRF_BUSDMAC_CON0_NS 0xfffcfff8 78*6fba6e04STony Xie #define SGRF_BUSDMAC_CON1_NS 0xffff0fff 79*6fba6e04STony Xie 80*6fba6e04STony Xie /* 81*6fba6e04STony Xie * sgrf_soc_con1~2, mask and offset 82*6fba6e04STony Xie */ 83*6fba6e04STony Xie #define CPU_BOOT_ADDR_WMASK 0xffff0000 84*6fba6e04STony Xie #define CPU_BOOT_ADDR_ALIGN 16 85*6fba6e04STony Xie 86*6fba6e04STony Xie /***************************************************************************** 87*6fba6e04STony Xie * cru reg, offset 88*6fba6e04STony Xie *****************************************************************************/ 89*6fba6e04STony Xie #define CRU_SOFTRST_CON 0x300 90*6fba6e04STony Xie #define CRU_SOFTRSTS_CON(n) (CRU_SOFTRST_CON + ((n) * 4)) 91*6fba6e04STony Xie #define CRU_SOFTRSTS_CON_CNT 15 92*6fba6e04STony Xie 93*6fba6e04STony Xie #define SOFTRST_DMA1 0x40004 94*6fba6e04STony Xie #define SOFTRST_DMA2 0x10001 95*6fba6e04STony Xie 96*6fba6e04STony Xie #define RST_DMA1_MSK 0x4 97*6fba6e04STony Xie #define RST_DMA2_MSK 0x0 98*6fba6e04STony Xie 99*6fba6e04STony Xie #define CRU_CLKSEL_CON 0x100 100*6fba6e04STony Xie #define CRU_CLKSELS_CON(i) (CRU_CLKSEL_CON + ((i) * 4)) 101*6fba6e04STony Xie #define CRU_CLKSEL_CON_CNT 56 102*6fba6e04STony Xie 103*6fba6e04STony Xie #define CRU_CLKGATE_CON 0x200 104*6fba6e04STony Xie #define CRU_CLKGATES_CON(i) (CRU_CLKGATE_CON + ((i) * 4)) 105*6fba6e04STony Xie #define CRU_CLKGATES_CON_CNT 25 106*6fba6e04STony Xie 107*6fba6e04STony Xie #define CRU_GLB_SRST_FST 0x280 108*6fba6e04STony Xie #define CRU_GLB_SRST_SND 0x284 109*6fba6e04STony Xie #define CRU_GLB_RST_CON 0x388 110*6fba6e04STony Xie 111*6fba6e04STony Xie #define CRU_CONS_GATEID(i) (16 * (i)) 112*6fba6e04STony Xie #define GATE_ID(reg, bit) ((reg * 16) + bit) 113*6fba6e04STony Xie 114*6fba6e04STony Xie #define PMU_RST_BY_SECOND_SFT (BIT(1) << 2) 115*6fba6e04STony Xie #define PMU_RST_NOT_BY_SFT (BIT(1) << 2) 116*6fba6e04STony Xie 117*6fba6e04STony Xie /*************************************************************************** 118*6fba6e04STony Xie * pll 119*6fba6e04STony Xie ***************************************************************************/ 120*6fba6e04STony Xie #define PLL_PWR_DN_MSK (0x1 << 1) 121*6fba6e04STony Xie #define PLL_PWR_DN REG_WMSK_BITS(1, 1, 0x1) 122*6fba6e04STony Xie #define PLL_PWR_ON REG_WMSK_BITS(0, 1, 0x1) 123*6fba6e04STony Xie #define PLL_RESET REG_WMSK_BITS(1, 5, 0x1) 124*6fba6e04STony Xie #define PLL_RESET_RESUME REG_WMSK_BITS(0, 5, 0x1) 125*6fba6e04STony Xie #define PLL_BYPASS_MSK (0x1 << 0) 126*6fba6e04STony Xie #define PLL_BYPASS_W_MSK (PLL_BYPASS_MSK << 16) 127*6fba6e04STony Xie #define PLL_BYPASS REG_WMSK_BITS(1, 0, 0x1) 128*6fba6e04STony Xie #define PLL_NO_BYPASS REG_WMSK_BITS(0, 0, 0x1) 129*6fba6e04STony Xie #define PLL_MODE_SHIFT 8 130*6fba6e04STony Xie #define PLL_MODE_MSK 0x3 131*6fba6e04STony Xie #define PLLS_MODE_WMASK (PLL_MODE_MSK << (16 + PLL_MODE_SHIFT)) 132*6fba6e04STony Xie #define PLL_SLOW 0x0 133*6fba6e04STony Xie #define PLL_NORM 0x1 134*6fba6e04STony Xie #define PLL_DEEP 0x2 135*6fba6e04STony Xie #define PLL_SLOW_BITS REG_WMSK_BITS(PLL_SLOW, 8, 0x3) 136*6fba6e04STony Xie #define PLL_NORM_BITS REG_WMSK_BITS(PLL_NORM, 8, 0x3) 137*6fba6e04STony Xie #define PLL_DEEP_BITS REG_WMSK_BITS(PLL_DEEP, 8, 0x3) 138*6fba6e04STony Xie 139*6fba6e04STony Xie #define PLL_CONS(id, i) ((id) * 0x10 + ((i) * 4)) 140*6fba6e04STony Xie 141*6fba6e04STony Xie #define REG_W_MSK(bits_shift, msk) \ 142*6fba6e04STony Xie ((msk) << ((bits_shift) + 16)) 143*6fba6e04STony Xie #define REG_VAL_CLRBITS(val, bits_shift, msk) \ 144*6fba6e04STony Xie (val & (~(msk << bits_shift))) 145*6fba6e04STony Xie #define REG_SET_BITS(bits, bits_shift, msk) \ 146*6fba6e04STony Xie (((bits) & (msk)) << (bits_shift)) 147*6fba6e04STony Xie #define REG_WMSK_BITS(bits, bits_shift, msk) \ 148*6fba6e04STony Xie (REG_W_MSK(bits_shift, msk) | \ 149*6fba6e04STony Xie REG_SET_BITS(bits, bits_shift, msk)) 150*6fba6e04STony Xie 151*6fba6e04STony Xie #define regs_updata_bit_set(addr, shift) \ 152*6fba6e04STony Xie regs_updata_bits((addr), 0x1, 0x1, (shift)) 153*6fba6e04STony Xie #define regs_updata_bit_clr(addr, shift) \ 154*6fba6e04STony Xie regs_updata_bits((addr), 0x0, 0x1, (shift)) 155*6fba6e04STony Xie 156*6fba6e04STony Xie void __dead2 soc_sys_global_soft_reset(void); 157*6fba6e04STony Xie void regs_updata_bits(uintptr_t addr, uint32_t val, 158*6fba6e04STony Xie uint32_t mask, uint32_t shift); 159*6fba6e04STony Xie void soc_sleep_config(void); 160*6fba6e04STony Xie void pm_plls_resume(void); 161*6fba6e04STony Xie 162*6fba6e04STony Xie #endif /* __SOC_H__ */ 163