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

clk: samsung: exynos7: Add required clock tree for USB

Adding required gate clocks for USB3.0 DRD controller
present on Exynos7.

Signed-off-by: Vivek Gautam <gautam.vivek@samsung.com>
Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>

authored by

Vivek Gautam and committed by
Sylwester Nawrocki
83f191a7 49cab82c

+72 -1
+64
drivers/clk/samsung/clk-exynos7.c
··· 354 354 MUX(0, "mout_aclk_fsys0_200", mout_top1_group1, MUX_SEL_TOP13, 28, 2), 355 355 356 356 MUX(0, "mout_sclk_mmc2", mout_top1_group1, MUX_SEL_TOP1_FSYS0, 24, 2), 357 + MUX(0, "mout_sclk_usbdrd300", mout_top1_group1, 358 + MUX_SEL_TOP1_FSYS0, 28, 2), 357 359 358 360 MUX(0, "mout_sclk_mmc1", mout_top1_group1, MUX_SEL_TOP1_FSYS1, 24, 2), 359 361 MUX(0, "mout_sclk_mmc0", mout_top1_group1, MUX_SEL_TOP1_FSYS1, 28, 2), ··· 369 367 370 368 DIV(DOUT_SCLK_MMC2, "dout_sclk_mmc2", "mout_sclk_mmc2", 371 369 DIV_TOP1_FSYS0, 24, 4), 370 + DIV(0, "dout_sclk_usbdrd300", "mout_sclk_usbdrd300", 371 + DIV_TOP1_FSYS0, 28, 4), 372 372 373 373 DIV(DOUT_SCLK_MMC1, "dout_sclk_mmc1", "mout_sclk_mmc1", 374 374 DIV_TOP1_FSYS1, 24, 4), ··· 381 377 static struct samsung_gate_clock top1_gate_clks[] __initdata = { 382 378 GATE(CLK_SCLK_MMC2, "sclk_mmc2", "dout_sclk_mmc2", 383 379 ENABLE_SCLK_TOP1_FSYS0, 24, CLK_SET_RATE_PARENT, 0), 380 + GATE(0, "sclk_usbdrd300", "dout_sclk_usbdrd300", 381 + ENABLE_SCLK_TOP1_FSYS0, 28, 0, 0), 384 382 385 383 GATE(CLK_SCLK_MMC1, "sclk_mmc1", "dout_sclk_mmc1", 386 384 ENABLE_SCLK_TOP1_FSYS1, 24, CLK_SET_RATE_PARENT, 0), ··· 664 658 /* Register Offset definitions for CMU_FSYS0 (0x10E90000) */ 665 659 #define MUX_SEL_FSYS00 0x0200 666 660 #define MUX_SEL_FSYS01 0x0204 661 + #define MUX_SEL_FSYS02 0x0208 662 + #define ENABLE_ACLK_FSYS00 0x0800 667 663 #define ENABLE_ACLK_FSYS01 0x0804 664 + #define ENABLE_SCLK_FSYS01 0x0A04 665 + #define ENABLE_SCLK_FSYS02 0x0A08 666 + #define ENABLE_SCLK_FSYS04 0x0A10 668 667 669 668 /* 670 669 * List of parent clocks for Muxes in CMU_FSYS0 ··· 677 666 PNAME(mout_aclk_fsys0_200_p) = { "fin_pll", "dout_aclk_fsys0_200" }; 678 667 PNAME(mout_sclk_mmc2_p) = { "fin_pll", "sclk_mmc2" }; 679 668 669 + PNAME(mout_sclk_usbdrd300_p) = { "fin_pll", "sclk_usbdrd300" }; 670 + PNAME(mout_phyclk_usbdrd300_udrd30_phyclk_p) = { "fin_pll", 671 + "phyclk_usbdrd300_udrd30_phyclock" }; 672 + PNAME(mout_phyclk_usbdrd300_udrd30_pipe_pclk_p) = { "fin_pll", 673 + "phyclk_usbdrd300_udrd30_pipe_pclk" }; 674 + 675 + /* fixed rate clocks used in the FSYS0 block */ 676 + struct samsung_fixed_rate_clock fixed_rate_clks_fsys0[] __initdata = { 677 + FRATE(0, "phyclk_usbdrd300_udrd30_phyclock", NULL, 678 + CLK_IS_ROOT, 60000000), 679 + FRATE(0, "phyclk_usbdrd300_udrd30_pipe_pclk", NULL, 680 + CLK_IS_ROOT, 125000000), 681 + }; 682 + 680 683 static unsigned long fsys0_clk_regs[] __initdata = { 681 684 MUX_SEL_FSYS00, 682 685 MUX_SEL_FSYS01, 686 + MUX_SEL_FSYS02, 687 + ENABLE_ACLK_FSYS00, 683 688 ENABLE_ACLK_FSYS01, 689 + ENABLE_SCLK_FSYS01, 690 + ENABLE_SCLK_FSYS02, 691 + ENABLE_SCLK_FSYS04, 684 692 }; 685 693 686 694 static struct samsung_mux_clock fsys0_mux_clks[] __initdata = { ··· 707 677 MUX_SEL_FSYS00, 24, 1), 708 678 709 679 MUX(0, "mout_sclk_mmc2_user", mout_sclk_mmc2_p, MUX_SEL_FSYS01, 24, 1), 680 + MUX(0, "mout_sclk_usbdrd300_user", mout_sclk_usbdrd300_p, 681 + MUX_SEL_FSYS01, 28, 1), 682 + 683 + MUX(0, "mout_phyclk_usbdrd300_udrd30_pipe_pclk_user", 684 + mout_phyclk_usbdrd300_udrd30_pipe_pclk_p, 685 + MUX_SEL_FSYS02, 24, 1), 686 + MUX(0, "mout_phyclk_usbdrd300_udrd30_phyclk_user", 687 + mout_phyclk_usbdrd300_udrd30_phyclk_p, 688 + MUX_SEL_FSYS02, 28, 1), 710 689 }; 711 690 712 691 static struct samsung_gate_clock fsys0_gate_clks[] __initdata = { 692 + GATE(ACLK_AXIUS_USBDRD30X_FSYS0X, "aclk_axius_usbdrd30x_fsys0x", 693 + "mout_aclk_fsys0_200_user", 694 + ENABLE_ACLK_FSYS00, 19, 0, 0), 695 + 696 + GATE(ACLK_USBDRD300, "aclk_usbdrd300", "mout_aclk_fsys0_200_user", 697 + ENABLE_ACLK_FSYS01, 29, 0, 0), 713 698 GATE(ACLK_MMC2, "aclk_mmc2", "mout_aclk_fsys0_200_user", 714 699 ENABLE_ACLK_FSYS01, 31, 0, 0), 700 + 701 + GATE(SCLK_USBDRD300_SUSPENDCLK, "sclk_usbdrd300_suspendclk", 702 + "mout_sclk_usbdrd300_user", 703 + ENABLE_SCLK_FSYS01, 4, 0, 0), 704 + GATE(SCLK_USBDRD300_REFCLK, "sclk_usbdrd300_refclk", "fin_pll", 705 + ENABLE_SCLK_FSYS01, 8, 0, 0), 706 + 707 + GATE(PHYCLK_USBDRD300_UDRD30_PIPE_PCLK_USER, 708 + "phyclk_usbdrd300_udrd30_pipe_pclk_user", 709 + "mout_phyclk_usbdrd300_udrd30_pipe_pclk_user", 710 + ENABLE_SCLK_FSYS02, 24, 0, 0), 711 + GATE(PHYCLK_USBDRD300_UDRD30_PHYCLK_USER, 712 + "phyclk_usbdrd300_udrd30_phyclk_user", 713 + "mout_phyclk_usbdrd300_udrd30_phyclk_user", 714 + ENABLE_SCLK_FSYS02, 28, 0, 0), 715 + 716 + GATE(OSCCLK_PHY_CLKOUT_USB30_PHY, "oscclk_phy_clkout_usb30_phy", 717 + "fin_pll", 718 + ENABLE_SCLK_FSYS04, 28, 0, 0), 715 719 }; 716 720 717 721 static struct samsung_cmu_info fsys0_cmu_info __initdata = {
+8 -1
include/dt-bindings/clock/exynos7-clk.h
··· 84 84 85 85 /* FSYS0 */ 86 86 #define ACLK_MMC2 1 87 - #define FSYS0_NR_CLK 2 87 + #define ACLK_AXIUS_USBDRD30X_FSYS0X 2 88 + #define ACLK_USBDRD300 3 89 + #define SCLK_USBDRD300_SUSPENDCLK 4 90 + #define SCLK_USBDRD300_REFCLK 5 91 + #define PHYCLK_USBDRD300_UDRD30_PIPE_PCLK_USER 6 92 + #define PHYCLK_USBDRD300_UDRD30_PHYCLK_USER 7 93 + #define OSCCLK_PHY_CLKOUT_USB30_PHY 8 94 + #define FSYS0_NR_CLK 9 88 95 89 96 /* FSYS1 */ 90 97 #define ACLK_MMC1 1