Rewrote picos_to_clk() to avoid rounding errors.

Clarified that conversion is to DRAM clocks rather than platform clocks.
Made function static to spd_sdram.c.

Signed-off-by: James Yang <James.Yang@freescale.com>
Signed-off-by: Jon Loeliger <jdl@freescale.com>
This commit is contained in:
James Yang 2007-03-16 13:02:53 -05:00 committed by Jon Loeliger
parent 2e343b9a57
commit c1ab82669d

View file

@ -51,20 +51,32 @@ extern int dma_xfer(void *dest, uint count, void *src);
#define CFG_SUPER_BANK_INTERLEAVING 0
/*
* Convert picoseconds into clock cycles (rounding up if needed).
* Convert picoseconds into DRAM clock cycles (rounding up if needed).
*/
int
picos_to_clk(int picos)
static unsigned int
picos_to_clk(unsigned int picos)
{
int clks;
/* use unsigned long long to avoid rounding errors */
const unsigned long long ULL_2e12 = 2000000000000ULL;
unsigned long long clks;
unsigned long long clks_temp;
clks = picos / (2000000000 / (get_bus_freq(0) / 1000));
if (picos % (2000000000 / (get_bus_freq(0) / 1000)) != 0) {
if (! picos)
return 0;
clks = get_bus_freq(0) * (unsigned long long) picos;
clks_temp = clks;
clks = clks / ULL_2e12;
if (clks_temp % ULL_2e12) {
clks++;
}
return clks;
if (clks > 0xFFFFFFFFULL) {
clks = 0xFFFFFFFFULL;
}
return (unsigned int) clks;
}