|
@@ -17,7 +17,9 @@
|
|
|
#include <linux/mv643xx_eth.h>
|
|
|
#include <linux/mv643xx_i2c.h>
|
|
|
#include <asm/page.h>
|
|
|
+#include <asm/setup.h>
|
|
|
#include <asm/timex.h>
|
|
|
+#include <asm/mach/arch.h>
|
|
|
#include <asm/mach/map.h>
|
|
|
#include <asm/arch/hardware.h>
|
|
|
#include "common.h"
|
|
@@ -347,3 +349,21 @@ void __init orion_init(void)
|
|
|
platform_device_register(&orion_ehci1);
|
|
|
platform_device_register(&orion_i2c);
|
|
|
}
|
|
|
+
|
|
|
+/*
|
|
|
+ * Many orion-based systems have buggy bootloader implementations.
|
|
|
+ * This is a common fixup for bogus memory tags.
|
|
|
+ */
|
|
|
+void __init tag_fixup_mem32(struct machine_desc *mdesc, struct tag *t,
|
|
|
+ char **from, struct meminfo *meminfo)
|
|
|
+{
|
|
|
+ for (; t->hdr.size; t = tag_next(t))
|
|
|
+ if (t->hdr.tag == ATAG_MEM &&
|
|
|
+ (!t->u.mem.size || t->u.mem.size & ~PAGE_MASK ||
|
|
|
+ t->u.mem.start & ~PAGE_MASK)) {
|
|
|
+ printk(KERN_WARNING
|
|
|
+ "Clearing invalid memory bank %dKB@0x%08x\n",
|
|
|
+ t->u.mem.size / 1024, t->u.mem.start);
|
|
|
+ t->hdr.tag = 0;
|
|
|
+ }
|
|
|
+}
|