From 217e0253e69b5ba90ec2316e484bbcb896c7e306 Mon Sep 17 00:00:00 2001 From: xxx Date: Tue, 7 May 2013 18:02:40 +0800 Subject: [PATCH] rk3168: uart\sdmmc 48M --- arch/arm/mach-rk30/board-rk3168-tb.c | 23 ++++++- arch/arm/mach-rk30/clock_data-rk3066b.c | 83 ++++++++++++++++++++++--- arch/arm/mach-rk30/include/mach/board.h | 12 +++- 3 files changed, 106 insertions(+), 12 deletions(-) mode change 100755 => 100644 arch/arm/mach-rk30/clock_data-rk3066b.c mode change 100644 => 100755 arch/arm/mach-rk30/include/mach/board.h diff --git a/arch/arm/mach-rk30/board-rk3168-tb.c b/arch/arm/mach-rk30/board-rk3168-tb.c index ea2cebf2310d..1874da55c32b 100755 --- a/arch/arm/mach-rk30/board-rk3168-tb.c +++ b/arch/arm/mach-rk30/board-rk3168-tb.c @@ -2576,10 +2576,31 @@ static struct cpufreq_frequency_table dvfs_ddr_table[] = { //#define DVFS_CPU_TABLE_SIZE (ARRAY_SIZE(dvfs_cpu_logic_table)) //static struct cpufreq_frequency_table cpu_dvfs_table[DVFS_CPU_TABLE_SIZE]; //static struct cpufreq_frequency_table dep_cpu2core_table[DVFS_CPU_TABLE_SIZE]; +int get_max_freq(struct cpufreq_frequency_table *table) +{ + int i,temp=0; + + for(i=0;table[i].frequency!= CPUFREQ_TABLE_END;i++) + { + if(temp #include #include +#include #define MHZ (1000*1000) #define KHZ (1000) @@ -34,7 +35,7 @@ #define CLK_LOOPS_RATE_REF (1200) //Mhz #define CLK_LOOPS_RECALC(new_rate) div_u64(CLK_LOOPS_JIFFY_REF*(new_rate),CLK_LOOPS_RATE_REF*MHZ) void rk30_clk_dump_regs(void); - +#if 0 //flags bit //has extern 27mhz #define CLK_FLG_EXT_27MHZ (1<<0) @@ -45,7 +46,7 @@ void rk30_clk_dump_regs(void); #define CLK_FLG_MAX_I2S_49152KHZ (1<<4) //uart 1m\3m #define CLK_FLG_UART_1_3M (1<<5) - +#endif #define ARCH_RK31 struct apll_clk_set { @@ -1076,6 +1077,7 @@ static const struct pll_clk_set cpll_clks[] = { _PLL_SET_CLKS(456000, 1, 76, 4), _PLL_SET_CLKS(504000, 1, 84, 4), _PLL_SET_CLKS(552000, 1, 46, 2), + _PLL_SET_CLKS(594000, 2, 198, 4), _PLL_SET_CLKS(600000, 1, 50, 2), _PLL_SET_CLKS(742500, 8, 495, 2), _PLL_SET_CLKS(768000, 1, 64, 2), @@ -1097,6 +1099,7 @@ static const struct pll_clk_set gpll_clks[] = { _PLL_SET_CLKS(148500, 2, 99, 8), _PLL_SET_CLKS(297000, 2, 198, 8), _PLL_SET_CLKS(300000, 1, 50, 4), + _PLL_SET_CLKS(384000, 1, 64, 4), _PLL_SET_CLKS(594000, 2, 198, 4), _PLL_SET_CLKS(1188000, 2, 99, 1), _PLL_SET_CLKS(1200000, 1, 50, 1), @@ -3156,6 +3159,11 @@ static void periph_clk_set_init(void) hclk_p = aclk_p >> 0; pclk_p = aclk_p >> 1; break; + case 384 * MHZ: + aclk_p = ppll_rate >> 1; + hclk_p = aclk_p >> 1; + pclk_p = aclk_p >> 2; + break; case 594 * MHZ: aclk_p = ppll_rate >> 2; hclk_p = aclk_p >> 0; @@ -3185,6 +3193,12 @@ static void cpu_axi_init(void) hclk_cpu_rate = aclk_cpu_rate >> 1; pclk_cpu_rate = aclk_cpu_rate >> 2; break; + case 384 * MHZ: + cpu_div_rate = gpll_rate >> 1; + aclk_cpu_rate = cpu_div_rate >> 0; + hclk_cpu_rate = aclk_cpu_rate >> 1; + pclk_cpu_rate = aclk_cpu_rate >> 2; + break; case 594 * MHZ: cpu_div_rate = gpll_rate >> 1; @@ -3236,6 +3250,49 @@ void rk30_clock_common_i2s_init(void) } } +void rk_clock_common_uart_init(struct clk *cpll_clk,struct clk *gpll_clk) +{ + struct clk *p_clk; + unsigned long rate; + if(!(gpll_clk->rate%(48*MHZ))) + { + p_clk=gpll_clk; + rate=48*MHZ; + } + else if(!(cpll_clk->rate%(48*MHZ))) + { + p_clk=cpll_clk; + rate=48*MHZ; + } + else if(!(gpll_clk->rate%(49500*KHZ))) + { + p_clk=gpll_clk; + rate=(49500*KHZ); + } + else if(!(cpll_clk->rate%(49500*KHZ))) + { + p_clk=cpll_clk; + rate=(49500*KHZ); + } + else + { + if(cpll_clk->rate>gpll_clk->rate) + { + p_clk=cpll_clk; + } + else + { + p_clk=gpll_clk; + } + rate=50*MHZ; + } + clk_set_parent_nolock(&clk_uart_pll, p_clk); + clk_set_rate_nolock(&clk_uart0_div,rate); + clk_set_rate_nolock(&clk_uart1_div,rate); + clk_set_rate_nolock(&clk_uart2_div,rate); + clk_set_rate_nolock(&clk_uart3_div,rate); + clk_set_rate_nolock(&clk_uart1,rate); +} static void __init rk30_clock_common_init(unsigned long gpll_rate, unsigned long cpll_rate) { @@ -3257,10 +3314,9 @@ static void __init rk30_clock_common_init(unsigned long gpll_rate, unsigned long clk_set_rate_nolock(&clk_spi1, clk_spi1.parent->rate); // uart - if(rk30_clock_flags & CLK_FLG_UART_1_3M) - clk_set_parent_nolock(&clk_uart_pll, &codec_pll_clk); - else - clk_set_parent_nolock(&clk_uart_pll, &general_pll_clk); + + rk_clock_common_uart_init(&codec_pll_clk,&general_pll_clk); + //mac if(!(gpll_rate % (50 * MHZ))) clk_set_parent_nolock(&clk_mac_pll_div, &general_pll_clk); @@ -3292,9 +3348,18 @@ static void __init rk30_clock_common_init(unsigned long gpll_rate, unsigned long clk_set_rate_nolock(&aclk_vepu, 300 * MHZ); clk_set_rate_nolock(&aclk_vdpu, 300 * MHZ); - //gpu auto sel - clk_set_parent_nolock(&clk_gpu, &codec_pll_clk); - clk_set_parent_nolock(&aclk_gpu, &codec_pll_clk); + + if(rk30_clock_flags&CLK_GPU_GPLL) + { + clk_set_parent_nolock(&clk_gpu, &general_pll_clk); + clk_set_parent_nolock(&aclk_gpu, &general_pll_clk); + + } + else + { + clk_set_parent_nolock(&clk_gpu, &codec_pll_clk); + clk_set_parent_nolock(&aclk_gpu, &codec_pll_clk); + } clk_set_rate_nolock(&clk_gpu, 200 * MHZ); clk_set_rate_nolock(&aclk_gpu, 200 * MHZ); diff --git a/arch/arm/mach-rk30/include/mach/board.h b/arch/arm/mach-rk30/include/mach/board.h old mode 100644 new mode 100755 index 653aa9f220a8..68eecf6bdcf8 --- a/arch/arm/mach-rk30/include/mach/board.h +++ b/arch/arm/mach-rk30/include/mach/board.h @@ -33,6 +33,7 @@ enum _periph_pll { periph_pll_1485mhz = 148500000, periph_pll_297mhz = 297000000, periph_pll_300mhz = 300000000, + periph_pll_384mhz = 384000000, periph_pll_594mhz = 594000000, periph_pll_1188mhz = 1188000000, /* for box*/ }; @@ -42,6 +43,7 @@ enum _codec_pll { codec_pll_456mhz = 456000000, codec_pll_504mhz = 504000000, codec_pll_552mhz = 552000000, /* for HDMI */ + codec_pll_594mhz = 594000000, /* for HDMI */ codec_pll_600mhz = 600000000, codec_pll_742_5khz = 742500000, codec_pll_768mhz = 768000000, @@ -60,6 +62,8 @@ enum _codec_pll { //uart 1m\3m #define CLK_FLG_UART_1_3M (1<<5) #define CLK_CPU_HPCLK_11 (1<<6) +#define CLK_GPU_GPLL (1<<7) +#define CLK_GPU_CPLL (1<<8) #ifdef CONFIG_RK29_VMAC @@ -75,17 +79,21 @@ enum _codec_pll { #if (RK30_CLOCKS_DEFAULT_FLAGS&CLK_FLG_UART_1_3M) #define codec_pll_default codec_pll_768mhz +#define periph_pll_default periph_pll_297mhz + #else #ifdef CONFIG_ARCH_RK3066B -#define codec_pll_default codec_pll_798mhz +#define codec_pll_default codec_pll_594mhz +#define periph_pll_default periph_pll_384mhz + #else #define codec_pll_default codec_pll_1200mhz +#define periph_pll_default periph_pll_297mhz #endif #endif -#define periph_pll_default periph_pll_297mhz #endif #endif -- 2.34.1