public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [U-Boot] [PATCH] common/memsize.c: Simplify RAM size detection
@ 2016-01-28 22:41 Eddy Petrișor
  2016-02-02 20:15 ` [U-Boot] [PATCHv2] " Eddy Petrișor
  0 siblings, 1 reply; 11+ messages in thread
From: Eddy Petrișor @ 2016-01-28 22:41 UTC (permalink / raw)
  To: u-boot

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.

Series-to: u-boot
Signed-off-by: Eddy Petri?or <eddy.petrisor@gmail.com>
---
 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);
 }
-- 
2.1.4

^ permalink raw reply related	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2016-02-12 15:53 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-01-28 22:41 [U-Boot] [PATCH] common/memsize.c: Simplify RAM size detection Eddy Petrișor
2016-02-02 20:15 ` [U-Boot] [PATCHv2] " Eddy Petrișor
2016-02-03 13:38   ` Albert ARIBAUD
2016-02-03 16:32     ` Eddy Petrișor
2016-02-03 17:48       ` [U-Boot] Patman use (was: [PATCHv2] common/memsize.c: Simplify RAM size detection) Albert ARIBAUD
     [not found]         ` <CAK0XTWeyzNXbhYLP14FBgP7jRBN8bTiqg2R955zb-a9Zmm1Zow@mail.gmail.com>
2016-02-05 17:03           ` [U-Boot] Fwd: " Eddy Petrișor
2016-02-12 15:53             ` Simon Glass
2016-02-08 20:49   ` [U-Boot] [U-Boot, PATCHv2] common/memsize.c: Simplify RAM size detection Tom Rini
2016-02-08 23:25     ` Eddy Petrișor
2016-02-09 10:14   ` [U-Boot] [PATCHv2] " Hannes Schmelzer
2016-02-09 14:35     ` Eddy Petrișor

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox