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

Merge branch 'clk-st-critical' into clk-next

* clk-st-critical:
clk: st: clkgen-pll: Detect critical clocks
clk: st: clkgen-fsyn: Detect critical clocks
clk: st: clk-flexgen: Detect critical clocks

+27 -14
+3 -1
drivers/clk/st/clk-flexgen.c
··· 267 267 const char **parents; 268 268 int num_parents, i; 269 269 spinlock_t *rlock = NULL; 270 - unsigned long flex_flags = 0; 271 270 int ret; 272 271 273 272 pnode = of_get_parent(np); ··· 307 308 for (i = 0; i < clk_data->clk_num; i++) { 308 309 struct clk *clk; 309 310 const char *clk_name; 311 + unsigned long flex_flags = 0; 310 312 311 313 if (of_property_read_string_index(np, "clock-output-names", 312 314 i, &clk_name)) { 313 315 break; 314 316 } 317 + 318 + of_clk_detect_critical(np, i, &flex_flags); 315 319 316 320 /* 317 321 * If we read an empty clock name then the output is unused
+7 -3
drivers/clk/st/clkgen-fsyn.c
··· 1027 1027 static struct clk * __init st_clk_register_quadfs_fsynth( 1028 1028 const char *name, const char *parent_name, 1029 1029 struct clkgen_quadfs_data *quadfs, void __iomem *reg, u32 chan, 1030 - spinlock_t *lock) 1030 + unsigned long flags, spinlock_t *lock) 1031 1031 { 1032 1032 struct st_clk_quadfs_fsynth *fs; 1033 1033 struct clk *clk; ··· 1045 1045 1046 1046 init.name = name; 1047 1047 init.ops = &st_quadfs_ops; 1048 - init.flags = CLK_GET_RATE_NOCACHE | CLK_IS_BASIC; 1048 + init.flags = flags | CLK_GET_RATE_NOCACHE | CLK_IS_BASIC; 1049 1049 init.parent_names = &parent_name; 1050 1050 init.num_parents = 1; 1051 1051 ··· 1115 1115 for (fschan = 0; fschan < QUADFS_MAX_CHAN; fschan++) { 1116 1116 struct clk *clk; 1117 1117 const char *clk_name; 1118 + unsigned long flags = 0; 1118 1119 1119 1120 if (of_property_read_string_index(np, "clock-output-names", 1120 1121 fschan, &clk_name)) { ··· 1128 1127 if (*clk_name == '\0') 1129 1128 continue; 1130 1129 1130 + of_clk_detect_critical(np, fschan, &flags); 1131 + 1131 1132 clk = st_clk_register_quadfs_fsynth(clk_name, pll_name, 1132 - quadfs, reg, fschan, lock); 1133 + quadfs, reg, fschan, 1134 + flags, lock); 1133 1135 1134 1136 /* 1135 1137 * If there was an error registering this clock output, clean
+17 -10
drivers/clk/st/clkgen-pll.c
··· 840 840 841 841 static struct clk * __init clkgen_pll_register(const char *parent_name, 842 842 struct clkgen_pll_data *pll_data, 843 - void __iomem *reg, 843 + void __iomem *reg, unsigned long pll_flags, 844 844 const char *clk_name, spinlock_t *lock) 845 845 { 846 846 struct clkgen_pll *pll; ··· 854 854 init.name = clk_name; 855 855 init.ops = pll_data->ops; 856 856 857 - init.flags = CLK_IS_BASIC | CLK_GET_RATE_NOCACHE; 857 + init.flags = pll_flags | CLK_IS_BASIC | CLK_GET_RATE_NOCACHE; 858 858 init.parent_names = &parent_name; 859 859 init.num_parents = 1; 860 860 ··· 948 948 */ 949 949 clk_data->clks[0] = clkgen_pll_register(parent_name, 950 950 (struct clkgen_pll_data *) &st_pll1600c65_ax, 951 - reg + CLKGENAx_PLL0_OFFSET, clk_name, NULL); 951 + reg + CLKGENAx_PLL0_OFFSET, 0, clk_name, NULL); 952 952 953 953 if (IS_ERR(clk_data->clks[0])) 954 954 goto err; ··· 977 977 */ 978 978 clk_data->clks[2] = clkgen_pll_register(parent_name, 979 979 (struct clkgen_pll_data *) &st_pll800c65_ax, 980 - reg + CLKGENAx_PLL1_OFFSET, clk_name, NULL); 980 + reg + CLKGENAx_PLL1_OFFSET, 0, clk_name, NULL); 981 981 982 982 if (IS_ERR(clk_data->clks[2])) 983 983 goto err; ··· 995 995 static struct clk * __init clkgen_odf_register(const char *parent_name, 996 996 void __iomem *reg, 997 997 struct clkgen_pll_data *pll_data, 998 - int odf, 998 + unsigned long pll_flags, int odf, 999 999 spinlock_t *odf_lock, 1000 1000 const char *odf_name) 1001 1001 { ··· 1004 1004 struct clk_gate *gate; 1005 1005 struct clk_divider *div; 1006 1006 1007 - flags = CLK_GET_RATE_NOCACHE | CLK_SET_RATE_PARENT; 1007 + flags = pll_flags | CLK_GET_RATE_NOCACHE | CLK_SET_RATE_PARENT; 1008 1008 1009 1009 gate = kzalloc(sizeof(*gate), GFP_KERNEL); 1010 1010 if (!gate) ··· 1099 1099 int num_odfs, odf; 1100 1100 struct clk_onecell_data *clk_data; 1101 1101 struct clkgen_pll_data *data; 1102 + unsigned long pll_flags = 0; 1102 1103 1103 1104 match = of_match_node(c32_pll_of_match, np); 1104 1105 if (!match) { ··· 1117 1116 if (!pll_base) 1118 1117 return; 1119 1118 1120 - clk = clkgen_pll_register(parent_name, data, pll_base, np->name, 1121 - data->lock); 1119 + of_clk_detect_critical(np, 0, &pll_flags); 1120 + 1121 + clk = clkgen_pll_register(parent_name, data, pll_base, pll_flags, 1122 + np->name, data->lock); 1122 1123 if (IS_ERR(clk)) 1123 1124 return; 1124 1125 ··· 1142 1139 for (odf = 0; odf < num_odfs; odf++) { 1143 1140 struct clk *clk; 1144 1141 const char *clk_name; 1142 + unsigned long odf_flags = 0; 1145 1143 1146 1144 if (of_property_read_string_index(np, "clock-output-names", 1147 1145 odf, &clk_name)) 1148 1146 return; 1149 1147 1150 - clk = clkgen_odf_register(pll_name, pll_base, data, 1148 + of_clk_detect_critical(np, odf, &odf_flags); 1149 + 1150 + clk = clkgen_odf_register(pll_name, pll_base, data, odf_flags, 1151 1151 odf, &clkgena_c32_odf_lock, clk_name); 1152 1152 if (IS_ERR(clk)) 1153 1153 goto err; ··· 1212 1206 /* 1213 1207 * PLL 1200MHz output 1214 1208 */ 1215 - clk = clkgen_pll_register(parent_name, data, reg, clk_name, data->lock); 1209 + clk = clkgen_pll_register(parent_name, data, reg, 1210 + 0, clk_name, data->lock); 1216 1211 1217 1212 if (!IS_ERR(clk)) 1218 1213 of_clk_add_provider(np, of_clk_src_simple_get, clk);