aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPramod Kumar <pramod.kumar@broadcom.com>2018-06-01 20:56:07 -0400
committerStephen Boyd <sboyd@kernel.org>2018-06-02 02:26:37 -0400
commit5afa881c6635427e68c73861a2c22d8cac00b984 (patch)
treed6759894436561203094b1bce677d02be81eb313
parent48bf9a522c14449cc7c214c6062668ac54e4e88f (diff)
clk: bcm: Update and add Stingray clock entries
Update and add Stingray clock definitions and tables so they match the binding document and the latest ASIC datasheet Signed-off-by: Pramod Kumar <pramod.kumar@broadcom.com> Signed-off-by: Ray Jui <ray.jui@broadcom.com> Signed-off-by: Stephen Boyd <sboyd@kernel.org>
-rw-r--r--drivers/clk/bcm/clk-sr.c135
1 files changed, 120 insertions, 15 deletions
diff --git a/drivers/clk/bcm/clk-sr.c b/drivers/clk/bcm/clk-sr.c
index adc74f4584cf..7b9efc0212a8 100644
--- a/drivers/clk/bcm/clk-sr.c
+++ b/drivers/clk/bcm/clk-sr.c
@@ -56,8 +56,8 @@ static const struct iproc_pll_ctrl sr_genpll0 = {
56}; 56};
57 57
58static const struct iproc_clk_ctrl sr_genpll0_clk[] = { 58static const struct iproc_clk_ctrl sr_genpll0_clk[] = {
59 [BCM_SR_GENPLL0_SATA_CLK] = { 59 [BCM_SR_GENPLL0_125M_CLK] = {
60 .channel = BCM_SR_GENPLL0_SATA_CLK, 60 .channel = BCM_SR_GENPLL0_125M_CLK,
61 .flags = IPROC_CLK_AON, 61 .flags = IPROC_CLK_AON,
62 .enable = ENABLE_VAL(0x4, 6, 0, 12), 62 .enable = ENABLE_VAL(0x4, 6, 0, 12),
63 .mdiv = REG_VAL(0x18, 0, 9), 63 .mdiv = REG_VAL(0x18, 0, 9),
@@ -102,6 +102,65 @@ static int sr_genpll0_clk_init(struct platform_device *pdev)
102 return 0; 102 return 0;
103} 103}
104 104
105static const struct iproc_pll_ctrl sr_genpll2 = {
106 .flags = IPROC_CLK_AON | IPROC_CLK_PLL_HAS_NDIV_FRAC |
107 IPROC_CLK_PLL_NEEDS_SW_CFG,
108 .aon = AON_VAL(0x0, 1, 13, 12),
109 .reset = RESET_VAL(0x0, 12, 11),
110 .dig_filter = DF_VAL(0x0, 4, 3, 0, 4, 7, 3),
111 .sw_ctrl = SW_CTRL_VAL(0x10, 31),
112 .ndiv_int = REG_VAL(0x10, 20, 10),
113 .ndiv_frac = REG_VAL(0x10, 0, 20),
114 .pdiv = REG_VAL(0x14, 0, 4),
115 .status = REG_VAL(0x30, 12, 1),
116};
117
118static const struct iproc_clk_ctrl sr_genpll2_clk[] = {
119 [BCM_SR_GENPLL2_NIC_CLK] = {
120 .channel = BCM_SR_GENPLL2_NIC_CLK,
121 .flags = IPROC_CLK_AON,
122 .enable = ENABLE_VAL(0x4, 6, 0, 12),
123 .mdiv = REG_VAL(0x18, 0, 9),
124 },
125 [BCM_SR_GENPLL2_TS_500_CLK] = {
126 .channel = BCM_SR_GENPLL2_TS_500_CLK,
127 .flags = IPROC_CLK_AON,
128 .enable = ENABLE_VAL(0x4, 7, 1, 13),
129 .mdiv = REG_VAL(0x18, 10, 9),
130 },
131 [BCM_SR_GENPLL2_125_NITRO_CLK] = {
132 .channel = BCM_SR_GENPLL2_125_NITRO_CLK,
133 .flags = IPROC_CLK_AON,
134 .enable = ENABLE_VAL(0x4, 8, 2, 14),
135 .mdiv = REG_VAL(0x18, 20, 9),
136 },
137 [BCM_SR_GENPLL2_CHIMP_CLK] = {
138 .channel = BCM_SR_GENPLL2_CHIMP_CLK,
139 .flags = IPROC_CLK_AON,
140 .enable = ENABLE_VAL(0x4, 9, 3, 15),
141 .mdiv = REG_VAL(0x1c, 0, 9),
142 },
143 [BCM_SR_GENPLL2_NIC_FLASH_CLK] = {
144 .channel = BCM_SR_GENPLL2_NIC_FLASH_CLK,
145 .flags = IPROC_CLK_AON,
146 .enable = ENABLE_VAL(0x4, 10, 4, 16),
147 .mdiv = REG_VAL(0x1c, 10, 9),
148 },
149 [BCM_SR_GENPLL2_FS4_CLK] = {
150 .channel = BCM_SR_GENPLL2_FS4_CLK,
151 .enable = ENABLE_VAL(0x4, 11, 5, 17),
152 .mdiv = REG_VAL(0x1c, 20, 9),
153 },
154};
155
156static int sr_genpll2_clk_init(struct platform_device *pdev)
157{
158 iproc_pll_clk_setup(pdev->dev.of_node,
159 &sr_genpll2, NULL, 0, sr_genpll2_clk,
160 ARRAY_SIZE(sr_genpll2_clk));
161 return 0;
162}
163
105static const struct iproc_pll_ctrl sr_genpll3 = { 164static const struct iproc_pll_ctrl sr_genpll3 = {
106 .flags = IPROC_CLK_AON | IPROC_CLK_PLL_HAS_NDIV_FRAC | 165 .flags = IPROC_CLK_AON | IPROC_CLK_PLL_HAS_NDIV_FRAC |
107 IPROC_CLK_PLL_NEEDS_SW_CFG, 166 IPROC_CLK_PLL_NEEDS_SW_CFG,
@@ -157,6 +216,30 @@ static const struct iproc_clk_ctrl sr_genpll4_clk[] = {
157 .enable = ENABLE_VAL(0x4, 6, 0, 12), 216 .enable = ENABLE_VAL(0x4, 6, 0, 12),
158 .mdiv = REG_VAL(0x18, 0, 9), 217 .mdiv = REG_VAL(0x18, 0, 9),
159 }, 218 },
219 [BCM_SR_GENPLL4_TPIU_PLL_CLK] = {
220 .channel = BCM_SR_GENPLL4_TPIU_PLL_CLK,
221 .flags = IPROC_CLK_AON,
222 .enable = ENABLE_VAL(0x4, 7, 1, 13),
223 .mdiv = REG_VAL(0x18, 10, 9),
224 },
225 [BCM_SR_GENPLL4_NOC_CLK] = {
226 .channel = BCM_SR_GENPLL4_NOC_CLK,
227 .flags = IPROC_CLK_AON,
228 .enable = ENABLE_VAL(0x4, 8, 2, 14),
229 .mdiv = REG_VAL(0x18, 20, 9),
230 },
231 [BCM_SR_GENPLL4_CHCLK_FS4_CLK] = {
232 .channel = BCM_SR_GENPLL4_CHCLK_FS4_CLK,
233 .flags = IPROC_CLK_AON,
234 .enable = ENABLE_VAL(0x4, 9, 3, 15),
235 .mdiv = REG_VAL(0x1c, 0, 9),
236 },
237 [BCM_SR_GENPLL4_BRIDGE_FSCPU_CLK] = {
238 .channel = BCM_SR_GENPLL4_BRIDGE_FSCPU_CLK,
239 .flags = IPROC_CLK_AON,
240 .enable = ENABLE_VAL(0x4, 10, 4, 16),
241 .mdiv = REG_VAL(0x1c, 10, 9),
242 },
160}; 243};
161 244
162static int sr_genpll4_clk_init(struct platform_device *pdev) 245static int sr_genpll4_clk_init(struct platform_device *pdev)
@@ -181,18 +264,21 @@ static const struct iproc_pll_ctrl sr_genpll5 = {
181}; 264};
182 265
183static const struct iproc_clk_ctrl sr_genpll5_clk[] = { 266static const struct iproc_clk_ctrl sr_genpll5_clk[] = {
184 [BCM_SR_GENPLL5_FS_CLK] = { 267 [BCM_SR_GENPLL5_FS4_HF_CLK] = {
185 .channel = BCM_SR_GENPLL5_FS_CLK, 268 .channel = BCM_SR_GENPLL5_FS4_HF_CLK,
186 .flags = IPROC_CLK_AON,
187 .enable = ENABLE_VAL(0x4, 6, 0, 12), 269 .enable = ENABLE_VAL(0x4, 6, 0, 12),
188 .mdiv = REG_VAL(0x18, 0, 9), 270 .mdiv = REG_VAL(0x18, 0, 9),
189 }, 271 },
190 [BCM_SR_GENPLL5_SPU_CLK] = { 272 [BCM_SR_GENPLL5_CRYPTO_AE_CLK] = {
191 .channel = BCM_SR_GENPLL5_SPU_CLK, 273 .channel = BCM_SR_GENPLL5_CRYPTO_AE_CLK,
192 .flags = IPROC_CLK_AON, 274 .enable = ENABLE_VAL(0x4, 7, 1, 12),
193 .enable = ENABLE_VAL(0x4, 6, 0, 12),
194 .mdiv = REG_VAL(0x18, 10, 9), 275 .mdiv = REG_VAL(0x18, 10, 9),
195 }, 276 },
277 [BCM_SR_GENPLL5_RAID_AE_CLK] = {
278 .channel = BCM_SR_GENPLL5_RAID_AE_CLK,
279 .enable = ENABLE_VAL(0x4, 8, 2, 14),
280 .mdiv = REG_VAL(0x18, 20, 9),
281 },
196}; 282};
197 283
198static int sr_genpll5_clk_init(struct platform_device *pdev) 284static int sr_genpll5_clk_init(struct platform_device *pdev)
@@ -214,24 +300,30 @@ static const struct iproc_pll_ctrl sr_lcpll0 = {
214}; 300};
215 301
216static const struct iproc_clk_ctrl sr_lcpll0_clk[] = { 302static const struct iproc_clk_ctrl sr_lcpll0_clk[] = {
217 [BCM_SR_LCPLL0_SATA_REF_CLK] = { 303 [BCM_SR_LCPLL0_SATA_REFP_CLK] = {
218 .channel = BCM_SR_LCPLL0_SATA_REF_CLK, 304 .channel = BCM_SR_LCPLL0_SATA_REFP_CLK,
219 .flags = IPROC_CLK_AON, 305 .flags = IPROC_CLK_AON,
220 .enable = ENABLE_VAL(0x0, 7, 1, 13), 306 .enable = ENABLE_VAL(0x0, 7, 1, 13),
221 .mdiv = REG_VAL(0x14, 0, 9), 307 .mdiv = REG_VAL(0x14, 0, 9),
222 }, 308 },
223 [BCM_SR_LCPLL0_USB_REF_CLK] = { 309 [BCM_SR_LCPLL0_SATA_REFN_CLK] = {
224 .channel = BCM_SR_LCPLL0_USB_REF_CLK, 310 .channel = BCM_SR_LCPLL0_SATA_REFN_CLK,
225 .flags = IPROC_CLK_AON, 311 .flags = IPROC_CLK_AON,
226 .enable = ENABLE_VAL(0x0, 8, 2, 14), 312 .enable = ENABLE_VAL(0x0, 8, 2, 14),
227 .mdiv = REG_VAL(0x14, 10, 9), 313 .mdiv = REG_VAL(0x14, 10, 9),
228 }, 314 },
229 [BCM_SR_LCPLL0_SATA_REFPN_CLK] = { 315 [BCM_SR_LCPLL0_SATA_350_CLK] = {
230 .channel = BCM_SR_LCPLL0_SATA_REFPN_CLK, 316 .channel = BCM_SR_LCPLL0_SATA_350_CLK,
231 .flags = IPROC_CLK_AON, 317 .flags = IPROC_CLK_AON,
232 .enable = ENABLE_VAL(0x0, 9, 3, 15), 318 .enable = ENABLE_VAL(0x0, 9, 3, 15),
233 .mdiv = REG_VAL(0x14, 20, 9), 319 .mdiv = REG_VAL(0x14, 20, 9),
234 }, 320 },
321 [BCM_SR_LCPLL0_SATA_500_CLK] = {
322 .channel = BCM_SR_LCPLL0_SATA_500_CLK,
323 .flags = IPROC_CLK_AON,
324 .enable = ENABLE_VAL(0x0, 10, 4, 16),
325 .mdiv = REG_VAL(0x18, 0, 9),
326 },
235}; 327};
236 328
237static int sr_lcpll0_clk_init(struct platform_device *pdev) 329static int sr_lcpll0_clk_init(struct platform_device *pdev)
@@ -259,6 +351,18 @@ static const struct iproc_clk_ctrl sr_lcpll1_clk[] = {
259 .enable = ENABLE_VAL(0x0, 7, 1, 13), 351 .enable = ENABLE_VAL(0x0, 7, 1, 13),
260 .mdiv = REG_VAL(0x14, 0, 9), 352 .mdiv = REG_VAL(0x14, 0, 9),
261 }, 353 },
354 [BCM_SR_LCPLL1_USB_REF_CLK] = {
355 .channel = BCM_SR_LCPLL1_USB_REF_CLK,
356 .flags = IPROC_CLK_AON,
357 .enable = ENABLE_VAL(0x0, 8, 2, 14),
358 .mdiv = REG_VAL(0x14, 10, 9),
359 },
360 [BCM_SR_LCPLL1_CRMU_TS_CLK] = {
361 .channel = BCM_SR_LCPLL1_CRMU_TS_CLK,
362 .flags = IPROC_CLK_AON,
363 .enable = ENABLE_VAL(0x0, 9, 3, 15),
364 .mdiv = REG_VAL(0x14, 20, 9),
365 },
262}; 366};
263 367
264static int sr_lcpll1_clk_init(struct platform_device *pdev) 368static int sr_lcpll1_clk_init(struct platform_device *pdev)
@@ -298,6 +402,7 @@ static int sr_lcpll_pcie_clk_init(struct platform_device *pdev)
298 402
299static const struct of_device_id sr_clk_dt_ids[] = { 403static const struct of_device_id sr_clk_dt_ids[] = {
300 { .compatible = "brcm,sr-genpll0", .data = sr_genpll0_clk_init }, 404 { .compatible = "brcm,sr-genpll0", .data = sr_genpll0_clk_init },
405 { .compatible = "brcm,sr-genpll2", .data = sr_genpll2_clk_init },
301 { .compatible = "brcm,sr-genpll4", .data = sr_genpll4_clk_init }, 406 { .compatible = "brcm,sr-genpll4", .data = sr_genpll4_clk_init },
302 { .compatible = "brcm,sr-genpll5", .data = sr_genpll5_clk_init }, 407 { .compatible = "brcm,sr-genpll5", .data = sr_genpll5_clk_init },
303 { .compatible = "brcm,sr-lcpll0", .data = sr_lcpll0_clk_init }, 408 { .compatible = "brcm,sr-lcpll0", .data = sr_lcpll0_clk_init },