1d1dcf852SAndy Yan /* 2d1dcf852SAndy Yan * (C) Copyright 2017 Rockchip Electronics Co., Ltd 3d1dcf852SAndy Yan * Author: Andy Yan <andy.yan@rock-chips.com> 4d1dcf852SAndy Yan * SPDX-License-Identifier: GPL-2.0+ 5d1dcf852SAndy Yan */ 6d1dcf852SAndy Yan #ifndef _ASM_ARCH_CRU_RK3368_H 7d1dcf852SAndy Yan #define _ASM_ARCH_CRU_RK3368_H 8d1dcf852SAndy Yan 9d1dcf852SAndy Yan #include <common.h> 10d1dcf852SAndy Yan 11d1dcf852SAndy Yan 12d1dcf852SAndy Yan /* RK3368 clock numbers */ 13d1dcf852SAndy Yan enum rk3368_pll_id { 14d1dcf852SAndy Yan APLLB, 15d1dcf852SAndy Yan APLLL, 16d1dcf852SAndy Yan DPLL, 17d1dcf852SAndy Yan CPLL, 18d1dcf852SAndy Yan GPLL, 19d1dcf852SAndy Yan NPLL, 20d1dcf852SAndy Yan PLL_COUNT, 21d1dcf852SAndy Yan }; 22d1dcf852SAndy Yan 237150785eSElaine Zhang struct rk3368_clk_info { 247150785eSElaine Zhang unsigned long id; 257150785eSElaine Zhang char *name; 267150785eSElaine Zhang bool is_cru; 277150785eSElaine Zhang }; 287150785eSElaine Zhang 29d1dcf852SAndy Yan struct rk3368_cru { 30d1dcf852SAndy Yan struct rk3368_pll { 31d1dcf852SAndy Yan unsigned int con0; 32d1dcf852SAndy Yan unsigned int con1; 33d1dcf852SAndy Yan unsigned int con2; 34d1dcf852SAndy Yan unsigned int con3; 35d1dcf852SAndy Yan } pll[6]; 36d1dcf852SAndy Yan unsigned int reserved[0x28]; 37d1dcf852SAndy Yan unsigned int clksel_con[56]; 38d1dcf852SAndy Yan unsigned int reserved1[8]; 39d1dcf852SAndy Yan unsigned int clkgate_con[25]; 40d1dcf852SAndy Yan unsigned int reserved2[7]; 41d1dcf852SAndy Yan unsigned int glb_srst_fst_val; 42d1dcf852SAndy Yan unsigned int glb_srst_snd_val; 43d1dcf852SAndy Yan unsigned int reserved3[0x1e]; 44d1dcf852SAndy Yan unsigned int softrst_con[15]; 45d1dcf852SAndy Yan unsigned int reserved4[0x11]; 46d1dcf852SAndy Yan unsigned int misc_con; 47d1dcf852SAndy Yan unsigned int glb_cnt_th; 48d1dcf852SAndy Yan unsigned int glb_rst_con; 49d1dcf852SAndy Yan unsigned int glb_rst_st; 50d1dcf852SAndy Yan unsigned int reserved5[0x1c]; 51d1dcf852SAndy Yan unsigned int sdmmc_con[2]; 52d1dcf852SAndy Yan unsigned int sdio0_con[2]; 53d1dcf852SAndy Yan unsigned int sdio1_con[2]; 54d1dcf852SAndy Yan unsigned int emmc_con[2]; 55d1dcf852SAndy Yan }; 56d1dcf852SAndy Yan check_member(rk3368_cru, emmc_con[1], 0x41c); 57d1dcf852SAndy Yan 58d1dcf852SAndy Yan struct rk3368_clk_priv { 59d1dcf852SAndy Yan struct rk3368_cru *cru; 60ae79bf68SElaine Zhang ulong armlclk_hz; 61ae79bf68SElaine Zhang ulong armlclk_enter_hz; 62ae79bf68SElaine Zhang ulong armlclk_init_hz; 63ae79bf68SElaine Zhang ulong armbclk_hz; 64ae79bf68SElaine Zhang ulong armbclk_enter_hz; 65ae79bf68SElaine Zhang ulong armbclk_init_hz; 66ae79bf68SElaine Zhang bool sync_kernel; 67ae79bf68SElaine Zhang bool set_armclk_rate; 68d1dcf852SAndy Yan }; 69d1dcf852SAndy Yan 70d1dcf852SAndy Yan enum { 71d1dcf852SAndy Yan /* PLL CON0 */ 72d1dcf852SAndy Yan PLL_NR_SHIFT = 8, 73d1dcf852SAndy Yan PLL_NR_MASK = GENMASK(13, 8), 74d1dcf852SAndy Yan PLL_OD_SHIFT = 0, 75d1dcf852SAndy Yan PLL_OD_MASK = GENMASK(3, 0), 76d1dcf852SAndy Yan 77d1dcf852SAndy Yan /* PLL CON1 */ 78d1dcf852SAndy Yan PLL_LOCK_STA = BIT(31), 79d1dcf852SAndy Yan PLL_NF_SHIFT = 0, 80d1dcf852SAndy Yan PLL_NF_MASK = GENMASK(12, 0), 81d1dcf852SAndy Yan 82d1dcf852SAndy Yan /* PLL CON2 */ 83d1dcf852SAndy Yan PLL_BWADJ_SHIFT = 0, 84d1dcf852SAndy Yan PLL_BWADJ_MASK = GENMASK(11, 0), 85d1dcf852SAndy Yan 86d1dcf852SAndy Yan /* PLL CON3 */ 87d1dcf852SAndy Yan PLL_MODE_SHIFT = 8, 88d1dcf852SAndy Yan PLL_MODE_MASK = GENMASK(9, 8), 89d1dcf852SAndy Yan PLL_MODE_SLOW = 0, 90d1dcf852SAndy Yan PLL_MODE_NORMAL = 1, 91d1dcf852SAndy Yan PLL_MODE_DEEP_SLOW = 3, 92d1dcf852SAndy Yan PLL_RESET_SHIFT = 5, 93d1dcf852SAndy Yan PLL_RESET = 1, 94d1dcf852SAndy Yan PLL_RESET_MASK = GENMASK(5, 5), 95d1dcf852SAndy Yan 967150785eSElaine Zhang /* CLKSEL1CON */ 977150785eSElaine Zhang CORE_ACLK_DIV_SHIFT = 0, 987150785eSElaine Zhang CORE_ACLK_DIV_MASK = 0x1f << CORE_ACLK_DIV_SHIFT, 997150785eSElaine Zhang CORE_DBG_DIV_SHIFT = 8, 1007150785eSElaine Zhang CORE_DBG_DIV_MASK = 0x1f << CORE_DBG_DIV_SHIFT, 1017150785eSElaine Zhang 1027150785eSElaine Zhang CORE_CLK_PLL_SEL_SHIFT = 7, 1037150785eSElaine Zhang CORE_CLK_PLL_SEL_MASK = 1 << CORE_CLK_PLL_SEL_SHIFT, 1047150785eSElaine Zhang CORE_CLK_PLL_SEL_APLL = 0, 1057150785eSElaine Zhang CORE_CLK_PLL_SEL_GPLL, 1067150785eSElaine Zhang CORE_DIV_CON_SHIFT = 0, 1077150785eSElaine Zhang CORE_DIV_CON_MASK = 0x1f << CORE_DIV_CON_SHIFT, 1087150785eSElaine Zhang 1097150785eSElaine Zhang /* CLKSEL8CON */ 1107150785eSElaine Zhang PCLK_BUS_DIV_CON_SHIFT = 12, 1117150785eSElaine Zhang PCLK_BUS_DIV_CON_MASK = 0x7 << PCLK_BUS_DIV_CON_SHIFT, 1127150785eSElaine Zhang HCLK_BUS_DIV_CON_SHIFT = 8, 1137150785eSElaine Zhang HCLK_BUS_DIV_CON_MASK = 0x3 << HCLK_BUS_DIV_CON_SHIFT, 1147150785eSElaine Zhang CLK_BUS_PLL_SEL_CPLL = 0, 1157150785eSElaine Zhang CLK_BUS_PLL_SEL_GPLL = 1, 1167150785eSElaine Zhang CLK_BUS_PLL_SEL_SHIFT = 7, 1177150785eSElaine Zhang CLK_BUS_PLL_SEL_MASK = 1 << CLK_BUS_PLL_SEL_SHIFT, 1187150785eSElaine Zhang ACLK_BUS_DIV_CON_SHIFT = 0, 1197150785eSElaine Zhang ACLK_BUS_DIV_CON_MASK = 0x1f << ACLK_BUS_DIV_CON_SHIFT, 1207150785eSElaine Zhang 1217150785eSElaine Zhang /* CLKSEL9CON */ 1227150785eSElaine Zhang PCLK_PERI_DIV_CON_SHIFT = 12, 1237150785eSElaine Zhang PCLK_PERI_DIV_CON_MASK = 0x3 << PCLK_PERI_DIV_CON_SHIFT, 1247150785eSElaine Zhang HCLK_PERI_DIV_CON_SHIFT = 8, 1257150785eSElaine Zhang HCLK_PERI_DIV_CON_MASK = 3 << HCLK_PERI_DIV_CON_SHIFT, 1267150785eSElaine Zhang CLK_PERI_PLL_SEL_CPLL = 0, 1277150785eSElaine Zhang CLK_PERI_PLL_SEL_GPLL, 1287150785eSElaine Zhang CLK_PERI_PLL_SEL_SHIFT = 7, 1297150785eSElaine Zhang CLK_PERI_PLL_SEL_MASK = 1 << CLK_PERI_PLL_SEL_SHIFT, 1307150785eSElaine Zhang ACLK_PERI_DIV_CON_SHIFT = 0, 1317150785eSElaine Zhang ACLK_PERI_DIV_CON_MASK = 0x1f, 1327150785eSElaine Zhang 133a4e49122SElaine Zhang /* CLKSEL10CON */ 134*88cae289SElaine Zhang CLK_CRYPTO_DIV_CON_SHIFT = 14, 135*88cae289SElaine Zhang CLK_CRYPTO_DIV_CON_MASK = 0x3 << CLK_CRYPTO_DIV_CON_SHIFT, 136a4e49122SElaine Zhang PCLK_ALIVE_DIV_CON_SHIFT = 8, 137a4e49122SElaine Zhang PCLK_ALIVE_DIV_CON_MASK = 0x1f << PCLK_ALIVE_DIV_CON_SHIFT, 138a4e49122SElaine Zhang 139d1dcf852SAndy Yan /* CLKSEL12_CON */ 140d1dcf852SAndy Yan MCU_STCLK_DIV_SHIFT = 8, 141d1dcf852SAndy Yan MCU_STCLK_DIV_MASK = GENMASK(10, 8), 142d1dcf852SAndy Yan MCU_PLL_SEL_SHIFT = 7, 143d1dcf852SAndy Yan MCU_PLL_SEL_MASK = BIT(7), 144d1dcf852SAndy Yan MCU_PLL_SEL_CPLL = 0, 145d1dcf852SAndy Yan MCU_PLL_SEL_GPLL = 1, 146d1dcf852SAndy Yan MCU_CLK_DIV_SHIFT = 0, 147d1dcf852SAndy Yan MCU_CLK_DIV_MASK = GENMASK(4, 0), 148d1dcf852SAndy Yan 1497150785eSElaine Zhang /* CLKSEL19_CON */ 1507150785eSElaine Zhang ACLK_VOP_PLL_SEL_SHIFT = 6, 1517150785eSElaine Zhang ACLK_VOP_PLL_SEL_MASK = GENMASK(7, 6), 1527150785eSElaine Zhang ACLK_VOP_PLL_SEL_CPLL = 0, 1537150785eSElaine Zhang ACLK_VOP_PLL_SEL_GPLL = 1, 1547150785eSElaine Zhang ACLK_VOP_DIV_SHIFT = 0, 1557150785eSElaine Zhang ACLK_VOP_DIV_MASK = GENMASK(4, 0), 1567150785eSElaine Zhang 1577150785eSElaine Zhang /* CLKSEL20_CON */ 1587150785eSElaine Zhang DCLK_VOP_PLL_SEL_SHIFT = 8, 1597150785eSElaine Zhang DCLK_VOP_PLL_SEL_MASK = GENMASK(9, 8), 1607150785eSElaine Zhang DCLK_VOP_PLL_SEL_CPLL = 0, 1617150785eSElaine Zhang DCLK_VOP_PLL_SEL_GPLL = 1, 1627150785eSElaine Zhang DCLK_VOP_PLL_SEL_NPLL = 2, 1637150785eSElaine Zhang DCLK_VOP_DIV_SHIFT = 0, 1647150785eSElaine Zhang DCLK_VOP_DIV_MASK = GENMASK(7, 0), 1657150785eSElaine Zhang 16673e16df2SDavid Wu /* CLKSEL_CON25 */ 16773e16df2SDavid Wu CLK_SARADC_DIV_CON_SHIFT = 8, 16873e16df2SDavid Wu CLK_SARADC_DIV_CON_MASK = GENMASK(15, 8), 16973e16df2SDavid Wu CLK_SARADC_DIV_CON_WIDTH = 8, 17073e16df2SDavid Wu 171df0ae000SPhilipp Tomsich /* CLKSEL43_CON */ 172b2477abaSDavid Wu GMAC_DIV_CON_SHIFT = 0x0, 173b2477abaSDavid Wu GMAC_DIV_CON_MASK = GENMASK(4, 0), 174b2477abaSDavid Wu GMAC_PLL_SHIFT = 6, 175b2477abaSDavid Wu GMAC_PLL_MASK = GENMASK(7, 6), 176b2477abaSDavid Wu GMAC_PLL_SELECT_NEW = (0x0 << GMAC_PLL_SHIFT), 177b2477abaSDavid Wu GMAC_PLL_SELECT_CODEC = (0x1 << GMAC_PLL_SHIFT), 178b2477abaSDavid Wu GMAC_PLL_SELECT_GENERAL = (0x2 << GMAC_PLL_SHIFT), 179df0ae000SPhilipp Tomsich GMAC_MUX_SEL_EXTCLK = BIT(8), 180df0ae000SPhilipp Tomsich 181d1dcf852SAndy Yan /* CLKSEL51_CON */ 182d1dcf852SAndy Yan MMC_PLL_SEL_SHIFT = 8, 183d1dcf852SAndy Yan MMC_PLL_SEL_MASK = GENMASK(9, 8), 184f5a43295SPhilipp Tomsich MMC_PLL_SEL_CPLL = (0 << MMC_PLL_SEL_SHIFT), 185f5a43295SPhilipp Tomsich MMC_PLL_SEL_GPLL = (1 << MMC_PLL_SEL_SHIFT), 186f5a43295SPhilipp Tomsich MMC_PLL_SEL_USBPHY_480M = (2 << MMC_PLL_SEL_SHIFT), 187f5a43295SPhilipp Tomsich MMC_PLL_SEL_24M = (3 << MMC_PLL_SEL_SHIFT), 188d1dcf852SAndy Yan MMC_CLK_DIV_SHIFT = 0, 189d1dcf852SAndy Yan MMC_CLK_DIV_MASK = GENMASK(6, 0), 190d1dcf852SAndy Yan 191d1dcf852SAndy Yan /* SOFTRST1_CON */ 192d1dcf852SAndy Yan MCU_PO_SRST_MASK = BIT(13), 193d1dcf852SAndy Yan MCU_SYS_SRST_MASK = BIT(12), 19405c57e12SPhilipp Tomsich DMA1_SRST_REQ = BIT(2), 19505c57e12SPhilipp Tomsich 19605c57e12SPhilipp Tomsich /* SOFTRST4_CON */ 19705c57e12SPhilipp Tomsich DMA2_SRST_REQ = BIT(0), 198d1dcf852SAndy Yan 199d1dcf852SAndy Yan /* GLB_RST_CON */ 200d1dcf852SAndy Yan PMU_GLB_SRST_CTRL_SHIFT = 2, 201d1dcf852SAndy Yan PMU_GLB_SRST_CTRL_MASK = GENMASK(3, 2), 202d1dcf852SAndy Yan PMU_RST_BY_FST_GLB_SRST = 0, 203d1dcf852SAndy Yan PMU_RST_BY_SND_GLB_SRST = 1, 204d1dcf852SAndy Yan PMU_RST_DISABLE = 2, 205d1dcf852SAndy Yan WDT_GLB_SRST_CTRL_SHIFT = 1, 206d1dcf852SAndy Yan WDT_GLB_SRST_CTRL_MASK = BIT(1), 207d1dcf852SAndy Yan WDT_TRIGGER_SND_GLB_SRST = 0, 208d1dcf852SAndy Yan WDT_TRIGGER_FST_GLB_SRST = 1, 209d1dcf852SAndy Yan TSADC_GLB_SRST_CTRL_SHIFT = 0, 210d1dcf852SAndy Yan TSADC_GLB_SRST_CTRL_MASK = BIT(0), 211d1dcf852SAndy Yan TSADC_TRIGGER_SND_GLB_SRST = 0, 212d1dcf852SAndy Yan TSADC_TRIGGER_FST_GLB_SRST = 1, 213d1dcf852SAndy Yan 214d1dcf852SAndy Yan }; 215d1dcf852SAndy Yan #endif 216