diff options
author | Tero Kristo <t-kristo@ti.com> | 2014-12-12 08:22:01 -0500 |
---|---|---|
committer | Michael Turquette <mturquette@linaro.org> | 2014-12-15 20:05:10 -0500 |
commit | 83ccc4670477e7722d4654ca44b4b7004fcaada9 (patch) | |
tree | fee4537c986ecfa88d036a858baa1de839990cac /arch/arm/mach-omap2 | |
parent | 6f8e853d18a98ee95832ffebfaa288d42ae28cd5 (diff) |
ARM: OMAP3: clock: fix boot breakage in legacy mode
The new usage of determine_rate and set_rate_and_parent calls for
OMAP DPLLs assumes the DPLLs must have two parents defined, even
if it is the same clock. Legacy clock data did not fullfill this
requirement and caused a boot crash. Fixed by adding the missing
parent information to the DPLL clocks.
Signed-off-by: Tero Kristo <t-kristo@ti.com>
Fixes: 2e1a7b014f ("ARM: OMAP3+: DPLL: use determine_rate() and...")
Cc: Paul Walmsley <paul@pwsan.com>
Acked-by: Tony Lindgren <tony@atomide.com>
Tested-by: Kevin Hilman <khilman@linaro.org>
Reported-by: Kevin Hilman <khilman@linaro.org>
Signed-off-by: Michael Turquette <mturquette@linaro.org>
Diffstat (limited to 'arch/arm/mach-omap2')
-rw-r--r-- | arch/arm/mach-omap2/cclock3xxx_data.c | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/arch/arm/mach-omap2/cclock3xxx_data.c b/arch/arm/mach-omap2/cclock3xxx_data.c index 5c5ebb4db5f7..644ff3231bb8 100644 --- a/arch/arm/mach-omap2/cclock3xxx_data.c +++ b/arch/arm/mach-omap2/cclock3xxx_data.c | |||
@@ -111,6 +111,7 @@ static struct clk dpll3_ck; | |||
111 | 111 | ||
112 | static const char *dpll3_ck_parent_names[] = { | 112 | static const char *dpll3_ck_parent_names[] = { |
113 | "sys_ck", | 113 | "sys_ck", |
114 | "sys_ck", | ||
114 | }; | 115 | }; |
115 | 116 | ||
116 | static const struct clk_ops dpll3_ck_ops = { | 117 | static const struct clk_ops dpll3_ck_ops = { |
@@ -733,6 +734,10 @@ static const char *corex2_fck_parent_names[] = { | |||
733 | DEFINE_STRUCT_CLK_HW_OMAP(corex2_fck, NULL); | 734 | DEFINE_STRUCT_CLK_HW_OMAP(corex2_fck, NULL); |
734 | DEFINE_STRUCT_CLK(corex2_fck, corex2_fck_parent_names, core_ck_ops); | 735 | DEFINE_STRUCT_CLK(corex2_fck, corex2_fck_parent_names, core_ck_ops); |
735 | 736 | ||
737 | static const char *cpefuse_fck_parent_names[] = { | ||
738 | "sys_ck", | ||
739 | }; | ||
740 | |||
736 | static struct clk cpefuse_fck; | 741 | static struct clk cpefuse_fck; |
737 | 742 | ||
738 | static struct clk_hw_omap cpefuse_fck_hw = { | 743 | static struct clk_hw_omap cpefuse_fck_hw = { |
@@ -744,7 +749,7 @@ static struct clk_hw_omap cpefuse_fck_hw = { | |||
744 | .clkdm_name = "core_l4_clkdm", | 749 | .clkdm_name = "core_l4_clkdm", |
745 | }; | 750 | }; |
746 | 751 | ||
747 | DEFINE_STRUCT_CLK(cpefuse_fck, dpll3_ck_parent_names, aes2_ick_ops); | 752 | DEFINE_STRUCT_CLK(cpefuse_fck, cpefuse_fck_parent_names, aes2_ick_ops); |
748 | 753 | ||
749 | static struct clk csi2_96m_fck; | 754 | static struct clk csi2_96m_fck; |
750 | 755 | ||
@@ -775,7 +780,7 @@ static struct clk_hw_omap d2d_26m_fck_hw = { | |||
775 | .clkdm_name = "d2d_clkdm", | 780 | .clkdm_name = "d2d_clkdm", |
776 | }; | 781 | }; |
777 | 782 | ||
778 | DEFINE_STRUCT_CLK(d2d_26m_fck, dpll3_ck_parent_names, aes2_ick_ops); | 783 | DEFINE_STRUCT_CLK(d2d_26m_fck, cpefuse_fck_parent_names, aes2_ick_ops); |
779 | 784 | ||
780 | static struct clk des1_ick; | 785 | static struct clk des1_ick; |
781 | 786 | ||
@@ -1046,7 +1051,7 @@ static struct clk_hw_omap dss2_alwon_fck_hw = { | |||
1046 | .clkdm_name = "dss_clkdm", | 1051 | .clkdm_name = "dss_clkdm", |
1047 | }; | 1052 | }; |
1048 | 1053 | ||
1049 | DEFINE_STRUCT_CLK(dss2_alwon_fck, dpll3_ck_parent_names, aes2_ick_ops); | 1054 | DEFINE_STRUCT_CLK(dss2_alwon_fck, cpefuse_fck_parent_names, aes2_ick_ops); |
1050 | 1055 | ||
1051 | static struct clk dss_96m_fck; | 1056 | static struct clk dss_96m_fck; |
1052 | 1057 | ||
@@ -1368,7 +1373,7 @@ DEFINE_STRUCT_CLK(gpio1_dbck, gpio1_dbck_parent_names, aes2_ick_ops); | |||
1368 | static struct clk wkup_l4_ick; | 1373 | static struct clk wkup_l4_ick; |
1369 | 1374 | ||
1370 | DEFINE_STRUCT_CLK_HW_OMAP(wkup_l4_ick, "wkup_clkdm"); | 1375 | DEFINE_STRUCT_CLK_HW_OMAP(wkup_l4_ick, "wkup_clkdm"); |
1371 | DEFINE_STRUCT_CLK(wkup_l4_ick, dpll3_ck_parent_names, core_l4_ick_ops); | 1376 | DEFINE_STRUCT_CLK(wkup_l4_ick, cpefuse_fck_parent_names, core_l4_ick_ops); |
1372 | 1377 | ||
1373 | static struct clk gpio1_ick; | 1378 | static struct clk gpio1_ick; |
1374 | 1379 | ||
@@ -1862,7 +1867,7 @@ static struct clk_hw_omap hecc_ck_hw = { | |||
1862 | .clkdm_name = "core_l3_clkdm", | 1867 | .clkdm_name = "core_l3_clkdm", |
1863 | }; | 1868 | }; |
1864 | 1869 | ||
1865 | DEFINE_STRUCT_CLK(hecc_ck, dpll3_ck_parent_names, aes2_ick_ops); | 1870 | DEFINE_STRUCT_CLK(hecc_ck, cpefuse_fck_parent_names, aes2_ick_ops); |
1866 | 1871 | ||
1867 | static struct clk hsotgusb_fck_am35xx; | 1872 | static struct clk hsotgusb_fck_am35xx; |
1868 | 1873 | ||
@@ -1875,7 +1880,7 @@ static struct clk_hw_omap hsotgusb_fck_am35xx_hw = { | |||
1875 | .clkdm_name = "core_l3_clkdm", | 1880 | .clkdm_name = "core_l3_clkdm", |
1876 | }; | 1881 | }; |
1877 | 1882 | ||
1878 | DEFINE_STRUCT_CLK(hsotgusb_fck_am35xx, dpll3_ck_parent_names, aes2_ick_ops); | 1883 | DEFINE_STRUCT_CLK(hsotgusb_fck_am35xx, cpefuse_fck_parent_names, aes2_ick_ops); |
1879 | 1884 | ||
1880 | static struct clk hsotgusb_ick_3430es1; | 1885 | static struct clk hsotgusb_ick_3430es1; |
1881 | 1886 | ||
@@ -2411,7 +2416,7 @@ static struct clk_hw_omap modem_fck_hw = { | |||
2411 | .clkdm_name = "d2d_clkdm", | 2416 | .clkdm_name = "d2d_clkdm", |
2412 | }; | 2417 | }; |
2413 | 2418 | ||
2414 | DEFINE_STRUCT_CLK(modem_fck, dpll3_ck_parent_names, aes2_ick_ops); | 2419 | DEFINE_STRUCT_CLK(modem_fck, cpefuse_fck_parent_names, aes2_ick_ops); |
2415 | 2420 | ||
2416 | static struct clk mspro_fck; | 2421 | static struct clk mspro_fck; |
2417 | 2422 | ||
@@ -2710,7 +2715,7 @@ static struct clk_hw_omap sr1_fck_hw = { | |||
2710 | .clkdm_name = "wkup_clkdm", | 2715 | .clkdm_name = "wkup_clkdm", |
2711 | }; | 2716 | }; |
2712 | 2717 | ||
2713 | DEFINE_STRUCT_CLK(sr1_fck, dpll3_ck_parent_names, aes2_ick_ops); | 2718 | DEFINE_STRUCT_CLK(sr1_fck, cpefuse_fck_parent_names, aes2_ick_ops); |
2714 | 2719 | ||
2715 | static struct clk sr2_fck; | 2720 | static struct clk sr2_fck; |
2716 | 2721 | ||
@@ -2724,7 +2729,7 @@ static struct clk_hw_omap sr2_fck_hw = { | |||
2724 | .clkdm_name = "wkup_clkdm", | 2729 | .clkdm_name = "wkup_clkdm", |
2725 | }; | 2730 | }; |
2726 | 2731 | ||
2727 | DEFINE_STRUCT_CLK(sr2_fck, dpll3_ck_parent_names, aes2_ick_ops); | 2732 | DEFINE_STRUCT_CLK(sr2_fck, cpefuse_fck_parent_names, aes2_ick_ops); |
2728 | 2733 | ||
2729 | static struct clk sr_l4_ick; | 2734 | static struct clk sr_l4_ick; |
2730 | 2735 | ||