Re: [PATCH] Revert "mtd: maps: remove uclinux map driver"
Greg Ungerer <[email protected]>
| Newsgroups | org.infradead.lists.linux-mtd,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
Hi Miquel, On 3/7/26 21:35, Miquel Raynal wrote: > The uclinux MTD map driver is still actively used on ColdFire (m68k) > platforms. The ColdFire startup code in arch/m68k/coldfire/head.S copies > an attached filesystem blob to _bss_stop, and the uclinux driver picks > it up from there. Most ColdFire defconfigs enable CONFIG_MTD_UCLINUX, as > the driver seems to serve as a replacement for CONFIG_BLK_DEV_INITRD on > these non-MMU targets. > > The driver was removed as part of a series cleaning up AMD Élan specific > drivers, but unlike the other three drivers in that series, this driver > seemed to not be as Élan specific (nor unused) as initially thought. > > This reverts commit c584b8a7ad01a334a89732f3c5791ba14e58642b. > > Reported-by: Greg Ungerer <[email protected]> > Closes: https://lore.kernel.org/all/[email protected]/ > Acked-by: Arnd Bergmann <[email protected]> > Signed-off-by: Miquel Raynal <[email protected]> Looks good to me too. Thanks for taking care of this. Regards Greg > --- > drivers/mtd/maps/Kconfig | 6 +++ > drivers/mtd/maps/Makefile | 1 + > drivers/mtd/maps/uclinux.c | 118 +++++++++++++++++++++++++++++++++++++++++++++ > 3 files changed, 125 insertions(+) > > diff --git a/drivers/mtd/maps/Kconfig b/drivers/mtd/maps/Kconfig > index dce5e67ce3c2..f447902d707e 100644 > --- a/drivers/mtd/maps/Kconfig > +++ b/drivers/mtd/maps/Kconfig > @@ -277,6 +277,12 @@ config MTD_PCMCIA_ANONYMOUS > > If unsure, say N. > > +config MTD_UCLINUX > + bool "Generic uClinux RAM/ROM filesystem support" > + depends on (MTD_RAM=y || MTD_ROM=y) && (!MMU || COLDFIRE) > + help > + Map driver to support image based filesystems for uClinux. > + > config MTD_PLATRAM > tristate "Map driver for platform device RAM (mtd-ram)" > select MTD_RAM > diff --git a/drivers/mtd/maps/Makefile b/drivers/mtd/maps/Makefile > index fbed278157f6..01745eca1f73 100644 > --- a/drivers/mtd/maps/Makefile > +++ b/drivers/mtd/maps/Makefile > @@ -30,6 +30,7 @@ obj-$(CONFIG_MTD_SUN_UFLASH) += sun_uflash.o > obj-$(CONFIG_MTD_SCx200_DOCFLASH)+= scx200_docflash.o > obj-$(CONFIG_MTD_SOLUTIONENGINE)+= solutionengine.o > obj-$(CONFIG_MTD_PCI) += pci.o > +obj-$(CONFIG_MTD_UCLINUX) += uclinux.o > obj-$(CONFIG_MTD_SCB2_FLASH) += scb2_flash.o > obj-$(CONFIG_MTD_PLATRAM) += plat-ram.o > obj-$(CONFIG_MTD_VMU) += vmu-flash.o > diff --git a/drivers/mtd/maps/uclinux.c b/drivers/mtd/maps/uclinux.c > new file mode 100644 > index 000000000000..de4c46318abb > --- /dev/null > +++ b/drivers/mtd/maps/uclinux.c > @@ -0,0 +1,118 @@ > +/****************************************************************************/ > + > +/* > + * uclinux.c -- generic memory mapped MTD driver for uclinux > + * > + * (C) Copyright 2002, Greg Ungerer ([email protected]) > + * > + * License: GPL > + */ > + > +/****************************************************************************/ > + > +#include <linux/moduleparam.h> > +#include <linux/types.h> > +#include <linux/init.h> > +#include <linux/kernel.h> > +#include <linux/fs.h> > +#include <linux/mm.h> > +#include <linux/major.h> > +#include <linux/mtd/mtd.h> > +#include <linux/mtd/map.h> > +#include <linux/mtd/partitions.h> > +#include <asm/io.h> > +#include <asm/sections.h> > + > +/****************************************************************************/ > + > +#ifdef CONFIG_MTD_ROM > +#define MAP_NAME "rom" > +#else > +#define MAP_NAME "ram" > +#endif > + > +static struct map_info uclinux_ram_map = { > + .name = MAP_NAME, > + .size = 0, > +}; > + > +static unsigned long physaddr = -1; > +module_param(physaddr, ulong, S_IRUGO); > + > +static struct mtd_info *uclinux_ram_mtdinfo; > + > +/****************************************************************************/ > + > +static const struct mtd_partition uclinux_romfs[] = { > + { .name = "ROMfs" } > +}; > + > +#define NUM_PARTITIONS ARRAY_SIZE(uclinux_romfs) > + > +/****************************************************************************/ > + > +static int uclinux_point(struct mtd_info *mtd, loff_t from, size_t len, > + size_t *retlen, void **virt, resource_size_t *phys) > +{ > + struct map_info *map = mtd->priv; > + *virt = map->virt + from; > + if (phys) > + *phys = map->phys + from; > + *retlen = len; > + return(0); > +} > + > +/****************************************************************************/ > + > +static int __init uclinux_mtd_init(void) > +{ > + struct mtd_info *mtd; > + struct map_info *mapp; > + > + mapp = &uclinux_ram_map; > + > + if (physaddr == -1) > + mapp->phys = (resource_size_t)__bss_stop; > + else > + mapp->phys = physaddr; > + > + if (!mapp->size) > + mapp->size = PAGE_ALIGN(ntohl(*((unsigned long *)(mapp->phys + 8)))); > + mapp->bankwidth = 4; > + > + printk("uclinux[mtd]: probe address=0x%x size=0x%x\n", > + (int) mapp->phys, (int) 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]: no virtual mapping?\n"); > + return(-EIO); > + } > + > + simple_map_init(mapp); > + > + mtd = do_map_probe("map_" MAP_NAME, mapp); > + if (!mtd) { > + printk("uclinux[mtd]: failed to find a mapping?\n"); > + return(-ENXIO); > + } > + > + mtd->owner = THIS_MODULE; > + mtd->_point = uclinux_point; > + mtd->priv = mapp; > + > + uclinux_ram_mtdinfo = mtd; > + mtd_device_register(mtd, uclinux_romfs, NUM_PARTITIONS); > + > + return(0); > +} > +device_initcall(uclinux_mtd_init); > + > +/****************************************************************************/ > > --- > base-commit: dc59e4fea9d83f03bad6bddf3fa2e52491777482 > change-id: 20260703-perso-revert-uclinux-map-8efed661809d > > Best regards, ______________________________________________________ Linux MTD discussion mailing list http://lists.infradead.org/mailman/listinfo/linux-mtd/