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

clk: berlin: Migrate to clk_hw based registration and OF APIs

Now that we have clk_hw based provider APIs to register clks, we
can get rid of struct clk pointers while registering clks in
these drivers, allowing us to move closer to a clear split of
consumer and provider clk APIs. We also remove some __init
markings in header files as they're useless and we're in the
area.

Tested-by: Jisheng Zhang <jszhang@marvell.com>
Cc: Alexandre Belloni <alexandre.belloni@free-electrons.com>
Acked-by: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
Signed-off-by: Stephen Boyd <stephen.boyd@linaro.org>
Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>

authored by

Stephen Boyd and committed by
Stephen Boyd
f6475e29 57c4a2ac

+92 -88
+6 -6
drivers/clk/berlin/berlin2-avpll.c
··· 188 188 .recalc_rate = berlin2_avpll_vco_recalc_rate, 189 189 }; 190 190 191 - struct clk * __init berlin2_avpll_vco_register(void __iomem *base, 191 + int __init berlin2_avpll_vco_register(void __iomem *base, 192 192 const char *name, const char *parent_name, 193 193 u8 vco_flags, unsigned long flags) 194 194 { ··· 197 197 198 198 vco = kzalloc(sizeof(*vco), GFP_KERNEL); 199 199 if (!vco) 200 - return ERR_PTR(-ENOMEM); 200 + return -ENOMEM; 201 201 202 202 vco->base = base; 203 203 vco->flags = vco_flags; ··· 208 208 init.num_parents = 1; 209 209 init.flags = flags; 210 210 211 - return clk_register(NULL, &vco->hw); 211 + return clk_hw_register(NULL, &vco->hw); 212 212 } 213 213 214 214 struct berlin2_avpll_channel { ··· 364 364 */ 365 365 static const u8 quirk_index[] __initconst = { 0, 6, 5, 4, 3, 2, 1, 7 }; 366 366 367 - struct clk * __init berlin2_avpll_channel_register(void __iomem *base, 367 + int __init berlin2_avpll_channel_register(void __iomem *base, 368 368 const char *name, u8 index, const char *parent_name, 369 369 u8 ch_flags, unsigned long flags) 370 370 { ··· 373 373 374 374 ch = kzalloc(sizeof(*ch), GFP_KERNEL); 375 375 if (!ch) 376 - return ERR_PTR(-ENOMEM); 376 + return -ENOMEM; 377 377 378 378 ch->base = base; 379 379 if (ch_flags & BERLIN2_AVPLL_SCRAMBLE_QUIRK) ··· 389 389 init.num_parents = 1; 390 390 init.flags = flags; 391 391 392 - return clk_register(NULL, &ch->hw); 392 + return clk_hw_register(NULL, &ch->hw); 393 393 }
+2 -6
drivers/clk/berlin/berlin2-avpll.h
··· 19 19 #ifndef __BERLIN2_AVPLL_H 20 20 #define __BERLIN2_AVPLL_H 21 21 22 - struct clk; 23 - 24 22 #define BERLIN2_AVPLL_BIT_QUIRK BIT(0) 25 23 #define BERLIN2_AVPLL_SCRAMBLE_QUIRK BIT(1) 26 24 27 - struct clk * __init 28 - berlin2_avpll_vco_register(void __iomem *base, const char *name, 25 + int berlin2_avpll_vco_register(void __iomem *base, const char *name, 29 26 const char *parent_name, u8 vco_flags, unsigned long flags); 30 27 31 - struct clk * __init 32 - berlin2_avpll_channel_register(void __iomem *base, const char *name, 28 + int berlin2_avpll_channel_register(void __iomem *base, const char *name, 33 29 u8 index, const char *parent_name, u8 ch_flags, 34 30 unsigned long flags); 35 31
+2 -2
drivers/clk/berlin/berlin2-div.c
··· 234 234 .get_parent = berlin2_div_get_parent, 235 235 }; 236 236 237 - struct clk * __init 237 + struct clk_hw * __init 238 238 berlin2_div_register(const struct berlin2_div_map *map, 239 239 void __iomem *base, const char *name, u8 div_flags, 240 240 const char **parent_names, int num_parents, ··· 259 259 if ((div_flags & BERLIN2_DIV_HAS_MUX) == 0) 260 260 mux_ops = NULL; 261 261 262 - return clk_register_composite(NULL, name, parent_names, num_parents, 262 + return clk_hw_register_composite(NULL, name, parent_names, num_parents, 263 263 &div->hw, mux_ops, &div->hw, rate_ops, 264 264 &div->hw, gate_ops, flags); 265 265 }
+2 -2
drivers/clk/berlin/berlin2-div.h
··· 19 19 #ifndef __BERLIN2_DIV_H 20 20 #define __BERLIN2_DIV_H 21 21 22 - struct clk; 22 + struct clk_hw; 23 23 24 24 #define BERLIN2_DIV_HAS_GATE BIT(0) 25 25 #define BERLIN2_DIV_HAS_MUX BIT(1) ··· 80 80 u8 div_flags; 81 81 }; 82 82 83 - struct clk * __init 83 + struct clk_hw * 84 84 berlin2_div_register(const struct berlin2_div_map *map, 85 85 void __iomem *base, const char *name, u8 div_flags, 86 86 const char **parent_names, int num_parents,
+3 -3
drivers/clk/berlin/berlin2-pll.c
··· 84 84 .recalc_rate = berlin2_pll_recalc_rate, 85 85 }; 86 86 87 - struct clk * __init 87 + int __init 88 88 berlin2_pll_register(const struct berlin2_pll_map *map, 89 89 void __iomem *base, const char *name, 90 90 const char *parent_name, unsigned long flags) ··· 94 94 95 95 pll = kzalloc(sizeof(*pll), GFP_KERNEL); 96 96 if (!pll) 97 - return ERR_PTR(-ENOMEM); 97 + return -ENOMEM; 98 98 99 99 /* copy pll_map to allow __initconst */ 100 100 memcpy(&pll->map, map, sizeof(*map)); ··· 106 106 init.num_parents = 1; 107 107 init.flags = flags; 108 108 109 - return clk_register(NULL, &pll->hw); 109 + return clk_hw_register(NULL, &pll->hw); 110 110 }
+3 -6
drivers/clk/berlin/berlin2-pll.h
··· 19 19 #ifndef __BERLIN2_PLL_H 20 20 #define __BERLIN2_PLL_H 21 21 22 - struct clk; 23 - 24 22 struct berlin2_pll_map { 25 23 const u8 vcodiv[16]; 26 24 u8 mult; ··· 27 29 u8 divsel_shift; 28 30 }; 29 31 30 - struct clk * __init 31 - berlin2_pll_register(const struct berlin2_pll_map *map, 32 - void __iomem *base, const char *name, 33 - const char *parent_name, unsigned long flags); 32 + int berlin2_pll_register(const struct berlin2_pll_map *map, 33 + void __iomem *base, const char *name, 34 + const char *parent_name, unsigned long flags); 34 35 35 36 #endif /* __BERLIN2_PLL_H */
+52 -46
drivers/clk/berlin/bg2.c
··· 92 92 */ 93 93 94 94 #define MAX_CLKS 41 95 - static struct clk *clks[MAX_CLKS]; 96 - static struct clk_onecell_data clk_data; 95 + static struct clk_hw_onecell_data *clk_data; 97 96 static DEFINE_SPINLOCK(lock); 98 97 static void __iomem *gbase; 99 98 ··· 504 505 struct device_node *parent_np = of_get_parent(np); 505 506 const char *parent_names[9]; 506 507 struct clk *clk; 508 + struct clk_hw *hw; 509 + struct clk_hw **hws; 507 510 u8 avpll_flags = 0; 508 - int n; 511 + int n, ret; 512 + 513 + clk_data = kzalloc(sizeof(*clk_data) + 514 + sizeof(*clk_data->hws) * MAX_CLKS, GFP_KERNEL); 515 + if (!clk_data) 516 + return; 517 + clk_data->num = MAX_CLKS; 518 + hws = clk_data->hws; 509 519 510 520 gbase = of_iomap(parent_np, 0); 511 521 if (!gbase) ··· 534 526 } 535 527 536 528 /* simple register PLLs */ 537 - clk = berlin2_pll_register(&bg2_pll_map, gbase + REG_SYSPLLCTL0, 529 + ret = berlin2_pll_register(&bg2_pll_map, gbase + REG_SYSPLLCTL0, 538 530 clk_names[SYSPLL], clk_names[REFCLK], 0); 539 - if (IS_ERR(clk)) 531 + if (ret) 540 532 goto bg2_fail; 541 533 542 - clk = berlin2_pll_register(&bg2_pll_map, gbase + REG_MEMPLLCTL0, 534 + ret = berlin2_pll_register(&bg2_pll_map, gbase + REG_MEMPLLCTL0, 543 535 clk_names[MEMPLL], clk_names[REFCLK], 0); 544 - if (IS_ERR(clk)) 536 + if (ret) 545 537 goto bg2_fail; 546 538 547 - clk = berlin2_pll_register(&bg2_pll_map, gbase + REG_CPUPLLCTL0, 539 + ret = berlin2_pll_register(&bg2_pll_map, gbase + REG_CPUPLLCTL0, 548 540 clk_names[CPUPLL], clk_names[REFCLK], 0); 549 - if (IS_ERR(clk)) 541 + if (ret) 550 542 goto bg2_fail; 551 543 552 544 if (of_device_is_compatible(np, "marvell,berlin2-global-register")) 553 545 avpll_flags |= BERLIN2_AVPLL_SCRAMBLE_QUIRK; 554 546 555 547 /* audio/video VCOs */ 556 - clk = berlin2_avpll_vco_register(gbase + REG_AVPLLCTL0, "avpll_vcoA", 548 + ret = berlin2_avpll_vco_register(gbase + REG_AVPLLCTL0, "avpll_vcoA", 557 549 clk_names[REFCLK], avpll_flags, 0); 558 - if (IS_ERR(clk)) 550 + if (ret) 559 551 goto bg2_fail; 560 552 561 553 for (n = 0; n < 8; n++) { 562 - clk = berlin2_avpll_channel_register(gbase + REG_AVPLLCTL0, 554 + ret = berlin2_avpll_channel_register(gbase + REG_AVPLLCTL0, 563 555 clk_names[AVPLL_A1 + n], n, "avpll_vcoA", 564 556 avpll_flags, 0); 565 - if (IS_ERR(clk)) 557 + if (ret) 566 558 goto bg2_fail; 567 559 } 568 560 569 - clk = berlin2_avpll_vco_register(gbase + REG_AVPLLCTL31, "avpll_vcoB", 561 + ret = berlin2_avpll_vco_register(gbase + REG_AVPLLCTL31, "avpll_vcoB", 570 562 clk_names[REFCLK], BERLIN2_AVPLL_BIT_QUIRK | 571 563 avpll_flags, 0); 572 - if (IS_ERR(clk)) 564 + if (ret) 573 565 goto bg2_fail; 574 566 575 567 for (n = 0; n < 8; n++) { 576 - clk = berlin2_avpll_channel_register(gbase + REG_AVPLLCTL31, 568 + ret = berlin2_avpll_channel_register(gbase + REG_AVPLLCTL31, 577 569 clk_names[AVPLL_B1 + n], n, "avpll_vcoB", 578 570 BERLIN2_AVPLL_BIT_QUIRK | avpll_flags, 0); 579 - if (IS_ERR(clk)) 571 + if (ret) 580 572 goto bg2_fail; 581 573 } 582 574 583 575 /* reference clock bypass switches */ 584 576 parent_names[0] = clk_names[SYSPLL]; 585 577 parent_names[1] = clk_names[REFCLK]; 586 - clk = clk_register_mux(NULL, "syspll_byp", parent_names, 2, 578 + hw = clk_hw_register_mux(NULL, "syspll_byp", parent_names, 2, 587 579 0, gbase + REG_CLKSWITCH0, 0, 1, 0, &lock); 588 - if (IS_ERR(clk)) 580 + if (IS_ERR(hw)) 589 581 goto bg2_fail; 590 - clk_names[SYSPLL] = __clk_get_name(clk); 582 + clk_names[SYSPLL] = clk_hw_get_name(hw); 591 583 592 584 parent_names[0] = clk_names[MEMPLL]; 593 585 parent_names[1] = clk_names[REFCLK]; 594 - clk = clk_register_mux(NULL, "mempll_byp", parent_names, 2, 586 + hw = clk_hw_register_mux(NULL, "mempll_byp", parent_names, 2, 595 587 0, gbase + REG_CLKSWITCH0, 1, 1, 0, &lock); 596 - if (IS_ERR(clk)) 588 + if (IS_ERR(hw)) 597 589 goto bg2_fail; 598 - clk_names[MEMPLL] = __clk_get_name(clk); 590 + clk_names[MEMPLL] = clk_hw_get_name(hw); 599 591 600 592 parent_names[0] = clk_names[CPUPLL]; 601 593 parent_names[1] = clk_names[REFCLK]; 602 - clk = clk_register_mux(NULL, "cpupll_byp", parent_names, 2, 594 + hw = clk_hw_register_mux(NULL, "cpupll_byp", parent_names, 2, 603 595 0, gbase + REG_CLKSWITCH0, 2, 1, 0, &lock); 604 - if (IS_ERR(clk)) 596 + if (IS_ERR(hw)) 605 597 goto bg2_fail; 606 - clk_names[CPUPLL] = __clk_get_name(clk); 598 + clk_names[CPUPLL] = clk_hw_get_name(hw); 607 599 608 600 /* clock muxes */ 609 601 parent_names[0] = clk_names[AVPLL_B3]; 610 602 parent_names[1] = clk_names[AVPLL_A3]; 611 - clk = clk_register_mux(NULL, clk_names[AUDIO1_PLL], parent_names, 2, 603 + hw = clk_hw_register_mux(NULL, clk_names[AUDIO1_PLL], parent_names, 2, 612 604 0, gbase + REG_CLKSELECT2, 29, 1, 0, &lock); 613 - if (IS_ERR(clk)) 605 + if (IS_ERR(hw)) 614 606 goto bg2_fail; 615 607 616 608 parent_names[0] = clk_names[VIDEO0_PLL]; 617 609 parent_names[1] = clk_names[VIDEO_EXT0]; 618 - clk = clk_register_mux(NULL, clk_names[VIDEO0_IN], parent_names, 2, 610 + hw = clk_hw_register_mux(NULL, clk_names[VIDEO0_IN], parent_names, 2, 619 611 0, gbase + REG_CLKSELECT3, 4, 1, 0, &lock); 620 - if (IS_ERR(clk)) 612 + if (IS_ERR(hw)) 621 613 goto bg2_fail; 622 614 623 615 parent_names[0] = clk_names[VIDEO1_PLL]; 624 616 parent_names[1] = clk_names[VIDEO_EXT0]; 625 - clk = clk_register_mux(NULL, clk_names[VIDEO1_IN], parent_names, 2, 617 + hw = clk_hw_register_mux(NULL, clk_names[VIDEO1_IN], parent_names, 2, 626 618 0, gbase + REG_CLKSELECT3, 6, 1, 0, &lock); 627 - if (IS_ERR(clk)) 619 + if (IS_ERR(hw)) 628 620 goto bg2_fail; 629 621 630 622 parent_names[0] = clk_names[AVPLL_A2]; 631 623 parent_names[1] = clk_names[AVPLL_B2]; 632 - clk = clk_register_mux(NULL, clk_names[VIDEO1_PLL], parent_names, 2, 624 + hw = clk_hw_register_mux(NULL, clk_names[VIDEO1_PLL], parent_names, 2, 633 625 0, gbase + REG_CLKSELECT3, 7, 1, 0, &lock); 634 - if (IS_ERR(clk)) 626 + if (IS_ERR(hw)) 635 627 goto bg2_fail; 636 628 637 629 parent_names[0] = clk_names[VIDEO2_PLL]; 638 630 parent_names[1] = clk_names[VIDEO_EXT0]; 639 - clk = clk_register_mux(NULL, clk_names[VIDEO2_IN], parent_names, 2, 631 + hw = clk_hw_register_mux(NULL, clk_names[VIDEO2_IN], parent_names, 2, 640 632 0, gbase + REG_CLKSELECT3, 9, 1, 0, &lock); 641 - if (IS_ERR(clk)) 633 + if (IS_ERR(hw)) 642 634 goto bg2_fail; 643 635 644 636 parent_names[0] = clk_names[AVPLL_B1]; 645 637 parent_names[1] = clk_names[AVPLL_A5]; 646 - clk = clk_register_mux(NULL, clk_names[VIDEO2_PLL], parent_names, 2, 638 + hw = clk_hw_register_mux(NULL, clk_names[VIDEO2_PLL], parent_names, 2, 647 639 0, gbase + REG_CLKSELECT3, 10, 1, 0, &lock); 648 - if (IS_ERR(clk)) 640 + if (IS_ERR(hw)) 649 641 goto bg2_fail; 650 642 651 643 /* clock divider cells */ ··· 656 648 for (k = 0; k < dd->num_parents; k++) 657 649 parent_names[k] = clk_names[dd->parent_ids[k]]; 658 650 659 - clks[CLKID_SYS + n] = berlin2_div_register(&dd->map, gbase, 651 + hws[CLKID_SYS + n] = berlin2_div_register(&dd->map, gbase, 660 652 dd->name, dd->div_flags, parent_names, 661 653 dd->num_parents, dd->flags, &lock); 662 654 } ··· 665 657 for (n = 0; n < ARRAY_SIZE(bg2_gates); n++) { 666 658 const struct berlin2_gate_data *gd = &bg2_gates[n]; 667 659 668 - clks[CLKID_GETH0 + n] = clk_register_gate(NULL, gd->name, 660 + hws[CLKID_GETH0 + n] = clk_hw_register_gate(NULL, gd->name, 669 661 gd->parent_name, gd->flags, gbase + REG_CLKENABLE, 670 662 gd->bit_idx, 0, &lock); 671 663 } 672 664 673 665 /* twdclk is derived from cpu/3 */ 674 - clks[CLKID_TWD] = 675 - clk_register_fixed_factor(NULL, "twd", "cpu", 0, 1, 3); 666 + hws[CLKID_TWD] = 667 + clk_hw_register_fixed_factor(NULL, "twd", "cpu", 0, 1, 3); 676 668 677 669 /* check for errors on leaf clocks */ 678 670 for (n = 0; n < MAX_CLKS; n++) { 679 - if (!IS_ERR(clks[n])) 671 + if (!IS_ERR(hws[n])) 680 672 continue; 681 673 682 674 pr_err("%s: Unable to register leaf clock %d\n", ··· 685 677 } 686 678 687 679 /* register clk-provider */ 688 - clk_data.clks = clks; 689 - clk_data.clk_num = MAX_CLKS; 690 - of_clk_add_provider(np, of_clk_src_onecell_get, &clk_data); 680 + of_clk_add_hw_provider(np, of_clk_hw_onecell_get, &clk_data); 691 681 692 682 return; 693 683
+22 -17
drivers/clk/berlin/bg2q.c
··· 46 46 #define REG_SDIO1XIN_CLKCTL 0x015c 47 47 48 48 #define MAX_CLKS 28 49 - static struct clk *clks[MAX_CLKS]; 50 - static struct clk_onecell_data clk_data; 49 + static struct clk_hw_onecell_data *clk_data; 51 50 static DEFINE_SPINLOCK(lock); 52 51 static void __iomem *gbase; 53 52 static void __iomem *cpupll_base; ··· 292 293 struct device_node *parent_np = of_get_parent(np); 293 294 const char *parent_names[9]; 294 295 struct clk *clk; 295 - int n; 296 + struct clk_hw **hws; 297 + int n, ret; 298 + 299 + clk_data = kzalloc(sizeof(*clk_data) + 300 + sizeof(*clk_data->hws) * MAX_CLKS, GFP_KERNEL); 301 + if (!clk_data) 302 + return; 303 + clk_data->num = MAX_CLKS; 304 + hws = clk_data->hws; 296 305 297 306 gbase = of_iomap(parent_np, 0); 298 307 if (!gbase) { ··· 324 317 } 325 318 326 319 /* simple register PLLs */ 327 - clk = berlin2_pll_register(&bg2q_pll_map, gbase + REG_SYSPLLCTL0, 320 + ret = berlin2_pll_register(&bg2q_pll_map, gbase + REG_SYSPLLCTL0, 328 321 clk_names[SYSPLL], clk_names[REFCLK], 0); 329 - if (IS_ERR(clk)) 322 + if (ret) 330 323 goto bg2q_fail; 331 324 332 - clk = berlin2_pll_register(&bg2q_pll_map, cpupll_base, 325 + ret = berlin2_pll_register(&bg2q_pll_map, cpupll_base, 333 326 clk_names[CPUPLL], clk_names[REFCLK], 0); 334 - if (IS_ERR(clk)) 327 + if (ret) 335 328 goto bg2q_fail; 336 329 337 330 /* TODO: add BG2Q AVPLL */ ··· 349 342 for (k = 0; k < dd->num_parents; k++) 350 343 parent_names[k] = clk_names[dd->parent_ids[k]]; 351 344 352 - clks[CLKID_SYS + n] = berlin2_div_register(&dd->map, gbase, 345 + hws[CLKID_SYS + n] = berlin2_div_register(&dd->map, gbase, 353 346 dd->name, dd->div_flags, parent_names, 354 347 dd->num_parents, dd->flags, &lock); 355 348 } ··· 358 351 for (n = 0; n < ARRAY_SIZE(bg2q_gates); n++) { 359 352 const struct berlin2_gate_data *gd = &bg2q_gates[n]; 360 353 361 - clks[CLKID_GFX2DAXI + n] = clk_register_gate(NULL, gd->name, 354 + hws[CLKID_GFX2DAXI + n] = clk_hw_register_gate(NULL, gd->name, 362 355 gd->parent_name, gd->flags, gbase + REG_CLKENABLE, 363 356 gd->bit_idx, 0, &lock); 364 357 } 365 358 366 359 /* cpuclk divider is fixed to 1 */ 367 - clks[CLKID_CPU] = 368 - clk_register_fixed_factor(NULL, "cpu", clk_names[CPUPLL], 360 + hws[CLKID_CPU] = 361 + clk_hw_register_fixed_factor(NULL, "cpu", clk_names[CPUPLL], 369 362 0, 1, 1); 370 363 /* twdclk is derived from cpu/3 */ 371 - clks[CLKID_TWD] = 372 - clk_register_fixed_factor(NULL, "twd", "cpu", 0, 1, 3); 364 + hws[CLKID_TWD] = 365 + clk_hw_register_fixed_factor(NULL, "twd", "cpu", 0, 1, 3); 373 366 374 367 /* check for errors on leaf clocks */ 375 368 for (n = 0; n < MAX_CLKS; n++) { 376 - if (!IS_ERR(clks[n])) 369 + if (!IS_ERR(hws[n])) 377 370 continue; 378 371 379 372 pr_err("%s: Unable to register leaf clock %d\n", ··· 382 375 } 383 376 384 377 /* register clk-provider */ 385 - clk_data.clks = clks; 386 - clk_data.clk_num = MAX_CLKS; 387 - of_clk_add_provider(np, of_clk_src_onecell_get, &clk_data); 378 + of_clk_add_hw_provider(np, of_clk_hw_onecell_get, &clk_data); 388 379 389 380 return; 390 381