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