diff options
Diffstat (limited to 'packages/linux/logicpd-pxa270-2.6.19.2/logicpd-pxa270-flash.patch')
-rw-r--r-- | packages/linux/logicpd-pxa270-2.6.19.2/logicpd-pxa270-flash.patch | 244 |
1 files changed, 244 insertions, 0 deletions
diff --git a/packages/linux/logicpd-pxa270-2.6.19.2/logicpd-pxa270-flash.patch b/packages/linux/logicpd-pxa270-2.6.19.2/logicpd-pxa270-flash.patch new file mode 100644 index 0000000000..43990058c2 --- /dev/null +++ b/packages/linux/logicpd-pxa270-2.6.19.2/logicpd-pxa270-flash.patch @@ -0,0 +1,244 @@ +Index: drivers/mtd/maps/Kconfig +=================================================================== +RCS file: /cvs/eps/dev_eng/sw/products/Linux/PXAEngine/pxa/linux-2.6.17-rc5/drivers/mtd/maps/Kconfig,v +retrieving revision 1.1.1.1 +retrieving revision 1.2 +diff -c -3 -p -r1.1.1.1 -r1.2 +*** drivers/mtd/maps/Kconfig 29 May 2006 00:58:44 -0000 1.1.1.1 +--- drivers/mtd/maps/Kconfig 30 May 2006 13:04:33 -0000 1.2 +*************** config MTD_MAINSTONE +*** 137,142 **** +--- 137,149 ---- + This provides a driver for the on-board flash of the Intel + 'Mainstone PXA27x evaluation board. + ++ config MTD_LOGICPD_PXA270 ++ tristate "CFI Flash device mapped on LogicPD PXA270 Card Engine" ++ depends on MACH_LOGICPD_PXA270 && MTD_CFI_INTELEXT && MTD_PARTITIONS ++ help ++ This provides a driver for the on-board flash of the LogicPD ++ PXA270 Card Engine. ++ + config MTD_OCTAGON + tristate "JEDEC Flash device mapped on Octagon 5066 SBC" + depends on X86 && MTD_JEDEC && MTD_COMPLEX_MAPPINGS +Index: drivers/mtd/maps/Makefile +=================================================================== +RCS file: /cvs/eps/dev_eng/sw/products/Linux/PXAEngine/pxa/linux-2.6.17-rc5/drivers/mtd/maps/Makefile,v +retrieving revision 1.1.1.1 +retrieving revision 1.2 +diff -c -3 -p -r1.1.1.1 -r1.2 +*** drivers/mtd/maps/Makefile 29 May 2006 00:58:44 -0000 1.1.1.1 +--- drivers/mtd/maps/Makefile 30 May 2006 13:04:33 -0000 1.2 +*************** obj-$(CONFIG_MTD_ICHXROM) += ichxrom.o +*** 22,27 **** +--- 22,28 ---- + obj-$(CONFIG_MTD_TSUNAMI) += tsunami_flash.o + obj-$(CONFIG_MTD_LUBBOCK) += lubbock-flash.o + obj-$(CONFIG_MTD_MAINSTONE) += mainstone-flash.o ++ obj-$(CONFIG_MTD_LOGICPD_PXA270)+= lpd270-flash.o + obj-$(CONFIG_MTD_MBX860) += mbx860.o + obj-$(CONFIG_MTD_CEIVA) += ceiva.o + obj-$(CONFIG_MTD_OCTAGON) += octagon-5066.o +Index: drivers/mtd/maps/lpd270-flash.c +=================================================================== +--- /dev/null 2006-05-22 10:25:23.000000000 -0400 ++++ drivers/mtd/maps/lpd270-flash.c 2006-12-29 13:19:54.000000000 -0500 +@@ -0,0 +1,197 @@ ++ /* ++ * $Id: lpd270-flash.c,v 1.1 2006/05/30 13:03:55 LOGIC+peterb Exp $ ++ * ++ * Map driver for the Lpd270 developer platform. ++ * ++ * Author: Nicolas Pitre ++ * Copyright: (C) 2001 MontaVista Software Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ */ ++ ++ #include <linux/module.h> ++ #include <linux/types.h> ++ #include <linux/kernel.h> ++ #include <linux/init.h> ++ #include <linux/dma-mapping.h> ++ #include <linux/slab.h> ++ ++ #include <linux/mtd/mtd.h> ++ #include <linux/mtd/map.h> ++ #include <linux/mtd/partitions.h> ++ ++ #include <asm/io.h> ++ #include <asm/hardware.h> ++ #include <asm/arch/pxa-regs.h> ++ // #include <asm/arch/lpd270.h> ++ ++ ++ #define ROM_ADDR 0x00000000 ++ #define FLASH_ADDR 0x04000000 ++ ++ #define WINDOW_SIZE 0x04000000 ++ ++ static void lpd270_map_inval_cache(struct map_info *map, unsigned long from, ++ ssize_t len) ++ { ++ consistent_sync((char *)map->cached + from, len, DMA_FROM_DEVICE); ++ } ++ ++ static struct map_info lpd270_maps[2] = { { ++ .size = WINDOW_SIZE, ++ .phys = PXA_CS0_PHYS, ++ .inval_cache = lpd270_map_inval_cache, ++ }, { ++ .size = WINDOW_SIZE, ++ .phys = PXA_CS1_PHYS, ++ .inval_cache = lpd270_map_inval_cache, ++ } }; ++ ++ static struct mtd_partition lpd270_partitions[] = { ++ { ++ .name = "Bootloader", ++ .size = 0x000C0000, ++ .offset = 0, ++ .mask_flags = MTD_WRITEABLE /* force read-only */ ++ },{ ++ .name = "YAFFS", ++ .size = 0x00F40000, ++ .offset = 0x000C0000, ++ },{ ++ .name = "Filesystem", ++ .size = MTDPART_SIZ_FULL, ++ .offset = 0x01000000 ++ } ++ }; ++ ++ static struct mtd_info *mymtds[2]; ++ static struct mtd_partition *parsed_parts[2]; ++ static int nr_parsed_parts[2]; ++ ++ static const char *probes[] = { "RedBoot", "cmdlinepart", NULL }; ++ ++ static int __init init_lpd270(void) ++ { ++ int SW7 = 0; /* FIXME: get from SCR (Mst doc section 3.2.1.1) */ ++ int ret = 0, i; ++ ++ lpd270_maps[0].bankwidth = (BOOT_DEF & 1) ? 2 : 4; ++ lpd270_maps[1].bankwidth = 4; ++ ++ /* Compensate for SW7 which swaps the flash banks */ ++ lpd270_maps[SW7].name = "processor flash"; ++ lpd270_maps[SW7 ^ 1].name = "main board flash"; ++ ++ printk(KERN_CRIT "FLASH ENABLED!!!!!!!!!! Lpd270 configured to boot from %s\n", ++ lpd270_maps[0].name); ++ ++ // Set VPP in CPLD to allow writes to the flash ++ { ++ unsigned short *p; ++ ++ p = ioremap(0x08000000, PAGE_SIZE); ++ if (!p) { ++ printk("%s:%d ioremap failed\n", __FUNCTION__, __LINE__); ++ } else { ++ printk("%s:%d CTRL REG %04x\n", __FUNCTION__, __LINE__, *p); ++ *p |= (1<<3); // FL_VPEN ++ iounmap(p); ++ } ++ } ++ ++ for (i = 0; i < 2; i++) { ++ lpd270_maps[i].virt = ioremap_nocache(lpd270_maps[i].phys, ++ WINDOW_SIZE); ++ if (!lpd270_maps[i].virt) { ++ printk(KERN_WARNING "Failed to ioremap %s\n", ++ lpd270_maps[i].name); ++ if (!ret) ++ ret = -ENOMEM; ++ continue; ++ } ++ #if 0 ++ lpd270_maps[i].cached = ++ ioremap_cached(lpd270_maps[i].phys, WINDOW_SIZE); ++ if (!lpd270_maps[i].cached) ++ printk(KERN_WARNING "Failed to ioremap cached %s\n", ++ lpd270_maps[i].name); ++ #endif ++ simple_map_init(&lpd270_maps[i]); ++ ++ printk(KERN_NOTICE ++ "Probing %s at physical address 0x%08lx" ++ " (%d-bit bankwidth)\n", ++ lpd270_maps[i].name, lpd270_maps[i].phys, ++ lpd270_maps[i].bankwidth * 8); ++ ++ mymtds[i] = do_map_probe("cfi_probe", &lpd270_maps[i]); ++ ++ if (!mymtds[i]) { ++ iounmap((void *)lpd270_maps[i].virt); ++ if (lpd270_maps[i].cached) ++ iounmap(lpd270_maps[i].cached); ++ if (!ret) ++ ret = -EIO; ++ continue; ++ } ++ mymtds[i]->owner = THIS_MODULE; ++ ++ ret = parse_mtd_partitions(mymtds[i], probes, ++ &parsed_parts[i], 0); ++ ++ if (ret > 0) ++ nr_parsed_parts[i] = ret; ++ } ++ ++ if (!mymtds[0] && !mymtds[1]) ++ return ret; ++ ++ for (i = 0; i < 2; i++) { ++ if (!mymtds[i]) { ++ printk(KERN_WARNING "%s is absent. Skipping\n", ++ lpd270_maps[i].name); ++ } else if (nr_parsed_parts[i]) { ++ add_mtd_partitions(mymtds[i], parsed_parts[i], ++ nr_parsed_parts[i]); ++ } else if (!i) { ++ printk("Using static partitions on %s\n", ++ lpd270_maps[i].name); ++ add_mtd_partitions(mymtds[i], lpd270_partitions, ++ ARRAY_SIZE(lpd270_partitions)); ++ } else { ++ printk("Registering %s as whole device\n", ++ lpd270_maps[i].name); ++ add_mtd_device(mymtds[i]); ++ } ++ } ++ return 0; ++ } ++ ++ static void __exit cleanup_lpd270(void) ++ { ++ int i; ++ for (i = 0; i < 2; i++) { ++ if (!mymtds[i]) ++ continue; ++ ++ if (nr_parsed_parts[i] || !i) ++ del_mtd_partitions(mymtds[i]); ++ else ++ del_mtd_device(mymtds[i]); ++ ++ map_destroy(mymtds[i]); ++ iounmap((void *)lpd270_maps[i].virt); ++ if (lpd270_maps[i].cached) ++ iounmap(lpd270_maps[i].cached); ++ kfree(parsed_parts[i]); ++ } ++ } ++ ++ module_init(init_lpd270); ++ module_exit(cleanup_lpd270); ++ ++ MODULE_LICENSE("GPL"); ++ MODULE_AUTHOR("Nicolas Pitre <nico@cam.org>"); ++ MODULE_DESCRIPTION("MTD map driver for Logic PXA270"); |