summaryrefslogtreecommitdiff
path: root/cpu/mpc85xx/speed.c
diff options
context:
space:
mode:
authorMarkus Klotzbuecher <mk@denx.de>2007-05-07 14:10:38 +0200
committerMarkus Klotzbuecher <mk@pollux.denx.de>2007-05-07 14:10:38 +0200
commit6ede0c8b69ad1e6b16463ec75a6dccca152c4b17 (patch)
tree978dcbd6189998876bb227ae5bbea03000a2f9c5 /cpu/mpc85xx/speed.c
parent61ea75aa07838435ec570ac85a2e3fc038844596 (diff)
parentac4cd59d59c9bf3f89cb7a344abf8184d678f562 (diff)
downloadu-boot-imx-6ede0c8b69ad1e6b16463ec75a6dccca152c4b17.zip
u-boot-imx-6ede0c8b69ad1e6b16463ec75a6dccca152c4b17.tar.gz
u-boot-imx-6ede0c8b69ad1e6b16463ec75a6dccca152c4b17.tar.bz2
Merge with git://www.denx.de/git/u-boot.git
Diffstat (limited to 'cpu/mpc85xx/speed.c')
-rw-r--r--cpu/mpc85xx/speed.c44
1 files changed, 8 insertions, 36 deletions
diff --git a/cpu/mpc85xx/speed.c b/cpu/mpc85xx/speed.c
index ca81ee7..12359a2 100644
--- a/cpu/mpc85xx/speed.c
+++ b/cpu/mpc85xx/speed.c
@@ -37,49 +37,21 @@ void get_sys_info (sys_info_t * sysInfo)
{
volatile immap_t *immap = (immap_t *)CFG_IMMR;
volatile ccsr_gur_t *gur = &immap->im_gur;
- uint plat_ratio,e500_ratio;
+ uint plat_ratio,e500_ratio,half_freqSystemBus;
plat_ratio = (gur->porpllsr) & 0x0000003e;
plat_ratio >>= 1;
- switch(plat_ratio) {
- case 0x02:
- case 0x03:
- case 0x04:
- case 0x05:
- case 0x06:
- case 0x08:
- case 0x09:
- case 0x0a:
- case 0x0c:
- case 0x10:
- sysInfo->freqSystemBus = plat_ratio * CONFIG_SYS_CLK_FREQ;
- break;
- default:
- sysInfo->freqSystemBus = 0;
- break;
- }
-
+ sysInfo->freqSystemBus = plat_ratio * CONFIG_SYS_CLK_FREQ;
e500_ratio = (gur->porpllsr) & 0x003f0000;
e500_ratio >>= 16;
- switch(e500_ratio) {
- case 0x04:
- sysInfo->freqProcessor = 2*sysInfo->freqSystemBus;
- break;
- case 0x05:
- sysInfo->freqProcessor = 5*sysInfo->freqSystemBus/2;
- break;
- case 0x06:
- sysInfo->freqProcessor = 3*sysInfo->freqSystemBus;
- break;
- case 0x07:
- sysInfo->freqProcessor = 7*sysInfo->freqSystemBus/2;
- break;
- default:
- sysInfo->freqProcessor = 0;
- break;
- }
+
+ /* Divide before multiply to avoid integer
+ * overflow for processor speeds above 2GHz */
+ half_freqSystemBus = sysInfo->freqSystemBus/2;
+ sysInfo->freqProcessor = e500_ratio*half_freqSystemBus;
}
+
int get_clocks (void)
{
sys_info_t sys_info;