Merge tag 'clk-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/clk/linux

Pull clk fixes from Stephen Boyd:
"Some more clk driver fixes and one core framework fix:

- A handful of TI driver fixes for bad of_node_put() and incorrect
parent names

- Rockchip rk3228 aclk_gpu* creation was interfering with lima GPU
work so we use a composite clk now

- Resuming from suspend on Tegra Jetson TK1 was broken because an
audio PLL calculated an incorrect rate

- A fix for devicetree probing on IM-PD1 by actually specifying a clk
name which is required to pass clk registration

- Avoid list corruption if registration fails for a critical clk"

* tag 'clk-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/clk/linux:
clk: ti: clkctrl: convert subclocks to use proper names also
clk: ti: am33xx: fix RTC clock parent
clk: ti: clkctrl: Fix Bad of_node_put within clkctrl_get_name
clk: tegra: Fix initial rate for pll_a on Tegra124
clk: impd1: Look up clock-output-names
clk: Unlink clock if failed to prepare or enable
clk: rockchip: fix incorrect configuration of rk3228 aclk_gpu* clocks

Changed files
+58 -66
drivers
+3
drivers/clk/clk.c
··· 3519 3519 out: 3520 3520 clk_pm_runtime_put(core); 3521 3521 unlock: 3522 + if (ret) 3523 + hlist_del_init(&core->child_node); 3524 + 3522 3525 clk_prepare_unlock(); 3523 3526 3524 3527 if (!ret)
+4 -13
drivers/clk/rockchip/clk-rk3228.c
··· 156 156 PNAME(mux_i2s2_p) = { "i2s2_src", "i2s2_frac", "xin12m" }; 157 157 PNAME(mux_sclk_spdif_p) = { "sclk_spdif_src", "spdif_frac", "xin12m" }; 158 158 159 - PNAME(mux_aclk_gpu_pre_p) = { "cpll_gpu", "gpll_gpu", "hdmiphy_gpu", "usb480m_gpu" }; 160 - 161 159 PNAME(mux_uart0_p) = { "uart0_src", "uart0_frac", "xin24m" }; 162 160 PNAME(mux_uart1_p) = { "uart1_src", "uart1_frac", "xin24m" }; 163 161 PNAME(mux_uart2_p) = { "uart2_src", "uart2_frac", "xin24m" }; ··· 466 468 RK2928_CLKSEL_CON(24), 6, 10, DFLAGS, 467 469 RK2928_CLKGATE_CON(2), 8, GFLAGS), 468 470 469 - GATE(0, "cpll_gpu", "cpll", 0, 471 + COMPOSITE(0, "aclk_gpu_pre", mux_pll_src_4plls_p, 0, 472 + RK2928_CLKSEL_CON(34), 5, 2, MFLAGS, 0, 5, DFLAGS, 470 473 RK2928_CLKGATE_CON(3), 13, GFLAGS), 471 - GATE(0, "gpll_gpu", "gpll", 0, 472 - RK2928_CLKGATE_CON(3), 13, GFLAGS), 473 - GATE(0, "hdmiphy_gpu", "hdmiphy", 0, 474 - RK2928_CLKGATE_CON(3), 13, GFLAGS), 475 - GATE(0, "usb480m_gpu", "usb480m", 0, 476 - RK2928_CLKGATE_CON(3), 13, GFLAGS), 477 - COMPOSITE_NOGATE(0, "aclk_gpu_pre", mux_aclk_gpu_pre_p, 0, 478 - RK2928_CLKSEL_CON(34), 5, 2, MFLAGS, 0, 5, DFLAGS), 479 474 480 475 COMPOSITE(SCLK_SPI0, "sclk_spi0", mux_pll_src_2plls_p, 0, 481 476 RK2928_CLKSEL_CON(25), 8, 1, MFLAGS, 0, 7, DFLAGS, ··· 573 582 GATE(0, "pclk_peri_noc", "pclk_peri", CLK_IGNORE_UNUSED, RK2928_CLKGATE_CON(12), 2, GFLAGS), 574 583 575 584 /* PD_GPU */ 576 - GATE(ACLK_GPU, "aclk_gpu", "aclk_gpu_pre", 0, RK2928_CLKGATE_CON(13), 14, GFLAGS), 577 - GATE(0, "aclk_gpu_noc", "aclk_gpu_pre", 0, RK2928_CLKGATE_CON(13), 15, GFLAGS), 585 + GATE(ACLK_GPU, "aclk_gpu", "aclk_gpu_pre", 0, RK2928_CLKGATE_CON(7), 14, GFLAGS), 586 + GATE(0, "aclk_gpu_noc", "aclk_gpu_pre", 0, RK2928_CLKGATE_CON(7), 15, GFLAGS), 578 587 579 588 /* PD_BUS */ 580 589 GATE(0, "sclk_initmem_mbist", "aclk_cpu", 0, RK2928_CLKGATE_CON(8), 1, GFLAGS),
+1 -1
drivers/clk/tegra/clk-tegra124.c
··· 1292 1292 { TEGRA124_CLK_UARTB, TEGRA124_CLK_PLL_P, 408000000, 0 }, 1293 1293 { TEGRA124_CLK_UARTC, TEGRA124_CLK_PLL_P, 408000000, 0 }, 1294 1294 { TEGRA124_CLK_UARTD, TEGRA124_CLK_PLL_P, 408000000, 0 }, 1295 - { TEGRA124_CLK_PLL_A, TEGRA124_CLK_CLK_MAX, 564480000, 0 }, 1295 + { TEGRA124_CLK_PLL_A, TEGRA124_CLK_CLK_MAX, 282240000, 0 }, 1296 1296 { TEGRA124_CLK_PLL_A_OUT0, TEGRA124_CLK_CLK_MAX, 11289600, 0 }, 1297 1297 { TEGRA124_CLK_I2S0, TEGRA124_CLK_PLL_A_OUT0, 11289600, 0 }, 1298 1298 { TEGRA124_CLK_I2S1, TEGRA124_CLK_PLL_A_OUT0, 11289600, 0 },
+1 -1
drivers/clk/ti/clk-33xx.c
··· 212 212 }; 213 213 214 214 static const struct omap_clkctrl_reg_data am3_l4_rtc_clkctrl_regs[] __initconst = { 215 - { AM3_L4_RTC_RTC_CLKCTRL, NULL, CLKF_SW_SUP, "clk_32768_ck" }, 215 + { AM3_L4_RTC_RTC_CLKCTRL, NULL, CLKF_SW_SUP, "clk-24mhz-clkctrl:0000:0" }, 216 216 { 0 }, 217 217 }; 218 218
+48 -51
drivers/clk/ti/clkctrl.c
··· 255 255 return entry->clk; 256 256 } 257 257 258 + /* Get clkctrl clock base name based on clkctrl_name or dts node */ 259 + static const char * __init clkctrl_get_clock_name(struct device_node *np, 260 + const char *clkctrl_name, 261 + int offset, int index, 262 + bool legacy_naming) 263 + { 264 + char *clock_name; 265 + 266 + /* l4per-clkctrl:1234:0 style naming based on clkctrl_name */ 267 + if (clkctrl_name && !legacy_naming) { 268 + clock_name = kasprintf(GFP_KERNEL, "%s-clkctrl:%04x:%d", 269 + clkctrl_name, offset, index); 270 + strreplace(clock_name, '_', '-'); 271 + 272 + return clock_name; 273 + } 274 + 275 + /* l4per:1234:0 old style naming based on clkctrl_name */ 276 + if (clkctrl_name) 277 + return kasprintf(GFP_KERNEL, "%s_cm:clk:%04x:%d", 278 + clkctrl_name, offset, index); 279 + 280 + /* l4per_cm:1234:0 old style naming based on parent node name */ 281 + if (legacy_naming) 282 + return kasprintf(GFP_KERNEL, "%pOFn:clk:%04x:%d", 283 + np->parent, offset, index); 284 + 285 + /* l4per-clkctrl:1234:0 style naming based on node name */ 286 + return kasprintf(GFP_KERNEL, "%pOFn:%04x:%d", np, offset, index); 287 + } 288 + 258 289 static int __init 259 290 _ti_clkctrl_clk_register(struct omap_clkctrl_provider *provider, 260 291 struct device_node *node, struct clk_hw *clk_hw, 261 292 u16 offset, u8 bit, const char * const *parents, 262 - int num_parents, const struct clk_ops *ops) 293 + int num_parents, const struct clk_ops *ops, 294 + const char *clkctrl_name) 263 295 { 264 296 struct clk_init_data init = { NULL }; 265 297 struct clk *clk; 266 298 struct omap_clkctrl_clk *clkctrl_clk; 267 299 int ret = 0; 268 300 269 - if (ti_clk_get_features()->flags & TI_CLK_CLKCTRL_COMPAT) 270 - init.name = kasprintf(GFP_KERNEL, "%pOFn:%pOFn:%04x:%d", 271 - node->parent, node, offset, 272 - bit); 273 - else 274 - init.name = kasprintf(GFP_KERNEL, "%pOFn:%04x:%d", node, 275 - offset, bit); 301 + init.name = clkctrl_get_clock_name(node, clkctrl_name, offset, bit, 302 + ti_clk_get_features()->flags & 303 + TI_CLK_CLKCTRL_COMPAT); 304 + 276 305 clkctrl_clk = kzalloc(sizeof(*clkctrl_clk), GFP_KERNEL); 277 306 if (!init.name || !clkctrl_clk) { 278 307 ret = -ENOMEM; ··· 338 309 _ti_clkctrl_setup_gate(struct omap_clkctrl_provider *provider, 339 310 struct device_node *node, u16 offset, 340 311 const struct omap_clkctrl_bit_data *data, 341 - void __iomem *reg) 312 + void __iomem *reg, const char *clkctrl_name) 342 313 { 343 314 struct clk_hw_omap *clk_hw; 344 315 ··· 351 322 352 323 if (_ti_clkctrl_clk_register(provider, node, &clk_hw->hw, offset, 353 324 data->bit, data->parents, 1, 354 - &omap_gate_clk_ops)) 325 + &omap_gate_clk_ops, clkctrl_name)) 355 326 kfree(clk_hw); 356 327 } 357 328 ··· 359 330 _ti_clkctrl_setup_mux(struct omap_clkctrl_provider *provider, 360 331 struct device_node *node, u16 offset, 361 332 const struct omap_clkctrl_bit_data *data, 362 - void __iomem *reg) 333 + void __iomem *reg, const char *clkctrl_name) 363 334 { 364 335 struct clk_omap_mux *mux; 365 336 int num_parents = 0; ··· 386 357 387 358 if (_ti_clkctrl_clk_register(provider, node, &mux->hw, offset, 388 359 data->bit, data->parents, num_parents, 389 - &ti_clk_mux_ops)) 360 + &ti_clk_mux_ops, clkctrl_name)) 390 361 kfree(mux); 391 362 } 392 363 ··· 394 365 _ti_clkctrl_setup_div(struct omap_clkctrl_provider *provider, 395 366 struct device_node *node, u16 offset, 396 367 const struct omap_clkctrl_bit_data *data, 397 - void __iomem *reg) 368 + void __iomem *reg, const char *clkctrl_name) 398 369 { 399 370 struct clk_omap_divider *div; 400 371 const struct omap_clkctrl_div_data *div_data = data->data; ··· 422 393 423 394 if (_ti_clkctrl_clk_register(provider, node, &div->hw, offset, 424 395 data->bit, data->parents, 1, 425 - &ti_clk_divider_ops)) 396 + &ti_clk_divider_ops, clkctrl_name)) 426 397 kfree(div); 427 398 } 428 399 ··· 430 401 _ti_clkctrl_setup_subclks(struct omap_clkctrl_provider *provider, 431 402 struct device_node *node, 432 403 const struct omap_clkctrl_reg_data *data, 433 - void __iomem *reg) 404 + void __iomem *reg, const char *clkctrl_name) 434 405 { 435 406 const struct omap_clkctrl_bit_data *bits = data->bit_data; 436 407 ··· 441 412 switch (bits->type) { 442 413 case TI_CLK_GATE: 443 414 _ti_clkctrl_setup_gate(provider, node, data->offset, 444 - bits, reg); 415 + bits, reg, clkctrl_name); 445 416 break; 446 417 447 418 case TI_CLK_DIVIDER: 448 419 _ti_clkctrl_setup_div(provider, node, data->offset, 449 - bits, reg); 420 + bits, reg, clkctrl_name); 450 421 break; 451 422 452 423 case TI_CLK_MUX: 453 424 _ti_clkctrl_setup_mux(provider, node, data->offset, 454 - bits, reg); 425 + bits, reg, clkctrl_name); 455 426 break; 456 427 457 428 default: ··· 490 461 return name; 491 462 } 492 463 } 493 - of_node_put(np); 494 464 495 465 return NULL; 496 - } 497 - 498 - /* Get clkctrl clock base name based on clkctrl_name or dts node */ 499 - static const char * __init clkctrl_get_clock_name(struct device_node *np, 500 - const char *clkctrl_name, 501 - int offset, int index, 502 - bool legacy_naming) 503 - { 504 - char *clock_name; 505 - 506 - /* l4per-clkctrl:1234:0 style naming based on clkctrl_name */ 507 - if (clkctrl_name && !legacy_naming) { 508 - clock_name = kasprintf(GFP_KERNEL, "%s-clkctrl:%04x:%d", 509 - clkctrl_name, offset, index); 510 - strreplace(clock_name, '_', '-'); 511 - 512 - return clock_name; 513 - } 514 - 515 - /* l4per:1234:0 old style naming based on clkctrl_name */ 516 - if (clkctrl_name) 517 - return kasprintf(GFP_KERNEL, "%s_cm:clk:%04x:%d", 518 - clkctrl_name, offset, index); 519 - 520 - /* l4per_cm:1234:0 old style naming based on parent node name */ 521 - if (legacy_naming) 522 - return kasprintf(GFP_KERNEL, "%pOFn:clk:%04x:%d", 523 - np->parent, offset, index); 524 - 525 - /* l4per-clkctrl:1234:0 style naming based on node name */ 526 - return kasprintf(GFP_KERNEL, "%pOFn:%04x:%d", np, offset, index); 527 466 } 528 467 529 468 static void __init _ti_omap4_clkctrl_setup(struct device_node *node) ··· 661 664 hw->enable_reg.ptr = provider->base + reg_data->offset; 662 665 663 666 _ti_clkctrl_setup_subclks(provider, node, reg_data, 664 - hw->enable_reg.ptr); 667 + hw->enable_reg.ptr, clkctrl_name); 665 668 666 669 if (reg_data->flags & CLKF_SW_SUP) 667 670 hw->enable_bit = MODULEMODE_SWCTRL;
+1
drivers/clk/versatile/clk-impd1.c
··· 206 206 return -ENODEV; 207 207 } 208 208 209 + of_property_read_string(np, "clock-output-names", &name); 209 210 parent_name = of_clk_get_parent_name(np, 0); 210 211 clk = icst_clk_setup(NULL, desc, name, parent_name, map, 211 212 ICST_INTEGRATOR_IM_PD1);