[PATCH 2/3] mtd: maps: remove uclinux map driver

Greg Ungerer gregungerer at westnet.com.au
Thu Jun 25 05:07:50 PDT 2026


Hi Arnd,

On 26/5/26 20:32, Arnd Bergmann wrote:
> From: Arnd Bergmann <arnd at arndb.de>
> 
> Rather than using platform data or DT properties, the configuration
> for this mtd map driver used to be passed through the global
> uclinux_ram_map structure, but the last instance was removed in
> commit 4ba66a976072 ("arch: remove blackfin port") in 2018.
> 
> After commit 251f26c9e828 ("mtd: maps: Make uclinux_ram_map static"),
> it became impossible to configure it at all, even with out-of-tree
> platform code.
> 
> Clearly nobody is using it, so remove it.

It is used on some ColdFire platforms, and was working all the way up
to being removed in the current merge window.

The ColdFire platform startup code (arch/m68k/coldfire/head.S) has a
somewhat unusual setup that can copy an attached filesystem blob to
_bss_stop, and this is one of the places the uclinux.c map driver can
use as the filesystem memory address. From uclinux.c

     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;

No out of tree code is required. Most of the ColdFire defconfigs have
CONFIG_MTD_UCLINUX enabled, since it is commonly used.

Can we get this reverted?

Regards
Greg



> Signed-off-by: Arnd Bergmann <arnd at arndb.de>
> ---
>   drivers/mtd/maps/Kconfig   |   6 --
>   drivers/mtd/maps/Makefile  |   1 -
>   drivers/mtd/maps/uclinux.c | 118 -------------------------------------
>   3 files changed, 125 deletions(-)
>   delete mode 100644 drivers/mtd/maps/uclinux.c
> 
> diff --git a/drivers/mtd/maps/Kconfig b/drivers/mtd/maps/Kconfig
> index 784dba14e908..1e8f2b518ddd 100644
> --- a/drivers/mtd/maps/Kconfig
> +++ b/drivers/mtd/maps/Kconfig
> @@ -284,12 +284,6 @@ 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 157f911f86d8..eff28fc0b60e 100644
> --- a/drivers/mtd/maps/Makefile
> +++ b/drivers/mtd/maps/Makefile
> @@ -31,7 +31,6 @@ obj-$(CONFIG_MTD_SCx200_DOCFLASH)+= scx200_docflash.o
>   obj-$(CONFIG_MTD_SOLUTIONENGINE)+= solutionengine.o
>   obj-$(CONFIG_MTD_PCI)		+= pci.o
>   obj-$(CONFIG_MTD_IMPA7)		+= impa7.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
> deleted file mode 100644
> index de4c46318abb..000000000000
> --- a/drivers/mtd/maps/uclinux.c
> +++ /dev/null
> @@ -1,118 +0,0 @@
> -/****************************************************************************/
> -
> -/*
> - *	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);
> -
> -/****************************************************************************/




More information about the linux-mtd mailing list