diff options
| author | Tomasz Figa <t.figa@samsung.com> | 2014-06-24 12:08:24 -0400 |
|---|---|---|
| committer | Tomasz Figa <t.figa@samsung.com> | 2014-07-25 20:42:36 -0400 |
| commit | 800c9797ad5b20edf3b9258b83624efdb2b06e02 (patch) | |
| tree | fe0005f4f52ca63cbac020d0106434523974c647 | |
| parent | 17d3f1d27ce2fd377ddb03531b87dd9e96e01b34 (diff) | |
clk: samsung: exynos4: Add missing CPU/DMC clock hierarchy
This patch adds missing definitions of clocks from CPU and DMC clock
domains, which are necessary to properly represent CLKOUT clock hierarchy
added in further patch.
Signed-off-by: Tomasz Figa <t.figa@samsung.com>
| -rw-r--r-- | drivers/clk/samsung/clk-exynos4.c | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/drivers/clk/samsung/clk-exynos4.c b/drivers/clk/samsung/clk-exynos4.c index 75573a4c9674..70bca8d81de6 100644 --- a/drivers/clk/samsung/clk-exynos4.c +++ b/drivers/clk/samsung/clk-exynos4.c | |||
| @@ -397,10 +397,15 @@ PNAME(mout_audio2_p4210) = { "cdclk2", "none", "sclk_hdmi24m", | |||
| 397 | "sclk_epll", "sclk_vpll", }; | 397 | "sclk_epll", "sclk_vpll", }; |
| 398 | PNAME(mout_mixer_p4210) = { "sclk_dac", "sclk_hdmi", }; | 398 | PNAME(mout_mixer_p4210) = { "sclk_dac", "sclk_hdmi", }; |
| 399 | PNAME(mout_dac_p4210) = { "sclk_vpll", "sclk_hdmiphy", }; | 399 | PNAME(mout_dac_p4210) = { "sclk_vpll", "sclk_hdmiphy", }; |
| 400 | PNAME(mout_pwi_p4210) = { "xxti", "xusbxti", "sclk_hdmi24m", "sclk_usbphy0", | ||
| 401 | "sclk_usbphy1", "sclk_hdmiphy", "none", | ||
| 402 | "sclk_epll", "sclk_vpll" }; | ||
| 400 | 403 | ||
| 401 | /* Exynos 4x12-specific parent groups */ | 404 | /* Exynos 4x12-specific parent groups */ |
| 402 | PNAME(mout_mpll_user_p4x12) = { "fin_pll", "sclk_mpll", }; | 405 | PNAME(mout_mpll_user_p4x12) = { "fin_pll", "sclk_mpll", }; |
| 403 | PNAME(mout_core_p4x12) = { "mout_apll", "mout_mpll_user_c", }; | 406 | PNAME(mout_core_p4x12) = { "mout_apll", "mout_mpll_user_c", }; |
| 407 | PNAME(mout_gdl_p4x12) = { "mout_mpll_user_l", "sclk_apll", }; | ||
| 408 | PNAME(mout_gdr_p4x12) = { "mout_mpll_user_r", "sclk_apll", }; | ||
| 404 | PNAME(sclk_ampll_p4x12) = { "mout_mpll_user_t", "sclk_apll", }; | 409 | PNAME(sclk_ampll_p4x12) = { "mout_mpll_user_t", "sclk_apll", }; |
| 405 | PNAME(group1_p4x12) = { "xxti", "xusbxti", "sclk_hdmi24m", "sclk_usbphy0", | 410 | PNAME(group1_p4x12) = { "xxti", "xusbxti", "sclk_hdmi24m", "sclk_usbphy0", |
| 406 | "none", "sclk_hdmiphy", "mout_mpll_user_t", | 411 | "none", "sclk_hdmiphy", "mout_mpll_user_t", |
| @@ -418,6 +423,9 @@ PNAME(aclk_p4412) = { "mout_mpll_user_t", "sclk_apll", }; | |||
| 418 | PNAME(mout_user_aclk400_mcuisp_p4x12) = {"fin_pll", "div_aclk400_mcuisp", }; | 423 | PNAME(mout_user_aclk400_mcuisp_p4x12) = {"fin_pll", "div_aclk400_mcuisp", }; |
| 419 | PNAME(mout_user_aclk200_p4x12) = {"fin_pll", "div_aclk200", }; | 424 | PNAME(mout_user_aclk200_p4x12) = {"fin_pll", "div_aclk200", }; |
| 420 | PNAME(mout_user_aclk266_gps_p4x12) = {"fin_pll", "div_aclk266_gps", }; | 425 | PNAME(mout_user_aclk266_gps_p4x12) = {"fin_pll", "div_aclk266_gps", }; |
| 426 | PNAME(mout_pwi_p4x12) = { "xxti", "xusbxti", "sclk_hdmi24m", "sclk_usbphy0", | ||
| 427 | "none", "sclk_hdmiphy", "sclk_mpll", | ||
| 428 | "sclk_epll", "sclk_vpll" }; | ||
| 421 | 429 | ||
| 422 | /* fixed rate clocks generated outside the soc */ | 430 | /* fixed rate clocks generated outside the soc */ |
| 423 | static struct samsung_fixed_rate_clock exynos4_fixed_rate_ext_clks[] __initdata = { | 431 | static struct samsung_fixed_rate_clock exynos4_fixed_rate_ext_clks[] __initdata = { |
| @@ -451,6 +459,9 @@ static struct samsung_mux_clock exynos4_mux_clks[] __initdata = { | |||
| 451 | MUX(0, "mout_onenand1", mout_onenand1_p, SRC_TOP0, 0, 1), | 459 | MUX(0, "mout_onenand1", mout_onenand1_p, SRC_TOP0, 0, 1), |
| 452 | MUX(CLK_SCLK_EPLL, "sclk_epll", mout_epll_p, SRC_TOP0, 4, 1), | 460 | MUX(CLK_SCLK_EPLL, "sclk_epll", mout_epll_p, SRC_TOP0, 4, 1), |
| 453 | MUX(0, "mout_onenand", mout_onenand_p, SRC_TOP0, 28, 1), | 461 | MUX(0, "mout_onenand", mout_onenand_p, SRC_TOP0, 28, 1), |
| 462 | |||
| 463 | MUX(0, "mout_dmc_bus", sclk_ampll_p4210, SRC_DMC, 4, 1), | ||
| 464 | MUX(0, "mout_dphy", sclk_ampll_p4210, SRC_DMC, 8, 1), | ||
| 454 | }; | 465 | }; |
| 455 | 466 | ||
| 456 | /* list of mux clocks supported in exynos4210 soc */ | 467 | /* list of mux clocks supported in exynos4210 soc */ |
| @@ -459,6 +470,10 @@ static struct samsung_mux_clock exynos4210_mux_early[] __initdata = { | |||
| 459 | }; | 470 | }; |
| 460 | 471 | ||
| 461 | static struct samsung_mux_clock exynos4210_mux_clks[] __initdata = { | 472 | static struct samsung_mux_clock exynos4210_mux_clks[] __initdata = { |
| 473 | MUX(0, "mout_gdl", sclk_ampll_p4210, SRC_LEFTBUS, 0, 1), | ||
| 474 | |||
| 475 | MUX(0, "mout_gdr", sclk_ampll_p4210, SRC_RIGHTBUS, 0, 1), | ||
| 476 | |||
| 462 | MUX(0, "mout_aclk200", sclk_ampll_p4210, SRC_TOP0, 12, 1), | 477 | MUX(0, "mout_aclk200", sclk_ampll_p4210, SRC_TOP0, 12, 1), |
| 463 | MUX(0, "mout_aclk100", sclk_ampll_p4210, SRC_TOP0, 16, 1), | 478 | MUX(0, "mout_aclk100", sclk_ampll_p4210, SRC_TOP0, 16, 1), |
| 464 | MUX(0, "mout_aclk160", sclk_ampll_p4210, SRC_TOP0, 20, 1), | 479 | MUX(0, "mout_aclk160", sclk_ampll_p4210, SRC_TOP0, 20, 1), |
| @@ -472,6 +487,7 @@ static struct samsung_mux_clock exynos4210_mux_clks[] __initdata = { | |||
| 472 | MUX(0, "mout_mipi1", group1_p4210, E4210_SRC_LCD1, 12, 4), | 487 | MUX(0, "mout_mipi1", group1_p4210, E4210_SRC_LCD1, 12, 4), |
| 473 | MUX(CLK_SCLK_MPLL, "sclk_mpll", mout_mpll_p, SRC_CPU, 8, 1), | 488 | MUX(CLK_SCLK_MPLL, "sclk_mpll", mout_mpll_p, SRC_CPU, 8, 1), |
| 474 | MUX(CLK_MOUT_CORE, "mout_core", mout_core_p4210, SRC_CPU, 16, 1), | 489 | MUX(CLK_MOUT_CORE, "mout_core", mout_core_p4210, SRC_CPU, 16, 1), |
| 490 | MUX(0, "mout_hpm", mout_core_p4210, SRC_CPU, 20, 1), | ||
| 475 | MUX(CLK_SCLK_VPLL, "sclk_vpll", sclk_vpll_p4210, SRC_TOP0, 8, 1), | 491 | MUX(CLK_SCLK_VPLL, "sclk_vpll", sclk_vpll_p4210, SRC_TOP0, 8, 1), |
| 476 | MUX(CLK_MOUT_FIMC0, "mout_fimc0", group1_p4210, SRC_CAM, 0, 4), | 492 | MUX(CLK_MOUT_FIMC0, "mout_fimc0", group1_p4210, SRC_CAM, 0, 4), |
| 477 | MUX(CLK_MOUT_FIMC1, "mout_fimc1", group1_p4210, SRC_CAM, 4, 4), | 493 | MUX(CLK_MOUT_FIMC1, "mout_fimc1", group1_p4210, SRC_CAM, 4, 4), |
| @@ -503,10 +519,18 @@ static struct samsung_mux_clock exynos4210_mux_clks[] __initdata = { | |||
| 503 | MUX(0, "mout_spi0", group1_p4210, SRC_PERIL1, 16, 4), | 519 | MUX(0, "mout_spi0", group1_p4210, SRC_PERIL1, 16, 4), |
| 504 | MUX(0, "mout_spi1", group1_p4210, SRC_PERIL1, 20, 4), | 520 | MUX(0, "mout_spi1", group1_p4210, SRC_PERIL1, 20, 4), |
| 505 | MUX(0, "mout_spi2", group1_p4210, SRC_PERIL1, 24, 4), | 521 | MUX(0, "mout_spi2", group1_p4210, SRC_PERIL1, 24, 4), |
| 522 | |||
| 523 | MUX(0, "mout_pwi", mout_pwi_p4210, SRC_DMC, 16, 4), | ||
| 506 | }; | 524 | }; |
| 507 | 525 | ||
| 508 | /* list of mux clocks supported in exynos4x12 soc */ | 526 | /* list of mux clocks supported in exynos4x12 soc */ |
| 509 | static struct samsung_mux_clock exynos4x12_mux_clks[] __initdata = { | 527 | static struct samsung_mux_clock exynos4x12_mux_clks[] __initdata = { |
| 528 | MUX(0, "mout_mpll_user_l", mout_mpll_p, SRC_LEFTBUS, 4, 1), | ||
| 529 | MUX(0, "mout_gdl", mout_gdl_p4x12, SRC_LEFTBUS, 0, 1), | ||
| 530 | |||
| 531 | MUX(0, "mout_mpll_user_r", mout_mpll_p, SRC_RIGHTBUS, 4, 1), | ||
| 532 | MUX(0, "mout_gdr", mout_gdr_p4x12, SRC_RIGHTBUS, 0, 1), | ||
| 533 | |||
| 510 | MUX(CLK_MOUT_MPLL_USER_C, "mout_mpll_user_c", mout_mpll_user_p4x12, | 534 | MUX(CLK_MOUT_MPLL_USER_C, "mout_mpll_user_c", mout_mpll_user_p4x12, |
| 511 | SRC_CPU, 24, 1), | 535 | SRC_CPU, 24, 1), |
| 512 | MUX(0, "mout_aclk266_gps", aclk_p4412, SRC_TOP1, 4, 1), | 536 | MUX(0, "mout_aclk266_gps", aclk_p4412, SRC_TOP1, 4, 1), |
| @@ -531,6 +555,7 @@ static struct samsung_mux_clock exynos4x12_mux_clks[] __initdata = { | |||
| 531 | MUX(CLK_SCLK_MPLL, "sclk_mpll", mout_mpll_p, SRC_DMC, 12, 1), | 555 | MUX(CLK_SCLK_MPLL, "sclk_mpll", mout_mpll_p, SRC_DMC, 12, 1), |
| 532 | MUX(CLK_SCLK_VPLL, "sclk_vpll", mout_vpll_p, SRC_TOP0, 8, 1), | 556 | MUX(CLK_SCLK_VPLL, "sclk_vpll", mout_vpll_p, SRC_TOP0, 8, 1), |
| 533 | MUX(CLK_MOUT_CORE, "mout_core", mout_core_p4x12, SRC_CPU, 16, 1), | 557 | MUX(CLK_MOUT_CORE, "mout_core", mout_core_p4x12, SRC_CPU, 16, 1), |
| 558 | MUX(0, "mout_hpm", mout_core_p4x12, SRC_CPU, 20, 1), | ||
| 534 | MUX(CLK_MOUT_FIMC0, "mout_fimc0", group1_p4x12, SRC_CAM, 0, 4), | 559 | MUX(CLK_MOUT_FIMC0, "mout_fimc0", group1_p4x12, SRC_CAM, 0, 4), |
| 535 | MUX(CLK_MOUT_FIMC1, "mout_fimc1", group1_p4x12, SRC_CAM, 4, 4), | 560 | MUX(CLK_MOUT_FIMC1, "mout_fimc1", group1_p4x12, SRC_CAM, 4, 4), |
| 536 | MUX(CLK_MOUT_FIMC2, "mout_fimc2", group1_p4x12, SRC_CAM, 8, 4), | 561 | MUX(CLK_MOUT_FIMC2, "mout_fimc2", group1_p4x12, SRC_CAM, 8, 4), |
| @@ -565,6 +590,8 @@ static struct samsung_mux_clock exynos4x12_mux_clks[] __initdata = { | |||
| 565 | MUX(0, "mout_spi0_isp", group1_p4x12, E4X12_SRC_ISP, 4, 4), | 590 | MUX(0, "mout_spi0_isp", group1_p4x12, E4X12_SRC_ISP, 4, 4), |
| 566 | MUX(0, "mout_spi1_isp", group1_p4x12, E4X12_SRC_ISP, 8, 4), | 591 | MUX(0, "mout_spi1_isp", group1_p4x12, E4X12_SRC_ISP, 8, 4), |
| 567 | MUX(0, "mout_uart_isp", group1_p4x12, E4X12_SRC_ISP, 12, 4), | 592 | MUX(0, "mout_uart_isp", group1_p4x12, E4X12_SRC_ISP, 12, 4), |
| 593 | MUX(0, "mout_c2c", sclk_ampll_p4210, SRC_DMC, 0, 1), | ||
| 594 | MUX(0, "mout_pwi", mout_pwi_p4x12, SRC_DMC, 16, 4), | ||
| 568 | MUX(0, "mout_g2d0", sclk_ampll_p4210, SRC_DMC, 20, 1), | 595 | MUX(0, "mout_g2d0", sclk_ampll_p4210, SRC_DMC, 20, 1), |
| 569 | MUX(0, "mout_g2d1", sclk_evpll_p, SRC_DMC, 24, 1), | 596 | MUX(0, "mout_g2d1", sclk_evpll_p, SRC_DMC, 24, 1), |
| 570 | MUX(0, "mout_g2d", mout_g2d_p, SRC_DMC, 28, 1), | 597 | MUX(0, "mout_g2d", mout_g2d_p, SRC_DMC, 28, 1), |
| @@ -572,8 +599,21 @@ static struct samsung_mux_clock exynos4x12_mux_clks[] __initdata = { | |||
| 572 | 599 | ||
| 573 | /* list of divider clocks supported in all exynos4 soc's */ | 600 | /* list of divider clocks supported in all exynos4 soc's */ |
| 574 | static struct samsung_div_clock exynos4_div_clks[] __initdata = { | 601 | static struct samsung_div_clock exynos4_div_clks[] __initdata = { |
| 602 | DIV(0, "div_gdl", "mout_gdl", DIV_LEFTBUS, 0, 3), | ||
| 603 | DIV(0, "div_gpl", "div_gdl", DIV_LEFTBUS, 4, 3), | ||
| 604 | |||
| 605 | DIV(0, "div_gdr", "mout_gdr", DIV_RIGHTBUS, 0, 3), | ||
| 606 | DIV(0, "div_gpr", "div_gdr", DIV_RIGHTBUS, 4, 3), | ||
| 607 | |||
| 575 | DIV(0, "div_core", "mout_core", DIV_CPU0, 0, 3), | 608 | DIV(0, "div_core", "mout_core", DIV_CPU0, 0, 3), |
| 609 | DIV(0, "div_corem0", "div_core2", DIV_CPU0, 4, 3), | ||
| 610 | DIV(0, "div_corem1", "div_core2", DIV_CPU0, 8, 3), | ||
| 611 | DIV(0, "div_periph", "div_core2", DIV_CPU0, 12, 3), | ||
| 612 | DIV(0, "div_atb", "mout_core", DIV_CPU0, 16, 3), | ||
| 613 | DIV(0, "div_pclk_dbg", "div_atb", DIV_CPU0, 20, 3), | ||
| 576 | DIV(0, "div_core2", "div_core", DIV_CPU0, 28, 3), | 614 | DIV(0, "div_core2", "div_core", DIV_CPU0, 28, 3), |
| 615 | DIV(0, "div_copy", "mout_hpm", DIV_CPU1, 0, 3), | ||
| 616 | DIV(0, "div_hpm", "div_copy", DIV_CPU1, 4, 3), | ||
| 577 | DIV(0, "div_fimc0", "mout_fimc0", DIV_CAM, 0, 4), | 617 | DIV(0, "div_fimc0", "mout_fimc0", DIV_CAM, 0, 4), |
| 578 | DIV(0, "div_fimc1", "mout_fimc1", DIV_CAM, 4, 4), | 618 | DIV(0, "div_fimc1", "mout_fimc1", DIV_CAM, 4, 4), |
| 579 | DIV(0, "div_fimc2", "mout_fimc2", DIV_CAM, 8, 4), | 619 | DIV(0, "div_fimc2", "mout_fimc2", DIV_CAM, 8, 4), |
| @@ -631,6 +671,14 @@ static struct samsung_div_clock exynos4_div_clks[] __initdata = { | |||
| 631 | CLK_SET_RATE_PARENT, 0), | 671 | CLK_SET_RATE_PARENT, 0), |
| 632 | DIV_F(0, "div_mmc_pre3", "div_mmc3", DIV_FSYS2, 24, 8, | 672 | DIV_F(0, "div_mmc_pre3", "div_mmc3", DIV_FSYS2, 24, 8, |
| 633 | CLK_SET_RATE_PARENT, 0), | 673 | CLK_SET_RATE_PARENT, 0), |
| 674 | |||
| 675 | DIV(0, "div_acp", "mout_dmc_bus", DIV_DMC0, 0, 3), | ||
| 676 | DIV(0, "div_acp_pclk", "div_acp", DIV_DMC0, 4, 3), | ||
| 677 | DIV(0, "div_dphy", "mout_dphy", DIV_DMC0, 8, 3), | ||
| 678 | DIV(0, "div_dmc", "mout_dmc_bus", DIV_DMC0, 12, 3), | ||
| 679 | DIV(0, "div_dmcd", "div_dmc", DIV_DMC0, 16, 3), | ||
| 680 | DIV(0, "div_dmcp", "div_dmcd", DIV_DMC0, 20, 3), | ||
| 681 | DIV(0, "div_pwi", "mout_pwi", DIV_DMC1, 8, 4), | ||
| 634 | }; | 682 | }; |
| 635 | 683 | ||
| 636 | /* list of divider clocks supported in exynos4210 soc */ | 684 | /* list of divider clocks supported in exynos4210 soc */ |
| @@ -671,6 +719,8 @@ static struct samsung_div_clock exynos4x12_div_clks[] __initdata = { | |||
| 671 | DIV_F(CLK_DIV_MCUISP1, "div_mcuisp1", "div_mcuisp0", E4X12_DIV_ISP1, | 719 | DIV_F(CLK_DIV_MCUISP1, "div_mcuisp1", "div_mcuisp0", E4X12_DIV_ISP1, |
| 672 | 8, 3, CLK_GET_RATE_NOCACHE, 0), | 720 | 8, 3, CLK_GET_RATE_NOCACHE, 0), |
| 673 | DIV(CLK_SCLK_FIMG2D, "sclk_fimg2d", "mout_g2d", DIV_DMC1, 0, 4), | 721 | DIV(CLK_SCLK_FIMG2D, "sclk_fimg2d", "mout_g2d", DIV_DMC1, 0, 4), |
| 722 | DIV(0, "div_c2c", "mout_c2c", DIV_DMC1, 4, 3), | ||
| 723 | DIV(0, "div_c2c_aclk", "div_c2c", DIV_DMC1, 12, 3), | ||
| 674 | }; | 724 | }; |
| 675 | 725 | ||
| 676 | /* list of gate clocks supported in all exynos4 soc's */ | 726 | /* list of gate clocks supported in all exynos4 soc's */ |
