diff options
author | Gabor Juhos <juhosg@openwrt.org> | 2009-07-01 19:34:59 +0000 |
---|---|---|
committer | Gabor Juhos <juhosg@openwrt.org> | 2009-07-01 19:34:59 +0000 |
commit | 4a046eb2dda19bb8fa7cb7e1d388de0088c30561 (patch) | |
tree | f2a3d94467132817ad2a78afee12368d6f621b42 /target/linux | |
parent | 504e43877e56c9b5595e34abf05d1e45b48edde0 (diff) | |
download | upstream-4a046eb2dda19bb8fa7cb7e1d388de0088c30561.tar.gz upstream-4a046eb2dda19bb8fa7cb7e1d388de0088c30561.tar.bz2 upstream-4a046eb2dda19bb8fa7cb7e1d388de0088c30561.zip |
[ar71xx] add AR7240 specific frequency detection
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@16645 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux')
-rw-r--r-- | target/linux/ar71xx/files/arch/mips/ar71xx/setup.c | 28 | ||||
-rw-r--r-- | target/linux/ar71xx/files/arch/mips/include/asm/mach-ar71xx/ar71xx.h | 11 |
2 files changed, 39 insertions, 0 deletions
diff --git a/target/linux/ar71xx/files/arch/mips/ar71xx/setup.c b/target/linux/ar71xx/files/arch/mips/ar71xx/setup.c index f35444901d..1d99bb52fb 100644 --- a/target/linux/ar71xx/files/arch/mips/ar71xx/setup.c +++ b/target/linux/ar71xx/files/arch/mips/ar71xx/setup.c @@ -33,6 +33,7 @@ #define AR71XX_SYS_TYPE_LEN 64 #define AR71XX_BASE_FREQ 40000000 #define AR91XX_BASE_FREQ 5000000 +#define AR724X_BASE_FREQ 5000000 enum ar71xx_mach_type ar71xx_mach; @@ -206,6 +207,29 @@ static void __init ar71xx_detect_sys_frequency(void) ar71xx_ahb_freq = ar71xx_cpu_freq / div; } +static void __init ar724x_detect_sys_frequency(void) +{ + u32 pll; + u32 freq; + u32 div; + + pll = ar71xx_pll_rr(AR724X_PLL_REG_CPU_CONFIG); + + div = ((pll >> AR724X_PLL_DIV_SHIFT) & AR724X_PLL_DIV_MASK); + freq = div * AR724X_BASE_FREQ; + + div = ((pll >> AR724X_PLL_REF_DIV_SHIFT) & AR724X_PLL_REF_DIV_MASK); + freq *= div; + + ar71xx_cpu_freq = freq; + + div = ((pll >> AR724X_DDR_DIV_SHIFT) & AR724X_DDR_DIV_MASK) + 1; + ar71xx_ddr_freq = freq / div; + + div = (((pll >> AR724X_AHB_DIV_SHIFT) & AR724X_AHB_DIV_MASK) + 1) * 2; + ar71xx_ahb_freq = ar71xx_cpu_freq / div; +} + static void __init detect_sys_frequency(void) { switch (ar71xx_soc) { @@ -215,6 +239,10 @@ static void __init detect_sys_frequency(void) ar71xx_detect_sys_frequency(); break; + case AR71XX_SOC_AR7240: + ar724x_detect_sys_frequency(); + break; + case AR71XX_SOC_AR9130: case AR71XX_SOC_AR9132: ar91xx_detect_sys_frequency(); diff --git a/target/linux/ar71xx/files/arch/mips/include/asm/mach-ar71xx/ar71xx.h b/target/linux/ar71xx/files/arch/mips/include/asm/mach-ar71xx/ar71xx.h index 198c4bfc01..8a45a0c90e 100644 --- a/target/linux/ar71xx/files/arch/mips/include/asm/mach-ar71xx/ar71xx.h +++ b/target/linux/ar71xx/files/arch/mips/include/asm/mach-ar71xx/ar71xx.h @@ -157,6 +157,17 @@ extern enum ar71xx_mach_type ar71xx_mach; #define AR71XX_ETH0_PLL_SHIFT 17 #define AR71XX_ETH1_PLL_SHIFT 19 +#define AR724X_PLL_REG_CPU_CONFIG 0x00 + +#define AR724X_PLL_DIV_SHIFT 0 +#define AR724X_PLL_DIV_MASK 0x3ff +#define AR724X_PLL_REF_DIV_SHIFT 10 +#define AR724X_PLL_REF_DIV_MASK 0xf +#define AR724X_AHB_DIV_SHIFT 19 +#define AR724X_AHB_DIV_MASK 0x1 +#define AR724X_DDR_DIV_SHIFT 22 +#define AR724X_DDR_DIV_MASK 0x3 + #define AR91XX_PLL_REG_CPU_CONFIG 0x00 #define AR91XX_PLL_REG_ETH_CONFIG 0x04 #define AR91XX_PLL_REG_ETH0_INT_CLOCK 0x14 |