From mboxrd@z Thu Jan 1 00:00:00 1970 From: Hannes Schmelzer Date: Tue, 09 Feb 2016 11:14:28 +0100 Subject: [U-Boot] [PATCHv2] common/memsize.c: Simplify RAM size detection In-Reply-To: <1454444128-12322-1-git-send-email-eddy.petrisor@gmail.com> References: <1454020867-4914-1-git-send-email-eddy.petrisor@gmail.com> <1454444128-12322-1-git-send-email-eddy.petrisor@gmail.com> Message-ID: <56B9BC04.8090808@schmelzer.or.at> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de 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 > --- > > 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 ? best regards, Hannes