|
@@ -67,10 +67,16 @@ static int __init uclinux_mtd_init(void)
|
|
|
printk("uclinux[mtd]: RAM probe address=0x%x size=0x%x\n",
|
|
|
(int) mapp->phys, (int) mapp->size);
|
|
|
|
|
|
- mapp->virt = ioremap_nocache(mapp->phys, mapp->size);
|
|
|
+ /*
|
|
|
+ * The filesystem is guaranteed to be in direct mapped memory. It is
|
|
|
+ * directly following the kernels own bss region. Following the same
|
|
|
+ * mechanism used by architectures setting up traditional initrds we
|
|
|
+ * use phys_to_virt to get the virtual address of its start.
|
|
|
+ */
|
|
|
+ mapp->virt = phys_to_virt(mapp->phys);
|
|
|
|
|
|
if (mapp->virt == 0) {
|
|
|
- printk("uclinux[mtd]: ioremap_nocache() failed\n");
|
|
|
+ printk("uclinux[mtd]: no virtual mapping?\n");
|
|
|
return(-EIO);
|
|
|
}
|
|
|
|
|
@@ -79,7 +85,6 @@ static int __init uclinux_mtd_init(void)
|
|
|
mtd = do_map_probe("map_ram", mapp);
|
|
|
if (!mtd) {
|
|
|
printk("uclinux[mtd]: failed to find a mapping?\n");
|
|
|
- iounmap(mapp->virt);
|
|
|
return(-ENXIO);
|
|
|
}
|
|
|
|
|
@@ -102,10 +107,8 @@ static void __exit uclinux_mtd_cleanup(void)
|
|
|
map_destroy(uclinux_ram_mtdinfo);
|
|
|
uclinux_ram_mtdinfo = NULL;
|
|
|
}
|
|
|
- if (uclinux_ram_map.virt) {
|
|
|
- iounmap((void *) uclinux_ram_map.virt);
|
|
|
+ if (uclinux_ram_map.virt)
|
|
|
uclinux_ram_map.virt = 0;
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
/****************************************************************************/
|