Merge branch 'develop-3.10-next' of ssh://10.10.10.29/rk/kernel into develop-3.10...
[firefly-linux-kernel-4.4.55.git] / include / linux / rockchip / cru.h
1 #ifndef __MACH_ROCKCHIP_CRU_H
2 #define __MACH_ROCKCHIP_CRU_H
3
4 #include <dt-bindings/clock/rockchip,rk3188.h>
5 #include <dt-bindings/clock/rockchip,rk3288.h>
6 #include <linux/rockchip/iomap.h>
7
8
9 /*******************CRU BITS*******************************/
10
11 #define CRU_W_MSK(bits_shift, msk)      ((msk) << ((bits_shift) + 16))
12
13 #define CRU_SET_BITS(val, bits_shift, msk)      (((val)&(msk)) << (bits_shift))
14
15 #define CRU_W_MSK_SETBITS(val, bits_shift,msk) \
16         (CRU_W_MSK(bits_shift, msk) | CRU_SET_BITS(val, bits_shift, msk))
17
18 /*******************RK3188********************************/
19 /*******************CRU OFFSET*********************/
20 #define RK3188_CRU_MODE_CON             0x40
21 #define RK3188_CRU_CLKSEL_CON           0x44
22 #define RK3188_CRU_CLKGATE_CON          0xd0
23 #define RK3188_CRU_GLB_SRST_FST         0x100
24 #define RK3188_CRU_GLB_SRST_SND         0x104
25 #define RK3188_CRU_SOFTRST_CON          0x110
26
27 #define RK3188_PLL_CONS(id, i)          ((id) * 0x10 + ((i) * 4))
28
29 #define RK3188_CRU_CLKSELS_CON_CNT      (35)
30 #define RK3188_CRU_CLKSELS_CON(i)       (RK3188_CRU_CLKSEL_CON + ((i) * 4))
31
32 #define RK3188_CRU_CLKGATES_CON_CNT     (10)
33 #define RK3188_CRU_CLKGATES_CON(i)      (RK3188_CRU_CLKGATE_CON + ((i) * 4))
34
35 #define RK3188_CRU_SOFTRSTS_CON_CNT     (9)
36 #define RK3188_CRU_SOFTRSTS_CON(i)      (RK3188_CRU_SOFTRST_CON + ((i) * 4))
37
38 #define RK3188_CRU_MISC_CON             (0x134)
39 #define RK3188_CRU_GLB_CNT_TH           (0x140)
40
41 /******************PLL MODE BITS*******************/
42 #define RK3188_PLL_MODE_MSK(id)         (0x3 << ((id) * 4))
43 #define RK3188_PLL_MODE_SLOW(id)        ((0x0<<((id)*4))|(0x3<<(16+(id)*4)))
44 #define RK3188_PLL_MODE_NORM(id)        ((0x1<<((id)*4))|(0x3<<(16+(id)*4)))
45 #define RK3188_PLL_MODE_DEEP(id)        ((0x2<<((id)*4))|(0x3<<(16+(id)*4)))
46
47 /******************CRU GATINGS**********************************/
48 #define RK3188_CRU_GATEID_CONS(ID) (RK3188_CRU_CLKGATE_CON+(ID/16)*4)
49
50 /*************************RK3288********************************/
51
52 /*******************CRU OFFSET*********************/
53 #define RK3288_CRU_MODE_CON             0x50
54 #define RK3288_CRU_CLKSEL_CON           0x60
55 #define RK3288_CRU_CLKGATE_CON          0x160
56
57 #define RK3288_PLL_CONS(id, i)          ((id) * 0x10 + ((i) * 4))
58 #define RK3288_CRU_CLKSELS_CON(i)       (RK3288_CRU_CLKSEL_CON + ((i) * 4))
59 #define RK3288_CRU_CLKGATES_CON(i)      (RK3288_CRU_CLKGATE_CON + ((i) * 4))
60
61 /******************PLL MODE BITS*******************/
62 // apll dpll,cpll,gpll,npll 0~4
63 #define RK3288_PLLS_MODE_OFFSET(id) ((id)<=3 ? (id*4) : 14)
64 #define RK3288_PLL_MODE_MSK(id)         (0x3 << RK3288_PLLS_MODE_OFFSET(id))
65 #define RK3288_PLL_MODE_SLOW(id)        ((0x0<<RK3288_PLLS_MODE_OFFSET(id))|(0x3<<(16+RK3288_PLLS_MODE_OFFSET(id))))
66 #define RK3288_PLL_MODE_NORM(id)        ((0x1<<RK3288_PLLS_MODE_OFFSET(id))|(0x3<<(16+RK3288_PLLS_MODE_OFFSET(id))))
67 #define RK3288_PLL_MODE_DEEP(id)        ((0x2<<RK3288_PLLS_MODE_OFFSET(id))|(0x3<<(16+RK3288_PLLS_MODE_OFFSET(id))))
68
69 /*******************CRU GATING*********************/
70 #define RK3288_CRU_CLKGATES_CON_CNT (19)
71 #define RK3288_CRU_CONS_GATEID(i)       (16 * (i))
72 #define RK3288_CRU_GATEID_CONS(ID)      (RK3288_CRU_CLKGATE_CON+(ID/16)*4)
73
74 enum rk3288_cru_clk_gate {
75         /* SCU CLK GATE 0 CON */
76         //gate0
77         RK3288_CLKGATE_UART0_SRC    =   (RK3288_CRU_CONS_GATEID(1)+8),   
78         
79         RK3288_CLKGATE_UART4_SRC    =   (RK3288_CRU_CONS_GATEID(2)+12),   
80         
81         RK3288_CLKGATE_PCLK_UART0= (RK3288_CRU_CONS_GATEID(6)+8),   
82         RK3288_CLKGATE_PCLK_UART1,
83         RK3288_CLKGATE6_DUMP1,
84         RK3288_CLKGATE_PCLK_UART3,
85         RK3288_CLKGATE_PCLK_I2C2,
86         RK3288_CLKGATE_PCLK_I2C3,
87         RK3288_CLKGATE_PCLK_I2C4,
88
89         RK3288_CLKGATE_PCLK_I2C0    =   (RK3288_CRU_CONS_GATEID(10)+2), 
90         RK3288_CLKGATE_PCLK_I2C1,
91         
92         RK3288_CLKGATE_PCLK_UART2    =   (RK3288_CRU_CONS_GATEID(11)+9), 
93
94     
95         RK3288_CLKGATE_PCLK_GPIO1   =   (RK3288_CRU_CONS_GATEID(14)+1),
96         
97         RK3288_CLKGATE_PCLK_GPIO0   =   (RK3288_CRU_CONS_GATEID(17)+4),
98         //gate6
99 };
100
101 #define RK3288_CRU_GLB_SRST_FST_VALUE   0x1b0
102 #define RK3288_CRU_GLB_SRST_SND_VALUE   0x1b4
103 #define RK3288_CRU_SOFTRST_CON          0x1b8
104 #define RK3288_CRU_MISC_CON             0x1e8
105 #define RK3288_CRU_GLB_CNT_TH           0x1ec
106 #define RK3288_CRU_GLB_RST_CON          0x1f0
107 #define RK3288_CRU_GLB_RST_ST           0x1f8
108 #define RK3288_CRU_SDMMC_CON0           0x200
109 #define RK3288_CRU_SDMMC_CON1           0x204
110 #define RK3288_CRU_SDIO0_CON0           0x208
111 #define RK3288_CRU_SDIO0_CON1           0x20c
112 #define RK3288_CRU_SDIO1_CON0           0x210
113 #define RK3288_CRU_SDIO1_CON1           0x214
114 #define RK3288_CRU_EMMC_CON0            0x218
115 #define RK3288_CRU_EMMC_CON1            0x21c
116
117 #define RK3288_CRU_SOFTRSTS_CON_CNT     (12)
118 #define RK3288_CRU_SOFTRSTS_CON(i)      (RK3288_CRU_SOFTRST_CON + ((i) * 4))
119
120 static inline void rk3288_cru_set_soft_reset(u32 idx, bool on)
121 {
122         void __iomem *reg = RK_CRU_VIRT + RK3288_CRU_SOFTRSTS_CON(idx >> 4);
123         u32 val = on ? 0x10001U << (idx & 0xf) : 0x10000U << (idx & 0xf);
124         writel_relaxed(val, reg);
125         dsb();
126 }
127
128 #define RK3036_CRU_MODE_CON 0x0040
129
130 #define RK3036_CRU_GLB_SRST_FST_VALUE 0x00100
131 #define RK3036_CRU_GLB_SRST_SND_VALUE 0x00104
132 #define RK3036_CRU_SOFTRST0_CON 0x00110
133 #define RK3036_CRU_SOFTRST1_CON 0x00114
134 #define RK3036_CRU_SOFTRST2_CON 0x00118
135 #define RK3036_CRU_SOFTRST3_CON 0x0011c
136 #define RK3036_CRU_SOFTRST4_CON 0x00120
137 #define RK3036_CRU_SOFTRST5_CON 0x00124
138 #define RK3036_CRU_SOFTRST6_CON 0x00128
139 #define RK3036_CRU_SOFTRST7_CON 0x0012c
140 #define RK3036_CRU_SOFTRST8_CON 0x00130
141 #define RK3036_CRU_MISC_CON 0x00134
142 #define RK3036_CRU_GLB_CNT_TH 0x00140
143 #define RK3036_CRU_SDMMC_CON0 0x00144
144 #define RK3036_CRU_SDMMC_CON1 0x00148
145 #define RK3036_CRU_SDIO_CON0 0x0014c
146 #define RK3036_CRU_SDIO_CON1 0x00150
147 #define RK3036_CRU_EMMC_CON0 0x00154
148 #define RK3036_CRU_EMMC_CON1 0x00158
149 #define RK3036_CRU_RST_ST 0x00160
150 #define RK3036_CRU_PLL_MASK_CON 0x001f0
151
152 #define RK3036_CRU_CLKSEL_CON           0x44
153 #define RK3036_CRU_CLKGATE_CON          0xd0
154
155 #define RK3036_CRU_CLKSELS_CON_CNT      (35)
156 #define RK3036_CRU_CLKSELS_CON(i)       (RK3036_CRU_CLKSEL_CON + ((i) * 4))
157
158 #define RK3036_CRU_CLKGATES_CON_CNT     (10)
159 #define RK3036_CRU_CLKGATES_CON(i)      (RK3036_CRU_CLKGATE_CON + ((i) * 4))
160
161 #define RK3036_CRU_SOFTRSTS_CON_CNT     (9)
162 #define RK3036_CRU_SOFTRSTS_CON(i)      (RK3036_CRU_SOFTRST_CON + ((i) * 4))
163
164 #define RK312X_CRU_SOFTRST_CON          0x110
165
166 #define RK312X_CRU_SOFTRSTS_CON_CNT     (9)
167 #define RK312X_CRU_SOFTRSTS_CON(i)      (RK312X_CRU_SOFTRST_CON + ((i) * 4))
168
169 #endif