![Linus Torvalds](/assets/img/avatar_default.png)
do have a couple core changes in here as well. Core: - CLK_IS_CRITICAL support has been added. This should allow drivers to properly express that a certain clk should stay on even if their prepare/enable count drops to 0 (and in turn the parents of these clks should stay enabled). - A clk registration API has been added, clk_hw_register(), and an OF clk provider API has been added, of_clk_add_hw_provider(). These APIs have been put in place to further split clk providers from clk consumers, with the goal being to have clk providers never deal with struct clk pointers at all. Conversion of provider drivers is on going. clkdev has also gained support for registering clk_hw pointers directly so we can convert drivers that don't use devicetree. New Drivers: - Marvell ap806 and cp110 system controllers (with clks inside!) - Hisilicon Hi3519 clock and reset controller - Axis ARTPEC-6 clock controllers - Oxford Semiconductor OXNAS clock controllers - AXS10X I2S PLL - Rockchip RK3399 clock and reset controller Updates: - MMC2 and UART2 clks on Samsung Exynos 3250, ACLK on Samsung Exynos 542x SoCs, and some more clk ID exporting for bus frequency scaling - Proper BCM2835 PCM clk support and various other clks - i.MX clk updates for i.MX6SX, i.MX7, and VF610 - Renesas updates for R-Car H3 - Tegra210 got updates for DisplayPort and HDMI 2.0 - Rockchip driver refactorings and fixes due to adding RK3399 support -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.22 (GNU/Linux) iQIcBAABCAAGBQJXP7QdAAoJEK0CiJfG5JUl/Q8P/i93QXTom/VbwDHZ4DDZr0Hc 69oCRVTDTArGLa4YrGMxu3crNWf8/ORwsZVG93PD6bkkrWo9qH52KFsI22MdZcta HlApsFjI503C7qDw6V8UVz7mUJVfarCxKNSd1WBPCVCNExarIrRRymC3NXT6ZrUP D59E53d4G+I6OUuybsp4gtA7aEoYebAE7BInPDDihIk7Lall5mLYbfJUumpHlmSd wqqPad5OYoC1nkrYhIGficK9Bizy3eyK829EoqpQpE4djkNhEwKd/AwSJZ6i1pdC obt8vQyPRK0ByND2I+3XPqZ7bFb9IKu5WIAkYzG8QskFyIqiFtOkFgEP360ojlGT D8sZY7RBmIM4Tu5RgeoN94wML4f/zYOm6YzVUVjWdVPGoxuy4QhQsvS5Id70ifNU pSYf1KG0Gq0wvptth02zaDE9r1lDMOCHsOPIbVMqHRxRj8shUyjroTEzdtdyS6SE FsYmGdrq4YctXyP4E8efLzFMjN7qZyKgnAoGfROsPRb6NE3DSFs5PcxQldOcoBPv +NstBGUlJ4Xzwd1BdxKWJq8aIsG/CLqTec63OYSYM0bfUSWXKOgemvBV8MJrDP1D rFabdJVHhUZOy5UgxOdfmy1XWp/SWup8OUnpEJp84RywGP6UMM0s1RtWruMJ776J tBzVIIYCJrAWFia0Djlr =aEzb -----END PGP SIGNATURE----- Merge tag 'clk-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/clk/linux Pull clk updates from Stephen Boyd: "It's the usual big pile of driver updates and additions, but we do have a couple core changes in here as well. Core: - CLK_IS_CRITICAL support has been added. This should allow drivers to properly express that a certain clk should stay on even if their prepare/enable count drops to 0 (and in turn the parents of these clks should stay enabled). - A clk registration API has been added, clk_hw_register(), and an OF clk provider API has been added, of_clk_add_hw_provider(). These APIs have been put in place to further split clk providers from clk consumers, with the goal being to have clk providers never deal with struct clk pointers at all. Conversion of provider drivers is on going. clkdev has also gained support for registering clk_hw pointers directly so we can convert drivers that don't use devicetree. New Drivers: - Marvell ap806 and cp110 system controllers (with clks inside!) - Hisilicon Hi3519 clock and reset controller - Axis ARTPEC-6 clock controllers - Oxford Semiconductor OXNAS clock controllers - AXS10X I2S PLL - Rockchip RK3399 clock and reset controller Updates: - MMC2 and UART2 clks on Samsung Exynos 3250, ACLK on Samsung Exynos 542x SoCs, and some more clk ID exporting for bus frequency scaling - Proper BCM2835 PCM clk support and various other clks - i.MX clk updates for i.MX6SX, i.MX7, and VF610 - Renesas updates for R-Car H3 - Tegra210 got updates for DisplayPort and HDMI 2.0 - Rockchip driver refactorings and fixes due to adding RK3399 support" * tag 'clk-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/clk/linux: (139 commits) clk: fix critical clock locking clk: qcom: mmcc-8996: Remove clocks that should be controlled by RPM clk: ingenic: Allow divider value to be divided clk: sunxi: Add display and TCON0 clocks driver clk: rockchip: drop old_rate calculation on pll rate changes clk: rockchip: simplify GRF handling in pll clocks clk: rockchip: lookup General Register Files in rockchip_clk_init clk: rockchip: fix the rk3399 sdmmc sample / drv name clk: mvebu: new driver for Armada CP110 system controller dt-bindings: arm: add DT binding for Marvell CP110 system controller clk: mvebu: new driver for Armada AP806 system controller clk: hisilicon: add CRG driver for hi3519 soc clk: hisilicon: export some hisilicon APIs to modules reset: hisilicon: add reset controller driver for hisilicon SOCs clk: bcm/kona: Do not use sizeof on pointer type clk: qcom: msm8916: Fix crypto clock flags clk: nxp: lpc18xx: Initialize clk_init_data::flags to 0 clk/axs10x: Add I2S PLL clock driver clk: imx7d: fix ahb clock mux 1 clk: fix comment of devm_clk_hw_register() ...
344 lines
16 KiB
C
344 lines
16 KiB
C
/*
|
|
* DRA7 Clock init
|
|
*
|
|
* Copyright (C) 2013 Texas Instruments, Inc.
|
|
*
|
|
* Tero Kristo (t-kristo@ti.com)
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 as
|
|
* published by the Free Software Foundation.
|
|
*/
|
|
|
|
#include <linux/kernel.h>
|
|
#include <linux/list.h>
|
|
#include <linux/clk.h>
|
|
#include <linux/clkdev.h>
|
|
#include <linux/clk/ti.h>
|
|
|
|
#include "clock.h"
|
|
|
|
#define DRA7_DPLL_GMAC_DEFFREQ 1000000000
|
|
#define DRA7_DPLL_USB_DEFFREQ 960000000
|
|
|
|
static struct ti_dt_clk dra7xx_clks[] = {
|
|
DT_CLK(NULL, "atl_clkin0_ck", "atl_clkin0_ck"),
|
|
DT_CLK(NULL, "atl_clkin1_ck", "atl_clkin1_ck"),
|
|
DT_CLK(NULL, "atl_clkin2_ck", "atl_clkin2_ck"),
|
|
DT_CLK(NULL, "atl_clkin3_ck", "atl_clkin3_ck"),
|
|
DT_CLK(NULL, "hdmi_clkin_ck", "hdmi_clkin_ck"),
|
|
DT_CLK(NULL, "mlb_clkin_ck", "mlb_clkin_ck"),
|
|
DT_CLK(NULL, "mlbp_clkin_ck", "mlbp_clkin_ck"),
|
|
DT_CLK(NULL, "pciesref_acs_clk_ck", "pciesref_acs_clk_ck"),
|
|
DT_CLK(NULL, "ref_clkin0_ck", "ref_clkin0_ck"),
|
|
DT_CLK(NULL, "ref_clkin1_ck", "ref_clkin1_ck"),
|
|
DT_CLK(NULL, "ref_clkin2_ck", "ref_clkin2_ck"),
|
|
DT_CLK(NULL, "ref_clkin3_ck", "ref_clkin3_ck"),
|
|
DT_CLK(NULL, "rmii_clk_ck", "rmii_clk_ck"),
|
|
DT_CLK(NULL, "sdvenc_clkin_ck", "sdvenc_clkin_ck"),
|
|
DT_CLK(NULL, "secure_32k_clk_src_ck", "secure_32k_clk_src_ck"),
|
|
DT_CLK(NULL, "sys_32k_ck", "sys_32k_ck"),
|
|
DT_CLK(NULL, "virt_12000000_ck", "virt_12000000_ck"),
|
|
DT_CLK(NULL, "virt_13000000_ck", "virt_13000000_ck"),
|
|
DT_CLK(NULL, "virt_16800000_ck", "virt_16800000_ck"),
|
|
DT_CLK(NULL, "virt_19200000_ck", "virt_19200000_ck"),
|
|
DT_CLK(NULL, "virt_20000000_ck", "virt_20000000_ck"),
|
|
DT_CLK(NULL, "virt_26000000_ck", "virt_26000000_ck"),
|
|
DT_CLK(NULL, "virt_27000000_ck", "virt_27000000_ck"),
|
|
DT_CLK(NULL, "virt_38400000_ck", "virt_38400000_ck"),
|
|
DT_CLK(NULL, "sys_clkin1", "sys_clkin1"),
|
|
DT_CLK(NULL, "sys_clkin2", "sys_clkin2"),
|
|
DT_CLK(NULL, "usb_otg_clkin_ck", "usb_otg_clkin_ck"),
|
|
DT_CLK(NULL, "video1_clkin_ck", "video1_clkin_ck"),
|
|
DT_CLK(NULL, "video1_m2_clkin_ck", "video1_m2_clkin_ck"),
|
|
DT_CLK(NULL, "video2_clkin_ck", "video2_clkin_ck"),
|
|
DT_CLK(NULL, "video2_m2_clkin_ck", "video2_m2_clkin_ck"),
|
|
DT_CLK(NULL, "abe_dpll_sys_clk_mux", "abe_dpll_sys_clk_mux"),
|
|
DT_CLK(NULL, "abe_dpll_bypass_clk_mux", "abe_dpll_bypass_clk_mux"),
|
|
DT_CLK(NULL, "abe_dpll_clk_mux", "abe_dpll_clk_mux"),
|
|
DT_CLK(NULL, "dpll_abe_ck", "dpll_abe_ck"),
|
|
DT_CLK(NULL, "dpll_abe_x2_ck", "dpll_abe_x2_ck"),
|
|
DT_CLK(NULL, "dpll_abe_m2x2_ck", "dpll_abe_m2x2_ck"),
|
|
DT_CLK(NULL, "abe_24m_fclk", "abe_24m_fclk"),
|
|
DT_CLK(NULL, "abe_clk", "abe_clk"),
|
|
DT_CLK(NULL, "aess_fclk", "aess_fclk"),
|
|
DT_CLK(NULL, "abe_giclk_div", "abe_giclk_div"),
|
|
DT_CLK(NULL, "abe_lp_clk_div", "abe_lp_clk_div"),
|
|
DT_CLK(NULL, "abe_sys_clk_div", "abe_sys_clk_div"),
|
|
DT_CLK(NULL, "adc_gfclk_mux", "adc_gfclk_mux"),
|
|
DT_CLK(NULL, "dpll_pcie_ref_ck", "dpll_pcie_ref_ck"),
|
|
DT_CLK(NULL, "dpll_pcie_ref_m2ldo_ck", "dpll_pcie_ref_m2ldo_ck"),
|
|
DT_CLK(NULL, "apll_pcie_ck", "apll_pcie_ck"),
|
|
DT_CLK(NULL, "apll_pcie_clkvcoldo", "apll_pcie_clkvcoldo"),
|
|
DT_CLK(NULL, "apll_pcie_clkvcoldo_div", "apll_pcie_clkvcoldo_div"),
|
|
DT_CLK(NULL, "apll_pcie_m2_ck", "apll_pcie_m2_ck"),
|
|
DT_CLK(NULL, "sys_clk1_dclk_div", "sys_clk1_dclk_div"),
|
|
DT_CLK(NULL, "sys_clk2_dclk_div", "sys_clk2_dclk_div"),
|
|
DT_CLK(NULL, "dpll_abe_m2_ck", "dpll_abe_m2_ck"),
|
|
DT_CLK(NULL, "per_abe_x1_dclk_div", "per_abe_x1_dclk_div"),
|
|
DT_CLK(NULL, "dpll_abe_m3x2_ck", "dpll_abe_m3x2_ck"),
|
|
DT_CLK(NULL, "dpll_core_ck", "dpll_core_ck"),
|
|
DT_CLK(NULL, "dpll_core_x2_ck", "dpll_core_x2_ck"),
|
|
DT_CLK(NULL, "dpll_core_h12x2_ck", "dpll_core_h12x2_ck"),
|
|
DT_CLK(NULL, "mpu_dpll_hs_clk_div", "mpu_dpll_hs_clk_div"),
|
|
DT_CLK(NULL, "dpll_mpu_ck", "dpll_mpu_ck"),
|
|
DT_CLK(NULL, "dpll_mpu_m2_ck", "dpll_mpu_m2_ck"),
|
|
DT_CLK(NULL, "mpu_dclk_div", "mpu_dclk_div"),
|
|
DT_CLK(NULL, "dsp_dpll_hs_clk_div", "dsp_dpll_hs_clk_div"),
|
|
DT_CLK(NULL, "dpll_dsp_ck", "dpll_dsp_ck"),
|
|
DT_CLK(NULL, "dpll_dsp_m2_ck", "dpll_dsp_m2_ck"),
|
|
DT_CLK(NULL, "dsp_gclk_div", "dsp_gclk_div"),
|
|
DT_CLK(NULL, "iva_dpll_hs_clk_div", "iva_dpll_hs_clk_div"),
|
|
DT_CLK(NULL, "dpll_iva_ck", "dpll_iva_ck"),
|
|
DT_CLK(NULL, "dpll_iva_m2_ck", "dpll_iva_m2_ck"),
|
|
DT_CLK(NULL, "iva_dclk", "iva_dclk"),
|
|
DT_CLK(NULL, "dpll_gpu_ck", "dpll_gpu_ck"),
|
|
DT_CLK(NULL, "dpll_gpu_m2_ck", "dpll_gpu_m2_ck"),
|
|
DT_CLK(NULL, "gpu_dclk", "gpu_dclk"),
|
|
DT_CLK(NULL, "dpll_core_m2_ck", "dpll_core_m2_ck"),
|
|
DT_CLK(NULL, "core_dpll_out_dclk_div", "core_dpll_out_dclk_div"),
|
|
DT_CLK(NULL, "dpll_ddr_ck", "dpll_ddr_ck"),
|
|
DT_CLK(NULL, "dpll_ddr_m2_ck", "dpll_ddr_m2_ck"),
|
|
DT_CLK(NULL, "emif_phy_dclk_div", "emif_phy_dclk_div"),
|
|
DT_CLK(NULL, "dpll_gmac_ck", "dpll_gmac_ck"),
|
|
DT_CLK(NULL, "dpll_gmac_m2_ck", "dpll_gmac_m2_ck"),
|
|
DT_CLK(NULL, "gmac_250m_dclk_div", "gmac_250m_dclk_div"),
|
|
DT_CLK(NULL, "video2_dclk_div", "video2_dclk_div"),
|
|
DT_CLK(NULL, "video1_dclk_div", "video1_dclk_div"),
|
|
DT_CLK(NULL, "hdmi_dclk_div", "hdmi_dclk_div"),
|
|
DT_CLK(NULL, "per_dpll_hs_clk_div", "per_dpll_hs_clk_div"),
|
|
DT_CLK(NULL, "dpll_per_ck", "dpll_per_ck"),
|
|
DT_CLK(NULL, "dpll_per_m2_ck", "dpll_per_m2_ck"),
|
|
DT_CLK(NULL, "func_96m_aon_dclk_div", "func_96m_aon_dclk_div"),
|
|
DT_CLK(NULL, "usb_dpll_hs_clk_div", "usb_dpll_hs_clk_div"),
|
|
DT_CLK(NULL, "dpll_usb_ck", "dpll_usb_ck"),
|
|
DT_CLK(NULL, "dpll_usb_m2_ck", "dpll_usb_m2_ck"),
|
|
DT_CLK(NULL, "l3init_480m_dclk_div", "l3init_480m_dclk_div"),
|
|
DT_CLK(NULL, "usb_otg_dclk_div", "usb_otg_dclk_div"),
|
|
DT_CLK(NULL, "sata_dclk_div", "sata_dclk_div"),
|
|
DT_CLK(NULL, "dpll_pcie_ref_m2_ck", "dpll_pcie_ref_m2_ck"),
|
|
DT_CLK(NULL, "pcie2_dclk_div", "pcie2_dclk_div"),
|
|
DT_CLK(NULL, "pcie_dclk_div", "pcie_dclk_div"),
|
|
DT_CLK(NULL, "emu_dclk_div", "emu_dclk_div"),
|
|
DT_CLK(NULL, "secure_32k_dclk_div", "secure_32k_dclk_div"),
|
|
DT_CLK(NULL, "eve_dpll_hs_clk_div", "eve_dpll_hs_clk_div"),
|
|
DT_CLK(NULL, "dpll_eve_ck", "dpll_eve_ck"),
|
|
DT_CLK(NULL, "dpll_eve_m2_ck", "dpll_eve_m2_ck"),
|
|
DT_CLK(NULL, "eve_dclk_div", "eve_dclk_div"),
|
|
DT_CLK(NULL, "clkoutmux0_clk_mux", "clkoutmux0_clk_mux"),
|
|
DT_CLK(NULL, "clkoutmux1_clk_mux", "clkoutmux1_clk_mux"),
|
|
DT_CLK(NULL, "clkoutmux2_clk_mux", "clkoutmux2_clk_mux"),
|
|
DT_CLK(NULL, "custefuse_sys_gfclk_div", "custefuse_sys_gfclk_div"),
|
|
DT_CLK(NULL, "dpll_core_h13x2_ck", "dpll_core_h13x2_ck"),
|
|
DT_CLK(NULL, "dpll_core_h14x2_ck", "dpll_core_h14x2_ck"),
|
|
DT_CLK(NULL, "dpll_core_h22x2_ck", "dpll_core_h22x2_ck"),
|
|
DT_CLK(NULL, "dpll_core_h23x2_ck", "dpll_core_h23x2_ck"),
|
|
DT_CLK(NULL, "dpll_core_h24x2_ck", "dpll_core_h24x2_ck"),
|
|
DT_CLK(NULL, "dpll_ddr_x2_ck", "dpll_ddr_x2_ck"),
|
|
DT_CLK(NULL, "dpll_ddr_h11x2_ck", "dpll_ddr_h11x2_ck"),
|
|
DT_CLK(NULL, "dpll_dsp_x2_ck", "dpll_dsp_x2_ck"),
|
|
DT_CLK(NULL, "dpll_dsp_m3x2_ck", "dpll_dsp_m3x2_ck"),
|
|
DT_CLK(NULL, "dpll_gmac_x2_ck", "dpll_gmac_x2_ck"),
|
|
DT_CLK(NULL, "dpll_gmac_h11x2_ck", "dpll_gmac_h11x2_ck"),
|
|
DT_CLK(NULL, "dpll_gmac_h12x2_ck", "dpll_gmac_h12x2_ck"),
|
|
DT_CLK(NULL, "dpll_gmac_h13x2_ck", "dpll_gmac_h13x2_ck"),
|
|
DT_CLK(NULL, "dpll_gmac_m3x2_ck", "dpll_gmac_m3x2_ck"),
|
|
DT_CLK(NULL, "dpll_per_x2_ck", "dpll_per_x2_ck"),
|
|
DT_CLK(NULL, "dpll_per_h11x2_ck", "dpll_per_h11x2_ck"),
|
|
DT_CLK(NULL, "dpll_per_h12x2_ck", "dpll_per_h12x2_ck"),
|
|
DT_CLK(NULL, "dpll_per_h13x2_ck", "dpll_per_h13x2_ck"),
|
|
DT_CLK(NULL, "dpll_per_h14x2_ck", "dpll_per_h14x2_ck"),
|
|
DT_CLK(NULL, "dpll_per_m2x2_ck", "dpll_per_m2x2_ck"),
|
|
DT_CLK(NULL, "dpll_usb_clkdcoldo", "dpll_usb_clkdcoldo"),
|
|
DT_CLK(NULL, "eve_clk", "eve_clk"),
|
|
DT_CLK(NULL, "func_128m_clk", "func_128m_clk"),
|
|
DT_CLK(NULL, "func_12m_fclk", "func_12m_fclk"),
|
|
DT_CLK(NULL, "func_24m_clk", "func_24m_clk"),
|
|
DT_CLK(NULL, "func_48m_fclk", "func_48m_fclk"),
|
|
DT_CLK(NULL, "func_96m_fclk", "func_96m_fclk"),
|
|
DT_CLK(NULL, "gmii_m_clk_div", "gmii_m_clk_div"),
|
|
DT_CLK(NULL, "hdmi_clk2_div", "hdmi_clk2_div"),
|
|
DT_CLK(NULL, "hdmi_div_clk", "hdmi_div_clk"),
|
|
DT_CLK(NULL, "hdmi_dpll_clk_mux", "hdmi_dpll_clk_mux"),
|
|
DT_CLK(NULL, "l3_iclk_div", "l3_iclk_div"),
|
|
DT_CLK(NULL, "l3init_60m_fclk", "l3init_60m_fclk"),
|
|
DT_CLK(NULL, "l4_root_clk_div", "l4_root_clk_div"),
|
|
DT_CLK(NULL, "mlb_clk", "mlb_clk"),
|
|
DT_CLK(NULL, "mlbp_clk", "mlbp_clk"),
|
|
DT_CLK(NULL, "per_abe_x1_gfclk2_div", "per_abe_x1_gfclk2_div"),
|
|
DT_CLK(NULL, "timer_sys_clk_div", "timer_sys_clk_div"),
|
|
DT_CLK(NULL, "video1_clk2_div", "video1_clk2_div"),
|
|
DT_CLK(NULL, "video1_div_clk", "video1_div_clk"),
|
|
DT_CLK(NULL, "video1_dpll_clk_mux", "video1_dpll_clk_mux"),
|
|
DT_CLK(NULL, "video2_clk2_div", "video2_clk2_div"),
|
|
DT_CLK(NULL, "video2_div_clk", "video2_div_clk"),
|
|
DT_CLK(NULL, "video2_dpll_clk_mux", "video2_dpll_clk_mux"),
|
|
DT_CLK(NULL, "wkupaon_iclk_mux", "wkupaon_iclk_mux"),
|
|
DT_CLK(NULL, "dss_32khz_clk", "dss_32khz_clk"),
|
|
DT_CLK(NULL, "dss_48mhz_clk", "dss_48mhz_clk"),
|
|
DT_CLK(NULL, "dss_dss_clk", "dss_dss_clk"),
|
|
DT_CLK(NULL, "dss_hdmi_clk", "dss_hdmi_clk"),
|
|
DT_CLK(NULL, "dss_video1_clk", "dss_video1_clk"),
|
|
DT_CLK(NULL, "dss_video2_clk", "dss_video2_clk"),
|
|
DT_CLK(NULL, "gpio1_dbclk", "gpio1_dbclk"),
|
|
DT_CLK(NULL, "gpio2_dbclk", "gpio2_dbclk"),
|
|
DT_CLK(NULL, "gpio3_dbclk", "gpio3_dbclk"),
|
|
DT_CLK(NULL, "gpio4_dbclk", "gpio4_dbclk"),
|
|
DT_CLK(NULL, "gpio5_dbclk", "gpio5_dbclk"),
|
|
DT_CLK(NULL, "gpio6_dbclk", "gpio6_dbclk"),
|
|
DT_CLK(NULL, "gpio7_dbclk", "gpio7_dbclk"),
|
|
DT_CLK(NULL, "gpio8_dbclk", "gpio8_dbclk"),
|
|
DT_CLK(NULL, "mmc1_clk32k", "mmc1_clk32k"),
|
|
DT_CLK(NULL, "mmc2_clk32k", "mmc2_clk32k"),
|
|
DT_CLK(NULL, "mmc3_clk32k", "mmc3_clk32k"),
|
|
DT_CLK(NULL, "mmc4_clk32k", "mmc4_clk32k"),
|
|
DT_CLK(NULL, "sata_ref_clk", "sata_ref_clk"),
|
|
DT_CLK(NULL, "usb_otg_ss1_refclk960m", "usb_otg_ss1_refclk960m"),
|
|
DT_CLK(NULL, "usb_otg_ss2_refclk960m", "usb_otg_ss2_refclk960m"),
|
|
DT_CLK(NULL, "usb_phy1_always_on_clk32k", "usb_phy1_always_on_clk32k"),
|
|
DT_CLK(NULL, "usb_phy2_always_on_clk32k", "usb_phy2_always_on_clk32k"),
|
|
DT_CLK(NULL, "usb_phy3_always_on_clk32k", "usb_phy3_always_on_clk32k"),
|
|
DT_CLK(NULL, "atl_dpll_clk_mux", "atl_dpll_clk_mux"),
|
|
DT_CLK(NULL, "atl_gfclk_mux", "atl_gfclk_mux"),
|
|
DT_CLK(NULL, "dcan1_sys_clk_mux", "dcan1_sys_clk_mux"),
|
|
DT_CLK(NULL, "gmac_gmii_ref_clk_div", "gmac_gmii_ref_clk_div"),
|
|
DT_CLK(NULL, "gmac_rft_clk_mux", "gmac_rft_clk_mux"),
|
|
DT_CLK(NULL, "gpu_core_gclk_mux", "gpu_core_gclk_mux"),
|
|
DT_CLK(NULL, "gpu_hyd_gclk_mux", "gpu_hyd_gclk_mux"),
|
|
DT_CLK(NULL, "ipu1_gfclk_mux", "ipu1_gfclk_mux"),
|
|
DT_CLK(NULL, "l3instr_ts_gclk_div", "l3instr_ts_gclk_div"),
|
|
DT_CLK(NULL, "mcasp1_ahclkr_mux", "mcasp1_ahclkr_mux"),
|
|
DT_CLK(NULL, "mcasp1_ahclkx_mux", "mcasp1_ahclkx_mux"),
|
|
DT_CLK(NULL, "mcasp1_aux_gfclk_mux", "mcasp1_aux_gfclk_mux"),
|
|
DT_CLK(NULL, "mcasp2_ahclkr_mux", "mcasp2_ahclkr_mux"),
|
|
DT_CLK(NULL, "mcasp2_ahclkx_mux", "mcasp2_ahclkx_mux"),
|
|
DT_CLK(NULL, "mcasp2_aux_gfclk_mux", "mcasp2_aux_gfclk_mux"),
|
|
DT_CLK(NULL, "mcasp3_ahclkx_mux", "mcasp3_ahclkx_mux"),
|
|
DT_CLK(NULL, "mcasp3_aux_gfclk_mux", "mcasp3_aux_gfclk_mux"),
|
|
DT_CLK(NULL, "mcasp4_ahclkx_mux", "mcasp4_ahclkx_mux"),
|
|
DT_CLK(NULL, "mcasp4_aux_gfclk_mux", "mcasp4_aux_gfclk_mux"),
|
|
DT_CLK(NULL, "mcasp5_ahclkx_mux", "mcasp5_ahclkx_mux"),
|
|
DT_CLK(NULL, "mcasp5_aux_gfclk_mux", "mcasp5_aux_gfclk_mux"),
|
|
DT_CLK(NULL, "mcasp6_ahclkx_mux", "mcasp6_ahclkx_mux"),
|
|
DT_CLK(NULL, "mcasp6_aux_gfclk_mux", "mcasp6_aux_gfclk_mux"),
|
|
DT_CLK(NULL, "mcasp7_ahclkx_mux", "mcasp7_ahclkx_mux"),
|
|
DT_CLK(NULL, "mcasp7_aux_gfclk_mux", "mcasp7_aux_gfclk_mux"),
|
|
DT_CLK(NULL, "mcasp8_ahclkx_mux", "mcasp8_ahclkx_mux"),
|
|
DT_CLK(NULL, "mcasp8_aux_gfclk_mux", "mcasp8_aux_gfclk_mux"),
|
|
DT_CLK(NULL, "mmc1_fclk_mux", "mmc1_fclk_mux"),
|
|
DT_CLK(NULL, "mmc1_fclk_div", "mmc1_fclk_div"),
|
|
DT_CLK(NULL, "mmc2_fclk_mux", "mmc2_fclk_mux"),
|
|
DT_CLK(NULL, "mmc2_fclk_div", "mmc2_fclk_div"),
|
|
DT_CLK(NULL, "mmc3_gfclk_mux", "mmc3_gfclk_mux"),
|
|
DT_CLK(NULL, "mmc3_gfclk_div", "mmc3_gfclk_div"),
|
|
DT_CLK(NULL, "mmc4_gfclk_mux", "mmc4_gfclk_mux"),
|
|
DT_CLK(NULL, "mmc4_gfclk_div", "mmc4_gfclk_div"),
|
|
DT_CLK(NULL, "qspi_gfclk_mux", "qspi_gfclk_mux"),
|
|
DT_CLK(NULL, "qspi_gfclk_div", "qspi_gfclk_div"),
|
|
DT_CLK(NULL, "timer10_gfclk_mux", "timer10_gfclk_mux"),
|
|
DT_CLK(NULL, "timer11_gfclk_mux", "timer11_gfclk_mux"),
|
|
DT_CLK(NULL, "timer13_gfclk_mux", "timer13_gfclk_mux"),
|
|
DT_CLK(NULL, "timer14_gfclk_mux", "timer14_gfclk_mux"),
|
|
DT_CLK(NULL, "timer15_gfclk_mux", "timer15_gfclk_mux"),
|
|
DT_CLK(NULL, "timer16_gfclk_mux", "timer16_gfclk_mux"),
|
|
DT_CLK(NULL, "timer1_gfclk_mux", "timer1_gfclk_mux"),
|
|
DT_CLK(NULL, "timer2_gfclk_mux", "timer2_gfclk_mux"),
|
|
DT_CLK(NULL, "timer3_gfclk_mux", "timer3_gfclk_mux"),
|
|
DT_CLK(NULL, "timer4_gfclk_mux", "timer4_gfclk_mux"),
|
|
DT_CLK(NULL, "timer5_gfclk_mux", "timer5_gfclk_mux"),
|
|
DT_CLK(NULL, "timer6_gfclk_mux", "timer6_gfclk_mux"),
|
|
DT_CLK(NULL, "timer7_gfclk_mux", "timer7_gfclk_mux"),
|
|
DT_CLK(NULL, "timer8_gfclk_mux", "timer8_gfclk_mux"),
|
|
DT_CLK(NULL, "timer9_gfclk_mux", "timer9_gfclk_mux"),
|
|
DT_CLK(NULL, "uart10_gfclk_mux", "uart10_gfclk_mux"),
|
|
DT_CLK(NULL, "uart1_gfclk_mux", "uart1_gfclk_mux"),
|
|
DT_CLK(NULL, "uart2_gfclk_mux", "uart2_gfclk_mux"),
|
|
DT_CLK(NULL, "uart3_gfclk_mux", "uart3_gfclk_mux"),
|
|
DT_CLK(NULL, "uart4_gfclk_mux", "uart4_gfclk_mux"),
|
|
DT_CLK(NULL, "uart5_gfclk_mux", "uart5_gfclk_mux"),
|
|
DT_CLK(NULL, "uart6_gfclk_mux", "uart6_gfclk_mux"),
|
|
DT_CLK(NULL, "uart7_gfclk_mux", "uart7_gfclk_mux"),
|
|
DT_CLK(NULL, "uart8_gfclk_mux", "uart8_gfclk_mux"),
|
|
DT_CLK(NULL, "uart9_gfclk_mux", "uart9_gfclk_mux"),
|
|
DT_CLK(NULL, "vip1_gclk_mux", "vip1_gclk_mux"),
|
|
DT_CLK(NULL, "vip2_gclk_mux", "vip2_gclk_mux"),
|
|
DT_CLK(NULL, "vip3_gclk_mux", "vip3_gclk_mux"),
|
|
DT_CLK("omap_i2c.1", "ick", "dummy_ck"),
|
|
DT_CLK("omap_i2c.2", "ick", "dummy_ck"),
|
|
DT_CLK("omap_i2c.3", "ick", "dummy_ck"),
|
|
DT_CLK("omap_i2c.4", "ick", "dummy_ck"),
|
|
DT_CLK(NULL, "mailboxes_ick", "dummy_ck"),
|
|
DT_CLK("omap_hsmmc.0", "ick", "dummy_ck"),
|
|
DT_CLK("omap_hsmmc.1", "ick", "dummy_ck"),
|
|
DT_CLK("omap_hsmmc.2", "ick", "dummy_ck"),
|
|
DT_CLK("omap_hsmmc.3", "ick", "dummy_ck"),
|
|
DT_CLK("omap_hsmmc.4", "ick", "dummy_ck"),
|
|
DT_CLK("omap-mcbsp.1", "ick", "dummy_ck"),
|
|
DT_CLK("omap-mcbsp.2", "ick", "dummy_ck"),
|
|
DT_CLK("omap-mcbsp.3", "ick", "dummy_ck"),
|
|
DT_CLK("omap-mcbsp.4", "ick", "dummy_ck"),
|
|
DT_CLK("omap2_mcspi.1", "ick", "dummy_ck"),
|
|
DT_CLK("omap2_mcspi.2", "ick", "dummy_ck"),
|
|
DT_CLK("omap2_mcspi.3", "ick", "dummy_ck"),
|
|
DT_CLK("omap2_mcspi.4", "ick", "dummy_ck"),
|
|
DT_CLK(NULL, "uart1_ick", "dummy_ck"),
|
|
DT_CLK(NULL, "uart2_ick", "dummy_ck"),
|
|
DT_CLK(NULL, "uart3_ick", "dummy_ck"),
|
|
DT_CLK(NULL, "uart4_ick", "dummy_ck"),
|
|
DT_CLK("usbhs_omap", "usbhost_ick", "dummy_ck"),
|
|
DT_CLK("usbhs_omap", "usbtll_fck", "dummy_ck"),
|
|
DT_CLK("omap_wdt", "ick", "dummy_ck"),
|
|
DT_CLK(NULL, "timer_32k_ck", "sys_32k_ck"),
|
|
DT_CLK(NULL, "sys_clkin_ck", "timer_sys_clk_div"),
|
|
DT_CLK("4ae18000.timer", "timer_sys_ck", "timer_sys_clk_div"),
|
|
DT_CLK("48032000.timer", "timer_sys_ck", "timer_sys_clk_div"),
|
|
DT_CLK("48034000.timer", "timer_sys_ck", "timer_sys_clk_div"),
|
|
DT_CLK("48036000.timer", "timer_sys_ck", "timer_sys_clk_div"),
|
|
DT_CLK("4803e000.timer", "timer_sys_ck", "timer_sys_clk_div"),
|
|
DT_CLK("48086000.timer", "timer_sys_ck", "timer_sys_clk_div"),
|
|
DT_CLK("48088000.timer", "timer_sys_ck", "timer_sys_clk_div"),
|
|
DT_CLK("48820000.timer", "timer_sys_ck", "timer_sys_clk_div"),
|
|
DT_CLK("48822000.timer", "timer_sys_ck", "timer_sys_clk_div"),
|
|
DT_CLK("48824000.timer", "timer_sys_ck", "timer_sys_clk_div"),
|
|
DT_CLK("48826000.timer", "timer_sys_ck", "timer_sys_clk_div"),
|
|
DT_CLK("48828000.timer", "timer_sys_ck", "timer_sys_clk_div"),
|
|
DT_CLK("4882a000.timer", "timer_sys_ck", "timer_sys_clk_div"),
|
|
DT_CLK("4882c000.timer", "timer_sys_ck", "timer_sys_clk_div"),
|
|
DT_CLK("4882e000.timer", "timer_sys_ck", "timer_sys_clk_div"),
|
|
DT_CLK(NULL, "sys_clkin", "sys_clkin1"),
|
|
DT_CLK(NULL, "dss_deshdcp_clk", "dss_deshdcp_clk"),
|
|
{ .node_name = NULL },
|
|
};
|
|
|
|
int __init dra7xx_dt_clk_init(void)
|
|
{
|
|
int rc;
|
|
struct clk *dpll_ck, *hdcp_ck;
|
|
|
|
ti_dt_clocks_register(dra7xx_clks);
|
|
|
|
omap2_clk_disable_autoidle_all();
|
|
|
|
dpll_ck = clk_get_sys(NULL, "dpll_gmac_ck");
|
|
rc = clk_set_rate(dpll_ck, DRA7_DPLL_GMAC_DEFFREQ);
|
|
if (rc)
|
|
pr_err("%s: failed to configure GMAC DPLL!\n", __func__);
|
|
|
|
dpll_ck = clk_get_sys(NULL, "dpll_usb_ck");
|
|
rc = clk_set_rate(dpll_ck, DRA7_DPLL_USB_DEFFREQ);
|
|
if (rc)
|
|
pr_err("%s: failed to configure USB DPLL!\n", __func__);
|
|
|
|
dpll_ck = clk_get_sys(NULL, "dpll_usb_m2_ck");
|
|
rc = clk_set_rate(dpll_ck, DRA7_DPLL_USB_DEFFREQ/2);
|
|
if (rc)
|
|
pr_err("%s: failed to set USB_DPLL M2 OUT\n", __func__);
|
|
|
|
hdcp_ck = clk_get_sys(NULL, "dss_deshdcp_clk");
|
|
rc = clk_prepare_enable(hdcp_ck);
|
|
if (rc)
|
|
pr_err("%s: failed to set dss_deshdcp_clk\n", __func__);
|
|
|
|
return rc;
|
|
}
|