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/
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.