aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/mach-omap2/cclock33xx_data.c5
-rw-r--r--arch/arm/mach-omap2/cclock44xx_data.c20
-rw-r--r--arch/arm/mach-omap2/omap_hwmod_33xx_data.c69
-rw-r--r--arch/arm/mach-omap2/powerdomains3xxx_data.c8
-rw-r--r--arch/arm/mach-omap2/prcm-common.h1
5 files changed, 73 insertions, 30 deletions
diff --git a/arch/arm/mach-omap2/cclock33xx_data.c b/arch/arm/mach-omap2/cclock33xx_data.c
index ba6534d7f155..865d30ee812f 100644
--- a/arch/arm/mach-omap2/cclock33xx_data.c
+++ b/arch/arm/mach-omap2/cclock33xx_data.c
@@ -421,6 +421,10 @@ static struct clk aes0_fck;
421DEFINE_STRUCT_CLK_HW_OMAP(aes0_fck, NULL); 421DEFINE_STRUCT_CLK_HW_OMAP(aes0_fck, NULL);
422DEFINE_STRUCT_CLK(aes0_fck, dpll_core_ck_parents, clk_ops_null); 422DEFINE_STRUCT_CLK(aes0_fck, dpll_core_ck_parents, clk_ops_null);
423 423
424static struct clk rng_fck;
425DEFINE_STRUCT_CLK_HW_OMAP(rng_fck, NULL);
426DEFINE_STRUCT_CLK(rng_fck, dpll_core_ck_parents, clk_ops_null);
427
424/* 428/*
425 * Modules clock nodes 429 * Modules clock nodes
426 * 430 *
@@ -966,6 +970,7 @@ static struct omap_clk am33xx_clks[] = {
966 CLK(NULL, "smartreflex1_fck", &smartreflex1_fck), 970 CLK(NULL, "smartreflex1_fck", &smartreflex1_fck),
967 CLK(NULL, "sha0_fck", &sha0_fck), 971 CLK(NULL, "sha0_fck", &sha0_fck),
968 CLK(NULL, "aes0_fck", &aes0_fck), 972 CLK(NULL, "aes0_fck", &aes0_fck),
973 CLK(NULL, "rng_fck", &rng_fck),
969 CLK(NULL, "timer1_fck", &timer1_fck), 974 CLK(NULL, "timer1_fck", &timer1_fck),
970 CLK(NULL, "timer2_fck", &timer2_fck), 975 CLK(NULL, "timer2_fck", &timer2_fck),
971 CLK(NULL, "timer3_fck", &timer3_fck), 976 CLK(NULL, "timer3_fck", &timer3_fck),
diff --git a/arch/arm/mach-omap2/cclock44xx_data.c b/arch/arm/mach-omap2/cclock44xx_data.c
index 88e37a474334..1d5b5290d2af 100644
--- a/arch/arm/mach-omap2/cclock44xx_data.c
+++ b/arch/arm/mach-omap2/cclock44xx_data.c
@@ -1707,6 +1707,18 @@ int __init omap4xxx_clk_init(void)
1707 omap2_clk_disable_autoidle_all(); 1707 omap2_clk_disable_autoidle_all();
1708 1708
1709 /* 1709 /*
1710 * A set rate of ABE DPLL inturn triggers a set rate of USB DPLL
1711 * when its in bypass. So always lock USB before ABE DPLL.
1712 */
1713 /*
1714 * Lock USB DPLL on OMAP4 devices so that the L3INIT power
1715 * domain can transition to retention state when not in use.
1716 */
1717 rc = clk_set_rate(&dpll_usb_ck, OMAP4_DPLL_USB_DEFFREQ);
1718 if (rc)
1719 pr_err("%s: failed to configure USB DPLL!\n", __func__);
1720
1721 /*
1710 * On OMAP4460 the ABE DPLL fails to turn on if in idle low-power 1722 * On OMAP4460 the ABE DPLL fails to turn on if in idle low-power
1711 * state when turning the ABE clock domain. Workaround this by 1723 * state when turning the ABE clock domain. Workaround this by
1712 * locking the ABE DPLL on boot. 1724 * locking the ABE DPLL on boot.
@@ -1718,13 +1730,5 @@ int __init omap4xxx_clk_init(void)
1718 if (rc) 1730 if (rc)
1719 pr_err("%s: failed to configure ABE DPLL!\n", __func__); 1731 pr_err("%s: failed to configure ABE DPLL!\n", __func__);
1720 1732
1721 /*
1722 * Lock USB DPLL on OMAP4 devices so that the L3INIT power
1723 * domain can transition to retention state when not in use.
1724 */
1725 rc = clk_set_rate(&dpll_usb_ck, OMAP4_DPLL_USB_DEFFREQ);
1726 if (rc)
1727 pr_err("%s: failed to configure USB DPLL!\n", __func__);
1728
1729 return 0; 1733 return 0;
1730} 1734}
diff --git a/arch/arm/mach-omap2/omap_hwmod_33xx_data.c b/arch/arm/mach-omap2/omap_hwmod_33xx_data.c
index eb2f3b93b51c..215894f8910d 100644
--- a/arch/arm/mach-omap2/omap_hwmod_33xx_data.c
+++ b/arch/arm/mach-omap2/omap_hwmod_33xx_data.c
@@ -325,7 +325,6 @@ static struct omap_hwmod am33xx_adc_tsc_hwmod = {
325 * 325 *
326 * - cEFUSE (doesn't fall under any ocp_if) 326 * - cEFUSE (doesn't fall under any ocp_if)
327 * - clkdiv32k 327 * - clkdiv32k
328 * - debugss
329 * - ocp watch point 328 * - ocp watch point
330 */ 329 */
331#if 0 330#if 0
@@ -369,27 +368,6 @@ static struct omap_hwmod am33xx_clkdiv32k_hwmod = {
369 }, 368 },
370}; 369};
371 370
372/*
373 * 'debugss' class
374 * debug sub system
375 */
376static struct omap_hwmod_class am33xx_debugss_hwmod_class = {
377 .name = "debugss",
378};
379
380static struct omap_hwmod am33xx_debugss_hwmod = {
381 .name = "debugss",
382 .class = &am33xx_debugss_hwmod_class,
383 .clkdm_name = "l3_aon_clkdm",
384 .main_clk = "debugss_ick",
385 .prcm = {
386 .omap4 = {
387 .clkctrl_offs = AM33XX_CM_WKUP_DEBUGSS_CLKCTRL_OFFSET,
388 .modulemode = MODULEMODE_SWCTRL,
389 },
390 },
391};
392
393/* ocpwp */ 371/* ocpwp */
394static struct omap_hwmod_class am33xx_ocpwp_hwmod_class = { 372static struct omap_hwmod_class am33xx_ocpwp_hwmod_class = {
395 .name = "ocpwp", 373 .name = "ocpwp",
@@ -482,6 +460,34 @@ static struct omap_hwmod am33xx_ocmcram_hwmod = {
482 }, 460 },
483}; 461};
484 462
463/*
464 * 'debugss' class
465 * debug sub system
466 */
467static struct omap_hwmod_opt_clk debugss_opt_clks[] = {
468 { .role = "dbg_sysclk", .clk = "dbg_sysclk_ck" },
469 { .role = "dbg_clka", .clk = "dbg_clka_ck" },
470};
471
472static struct omap_hwmod_class am33xx_debugss_hwmod_class = {
473 .name = "debugss",
474};
475
476static struct omap_hwmod am33xx_debugss_hwmod = {
477 .name = "debugss",
478 .class = &am33xx_debugss_hwmod_class,
479 .clkdm_name = "l3_aon_clkdm",
480 .main_clk = "trace_clk_div_ck",
481 .prcm = {
482 .omap4 = {
483 .clkctrl_offs = AM33XX_CM_WKUP_DEBUGSS_CLKCTRL_OFFSET,
484 .modulemode = MODULEMODE_SWCTRL,
485 },
486 },
487 .opt_clks = debugss_opt_clks,
488 .opt_clks_cnt = ARRAY_SIZE(debugss_opt_clks),
489};
490
485/* 'smartreflex' class */ 491/* 'smartreflex' class */
486static struct omap_hwmod_class am33xx_smartreflex_hwmod_class = { 492static struct omap_hwmod_class am33xx_smartreflex_hwmod_class = {
487 .name = "smartreflex", 493 .name = "smartreflex",
@@ -1796,6 +1802,24 @@ static struct omap_hwmod_ocp_if am33xx_l3_main__gfx = {
1796 .user = OCP_USER_MPU | OCP_USER_SDMA, 1802 .user = OCP_USER_MPU | OCP_USER_SDMA,
1797}; 1803};
1798 1804
1805/* l3_main -> debugss */
1806static struct omap_hwmod_addr_space am33xx_debugss_addrs[] = {
1807 {
1808 .pa_start = 0x4b000000,
1809 .pa_end = 0x4b000000 + SZ_16M - 1,
1810 .flags = ADDR_TYPE_RT
1811 },
1812 { }
1813};
1814
1815static struct omap_hwmod_ocp_if am33xx_l3_main__debugss = {
1816 .master = &am33xx_l3_main_hwmod,
1817 .slave = &am33xx_debugss_hwmod,
1818 .clk = "dpll_core_m4_ck",
1819 .addr = am33xx_debugss_addrs,
1820 .user = OCP_USER_MPU,
1821};
1822
1799/* l4 wkup -> smartreflex0 */ 1823/* l4 wkup -> smartreflex0 */
1800static struct omap_hwmod_ocp_if am33xx_l4_wkup__smartreflex0 = { 1824static struct omap_hwmod_ocp_if am33xx_l4_wkup__smartreflex0 = {
1801 .master = &am33xx_l4_wkup_hwmod, 1825 .master = &am33xx_l4_wkup_hwmod,
@@ -2470,6 +2494,7 @@ static struct omap_hwmod_ocp_if *am33xx_hwmod_ocp_ifs[] __initdata = {
2470 &am33xx_pruss__l3_main, 2494 &am33xx_pruss__l3_main,
2471 &am33xx_wkup_m3__l4_wkup, 2495 &am33xx_wkup_m3__l4_wkup,
2472 &am33xx_gfx__l3_main, 2496 &am33xx_gfx__l3_main,
2497 &am33xx_l3_main__debugss,
2473 &am33xx_l4_wkup__wkup_m3, 2498 &am33xx_l4_wkup__wkup_m3,
2474 &am33xx_l4_wkup__control, 2499 &am33xx_l4_wkup__control,
2475 &am33xx_l4_wkup__smartreflex0, 2500 &am33xx_l4_wkup__smartreflex0,
diff --git a/arch/arm/mach-omap2/powerdomains3xxx_data.c b/arch/arm/mach-omap2/powerdomains3xxx_data.c
index e2d4bd804523..328c1037cb60 100644
--- a/arch/arm/mach-omap2/powerdomains3xxx_data.c
+++ b/arch/arm/mach-omap2/powerdomains3xxx_data.c
@@ -336,6 +336,13 @@ static struct powerdomain dpll5_pwrdm = {
336 .voltdm = { .name = "core" }, 336 .voltdm = { .name = "core" },
337}; 337};
338 338
339static struct powerdomain alwon_81xx_pwrdm = {
340 .name = "alwon_pwrdm",
341 .prcm_offs = TI81XX_PRM_ALWON_MOD,
342 .pwrsts = PWRSTS_OFF_ON,
343 .voltdm = { .name = "core" },
344};
345
339static struct powerdomain device_81xx_pwrdm = { 346static struct powerdomain device_81xx_pwrdm = {
340 .name = "device_pwrdm", 347 .name = "device_pwrdm",
341 .prcm_offs = TI81XX_PRM_DEVICE_MOD, 348 .prcm_offs = TI81XX_PRM_DEVICE_MOD,
@@ -442,6 +449,7 @@ static struct powerdomain *powerdomains_am35x[] __initdata = {
442}; 449};
443 450
444static struct powerdomain *powerdomains_ti81xx[] __initdata = { 451static struct powerdomain *powerdomains_ti81xx[] __initdata = {
452 &alwon_81xx_pwrdm,
445 &device_81xx_pwrdm, 453 &device_81xx_pwrdm,
446 &active_816x_pwrdm, 454 &active_816x_pwrdm,
447 &default_816x_pwrdm, 455 &default_816x_pwrdm,
diff --git a/arch/arm/mach-omap2/prcm-common.h b/arch/arm/mach-omap2/prcm-common.h
index ff1ac4a82a04..0e841fd9498a 100644
--- a/arch/arm/mach-omap2/prcm-common.h
+++ b/arch/arm/mach-omap2/prcm-common.h
@@ -58,6 +58,7 @@
58#define TI816X_PRM_IVAHD1_MOD 0x0d00 58#define TI816X_PRM_IVAHD1_MOD 0x0d00
59#define TI816X_PRM_IVAHD2_MOD 0x0e00 59#define TI816X_PRM_IVAHD2_MOD 0x0e00
60#define TI816X_PRM_SGX_MOD 0x0f00 60#define TI816X_PRM_SGX_MOD 0x0f00
61#define TI81XX_PRM_ALWON_MOD 0x1800
61 62
62/* 24XX register bits shared between CM & PRM registers */ 63/* 24XX register bits shared between CM & PRM registers */
63 64