@ -14,7 +14,7 @@
# include <asm/arch/cru_rk3288.h>
# include <asm/arch/grf_rk3288.h>
# include <asm/arch/hardware.h>
# include <asm/arch/periph .h>
# include <dt-bindings/clock/rk3288-cru .h>
# include <dm/lists.h>
DECLARE_GLOBAL_DATA_PTR ;
@ -364,24 +364,24 @@ static ulong rk3288_clk_set_rate(struct udevice *dev, ulong rate)
}
static ulong rockchip_mmc_get_clk ( struct rk3288_cru * cru , uint clk_general_rate ,
enum periph_id periph )
int periph )
{
uint src_rate ;
uint div , mux ;
u32 con ;
switch ( periph ) {
case PERIPH_ID _EMMC:
case HCLK _EMMC:
con = readl ( & cru - > cru_clksel_con [ 12 ] ) ;
mux = ( con > > EMMC_PLL_SHIFT ) & EMMC_PLL_MASK ;
div = ( con > > EMMC_DIV_SHIFT ) & EMMC_DIV_MASK ;
break ;
case PERIPH_ID_SDCARD :
con = readl ( & cru - > cru_clksel_con [ 12 ] ) ;
case HCLK_SDMMC :
con = readl ( & cru - > cru_clksel_con [ 11 ] ) ;
mux = ( con > > MMC0_PLL_SHIFT ) & MMC0_PLL_MASK ;
div = ( con > > MMC0_DIV_SHIFT ) & MMC0_DIV_MASK ;
break ;
case PERIPH_ID_SDMMC2 :
case HCLK_SDIO0 :
con = readl ( & cru - > cru_clksel_con [ 12 ] ) ;
mux = ( con > > SDIO0_PLL_SHIFT ) & SDIO0_PLL_MASK ;
div = ( con > > SDIO0_DIV_SHIFT ) & SDIO0_DIV_MASK ;
@ -395,7 +395,7 @@ static ulong rockchip_mmc_get_clk(struct rk3288_cru *cru, uint clk_general_rate,
}
static ulong rockchip_mmc_set_clk ( struct rk3288_cru * cru , uint clk_general_rate ,
enum periph_id periph , uint freq )
int periph , uint freq )
{
int src_clk_div ;
int mux ;
@ -414,21 +414,21 @@ static ulong rockchip_mmc_set_clk(struct rk3288_cru *cru, uint clk_general_rate,
( int ) MMC0_PLL_SELECT_GENERAL ) ;
}
switch ( periph ) {
case PERIPH_ID _EMMC:
case HCLK _EMMC:
rk_clrsetreg ( & cru - > cru_clksel_con [ 12 ] ,
EMMC_PLL_MASK < < EMMC_PLL_SHIFT |
EMMC_DIV_MASK < < EMMC_DIV_SHIFT ,
mux < < EMMC_PLL_SHIFT |
( src_clk_div - 1 ) < < EMMC_DIV_SHIFT ) ;
break ;
case PERIPH_ID_SDCARD :
case HCLK_SDMMC :
rk_clrsetreg ( & cru - > cru_clksel_con [ 11 ] ,
MMC0_PLL_MASK < < MMC0_PLL_SHIFT |
MMC0_DIV_MASK < < MMC0_DIV_SHIFT ,
mux < < MMC0_PLL_SHIFT |
( src_clk_div - 1 ) < < MMC0_DIV_SHIFT ) ;
break ;
case PERIPH_ID_SDMMC2 :
case HCLK_SDIO0 :
rk_clrsetreg ( & cru - > cru_clksel_con [ 12 ] ,
SDIO0_PLL_MASK < < SDIO0_PLL_SHIFT |
SDIO0_DIV_MASK < < SDIO0_DIV_SHIFT ,
@ -443,23 +443,23 @@ static ulong rockchip_mmc_set_clk(struct rk3288_cru *cru, uint clk_general_rate,
}
static ulong rockchip_spi_get_clk ( struct rk3288_cru * cru , uint clk_general_rate ,
enum periph_id periph )
int periph )
{
uint div , mux ;
u32 con ;
switch ( periph ) {
case PERIPH_ID _SPI0:
case SCLK _SPI0:
con = readl ( & cru - > cru_clksel_con [ 25 ] ) ;
mux = ( con > > SPI0_PLL_SHIFT ) & SPI0_PLL_MASK ;
div = ( con > > SPI0_DIV_SHIFT ) & SPI0_DIV_MASK ;
break ;
case PERIPH_ID _SPI1:
case SCLK _SPI1:
con = readl ( & cru - > cru_clksel_con [ 25 ] ) ;
mux = ( con > > SPI1_PLL_SHIFT ) & SPI1_PLL_MASK ;
div = ( con > > SPI1_DIV_SHIFT ) & SPI1_DIV_MASK ;
break ;
case PERIPH_ID _SPI2:
case SCLK _SPI2:
con = readl ( & cru - > cru_clksel_con [ 39 ] ) ;
mux = ( con > > SPI2_PLL_SHIFT ) & SPI2_PLL_MASK ;
div = ( con > > SPI2_DIV_SHIFT ) & SPI2_DIV_MASK ;
@ -473,28 +473,28 @@ static ulong rockchip_spi_get_clk(struct rk3288_cru *cru, uint clk_general_rate,
}
static ulong rockchip_spi_set_clk ( struct rk3288_cru * cru , uint clk_general_rate ,
enum periph_id periph , uint freq )
int periph , uint freq )
{
int src_clk_div ;
debug ( " %s: clk_general_rate=%u \n " , __func__ , clk_general_rate ) ;
src_clk_div = RATE_TO_DIV ( clk_general_rate , freq ) ;
switch ( periph ) {
case PERIPH_ID _SPI0:
case SCLK _SPI0:
rk_clrsetreg ( & cru - > cru_clksel_con [ 25 ] ,
SPI0_PLL_MASK < < SPI0_PLL_SHIFT |
SPI0_DIV_MASK < < SPI0_DIV_SHIFT ,
SPI0_PLL_SELECT_GENERAL < < SPI0_PLL_SHIFT |
src_clk_div < < SPI0_DIV_SHIFT ) ;
break ;
case PERIPH_ID _SPI1:
case SCLK _SPI1:
rk_clrsetreg ( & cru - > cru_clksel_con [ 25 ] ,
SPI1_PLL_MASK < < SPI1_PLL_SHIFT |
SPI1_DIV_MASK < < SPI1_DIV_SHIFT ,
SPI1_PLL_SELECT_GENERAL < < SPI1_PLL_SHIFT |
src_clk_div < < SPI1_DIV_SHIFT ) ;
break ;
case PERIPH_ID _SPI2:
case SCLK _SPI2:
rk_clrsetreg ( & cru - > cru_clksel_con [ 39 ] ,
SPI2_PLL_MASK < < SPI2_PLL_SHIFT |
SPI2_DIV_MASK < < SPI2_DIV_SHIFT ,
@ -511,19 +511,26 @@ static ulong rockchip_spi_set_clk(struct rk3288_cru *cru, uint clk_general_rate,
static ulong rk3288_set_periph_rate ( struct udevice * dev , int periph , ulong rate )
{
struct rk3288_clk_priv * priv = dev_get_priv ( dev ) ;
ulong new_rate ;
struct udevice * gclk ;
ulong new_rate , gclk_rate ;
int ret ;
ret = uclass_get_device ( UCLASS_CLK , CLK_GENERAL , & gclk ) ;
if ( ret )
return ret ;
gclk_rate = clk_get_rate ( gclk ) ;
switch ( periph ) {
case PERIPH_ID_EMMC :
case PERIPH_ID_SDCARD :
new_rate = rockchip_mmc_set_clk ( priv - > cru , clk_get_rate ( dev ) ,
periph , rate ) ;
case HCLK_EMMC :
case HCLK_SDMMC :
case HCLK_SDIO0 :
new_rate = rockchip_mmc_set_clk ( priv - > cru , gclk_rate , periph ,
rate ) ;
break ;
case PERIPH_ID _SPI0:
case PERIPH_ID _SPI1:
case PERIPH_ID _SPI2:
new_rate = rockchip_spi_set_clk ( priv - > cru , clk_get_rate ( dev ) ,
periph , rate ) ;
case SCLK _SPI0:
case SCLK _SPI1:
case SCLK _SPI2:
new_rate = rockchip_spi_set_clk ( priv - > cru , gclk_rate , periph ,
rate ) ;
break ;
default :
return - ENOENT ;