2016-02-09 12:14 GMT+02:00 Hannes Schmelzer <[email protected]>: > > On 02.02.2016 21:15, Eddy Petrișor wrote: >> >> The case of memory of size 0 is not that different from a memory of any >> other >> size, so we remove the duplicate code and treat the small differences when >> it >> is the case. >> >> Signed-off-by: Eddy Petrișor <[email protected]> >> --- >> >> v2: Removed patman stuff from commit message >> >> common/memsize.c | 47 +++++++++++++++++++++-------------------------- >> 1 file changed, 21 insertions(+), 26 deletions(-) >> >> diff --git a/common/memsize.c b/common/memsize.c >> index 0fb9ba5..5c0d279 100644 >> --- a/common/memsize.c >> +++ b/common/memsize.c >> @@ -33,38 +33,28 @@ long get_ram_size(long *base, long maxsize) >> long size; >> int i = 0; >> - for (cnt = (maxsize / sizeof(long)) >> 1; cnt > 0; cnt >>= 1) { >> + for (cnt = (maxsize / sizeof(long)) >> 1; cnt >= 0; cnt >>= 1) { >> addr = base + cnt; /* pointer arith! */ >> sync(); >> - save[i++] = *addr; >> + save[i] = *addr; >> sync(); >> - *addr = ~cnt; >> - } >> - >> - addr = base; >> - sync(); >> - save[i] = *addr; >> - sync(); >> - *addr = 0; >> - >> - sync(); >> - if ((val = *addr) != 0) { >> - /* Restore the original data before leaving the function. >> */ >> - sync(); >> - *addr = save[i]; >> - for (cnt = 1; cnt < maxsize / sizeof(long); cnt <<= 1) { >> - addr = base + cnt; >> - sync(); >> - *addr = save[--i]; >> + if (cnt) { >> + i++; >> + *addr = ~cnt; >> + } else { >> + *addr = 0; >> } >> - return (0); >> } >> - for (cnt = 1; cnt < maxsize / sizeof(long); cnt <<= 1) { >> + sync(); >> + cnt = 0; >> + do { >> addr = base + cnt; /* pointer arith! */ >> val = *addr; >> - *addr = save[--i]; >> - if (val != ~cnt) { >> + *addr = save[i--]; >> + sync(); >> + if (((cnt == 0) && (val != 0)) || >> + ((cnt != 0) && (val != ~cnt))) { >> size = cnt * sizeof(long); >> /* >> * Restore the original data >> @@ -74,11 +64,16 @@ long get_ram_size(long *base, long maxsize) >> cnt < maxsize / sizeof(long); >> cnt <<= 1) { >> addr = base + cnt; >> - *addr = save[--i]; >> + *addr = save[i--]; >> } >> return (size); >> } >> - } >> + >> + if (cnt) >> + cnt = cnt << 1; >> + else >> + cnt = 1; >> + } while (cnt < maxsize / sizeof(long)); >> return (maxsize); >> } > > Hi Eddy, > > this commit breaks my BuR AM335x boards. > The board stucks at boot: > > U-Boot 2016.03-rc1-00195-g437cc77-dirty (Feb 09 2016 - 09:25:51 +0100) > > initcall: 8080a384 > U-Boot code: 80800000 -> 8083A6F4 BSS: -> 8088433C > initcall: 8080a174 > initcall: 8080a3f0 > I2C: ready > initcall: 8080a3d8 > DRAM: initcall: 80800784 > > has anybody else experience on am335x boards with this ?
Hi Hannes, You are correct, it seems that during my clean up phase before sending the patch I managed to send an outdated version of the patch. The easiest fix is to add a 'break;' after the '*addr = 0;' part, but the reported size will be incorrect. I will work on a correct fixup. Sorry for the inconvenience. -- Eddy Petrișor _______________________________________________ U-Boot mailing list [email protected] http://lists.denx.de/mailman/listinfo/u-boot

