mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-04-01 12:01:31 +00:00
CPU speed calculation updated (fixed a rounding problem)
This commit is contained in:
parent
0912e483eb
commit
b39392a98b
1 changed files with 14 additions and 34 deletions
|
@ -132,10 +132,10 @@ void get_sys_info (PPC405_SYS_INFO * sysInfo)
|
||||||
m = sysInfo->pllFbkDiv * sysInfo->pllFwdDivB * sysInfo->pllPlbDiv;
|
m = sysInfo->pllFbkDiv * sysInfo->pllFwdDivB * sysInfo->pllPlbDiv;
|
||||||
}
|
}
|
||||||
|
|
||||||
sysInfo->freqVCOMhz = (1000000 * m) / sysClkPeriodPs;
|
sysInfo->freqVCOHz = (1000000000000LL * (unsigned long long)m) /
|
||||||
sysInfo->freqProcessor = (sysInfo->freqVCOMhz * 1000000) / sysInfo->pllFwdDiv;
|
(unsigned long long)sysClkPeriodPs;
|
||||||
sysInfo->freqPLB = (sysInfo->freqVCOMhz * 1000000) /
|
sysInfo->freqProcessor = sysInfo->freqVCOHz / sysInfo->pllFwdDiv;
|
||||||
(sysInfo->pllFwdDivB * sysInfo->pllPlbDiv);
|
sysInfo->freqPLB = sysInfo->freqVCOHz / (sysInfo->pllFwdDivB * sysInfo->pllPlbDiv);
|
||||||
} else {
|
} else {
|
||||||
/*
|
/*
|
||||||
* Check pllFwdDiv to see if running in bypass mode where the CPU speed
|
* Check pllFwdDiv to see if running in bypass mode where the CPU speed
|
||||||
|
@ -148,26 +148,14 @@ void get_sys_info (PPC405_SYS_INFO * sysInfo)
|
||||||
sysInfo->freqProcessor = CONFIG_SYS_CLK_FREQ;
|
sysInfo->freqProcessor = CONFIG_SYS_CLK_FREQ;
|
||||||
sysInfo->freqPLB = CONFIG_SYS_CLK_FREQ / sysInfo->pllPlbDiv;
|
sysInfo->freqPLB = CONFIG_SYS_CLK_FREQ / sysInfo->pllPlbDiv;
|
||||||
} else {
|
} else {
|
||||||
sysInfo->freqVCOMhz = ( 1000000 *
|
sysInfo->freqVCOHz = ( 1000000000000LL *
|
||||||
sysInfo->pllFwdDiv *
|
(unsigned long long)sysInfo->pllFwdDiv *
|
||||||
sysInfo->pllFbkDiv *
|
(unsigned long long)sysInfo->pllFbkDiv *
|
||||||
sysInfo->pllPlbDiv
|
(unsigned long long)sysInfo->pllPlbDiv
|
||||||
) / sysClkPeriodPs;
|
) / (unsigned long long)sysClkPeriodPs;
|
||||||
if (sysInfo->freqVCOMhz >= VCO_MIN
|
sysInfo->freqPLB = (ONE_BILLION / ((sysClkPeriodPs * 10) /
|
||||||
&& sysInfo->freqVCOMhz <= VCO_MAX) {
|
|
||||||
sysInfo->freqPLB = (ONE_BILLION /
|
|
||||||
((sysClkPeriodPs * 10) /
|
|
||||||
sysInfo->pllFbkDiv)) * 10000;
|
sysInfo->pllFbkDiv)) * 10000;
|
||||||
sysInfo->freqProcessor = sysInfo->freqPLB * sysInfo->pllPlbDiv;
|
sysInfo->freqProcessor = sysInfo->freqPLB * sysInfo->pllPlbDiv;
|
||||||
} else {
|
|
||||||
printf ("\nInvalid VCO frequency calculated : %ld MHz \a\n",
|
|
||||||
sysInfo->freqVCOMhz);
|
|
||||||
printf ("It must be between %d-%d MHz \a\n",
|
|
||||||
VCO_MIN, VCO_MAX);
|
|
||||||
printf ("PLL Mode reg : %8.8lx\a\n",
|
|
||||||
pllmr);
|
|
||||||
hang ();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -376,7 +364,8 @@ void get_sys_info (PPC405_SYS_INFO * sysInfo)
|
||||||
/*
|
/*
|
||||||
* Determine VCO clock frequency
|
* Determine VCO clock frequency
|
||||||
*/
|
*/
|
||||||
sysInfo->freqVCOMhz = (1000000 * m) / sysClkPeriodPs;
|
sysInfo->freqVCOHz = (1000000000000LL * (unsigned long long)m) /
|
||||||
|
(unsigned long long)sysClkPeriodPs;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Determine CPU clock frequency
|
* Determine CPU clock frequency
|
||||||
|
@ -398,15 +387,6 @@ void get_sys_info (PPC405_SYS_INFO * sysInfo)
|
||||||
* Determine PLB clock frequency
|
* Determine PLB clock frequency
|
||||||
*/
|
*/
|
||||||
sysInfo->freqPLB = sysInfo->freqProcessor / sysInfo->pllPlbDiv;
|
sysInfo->freqPLB = sysInfo->freqProcessor / sysInfo->pllPlbDiv;
|
||||||
|
|
||||||
if (!((sysInfo->freqVCOMhz >= VCO_MIN) && (sysInfo->freqVCOMhz <= VCO_MAX))) {
|
|
||||||
printf ("\nInvalid VCO frequency calculated : %ld MHz \a\n",
|
|
||||||
sysInfo->freqVCOMhz);
|
|
||||||
printf ("It must be between %d-%d MHz \a\n", VCO_MIN, VCO_MAX);
|
|
||||||
printf ("PLL Mode reg 0 : %8.8lx\a\n", pllmr0);
|
|
||||||
printf ("PLL Mode reg 1 : %8.8lx\a\n", pllmr1);
|
|
||||||
hang ();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue