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 | |
| 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>
| -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 | ||
