[PATCH] Revert "mtd: maps: remove uclinux map driver"

Greg Ungerer gerg at linux-m68k.org
Fri Jul 3 05:00:03 PDT 2026


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 <gregungerer at westnet.com.au>
> Closes: https://lore.kernel.org/all/b55ac37f-4523-46d0-8e77-3a17d7235ffe@westnet.com.au/
> Acked-by: Arnd Bergmann <arnd at kernel.org>
> Signed-off-by: Miquel Raynal <miquel.raynal at bootlin.com>

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 (gerg at snapgear.com)
> + *
> + *      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,




More information about the linux-mtd mailing list