Add a common get_ram_size() function and modify the the

board-specific files to invoke that common implementation.
This commit is contained in:
wdenk 2004-01-06 22:38:14 +00:00
parent b299e41a0d
commit c83bf6a2d0
54 changed files with 1848 additions and 3374 deletions

View file

@ -258,41 +258,10 @@ static long int dram_size (long int mamr_value,
{
volatile immap_t *immap = (immap_t *) CFG_IMMR;
volatile memctl8xx_t *memctl = &immap->im_memctl;
volatile long int *addr;
ulong cnt, val;
ulong save[32]; /* to make test non-destructive */
unsigned char i = 0;
memctl->memc_mamr = mamr_value;
for (cnt = maxsize / sizeof (long); cnt > 0; cnt >>= 1) {
addr = base + cnt; /* pointer arith! */
save[i++] = *addr;
*addr = ~cnt;
}
/* write 0 to base address */
addr = base;
save[i] = *addr;
*addr = 0;
/* check at base address */
if ((val = *addr) != 0) {
*addr = save[i];
return (0);
}
for (cnt = 1; cnt <= maxsize / sizeof (long); cnt <<= 1) {
addr = base + cnt; /* pointer arith! */
val = *addr;
*addr = save[--i];
if (val != (~cnt)) {
return (cnt * sizeof (long));
}
}
return (maxsize);
return (get_ram_size(base, maxsize));
}
/* ------------------------------------------------------------------------- */