diff -Nurb mtd/drivers/mtd/maps/Config.in mtd-with-mtx/drivers/mtd/maps/Config.in --- mtd/drivers/mtd/maps/Config.in 2003-11-26 22:26:09.000000000 +0100 +++ mtd-with-mtx/drivers/mtd/maps/Config.in 2004-01-23 18:41:43.000000000 +0100 @@ -80,6 +80,7 @@ bool ' Db1x00 boot flash device' CONFIG_MTD_DB1X00_BOOT bool ' Db1x00 user flash device (2nd bank)' CONFIG_MTD_DB1X00_USER fi + dep_tristate ' MTX-1 flash device' CONFIG_MTD_MTX1 $CONFIG_MIPS_MTX1 dep_tristate ' Flash chip mapping on ITE QED-4N-S01B, Globespan IVR or custom board' CONFIG_MTD_CSTM_MIPS_IXX $CONFIG_MTD_CFI $CONFIG_MTD_JEDEC $CONFIG_MTD_PARTITIONS if [ "$CONFIG_MTD_CSTM_MIPS_IXX" = "y" -o "$CONFIG_MTD_CSTM_MIPS_IXX" = "m" ]; then hex ' Physical start address of flash mapping' CONFIG_MTD_CSTM_MIPS_IXX_START 0x8000000 diff -Nurb mtd/drivers/mtd/maps/Kconfig mtd-with-mtx/drivers/mtd/maps/Kconfig --- mtd/drivers/mtd/maps/Kconfig 2003-10-27 20:49:23.000000000 +0100 +++ mtd-with-mtx/drivers/mtd/maps/Kconfig 2004-01-23 18:49:17.000000000 +0100 @@ -210,6 +210,12 @@ You can say 'Y' to both this and 'MTD_PB1XXX_BOOT' above, to use both banks. +config MTD_MTX1 + tristate "Flash devices on 4G Systems MTX-1 boards" + depends on MIPS && MIPS_MTX1 + help + Flash memory access on 4G Systems MTX-1 boards + config MTD_DILNETPC tristate "CFI Flash device mapped on DIL/Net PC" depends on X86 && MTD_CONCAT && MTD_PARTITIONS && MTD_CFI_INTELEXT diff -Nurb mtd/drivers/mtd/maps/Makefile.common mtd-with-mtx/drivers/mtd/maps/Makefile.common --- mtd/drivers/mtd/maps/Makefile.common 2003-11-26 22:26:09.000000000 +0100 +++ mtd-with-mtx/drivers/mtd/maps/Makefile.common 2004-01-23 18:43:16.000000000 +0100 @@ -49,6 +49,7 @@ obj-$(CONFIG_MTD_PCI) += pci.o obj-$(CONFIG_MTD_PB1XXX) += pb1xxx-flash.o obj-$(CONFIG_MTD_DB1X00) += db1x00-flash.o +obj-$(CONFIG_MTD_MTX1) += mtx-1.o obj-$(CONFIG_MTD_LASAT) += lasat.o obj-$(CONFIG_MTD_AUTCPU12) += autcpu12-nvram.o obj-$(CONFIG_MTD_EDB7312) += edb7312.o diff -Nurb mtd/drivers/mtd/maps/mtx-1.c mtd-with-mtx/drivers/mtd/maps/mtx-1.c --- mtd/drivers/mtd/maps/mtx-1.c 1970-01-01 01:00:00.000000000 +0100 +++ mtd-with-mtx/drivers/mtd/maps/mtx-1.c 2004-01-23 18:40:35.000000000 +0100 @@ -0,0 +1,93 @@ +/* + * Flash memory access on 4G Systems MTX-1 board + * + * (C) Bruno Randolf (4G Systeme GmbH) + */ + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include + +#define WINDOW_ADDR 0x1E000000 +#define WINDOW_SIZE 0x2000000 +#define BUSWIDTH 4 + +static struct map_info mtx1_map = { + .name = "MTX-1 flash", + .size = WINDOW_SIZE, + .buswidth = BUSWIDTH, + .phys = WINDOW_ADDR +}; + +static struct mtd_partition mtx1_partitions[] = { + { + .name = "user fs", + .size = 0x1c00000, + .offset = 0, + },{ + .name = "yamon", + .size = 0x0100000, + .offset = MTDPART_OFS_APPEND, + .mask_flags = MTD_WRITEABLE /* force read-only */ + },{ + .name = "raw kernel", + .size = 0x02c0000, + .offset = MTDPART_OFS_APPEND, + },{ + .name = "yamon environment", + .size = 0x0040000, + .offset = MTDPART_OFS_APPEND, + .mask_flags = MTD_WRITEABLE /* force read-only */ + } +}; + +static struct mtd_info *mymtd; + +int __init mtx1_mtd_init(void) +{ + printk(KERN_NOTICE "MTX-1 flash: probing %d-bit flash bus at %x\n", + mtx1_map.buswidth*8, WINDOW_ADDR); + + mtx1_map.virt = (unsigned long)ioremap(WINDOW_ADDR, WINDOW_SIZE); + if (!mtx1_map.virt) { + printk("mtx_mtd_init: failed to ioremap\n"); + return -EIO; + } + + simple_map_init(&mtx1_map); + + mymtd = do_map_probe("cfi_probe", &mtx1_map); + if (!mymtd) { + iounmap(mtx1_map.virt); + return -ENXIO; + } + + mymtd->owner = THIS_MODULE; + + return add_mtd_partitions(mymtd, mtx1_partitions, ARRAY_SIZE(mtx1_partitions)); +} + +static void __exit mtx1_mtd_cleanup(void) +{ + if (mymtd) { + del_mtd_partitions(mymtd); + map_destroy(mymtd); + } + if (mtx1_map.virt) + iounmap(mtx1_map.virt); +} + +module_init(mtx1_mtd_init); +module_exit(mtx1_mtd_cleanup); + +MODULE_AUTHOR("Bruno Randolf "); +MODULE_DESCRIPTION("MTX-1 CFI map driver"); +MODULE_LICENSE("GPL");