From 7bb460e11acf9709381f656eb4532e3213f4aeda Mon Sep 17 00:00:00 2001
From: juhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Date: Thu, 13 Nov 2008 15:55:39 +0000
Subject: [PATCH] [ar71xx] rewrite memory size detection

git-svn-id: svn://svn.openwrt.org/openwrt/trunk@13198 3c298f89-4303-0410-b956-a3cf2f4a3e73
---
 .../ar71xx/files/arch/mips/ar71xx/setup.c     | 28 +++++--------------
 1 file changed, 7 insertions(+), 21 deletions(-)

diff --git a/target/linux/ar71xx/files/arch/mips/ar71xx/setup.c b/target/linux/ar71xx/files/arch/mips/ar71xx/setup.c
index 855497c7d..fc8652098 100644
--- a/target/linux/ar71xx/files/arch/mips/ar71xx/setup.c
+++ b/target/linux/ar71xx/files/arch/mips/ar71xx/setup.c
@@ -85,28 +85,14 @@ int __init ar71xx_pci_init(unsigned nr_irqs, struct ar71xx_pci_irq *map)
 
 static void __init ar71xx_detect_mem_size(void)
 {
-	volatile u8 *p;
-	u8 memsave;
-	u32 size;
-
-	p = (volatile u8 *) KSEG1ADDR(0);
-	memsave = *p;
-	for (size = AR71XX_MEM_SIZE_MIN;
-	     size <= (AR71XX_MEM_SIZE_MAX >> 1); size <<= 1) {
-		volatile u8 *r;
-
-		r = (p + size);
-		*p = 0x55;
-		if (*r == 0x55) {
-			/* Mirrored data found, try another pattern */
-			*p = 0xAA;
-			if (*r == 0xAA) {
-				/* Mirrored data found again, stop detection */
-				break;
-			}
-		}
+	unsigned long size;
+
+	for (size = AR71XX_MEM_SIZE_MIN; size < AR71XX_MEM_SIZE_MAX;
+	     size <<= 1 ) {
+		if (!memcmp(ar71xx_detect_mem_size,
+			    ar71xx_detect_mem_size + size, 1024))
+			break;
 	}
-	*p = memsave;
 
 	add_memory_region(0, size, BOOT_MEM_RAM);
 }
-- 
2.20.1