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

From: Greg Ungerer

Date: Thu Jun 25 2026 - 08:44:42 EST


Hi Arnd,

On 26/5/26 20:32, Arnd Bergmann wrote:
From: Arnd Bergmann <arnd@xxxxxxxx>

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@xxxxxxxx>
---
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@xxxxxxxxxxxx)
- *
- * 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);
-
-/****************************************************************************/