1bae2f282SAndy Yan /* 295b95808SZhihuan He * Copyright (C) 2018 Rockchip Electronics Co., Ltd 395b95808SZhihuan He * Author: Zhihuan He <huan.he@rock-chips.com> 495b95808SZhihuan He * SPDX-License-Identifier: GPL-2.0 5bae2f282SAndy Yan */ 695b95808SZhihuan He 7bae2f282SAndy Yan #ifndef _ASM_ARCH_CRU_RV1108_H 8bae2f282SAndy Yan #define _ASM_ARCH_CRU_RV1108_H 9bae2f282SAndy Yan 10bae2f282SAndy Yan #include <common.h> 11bae2f282SAndy Yan 12bae2f282SAndy Yan #define OSC_HZ (24 * 1000 * 1000) 13bae2f282SAndy Yan 14bae2f282SAndy Yan #define APLL_HZ (600 * 1000000) 155cb579f1SElaine Zhang #define GPLL_HZ (1188 * 1000000) 165cb579f1SElaine Zhang #define ACLK_PERI_HZ (148500000) 175cb579f1SElaine Zhang #define HCLK_PERI_HZ (148500000) 185cb579f1SElaine Zhang #define PCLK_PERI_HZ (74250000) 195cb579f1SElaine Zhang #define ACLK_BUS_HZ (148500000) 20bae2f282SAndy Yan 21bae2f282SAndy Yan struct rv1108_clk_priv { 22bae2f282SAndy Yan struct rv1108_cru *cru; 23bae2f282SAndy Yan ulong rate; 24bae2f282SAndy Yan }; 25bae2f282SAndy Yan 26bae2f282SAndy Yan struct rv1108_cru { 27bae2f282SAndy Yan struct rv1108_pll { 28bae2f282SAndy Yan unsigned int con0; 29bae2f282SAndy Yan unsigned int con1; 30bae2f282SAndy Yan unsigned int con2; 31bae2f282SAndy Yan unsigned int con3; 32bae2f282SAndy Yan unsigned int con4; 33bae2f282SAndy Yan unsigned int con5; 34bae2f282SAndy Yan unsigned int reserved[2]; 35bae2f282SAndy Yan } pll[3]; 36bae2f282SAndy Yan unsigned int clksel_con[46]; 37bae2f282SAndy Yan unsigned int reserved1[2]; 38bae2f282SAndy Yan unsigned int clkgate_con[20]; 39bae2f282SAndy Yan unsigned int reserved2[4]; 40bae2f282SAndy Yan unsigned int softrst_con[13]; 41bae2f282SAndy Yan unsigned int reserved3[3]; 42bae2f282SAndy Yan unsigned int glb_srst_fst_val; 43bae2f282SAndy Yan unsigned int glb_srst_snd_val; 44bae2f282SAndy Yan unsigned int glb_cnt_th; 45bae2f282SAndy Yan unsigned int misc_con; 46bae2f282SAndy Yan unsigned int glb_rst_con; 47bae2f282SAndy Yan unsigned int glb_rst_st; 48bae2f282SAndy Yan unsigned int sdmmc_con[2]; 49bae2f282SAndy Yan unsigned int sdio_con[2]; 50bae2f282SAndy Yan unsigned int emmc_con[2]; 51bae2f282SAndy Yan }; 52bae2f282SAndy Yan check_member(rv1108_cru, emmc_con[1], 0x01ec); 53bae2f282SAndy Yan 54bae2f282SAndy Yan struct pll_div { 55bae2f282SAndy Yan u32 refdiv; 56bae2f282SAndy Yan u32 fbdiv; 57bae2f282SAndy Yan u32 postdiv1; 58bae2f282SAndy Yan u32 postdiv2; 59bae2f282SAndy Yan u32 frac; 60bae2f282SAndy Yan }; 61bae2f282SAndy Yan 62bae2f282SAndy Yan enum { 63bae2f282SAndy Yan /* PLL CON0 */ 64bae2f282SAndy Yan FBDIV_MASK = 0xfff, 65bae2f282SAndy Yan FBDIV_SHIFT = 0, 66bae2f282SAndy Yan 67bae2f282SAndy Yan /* PLL CON1 */ 68bae2f282SAndy Yan POSTDIV2_SHIFT = 12, 69bae2f282SAndy Yan POSTDIV2_MASK = 7 << POSTDIV2_SHIFT, 70bae2f282SAndy Yan POSTDIV1_SHIFT = 8, 71bae2f282SAndy Yan POSTDIV1_MASK = 7 << POSTDIV1_SHIFT, 72bae2f282SAndy Yan REFDIV_MASK = 0x3f, 73bae2f282SAndy Yan REFDIV_SHIFT = 0, 74bae2f282SAndy Yan 75bae2f282SAndy Yan /* PLL CON2 */ 76bae2f282SAndy Yan LOCK_STA_SHIFT = 31, 77bae2f282SAndy Yan LOCK_STA_MASK = 1 << LOCK_STA_SHIFT, 78bae2f282SAndy Yan FRACDIV_MASK = 0xffffff, 79bae2f282SAndy Yan FRACDIV_SHIFT = 0, 80bae2f282SAndy Yan 81bae2f282SAndy Yan /* PLL CON3 */ 82bae2f282SAndy Yan WORK_MODE_SHIFT = 8, 83bae2f282SAndy Yan WORK_MODE_MASK = 1 << WORK_MODE_SHIFT, 84bae2f282SAndy Yan WORK_MODE_SLOW = 0, 85bae2f282SAndy Yan WORK_MODE_NORMAL = 1, 86bae2f282SAndy Yan DSMPD_SHIFT = 3, 87bae2f282SAndy Yan DSMPD_MASK = 1 << DSMPD_SHIFT, 8895b95808SZhihuan He INTEGER_MODE = 1, 8995b95808SZhihuan He GLOBAL_POWER_DOWN_SHIFT = 0, 9095b95808SZhihuan He GLOBAL_POWER_DOWN_MASK = 1 << GLOBAL_POWER_DOWN_SHIFT, 9195b95808SZhihuan He GLOBAL_POWER_DOWN = 1, 9295b95808SZhihuan He GLOBAL_POWER_UP = 0, 93bae2f282SAndy Yan 94bae2f282SAndy Yan /* CLKSEL0_CON */ 95bae2f282SAndy Yan CORE_PLL_SEL_SHIFT = 8, 96bae2f282SAndy Yan CORE_PLL_SEL_MASK = 3 << CORE_PLL_SEL_SHIFT, 97bae2f282SAndy Yan CORE_PLL_SEL_APLL = 0, 98bae2f282SAndy Yan CORE_PLL_SEL_GPLL = 1, 99bae2f282SAndy Yan CORE_PLL_SEL_DPLL = 2, 100bae2f282SAndy Yan CORE_CLK_DIV_SHIFT = 0, 101bae2f282SAndy Yan CORE_CLK_DIV_MASK = 0x1f << CORE_CLK_DIV_SHIFT, 102bae2f282SAndy Yan 10395b95808SZhihuan He /* CLKSEL_CON1 */ 10495b95808SZhihuan He PCLK_DBG_DIV_CON_SHIFT = 4, 10595b95808SZhihuan He PCLK_DBG_DIV_CON_MASK = 0xf << PCLK_DBG_DIV_CON_SHIFT, 10695b95808SZhihuan He ACLK_CORE_DIV_CON_SHIFT = 0, 10795b95808SZhihuan He ACLK_CORE_DIV_CON_MASK = 7 << ACLK_CORE_DIV_CON_SHIFT, 10895b95808SZhihuan He 10995b95808SZhihuan He /* CLKSEL_CON2 */ 11095b95808SZhihuan He ACLK_BUS_PLL_SEL_SHIFT = 8, 11195b95808SZhihuan He ACLK_BUS_PLL_SEL_MASK = 3 << ACLK_BUS_PLL_SEL_SHIFT, 11295b95808SZhihuan He ACLK_BUS_PLL_SEL_GPLL = 0, 11395b95808SZhihuan He ACLK_BUS_PLL_SEL_APLL = 1, 11495b95808SZhihuan He ACLK_BUS_PLL_SEL_DPLL = 2, 11595b95808SZhihuan He ACLK_BUS_DIV_CON_SHIFT = 0, 11695b95808SZhihuan He ACLK_BUS_DIV_CON_MASK = 0x1f << ACLK_BUS_DIV_CON_SHIFT, 1175cb579f1SElaine Zhang ACLK_BUS_DIV_CON_WIDTH = 5, 11895b95808SZhihuan He 11995b95808SZhihuan He /* CLKSEL_CON3 */ 12095b95808SZhihuan He PCLK_BUS_DIV_CON_SHIFT = 8, 12195b95808SZhihuan He PCLK_BUS_DIV_CON_MASK = 0x1f << PCLK_BUS_DIV_CON_SHIFT, 12295b95808SZhihuan He HCLK_BUS_DIV_CON_SHIFT = 0, 12395b95808SZhihuan He HCLK_BUS_DIV_CON_MASK = 0x1f, 12495b95808SZhihuan He 12595b95808SZhihuan He /* CLKSEL_CON4 */ 12695b95808SZhihuan He CLK_DDR_PLL_SEL_SHIFT = 8, 12795b95808SZhihuan He CLK_DDR_PLL_SEL_MASK = 0x3 << CLK_DDR_PLL_SEL_SHIFT, 12895b95808SZhihuan He CLK_DDR_DIV_CON_SHIFT = 0, 12995b95808SZhihuan He CLK_DDR_DIV_CON_MASK = 0x3 << CLK_DDR_DIV_CON_SHIFT, 13095b95808SZhihuan He 131*db5be31cSElaine Zhang /* CLKSEL_CON11 */ 132*db5be31cSElaine Zhang SPI_PLL_SEL_SHIFT = 15, 133*db5be31cSElaine Zhang SPI_PLL_SEL_MASK = 0x1 << SPI_PLL_SEL_SHIFT, 134*db5be31cSElaine Zhang SPI_PLL_SEL_DPLL = 0, 135*db5be31cSElaine Zhang SPI_PLL_SEL_GPLL, 136*db5be31cSElaine Zhang SPI_DIV_SHIFT = 8, 137*db5be31cSElaine Zhang SPI_DIV_MASK = 0x7f << SPI_DIV_SHIFT, 138*db5be31cSElaine Zhang 139680c4834SElaine Zhang /* CLKSEL_CON19 */ 140680c4834SElaine Zhang CLK_I2C1_PLL_SEL_SHIFT = 15, 141680c4834SElaine Zhang CLK_I2C1_PLL_SEL_MASK = 1 << CLK_I2C1_PLL_SEL_SHIFT, 142680c4834SElaine Zhang CLK_I2C1_PLL_SEL_DPLL = 0, 143680c4834SElaine Zhang CLK_I2C1_PLL_SEL_GPLL = 1, 144680c4834SElaine Zhang CLK_I2C1_DIV_CON_SHIFT = 8, 145680c4834SElaine Zhang CLK_I2C1_DIV_CON_MASK = 0x7f << CLK_I2C1_DIV_CON_SHIFT, 146680c4834SElaine Zhang CLK_I2C0_PLL_SEL_SHIFT = 7, 147680c4834SElaine Zhang CLK_I2C0_PLL_SEL_MASK = 1 << CLK_I2C0_PLL_SEL_SHIFT, 148680c4834SElaine Zhang CLK_I2C0_DIV_CON_SHIFT = 0, 149680c4834SElaine Zhang CLK_I2C0_DIV_CON_MASK = 0x7f, 150680c4834SElaine Zhang I2C_DIV_CON_WIDTH = 7, 151680c4834SElaine Zhang 152680c4834SElaine Zhang /* CLKSEL_CON20 */ 153680c4834SElaine Zhang CLK_I2C3_PLL_SEL_SHIFT = 15, 154680c4834SElaine Zhang CLK_I2C3_PLL_SEL_MASK = 1 << CLK_I2C3_PLL_SEL_SHIFT, 155680c4834SElaine Zhang CLK_I2C3_PLL_SEL_DPLL = 0, 156680c4834SElaine Zhang CLK_I2C3_PLL_SEL_GPLL = 1, 157680c4834SElaine Zhang CLK_I2C3_DIV_CON_SHIFT = 8, 158680c4834SElaine Zhang CLK_I2C3_DIV_CON_MASK = 0x7f << CLK_I2C3_DIV_CON_SHIFT, 159680c4834SElaine Zhang CLK_I2C2_PLL_SEL_SHIFT = 7, 160680c4834SElaine Zhang CLK_I2C2_PLL_SEL_MASK = 1 << CLK_I2C2_PLL_SEL_SHIFT, 161680c4834SElaine Zhang CLK_I2C2_DIV_CON_SHIFT = 0, 162680c4834SElaine Zhang CLK_I2C2_DIV_CON_MASK = 0x7f, 163680c4834SElaine Zhang 164befbd723SDavid Wu /* CLKSEL_CON22 */ 165befbd723SDavid Wu CLK_SARADC_DIV_CON_SHIFT = 0, 166befbd723SDavid Wu CLK_SARADC_DIV_CON_MASK = GENMASK(9, 0), 167befbd723SDavid Wu CLK_SARADC_DIV_CON_WIDTH = 10, 168befbd723SDavid Wu 16995b95808SZhihuan He /* CLKSEL_CON23 */ 17095b95808SZhihuan He ACLK_PERI_PLL_SEL_SHIFT = 15, 17195b95808SZhihuan He ACLK_PERI_PLL_SEL_MASK = 1 << ACLK_PERI_PLL_SEL_SHIFT, 17295b95808SZhihuan He ACLK_PERI_PLL_SEL_GPLL = 0, 17395b95808SZhihuan He ACLK_PERI_PLL_SEL_DPLL = 1, 17495b95808SZhihuan He PCLK_PERI_DIV_CON_SHIFT = 10, 17595b95808SZhihuan He PCLK_PERI_DIV_CON_MASK = 0x1f << PCLK_PERI_DIV_CON_SHIFT, 17695b95808SZhihuan He HCLK_PERI_DIV_CON_SHIFT = 5, 17795b95808SZhihuan He HCLK_PERI_DIV_CON_MASK = 0x1f << HCLK_PERI_DIV_CON_SHIFT, 17895b95808SZhihuan He ACLK_PERI_DIV_CON_SHIFT = 0, 17995b95808SZhihuan He ACLK_PERI_DIV_CON_MASK = 0x1f, 1805cb579f1SElaine Zhang PERI_DIV_CON_WIDTH = 5, 18195b95808SZhihuan He 182bae2f282SAndy Yan /* CLKSEL24_CON */ 183bae2f282SAndy Yan MAC_PLL_SEL_SHIFT = 12, 184bae2f282SAndy Yan MAC_PLL_SEL_MASK = 1 << MAC_PLL_SEL_SHIFT, 185bae2f282SAndy Yan MAC_PLL_SEL_APLL = 0, 186bae2f282SAndy Yan MAC_PLL_SEL_GPLL = 1, 187bae2f282SAndy Yan RMII_EXTCLK_SEL_SHIFT = 8, 188bae2f282SAndy Yan RMII_EXTCLK_SEL_MASK = 1 << RMII_EXTCLK_SEL_SHIFT, 189bae2f282SAndy Yan MAC_CLK_DIV_MASK = 0x1f, 190bae2f282SAndy Yan MAC_CLK_DIV_SHIFT = 0, 191bae2f282SAndy Yan 19298ebaf0eSvicent.chi /* CLKSEL25_CON */ 19398ebaf0eSvicent.chi EMMC_PLL_SEL_SHIFT = 12, 19498ebaf0eSvicent.chi EMMC_PLL_SEL_MASK = 3 << EMMC_PLL_SEL_SHIFT, 19598ebaf0eSvicent.chi EMMC_PLL_SEL_DPLL = 0, 19698ebaf0eSvicent.chi EMMC_PLL_SEL_GPLL, 19798ebaf0eSvicent.chi EMMC_PLL_SEL_OSC, 19898ebaf0eSvicent.chi 19998ebaf0eSvicent.chi /* CLKSEL26_CON */ 20098ebaf0eSvicent.chi EMMC_CLK_DIV_SHIFT = 8, 20198ebaf0eSvicent.chi EMMC_CLK_DIV_MASK = 0xff << EMMC_CLK_DIV_SHIFT, 20298ebaf0eSvicent.chi 203bae2f282SAndy Yan /* CLKSEL27_CON */ 2048094aeb8SJon Lin NANDC_PLL_SEL_SHIFT = 14, 2058094aeb8SJon Lin NANDC_PLL_SEL_MASK = 3 << NANDC_PLL_SEL_SHIFT, 2068094aeb8SJon Lin NANDC_PLL_SEL_CPLL = 0, 2078094aeb8SJon Lin NANDC_PLL_SEL_GPLL, 2088094aeb8SJon Lin NANDC_CLK_DIV_SHIFT = 8, 2098094aeb8SJon Lin NANDC_CLK_DIV_MASK = 0x1f << NANDC_CLK_DIV_SHIFT, 2108094aeb8SJon Lin 211bae2f282SAndy Yan SFC_PLL_SEL_SHIFT = 7, 212bae2f282SAndy Yan SFC_PLL_SEL_MASK = 1 << SFC_PLL_SEL_SHIFT, 213bae2f282SAndy Yan SFC_PLL_SEL_DPLL = 0, 214bae2f282SAndy Yan SFC_PLL_SEL_GPLL = 1, 215bae2f282SAndy Yan SFC_CLK_DIV_SHIFT = 0, 216bae2f282SAndy Yan SFC_CLK_DIV_MASK = 0x3f << SFC_CLK_DIV_SHIFT, 21795b95808SZhihuan He 2185cb579f1SElaine Zhang /* CLKSEL28_CON */ 2195cb579f1SElaine Zhang ACLK_VIO1_PLL_SEL_SHIFT = 14, 2205cb579f1SElaine Zhang ACLK_VIO1_PLL_SEL_MASK = 3 << ACLK_VIO1_PLL_SEL_SHIFT, 2215cb579f1SElaine Zhang VIO_PLL_SEL_DPLL = 0, 2225cb579f1SElaine Zhang VIO_PLL_SEL_GPLL = 1, 2235cb579f1SElaine Zhang ACLK_VIO1_CLK_DIV_SHIFT = 8, 2245cb579f1SElaine Zhang ACLK_VIO1_CLK_DIV_MASK = 0x1f << ACLK_VIO1_CLK_DIV_SHIFT, 2255cb579f1SElaine Zhang CLK_VIO_DIV_CON_WIDTH = 5, 2265cb579f1SElaine Zhang ACLK_VIO0_PLL_SEL_SHIFT = 6, 2275cb579f1SElaine Zhang ACLK_VIO0_PLL_SEL_MASK = 3 << ACLK_VIO0_PLL_SEL_SHIFT, 2285cb579f1SElaine Zhang ACLK_VIO0_CLK_DIV_SHIFT = 0, 2295cb579f1SElaine Zhang ACLK_VIO0_CLK_DIV_MASK = 0x1f << ACLK_VIO0_CLK_DIV_SHIFT, 2305cb579f1SElaine Zhang 2315cb579f1SElaine Zhang /* CLKSEL29_CON */ 2325cb579f1SElaine Zhang PCLK_VIO_CLK_DIV_SHIFT = 8, 2335cb579f1SElaine Zhang PCLK_VIO_CLK_DIV_MASK = 0x1f << PCLK_VIO_CLK_DIV_SHIFT, 2345cb579f1SElaine Zhang HCLK_VIO_CLK_DIV_SHIFT = 0, 2355cb579f1SElaine Zhang HCLK_VIO_CLK_DIV_MASK = 0x1f << HCLK_VIO_CLK_DIV_SHIFT, 2365cb579f1SElaine Zhang 2375cb579f1SElaine Zhang /* CLKSEL32_CON */ 2385cb579f1SElaine Zhang DCLK_VOP_SEL_SHIFT = 7, 2395cb579f1SElaine Zhang DCLK_VOP_SEL_MASK = 1 << DCLK_VOP_SEL_SHIFT, 2405cb579f1SElaine Zhang DCLK_VOP_SEL_HDMI = 0, 2415cb579f1SElaine Zhang DCLK_VOP_SEL_PLL = 1, 2425cb579f1SElaine Zhang DCLK_VOP_PLL_SEL_SHIFT = 6, 2435cb579f1SElaine Zhang DCLK_VOP_PLL_SEL_MASK = 1 << DCLK_VOP_PLL_SEL_SHIFT, 2445cb579f1SElaine Zhang DCLK_VOP_PLL_SEL_GPLL = 0, 2455cb579f1SElaine Zhang DCLK_VOP_PLL_SEL_DPLL = 1, 2465cb579f1SElaine Zhang DCLK_VOP_CLK_DIV_SHIFT = 0, 2475cb579f1SElaine Zhang DCLK_VOP_CLK_DIV_MASK = 0x3f << DCLK_VOP_CLK_DIV_SHIFT, 2485cb579f1SElaine Zhang DCLK_VOP_DIV_CON_WIDTH = 6, 2495cb579f1SElaine Zhang 25095b95808SZhihuan He /* SOFTRST1_CON*/ 25195b95808SZhihuan He DDRPHY_SRSTN_CLKDIV_REQ_SHIFT = 0, 25295b95808SZhihuan He DDRPHY_SRSTN_CLKDIV_REQ = 1, 25395b95808SZhihuan He DDRPHY_SRSTN_CLKDIV_DIS = 0, 25495b95808SZhihuan He DDRPHY_SRSTN_CLKDIV_REQ_MASK = 1 << DDRPHY_SRSTN_CLKDIV_REQ_SHIFT, 25595b95808SZhihuan He DDRPHY_SRSTN_REQ_SHIFT = 1, 25695b95808SZhihuan He DDRPHY_SRSTN_REQ = 1, 25795b95808SZhihuan He DDRPHY_SRSTN_DIS = 0, 25895b95808SZhihuan He DDRPHY_SRSTN_REQ_MASK = 1 << DDRPHY_SRSTN_REQ_SHIFT, 25995b95808SZhihuan He DDRPHY_PSRSTN_REQ_SHIFT = 2, 26095b95808SZhihuan He DDRPHY_PSRSTN_REQ = 1, 26195b95808SZhihuan He DDRPHY_PSRSTN_DIS = 0, 26295b95808SZhihuan He DDRPHY_PSRSTN_REQ_MASK = 1 << DDRPHY_PSRSTN_REQ_SHIFT, 26395b95808SZhihuan He 26495b95808SZhihuan He /* SOFTRST2_CON*/ 26595b95808SZhihuan He DDRUPCTL_PSRSTN_REQ_SHIFT = 0, 26695b95808SZhihuan He DDRUPCTL_PSRSTN_REQ = 1, 26795b95808SZhihuan He DDRUPCTL_PSRSTN_DIS = 0, 26895b95808SZhihuan He DDRUPCTL_PSRSTN_REQ_MASK = 1 << DDRUPCTL_PSRSTN_REQ_SHIFT, 26995b95808SZhihuan He DDRUPCTL_NSRSTN_REQ_SHIFT = 1, 27095b95808SZhihuan He DDRUPCTL_NSRSTN_REQ = 1, 27195b95808SZhihuan He DDRUPCTL_NSRSTN_DIS = 0, 27295b95808SZhihuan He DDRUPCTL_NSRSTN_REQ_MASK = 1 << DDRUPCTL_NSRSTN_REQ_SHIFT, 273bae2f282SAndy Yan }; 274bae2f282SAndy Yan #endif 275