0058-clk-starfive-update-jh7110-PLL-clock-driver.patch 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819
  1. From 758c8c4c30f495465f34735aef2458c0cc255a75 Mon Sep 17 00:00:00 2001
  2. From: "shanlong.li" <[email protected]>
  3. Date: Wed, 31 May 2023 01:03:02 -0700
  4. Subject: [PATCH 058/122] clk: starfive: update jh7110 PLL clock driver
  5. Update the StarFive JH7110 PLL clock controller
  6. and they work by reading and setting syscon registers.
  7. Signed-off-by: shanlong.li <[email protected]>
  8. ---
  9. .../clk/starfive/clk-starfive-jh7110-pll.c | 269 +++++-------------
  10. .../clk/starfive/clk-starfive-jh7110-pll.h | 264 +++++++++--------
  11. 2 files changed, 227 insertions(+), 306 deletions(-)
  12. --- a/drivers/clk/starfive/clk-starfive-jh7110-pll.c
  13. +++ b/drivers/clk/starfive/clk-starfive-jh7110-pll.c
  14. @@ -24,11 +24,29 @@
  15. #include <linux/mfd/syscon.h>
  16. #include <linux/platform_device.h>
  17. #include <linux/regmap.h>
  18. +#include <linux/of_platform.h>
  19. #include <dt-bindings/clock/starfive,jh7110-crg.h>
  20. #include "clk-starfive-jh7110-pll.h"
  21. +struct jh7110_pll_conf_variant {
  22. + unsigned int pll_nums;
  23. + struct jh7110_pll_syscon_conf conf[];
  24. +};
  25. +
  26. +static const struct jh7110_pll_conf_variant jh7110_pll_variant = {
  27. + .pll_nums = JH7110_PLLCLK_END,
  28. + .conf = {
  29. + JH7110_PLL(JH7110_CLK_PLL0_OUT, "pll0_out",
  30. + JH7110_PLL0_FREQ_MAX, jh7110_pll0_syscon_val_preset),
  31. + JH7110_PLL(JH7110_CLK_PLL1_OUT, "pll1_out",
  32. + JH7110_PLL1_FREQ_MAX, jh7110_pll1_syscon_val_preset),
  33. + JH7110_PLL(JH7110_CLK_PLL2_OUT, "pll2_out",
  34. + JH7110_PLL2_FREQ_MAX, jh7110_pll2_syscon_val_preset),
  35. + },
  36. +};
  37. +
  38. static struct jh7110_clk_pll_data *jh7110_pll_data_from(struct clk_hw *hw)
  39. {
  40. return container_of(hw, struct jh7110_clk_pll_data, hw);
  41. @@ -44,10 +62,9 @@ static unsigned long jh7110_pll_get_freq
  42. unsigned long parent_rate)
  43. {
  44. struct jh7110_clk_pll_priv *priv = jh7110_pll_priv_from(data);
  45. - struct jh7110_pll_syscon_offset *offset = &data->offset;
  46. - struct jh7110_pll_syscon_mask *mask = &data->mask;
  47. - struct jh7110_pll_syscon_shift *shift = &data->shift;
  48. - unsigned long freq = 0;
  49. + struct jh7110_pll_syscon_offset *offset = &data->conf.offsets;
  50. + struct jh7110_pll_syscon_mask *mask = &data->conf.masks;
  51. + struct jh7110_pll_syscon_shift *shift = &data->conf.shifts;
  52. unsigned long frac_cal;
  53. u32 dacpd;
  54. u32 dsmpd;
  55. @@ -57,32 +74,23 @@ static unsigned long jh7110_pll_get_freq
  56. u32 frac;
  57. u32 reg_val;
  58. - if (regmap_read(priv->syscon_regmap, offset->dacpd, &reg_val))
  59. - goto read_error;
  60. + regmap_read(priv->syscon_regmap, offset->dacpd, &reg_val);
  61. dacpd = (reg_val & mask->dacpd) >> shift->dacpd;
  62. - if (regmap_read(priv->syscon_regmap, offset->dsmpd, &reg_val))
  63. - goto read_error;
  64. + regmap_read(priv->syscon_regmap, offset->dsmpd, &reg_val);
  65. dsmpd = (reg_val & mask->dsmpd) >> shift->dsmpd;
  66. - if (regmap_read(priv->syscon_regmap, offset->fbdiv, &reg_val))
  67. - goto read_error;
  68. + regmap_read(priv->syscon_regmap, offset->fbdiv, &reg_val);
  69. fbdiv = (reg_val & mask->fbdiv) >> shift->fbdiv;
  70. - /* fbdiv value should be 8 to 4095 */
  71. - if (fbdiv < 8)
  72. - goto read_error;
  73. - if (regmap_read(priv->syscon_regmap, offset->prediv, &reg_val))
  74. - goto read_error;
  75. + regmap_read(priv->syscon_regmap, offset->prediv, &reg_val);
  76. prediv = (reg_val & mask->prediv) >> shift->prediv;
  77. - if (regmap_read(priv->syscon_regmap, offset->postdiv1, &reg_val))
  78. - goto read_error;
  79. + regmap_read(priv->syscon_regmap, offset->postdiv1, &reg_val);
  80. /* postdiv1 = 2 ^ reg_val */
  81. postdiv1 = 1 << ((reg_val & mask->postdiv1) >> shift->postdiv1);
  82. - if (regmap_read(priv->syscon_regmap, offset->frac, &reg_val))
  83. - goto read_error;
  84. + regmap_read(priv->syscon_regmap, offset->frac, &reg_val);
  85. frac = (reg_val & mask->frac) >> shift->frac;
  86. /*
  87. @@ -95,14 +103,11 @@ static unsigned long jh7110_pll_get_freq
  88. else if (dacpd == 0 && dsmpd == 0)
  89. frac_cal = (unsigned long)frac * STARFIVE_PLL_FRAC_PATR_SIZE / (1 << 24);
  90. else
  91. - goto read_error;
  92. + return 0;
  93. /* Fvco = Fref * (NI + NF) / M / Q1 */
  94. - freq = parent_rate / STARFIVE_PLL_FRAC_PATR_SIZE *
  95. - (fbdiv * STARFIVE_PLL_FRAC_PATR_SIZE + frac_cal) / prediv / postdiv1;
  96. -
  97. -read_error:
  98. - return freq;
  99. + return (parent_rate / STARFIVE_PLL_FRAC_PATR_SIZE *
  100. + (fbdiv * STARFIVE_PLL_FRAC_PATR_SIZE + frac_cal) / prediv / postdiv1);
  101. }
  102. static unsigned long jh7110_pll_rate_sub_fabs(unsigned long rate1, unsigned long rate2)
  103. @@ -114,40 +119,27 @@ static unsigned long jh7110_pll_rate_sub
  104. static void jh7110_pll_select_near_freq_id(struct jh7110_clk_pll_data *data,
  105. unsigned long rate)
  106. {
  107. - const struct starfive_pll_syscon_value *syscon_val;
  108. + const struct jh7110_pll_syscon_val *val;
  109. unsigned int id;
  110. - unsigned int pll_arry_size;
  111. unsigned long rate_diff;
  112. - if (data->idx == JH7110_CLK_PLL0_OUT)
  113. - pll_arry_size = ARRAY_SIZE(jh7110_pll0_syscon_freq);
  114. - else if (data->idx == JH7110_CLK_PLL1_OUT)
  115. - pll_arry_size = ARRAY_SIZE(jh7110_pll1_syscon_freq);
  116. - else
  117. - pll_arry_size = ARRAY_SIZE(jh7110_pll2_syscon_freq);
  118. -
  119. /* compare the frequency one by one from small to large in order */
  120. - for (id = 0; id < pll_arry_size; id++) {
  121. - if (data->idx == JH7110_CLK_PLL0_OUT)
  122. - syscon_val = &jh7110_pll0_syscon_freq[id];
  123. - else if (data->idx == JH7110_CLK_PLL1_OUT)
  124. - syscon_val = &jh7110_pll1_syscon_freq[id];
  125. - else
  126. - syscon_val = &jh7110_pll2_syscon_freq[id];
  127. + for (id = 0; id < data->conf.preset_val_nums; id++) {
  128. + val = &data->conf.preset_val[id];
  129. - if (rate == syscon_val->freq)
  130. + if (rate == val->freq)
  131. goto match_end;
  132. /* select near frequency */
  133. - if (rate < syscon_val->freq) {
  134. + if (rate < val->freq) {
  135. /* The last frequency is closer to the target rate than this time. */
  136. if (id > 0)
  137. - if (rate_diff < jh7110_pll_rate_sub_fabs(rate, syscon_val->freq))
  138. + if (rate_diff < jh7110_pll_rate_sub_fabs(rate, val->freq))
  139. id--;
  140. goto match_end;
  141. } else {
  142. - rate_diff = jh7110_pll_rate_sub_fabs(rate, syscon_val->freq);
  143. + rate_diff = jh7110_pll_rate_sub_fabs(rate, val->freq);
  144. }
  145. }
  146. @@ -158,54 +150,34 @@ match_end:
  147. static int jh7110_pll_set_freq_syscon(struct jh7110_clk_pll_data *data)
  148. {
  149. struct jh7110_clk_pll_priv *priv = jh7110_pll_priv_from(data);
  150. - struct jh7110_pll_syscon_offset *offset = &data->offset;
  151. - struct jh7110_pll_syscon_mask *mask = &data->mask;
  152. - struct jh7110_pll_syscon_shift *shift = &data->shift;
  153. - unsigned int freq_idx = data->freq_select_idx;
  154. - const struct starfive_pll_syscon_value *syscon_val;
  155. - int ret;
  156. + struct jh7110_pll_syscon_offset *offset = &data->conf.offsets;
  157. + struct jh7110_pll_syscon_mask *mask = &data->conf.masks;
  158. + struct jh7110_pll_syscon_shift *shift = &data->conf.shifts;
  159. + const struct jh7110_pll_syscon_val *val = &data->conf.preset_val[data->freq_select_idx];
  160. - if (data->idx == JH7110_CLK_PLL0_OUT)
  161. - syscon_val = &jh7110_pll0_syscon_freq[freq_idx];
  162. - else if (data->idx == JH7110_CLK_PLL1_OUT)
  163. - syscon_val = &jh7110_pll1_syscon_freq[freq_idx];
  164. - else
  165. - syscon_val = &jh7110_pll2_syscon_freq[freq_idx];
  166. + /* frac: Integer Mode (Both 1) or Fraction Mode (Both 0) */
  167. + if (val->dacpd == 0 && val->dsmpd == 0)
  168. + regmap_update_bits(priv->syscon_regmap, offset->frac, mask->frac,
  169. + (val->frac << shift->frac));
  170. + else if (val->dacpd != val->dsmpd)
  171. + return -EINVAL;
  172. - ret = regmap_update_bits(priv->syscon_regmap, offset->dacpd, mask->dacpd,
  173. - (syscon_val->dacpd << shift->dacpd));
  174. - if (ret)
  175. - goto set_failed;
  176. -
  177. - ret = regmap_update_bits(priv->syscon_regmap, offset->dsmpd, mask->dsmpd,
  178. - (syscon_val->dsmpd << shift->dsmpd));
  179. - if (ret)
  180. - goto set_failed;
  181. -
  182. - ret = regmap_update_bits(priv->syscon_regmap, offset->prediv, mask->prediv,
  183. - (syscon_val->prediv << shift->prediv));
  184. - if (ret)
  185. - goto set_failed;
  186. -
  187. - ret = regmap_update_bits(priv->syscon_regmap, offset->fbdiv, mask->fbdiv,
  188. - (syscon_val->fbdiv << shift->fbdiv));
  189. - if (ret)
  190. - goto set_failed;
  191. -
  192. - ret = regmap_update_bits(priv->syscon_regmap, offset->postdiv1, mask->postdiv1,
  193. - ((syscon_val->postdiv1 >> 1) << shift->postdiv1));
  194. - if (ret)
  195. - goto set_failed;
  196. + /* fbdiv value should be 8 to 4095 */
  197. + if (val->fbdiv < 8)
  198. + return -EINVAL;
  199. - /* frac: Integer Mode (Both 1) or Fraction Mode (Both 0) */
  200. - if (syscon_val->dacpd == 0 && syscon_val->dsmpd == 0)
  201. - ret = regmap_update_bits(priv->syscon_regmap, offset->frac, mask->frac,
  202. - (syscon_val->frac << shift->frac));
  203. - else if (syscon_val->dacpd != syscon_val->dsmpd)
  204. - ret = -EINVAL;
  205. + regmap_update_bits(priv->syscon_regmap, offset->dacpd, mask->dacpd,
  206. + (val->dacpd << shift->dacpd));
  207. + regmap_update_bits(priv->syscon_regmap, offset->dsmpd, mask->dsmpd,
  208. + (val->dsmpd << shift->dsmpd));
  209. + regmap_update_bits(priv->syscon_regmap, offset->prediv, mask->prediv,
  210. + (val->prediv << shift->prediv));
  211. + regmap_update_bits(priv->syscon_regmap, offset->fbdiv, mask->fbdiv,
  212. + (val->fbdiv << shift->fbdiv));
  213. + regmap_update_bits(priv->syscon_regmap, offset->postdiv1, mask->postdiv1,
  214. + ((val->postdiv1 >> 1) << shift->postdiv1));
  215. -set_failed:
  216. - return ret;
  217. + return 0;
  218. }
  219. static unsigned long jh7110_pll_recalc_rate(struct clk_hw *hw, unsigned long parent_rate)
  220. @@ -220,13 +192,7 @@ static int jh7110_pll_determine_rate(str
  221. struct jh7110_clk_pll_data *data = jh7110_pll_data_from(hw);
  222. jh7110_pll_select_near_freq_id(data, req->rate);
  223. -
  224. - if (data->idx == JH7110_CLK_PLL0_OUT)
  225. - req->rate = jh7110_pll0_syscon_freq[data->freq_select_idx].freq;
  226. - else if (data->idx == JH7110_CLK_PLL1_OUT)
  227. - req->rate = jh7110_pll1_syscon_freq[data->freq_select_idx].freq;
  228. - else
  229. - req->rate = jh7110_pll2_syscon_freq[data->freq_select_idx].freq;
  230. + req->rate = data->conf.preset_val[data->freq_select_idx].freq;
  231. return 0;
  232. }
  233. @@ -270,92 +236,12 @@ static const struct clk_ops jh7110_pll_o
  234. .debug_init = jh7110_pll_debug_init,
  235. };
  236. -/* get offset, mask and shift of PLL(x) syscon */
  237. -static int jh7110_pll_data_get(struct jh7110_clk_pll_data *data, int index)
  238. -{
  239. - struct jh7110_pll_syscon_offset *offset = &data->offset;
  240. - struct jh7110_pll_syscon_mask *mask = &data->mask;
  241. - struct jh7110_pll_syscon_shift *shift = &data->shift;
  242. -
  243. - if (index == JH7110_CLK_PLL0_OUT) {
  244. - offset->dacpd = STARFIVE_JH7110_PLL0_DACPD_OFFSET;
  245. - offset->dsmpd = STARFIVE_JH7110_PLL0_DSMPD_OFFSET;
  246. - offset->fbdiv = STARFIVE_JH7110_PLL0_FBDIV_OFFSET;
  247. - offset->frac = STARFIVE_JH7110_PLL0_FRAC_OFFSET;
  248. - offset->prediv = STARFIVE_JH7110_PLL0_PREDIV_OFFSET;
  249. - offset->postdiv1 = STARFIVE_JH7110_PLL0_POSTDIV1_OFFSET;
  250. -
  251. - mask->dacpd = STARFIVE_JH7110_PLL0_DACPD_MASK;
  252. - mask->dsmpd = STARFIVE_JH7110_PLL0_DSMPD_MASK;
  253. - mask->fbdiv = STARFIVE_JH7110_PLL0_FBDIV_MASK;
  254. - mask->frac = STARFIVE_JH7110_PLL0_FRAC_MASK;
  255. - mask->prediv = STARFIVE_JH7110_PLL0_PREDIV_MASK;
  256. - mask->postdiv1 = STARFIVE_JH7110_PLL0_POSTDIV1_MASK;
  257. -
  258. - shift->dacpd = STARFIVE_JH7110_PLL0_DACPD_SHIFT;
  259. - shift->dsmpd = STARFIVE_JH7110_PLL0_DSMPD_SHIFT;
  260. - shift->fbdiv = STARFIVE_JH7110_PLL0_FBDIV_SHIFT;
  261. - shift->frac = STARFIVE_JH7110_PLL0_FRAC_SHIFT;
  262. - shift->prediv = STARFIVE_JH7110_PLL0_PREDIV_SHIFT;
  263. - shift->postdiv1 = STARFIVE_JH7110_PLL0_POSTDIV1_SHIFT;
  264. -
  265. - } else if (index == JH7110_CLK_PLL1_OUT) {
  266. - offset->dacpd = STARFIVE_JH7110_PLL1_DACPD_OFFSET;
  267. - offset->dsmpd = STARFIVE_JH7110_PLL1_DSMPD_OFFSET;
  268. - offset->fbdiv = STARFIVE_JH7110_PLL1_FBDIV_OFFSET;
  269. - offset->frac = STARFIVE_JH7110_PLL1_FRAC_OFFSET;
  270. - offset->prediv = STARFIVE_JH7110_PLL1_PREDIV_OFFSET;
  271. - offset->postdiv1 = STARFIVE_JH7110_PLL1_POSTDIV1_OFFSET;
  272. -
  273. - mask->dacpd = STARFIVE_JH7110_PLL1_DACPD_MASK;
  274. - mask->dsmpd = STARFIVE_JH7110_PLL1_DSMPD_MASK;
  275. - mask->fbdiv = STARFIVE_JH7110_PLL1_FBDIV_MASK;
  276. - mask->frac = STARFIVE_JH7110_PLL1_FRAC_MASK;
  277. - mask->prediv = STARFIVE_JH7110_PLL1_PREDIV_MASK;
  278. - mask->postdiv1 = STARFIVE_JH7110_PLL1_POSTDIV1_MASK;
  279. -
  280. - shift->dacpd = STARFIVE_JH7110_PLL1_DACPD_SHIFT;
  281. - shift->dsmpd = STARFIVE_JH7110_PLL1_DSMPD_SHIFT;
  282. - shift->fbdiv = STARFIVE_JH7110_PLL1_FBDIV_SHIFT;
  283. - shift->frac = STARFIVE_JH7110_PLL1_FRAC_SHIFT;
  284. - shift->prediv = STARFIVE_JH7110_PLL1_PREDIV_SHIFT;
  285. - shift->postdiv1 = STARFIVE_JH7110_PLL1_POSTDIV1_SHIFT;
  286. -
  287. - } else if (index == JH7110_CLK_PLL2_OUT) {
  288. - offset->dacpd = STARFIVE_JH7110_PLL2_DACPD_OFFSET;
  289. - offset->dsmpd = STARFIVE_JH7110_PLL2_DSMPD_OFFSET;
  290. - offset->fbdiv = STARFIVE_JH7110_PLL2_FBDIV_OFFSET;
  291. - offset->frac = STARFIVE_JH7110_PLL2_FRAC_OFFSET;
  292. - offset->prediv = STARFIVE_JH7110_PLL2_PREDIV_OFFSET;
  293. - offset->postdiv1 = STARFIVE_JH7110_PLL2_POSTDIV1_OFFSET;
  294. -
  295. - mask->dacpd = STARFIVE_JH7110_PLL2_DACPD_MASK;
  296. - mask->dsmpd = STARFIVE_JH7110_PLL2_DSMPD_MASK;
  297. - mask->fbdiv = STARFIVE_JH7110_PLL2_FBDIV_MASK;
  298. - mask->frac = STARFIVE_JH7110_PLL2_FRAC_MASK;
  299. - mask->prediv = STARFIVE_JH7110_PLL2_PREDIV_MASK;
  300. - mask->postdiv1 = STARFIVE_JH7110_PLL2_POSTDIV1_MASK;
  301. -
  302. - shift->dacpd = STARFIVE_JH7110_PLL2_DACPD_SHIFT;
  303. - shift->dsmpd = STARFIVE_JH7110_PLL2_DSMPD_SHIFT;
  304. - shift->fbdiv = STARFIVE_JH7110_PLL2_FBDIV_SHIFT;
  305. - shift->frac = STARFIVE_JH7110_PLL2_FRAC_SHIFT;
  306. - shift->prediv = STARFIVE_JH7110_PLL2_PREDIV_SHIFT;
  307. - shift->postdiv1 = STARFIVE_JH7110_PLL2_POSTDIV1_SHIFT;
  308. -
  309. - } else {
  310. - return -ENOENT;
  311. - }
  312. -
  313. - return 0;
  314. -}
  315. -
  316. static struct clk_hw *jh7110_pll_get(struct of_phandle_args *clkspec, void *data)
  317. {
  318. struct jh7110_clk_pll_priv *priv = data;
  319. unsigned int idx = clkspec->args[0];
  320. - if (idx < JH7110_PLLCLK_END)
  321. + if (idx < priv->pll_nums)
  322. return &priv->data[idx].hw;
  323. return ERR_PTR(-EINVAL);
  324. @@ -363,17 +249,17 @@ static struct clk_hw *jh7110_pll_get(str
  325. static int jh7110_pll_probe(struct platform_device *pdev)
  326. {
  327. - const char *pll_name[JH7110_PLLCLK_END] = {
  328. - "pll0_out",
  329. - "pll1_out",
  330. - "pll2_out"
  331. - };
  332. + const struct jh7110_pll_conf_variant *variant;
  333. struct jh7110_clk_pll_priv *priv;
  334. struct jh7110_clk_pll_data *data;
  335. int ret;
  336. unsigned int idx;
  337. - priv = devm_kzalloc(&pdev->dev, struct_size(priv, data, JH7110_PLLCLK_END),
  338. + variant = of_device_get_match_data(&pdev->dev);
  339. + if (!variant)
  340. + return -ENOMEM;
  341. +
  342. + priv = devm_kzalloc(&pdev->dev, struct_size(priv, data, variant->pll_nums),
  343. GFP_KERNEL);
  344. if (!priv)
  345. return -ENOMEM;
  346. @@ -383,12 +269,13 @@ static int jh7110_pll_probe(struct platf
  347. if (IS_ERR(priv->syscon_regmap))
  348. return PTR_ERR(priv->syscon_regmap);
  349. - for (idx = 0; idx < JH7110_PLLCLK_END; idx++) {
  350. + priv->pll_nums = variant->pll_nums;
  351. + for (idx = 0; idx < priv->pll_nums; idx++) {
  352. struct clk_parent_data parents = {
  353. .index = 0,
  354. };
  355. struct clk_init_data init = {
  356. - .name = pll_name[idx],
  357. + .name = variant->conf[idx].name,
  358. .ops = &jh7110_pll_ops,
  359. .parent_data = &parents,
  360. .num_parents = 1,
  361. @@ -396,11 +283,7 @@ static int jh7110_pll_probe(struct platf
  362. };
  363. data = &priv->data[idx];
  364. -
  365. - ret = jh7110_pll_data_get(data, idx);
  366. - if (ret)
  367. - return ret;
  368. -
  369. + data->conf = variant->conf[idx];
  370. data->hw.init = &init;
  371. data->idx = idx;
  372. @@ -413,7 +296,7 @@ static int jh7110_pll_probe(struct platf
  373. }
  374. static const struct of_device_id jh7110_pll_match[] = {
  375. - { .compatible = "starfive,jh7110-pll" },
  376. + { .compatible = "starfive,jh7110-pll", .data = &jh7110_pll_variant },
  377. { /* sentinel */ }
  378. };
  379. MODULE_DEVICE_TABLE(of, jh7110_pll_match);
  380. --- a/drivers/clk/starfive/clk-starfive-jh7110-pll.h
  381. +++ b/drivers/clk/starfive/clk-starfive-jh7110-pll.h
  382. @@ -13,62 +13,93 @@
  383. /* The decimal places are counted by expanding them by a factor of STARFIVE_PLL_FRAC_PATR_SIZE */
  384. #define STARFIVE_PLL_FRAC_PATR_SIZE 1000
  385. -#define STARFIVE_JH7110_PLL0_DACPD_OFFSET 0x18
  386. -#define STARFIVE_JH7110_PLL0_DACPD_SHIFT 24
  387. -#define STARFIVE_JH7110_PLL0_DACPD_MASK BIT(24)
  388. -#define STARFIVE_JH7110_PLL0_DSMPD_OFFSET 0x18
  389. -#define STARFIVE_JH7110_PLL0_DSMPD_SHIFT 25
  390. -#define STARFIVE_JH7110_PLL0_DSMPD_MASK BIT(25)
  391. -#define STARFIVE_JH7110_PLL0_FBDIV_OFFSET 0x1c
  392. -#define STARFIVE_JH7110_PLL0_FBDIV_SHIFT 0
  393. -#define STARFIVE_JH7110_PLL0_FBDIV_MASK GENMASK(11, 0)
  394. -#define STARFIVE_JH7110_PLL0_FRAC_OFFSET 0x20
  395. -#define STARFIVE_JH7110_PLL0_FRAC_SHIFT 0
  396. -#define STARFIVE_JH7110_PLL0_FRAC_MASK GENMASK(23, 0)
  397. -#define STARFIVE_JH7110_PLL0_POSTDIV1_OFFSET 0x20
  398. -#define STARFIVE_JH7110_PLL0_POSTDIV1_SHIFT 28
  399. -#define STARFIVE_JH7110_PLL0_POSTDIV1_MASK GENMASK(29, 28)
  400. -#define STARFIVE_JH7110_PLL0_PREDIV_OFFSET 0x24
  401. -#define STARFIVE_JH7110_PLL0_PREDIV_SHIFT 0
  402. -#define STARFIVE_JH7110_PLL0_PREDIV_MASK GENMASK(5, 0)
  403. -
  404. -#define STARFIVE_JH7110_PLL1_DACPD_OFFSET 0x24
  405. -#define STARFIVE_JH7110_PLL1_DACPD_SHIFT 15
  406. -#define STARFIVE_JH7110_PLL1_DACPD_MASK BIT(15)
  407. -#define STARFIVE_JH7110_PLL1_DSMPD_OFFSET 0x24
  408. -#define STARFIVE_JH7110_PLL1_DSMPD_SHIFT 16
  409. -#define STARFIVE_JH7110_PLL1_DSMPD_MASK BIT(16)
  410. -#define STARFIVE_JH7110_PLL1_FBDIV_OFFSET 0x24
  411. -#define STARFIVE_JH7110_PLL1_FBDIV_SHIFT 17
  412. -#define STARFIVE_JH7110_PLL1_FBDIV_MASK GENMASK(28, 17)
  413. -#define STARFIVE_JH7110_PLL1_FRAC_OFFSET 0x28
  414. -#define STARFIVE_JH7110_PLL1_FRAC_SHIFT 0
  415. -#define STARFIVE_JH7110_PLL1_FRAC_MASK GENMASK(23, 0)
  416. -#define STARFIVE_JH7110_PLL1_POSTDIV1_OFFSET 0x28
  417. -#define STARFIVE_JH7110_PLL1_POSTDIV1_SHIFT 28
  418. -#define STARFIVE_JH7110_PLL1_POSTDIV1_MASK GENMASK(29, 28)
  419. -#define STARFIVE_JH7110_PLL1_PREDIV_OFFSET 0x2c
  420. -#define STARFIVE_JH7110_PLL1_PREDIV_SHIFT 0
  421. -#define STARFIVE_JH7110_PLL1_PREDIV_MASK GENMASK(5, 0)
  422. -
  423. -#define STARFIVE_JH7110_PLL2_DACPD_OFFSET 0x2c
  424. -#define STARFIVE_JH7110_PLL2_DACPD_SHIFT 15
  425. -#define STARFIVE_JH7110_PLL2_DACPD_MASK BIT(15)
  426. -#define STARFIVE_JH7110_PLL2_DSMPD_OFFSET 0x2c
  427. -#define STARFIVE_JH7110_PLL2_DSMPD_SHIFT 16
  428. -#define STARFIVE_JH7110_PLL2_DSMPD_MASK BIT(16)
  429. -#define STARFIVE_JH7110_PLL2_FBDIV_OFFSET 0x2c
  430. -#define STARFIVE_JH7110_PLL2_FBDIV_SHIFT 17
  431. -#define STARFIVE_JH7110_PLL2_FBDIV_MASK GENMASK(28, 17)
  432. -#define STARFIVE_JH7110_PLL2_FRAC_OFFSET 0x30
  433. -#define STARFIVE_JH7110_PLL2_FRAC_SHIFT 0
  434. -#define STARFIVE_JH7110_PLL2_FRAC_MASK GENMASK(23, 0)
  435. -#define STARFIVE_JH7110_PLL2_POSTDIV1_OFFSET 0x30
  436. -#define STARFIVE_JH7110_PLL2_POSTDIV1_SHIFT 28
  437. -#define STARFIVE_JH7110_PLL2_POSTDIV1_MASK GENMASK(29, 28)
  438. -#define STARFIVE_JH7110_PLL2_PREDIV_OFFSET 0x34
  439. -#define STARFIVE_JH7110_PLL2_PREDIV_SHIFT 0
  440. -#define STARFIVE_JH7110_PLL2_PREDIV_MASK GENMASK(5, 0)
  441. +#define STARFIVE_JH7110_CLK_PLL0_OUT_DACPD_OFFSET 0x18
  442. +#define STARFIVE_JH7110_CLK_PLL0_OUT_DACPD_SHIFT 24
  443. +#define STARFIVE_JH7110_CLK_PLL0_OUT_DACPD_MASK BIT(24)
  444. +#define STARFIVE_JH7110_CLK_PLL0_OUT_DSMPD_OFFSET 0x18
  445. +#define STARFIVE_JH7110_CLK_PLL0_OUT_DSMPD_SHIFT 25
  446. +#define STARFIVE_JH7110_CLK_PLL0_OUT_DSMPD_MASK BIT(25)
  447. +#define STARFIVE_JH7110_CLK_PLL0_OUT_FBDIV_OFFSET 0x1c
  448. +#define STARFIVE_JH7110_CLK_PLL0_OUT_FBDIV_SHIFT 0
  449. +#define STARFIVE_JH7110_CLK_PLL0_OUT_FBDIV_MASK GENMASK(11, 0)
  450. +#define STARFIVE_JH7110_CLK_PLL0_OUT_FRAC_OFFSET 0x20
  451. +#define STARFIVE_JH7110_CLK_PLL0_OUT_FRAC_SHIFT 0
  452. +#define STARFIVE_JH7110_CLK_PLL0_OUT_FRAC_MASK GENMASK(23, 0)
  453. +#define STARFIVE_JH7110_CLK_PLL0_OUT_POSTDIV1_OFFSET 0x20
  454. +#define STARFIVE_JH7110_CLK_PLL0_OUT_POSTDIV1_SHIFT 28
  455. +#define STARFIVE_JH7110_CLK_PLL0_OUT_POSTDIV1_MASK GENMASK(29, 28)
  456. +#define STARFIVE_JH7110_CLK_PLL0_OUT_PREDIV_OFFSET 0x24
  457. +#define STARFIVE_JH7110_CLK_PLL0_OUT_PREDIV_SHIFT 0
  458. +#define STARFIVE_JH7110_CLK_PLL0_OUT_PREDIV_MASK GENMASK(5, 0)
  459. +
  460. +#define STARFIVE_JH7110_CLK_PLL1_OUT_DACPD_OFFSET 0x24
  461. +#define STARFIVE_JH7110_CLK_PLL1_OUT_DACPD_SHIFT 15
  462. +#define STARFIVE_JH7110_CLK_PLL1_OUT_DACPD_MASK BIT(15)
  463. +#define STARFIVE_JH7110_CLK_PLL1_OUT_DSMPD_OFFSET 0x24
  464. +#define STARFIVE_JH7110_CLK_PLL1_OUT_DSMPD_SHIFT 16
  465. +#define STARFIVE_JH7110_CLK_PLL1_OUT_DSMPD_MASK BIT(16)
  466. +#define STARFIVE_JH7110_CLK_PLL1_OUT_FBDIV_OFFSET 0x24
  467. +#define STARFIVE_JH7110_CLK_PLL1_OUT_FBDIV_SHIFT 17
  468. +#define STARFIVE_JH7110_CLK_PLL1_OUT_FBDIV_MASK GENMASK(28, 17)
  469. +#define STARFIVE_JH7110_CLK_PLL1_OUT_FRAC_OFFSET 0x28
  470. +#define STARFIVE_JH7110_CLK_PLL1_OUT_FRAC_SHIFT 0
  471. +#define STARFIVE_JH7110_CLK_PLL1_OUT_FRAC_MASK GENMASK(23, 0)
  472. +#define STARFIVE_JH7110_CLK_PLL1_OUT_POSTDIV1_OFFSET 0x28
  473. +#define STARFIVE_JH7110_CLK_PLL1_OUT_POSTDIV1_SHIFT 28
  474. +#define STARFIVE_JH7110_CLK_PLL1_OUT_POSTDIV1_MASK GENMASK(29, 28)
  475. +#define STARFIVE_JH7110_CLK_PLL1_OUT_PREDIV_OFFSET 0x2c
  476. +#define STARFIVE_JH7110_CLK_PLL1_OUT_PREDIV_SHIFT 0
  477. +#define STARFIVE_JH7110_CLK_PLL1_OUT_PREDIV_MASK GENMASK(5, 0)
  478. +
  479. +#define STARFIVE_JH7110_CLK_PLL2_OUT_DACPD_OFFSET 0x2c
  480. +#define STARFIVE_JH7110_CLK_PLL2_OUT_DACPD_SHIFT 15
  481. +#define STARFIVE_JH7110_CLK_PLL2_OUT_DACPD_MASK BIT(15)
  482. +#define STARFIVE_JH7110_CLK_PLL2_OUT_DSMPD_OFFSET 0x2c
  483. +#define STARFIVE_JH7110_CLK_PLL2_OUT_DSMPD_SHIFT 16
  484. +#define STARFIVE_JH7110_CLK_PLL2_OUT_DSMPD_MASK BIT(16)
  485. +#define STARFIVE_JH7110_CLK_PLL2_OUT_FBDIV_OFFSET 0x2c
  486. +#define STARFIVE_JH7110_CLK_PLL2_OUT_FBDIV_SHIFT 17
  487. +#define STARFIVE_JH7110_CLK_PLL2_OUT_FBDIV_MASK GENMASK(28, 17)
  488. +#define STARFIVE_JH7110_CLK_PLL2_OUT_FRAC_OFFSET 0x30
  489. +#define STARFIVE_JH7110_CLK_PLL2_OUT_FRAC_SHIFT 0
  490. +#define STARFIVE_JH7110_CLK_PLL2_OUT_FRAC_MASK GENMASK(23, 0)
  491. +#define STARFIVE_JH7110_CLK_PLL2_OUT_POSTDIV1_OFFSET 0x30
  492. +#define STARFIVE_JH7110_CLK_PLL2_OUT_POSTDIV1_SHIFT 28
  493. +#define STARFIVE_JH7110_CLK_PLL2_OUT_POSTDIV1_MASK GENMASK(29, 28)
  494. +#define STARFIVE_JH7110_CLK_PLL2_OUT_PREDIV_OFFSET 0x34
  495. +#define STARFIVE_JH7110_CLK_PLL2_OUT_PREDIV_SHIFT 0
  496. +#define STARFIVE_JH7110_CLK_PLL2_OUT_PREDIV_MASK GENMASK(5, 0)
  497. +
  498. +#define JH7110_PLL(_idx, _name, _nums, _val) \
  499. +[_idx] = { \
  500. + .name = _name, \
  501. + .offsets = { \
  502. + .dacpd = STARFIVE_##_idx##_DACPD_OFFSET, \
  503. + .dsmpd = STARFIVE_##_idx##_DSMPD_OFFSET, \
  504. + .fbdiv = STARFIVE_##_idx##_FBDIV_OFFSET, \
  505. + .frac = STARFIVE_##_idx##_FRAC_OFFSET, \
  506. + .prediv = STARFIVE_##_idx##_PREDIV_OFFSET, \
  507. + .postdiv1 = STARFIVE_##_idx##_POSTDIV1_OFFSET, \
  508. + }, \
  509. + .masks = { \
  510. + .dacpd = STARFIVE_##_idx##_DACPD_MASK, \
  511. + .dsmpd = STARFIVE_##_idx##_DSMPD_MASK, \
  512. + .fbdiv = STARFIVE_##_idx##_FBDIV_MASK, \
  513. + .frac = STARFIVE_##_idx##_FRAC_MASK, \
  514. + .prediv = STARFIVE_##_idx##_PREDIV_MASK, \
  515. + .postdiv1 = STARFIVE_##_idx##_POSTDIV1_MASK, \
  516. + }, \
  517. + .shifts = { \
  518. + .dacpd = STARFIVE_##_idx##_DACPD_SHIFT, \
  519. + .dsmpd = STARFIVE_##_idx##_DSMPD_SHIFT, \
  520. + .fbdiv = STARFIVE_##_idx##_FBDIV_SHIFT, \
  521. + .frac = STARFIVE_##_idx##_FRAC_SHIFT, \
  522. + .prediv = STARFIVE_##_idx##_PREDIV_SHIFT, \
  523. + .postdiv1 = STARFIVE_##_idx##_POSTDIV1_SHIFT, \
  524. + }, \
  525. + .preset_val_nums = _nums, \
  526. + .preset_val = _val, \
  527. +}
  528. struct jh7110_pll_syscon_offset {
  529. unsigned int dacpd;
  530. @@ -97,23 +128,7 @@ struct jh7110_pll_syscon_shift {
  531. char postdiv1;
  532. };
  533. -struct jh7110_clk_pll_data {
  534. - struct clk_hw hw;
  535. - unsigned int idx;
  536. - unsigned int freq_select_idx;
  537. -
  538. - struct jh7110_pll_syscon_offset offset;
  539. - struct jh7110_pll_syscon_mask mask;
  540. - struct jh7110_pll_syscon_shift shift;
  541. -};
  542. -
  543. -struct jh7110_clk_pll_priv {
  544. - struct device *dev;
  545. - struct regmap *syscon_regmap;
  546. - struct jh7110_clk_pll_data data[];
  547. -};
  548. -
  549. -struct starfive_pll_syscon_value {
  550. +struct jh7110_pll_syscon_val {
  551. unsigned long freq;
  552. u32 prediv;
  553. u32 fbdiv;
  554. @@ -126,31 +141,54 @@ struct starfive_pll_syscon_value {
  555. u32 frac;
  556. };
  557. -enum starfive_pll0_freq_index {
  558. - PLL0_FREQ_375 = 0,
  559. - PLL0_FREQ_500,
  560. - PLL0_FREQ_625,
  561. - PLL0_FREQ_750,
  562. - PLL0_FREQ_875,
  563. - PLL0_FREQ_1000,
  564. - PLL0_FREQ_1250,
  565. - PLL0_FREQ_1375,
  566. - PLL0_FREQ_1500,
  567. - PLL0_FREQ_MAX
  568. -};
  569. -
  570. -enum starfive_pll1_freq_index {
  571. - PLL1_FREQ_1066 = 0,
  572. - PLL1_FREQ_1200,
  573. - PLL1_FREQ_1400,
  574. - PLL1_FREQ_1600,
  575. - PLL1_FREQ_MAX
  576. -};
  577. -
  578. -enum starfive_pll2_freq_index {
  579. - PLL2_FREQ_1188 = 0,
  580. - PLL2_FREQ_12288,
  581. - PLL2_FREQ_MAX
  582. +struct jh7110_pll_syscon_conf {
  583. + char *name;
  584. + struct jh7110_pll_syscon_offset offsets;
  585. + struct jh7110_pll_syscon_mask masks;
  586. + struct jh7110_pll_syscon_shift shifts;
  587. + unsigned int preset_val_nums;
  588. + const struct jh7110_pll_syscon_val *preset_val;
  589. +};
  590. +
  591. +struct jh7110_clk_pll_data {
  592. + struct clk_hw hw;
  593. + unsigned int idx;
  594. + unsigned int freq_select_idx;
  595. + struct jh7110_pll_syscon_conf conf;
  596. +};
  597. +
  598. +struct jh7110_clk_pll_priv {
  599. + unsigned int pll_nums;
  600. + struct device *dev;
  601. + struct regmap *syscon_regmap;
  602. + struct jh7110_clk_pll_data data[];
  603. +};
  604. +
  605. +enum jh7110_pll0_freq_index {
  606. + JH7110_PLL0_FREQ_375 = 0,
  607. + JH7110_PLL0_FREQ_500,
  608. + JH7110_PLL0_FREQ_625,
  609. + JH7110_PLL0_FREQ_750,
  610. + JH7110_PLL0_FREQ_875,
  611. + JH7110_PLL0_FREQ_1000,
  612. + JH7110_PLL0_FREQ_1250,
  613. + JH7110_PLL0_FREQ_1375,
  614. + JH7110_PLL0_FREQ_1500,
  615. + JH7110_PLL0_FREQ_MAX
  616. +};
  617. +
  618. +enum jh7110_pll1_freq_index {
  619. + JH7110_PLL1_FREQ_1066 = 0,
  620. + JH7110_PLL1_FREQ_1200,
  621. + JH7110_PLL1_FREQ_1400,
  622. + JH7110_PLL1_FREQ_1600,
  623. + JH7110_PLL1_FREQ_MAX
  624. +};
  625. +
  626. +enum jh7110_pll2_freq_index {
  627. + JH7110_PLL2_FREQ_1188 = 0,
  628. + JH7110_PLL2_FREQ_12288,
  629. + JH7110_PLL2_FREQ_MAX
  630. };
  631. /*
  632. @@ -158,9 +196,9 @@ enum starfive_pll2_freq_index {
  633. * it cannot be set arbitrarily, so it needs a specific configuration.
  634. * PLL0 frequency should be multiple of 125MHz (USB frequency).
  635. */
  636. -static const struct starfive_pll_syscon_value
  637. - jh7110_pll0_syscon_freq[PLL0_FREQ_MAX] = {
  638. - [PLL0_FREQ_375] = {
  639. +static const struct jh7110_pll_syscon_val
  640. + jh7110_pll0_syscon_val_preset[] = {
  641. + [JH7110_PLL0_FREQ_375] = {
  642. .freq = 375000000,
  643. .prediv = 8,
  644. .fbdiv = 125,
  645. @@ -168,7 +206,7 @@ static const struct starfive_pll_syscon_
  646. .dacpd = 1,
  647. .dsmpd = 1,
  648. },
  649. - [PLL0_FREQ_500] = {
  650. + [JH7110_PLL0_FREQ_500] = {
  651. .freq = 500000000,
  652. .prediv = 6,
  653. .fbdiv = 125,
  654. @@ -176,7 +214,7 @@ static const struct starfive_pll_syscon_
  655. .dacpd = 1,
  656. .dsmpd = 1,
  657. },
  658. - [PLL0_FREQ_625] = {
  659. + [JH7110_PLL0_FREQ_625] = {
  660. .freq = 625000000,
  661. .prediv = 24,
  662. .fbdiv = 625,
  663. @@ -184,7 +222,7 @@ static const struct starfive_pll_syscon_
  664. .dacpd = 1,
  665. .dsmpd = 1,
  666. },
  667. - [PLL0_FREQ_750] = {
  668. + [JH7110_PLL0_FREQ_750] = {
  669. .freq = 750000000,
  670. .prediv = 4,
  671. .fbdiv = 125,
  672. @@ -192,7 +230,7 @@ static const struct starfive_pll_syscon_
  673. .dacpd = 1,
  674. .dsmpd = 1,
  675. },
  676. - [PLL0_FREQ_875] = {
  677. + [JH7110_PLL0_FREQ_875] = {
  678. .freq = 875000000,
  679. .prediv = 24,
  680. .fbdiv = 875,
  681. @@ -200,7 +238,7 @@ static const struct starfive_pll_syscon_
  682. .dacpd = 1,
  683. .dsmpd = 1,
  684. },
  685. - [PLL0_FREQ_1000] = {
  686. + [JH7110_PLL0_FREQ_1000] = {
  687. .freq = 1000000000,
  688. .prediv = 3,
  689. .fbdiv = 125,
  690. @@ -208,7 +246,7 @@ static const struct starfive_pll_syscon_
  691. .dacpd = 1,
  692. .dsmpd = 1,
  693. },
  694. - [PLL0_FREQ_1250] = {
  695. + [JH7110_PLL0_FREQ_1250] = {
  696. .freq = 1250000000,
  697. .prediv = 12,
  698. .fbdiv = 625,
  699. @@ -216,7 +254,7 @@ static const struct starfive_pll_syscon_
  700. .dacpd = 1,
  701. .dsmpd = 1,
  702. },
  703. - [PLL0_FREQ_1375] = {
  704. + [JH7110_PLL0_FREQ_1375] = {
  705. .freq = 1375000000,
  706. .prediv = 24,
  707. .fbdiv = 1375,
  708. @@ -224,7 +262,7 @@ static const struct starfive_pll_syscon_
  709. .dacpd = 1,
  710. .dsmpd = 1,
  711. },
  712. - [PLL0_FREQ_1500] = {
  713. + [JH7110_PLL0_FREQ_1500] = {
  714. .freq = 1500000000,
  715. .prediv = 2,
  716. .fbdiv = 125,
  717. @@ -234,9 +272,9 @@ static const struct starfive_pll_syscon_
  718. },
  719. };
  720. -static const struct starfive_pll_syscon_value
  721. - jh7110_pll1_syscon_freq[PLL1_FREQ_MAX] = {
  722. - [PLL1_FREQ_1066] = {
  723. +static const struct jh7110_pll_syscon_val
  724. + jh7110_pll1_syscon_val_preset[] = {
  725. + [JH7110_PLL1_FREQ_1066] = {
  726. .freq = 1066000000,
  727. .prediv = 12,
  728. .fbdiv = 533,
  729. @@ -244,7 +282,7 @@ static const struct starfive_pll_syscon_
  730. .dacpd = 1,
  731. .dsmpd = 1,
  732. },
  733. - [PLL1_FREQ_1200] = {
  734. + [JH7110_PLL1_FREQ_1200] = {
  735. .freq = 1200000000,
  736. .prediv = 1,
  737. .fbdiv = 50,
  738. @@ -252,7 +290,7 @@ static const struct starfive_pll_syscon_
  739. .dacpd = 1,
  740. .dsmpd = 1,
  741. },
  742. - [PLL1_FREQ_1400] = {
  743. + [JH7110_PLL1_FREQ_1400] = {
  744. .freq = 1400000000,
  745. .prediv = 6,
  746. .fbdiv = 350,
  747. @@ -260,7 +298,7 @@ static const struct starfive_pll_syscon_
  748. .dacpd = 1,
  749. .dsmpd = 1,
  750. },
  751. - [PLL1_FREQ_1600] = {
  752. + [JH7110_PLL1_FREQ_1600] = {
  753. .freq = 1600000000,
  754. .prediv = 3,
  755. .fbdiv = 200,
  756. @@ -270,9 +308,9 @@ static const struct starfive_pll_syscon_
  757. },
  758. };
  759. -static const struct starfive_pll_syscon_value
  760. - jh7110_pll2_syscon_freq[PLL2_FREQ_MAX] = {
  761. - [PLL2_FREQ_1188] = {
  762. +static const struct jh7110_pll_syscon_val
  763. + jh7110_pll2_syscon_val_preset[] = {
  764. + [JH7110_PLL2_FREQ_1188] = {
  765. .freq = 1188000000,
  766. .prediv = 2,
  767. .fbdiv = 99,
  768. @@ -280,7 +318,7 @@ static const struct starfive_pll_syscon_
  769. .dacpd = 1,
  770. .dsmpd = 1,
  771. },
  772. - [PLL2_FREQ_12288] = {
  773. + [JH7110_PLL2_FREQ_12288] = {
  774. .freq = 1228800000,
  775. .prediv = 5,
  776. .fbdiv = 256,