]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/mtd/maps/uclinux.c
Merge branch 'for-3.7' of git://linux-nfs.org/~bfields/linux
[karo-tx-linux.git] / drivers / mtd / maps / uclinux.c
index c3bb304eca076ffab133b7cd1e6a363a0763dfaa..299bf88a6f4112220c0fda6766878646c5ad0143 100644 (file)
@@ -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;
-       }
 }
 
 /****************************************************************************/