11 #include <linux/kernel.h>
13 #include <linux/errno.h>
14 #include <linux/string.h>
20 #include <asm/clock.h>
21 #include <asm/setup.h>
46 .name =
"pll1_sysclk1",
47 .parent = &c6x_soc_pll1.
sysclks[0],
51 .name =
"pll1_sysclk2",
52 .parent = &c6x_soc_pll1.
sysclks[0],
56 .name =
"pll1_sysclk3",
57 .parent = &c6x_soc_pll1.
sysclks[0],
61 .name =
"pll1_sysclk4",
62 .parent = &c6x_soc_pll1.
sysclks[0],
66 .name =
"pll1_sysclk5",
67 .parent = &c6x_soc_pll1.
sysclks[0],
71 .name =
"pll1_sysclk6",
72 .parent = &c6x_soc_pll1.
sysclks[0],
76 .name =
"pll1_sysclk7",
77 .parent = &c6x_soc_pll1.
sysclks[0],
81 .name =
"pll1_sysclk8",
82 .parent = &c6x_soc_pll1.
sysclks[0],
86 .name =
"pll1_sysclk9",
87 .parent = &c6x_soc_pll1.
sysclks[0],
91 .name =
"pll1_sysclk10",
92 .parent = &c6x_soc_pll1.
sysclks[0],
96 .name =
"pll1_sysclk11",
97 .parent = &c6x_soc_pll1.
sysclks[0],
101 .name =
"pll1_sysclk12",
102 .parent = &c6x_soc_pll1.
sysclks[0],
106 .name =
"pll1_sysclk13",
107 .parent = &c6x_soc_pll1.
sysclks[0],
111 .name =
"pll1_sysclk14",
112 .parent = &c6x_soc_pll1.
sysclks[0],
116 .name =
"pll1_sysclk15",
117 .parent = &c6x_soc_pll1.
sysclks[0],
121 .name =
"pll1_sysclk16",
122 .parent = &c6x_soc_pll1.
sysclks[0],
155 #ifdef CONFIG_SOC_TMS320C6455
162 CLK(
NULL,
"core", &c6x_core_clk),
163 CLK(
"i2c_davinci.1",
NULL, &c6x_i2c_clk),
164 CLK(
"watchdog",
NULL, &c6x_watchdog_clk),
165 CLK(
"2c81800.mdio",
NULL, &c6x_mdio_clk),
184 c6x_core_clk.
parent = &sysclks[0];
185 c6x_i2c_clk.
parent = &sysclks[3];
186 c6x_watchdog_clk.
parent = &sysclks[3];
187 c6x_mdio_clk.
parent = &sysclks[3];
193 #ifdef CONFIG_SOC_TMS320C6457
201 CLK(
NULL,
"core", &c6x_core_clk),
202 CLK(
"i2c_davinci.1",
NULL, &c6x_i2c_clk),
203 CLK(
"watchdog",
NULL, &c6x_watchdog_clk),
204 CLK(
"2c81800.mdio",
NULL, &c6x_mdio_clk),
224 c6x_core_clk.
parent = &sysclks[1];
225 c6x_i2c_clk.
parent = &sysclks[3];
226 c6x_watchdog_clk.
parent = &sysclks[5];
227 c6x_mdio_clk.
parent = &sysclks[5];
233 #ifdef CONFIG_SOC_TMS320C6472
246 CLK(
NULL,
"core", &c6x_core_clk),
247 CLK(
"i2c_davinci.1",
NULL, &c6x_i2c_clk),
248 CLK(
"watchdog",
NULL, &c6x_watchdog_clk),
249 CLK(
"2c81800.mdio",
NULL, &c6x_mdio_clk),
254 #define MIN_CLKIN1_KHz 15625
255 #define MAX_CORE_KHz 700000
256 #define MIN_PLLOUT_KHz MIN_CLKIN1_KHz
266 for (i = 1; i <= 6; i++) {
280 c6x_i2c_clk.
parent = &sysclks[8];
281 c6x_watchdog_clk.
parent = &sysclks[8];
282 c6x_mdio_clk.
parent = &sysclks[5];
289 #ifdef CONFIG_SOC_TMS320C6474
298 CLK(
NULL,
"core", &c6x_core_clk),
299 CLK(
"i2c_davinci.1",
NULL, &c6x_i2c_clk),
300 CLK(
"mcbsp.1",
NULL, &c6x_mcbsp1_clk),
301 CLK(
"mcbsp.2",
NULL, &c6x_mcbsp2_clk),
302 CLK(
"watchdog",
NULL, &c6x_watchdog_clk),
303 CLK(
"2c81800.mdio",
NULL, &c6x_mdio_clk),
328 c6x_core_clk.
parent = &sysclks[7];
329 c6x_i2c_clk.
parent = &sysclks[10];
330 c6x_watchdog_clk.
parent = &sysclks[10];
331 c6x_mcbsp1_clk.
parent = &sysclks[10];
332 c6x_mcbsp2_clk.
parent = &sysclks[10];
338 #ifdef CONFIG_SOC_TMS320C6678
352 CLK(
NULL,
"core", &c6x_core_clk),
393 c6x_core_clk.
parent = &sysclks[0];
394 c6x_i2c_clk.
parent = &sysclks[7];
401 #ifdef CONFIG_SOC_TMS320C6455
402 { .compatible =
"ti,c6455-pll", .data = c6455_setup_clocks },
404 #ifdef CONFIG_SOC_TMS320C6457
405 { .compatible =
"ti,c6457-pll", .data = c6457_setup_clocks },
407 #ifdef CONFIG_SOC_TMS320C6472
408 { .compatible =
"ti,c6472-pll", .data = c6472_setup_clocks },
410 #ifdef CONFIG_SOC_TMS320C6474
411 { .compatible =
"ti,c6474-pll", .data = c6474_setup_clocks },
413 #ifdef CONFIG_SOC_TMS320C6678
414 { .compatible =
"ti,c6678-pll", .data = c6678_setup_clocks },
416 { .compatible =
"ti,c64x+pll" },
437 err = of_property_read_u32(node,
"clock-frequency", &val);
438 if (err || val == 0) {
439 pr_err(
"%s: no clock-frequency found! Using %dMHz\n",
445 err = of_property_read_u32(node,
"ti,c64x+pll-bypass-delay", &val);
450 err = of_property_read_u32(node,
"ti,c64x+pll-reset-delay", &val);
455 err = of_property_read_u32(node,
"ti,c64x+pll-lock-delay", &val);
462 if (
id && id->
data) {
463 __setup_clocks =
id->data;
464 __setup_clocks(node);