Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'for-5.14-clk' of git://git.kernel.org/pub/scm/linux/kernel/git/tegra/linux into clk-nvidia

Pull Tegra clk driver updates from Thierry Reding:

This contains a few fixes across the board and adds stubs to allow
certain drivers to be compile-tested. One other notable change added
here is that clock enabling no longer deasserts the reset. Drivers are
now supposed to do that explicitly because doing it implicitly can get
in the way of certain power-up sequences.

* tag 'for-5.14-clk' of git://git.kernel.org/pub/scm/linux/kernel/git/tegra/linux:
clk: tegra: tegra124-emc: Fix clock imbalance in emc_set_timing()
clk: tegra: Add stubs needed for compile-testing
clk: tegra: Don't deassert reset on enabling clocks
clk: tegra: Mark external clocks as not having reset control
clk: tegra: cclk: Handle thermal DIV2 CPU frequency throttling
clk: tegra: Don't allow zero clock rate for PLLs
clk: tegra: Halve SCLK rate on Tegra20
clk: tegra: Ensure that PLLU configuration is applied properly
clk: tegra: Fix refcounting of gate clocks
clk: tegra30: Use 300MHz for video decoder by default

+171 -81
+47 -33
drivers/clk/tegra/clk-periph-gate.c
··· 48 48 return state; 49 49 } 50 50 51 - static int clk_periph_enable(struct clk_hw *hw) 51 + static void clk_periph_enable_locked(struct clk_hw *hw) 52 52 { 53 53 struct tegra_clk_periph_gate *gate = to_clk_periph_gate(hw); 54 - unsigned long flags = 0; 55 - 56 - spin_lock_irqsave(&periph_ref_lock, flags); 57 - 58 - gate->enable_refcnt[gate->clk_num]++; 59 - if (gate->enable_refcnt[gate->clk_num] > 1) { 60 - spin_unlock_irqrestore(&periph_ref_lock, flags); 61 - return 0; 62 - } 63 54 64 55 write_enb_set(periph_clk_to_bit(gate), gate); 65 56 udelay(2); 66 - 67 - if (!(gate->flags & TEGRA_PERIPH_NO_RESET) && 68 - !(gate->flags & TEGRA_PERIPH_MANUAL_RESET)) { 69 - if (read_rst(gate) & periph_clk_to_bit(gate)) { 70 - udelay(5); /* reset propogation delay */ 71 - write_rst_clr(periph_clk_to_bit(gate), gate); 72 - } 73 - } 74 57 75 58 if (gate->flags & TEGRA_PERIPH_WAR_1005168) { 76 59 writel_relaxed(0, gate->clk_base + LVL2_CLK_GATE_OVRE); ··· 61 78 udelay(1); 62 79 writel_relaxed(0, gate->clk_base + LVL2_CLK_GATE_OVRE); 63 80 } 81 + } 82 + 83 + static void clk_periph_disable_locked(struct clk_hw *hw) 84 + { 85 + struct tegra_clk_periph_gate *gate = to_clk_periph_gate(hw); 86 + 87 + /* 88 + * If peripheral is in the APB bus then read the APB bus to 89 + * flush the write operation in apb bus. This will avoid the 90 + * peripheral access after disabling clock 91 + */ 92 + if (gate->flags & TEGRA_PERIPH_ON_APB) 93 + tegra_read_chipid(); 94 + 95 + write_enb_clr(periph_clk_to_bit(gate), gate); 96 + } 97 + 98 + static int clk_periph_enable(struct clk_hw *hw) 99 + { 100 + struct tegra_clk_periph_gate *gate = to_clk_periph_gate(hw); 101 + unsigned long flags = 0; 102 + 103 + spin_lock_irqsave(&periph_ref_lock, flags); 104 + 105 + if (!gate->enable_refcnt[gate->clk_num]++) 106 + clk_periph_enable_locked(hw); 64 107 65 108 spin_unlock_irqrestore(&periph_ref_lock, flags); 66 109 ··· 100 91 101 92 spin_lock_irqsave(&periph_ref_lock, flags); 102 93 103 - gate->enable_refcnt[gate->clk_num]--; 104 - if (gate->enable_refcnt[gate->clk_num] > 0) { 105 - spin_unlock_irqrestore(&periph_ref_lock, flags); 106 - return; 107 - } 94 + WARN_ON(!gate->enable_refcnt[gate->clk_num]); 95 + 96 + if (--gate->enable_refcnt[gate->clk_num] == 0) 97 + clk_periph_disable_locked(hw); 98 + 99 + spin_unlock_irqrestore(&periph_ref_lock, flags); 100 + } 101 + 102 + static void clk_periph_disable_unused(struct clk_hw *hw) 103 + { 104 + struct tegra_clk_periph_gate *gate = to_clk_periph_gate(hw); 105 + unsigned long flags = 0; 106 + 107 + spin_lock_irqsave(&periph_ref_lock, flags); 108 108 109 109 /* 110 - * If peripheral is in the APB bus then read the APB bus to 111 - * flush the write operation in apb bus. This will avoid the 112 - * peripheral access after disabling clock 110 + * Some clocks are duplicated and some of them are marked as critical, 111 + * like fuse and fuse_burn for example, thus the enable_refcnt will 112 + * be non-zero here if the "unused" duplicate is disabled by CCF. 113 113 */ 114 - if (gate->flags & TEGRA_PERIPH_ON_APB) 115 - tegra_read_chipid(); 116 - 117 - write_enb_clr(periph_clk_to_bit(gate), gate); 114 + if (!gate->enable_refcnt[gate->clk_num]) 115 + clk_periph_disable_locked(hw); 118 116 119 117 spin_unlock_irqrestore(&periph_ref_lock, flags); 120 118 } ··· 130 114 .is_enabled = clk_periph_is_enabled, 131 115 .enable = clk_periph_enable, 132 116 .disable = clk_periph_disable, 117 + .disable_unused = clk_periph_disable_unused, 133 118 }; 134 119 135 120 struct clk *tegra_clk_register_periph_gate(const char *name, ··· 164 147 gate->flags = gate_flags; 165 148 gate->enable_refcnt = enable_refcnt; 166 149 gate->regs = pregs; 167 - 168 - if (read_enb(gate) & periph_clk_to_bit(gate)) 169 - enable_refcnt[clk_num]++; 170 150 171 151 /* Data in .init is copied by clk_register(), so stack variable OK */ 172 152 gate->hw.init = &init;
+11
drivers/clk/tegra/clk-periph.c
··· 100 100 gate_ops->disable(gate_hw); 101 101 } 102 102 103 + static void clk_periph_disable_unused(struct clk_hw *hw) 104 + { 105 + struct tegra_clk_periph *periph = to_clk_periph(hw); 106 + const struct clk_ops *gate_ops = periph->gate_ops; 107 + struct clk_hw *gate_hw = &periph->gate.hw; 108 + 109 + gate_ops->disable_unused(gate_hw); 110 + } 111 + 103 112 static void clk_periph_restore_context(struct clk_hw *hw) 104 113 { 105 114 struct tegra_clk_periph *periph = to_clk_periph(hw); ··· 135 126 .is_enabled = clk_periph_is_enabled, 136 127 .enable = clk_periph_enable, 137 128 .disable = clk_periph_disable, 129 + .disable_unused = clk_periph_disable_unused, 138 130 .restore_context = clk_periph_restore_context, 139 131 }; 140 132 ··· 145 135 .is_enabled = clk_periph_is_enabled, 146 136 .enable = clk_periph_enable, 147 137 .disable = clk_periph_disable, 138 + .disable_unused = clk_periph_disable_unused, 148 139 .restore_context = clk_periph_restore_context, 149 140 }; 150 141
+7 -5
drivers/clk/tegra/clk-pll.c
··· 558 558 u32 p_div = 0; 559 559 int ret; 560 560 561 + if (!rate) 562 + return -EINVAL; 563 + 561 564 switch (parent_rate) { 562 565 case 12000000: 563 566 case 26000000: ··· 1134 1131 if (pll->lock) 1135 1132 spin_lock_irqsave(pll->lock, flags); 1136 1133 1137 - _clk_pll_enable(hw); 1134 + if (!clk_pll_is_enabled(hw)) 1135 + _clk_pll_enable(hw); 1138 1136 1139 1137 ret = clk_pll_wait_for_lock(pll); 1140 1138 if (ret < 0) ··· 1752 1748 return -EINVAL; 1753 1749 } 1754 1750 1755 - if (clk_pll_is_enabled(hw)) 1756 - return 0; 1757 - 1758 1751 input_rate = clk_hw_get_rate(__clk_get_hw(osc)); 1759 1752 1760 1753 if (pll->lock) 1761 1754 spin_lock_irqsave(pll->lock, flags); 1762 1755 1763 - _clk_pll_enable(hw); 1756 + if (!clk_pll_is_enabled(hw)) 1757 + _clk_pll_enable(hw); 1764 1758 1765 1759 ret = clk_pll_wait_for_lock(pll); 1766 1760 if (ret < 0)
+3 -3
drivers/clk/tegra/clk-tegra-periph.c
··· 712 712 MUX8("ndflash", mux_pllp_pllc2_c_c3_pllm_clkm, CLK_SOURCE_NDFLASH, 13, TEGRA_PERIPH_ON_APB, tegra_clk_ndflash_8), 713 713 MUX8("ndspeed", mux_pllp_pllc2_c_c3_pllm_clkm, CLK_SOURCE_NDSPEED, 80, TEGRA_PERIPH_ON_APB, tegra_clk_ndspeed_8), 714 714 MUX8("hdmi", mux_pllp_pllm_plld_plla_pllc_plld2_clkm, CLK_SOURCE_HDMI, 51, 0, tegra_clk_hdmi), 715 - MUX8("extern1", mux_plla_clk32_pllp_clkm_plle, CLK_SOURCE_EXTERN1, 120, 0, tegra_clk_extern1), 716 - MUX8("extern2", mux_plla_clk32_pllp_clkm_plle, CLK_SOURCE_EXTERN2, 121, 0, tegra_clk_extern2), 717 - MUX8("extern3", mux_plla_clk32_pllp_clkm_plle, CLK_SOURCE_EXTERN3, 122, 0, tegra_clk_extern3), 715 + MUX8("extern1", mux_plla_clk32_pllp_clkm_plle, CLK_SOURCE_EXTERN1, 120, TEGRA_PERIPH_NO_RESET, tegra_clk_extern1), 716 + MUX8("extern2", mux_plla_clk32_pllp_clkm_plle, CLK_SOURCE_EXTERN2, 121, TEGRA_PERIPH_NO_RESET, tegra_clk_extern2), 717 + MUX8("extern3", mux_plla_clk32_pllp_clkm_plle, CLK_SOURCE_EXTERN3, 122, TEGRA_PERIPH_NO_RESET, tegra_clk_extern3), 718 718 MUX8("soc_therm", mux_pllm_pllc_pllp_plla, CLK_SOURCE_SOC_THERM, 78, TEGRA_PERIPH_ON_APB, tegra_clk_soc_therm), 719 719 MUX8("soc_therm", mux_clkm_pllc_pllp_plla, CLK_SOURCE_SOC_THERM, 78, TEGRA_PERIPH_ON_APB, tegra_clk_soc_therm_8), 720 720 MUX8("vi_sensor", mux_pllm_pllc2_c_c3_pllp_plla, CLK_SOURCE_VI_SENSOR, 164, TEGRA_PERIPH_NO_RESET, tegra_clk_vi_sensor_8),
+15 -3
drivers/clk/tegra/clk-tegra-super-cclk.c
··· 25 25 26 26 #define SUPER_CDIV_ENB BIT(31) 27 27 28 + #define TSENSOR_SLOWDOWN BIT(23) 29 + 28 30 static struct tegra_clk_super_mux *cclk_super; 29 31 static bool cclk_on_pllx; 30 32 ··· 49 47 static unsigned long cclk_super_recalc_rate(struct clk_hw *hw, 50 48 unsigned long parent_rate) 51 49 { 52 - if (cclk_super_get_parent(hw) == PLLX_INDEX) 53 - return parent_rate; 50 + struct tegra_clk_super_mux *super = to_clk_super_mux(hw); 51 + u32 val = readl_relaxed(super->reg); 52 + unsigned int div2; 54 53 55 - return tegra_clk_super_ops.recalc_rate(hw, parent_rate); 54 + /* check whether thermal throttling is active */ 55 + if (val & TSENSOR_SLOWDOWN) 56 + div2 = 1; 57 + else 58 + div2 = 0; 59 + 60 + if (cclk_super_get_parent(hw) == PLLX_INDEX) 61 + return parent_rate >> div2; 62 + 63 + return tegra_clk_super_ops.recalc_rate(hw, parent_rate) >> div2; 56 64 } 57 65 58 66 static int cclk_super_determine_rate(struct clk_hw *hw,
+3 -1
drivers/clk/tegra/clk-tegra124-emc.c
··· 249 249 div = timing->parent_rate / (timing->rate / 2) - 2; 250 250 251 251 err = tegra->prepare_timing_change(emc, timing->rate); 252 - if (err) 252 + if (err) { 253 + clk_disable_unprepare(timing->parent); 253 254 return err; 255 + } 254 256 255 257 spin_lock_irqsave(tegra->lock, flags); 256 258
+3 -3
drivers/clk/tegra/clk-tegra20.c
··· 1021 1021 { TEGRA20_CLK_PLL_P_OUT3, TEGRA20_CLK_CLK_MAX, 72000000, 1 }, 1022 1022 { TEGRA20_CLK_PLL_P_OUT4, TEGRA20_CLK_CLK_MAX, 24000000, 1 }, 1023 1023 { TEGRA20_CLK_PLL_C, TEGRA20_CLK_CLK_MAX, 600000000, 0 }, 1024 - { TEGRA20_CLK_PLL_C_OUT1, TEGRA20_CLK_CLK_MAX, 240000000, 0 }, 1025 - { TEGRA20_CLK_SCLK, TEGRA20_CLK_PLL_C_OUT1, 240000000, 0 }, 1026 - { TEGRA20_CLK_HCLK, TEGRA20_CLK_CLK_MAX, 240000000, 0 }, 1024 + { TEGRA20_CLK_PLL_C_OUT1, TEGRA20_CLK_CLK_MAX, 120000000, 0 }, 1025 + { TEGRA20_CLK_SCLK, TEGRA20_CLK_PLL_C_OUT1, 120000000, 0 }, 1026 + { TEGRA20_CLK_HCLK, TEGRA20_CLK_CLK_MAX, 120000000, 0 }, 1027 1027 { TEGRA20_CLK_PCLK, TEGRA20_CLK_CLK_MAX, 60000000, 0 }, 1028 1028 { TEGRA20_CLK_CSITE, TEGRA20_CLK_CLK_MAX, 0, 1 }, 1029 1029 { TEGRA20_CLK_CCLK, TEGRA20_CLK_CLK_MAX, 0, 1 },
+3 -3
drivers/clk/tegra/clk-tegra30.c
··· 930 930 /* CCLKG */ 931 931 clk = tegra_clk_register_super_cclk("cclk_g", cclk_g_parents, 932 932 ARRAY_SIZE(cclk_g_parents), 933 - CLK_SET_RATE_PARENT, 933 + CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE, 934 934 clk_base + CCLKG_BURST_POLICY, 935 935 0, NULL); 936 936 clks[TEGRA30_CLK_CCLK_G] = clk; ··· 1006 1006 TEGRA_INIT_DATA_MUX("dam0", mux_pllacp_clkm, CLK_SOURCE_DAM0, 108, 0, TEGRA30_CLK_DAM0), 1007 1007 TEGRA_INIT_DATA_MUX("dam1", mux_pllacp_clkm, CLK_SOURCE_DAM1, 109, 0, TEGRA30_CLK_DAM1), 1008 1008 TEGRA_INIT_DATA_MUX("dam2", mux_pllacp_clkm, CLK_SOURCE_DAM2, 110, 0, TEGRA30_CLK_DAM2), 1009 - TEGRA_INIT_DATA_INT("3d2", mux_pllmcpa, CLK_SOURCE_3D2, 98, TEGRA_PERIPH_MANUAL_RESET, TEGRA30_CLK_GR3D2), 1009 + TEGRA_INIT_DATA_INT("3d2", mux_pllmcpa, CLK_SOURCE_3D2, 98, 0, TEGRA30_CLK_GR3D2), 1010 1010 TEGRA_INIT_DATA_INT("se", mux_pllpcm_clkm, CLK_SOURCE_SE, 127, 0, TEGRA30_CLK_SE), 1011 1011 TEGRA_INIT_DATA_MUX8("hdmi", mux_pllpmdacd2_clkm, CLK_SOURCE_HDMI, 51, 0, TEGRA30_CLK_HDMI), 1012 1012 TEGRA_INIT_DATA("pwm", NULL, NULL, pwm_parents, CLK_SOURCE_PWM, 28, 2, 0, 0, 8, 1, 0, 17, TEGRA_PERIPH_ON_APB, TEGRA30_CLK_PWM), ··· 1245 1245 { TEGRA30_CLK_GR3D, TEGRA30_CLK_PLL_C, 300000000, 0 }, 1246 1246 { TEGRA30_CLK_GR3D2, TEGRA30_CLK_PLL_C, 300000000, 0 }, 1247 1247 { TEGRA30_CLK_PLL_U, TEGRA30_CLK_CLK_MAX, 480000000, 0 }, 1248 - { TEGRA30_CLK_VDE, TEGRA30_CLK_PLL_C, 600000000, 0 }, 1248 + { TEGRA30_CLK_VDE, TEGRA30_CLK_PLL_C, 300000000, 0 }, 1249 1249 { TEGRA30_CLK_SPDIF_IN_SYNC, TEGRA30_CLK_CLK_MAX, 24000000, 0 }, 1250 1250 { TEGRA30_CLK_I2S0_SYNC, TEGRA30_CLK_CLK_MAX, 24000000, 0 }, 1251 1251 { TEGRA30_CLK_I2S1_SYNC, TEGRA30_CLK_CLK_MAX, 24000000, 0 },
-4
drivers/clk/tegra/clk.h
··· 553 553 * Flags: 554 554 * TEGRA_PERIPH_NO_RESET - This flag indicates that reset is not allowed 555 555 * for this module. 556 - * TEGRA_PERIPH_MANUAL_RESET - This flag indicates not to reset module 557 - * after clock enable and driver for the module is responsible for 558 - * doing reset. 559 556 * TEGRA_PERIPH_ON_APB - If peripheral is in the APB bus then read the 560 557 * bus to flush the write operation in apb bus. This flag indicates 561 558 * that this peripheral is in apb bus. ··· 574 577 #define TEGRA_CLK_PERIPH_GATE_MAGIC 0x17760309 575 578 576 579 #define TEGRA_PERIPH_NO_RESET BIT(0) 577 - #define TEGRA_PERIPH_MANUAL_RESET BIT(1) 578 580 #define TEGRA_PERIPH_ON_APB BIT(2) 579 581 #define TEGRA_PERIPH_WAR_1005168 BIT(3) 580 582 #define TEGRA_PERIPH_NO_DIV BIT(4)
-5
drivers/soc/tegra/pmc.c
··· 743 743 return err; 744 744 } 745 745 746 - int __weak tegra210_clk_handle_mbist_war(unsigned int id) 747 - { 748 - return 0; 749 - } 750 - 751 746 static int tegra_powergate_power_up(struct tegra_powergate *pg, 752 747 bool disable_clocks) 753 748 {
+79 -21
include/linux/clk/tegra.h
··· 123 123 } 124 124 #endif 125 125 126 - extern int tegra210_plle_hw_sequence_start(void); 127 - extern bool tegra210_plle_hw_sequence_is_enabled(void); 128 - extern void tegra210_xusb_pll_hw_control_enable(void); 129 - extern void tegra210_xusb_pll_hw_sequence_start(void); 130 - extern void tegra210_sata_pll_hw_control_enable(void); 131 - extern void tegra210_sata_pll_hw_sequence_start(void); 132 - extern void tegra210_set_sata_pll_seq_sw(bool state); 133 - extern void tegra210_put_utmipll_in_iddq(void); 134 - extern void tegra210_put_utmipll_out_iddq(void); 135 - extern int tegra210_clk_handle_mbist_war(unsigned int id); 136 - extern void tegra210_clk_emc_dll_enable(bool flag); 137 - extern void tegra210_clk_emc_dll_update_setting(u32 emc_dll_src_value); 138 - extern void tegra210_clk_emc_update_setting(u32 emc_src_value); 139 - 140 126 struct clk; 141 127 struct tegra_emc; 142 128 ··· 130 144 unsigned long min_rate, 131 145 unsigned long max_rate, 132 146 void *arg); 133 - 134 - void tegra20_clk_set_emc_round_callback(tegra20_clk_emc_round_cb *round_cb, 135 - void *cb_arg); 136 - int tegra20_clk_prepare_emc_mc_same_freq(struct clk *emc_clk, bool same); 137 - 138 147 typedef int (tegra124_emc_prepare_timing_change_cb)(struct tegra_emc *emc, 139 148 unsigned long rate); 140 149 typedef void (tegra124_emc_complete_timing_change_cb)(struct tegra_emc *emc, 141 150 unsigned long rate); 142 - void tegra124_clk_set_emc_callbacks(tegra124_emc_prepare_timing_change_cb *prep_cb, 143 - tegra124_emc_complete_timing_change_cb *complete_cb); 144 151 145 152 struct tegra210_clk_emc_config { 146 153 unsigned long rate; ··· 155 176 const struct tegra210_clk_emc_config *config); 156 177 }; 157 178 179 + #if defined(CONFIG_ARCH_TEGRA_2x_SOC) || defined(CONFIG_ARCH_TEGRA_3x_SOC) 180 + void tegra20_clk_set_emc_round_callback(tegra20_clk_emc_round_cb *round_cb, 181 + void *cb_arg); 182 + int tegra20_clk_prepare_emc_mc_same_freq(struct clk *emc_clk, bool same); 183 + #else 184 + static inline void 185 + tegra20_clk_set_emc_round_callback(tegra20_clk_emc_round_cb *round_cb, 186 + void *cb_arg) 187 + { 188 + } 189 + 190 + static inline int 191 + tegra20_clk_prepare_emc_mc_same_freq(struct clk *emc_clk, bool same) 192 + { 193 + return 0; 194 + } 195 + #endif 196 + 197 + #ifdef CONFIG_TEGRA124_CLK_EMC 198 + void tegra124_clk_set_emc_callbacks(tegra124_emc_prepare_timing_change_cb *prep_cb, 199 + tegra124_emc_complete_timing_change_cb *complete_cb); 200 + #else 201 + static inline void 202 + tegra124_clk_set_emc_callbacks(tegra124_emc_prepare_timing_change_cb *prep_cb, 203 + tegra124_emc_complete_timing_change_cb *complete_cb) 204 + { 205 + } 206 + #endif 207 + 208 + #ifdef CONFIG_ARCH_TEGRA_210_SOC 209 + int tegra210_plle_hw_sequence_start(void); 210 + bool tegra210_plle_hw_sequence_is_enabled(void); 211 + void tegra210_xusb_pll_hw_control_enable(void); 212 + void tegra210_xusb_pll_hw_sequence_start(void); 213 + void tegra210_sata_pll_hw_control_enable(void); 214 + void tegra210_sata_pll_hw_sequence_start(void); 215 + void tegra210_set_sata_pll_seq_sw(bool state); 216 + void tegra210_put_utmipll_in_iddq(void); 217 + void tegra210_put_utmipll_out_iddq(void); 218 + int tegra210_clk_handle_mbist_war(unsigned int id); 219 + void tegra210_clk_emc_dll_enable(bool flag); 220 + void tegra210_clk_emc_dll_update_setting(u32 emc_dll_src_value); 221 + void tegra210_clk_emc_update_setting(u32 emc_src_value); 222 + 158 223 int tegra210_clk_emc_attach(struct clk *clk, 159 224 struct tegra210_clk_emc_provider *provider); 160 225 void tegra210_clk_emc_detach(struct clk *clk); 226 + #else 227 + static inline int tegra210_plle_hw_sequence_start(void) 228 + { 229 + return 0; 230 + } 231 + 232 + static inline bool tegra210_plle_hw_sequence_is_enabled(void) 233 + { 234 + return false; 235 + } 236 + 237 + static inline int tegra210_clk_handle_mbist_war(unsigned int id) 238 + { 239 + return 0; 240 + } 241 + 242 + static inline int 243 + tegra210_clk_emc_attach(struct clk *clk, 244 + struct tegra210_clk_emc_provider *provider) 245 + { 246 + return 0; 247 + } 248 + 249 + static inline void tegra210_xusb_pll_hw_control_enable(void) {} 250 + static inline void tegra210_xusb_pll_hw_sequence_start(void) {} 251 + static inline void tegra210_sata_pll_hw_control_enable(void) {} 252 + static inline void tegra210_sata_pll_hw_sequence_start(void) {} 253 + static inline void tegra210_set_sata_pll_seq_sw(bool state) {} 254 + static inline void tegra210_put_utmipll_in_iddq(void) {} 255 + static inline void tegra210_put_utmipll_out_iddq(void) {} 256 + static inline void tegra210_clk_emc_dll_enable(bool flag) {} 257 + static inline void tegra210_clk_emc_dll_update_setting(u32 emc_dll_src_value) {} 258 + static inline void tegra210_clk_emc_update_setting(u32 emc_src_value) {} 259 + static inline void tegra210_clk_emc_detach(struct clk *clk) {} 260 + #endif 161 261 162 262 #endif /* __LINUX_CLK_TEGRA_H_ */