@ -110,7 +110,6 @@ static const struct clk_div_table cpu_div_table[] = {
{ /* sentinel */ } ,
} ;
PNAME ( p_xtal ) = { " xtal " } ;
PNAME ( p_fclk_div ) = { " fixed_pll " } ;
PNAME ( p_cpu_clk ) = { " sys_pll " } ;
PNAME ( p_clk81 ) = { " fclk_div3 " , " fclk_div4 " , " fclk_div5 " } ;
@ -120,19 +119,6 @@ PNAME(p_mali) = { "fclk_div3", "fclk_div4", "fclk_div5",
static u32 mux_table_clk81 [ ] = { 6 , 5 , 7 } ;
static u32 mux_table_mali [ ] = { 6 , 5 , 7 , 4 , 0 } ;
static struct pll_conf pll_confs = {
. m = PARM ( 0x00 , 0 , 9 ) ,
. n = PARM ( 0x00 , 9 , 5 ) ,
. od = PARM ( 0x00 , 16 , 2 ) ,
} ;
static struct pll_conf sys_pll_conf = {
. m = PARM ( 0x00 , 0 , 9 ) ,
. n = PARM ( 0x00 , 9 , 5 ) ,
. od = PARM ( 0x00 , 16 , 2 ) ,
. rate_table = sys_pll_rate_table ,
} ;
static const struct composite_conf clk81_conf __initconst = {
. mux_table = mux_table_clk81 ,
. mux_flags = CLK_MUX_READ_ONLY ,
@ -166,13 +152,87 @@ static struct clk_fixed_rate meson8b_zero = {
} ,
} ;
static struct meson_clk_pll meson8b_fixed_pll = {
. m = {
. reg_off = MESON8B_REG_PLL_FIXED ,
. shift = 0 ,
. width = 9 ,
} ,
. n = {
. reg_off = MESON8B_REG_PLL_FIXED ,
. shift = 9 ,
. width = 5 ,
} ,
. od = {
. reg_off = MESON8B_REG_PLL_FIXED ,
. shift = 16 ,
. width = 2 ,
} ,
. lock = & clk_lock ,
. hw . init = & ( struct clk_init_data ) {
. name = " fixed_pll " ,
. ops = & meson_clk_pll_ro_ops ,
. parent_names = ( const char * [ ] ) { " xtal " } ,
. num_parents = 1 ,
. flags = CLK_GET_RATE_NOCACHE ,
} ,
} ;
static struct meson_clk_pll meson8b_vid_pll = {
. m = {
. reg_off = MESON8B_REG_PLL_VID ,
. shift = 0 ,
. width = 9 ,
} ,
. n = {
. reg_off = MESON8B_REG_PLL_VID ,
. shift = 9 ,
. width = 5 ,
} ,
. od = {
. reg_off = MESON8B_REG_PLL_VID ,
. shift = 16 ,
. width = 2 ,
} ,
. lock = & clk_lock ,
. hw . init = & ( struct clk_init_data ) {
. name = " vid_pll " ,
. ops = & meson_clk_pll_ro_ops ,
. parent_names = ( const char * [ ] ) { " xtal " } ,
. num_parents = 1 ,
. flags = CLK_GET_RATE_NOCACHE ,
} ,
} ;
static struct meson_clk_pll meson8b_sys_pll = {
. m = {
. reg_off = MESON8B_REG_PLL_SYS ,
. shift = 0 ,
. width = 9 ,
} ,
. n = {
. reg_off = MESON8B_REG_PLL_SYS ,
. shift = 9 ,
. width = 5 ,
} ,
. od = {
. reg_off = MESON8B_REG_PLL_SYS ,
. shift = 16 ,
. width = 2 ,
} ,
. rate_table = sys_pll_rate_table ,
. rate_count = ARRAY_SIZE ( sys_pll_rate_table ) ,
. lock = & clk_lock ,
. hw . init = & ( struct clk_init_data ) {
. name = " sys_pll " ,
. ops = & meson_clk_pll_ops ,
. parent_names = ( const char * [ ] ) { " xtal " } ,
. num_parents = 1 ,
. flags = CLK_GET_RATE_NOCACHE ,
} ,
} ;
static const struct clk_conf meson8b_clk_confs [ ] __initconst = {
PLL ( MESON8B_REG_PLL_FIXED , CLKID_PLL_FIXED , " fixed_pll " ,
p_xtal , 0 , & pll_confs ) ,
PLL ( MESON8B_REG_PLL_VID , CLKID_PLL_VID , " vid_pll " ,
p_xtal , 0 , & pll_confs ) ,
PLL ( MESON8B_REG_PLL_SYS , CLKID_PLL_SYS , " sys_pll " ,
p_xtal , 0 , & sys_pll_conf ) ,
FIXED_FACTOR_DIV ( CLKID_FCLK_DIV2 , " fclk_div2 " , p_fclk_div , 0 , 2 ) ,
FIXED_FACTOR_DIV ( CLKID_FCLK_DIV3 , " fclk_div3 " , p_fclk_div , 0 , 3 ) ,
FIXED_FACTOR_DIV ( CLKID_FCLK_DIV4 , " fclk_div4 " , p_fclk_div , 0 , 4 ) ,
@ -197,14 +257,23 @@ static struct clk_hw_onecell_data meson8b_hw_onecell_data = {
. hws = {
[ CLKID_XTAL ] = & meson8b_xtal . hw ,
[ CLKID_ZERO ] = & meson8b_zero . hw ,
[ CLKID_PLL_FIXED ] = & meson8b_fixed_pll . hw ,
[ CLKID_PLL_VID ] = & meson8b_vid_pll . hw ,
[ CLKID_PLL_SYS ] = & meson8b_sys_pll . hw ,
} ,
. num = CLK_NR_CLKS ,
} ;
static struct meson_clk_pll * const meson8b_clk_plls [ ] = {
& meson8b_fixed_pll ,
& meson8b_vid_pll ,
& meson8b_sys_pll ,
} ;
static void __init meson8b_clkc_init ( struct device_node * np )
{
void __iomem * clk_base ;
int ret , clkid ;
int ret , clkid , i ;
if ( ! meson_clk_init ( np , CLK_NR_CLKS ) )
return ;
@ -216,6 +285,10 @@ static void __init meson8b_clkc_init(struct device_node *np)
return ;
}
/* Populate base address for PLLs */
for ( i = 0 ; i < ARRAY_SIZE ( meson8b_clk_plls ) ; i + + )
meson8b_clk_plls [ i ] - > base = clk_base ;
/*
* register all clks
* CLKID_UNUSED = 0 , so skip it and start with CLKID_XTAL = 1