|
@@ -568,17 +568,23 @@ static __init void memory_setup(void)
|
|
# endif /* ANOMALY_05000263 */
|
|
# endif /* ANOMALY_05000263 */
|
|
# endif /* CONFIG_ROMFS_FS */
|
|
# endif /* CONFIG_ROMFS_FS */
|
|
|
|
|
|
- memory_end -= mtd_size;
|
|
|
|
-
|
|
|
|
- if (mtd_size == 0) {
|
|
|
|
- console_init();
|
|
|
|
- panic("Don't boot kernel without rootfs attached.");
|
|
|
|
|
|
+ /* Since the default MTD_UCLINUX has no magic number, we just blindly
|
|
|
|
+ * read 8 past the end of the kernel's image, and look at it.
|
|
|
|
+ * When no image is attached, mtd_size is set to a random number
|
|
|
|
+ * Do some basic sanity checks before operating on things
|
|
|
|
+ */
|
|
|
|
+ if (mtd_size == 0 || memory_end <= mtd_size) {
|
|
|
|
+ pr_emerg("Could not find valid ram mtd attached.\n");
|
|
|
|
+ } else {
|
|
|
|
+ memory_end -= mtd_size;
|
|
|
|
+
|
|
|
|
+ /* Relocate MTD image to the top of memory after the uncached memory area */
|
|
|
|
+ uclinux_ram_map.phys = memory_mtd_start = memory_end;
|
|
|
|
+ uclinux_ram_map.size = mtd_size;
|
|
|
|
+ pr_info("Found mtd parition at 0x%p, (len=0x%lx), moving to 0x%p\n",
|
|
|
|
+ _end, mtd_size, (void *)memory_mtd_start);
|
|
|
|
+ dma_memcpy((void *)uclinux_ram_map.phys, _end, uclinux_ram_map.size);
|
|
}
|
|
}
|
|
-
|
|
|
|
- /* Relocate MTD image to the top of memory after the uncached memory area */
|
|
|
|
- uclinux_ram_map.phys = memory_mtd_start = memory_end;
|
|
|
|
- uclinux_ram_map.size = mtd_size;
|
|
|
|
- dma_memcpy((void *)uclinux_ram_map.phys, _end, uclinux_ram_map.size);
|
|
|
|
#endif /* CONFIG_MTD_UCLINUX */
|
|
#endif /* CONFIG_MTD_UCLINUX */
|
|
|
|
|
|
#if (defined(CONFIG_BFIN_EXTMEM_ICACHEABLE) && ANOMALY_05000263)
|
|
#if (defined(CONFIG_BFIN_EXTMEM_ICACHEABLE) && ANOMALY_05000263)
|