1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Copyright (c) 2020 Rockchip Electronics Co. Ltd. 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Author: Shunqing Chen <csq@rock-chips.com> 6*4882a593Smuzhiyun */ 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun #ifndef RK628_CRU_H 9*4882a593Smuzhiyun #define RK628_CRU_H 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun #include "rk628.h" 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun #define CRU_REG(x) ((x) + 0xc0000) 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun #define CRU_CPLL_CON0 CRU_REG(0x0000) 16*4882a593Smuzhiyun #define PLL_BYPASS_MASK BIT(15) 17*4882a593Smuzhiyun #define PLL_BYPASS(x) HIWORD_UPDATE(x, 15, 15) 18*4882a593Smuzhiyun #define PLL_BYPASS_SHIFT 15 19*4882a593Smuzhiyun #define PLL_POSTDIV1_MASK GENMASK(14, 12) 20*4882a593Smuzhiyun #define PLL_POSTDIV1(x) HIWORD_UPDATE(x, 14, 12) 21*4882a593Smuzhiyun #define PLL_POSTDIV1_SHIFT 12 22*4882a593Smuzhiyun #define PLL_FBDIV_MASK GENMASK(11, 0) 23*4882a593Smuzhiyun #define PLL_FBDIV(x) HIWORD_UPDATE(x, 11, 0) 24*4882a593Smuzhiyun #define PLL_FBDIV_SHIFT 0 25*4882a593Smuzhiyun #define CRU_CPLL_CON1 CRU_REG(0x0004) 26*4882a593Smuzhiyun #define PLL_PD_MASK BIT(13) 27*4882a593Smuzhiyun #define PLL_PD(x) HIWORD_UPDATE(x, 13, 13) 28*4882a593Smuzhiyun #define PLL_DSMPD_MASK BIT(12) 29*4882a593Smuzhiyun #define PLL_DSMPD(x) HIWORD_UPDATE(x, 12, 12) 30*4882a593Smuzhiyun #define PLL_DSMPD_SHIFT 12 31*4882a593Smuzhiyun #define PLL_LOCK BIT(10) 32*4882a593Smuzhiyun #define PLL_POSTDIV2_MASK GENMASK(8, 6) 33*4882a593Smuzhiyun #define PLL_POSTDIV2(x) HIWORD_UPDATE(x, 8, 6) 34*4882a593Smuzhiyun #define PLL_POSTDIV2_SHIFT 6 35*4882a593Smuzhiyun #define PLL_REFDIV_MASK GENMASK(5, 0) 36*4882a593Smuzhiyun #define PLL_REFDIV(x) HIWORD_UPDATE(x, 5, 0) 37*4882a593Smuzhiyun #define PLL_REFDIV_SHIFT 0 38*4882a593Smuzhiyun #define CRU_CPLL_CON2 CRU_REG(0x0008) 39*4882a593Smuzhiyun #define PLL_FRAC_MASK GENMASK(23, 0) 40*4882a593Smuzhiyun #define PLL_FRAC(x) ((x) << 0) 41*4882a593Smuzhiyun #define PLL_FRAC_SHIFT 0 42*4882a593Smuzhiyun #define CRU_CPLL_CON3 CRU_REG(0x000c) 43*4882a593Smuzhiyun #define CRU_CPLL_CON4 CRU_REG(0x0010) 44*4882a593Smuzhiyun #define CRU_GPLL_CON0 CRU_REG(0x0020) 45*4882a593Smuzhiyun #define CRU_GPLL_CON1 CRU_REG(0x0024) 46*4882a593Smuzhiyun #define CRU_GPLL_CON2 CRU_REG(0x0028) 47*4882a593Smuzhiyun #define CRU_GPLL_CON3 CRU_REG(0x002c) 48*4882a593Smuzhiyun #define CRU_GPLL_CON4 CRU_REG(0x0030) 49*4882a593Smuzhiyun #define CRU_MODE_CON00 CRU_REG(0x0060) 50*4882a593Smuzhiyun #define CLK_GPLL_MODE_MASK BIT(2) 51*4882a593Smuzhiyun #define CLK_GPLL_MODE_SHIFT 2 52*4882a593Smuzhiyun #define CLK_GPLL_MODE_GPLL 1 53*4882a593Smuzhiyun #define CLK_GPLL_MODE_OSC 0 54*4882a593Smuzhiyun #define CLK_CPLL_MODE_MASK BIT(0) 55*4882a593Smuzhiyun #define CLK_CPLL_MODE_SHIFT 0 56*4882a593Smuzhiyun #define CLK_CPLL_MODE_CPLL 1 57*4882a593Smuzhiyun #define CLK_CPLL_MODE_OSC 0 58*4882a593Smuzhiyun #define CRU_CLKSEL_CON00 CRU_REG(0x0080) 59*4882a593Smuzhiyun #define CRU_CLKSEL_CON01 CRU_REG(0x0084) 60*4882a593Smuzhiyun #define CRU_CLKSEL_CON02 CRU_REG(0x0088) 61*4882a593Smuzhiyun #define SCLK_VOP_SEL_MASK BIT(9) 62*4882a593Smuzhiyun #define SCLK_VOP_SEL_SHIFT 9 63*4882a593Smuzhiyun #define SCLK_VOP_SEL_GPLL 1 64*4882a593Smuzhiyun #define SCLK_VOP_SEL_CPLL 0 65*4882a593Smuzhiyun #define CLK_RX_READ_SEL_MASK BIT(8) 66*4882a593Smuzhiyun #define CLK_RX_READ_SEL_SHIFT 8 67*4882a593Smuzhiyun #define CLK_RX_READ_SEL_GPLL 1 68*4882a593Smuzhiyun #define CLK_RX_READ_SEL_CPLL 0 69*4882a593Smuzhiyun #define CRU_CLKSEL_CON03 CRU_REG(0x008c) 70*4882a593Smuzhiyun #define CRU_CLKSEL_CON04 CRU_REG(0x0090) 71*4882a593Smuzhiyun #define CRU_CLKSEL_CON05 CRU_REG(0x0094) 72*4882a593Smuzhiyun #define CLK_HDMIRX_AUD_SEL BIT(15) 73*4882a593Smuzhiyun #define CRU_CLKSEL_CON06 CRU_REG(0x0098) 74*4882a593Smuzhiyun #define SCLK_UART_SEL(x) HIWORD_UPDATE(x, 15, 14) 75*4882a593Smuzhiyun #define SCLK_UART_SEL_MASK GENMASK(15, 14) 76*4882a593Smuzhiyun #define SCLK_UART_SEL_SHIFT 14 77*4882a593Smuzhiyun #define SCLK_UART_SEL_OSC 2 78*4882a593Smuzhiyun #define SCLK_UART_SEL_UART_FRAC 1 79*4882a593Smuzhiyun #define SCLK_UART_SEL_UART_SRC 0 80*4882a593Smuzhiyun #define CRU_CLKSEL_CON07 CRU_REG(0x009c) 81*4882a593Smuzhiyun #define CRU_CLKSEL_CON08 CRU_REG(0x00a0) 82*4882a593Smuzhiyun #define CRU_CLKSEL_CON09 CRU_REG(0x00a4) 83*4882a593Smuzhiyun #define CRU_CLKSEL_CON10 CRU_REG(0x00a8) 84*4882a593Smuzhiyun #define CRU_CLKSEL_CON11 CRU_REG(0x00ac) 85*4882a593Smuzhiyun #define CRU_CLKSEL_CON12 CRU_REG(0x00b0) 86*4882a593Smuzhiyun #define CRU_CLKSEL_CON13 CRU_REG(0x00b4) 87*4882a593Smuzhiyun #define CRU_CLKSEL_CON14 CRU_REG(0x00b8) 88*4882a593Smuzhiyun #define CRU_CLKSEL_CON15 CRU_REG(0x00bc) 89*4882a593Smuzhiyun #define CRU_CLKSEL_CON16 CRU_REG(0x00c0) 90*4882a593Smuzhiyun #define CRU_CLKSEL_CON17 CRU_REG(0x00c4) 91*4882a593Smuzhiyun #define CRU_CLKSEL_CON18 CRU_REG(0x00c8) 92*4882a593Smuzhiyun #define CRU_CLKSEL_CON20 CRU_REG(0x00d0) 93*4882a593Smuzhiyun #define CRU_CLKSEL_CON21 CRU_REG(0x00d4) 94*4882a593Smuzhiyun #define CLK_UART_SRC_SEL_MASK BIT(15) 95*4882a593Smuzhiyun #define CLK_UART_SRC_SEL_GPLL (1 << 15) 96*4882a593Smuzhiyun #define CLK_UART_SRC_SEL_CPLL (0 << 15) 97*4882a593Smuzhiyun #define CLK_UART_SRC_DIV_MASK GENMASK(12, 8) 98*4882a593Smuzhiyun #define CLK_UART_SRC_DIV_SHIFT 8 99*4882a593Smuzhiyun #define CRU_GATE_CON00 CRU_REG(0x0180) 100*4882a593Smuzhiyun #define CRU_GATE_CON01 CRU_REG(0x0184) 101*4882a593Smuzhiyun #define CRU_GATE_CON02 CRU_REG(0x0188) 102*4882a593Smuzhiyun #define CRU_GATE_CON03 CRU_REG(0x018c) 103*4882a593Smuzhiyun #define CRU_GATE_CON04 CRU_REG(0x0190) 104*4882a593Smuzhiyun #define CRU_GATE_CON05 CRU_REG(0x0194) 105*4882a593Smuzhiyun #define CRU_SOFTRST_CON00 CRU_REG(0x0200) 106*4882a593Smuzhiyun #define CRU_SOFTRST_CON01 CRU_REG(0x0204) 107*4882a593Smuzhiyun #define CRU_SOFTRST_CON02 CRU_REG(0x0208) 108*4882a593Smuzhiyun #define CRU_SOFTRST_CON04 CRU_REG(0x0210) 109*4882a593Smuzhiyun #define CRU_MAX_REGISTER CRU_SOFTRST_CON04 110*4882a593Smuzhiyun 111*4882a593Smuzhiyun #define CGU_CLK_CPLL 1 112*4882a593Smuzhiyun #define CGU_CLK_GPLL 2 113*4882a593Smuzhiyun #define CGU_CLK_CPLL_MUX 3 114*4882a593Smuzhiyun #define CGU_CLK_GPLL_MUX 4 115*4882a593Smuzhiyun #define CGU_PCLK_GPIO0 5 116*4882a593Smuzhiyun #define CGU_PCLK_GPIO1 6 117*4882a593Smuzhiyun #define CGU_PCLK_GPIO2 7 118*4882a593Smuzhiyun #define CGU_PCLK_GPIO3 8 119*4882a593Smuzhiyun #define CGU_PCLK_TXPHY_CON 9 120*4882a593Smuzhiyun #define CGU_PCLK_EFUSE 10 121*4882a593Smuzhiyun #define CGU_PCLK_DSI0 11 122*4882a593Smuzhiyun #define CGU_PCLK_DSI1 12 123*4882a593Smuzhiyun #define CGU_PCLK_CSI 13 124*4882a593Smuzhiyun #define CGU_PCLK_HDMITX 14 125*4882a593Smuzhiyun #define CGU_PCLK_RXPHY 15 126*4882a593Smuzhiyun #define CGU_PCLK_HDMIRX 16 127*4882a593Smuzhiyun #define CGU_PCLK_DPRX 17 128*4882a593Smuzhiyun #define CGU_PCLK_GVIHOST 18 129*4882a593Smuzhiyun #define CGU_CLK_CFG_DPHY0 19 130*4882a593Smuzhiyun #define CGU_CLK_CFG_DPHY1 20 131*4882a593Smuzhiyun #define CGU_CLK_TXESC 21 132*4882a593Smuzhiyun #define CGU_CLK_DPRX_VID 22 133*4882a593Smuzhiyun #define CGU_CLK_IMODET 23 134*4882a593Smuzhiyun #define CGU_CLK_HDMIRX_AUD 24 135*4882a593Smuzhiyun #define CGU_CLK_HDMIRX_CEC 25 136*4882a593Smuzhiyun #define CGU_CLK_RX_READ 26 137*4882a593Smuzhiyun #define CGU_SCLK_VOP 27 138*4882a593Smuzhiyun #define CGU_PCLK_LOGIC 28 139*4882a593Smuzhiyun #define CGU_CLK_GPIO_DB0 29 140*4882a593Smuzhiyun #define CGU_CLK_GPIO_DB1 30 141*4882a593Smuzhiyun #define CGU_CLK_GPIO_DB2 31 142*4882a593Smuzhiyun #define CGU_CLK_GPIO_DB3 32 143*4882a593Smuzhiyun #define CGU_CLK_I2S_8CH_SRC 33 144*4882a593Smuzhiyun #define CGU_CLK_I2S_8CH_FRAC 34 145*4882a593Smuzhiyun #define CGU_MCLK_I2S_8CH 35 146*4882a593Smuzhiyun #define CGU_I2S_MCLKOUT 36 147*4882a593Smuzhiyun #define CGU_BT1120DEC 37 148*4882a593Smuzhiyun #define CGU_SCLK_UART 38 149*4882a593Smuzhiyun 150*4882a593Smuzhiyun #define RGU_LOGIC 0 151*4882a593Smuzhiyun #define RGU_CRU 1 152*4882a593Smuzhiyun #define RGU_REGFILE 2 153*4882a593Smuzhiyun #define RGU_I2C2APB 3 154*4882a593Smuzhiyun #define RGU_EFUSE 4 155*4882a593Smuzhiyun #define RGU_ADAPTER 5 156*4882a593Smuzhiyun #define RGU_CLK_RX 6 157*4882a593Smuzhiyun #define RGU_BT1120DEC 7 158*4882a593Smuzhiyun #define RGU_VOP 8 159*4882a593Smuzhiyun #define RGU_GPIO0 9 160*4882a593Smuzhiyun #define RGU_GPIO1 10 161*4882a593Smuzhiyun #define RGU_GPIO2 11 162*4882a593Smuzhiyun #define RGU_GPIO3 12 163*4882a593Smuzhiyun #define RGU_GPIO_DB0 13 164*4882a593Smuzhiyun #define RGU_GPIO_DB1 14 165*4882a593Smuzhiyun #define RGU_GPIO_DB2 15 166*4882a593Smuzhiyun #define RGU_GPIO_DB3 16 167*4882a593Smuzhiyun #define RGU_RXPHY 17 168*4882a593Smuzhiyun #define RGU_HDMIRX 18 169*4882a593Smuzhiyun #define RGU_TXPHY_CON 19 170*4882a593Smuzhiyun #define RGU_HDMITX 20 171*4882a593Smuzhiyun #define RGU_GVIHOST 21 172*4882a593Smuzhiyun #define RGU_DSI0 22 173*4882a593Smuzhiyun #define RGU_DSI1 23 174*4882a593Smuzhiyun #define RGU_CSI 24 175*4882a593Smuzhiyun #define RGU_TXDATA 25 176*4882a593Smuzhiyun #define RGU_DECODER 26 177*4882a593Smuzhiyun #define RGU_ENCODER 27 178*4882a593Smuzhiyun #define RGU_HDMIRX_PON 28 179*4882a593Smuzhiyun #define RGU_TXBYTEHS 29 180*4882a593Smuzhiyun #define RGU_TXESC 30 181*4882a593Smuzhiyun 182*4882a593Smuzhiyun unsigned long rk628_clk_get_rate(struct rk628 *rk628, unsigned int id); 183*4882a593Smuzhiyun int rk628_clk_set_rate(struct rk628 *rk628, unsigned int id, 184*4882a593Smuzhiyun unsigned long rate); 185*4882a593Smuzhiyun int rk628_control_assert(struct rk628 *rk628, unsigned long id); 186*4882a593Smuzhiyun int rk628_control_deassert(struct rk628 *rk628, unsigned long id); 187*4882a593Smuzhiyun void rk628_cru_initialize(struct rk628 *rk628); 188*4882a593Smuzhiyun void rk628_clk_mux_testout(struct rk628 *rk628, int id); 189*4882a593Smuzhiyun 190*4882a593Smuzhiyun #endif 191