2019-05-27 08:55:06 +02:00
// SPDX-License-Identifier: GPL-2.0-or-later
2018-06-15 10:16:51 +08:00
/*
* Copyright ( c ) 2018 Rockchip Electronics Co . Ltd .
* Author : Elaine Zhang < zhangqing @ rock - chips . com >
*/
# include <linux/clk-provider.h>
2019-04-18 15:20:22 -07:00
# include <linux/io.h>
2018-06-15 10:16:51 +08:00
# include <linux/of.h>
# include <linux/of_address.h>
# include <linux/syscore_ops.h>
# include <dt-bindings/clock/px30-cru.h>
# include "clk.h"
# define PX30_GRF_SOC_STATUS0 0x480
enum px30_plls {
apll , dpll , cpll , npll , apll_b_h , apll_b_l ,
} ;
enum px30_pmu_plls {
gpll ,
} ;
static struct rockchip_pll_rate_table px30_pll_rates [ ] = {
/* _mhz, _refdiv, _fbdiv, _postdiv1, _postdiv2, _dsmpd, _frac */
RK3036_PLL_RATE ( 1608000000 , 1 , 67 , 1 , 1 , 1 , 0 ) ,
RK3036_PLL_RATE ( 1584000000 , 1 , 66 , 1 , 1 , 1 , 0 ) ,
RK3036_PLL_RATE ( 1560000000 , 1 , 65 , 1 , 1 , 1 , 0 ) ,
RK3036_PLL_RATE ( 1536000000 , 1 , 64 , 1 , 1 , 1 , 0 ) ,
RK3036_PLL_RATE ( 1512000000 , 1 , 63 , 1 , 1 , 1 , 0 ) ,
RK3036_PLL_RATE ( 1488000000 , 1 , 62 , 1 , 1 , 1 , 0 ) ,
RK3036_PLL_RATE ( 1464000000 , 1 , 61 , 1 , 1 , 1 , 0 ) ,
RK3036_PLL_RATE ( 1440000000 , 1 , 60 , 1 , 1 , 1 , 0 ) ,
RK3036_PLL_RATE ( 1416000000 , 1 , 59 , 1 , 1 , 1 , 0 ) ,
RK3036_PLL_RATE ( 1392000000 , 1 , 58 , 1 , 1 , 1 , 0 ) ,
RK3036_PLL_RATE ( 1368000000 , 1 , 57 , 1 , 1 , 1 , 0 ) ,
RK3036_PLL_RATE ( 1344000000 , 1 , 56 , 1 , 1 , 1 , 0 ) ,
RK3036_PLL_RATE ( 1320000000 , 1 , 55 , 1 , 1 , 1 , 0 ) ,
RK3036_PLL_RATE ( 1296000000 , 1 , 54 , 1 , 1 , 1 , 0 ) ,
RK3036_PLL_RATE ( 1272000000 , 1 , 53 , 1 , 1 , 1 , 0 ) ,
RK3036_PLL_RATE ( 1248000000 , 1 , 52 , 1 , 1 , 1 , 0 ) ,
RK3036_PLL_RATE ( 1200000000 , 1 , 50 , 1 , 1 , 1 , 0 ) ,
RK3036_PLL_RATE ( 1188000000 , 2 , 99 , 1 , 1 , 1 , 0 ) ,
RK3036_PLL_RATE ( 1104000000 , 1 , 46 , 1 , 1 , 1 , 0 ) ,
RK3036_PLL_RATE ( 1100000000 , 12 , 550 , 1 , 1 , 1 , 0 ) ,
RK3036_PLL_RATE ( 1008000000 , 1 , 84 , 2 , 1 , 1 , 0 ) ,
RK3036_PLL_RATE ( 1000000000 , 6 , 500 , 2 , 1 , 1 , 0 ) ,
RK3036_PLL_RATE ( 984000000 , 1 , 82 , 2 , 1 , 1 , 0 ) ,
RK3036_PLL_RATE ( 960000000 , 1 , 80 , 2 , 1 , 1 , 0 ) ,
RK3036_PLL_RATE ( 936000000 , 1 , 78 , 2 , 1 , 1 , 0 ) ,
RK3036_PLL_RATE ( 912000000 , 1 , 76 , 2 , 1 , 1 , 0 ) ,
RK3036_PLL_RATE ( 900000000 , 4 , 300 , 2 , 1 , 1 , 0 ) ,
RK3036_PLL_RATE ( 888000000 , 1 , 74 , 2 , 1 , 1 , 0 ) ,
RK3036_PLL_RATE ( 864000000 , 1 , 72 , 2 , 1 , 1 , 0 ) ,
RK3036_PLL_RATE ( 840000000 , 1 , 70 , 2 , 1 , 1 , 0 ) ,
RK3036_PLL_RATE ( 816000000 , 1 , 68 , 2 , 1 , 1 , 0 ) ,
RK3036_PLL_RATE ( 800000000 , 6 , 400 , 2 , 1 , 1 , 0 ) ,
RK3036_PLL_RATE ( 700000000 , 6 , 350 , 2 , 1 , 1 , 0 ) ,
RK3036_PLL_RATE ( 696000000 , 1 , 58 , 2 , 1 , 1 , 0 ) ,
RK3036_PLL_RATE ( 624000000 , 1 , 52 , 2 , 1 , 1 , 0 ) ,
RK3036_PLL_RATE ( 600000000 , 1 , 75 , 3 , 1 , 1 , 0 ) ,
RK3036_PLL_RATE ( 594000000 , 2 , 99 , 2 , 1 , 1 , 0 ) ,
RK3036_PLL_RATE ( 504000000 , 1 , 63 , 3 , 1 , 1 , 0 ) ,
RK3036_PLL_RATE ( 500000000 , 6 , 250 , 2 , 1 , 1 , 0 ) ,
RK3036_PLL_RATE ( 408000000 , 1 , 68 , 2 , 2 , 1 , 0 ) ,
RK3036_PLL_RATE ( 312000000 , 1 , 52 , 2 , 2 , 1 , 0 ) ,
RK3036_PLL_RATE ( 216000000 , 1 , 72 , 4 , 2 , 1 , 0 ) ,
RK3036_PLL_RATE ( 96000000 , 1 , 64 , 4 , 4 , 1 , 0 ) ,
{ /* sentinel */ } ,
} ;
# define PX30_DIV_ACLKM_MASK 0x7
# define PX30_DIV_ACLKM_SHIFT 12
# define PX30_DIV_PCLK_DBG_MASK 0xf
# define PX30_DIV_PCLK_DBG_SHIFT 8
# define PX30_CLKSEL0(_aclk_core, _pclk_dbg) \
{ \
. reg = PX30_CLKSEL_CON ( 0 ) , \
. val = HIWORD_UPDATE ( _aclk_core , PX30_DIV_ACLKM_MASK , \
PX30_DIV_ACLKM_SHIFT ) | \
HIWORD_UPDATE ( _pclk_dbg , PX30_DIV_PCLK_DBG_MASK , \
PX30_DIV_PCLK_DBG_SHIFT ) , \
}
# define PX30_CPUCLK_RATE(_prate, _aclk_core, _pclk_dbg) \
{ \
. prate = _prate , \
. divs = { \
PX30_CLKSEL0 ( _aclk_core , _pclk_dbg ) , \
} , \
}
static struct rockchip_cpuclk_rate_table px30_cpuclk_rates [ ] __initdata = {
PX30_CPUCLK_RATE ( 1608000000 , 1 , 7 ) ,
PX30_CPUCLK_RATE ( 1584000000 , 1 , 7 ) ,
PX30_CPUCLK_RATE ( 1560000000 , 1 , 7 ) ,
PX30_CPUCLK_RATE ( 1536000000 , 1 , 7 ) ,
PX30_CPUCLK_RATE ( 1512000000 , 1 , 7 ) ,
PX30_CPUCLK_RATE ( 1488000000 , 1 , 5 ) ,
PX30_CPUCLK_RATE ( 1464000000 , 1 , 5 ) ,
PX30_CPUCLK_RATE ( 1440000000 , 1 , 5 ) ,
PX30_CPUCLK_RATE ( 1416000000 , 1 , 5 ) ,
PX30_CPUCLK_RATE ( 1392000000 , 1 , 5 ) ,
PX30_CPUCLK_RATE ( 1368000000 , 1 , 5 ) ,
PX30_CPUCLK_RATE ( 1344000000 , 1 , 5 ) ,
PX30_CPUCLK_RATE ( 1320000000 , 1 , 5 ) ,
PX30_CPUCLK_RATE ( 1296000000 , 1 , 5 ) ,
PX30_CPUCLK_RATE ( 1272000000 , 1 , 5 ) ,
PX30_CPUCLK_RATE ( 1248000000 , 1 , 5 ) ,
PX30_CPUCLK_RATE ( 1224000000 , 1 , 5 ) ,
PX30_CPUCLK_RATE ( 1200000000 , 1 , 5 ) ,
PX30_CPUCLK_RATE ( 1104000000 , 1 , 5 ) ,
PX30_CPUCLK_RATE ( 1008000000 , 1 , 5 ) ,
PX30_CPUCLK_RATE ( 912000000 , 1 , 5 ) ,
PX30_CPUCLK_RATE ( 816000000 , 1 , 3 ) ,
PX30_CPUCLK_RATE ( 696000000 , 1 , 3 ) ,
PX30_CPUCLK_RATE ( 600000000 , 1 , 3 ) ,
PX30_CPUCLK_RATE ( 408000000 , 1 , 1 ) ,
PX30_CPUCLK_RATE ( 312000000 , 1 , 1 ) ,
PX30_CPUCLK_RATE ( 216000000 , 1 , 1 ) ,
PX30_CPUCLK_RATE ( 96000000 , 1 , 1 ) ,
} ;
static const struct rockchip_cpuclk_reg_data px30_cpuclk_data = {
. core_reg = PX30_CLKSEL_CON ( 0 ) ,
. div_core_shift = 0 ,
. div_core_mask = 0xf ,
. mux_core_alt = 1 ,
. mux_core_main = 0 ,
. mux_core_shift = 7 ,
. mux_core_mask = 0x1 ,
} ;
PNAME ( mux_pll_p ) = { " xin24m " } ;
PNAME ( mux_usb480m_p ) = { " xin24m " , " usb480m_phy " , " clk_rtc32k_pmu " } ;
PNAME ( mux_armclk_p ) = { " apll_core " , " gpll_core " } ;
PNAME ( mux_ddrphy_p ) = { " dpll_ddr " , " gpll_ddr " } ;
PNAME ( mux_ddrstdby_p ) = { " clk_ddrphy1x " , " clk_stdby_2wrap " } ;
PNAME ( mux_4plls_p ) = { " gpll " , " dummy_cpll " , " usb480m " , " npll " } ;
PNAME ( mux_cpll_npll_p ) = { " cpll " , " npll " } ;
PNAME ( mux_npll_cpll_p ) = { " npll " , " cpll " } ;
PNAME ( mux_gpll_cpll_p ) = { " gpll " , " dummy_cpll " } ;
PNAME ( mux_gpll_npll_p ) = { " gpll " , " npll " } ;
PNAME ( mux_gpll_xin24m_p ) = { " gpll " , " xin24m " } ;
PNAME ( mux_gpll_cpll_npll_p ) = { " gpll " , " dummy_cpll " , " npll " } ;
PNAME ( mux_gpll_cpll_npll_xin24m_p ) = { " gpll " , " dummy_cpll " , " npll " , " xin24m " } ;
PNAME ( mux_gpll_xin24m_npll_p ) = { " gpll " , " xin24m " , " npll " } ;
PNAME ( mux_pdm_p ) = { " clk_pdm_src " , " clk_pdm_frac " } ;
PNAME ( mux_i2s0_tx_p ) = { " clk_i2s0_tx_src " , " clk_i2s0_tx_frac " , " mclk_i2s0_tx_in " , " xin12m " } ;
PNAME ( mux_i2s0_rx_p ) = { " clk_i2s0_rx_src " , " clk_i2s0_rx_frac " , " mclk_i2s0_rx_in " , " xin12m " } ;
PNAME ( mux_i2s1_p ) = { " clk_i2s1_src " , " clk_i2s1_frac " , " i2s1_clkin " , " xin12m " } ;
PNAME ( mux_i2s2_p ) = { " clk_i2s2_src " , " clk_i2s2_frac " , " i2s2_clkin " , " xin12m " } ;
PNAME ( mux_i2s0_tx_out_p ) = { " clk_i2s0_tx " , " xin12m " , " clk_i2s0_rx " } ;
PNAME ( mux_i2s0_rx_out_p ) = { " clk_i2s0_rx " , " xin12m " , " clk_i2s0_tx " } ;
PNAME ( mux_i2s1_out_p ) = { " clk_i2s1 " , " xin12m " } ;
PNAME ( mux_i2s2_out_p ) = { " clk_i2s2 " , " xin12m " } ;
PNAME ( mux_i2s0_tx_rx_p ) = { " clk_i2s0_tx_mux " , " clk_i2s0_rx_mux " } ;
PNAME ( mux_i2s0_rx_tx_p ) = { " clk_i2s0_rx_mux " , " clk_i2s0_tx_mux " } ;
PNAME ( mux_uart_src_p ) = { " gpll " , " xin24m " , " usb480m " , " npll " } ;
PNAME ( mux_uart1_p ) = { " clk_uart1_src " , " clk_uart1_np5 " , " clk_uart1_frac " } ;
PNAME ( mux_uart2_p ) = { " clk_uart2_src " , " clk_uart2_np5 " , " clk_uart2_frac " } ;
PNAME ( mux_uart3_p ) = { " clk_uart3_src " , " clk_uart3_np5 " , " clk_uart3_frac " } ;
PNAME ( mux_uart4_p ) = { " clk_uart4_src " , " clk_uart4_np5 " , " clk_uart4_frac " } ;
PNAME ( mux_uart5_p ) = { " clk_uart5_src " , " clk_uart5_np5 " , " clk_uart5_frac " } ;
PNAME ( mux_cif_out_p ) = { " xin24m " , " dummy_cpll " , " npll " , " usb480m " } ;
PNAME ( mux_dclk_vopb_p ) = { " dclk_vopb_src " , " dclk_vopb_frac " , " xin24m " } ;
PNAME ( mux_dclk_vopl_p ) = { " dclk_vopl_src " , " dclk_vopl_frac " , " xin24m " } ;
PNAME ( mux_gmac_p ) = { " clk_gmac_src " , " gmac_clkin " } ;
PNAME ( mux_gmac_rmii_sel_p ) = { " clk_gmac_rx_tx_div20 " , " clk_gmac_rx_tx_div2 " } ;
PNAME ( mux_rtc32k_pmu_p ) = { " xin32k " , " pmu_pvtm_32k " , " clk_rtc32k_frac " , } ;
PNAME ( mux_wifi_pmu_p ) = { " xin24m " , " clk_wifi_pmu_src " } ;
PNAME ( mux_uart0_pmu_p ) = { " clk_uart0_pmu_src " , " clk_uart0_np5 " , " clk_uart0_frac " } ;
PNAME ( mux_usbphy_ref_p ) = { " xin24m " , " clk_ref24m_pmu " } ;
PNAME ( mux_mipidsiphy_ref_p ) = { " xin24m " , " clk_ref24m_pmu " } ;
PNAME ( mux_gpu_p ) = { " clk_gpu_div " , " clk_gpu_np5 " } ;
static struct rockchip_pll_clock px30_pll_clks [ ] __initdata = {
[ apll ] = PLL ( pll_rk3328 , PLL_APLL , " apll " , mux_pll_p ,
0 , PX30_PLL_CON ( 0 ) ,
PX30_MODE_CON , 0 , 0 , 0 , px30_pll_rates ) ,
[ dpll ] = PLL ( pll_rk3328 , PLL_DPLL , " dpll " , mux_pll_p ,
0 , PX30_PLL_CON ( 8 ) ,
PX30_MODE_CON , 4 , 1 , 0 , NULL ) ,
[ cpll ] = PLL ( pll_rk3328 , PLL_CPLL , " cpll " , mux_pll_p ,
0 , PX30_PLL_CON ( 16 ) ,
PX30_MODE_CON , 2 , 2 , 0 , px30_pll_rates ) ,
[ npll ] = PLL ( pll_rk3328 , PLL_NPLL , " npll " , mux_pll_p ,
0 , PX30_PLL_CON ( 24 ) ,
PX30_MODE_CON , 6 , 4 , 0 , px30_pll_rates ) ,
} ;
static struct rockchip_pll_clock px30_pmu_pll_clks [ ] __initdata = {
[ gpll ] = PLL ( pll_rk3328 , PLL_GPLL , " gpll " , mux_pll_p , 0 , PX30_PMU_PLL_CON ( 0 ) ,
PX30_PMU_MODE , 0 , 3 , 0 , px30_pll_rates ) ,
} ;
# define MFLAGS CLK_MUX_HIWORD_MASK
# define DFLAGS CLK_DIVIDER_HIWORD_MASK
# define GFLAGS (CLK_GATE_HIWORD_MASK | CLK_GATE_SET_TO_DISABLE)
static struct rockchip_clk_branch px30_pdm_fracmux __initdata =
MUX ( 0 , " clk_pdm_mux " , mux_pdm_p , CLK_SET_RATE_PARENT ,
PX30_CLKSEL_CON ( 26 ) , 15 , 1 , MFLAGS ) ;
static struct rockchip_clk_branch px30_i2s0_tx_fracmux __initdata =
MUX ( 0 , " clk_i2s0_tx_mux " , mux_i2s0_tx_p , CLK_SET_RATE_PARENT ,
PX30_CLKSEL_CON ( 28 ) , 10 , 2 , MFLAGS ) ;
static struct rockchip_clk_branch px30_i2s0_rx_fracmux __initdata =
MUX ( 0 , " clk_i2s0_rx_mux " , mux_i2s0_rx_p , CLK_SET_RATE_PARENT ,
PX30_CLKSEL_CON ( 58 ) , 10 , 2 , MFLAGS ) ;
static struct rockchip_clk_branch px30_i2s1_fracmux __initdata =
MUX ( 0 , " clk_i2s1_mux " , mux_i2s1_p , CLK_SET_RATE_PARENT ,
PX30_CLKSEL_CON ( 30 ) , 10 , 2 , MFLAGS ) ;
static struct rockchip_clk_branch px30_i2s2_fracmux __initdata =
MUX ( 0 , " clk_i2s2_mux " , mux_i2s2_p , CLK_SET_RATE_PARENT ,
PX30_CLKSEL_CON ( 32 ) , 10 , 2 , MFLAGS ) ;
static struct rockchip_clk_branch px30_uart1_fracmux __initdata =
MUX ( 0 , " clk_uart1_mux " , mux_uart1_p , CLK_SET_RATE_PARENT ,
PX30_CLKSEL_CON ( 35 ) , 14 , 2 , MFLAGS ) ;
static struct rockchip_clk_branch px30_uart2_fracmux __initdata =
MUX ( 0 , " clk_uart2_mux " , mux_uart2_p , CLK_SET_RATE_PARENT ,
PX30_CLKSEL_CON ( 38 ) , 14 , 2 , MFLAGS ) ;
static struct rockchip_clk_branch px30_uart3_fracmux __initdata =
MUX ( 0 , " clk_uart3_mux " , mux_uart3_p , CLK_SET_RATE_PARENT ,
PX30_CLKSEL_CON ( 41 ) , 14 , 2 , MFLAGS ) ;
static struct rockchip_clk_branch px30_uart4_fracmux __initdata =
MUX ( 0 , " clk_uart4_mux " , mux_uart4_p , CLK_SET_RATE_PARENT ,
PX30_CLKSEL_CON ( 44 ) , 14 , 2 , MFLAGS ) ;
static struct rockchip_clk_branch px30_uart5_fracmux __initdata =
MUX ( 0 , " clk_uart5_mux " , mux_uart5_p , CLK_SET_RATE_PARENT ,
PX30_CLKSEL_CON ( 47 ) , 14 , 2 , MFLAGS ) ;
static struct rockchip_clk_branch px30_dclk_vopb_fracmux __initdata =
MUX ( 0 , " dclk_vopb_mux " , mux_dclk_vopb_p , CLK_SET_RATE_PARENT ,
PX30_CLKSEL_CON ( 5 ) , 14 , 2 , MFLAGS ) ;
static struct rockchip_clk_branch px30_dclk_vopl_fracmux __initdata =
MUX ( 0 , " dclk_vopl_mux " , mux_dclk_vopl_p , CLK_SET_RATE_PARENT ,
PX30_CLKSEL_CON ( 8 ) , 14 , 2 , MFLAGS ) ;
static struct rockchip_clk_branch px30_rtc32k_pmu_fracmux __initdata =
MUX ( SCLK_RTC32K_PMU , " clk_rtc32k_pmu " , mux_rtc32k_pmu_p , CLK_SET_RATE_PARENT ,
PX30_PMU_CLKSEL_CON ( 0 ) , 14 , 2 , MFLAGS ) ;
static struct rockchip_clk_branch px30_uart0_pmu_fracmux __initdata =
MUX ( 0 , " clk_uart0_pmu_mux " , mux_uart0_pmu_p , CLK_SET_RATE_PARENT ,
PX30_PMU_CLKSEL_CON ( 4 ) , 14 , 2 , MFLAGS ) ;
static struct rockchip_clk_branch px30_clk_branches [ ] __initdata = {
/*
* Clock - Architecture Diagram 1
*/
MUX ( USB480M , " usb480m " , mux_usb480m_p , CLK_SET_RATE_PARENT ,
PX30_MODE_CON , 8 , 2 , MFLAGS ) ,
FACTOR ( 0 , " xin12m " , " xin24m " , 0 , 1 , 2 ) ,
/*
* Clock - Architecture Diagram 3
*/
/* PD_CORE */
GATE ( 0 , " apll_core " , " apll " , CLK_IGNORE_UNUSED ,
PX30_CLKGATE_CON ( 0 ) , 0 , GFLAGS ) ,
GATE ( 0 , " gpll_core " , " gpll " , CLK_IGNORE_UNUSED ,
PX30_CLKGATE_CON ( 0 ) , 0 , GFLAGS ) ,
COMPOSITE_NOMUX ( 0 , " pclk_dbg " , " armclk " , CLK_IGNORE_UNUSED ,
PX30_CLKSEL_CON ( 0 ) , 8 , 4 , DFLAGS | CLK_DIVIDER_READ_ONLY ,
PX30_CLKGATE_CON ( 0 ) , 2 , GFLAGS ) ,
COMPOSITE_NOMUX ( 0 , " aclk_core " , " armclk " , CLK_IGNORE_UNUSED ,
PX30_CLKSEL_CON ( 0 ) , 12 , 3 , DFLAGS | CLK_DIVIDER_READ_ONLY ,
PX30_CLKGATE_CON ( 0 ) , 1 , GFLAGS ) ,
GATE ( 0 , " aclk_core_niu " , " aclk_core " , CLK_IGNORE_UNUSED ,
PX30_CLKGATE_CON ( 0 ) , 4 , GFLAGS ) ,
GATE ( 0 , " aclk_core_prf " , " aclk_core " , CLK_IGNORE_UNUSED ,
PX30_CLKGATE_CON ( 17 ) , 5 , GFLAGS ) ,
GATE ( 0 , " pclk_dbg_niu " , " pclk_dbg " , CLK_IGNORE_UNUSED ,
PX30_CLKGATE_CON ( 0 ) , 5 , GFLAGS ) ,
GATE ( 0 , " pclk_core_dbg " , " pclk_dbg " , CLK_IGNORE_UNUSED ,
PX30_CLKGATE_CON ( 0 ) , 6 , GFLAGS ) ,
GATE ( 0 , " pclk_core_grf " , " pclk_dbg " , CLK_IGNORE_UNUSED ,
PX30_CLKGATE_CON ( 17 ) , 6 , GFLAGS ) ,
GATE ( 0 , " clk_jtag " , " jtag_clkin " , CLK_IGNORE_UNUSED ,
PX30_CLKGATE_CON ( 0 ) , 3 , GFLAGS ) ,
GATE ( SCLK_PVTM , " clk_pvtm " , " xin24m " , 0 ,
PX30_CLKGATE_CON ( 17 ) , 4 , GFLAGS ) ,
/* PD_GPU */
COMPOSITE_NODIV ( 0 , " clk_gpu_src " , mux_4plls_p , 0 ,
PX30_CLKSEL_CON ( 1 ) , 6 , 2 , MFLAGS ,
PX30_CLKGATE_CON ( 0 ) , 8 , GFLAGS ) ,
COMPOSITE_NOMUX ( 0 , " clk_gpu_div " , " clk_gpu_src " , 0 ,
PX30_CLKSEL_CON ( 1 ) , 0 , 4 , DFLAGS ,
PX30_CLKGATE_CON ( 0 ) , 12 , GFLAGS ) ,
COMPOSITE_NOMUX_HALFDIV ( 0 , " clk_gpu_np5 " , " clk_gpu_src " , 0 ,
PX30_CLKSEL_CON ( 1 ) , 8 , 4 , DFLAGS ,
PX30_CLKGATE_CON ( 0 ) , 9 , GFLAGS ) ,
COMPOSITE_NODIV ( SCLK_GPU , " clk_gpu " , mux_gpu_p , CLK_SET_RATE_PARENT ,
PX30_CLKSEL_CON ( 1 ) , 15 , 1 , MFLAGS ,
PX30_CLKGATE_CON ( 0 ) , 10 , GFLAGS ) ,
COMPOSITE_NOMUX ( 0 , " aclk_gpu " , " clk_gpu " , CLK_IGNORE_UNUSED ,
PX30_CLKSEL_CON ( 1 ) , 13 , 2 , DFLAGS ,
PX30_CLKGATE_CON ( 17 ) , 10 , GFLAGS ) ,
GATE ( 0 , " aclk_gpu_niu " , " aclk_gpu " , CLK_IGNORE_UNUSED ,
PX30_CLKGATE_CON ( 0 ) , 11 , GFLAGS ) ,
GATE ( 0 , " aclk_gpu_prf " , " aclk_gpu " , CLK_IGNORE_UNUSED ,
PX30_CLKGATE_CON ( 17 ) , 8 , GFLAGS ) ,
GATE ( 0 , " pclk_gpu_grf " , " aclk_gpu " , CLK_IGNORE_UNUSED ,
PX30_CLKGATE_CON ( 17 ) , 9 , GFLAGS ) ,
/*
* Clock - Architecture Diagram 4
*/
/* PD_DDR */
GATE ( 0 , " dpll_ddr " , " dpll " , CLK_IGNORE_UNUSED ,
PX30_CLKGATE_CON ( 0 ) , 7 , GFLAGS ) ,
GATE ( 0 , " gpll_ddr " , " gpll " , CLK_IGNORE_UNUSED ,
PX30_CLKGATE_CON ( 0 ) , 13 , GFLAGS ) ,
COMPOSITE_NOGATE ( SCLK_DDRCLK , " sclk_ddrc " , mux_ddrphy_p , CLK_IGNORE_UNUSED ,
PX30_CLKSEL_CON ( 2 ) , 7 , 1 , MFLAGS , 0 , 3 , DFLAGS | CLK_DIVIDER_POWER_OF_TWO ) ,
COMPOSITE_NOGATE ( 0 , " clk_ddrphy4x " , mux_ddrphy_p , CLK_IGNORE_UNUSED ,
PX30_CLKSEL_CON ( 2 ) , 7 , 1 , MFLAGS , 0 , 3 , DFLAGS ) ,
FACTOR_GATE ( 0 , " clk_ddrphy1x " , " clk_ddrphy4x " , CLK_IGNORE_UNUSED , 1 , 4 ,
PX30_CLKGATE_CON ( 0 ) , 14 , GFLAGS ) ,
FACTOR_GATE ( 0 , " clk_stdby_2wrap " , " clk_ddrphy4x " , CLK_IGNORE_UNUSED , 1 , 4 ,
PX30_CLKGATE_CON ( 1 ) , 0 , GFLAGS ) ,
COMPOSITE_NODIV ( 0 , " clk_ddrstdby " , mux_ddrstdby_p , CLK_IGNORE_UNUSED ,
PX30_CLKSEL_CON ( 2 ) , 4 , 1 , MFLAGS ,
PX30_CLKGATE_CON ( 1 ) , 13 , GFLAGS ) ,
GATE ( 0 , " aclk_split " , " clk_ddrphy1x " , CLK_IGNORE_UNUSED ,
PX30_CLKGATE_CON ( 1 ) , 15 , GFLAGS ) ,
GATE ( 0 , " clk_msch " , " clk_ddrphy1x " , CLK_IGNORE_UNUSED ,
PX30_CLKGATE_CON ( 1 ) , 8 , GFLAGS ) ,
GATE ( 0 , " aclk_ddrc " , " clk_ddrphy1x " , CLK_IGNORE_UNUSED ,
PX30_CLKGATE_CON ( 1 ) , 5 , GFLAGS ) ,
GATE ( 0 , " clk_core_ddrc " , " clk_ddrphy1x " , CLK_IGNORE_UNUSED ,
PX30_CLKGATE_CON ( 1 ) , 6 , GFLAGS ) ,
GATE ( 0 , " aclk_cmd_buff " , " clk_ddrphy1x " , CLK_IGNORE_UNUSED ,
PX30_CLKGATE_CON ( 1 ) , 6 , GFLAGS ) ,
GATE ( 0 , " clk_ddrmon " , " clk_ddrphy1x " , CLK_IGNORE_UNUSED ,
PX30_CLKGATE_CON ( 1 ) , 11 , GFLAGS ) ,
GATE ( 0 , " clk_ddrmon_timer " , " xin24m " , CLK_IGNORE_UNUSED ,
PX30_CLKGATE_CON ( 0 ) , 15 , GFLAGS ) ,
COMPOSITE_NOMUX ( PCLK_DDR , " pclk_ddr " , " gpll " , CLK_IGNORE_UNUSED ,
PX30_CLKSEL_CON ( 2 ) , 8 , 5 , DFLAGS ,
PX30_CLKGATE_CON ( 1 ) , 1 , GFLAGS ) ,
GATE ( 0 , " pclk_ddrmon " , " pclk_ddr " , CLK_IGNORE_UNUSED ,
PX30_CLKGATE_CON ( 1 ) , 10 , GFLAGS ) ,
GATE ( 0 , " pclk_ddrc " , " pclk_ddr " , CLK_IGNORE_UNUSED ,
PX30_CLKGATE_CON ( 1 ) , 7 , GFLAGS ) ,
GATE ( 0 , " pclk_msch " , " pclk_ddr " , CLK_IGNORE_UNUSED ,
PX30_CLKGATE_CON ( 1 ) , 9 , GFLAGS ) ,
GATE ( 0 , " pclk_stdby " , " pclk_ddr " , CLK_IGNORE_UNUSED ,
PX30_CLKGATE_CON ( 1 ) , 12 , GFLAGS ) ,
GATE ( 0 , " pclk_ddr_grf " , " pclk_ddr " , CLK_IGNORE_UNUSED ,
PX30_CLKGATE_CON ( 1 ) , 14 , GFLAGS ) ,
GATE ( 0 , " pclk_cmdbuff " , " pclk_ddr " , CLK_IGNORE_UNUSED ,
PX30_CLKGATE_CON ( 1 ) , 3 , GFLAGS ) ,
/*
* Clock - Architecture Diagram 5
*/
/* PD_VI */
COMPOSITE ( ACLK_VI_PRE , " aclk_vi_pre " , mux_gpll_cpll_npll_p , 0 ,
PX30_CLKSEL_CON ( 11 ) , 6 , 2 , MFLAGS , 0 , 5 , DFLAGS ,
PX30_CLKGATE_CON ( 4 ) , 8 , GFLAGS ) ,
COMPOSITE_NOMUX ( HCLK_VI_PRE , " hclk_vi_pre " , " aclk_vi_pre " , 0 ,
PX30_CLKSEL_CON ( 11 ) , 8 , 4 , DFLAGS ,
PX30_CLKGATE_CON ( 4 ) , 12 , GFLAGS ) ,
COMPOSITE ( SCLK_ISP , " clk_isp " , mux_gpll_cpll_npll_p , 0 ,
PX30_CLKSEL_CON ( 12 ) , 6 , 2 , MFLAGS , 0 , 5 , DFLAGS ,
PX30_CLKGATE_CON ( 4 ) , 9 , GFLAGS ) ,
COMPOSITE ( SCLK_CIF_OUT , " clk_cif_out " , mux_cif_out_p , 0 ,
PX30_CLKSEL_CON ( 13 ) , 6 , 2 , MFLAGS , 0 , 6 , DFLAGS ,
PX30_CLKGATE_CON ( 4 ) , 11 , GFLAGS ) ,
GATE ( PCLK_ISP , " pclkin_isp " , " ext_pclkin " , 0 ,
PX30_CLKGATE_CON ( 4 ) , 13 , GFLAGS ) ,
GATE ( PCLK_CIF , " pclkin_cif " , " ext_pclkin " , 0 ,
PX30_CLKGATE_CON ( 4 ) , 14 , GFLAGS ) ,
/*
* Clock - Architecture Diagram 6
*/
/* PD_VO */
COMPOSITE ( ACLK_VO_PRE , " aclk_vo_pre " , mux_gpll_cpll_npll_p , 0 ,
PX30_CLKSEL_CON ( 3 ) , 6 , 2 , MFLAGS , 0 , 5 , DFLAGS ,
PX30_CLKGATE_CON ( 2 ) , 0 , GFLAGS ) ,
COMPOSITE_NOMUX ( HCLK_VO_PRE , " hclk_vo_pre " , " aclk_vo_pre " , 0 ,
PX30_CLKSEL_CON ( 3 ) , 8 , 4 , DFLAGS ,
PX30_CLKGATE_CON ( 2 ) , 12 , GFLAGS ) ,
COMPOSITE_NOMUX ( PCLK_VO_PRE , " pclk_vo_pre " , " aclk_vo_pre " , 0 ,
PX30_CLKSEL_CON ( 3 ) , 12 , 4 , DFLAGS ,
PX30_CLKGATE_CON ( 2 ) , 13 , GFLAGS ) ,
COMPOSITE ( SCLK_RGA_CORE , " clk_rga_core " , mux_gpll_cpll_npll_p , 0 ,
PX30_CLKSEL_CON ( 4 ) , 6 , 2 , MFLAGS , 0 , 5 , DFLAGS ,
PX30_CLKGATE_CON ( 2 ) , 1 , GFLAGS ) ,
COMPOSITE ( SCLK_VOPB_PWM , " clk_vopb_pwm " , mux_gpll_xin24m_p , 0 ,
PX30_CLKSEL_CON ( 7 ) , 7 , 1 , MFLAGS , 0 , 7 , DFLAGS ,
PX30_CLKGATE_CON ( 2 ) , 5 , GFLAGS ) ,
COMPOSITE ( 0 , " dclk_vopb_src " , mux_cpll_npll_p , CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT ,
PX30_CLKSEL_CON ( 5 ) , 11 , 1 , MFLAGS , 0 , 8 , DFLAGS ,
PX30_CLKGATE_CON ( 2 ) , 2 , GFLAGS ) ,
COMPOSITE_FRACMUX ( 0 , " dclk_vopb_frac " , " dclk_vopb_src " , CLK_SET_RATE_PARENT ,
PX30_CLKSEL_CON ( 6 ) , 0 ,
PX30_CLKGATE_CON ( 2 ) , 3 , GFLAGS ,
& px30_dclk_vopb_fracmux ) ,
GATE ( DCLK_VOPB , " dclk_vopb " , " dclk_vopb_mux " , CLK_SET_RATE_PARENT ,
PX30_CLKGATE_CON ( 2 ) , 4 , GFLAGS ) ,
COMPOSITE ( 0 , " dclk_vopl_src " , mux_npll_cpll_p , 0 ,
PX30_CLKSEL_CON ( 8 ) , 11 , 1 , MFLAGS , 0 , 8 , DFLAGS ,
PX30_CLKGATE_CON ( 2 ) , 6 , GFLAGS ) ,
COMPOSITE_FRACMUX ( 0 , " dclk_vopl_frac " , " dclk_vopl_src " , CLK_SET_RATE_PARENT ,
PX30_CLKSEL_CON ( 9 ) , 0 ,
PX30_CLKGATE_CON ( 2 ) , 7 , GFLAGS ,
& px30_dclk_vopl_fracmux ) ,
GATE ( DCLK_VOPL , " dclk_vopl " , " dclk_vopl_mux " , CLK_SET_RATE_PARENT ,
PX30_CLKGATE_CON ( 2 ) , 8 , GFLAGS ) ,
/* PD_VPU */
COMPOSITE ( 0 , " aclk_vpu_pre " , mux_gpll_cpll_npll_p , 0 ,
PX30_CLKSEL_CON ( 10 ) , 6 , 2 , MFLAGS , 0 , 5 , DFLAGS ,
PX30_CLKGATE_CON ( 4 ) , 0 , GFLAGS ) ,
COMPOSITE_NOMUX ( 0 , " hclk_vpu_pre " , " aclk_vpu_pre " , 0 ,
PX30_CLKSEL_CON ( 10 ) , 8 , 4 , DFLAGS ,
PX30_CLKGATE_CON ( 4 ) , 2 , GFLAGS ) ,
COMPOSITE ( SCLK_CORE_VPU , " sclk_core_vpu " , mux_gpll_cpll_npll_p , 0 ,
PX30_CLKSEL_CON ( 13 ) , 14 , 2 , MFLAGS , 8 , 5 , DFLAGS ,
PX30_CLKGATE_CON ( 4 ) , 1 , GFLAGS ) ,
/*
* Clock - Architecture Diagram 7
*/
COMPOSITE_NODIV ( ACLK_PERI_SRC , " aclk_peri_src " , mux_gpll_cpll_p , 0 ,
PX30_CLKSEL_CON ( 14 ) , 15 , 1 , MFLAGS ,
PX30_CLKGATE_CON ( 5 ) , 7 , GFLAGS ) ,
COMPOSITE_NOMUX ( ACLK_PERI_PRE , " aclk_peri_pre " , " aclk_peri_src " , CLK_IGNORE_UNUSED ,
PX30_CLKSEL_CON ( 14 ) , 0 , 5 , DFLAGS ,
PX30_CLKGATE_CON ( 5 ) , 8 , GFLAGS ) ,
DIV ( HCLK_PERI_PRE , " hclk_peri_pre " , " aclk_peri_src " , CLK_IGNORE_UNUSED ,
PX30_CLKSEL_CON ( 14 ) , 8 , 5 , DFLAGS ) ,
/* PD_MMC_NAND */
GATE ( HCLK_MMC_NAND , " hclk_mmc_nand " , " hclk_peri_pre " , 0 ,
PX30_CLKGATE_CON ( 6 ) , 0 , GFLAGS ) ,
COMPOSITE ( SCLK_NANDC , " clk_nandc " , mux_gpll_cpll_npll_p , 0 ,
PX30_CLKSEL_CON ( 15 ) , 6 , 2 , MFLAGS , 0 , 5 , DFLAGS ,
PX30_CLKGATE_CON ( 5 ) , 13 , GFLAGS ) ,
COMPOSITE ( SCLK_SDIO , " clk_sdio " , mux_gpll_cpll_npll_xin24m_p , 0 ,
PX30_CLKSEL_CON ( 18 ) , 14 , 2 , MFLAGS , 0 , 8 , DFLAGS ,
PX30_CLKGATE_CON ( 6 ) , 3 , GFLAGS ) ,
COMPOSITE ( SCLK_EMMC , " clk_emmc " , mux_gpll_cpll_npll_xin24m_p , 0 ,
PX30_CLKSEL_CON ( 20 ) , 14 , 2 , MFLAGS , 0 , 8 , DFLAGS ,
PX30_CLKGATE_CON ( 6 ) , 6 , GFLAGS ) ,
COMPOSITE ( SCLK_SFC , " clk_sfc " , mux_gpll_cpll_p , 0 ,
PX30_CLKSEL_CON ( 22 ) , 7 , 1 , MFLAGS , 0 , 7 , DFLAGS ,
PX30_CLKGATE_CON ( 6 ) , 7 , GFLAGS ) ,
MMC ( SCLK_SDMMC_DRV , " sdmmc_drv " , " clk_sdmmc " ,
PX30_SDMMC_CON0 , 1 ) ,
MMC ( SCLK_SDMMC_SAMPLE , " sdmmc_sample " , " clk_sdmmc " ,
PX30_SDMMC_CON1 , 1 ) ,
MMC ( SCLK_SDIO_DRV , " sdio_drv " , " clk_sdio " ,
PX30_SDIO_CON0 , 1 ) ,
MMC ( SCLK_SDIO_SAMPLE , " sdio_sample " , " clk_sdio " ,
PX30_SDIO_CON1 , 1 ) ,
MMC ( SCLK_EMMC_DRV , " emmc_drv " , " clk_emmc " ,
PX30_EMMC_CON0 , 1 ) ,
MMC ( SCLK_EMMC_SAMPLE , " emmc_sample " , " clk_emmc " ,
PX30_EMMC_CON1 , 1 ) ,
/* PD_SDCARD */
GATE ( 0 , " hclk_sdmmc_pre " , " hclk_peri_pre " , 0 ,
PX30_CLKGATE_CON ( 6 ) , 12 , GFLAGS ) ,
COMPOSITE ( SCLK_SDMMC , " clk_sdmmc " , mux_gpll_cpll_npll_xin24m_p , 0 ,
PX30_CLKSEL_CON ( 16 ) , 14 , 2 , MFLAGS , 0 , 8 , DFLAGS ,
PX30_CLKGATE_CON ( 6 ) , 15 , GFLAGS ) ,
/* PD_USB */
GATE ( HCLK_USB , " hclk_usb " , " hclk_peri_pre " , 0 ,
PX30_CLKGATE_CON ( 7 ) , 2 , GFLAGS ) ,
GATE ( SCLK_OTG_ADP , " clk_otg_adp " , " clk_rtc32k_pmu " , 0 ,
PX30_CLKGATE_CON ( 7 ) , 3 , GFLAGS ) ,
/* PD_GMAC */
COMPOSITE ( SCLK_GMAC_SRC , " clk_gmac_src " , mux_gpll_cpll_npll_p , 0 ,
PX30_CLKSEL_CON ( 22 ) , 14 , 2 , MFLAGS , 8 , 5 , DFLAGS ,
PX30_CLKGATE_CON ( 7 ) , 11 , GFLAGS ) ,
MUX ( SCLK_GMAC , " clk_gmac " , mux_gmac_p , CLK_SET_RATE_PARENT ,
PX30_CLKSEL_CON ( 23 ) , 6 , 1 , MFLAGS ) ,
GATE ( SCLK_MAC_REF , " clk_mac_ref " , " clk_gmac " , 0 ,
PX30_CLKGATE_CON ( 7 ) , 15 , GFLAGS ) ,
GATE ( SCLK_GMAC_RX_TX , " clk_gmac_rx_tx " , " clk_gmac " , 0 ,
PX30_CLKGATE_CON ( 7 ) , 13 , GFLAGS ) ,
FACTOR ( 0 , " clk_gmac_rx_tx_div2 " , " clk_gmac_rx_tx " , 0 , 1 , 2 ) ,
FACTOR ( 0 , " clk_gmac_rx_tx_div20 " , " clk_gmac_rx_tx " , 0 , 1 , 20 ) ,
MUX ( SCLK_GMAC_RMII , " clk_gmac_rmii_sel " , mux_gmac_rmii_sel_p , CLK_SET_RATE_PARENT ,
PX30_CLKSEL_CON ( 23 ) , 7 , 1 , MFLAGS ) ,
GATE ( 0 , " aclk_gmac_pre " , " aclk_peri_pre " , 0 ,
PX30_CLKGATE_CON ( 7 ) , 10 , GFLAGS ) ,
COMPOSITE_NOMUX ( 0 , " pclk_gmac_pre " , " aclk_gmac_pre " , 0 ,
PX30_CLKSEL_CON ( 23 ) , 0 , 4 , DFLAGS ,
PX30_CLKGATE_CON ( 7 ) , 12 , GFLAGS ) ,
COMPOSITE ( SCLK_MAC_OUT , " clk_mac_out " , mux_gpll_cpll_npll_p , 0 ,
PX30_CLKSEL_CON ( 12 ) , 14 , 2 , MFLAGS , 8 , 5 , DFLAGS ,
PX30_CLKGATE_CON ( 8 ) , 5 , GFLAGS ) ,
/*
* Clock - Architecture Diagram 8
*/
/* PD_BUS */
COMPOSITE_NODIV ( ACLK_BUS_SRC , " aclk_bus_src " , mux_gpll_cpll_p , CLK_IGNORE_UNUSED ,
PX30_CLKSEL_CON ( 23 ) , 15 , 1 , MFLAGS ,
PX30_CLKGATE_CON ( 8 ) , 6 , GFLAGS ) ,
COMPOSITE_NOMUX ( HCLK_BUS_PRE , " hclk_bus_pre " , " aclk_bus_src " , CLK_IGNORE_UNUSED ,
PX30_CLKSEL_CON ( 24 ) , 0 , 5 , DFLAGS ,
PX30_CLKGATE_CON ( 8 ) , 8 , GFLAGS ) ,
COMPOSITE_NOMUX ( ACLK_BUS_PRE , " aclk_bus_pre " , " aclk_bus_src " , CLK_IGNORE_UNUSED ,
PX30_CLKSEL_CON ( 23 ) , 8 , 5 , DFLAGS ,
PX30_CLKGATE_CON ( 8 ) , 7 , GFLAGS ) ,
COMPOSITE_NOMUX ( PCLK_BUS_PRE , " pclk_bus_pre " , " aclk_bus_pre " , CLK_IGNORE_UNUSED ,
PX30_CLKSEL_CON ( 24 ) , 8 , 2 , DFLAGS ,
PX30_CLKGATE_CON ( 8 ) , 9 , GFLAGS ) ,
GATE ( 0 , " pclk_top_pre " , " pclk_bus_pre " , CLK_IGNORE_UNUSED ,
PX30_CLKGATE_CON ( 8 ) , 10 , GFLAGS ) ,
COMPOSITE ( 0 , " clk_pdm_src " , mux_gpll_xin24m_npll_p , 0 ,
PX30_CLKSEL_CON ( 26 ) , 8 , 2 , MFLAGS , 0 , 7 , DFLAGS ,
PX30_CLKGATE_CON ( 9 ) , 9 , GFLAGS ) ,
COMPOSITE_FRACMUX ( 0 , " clk_pdm_frac " , " clk_pdm_src " , CLK_SET_RATE_PARENT ,
PX30_CLKSEL_CON ( 27 ) , 0 ,
PX30_CLKGATE_CON ( 9 ) , 10 , GFLAGS ,
& px30_pdm_fracmux ) ,
GATE ( SCLK_PDM , " clk_pdm " , " clk_pdm_mux " , CLK_SET_RATE_PARENT ,
PX30_CLKGATE_CON ( 9 ) , 11 , GFLAGS ) ,
COMPOSITE ( 0 , " clk_i2s0_tx_src " , mux_gpll_npll_p , 0 ,
PX30_CLKSEL_CON ( 28 ) , 8 , 1 , MFLAGS , 0 , 7 , DFLAGS ,
PX30_CLKGATE_CON ( 9 ) , 12 , GFLAGS ) ,
COMPOSITE_FRACMUX ( 0 , " clk_i2s0_tx_frac " , " clk_i2s0_tx_src " , CLK_SET_RATE_PARENT ,
PX30_CLKSEL_CON ( 29 ) , 0 ,
PX30_CLKGATE_CON ( 9 ) , 13 , GFLAGS ,
& px30_i2s0_tx_fracmux ) ,
COMPOSITE_NODIV ( SCLK_I2S0_TX , " clk_i2s0_tx " , mux_i2s0_tx_rx_p , CLK_SET_RATE_PARENT ,
PX30_CLKSEL_CON ( 28 ) , 12 , 1 , MFLAGS ,
PX30_CLKGATE_CON ( 9 ) , 14 , GFLAGS ) ,
COMPOSITE_NODIV ( 0 , " clk_i2s0_tx_out_pre " , mux_i2s0_tx_out_p , 0 ,
PX30_CLKSEL_CON ( 28 ) , 14 , 2 , MFLAGS ,
PX30_CLKGATE_CON ( 9 ) , 15 , GFLAGS ) ,
GATE ( SCLK_I2S0_TX_OUT , " clk_i2s0_tx_out " , " clk_i2s0_tx_out_pre " , CLK_SET_RATE_PARENT ,
PX30_CLKGATE_CON ( 10 ) , 8 , CLK_GATE_HIWORD_MASK ) ,
COMPOSITE ( 0 , " clk_i2s0_rx_src " , mux_gpll_npll_p , 0 ,
PX30_CLKSEL_CON ( 58 ) , 8 , 1 , MFLAGS , 0 , 7 , DFLAGS ,
PX30_CLKGATE_CON ( 17 ) , 0 , GFLAGS ) ,
COMPOSITE_FRACMUX ( 0 , " clk_i2s0_rx_frac " , " clk_i2s0_rx_src " , CLK_SET_RATE_PARENT ,
PX30_CLKSEL_CON ( 59 ) , 0 ,
PX30_CLKGATE_CON ( 17 ) , 1 , GFLAGS ,
& px30_i2s0_rx_fracmux ) ,
COMPOSITE_NODIV ( SCLK_I2S0_RX , " clk_i2s0_rx " , mux_i2s0_rx_tx_p , CLK_SET_RATE_PARENT ,
PX30_CLKSEL_CON ( 58 ) , 12 , 1 , MFLAGS ,
PX30_CLKGATE_CON ( 17 ) , 2 , GFLAGS ) ,
COMPOSITE_NODIV ( 0 , " clk_i2s0_rx_out_pre " , mux_i2s0_rx_out_p , 0 ,
PX30_CLKSEL_CON ( 58 ) , 14 , 2 , MFLAGS ,
PX30_CLKGATE_CON ( 17 ) , 3 , GFLAGS ) ,
GATE ( SCLK_I2S0_RX_OUT , " clk_i2s0_rx_out " , " clk_i2s0_rx_out_pre " , CLK_SET_RATE_PARENT ,
PX30_CLKGATE_CON ( 10 ) , 11 , CLK_GATE_HIWORD_MASK ) ,
COMPOSITE ( 0 , " clk_i2s1_src " , mux_gpll_npll_p , 0 ,
PX30_CLKSEL_CON ( 30 ) , 8 , 1 , MFLAGS , 0 , 7 , DFLAGS ,
PX30_CLKGATE_CON ( 10 ) , 0 , GFLAGS ) ,
COMPOSITE_FRACMUX ( 0 , " clk_i2s1_frac " , " clk_i2s1_src " , CLK_SET_RATE_PARENT ,
PX30_CLKSEL_CON ( 31 ) , 0 ,
PX30_CLKGATE_CON ( 10 ) , 1 , GFLAGS ,
& px30_i2s1_fracmux ) ,
GATE ( SCLK_I2S1 , " clk_i2s1 " , " clk_i2s1_mux " , CLK_SET_RATE_PARENT ,
PX30_CLKGATE_CON ( 10 ) , 2 , GFLAGS ) ,
COMPOSITE_NODIV ( 0 , " clk_i2s1_out_pre " , mux_i2s1_out_p , 0 ,
PX30_CLKSEL_CON ( 30 ) , 15 , 1 , MFLAGS ,
PX30_CLKGATE_CON ( 10 ) , 3 , GFLAGS ) ,
GATE ( SCLK_I2S1_OUT , " clk_i2s1_out " , " clk_i2s1_out_pre " , CLK_SET_RATE_PARENT ,
PX30_CLKGATE_CON ( 10 ) , 9 , CLK_GATE_HIWORD_MASK ) ,
COMPOSITE ( 0 , " clk_i2s2_src " , mux_gpll_npll_p , 0 ,
PX30_CLKSEL_CON ( 32 ) , 8 , 1 , MFLAGS , 0 , 7 , DFLAGS ,
PX30_CLKGATE_CON ( 10 ) , 4 , GFLAGS ) ,
COMPOSITE_FRACMUX ( 0 , " clk_i2s2_frac " , " clk_i2s2_src " , CLK_SET_RATE_PARENT ,
PX30_CLKSEL_CON ( 33 ) , 0 ,
PX30_CLKGATE_CON ( 10 ) , 5 , GFLAGS ,
& px30_i2s2_fracmux ) ,
GATE ( SCLK_I2S2 , " clk_i2s2 " , " clk_i2s2_mux " , CLK_SET_RATE_PARENT ,
PX30_CLKGATE_CON ( 10 ) , 6 , GFLAGS ) ,
COMPOSITE_NODIV ( 0 , " clk_i2s2_out_pre " , mux_i2s2_out_p , 0 ,
PX30_CLKSEL_CON ( 32 ) , 15 , 1 , MFLAGS ,
PX30_CLKGATE_CON ( 10 ) , 7 , GFLAGS ) ,
GATE ( SCLK_I2S2_OUT , " clk_i2s2_out " , " clk_i2s2_out_pre " , CLK_SET_RATE_PARENT ,
PX30_CLKGATE_CON ( 10 ) , 10 , CLK_GATE_HIWORD_MASK ) ,
COMPOSITE ( SCLK_UART1_SRC , " clk_uart1_src " , mux_uart_src_p , CLK_SET_RATE_NO_REPARENT ,
PX30_CLKSEL_CON ( 34 ) , 14 , 2 , MFLAGS , 0 , 5 , DFLAGS ,
PX30_CLKGATE_CON ( 10 ) , 12 , GFLAGS ) ,
COMPOSITE_NOMUX_HALFDIV ( 0 , " clk_uart1_np5 " , " clk_uart1_src " , 0 ,
PX30_CLKSEL_CON ( 35 ) , 0 , 5 , DFLAGS ,
PX30_CLKGATE_CON ( 10 ) , 13 , GFLAGS ) ,
COMPOSITE_FRACMUX ( 0 , " clk_uart1_frac " , " clk_uart1_src " , CLK_SET_RATE_PARENT ,
PX30_CLKSEL_CON ( 36 ) , 0 ,
PX30_CLKGATE_CON ( 10 ) , 14 , GFLAGS ,
& px30_uart1_fracmux ) ,
GATE ( SCLK_UART1 , " clk_uart1 " , " clk_uart1_mux " , CLK_SET_RATE_PARENT ,
PX30_CLKGATE_CON ( 10 ) , 15 , GFLAGS ) ,
COMPOSITE ( SCLK_UART2_SRC , " clk_uart2_src " , mux_uart_src_p , 0 ,
PX30_CLKSEL_CON ( 37 ) , 14 , 2 , MFLAGS , 0 , 5 , DFLAGS ,
PX30_CLKGATE_CON ( 11 ) , 0 , GFLAGS ) ,
COMPOSITE_NOMUX_HALFDIV ( 0 , " clk_uart2_np5 " , " clk_uart2_src " , 0 ,
PX30_CLKSEL_CON ( 38 ) , 0 , 5 , DFLAGS ,
PX30_CLKGATE_CON ( 11 ) , 1 , GFLAGS ) ,
COMPOSITE_FRACMUX ( 0 , " clk_uart2_frac " , " clk_uart2_src " , CLK_SET_RATE_PARENT ,
PX30_CLKSEL_CON ( 39 ) , 0 ,
PX30_CLKGATE_CON ( 11 ) , 2 , GFLAGS ,
& px30_uart2_fracmux ) ,
GATE ( SCLK_UART2 , " clk_uart2 " , " clk_uart2_mux " , CLK_SET_RATE_PARENT ,
PX30_CLKGATE_CON ( 11 ) , 3 , GFLAGS ) ,
COMPOSITE ( 0 , " clk_uart3_src " , mux_uart_src_p , 0 ,
PX30_CLKSEL_CON ( 40 ) , 14 , 2 , MFLAGS , 0 , 5 , DFLAGS ,
PX30_CLKGATE_CON ( 11 ) , 4 , GFLAGS ) ,
COMPOSITE_NOMUX_HALFDIV ( 0 , " clk_uart3_np5 " , " clk_uart3_src " , 0 ,
PX30_CLKSEL_CON ( 41 ) , 0 , 5 , DFLAGS ,
PX30_CLKGATE_CON ( 11 ) , 5 , GFLAGS ) ,
COMPOSITE_FRACMUX ( 0 , " clk_uart3_frac " , " clk_uart3_src " , CLK_SET_RATE_PARENT ,
PX30_CLKSEL_CON ( 42 ) , 0 ,
PX30_CLKGATE_CON ( 11 ) , 6 , GFLAGS ,
& px30_uart3_fracmux ) ,
GATE ( SCLK_UART3 , " clk_uart3 " , " clk_uart3_mux " , CLK_SET_RATE_PARENT ,
PX30_CLKGATE_CON ( 11 ) , 7 , GFLAGS ) ,
COMPOSITE ( 0 , " clk_uart4_src " , mux_uart_src_p , 0 ,
PX30_CLKSEL_CON ( 43 ) , 14 , 2 , MFLAGS , 0 , 5 , DFLAGS ,
PX30_CLKGATE_CON ( 11 ) , 8 , GFLAGS ) ,
COMPOSITE_NOMUX_HALFDIV ( 0 , " clk_uart4_np5 " , " clk_uart4_src " , 0 ,
PX30_CLKSEL_CON ( 44 ) , 0 , 5 , DFLAGS ,
PX30_CLKGATE_CON ( 11 ) , 9 , GFLAGS ) ,
COMPOSITE_FRACMUX ( 0 , " clk_uart4_frac " , " clk_uart4_src " , CLK_SET_RATE_PARENT ,
PX30_CLKSEL_CON ( 45 ) , 0 ,
PX30_CLKGATE_CON ( 11 ) , 10 , GFLAGS ,
& px30_uart4_fracmux ) ,
GATE ( SCLK_UART4 , " clk_uart4 " , " clk_uart4_mux " , CLK_SET_RATE_PARENT ,
PX30_CLKGATE_CON ( 11 ) , 11 , GFLAGS ) ,
COMPOSITE ( 0 , " clk_uart5_src " , mux_uart_src_p , 0 ,
PX30_CLKSEL_CON ( 46 ) , 14 , 2 , MFLAGS , 0 , 5 , DFLAGS ,
PX30_CLKGATE_CON ( 11 ) , 12 , GFLAGS ) ,
COMPOSITE_NOMUX_HALFDIV ( 0 , " clk_uart5_np5 " , " clk_uart5_src " , 0 ,
PX30_CLKSEL_CON ( 47 ) , 0 , 5 , DFLAGS ,
PX30_CLKGATE_CON ( 11 ) , 13 , GFLAGS ) ,
COMPOSITE_FRACMUX ( 0 , " clk_uart5_frac " , " clk_uart5_src " , CLK_SET_RATE_PARENT ,
PX30_CLKSEL_CON ( 48 ) , 0 ,
PX30_CLKGATE_CON ( 11 ) , 14 , GFLAGS ,
& px30_uart5_fracmux ) ,
GATE ( SCLK_UART5 , " clk_uart5 " , " clk_uart5_mux " , CLK_SET_RATE_PARENT ,
PX30_CLKGATE_CON ( 11 ) , 15 , GFLAGS ) ,
COMPOSITE ( SCLK_I2C0 , " clk_i2c0 " , mux_gpll_xin24m_p , 0 ,
PX30_CLKSEL_CON ( 49 ) , 7 , 1 , MFLAGS , 0 , 7 , DFLAGS ,
PX30_CLKGATE_CON ( 12 ) , 0 , GFLAGS ) ,
COMPOSITE ( SCLK_I2C1 , " clk_i2c1 " , mux_gpll_xin24m_p , 0 ,
PX30_CLKSEL_CON ( 49 ) , 15 , 1 , MFLAGS , 8 , 7 , DFLAGS ,
PX30_CLKGATE_CON ( 12 ) , 1 , GFLAGS ) ,
COMPOSITE ( SCLK_I2C2 , " clk_i2c2 " , mux_gpll_xin24m_p , 0 ,
PX30_CLKSEL_CON ( 50 ) , 7 , 1 , MFLAGS , 0 , 7 , DFLAGS ,
PX30_CLKGATE_CON ( 12 ) , 2 , GFLAGS ) ,
COMPOSITE ( SCLK_I2C3 , " clk_i2c3 " , mux_gpll_xin24m_p , 0 ,
PX30_CLKSEL_CON ( 50 ) , 15 , 1 , MFLAGS , 8 , 7 , DFLAGS ,
PX30_CLKGATE_CON ( 12 ) , 3 , GFLAGS ) ,
COMPOSITE ( SCLK_PWM0 , " clk_pwm0 " , mux_gpll_xin24m_p , 0 ,
PX30_CLKSEL_CON ( 52 ) , 7 , 1 , MFLAGS , 0 , 7 , DFLAGS ,
PX30_CLKGATE_CON ( 12 ) , 5 , GFLAGS ) ,
COMPOSITE ( SCLK_PWM1 , " clk_pwm1 " , mux_gpll_xin24m_p , 0 ,
PX30_CLKSEL_CON ( 52 ) , 15 , 1 , MFLAGS , 8 , 7 , DFLAGS ,
PX30_CLKGATE_CON ( 12 ) , 6 , GFLAGS ) ,
COMPOSITE ( SCLK_SPI0 , " clk_spi0 " , mux_gpll_xin24m_p , 0 ,
PX30_CLKSEL_CON ( 53 ) , 7 , 1 , MFLAGS , 0 , 7 , DFLAGS ,
PX30_CLKGATE_CON ( 12 ) , 7 , GFLAGS ) ,
COMPOSITE ( SCLK_SPI1 , " clk_spi1 " , mux_gpll_xin24m_p , 0 ,
PX30_CLKSEL_CON ( 53 ) , 15 , 1 , MFLAGS , 8 , 7 , DFLAGS ,
PX30_CLKGATE_CON ( 12 ) , 8 , GFLAGS ) ,
GATE ( SCLK_TIMER0 , " sclk_timer0 " , " xin24m " , 0 ,
PX30_CLKGATE_CON ( 13 ) , 0 , GFLAGS ) ,
GATE ( SCLK_TIMER1 , " sclk_timer1 " , " xin24m " , 0 ,
PX30_CLKGATE_CON ( 13 ) , 1 , GFLAGS ) ,
GATE ( SCLK_TIMER2 , " sclk_timer2 " , " xin24m " , 0 ,
PX30_CLKGATE_CON ( 13 ) , 2 , GFLAGS ) ,
GATE ( SCLK_TIMER3 , " sclk_timer3 " , " xin24m " , 0 ,
PX30_CLKGATE_CON ( 13 ) , 3 , GFLAGS ) ,
GATE ( SCLK_TIMER4 , " sclk_timer4 " , " xin24m " , 0 ,
PX30_CLKGATE_CON ( 13 ) , 4 , GFLAGS ) ,
GATE ( SCLK_TIMER5 , " sclk_timer5 " , " xin24m " , 0 ,
PX30_CLKGATE_CON ( 13 ) , 5 , GFLAGS ) ,
COMPOSITE_NOMUX ( SCLK_TSADC , " clk_tsadc " , " xin24m " , 0 ,
PX30_CLKSEL_CON ( 54 ) , 0 , 11 , DFLAGS ,
PX30_CLKGATE_CON ( 12 ) , 9 , GFLAGS ) ,
COMPOSITE_NOMUX ( SCLK_SARADC , " clk_saradc " , " xin24m " , 0 ,
PX30_CLKSEL_CON ( 55 ) , 0 , 11 , DFLAGS ,
PX30_CLKGATE_CON ( 12 ) , 10 , GFLAGS ) ,
COMPOSITE_NOMUX ( SCLK_OTP , " clk_otp " , " xin24m " , 0 ,
PX30_CLKSEL_CON ( 56 ) , 0 , 3 , DFLAGS ,
PX30_CLKGATE_CON ( 12 ) , 11 , GFLAGS ) ,
COMPOSITE_NOMUX ( SCLK_OTP_USR , " clk_otp_usr " , " clk_otp " , 0 ,
PX30_CLKSEL_CON ( 56 ) , 4 , 2 , DFLAGS ,
PX30_CLKGATE_CON ( 13 ) , 6 , GFLAGS ) ,
GATE ( 0 , " clk_cpu_boost " , " xin24m " , CLK_IGNORE_UNUSED ,
PX30_CLKGATE_CON ( 12 ) , 12 , GFLAGS ) ,
/* PD_CRYPTO */
GATE ( 0 , " aclk_crypto_pre " , " aclk_bus_pre " , 0 ,
PX30_CLKGATE_CON ( 8 ) , 12 , GFLAGS ) ,
GATE ( 0 , " hclk_crypto_pre " , " hclk_bus_pre " , 0 ,
PX30_CLKGATE_CON ( 8 ) , 13 , GFLAGS ) ,
COMPOSITE ( SCLK_CRYPTO , " clk_crypto " , mux_gpll_cpll_npll_p , 0 ,
PX30_CLKSEL_CON ( 25 ) , 6 , 2 , MFLAGS , 0 , 5 , DFLAGS ,
PX30_CLKGATE_CON ( 8 ) , 14 , GFLAGS ) ,
COMPOSITE ( SCLK_CRYPTO_APK , " clk_crypto_apk " , mux_gpll_cpll_npll_p , 0 ,
PX30_CLKSEL_CON ( 25 ) , 14 , 2 , MFLAGS , 8 , 5 , DFLAGS ,
PX30_CLKGATE_CON ( 8 ) , 15 , GFLAGS ) ,
/*
* Clock - Architecture Diagram 9
*/
/* PD_BUS_TOP */
GATE ( 0 , " pclk_top_niu " , " pclk_top_pre " , CLK_IGNORE_UNUSED , PX30_CLKGATE_CON ( 16 ) , 0 , GFLAGS ) ,
GATE ( 0 , " pclk_top_cru " , " pclk_top_pre " , CLK_IGNORE_UNUSED , PX30_CLKGATE_CON ( 16 ) , 1 , GFLAGS ) ,
GATE ( PCLK_OTP_PHY , " pclk_otp_phy " , " pclk_top_pre " , CLK_IGNORE_UNUSED , PX30_CLKGATE_CON ( 16 ) , 2 , GFLAGS ) ,
GATE ( 0 , " pclk_ddrphy " , " pclk_top_pre " , CLK_IGNORE_UNUSED , PX30_CLKGATE_CON ( 16 ) , 3 , GFLAGS ) ,
GATE ( PCLK_MIPIDSIPHY , " pclk_mipidsiphy " , " pclk_top_pre " , 0 , PX30_CLKGATE_CON ( 16 ) , 4 , GFLAGS ) ,
GATE ( PCLK_MIPICSIPHY , " pclk_mipicsiphy " , " pclk_top_pre " , 0 , PX30_CLKGATE_CON ( 16 ) , 5 , GFLAGS ) ,
GATE ( PCLK_USB_GRF , " pclk_usb_grf " , " pclk_top_pre " , CLK_IGNORE_UNUSED , PX30_CLKGATE_CON ( 16 ) , 6 , GFLAGS ) ,
GATE ( 0 , " pclk_cpu_hoost " , " pclk_top_pre " , CLK_IGNORE_UNUSED , PX30_CLKGATE_CON ( 16 ) , 7 , GFLAGS ) ,
/* PD_VI */
GATE ( 0 , " aclk_vi_niu " , " aclk_vi_pre " , CLK_IGNORE_UNUSED , PX30_CLKGATE_CON ( 4 ) , 15 , GFLAGS ) ,
GATE ( ACLK_CIF , " aclk_cif " , " aclk_vi_pre " , 0 , PX30_CLKGATE_CON ( 5 ) , 1 , GFLAGS ) ,
GATE ( ACLK_ISP , " aclk_isp " , " aclk_vi_pre " , 0 , PX30_CLKGATE_CON ( 5 ) , 3 , GFLAGS ) ,
GATE ( 0 , " hclk_vi_niu " , " hclk_vi_pre " , CLK_IGNORE_UNUSED , PX30_CLKGATE_CON ( 5 ) , 0 , GFLAGS ) ,
GATE ( HCLK_CIF , " hclk_cif " , " hclk_vi_pre " , 0 , PX30_CLKGATE_CON ( 5 ) , 2 , GFLAGS ) ,
GATE ( HCLK_ISP , " hclk_isp " , " hclk_vi_pre " , 0 , PX30_CLKGATE_CON ( 5 ) , 4 , GFLAGS ) ,
/* PD_VO */
GATE ( 0 , " aclk_vo_niu " , " aclk_vo_pre " , CLK_IGNORE_UNUSED , PX30_CLKGATE_CON ( 3 ) , 0 , GFLAGS ) ,
GATE ( ACLK_VOPB , " aclk_vopb " , " aclk_vo_pre " , 0 , PX30_CLKGATE_CON ( 3 ) , 3 , GFLAGS ) ,
GATE ( ACLK_RGA , " aclk_rga " , " aclk_vo_pre " , 0 , PX30_CLKGATE_CON ( 3 ) , 7 , GFLAGS ) ,
GATE ( ACLK_VOPL , " aclk_vopl " , " aclk_vo_pre " , 0 , PX30_CLKGATE_CON ( 3 ) , 5 , GFLAGS ) ,
GATE ( 0 , " hclk_vo_niu " , " hclk_vo_pre " , CLK_IGNORE_UNUSED , PX30_CLKGATE_CON ( 3 ) , 1 , GFLAGS ) ,
GATE ( HCLK_VOPB , " hclk_vopb " , " hclk_vo_pre " , 0 , PX30_CLKGATE_CON ( 3 ) , 4 , GFLAGS ) ,
GATE ( HCLK_RGA , " hclk_rga " , " hclk_vo_pre " , 0 , PX30_CLKGATE_CON ( 3 ) , 8 , GFLAGS ) ,
GATE ( HCLK_VOPL , " hclk_vopl " , " hclk_vo_pre " , 0 , PX30_CLKGATE_CON ( 3 ) , 6 , GFLAGS ) ,
GATE ( 0 , " pclk_vo_niu " , " pclk_vo_pre " , CLK_IGNORE_UNUSED , PX30_CLKGATE_CON ( 3 ) , 2 , GFLAGS ) ,
GATE ( PCLK_MIPI_DSI , " pclk_mipi_dsi " , " pclk_vo_pre " , 0 , PX30_CLKGATE_CON ( 3 ) , 9 , GFLAGS ) ,
/* PD_BUS */
GATE ( 0 , " aclk_bus_niu " , " aclk_bus_pre " , CLK_IGNORE_UNUSED , PX30_CLKGATE_CON ( 13 ) , 8 , GFLAGS ) ,
GATE ( 0 , " aclk_intmem " , " aclk_bus_pre " , CLK_IGNORE_UNUSED , PX30_CLKGATE_CON ( 13 ) , 11 , GFLAGS ) ,
GATE ( ACLK_GIC , " aclk_gic " , " aclk_bus_pre " , CLK_IGNORE_UNUSED , PX30_CLKGATE_CON ( 13 ) , 12 , GFLAGS ) ,
GATE ( ACLK_DCF , " aclk_dcf " , " aclk_bus_pre " , 0 , PX30_CLKGATE_CON ( 13 ) , 15 , GFLAGS ) ,
2019-06-06 10:20:32 +02:00
/* aclk_dmac is controlled by sgrf_soc_con1[11]. */
SGRF_GATE ( ACLK_DMAC , " aclk_dmac " , " aclk_bus_pre " ) ,
2018-06-15 10:16:51 +08:00
GATE ( 0 , " hclk_bus_niu " , " hclk_bus_pre " , CLK_IGNORE_UNUSED , PX30_CLKGATE_CON ( 13 ) , 9 , GFLAGS ) ,
GATE ( 0 , " hclk_rom " , " hclk_bus_pre " , CLK_IGNORE_UNUSED , PX30_CLKGATE_CON ( 13 ) , 14 , GFLAGS ) ,
GATE ( HCLK_PDM , " hclk_pdm " , " hclk_bus_pre " , 0 , PX30_CLKGATE_CON ( 14 ) , 1 , GFLAGS ) ,
GATE ( HCLK_I2S0 , " hclk_i2s0 " , " hclk_bus_pre " , 0 , PX30_CLKGATE_CON ( 14 ) , 2 , GFLAGS ) ,
GATE ( HCLK_I2S1 , " hclk_i2s1 " , " hclk_bus_pre " , 0 , PX30_CLKGATE_CON ( 14 ) , 3 , GFLAGS ) ,
GATE ( HCLK_I2S2 , " hclk_i2s2 " , " hclk_bus_pre " , 0 , PX30_CLKGATE_CON ( 14 ) , 4 , GFLAGS ) ,
GATE ( 0 , " pclk_bus_niu " , " pclk_bus_pre " , CLK_IGNORE_UNUSED , PX30_CLKGATE_CON ( 13 ) , 10 , GFLAGS ) ,
GATE ( PCLK_DCF , " pclk_dcf " , " pclk_bus_pre " , 0 , PX30_CLKGATE_CON ( 14 ) , 0 , GFLAGS ) ,
GATE ( PCLK_UART1 , " pclk_uart1 " , " pclk_bus_pre " , 0 , PX30_CLKGATE_CON ( 14 ) , 5 , GFLAGS ) ,
GATE ( PCLK_UART2 , " pclk_uart2 " , " pclk_bus_pre " , 0 , PX30_CLKGATE_CON ( 14 ) , 6 , GFLAGS ) ,
GATE ( PCLK_UART3 , " pclk_uart3 " , " pclk_bus_pre " , 0 , PX30_CLKGATE_CON ( 14 ) , 7 , GFLAGS ) ,
GATE ( PCLK_UART4 , " pclk_uart4 " , " pclk_bus_pre " , 0 , PX30_CLKGATE_CON ( 14 ) , 8 , GFLAGS ) ,
GATE ( PCLK_UART5 , " pclk_uart5 " , " pclk_bus_pre " , 0 , PX30_CLKGATE_CON ( 14 ) , 9 , GFLAGS ) ,
GATE ( PCLK_I2C0 , " pclk_i2c0 " , " pclk_bus_pre " , 0 , PX30_CLKGATE_CON ( 14 ) , 10 , GFLAGS ) ,
GATE ( PCLK_I2C1 , " pclk_i2c1 " , " pclk_bus_pre " , 0 , PX30_CLKGATE_CON ( 14 ) , 11 , GFLAGS ) ,
GATE ( PCLK_I2C2 , " pclk_i2c2 " , " pclk_bus_pre " , 0 , PX30_CLKGATE_CON ( 14 ) , 12 , GFLAGS ) ,
GATE ( PCLK_I2C3 , " pclk_i2c3 " , " pclk_bus_pre " , 0 , PX30_CLKGATE_CON ( 14 ) , 13 , GFLAGS ) ,
GATE ( PCLK_I2C4 , " pclk_i2c4 " , " pclk_bus_pre " , 0 , PX30_CLKGATE_CON ( 14 ) , 14 , GFLAGS ) ,
GATE ( PCLK_PWM0 , " pclk_pwm0 " , " pclk_bus_pre " , 0 , PX30_CLKGATE_CON ( 14 ) , 15 , GFLAGS ) ,
GATE ( PCLK_PWM1 , " pclk_pwm1 " , " pclk_bus_pre " , 0 , PX30_CLKGATE_CON ( 15 ) , 0 , GFLAGS ) ,
GATE ( PCLK_SPI0 , " pclk_spi0 " , " pclk_bus_pre " , 0 , PX30_CLKGATE_CON ( 15 ) , 1 , GFLAGS ) ,
GATE ( PCLK_SPI1 , " pclk_spi1 " , " pclk_bus_pre " , 0 , PX30_CLKGATE_CON ( 15 ) , 2 , GFLAGS ) ,
GATE ( PCLK_SARADC , " pclk_saradc " , " pclk_bus_pre " , 0 , PX30_CLKGATE_CON ( 15 ) , 3 , GFLAGS ) ,
GATE ( PCLK_TSADC , " pclk_tsadc " , " pclk_bus_pre " , 0 , PX30_CLKGATE_CON ( 15 ) , 4 , GFLAGS ) ,
GATE ( PCLK_TIMER , " pclk_timer " , " pclk_bus_pre " , 0 , PX30_CLKGATE_CON ( 15 ) , 5 , GFLAGS ) ,
GATE ( PCLK_OTP_NS , " pclk_otp_ns " , " pclk_bus_pre " , CLK_IGNORE_UNUSED , PX30_CLKGATE_CON ( 15 ) , 6 , GFLAGS ) ,
GATE ( PCLK_WDT_NS , " pclk_wdt_ns " , " pclk_bus_pre " , CLK_IGNORE_UNUSED , PX30_CLKGATE_CON ( 15 ) , 7 , GFLAGS ) ,
GATE ( PCLK_GPIO1 , " pclk_gpio1 " , " pclk_bus_pre " , 0 , PX30_CLKGATE_CON ( 15 ) , 8 , GFLAGS ) ,
GATE ( PCLK_GPIO2 , " pclk_gpio2 " , " pclk_bus_pre " , 0 , PX30_CLKGATE_CON ( 15 ) , 9 , GFLAGS ) ,
GATE ( PCLK_GPIO3 , " pclk_gpio3 " , " pclk_bus_pre " , 0 , PX30_CLKGATE_CON ( 15 ) , 10 , GFLAGS ) ,
GATE ( 0 , " pclk_grf " , " pclk_bus_pre " , CLK_IGNORE_UNUSED , PX30_CLKGATE_CON ( 15 ) , 11 , GFLAGS ) ,
GATE ( 0 , " pclk_sgrf " , " pclk_bus_pre " , CLK_IGNORE_UNUSED , PX30_CLKGATE_CON ( 15 ) , 12 , GFLAGS ) ,
/* PD_VPU */
GATE ( 0 , " hclk_vpu_niu " , " hclk_vpu_pre " , CLK_IGNORE_UNUSED , PX30_CLKGATE_CON ( 4 ) , 7 , GFLAGS ) ,
GATE ( HCLK_VPU , " hclk_vpu " , " hclk_vpu_pre " , 0 , PX30_CLKGATE_CON ( 4 ) , 6 , GFLAGS ) ,
GATE ( 0 , " aclk_vpu_niu " , " aclk_vpu_pre " , CLK_IGNORE_UNUSED , PX30_CLKGATE_CON ( 4 ) , 5 , GFLAGS ) ,
GATE ( ACLK_VPU , " aclk_vpu " , " aclk_vpu_pre " , 0 , PX30_CLKGATE_CON ( 4 ) , 4 , GFLAGS ) ,
/* PD_CRYPTO */
GATE ( 0 , " hclk_crypto_niu " , " hclk_crypto_pre " , CLK_IGNORE_UNUSED , PX30_CLKGATE_CON ( 9 ) , 3 , GFLAGS ) ,
GATE ( HCLK_CRYPTO , " hclk_crypto " , " hclk_crypto_pre " , 0 , PX30_CLKGATE_CON ( 9 ) , 5 , GFLAGS ) ,
GATE ( 0 , " aclk_crypto_niu " , " aclk_crypto_pre " , CLK_IGNORE_UNUSED , PX30_CLKGATE_CON ( 9 ) , 2 , GFLAGS ) ,
GATE ( ACLK_CRYPTO , " aclk_crypto " , " aclk_crypto_pre " , 0 , PX30_CLKGATE_CON ( 9 ) , 4 , GFLAGS ) ,
/* PD_SDCARD */
GATE ( 0 , " hclk_sdmmc_niu " , " hclk_sdmmc_pre " , CLK_IGNORE_UNUSED , PX30_CLKGATE_CON ( 7 ) , 0 , GFLAGS ) ,
GATE ( HCLK_SDMMC , " hclk_sdmmc " , " hclk_sdmmc_pre " , 0 , PX30_CLKGATE_CON ( 7 ) , 1 , GFLAGS ) ,
/* PD_PERI */
GATE ( 0 , " aclk_peri_niu " , " aclk_peri_pre " , CLK_IGNORE_UNUSED , PX30_CLKGATE_CON ( 5 ) , 9 , GFLAGS ) ,
/* PD_MMC_NAND */
GATE ( HCLK_NANDC , " hclk_nandc " , " hclk_mmc_nand " , 0 , PX30_CLKGATE_CON ( 5 ) , 15 , GFLAGS ) ,
GATE ( 0 , " hclk_mmc_nand_niu " , " hclk_mmc_nand " , CLK_IGNORE_UNUSED , PX30_CLKGATE_CON ( 6 ) , 8 , GFLAGS ) ,
GATE ( HCLK_SDIO , " hclk_sdio " , " hclk_mmc_nand " , 0 , PX30_CLKGATE_CON ( 6 ) , 9 , GFLAGS ) ,
GATE ( HCLK_EMMC , " hclk_emmc " , " hclk_mmc_nand " , 0 , PX30_CLKGATE_CON ( 6 ) , 10 , GFLAGS ) ,
GATE ( HCLK_SFC , " hclk_sfc " , " hclk_mmc_nand " , 0 , PX30_CLKGATE_CON ( 6 ) , 11 , GFLAGS ) ,
/* PD_USB */
GATE ( 0 , " hclk_usb_niu " , " hclk_usb " , CLK_IGNORE_UNUSED , PX30_CLKGATE_CON ( 7 ) , 4 , GFLAGS ) ,
GATE ( HCLK_OTG , " hclk_otg " , " hclk_usb " , 0 , PX30_CLKGATE_CON ( 7 ) , 5 , GFLAGS ) ,
GATE ( HCLK_HOST , " hclk_host " , " hclk_usb " , 0 , PX30_CLKGATE_CON ( 7 ) , 6 , GFLAGS ) ,
GATE ( HCLK_HOST_ARB , " hclk_host_arb " , " hclk_usb " , CLK_IGNORE_UNUSED , PX30_CLKGATE_CON ( 7 ) , 8 , GFLAGS ) ,
/* PD_GMAC */
GATE ( 0 , " aclk_gmac_niu " , " aclk_gmac_pre " , CLK_IGNORE_UNUSED ,
PX30_CLKGATE_CON ( 8 ) , 0 , GFLAGS ) ,
GATE ( ACLK_GMAC , " aclk_gmac " , " aclk_gmac_pre " , 0 ,
PX30_CLKGATE_CON ( 8 ) , 2 , GFLAGS ) ,
GATE ( 0 , " pclk_gmac_niu " , " pclk_gmac_pre " , CLK_IGNORE_UNUSED ,
PX30_CLKGATE_CON ( 8 ) , 1 , GFLAGS ) ,
GATE ( PCLK_GMAC , " pclk_gmac " , " pclk_gmac_pre " , 0 ,
PX30_CLKGATE_CON ( 8 ) , 3 , GFLAGS ) ,
} ;
static struct rockchip_clk_branch px30_clk_pmu_branches [ ] __initdata = {
/*
* Clock - Architecture Diagram 2
*/
COMPOSITE_FRACMUX ( 0 , " clk_rtc32k_frac " , " xin24m " , CLK_IGNORE_UNUSED ,
PX30_PMU_CLKSEL_CON ( 1 ) , 0 ,
PX30_PMU_CLKGATE_CON ( 0 ) , 13 , GFLAGS ,
& px30_rtc32k_pmu_fracmux ) ,
COMPOSITE_NOMUX ( XIN24M_DIV , " xin24m_div " , " xin24m " , CLK_IGNORE_UNUSED ,
PX30_PMU_CLKSEL_CON ( 0 ) , 8 , 5 , DFLAGS ,
PX30_PMU_CLKGATE_CON ( 0 ) , 12 , GFLAGS ) ,
COMPOSITE_NOMUX ( 0 , " clk_wifi_pmu_src " , " gpll " , 0 ,
PX30_PMU_CLKSEL_CON ( 2 ) , 8 , 6 , DFLAGS ,
PX30_PMU_CLKGATE_CON ( 0 ) , 14 , GFLAGS ) ,
COMPOSITE_NODIV ( SCLK_WIFI_PMU , " clk_wifi_pmu " , mux_wifi_pmu_p , CLK_SET_RATE_PARENT ,
PX30_PMU_CLKSEL_CON ( 2 ) , 15 , 1 , MFLAGS ,
PX30_PMU_CLKGATE_CON ( 0 ) , 15 , GFLAGS ) ,
COMPOSITE ( 0 , " clk_uart0_pmu_src " , mux_uart_src_p , 0 ,
PX30_PMU_CLKSEL_CON ( 3 ) , 14 , 2 , MFLAGS , 0 , 5 , DFLAGS ,
PX30_PMU_CLKGATE_CON ( 1 ) , 0 , GFLAGS ) ,
COMPOSITE_NOMUX_HALFDIV ( 0 , " clk_uart0_np5 " , " clk_uart0_pmu_src " , 0 ,
PX30_PMU_CLKSEL_CON ( 4 ) , 0 , 5 , DFLAGS ,
PX30_PMU_CLKGATE_CON ( 1 ) , 1 , GFLAGS ) ,
COMPOSITE_FRACMUX ( 0 , " clk_uart0_frac " , " clk_uart0_pmu_src " , CLK_SET_RATE_PARENT ,
PX30_PMU_CLKSEL_CON ( 5 ) , 0 ,
PX30_PMU_CLKGATE_CON ( 1 ) , 2 , GFLAGS ,
& px30_uart0_pmu_fracmux ) ,
GATE ( SCLK_UART0_PMU , " clk_uart0_pmu " , " clk_uart0_pmu_mux " , CLK_SET_RATE_PARENT ,
PX30_PMU_CLKGATE_CON ( 1 ) , 3 , GFLAGS ) ,
GATE ( SCLK_PVTM_PMU , " clk_pvtm_pmu " , " xin24m " , 0 ,
PX30_PMU_CLKGATE_CON ( 1 ) , 4 , GFLAGS ) ,
COMPOSITE_NOMUX ( PCLK_PMU_PRE , " pclk_pmu_pre " , " gpll " , 0 ,
PX30_PMU_CLKSEL_CON ( 0 ) , 0 , 5 , DFLAGS ,
PX30_PMU_CLKGATE_CON ( 0 ) , 0 , GFLAGS ) ,
COMPOSITE_NOMUX ( SCLK_REF24M_PMU , " clk_ref24m_pmu " , " gpll " , 0 ,
PX30_PMU_CLKSEL_CON ( 2 ) , 0 , 6 , DFLAGS ,
PX30_PMU_CLKGATE_CON ( 1 ) , 8 , GFLAGS ) ,
COMPOSITE_NODIV ( SCLK_USBPHY_REF , " clk_usbphy_ref " , mux_usbphy_ref_p , CLK_SET_RATE_PARENT ,
PX30_PMU_CLKSEL_CON ( 2 ) , 6 , 1 , MFLAGS ,
PX30_PMU_CLKGATE_CON ( 1 ) , 9 , GFLAGS ) ,
COMPOSITE_NODIV ( SCLK_MIPIDSIPHY_REF , " clk_mipidsiphy_ref " , mux_mipidsiphy_ref_p , CLK_SET_RATE_PARENT ,
PX30_PMU_CLKSEL_CON ( 2 ) , 7 , 1 , MFLAGS ,
PX30_PMU_CLKGATE_CON ( 1 ) , 10 , GFLAGS ) ,
/*
* Clock - Architecture Diagram 9
*/
/* PD_PMU */
GATE ( 0 , " pclk_pmu_niu " , " pclk_pmu_pre " , CLK_IGNORE_UNUSED , PX30_PMU_CLKGATE_CON ( 0 ) , 1 , GFLAGS ) ,
GATE ( 0 , " pclk_pmu_sgrf " , " pclk_pmu_pre " , CLK_IGNORE_UNUSED , PX30_PMU_CLKGATE_CON ( 0 ) , 2 , GFLAGS ) ,
GATE ( 0 , " pclk_pmu_grf " , " pclk_pmu_pre " , CLK_IGNORE_UNUSED , PX30_PMU_CLKGATE_CON ( 0 ) , 3 , GFLAGS ) ,
GATE ( 0 , " pclk_pmu " , " pclk_pmu_pre " , CLK_IGNORE_UNUSED , PX30_PMU_CLKGATE_CON ( 0 ) , 4 , GFLAGS ) ,
GATE ( 0 , " pclk_pmu_mem " , " pclk_pmu_pre " , CLK_IGNORE_UNUSED , PX30_PMU_CLKGATE_CON ( 0 ) , 5 , GFLAGS ) ,
GATE ( PCLK_GPIO0_PMU , " pclk_gpio0_pmu " , " pclk_pmu_pre " , 0 , PX30_PMU_CLKGATE_CON ( 0 ) , 6 , GFLAGS ) ,
GATE ( PCLK_UART0_PMU , " pclk_uart0_pmu " , " pclk_pmu_pre " , 0 , PX30_PMU_CLKGATE_CON ( 0 ) , 7 , GFLAGS ) ,
GATE ( 0 , " pclk_cru_pmu " , " pclk_pmu_pre " , CLK_IGNORE_UNUSED , PX30_PMU_CLKGATE_CON ( 0 ) , 8 , GFLAGS ) ,
} ;
static const char * const px30_pmucru_critical_clocks [ ] __initconst = {
" aclk_bus_pre " ,
" pclk_bus_pre " ,
" hclk_bus_pre " ,
" aclk_peri_pre " ,
" hclk_peri_pre " ,
" aclk_gpu_niu " ,
" pclk_top_pre " ,
" pclk_pmu_pre " ,
" hclk_usb_niu " ,
" pll_npll " ,
" usb480m " ,
" clk_uart2 " ,
" pclk_uart2 " ,
} ;
static void __init px30_clk_init ( struct device_node * np )
{
struct rockchip_clk_provider * ctx ;
void __iomem * reg_base ;
reg_base = of_iomap ( np , 0 ) ;
if ( ! reg_base ) {
pr_err ( " %s: could not map cru region \n " , __func__ ) ;
return ;
}
ctx = rockchip_clk_init ( np , reg_base , CLK_NR_CLKS ) ;
if ( IS_ERR ( ctx ) ) {
pr_err ( " %s: rockchip clk init failed \n " , __func__ ) ;
iounmap ( reg_base ) ;
return ;
}
rockchip_clk_register_plls ( ctx , px30_pll_clks ,
ARRAY_SIZE ( px30_pll_clks ) ,
PX30_GRF_SOC_STATUS0 ) ;
rockchip_clk_register_branches ( ctx , px30_clk_branches ,
ARRAY_SIZE ( px30_clk_branches ) ) ;
rockchip_clk_register_armclk ( ctx , ARMCLK , " armclk " ,
mux_armclk_p , ARRAY_SIZE ( mux_armclk_p ) ,
& px30_cpuclk_data , px30_cpuclk_rates ,
ARRAY_SIZE ( px30_cpuclk_rates ) ) ;
rockchip_register_softrst ( np , 12 , reg_base + PX30_SOFTRST_CON ( 0 ) ,
ROCKCHIP_SOFTRST_HIWORD_MASK ) ;
rockchip_register_restart_notifier ( ctx , PX30_GLB_SRST_FST , NULL ) ;
rockchip_clk_of_add_provider ( np , ctx ) ;
}
CLK_OF_DECLARE ( px30_cru , " rockchip,px30-cru " , px30_clk_init ) ;
static void __init px30_pmu_clk_init ( struct device_node * np )
{
struct rockchip_clk_provider * ctx ;
void __iomem * reg_base ;
reg_base = of_iomap ( np , 0 ) ;
if ( ! reg_base ) {
pr_err ( " %s: could not map cru pmu region \n " , __func__ ) ;
return ;
}
ctx = rockchip_clk_init ( np , reg_base , CLKPMU_NR_CLKS ) ;
if ( IS_ERR ( ctx ) ) {
pr_err ( " %s: rockchip pmu clk init failed \n " , __func__ ) ;
return ;
}
rockchip_clk_register_plls ( ctx , px30_pmu_pll_clks ,
ARRAY_SIZE ( px30_pmu_pll_clks ) , PX30_GRF_SOC_STATUS0 ) ;
rockchip_clk_register_branches ( ctx , px30_clk_pmu_branches ,
ARRAY_SIZE ( px30_clk_pmu_branches ) ) ;
rockchip_clk_protect_critical ( px30_pmucru_critical_clocks ,
ARRAY_SIZE ( px30_pmucru_critical_clocks ) ) ;
rockchip_clk_of_add_provider ( np , ctx ) ;
}
CLK_OF_DECLARE ( px30_cru_pmu , " rockchip,px30-pmucru " , px30_pmu_clk_init ) ;