Browse Source

ramips: allow to use custom code for memory size detection

SVN-Revision: 33570
Gabor Juhos 13 years ago
parent
commit
80d2da9f0f

+ 1 - 0
target/linux/ramips/files/arch/mips/include/asm/mach-ralink/common.h

@@ -14,6 +14,7 @@ extern unsigned char ramips_sys_type[RAMIPS_SYS_TYPE_LEN];
 extern unsigned long ramips_mem_base;
 extern unsigned long ramips_mem_size_min;
 extern unsigned long ramips_mem_size_max;
+extern unsigned long (*ramips_get_mem_size)(void);
 
 void ramips_intc_irq_init(unsigned intc_base, unsigned irq, unsigned irq_base);
 u32 ramips_intc_get_status(void);

+ 12 - 6
target/linux/ramips/files/arch/mips/ralink/common/setup.c

@@ -21,6 +21,7 @@
 #include <asm/mach-ralink/machine.h>
 
 unsigned char ramips_sys_type[RAMIPS_SYS_TYPE_LEN];
+unsigned long (*ramips_get_mem_size)(void);
 
 const char *get_system_type(void)
 {
@@ -30,13 +31,18 @@ const char *get_system_type(void)
 static void __init detect_mem_size(void)
 {
 	unsigned long size;
-	void *base;
 
-	base = (void *) KSEG1ADDR(detect_mem_size);
-	for (size = ramips_mem_size_min; size < ramips_mem_size_max;
-	     size <<= 1 ) {
-		if (!memcmp(base, base + size, 1024))
-			break;
+	if (ramips_get_mem_size) {
+		size = ramips_get_mem_size();
+	} else {
+		void *base;
+
+		base = (void *) KSEG1ADDR(detect_mem_size);
+		for (size = ramips_mem_size_min; size < ramips_mem_size_max;
+		     size <<= 1 ) {
+			if (!memcmp(base, base + size, 1024))
+				break;
+		}
 	}
 
 	add_memory_region(ramips_mem_base, size, BOOT_MEM_RAM);