diff options
author | Huang Shijie <b32955@freescale.com> | 2013-03-26 13:50:03 +0800 |
---|---|---|
committer | Huang Shijie <b32955@freescale.com> | 2013-04-03 14:08:04 +0800 |
commit | ad8a919ae2d27fe59f13eb60b3e268a0862d8fab (patch) | |
tree | 80ac94f7a234cc828a0312a842fe3c8cc002d486 | |
parent | 1a1ff18ec19b2f1f4cd50a3298bb0a5fefe925d0 (diff) |
ENGR00256315-2 Revert "ENGR00244769-1 [NOR FLASH]-Improve WEIM NOR speed"
This reverts commit 4020b38fe2f0283af7630dbed28ed32d64118a83.
After apply these two patches, we can not pass the stress test.
So revert these two patches.
Signed-off-by: Huang Shijie <b32955@freescale.com>
-rw-r--r-- | drivers/mtd/maps/Kconfig | 9 | ||||
-rw-r--r-- | drivers/mtd/maps/Makefile | 1 | ||||
-rw-r--r-- | drivers/mtd/maps/imx6x-weimnor.c | 299 |
3 files changed, 0 insertions, 309 deletions
diff --git a/drivers/mtd/maps/Kconfig b/drivers/mtd/maps/Kconfig index 96e6f186bf57..c0c328c5b133 100644 --- a/drivers/mtd/maps/Kconfig +++ b/drivers/mtd/maps/Kconfig @@ -162,15 +162,6 @@ config MTD_PXA2XX help This provides a driver for the NOR flash attached to a PXA2xx chip. -config MTD_IMX6X_WEIMNOR - tristate "CFI Flash device mapped on iMX6x based boards" - depends on MTD_CFI || MTD_JEDECPROBE || MTD_ROM || MTD_LPDDR - help - This provides a driver for the WEIM (Parallel) NOR flash attached to - an iMX6x chip. This driver provides a cached read to take advantage - of paged reads by using memcopy. If you have a board such as the - SabreAI select 'Y' to use the NOR flash chips on it. - config MTD_OCTAGON tristate "JEDEC Flash device mapped on Octagon 5066 SBC" depends on X86 && MTD_JEDEC && MTD_COMPLEX_MAPPINGS diff --git a/drivers/mtd/maps/Makefile b/drivers/mtd/maps/Makefile index 8f437a0b828d..cb48b11affff 100644 --- a/drivers/mtd/maps/Makefile +++ b/drivers/mtd/maps/Makefile @@ -18,7 +18,6 @@ obj-$(CONFIG_MTD_ICHXROM) += ichxrom.o obj-$(CONFIG_MTD_CK804XROM) += ck804xrom.o obj-$(CONFIG_MTD_TSUNAMI) += tsunami_flash.o obj-$(CONFIG_MTD_PXA2XX) += pxa2xx-flash.o -obj-$(CONFIG_MTD_IMX6X_WEIMNOR) += imx6x-weimnor.o obj-$(CONFIG_MTD_MBX860) += mbx860.o obj-$(CONFIG_MTD_CEIVA) += ceiva.o obj-$(CONFIG_MTD_OCTAGON) += octagon-5066.o diff --git a/drivers/mtd/maps/imx6x-weimnor.c b/drivers/mtd/maps/imx6x-weimnor.c deleted file mode 100644 index 60a96da32dcf..000000000000 --- a/drivers/mtd/maps/imx6x-weimnor.c +++ /dev/null @@ -1,299 +0,0 @@ -/* - * Copyright (C) 2013 Freescale Semiconductor, Inc. All Rights Reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#include <linux/module.h> -#include <linux/types.h> -#include <linux/kernel.h> -#include <linux/init.h> -#include <linux/slab.h> -#include <linux/device.h> -#include <linux/platform_device.h> -#include <linux/mtd/mtd.h> -#include <linux/mtd/map.h> -#include <linux/mtd/partitions.h> -#include <linux/mtd/physmap.h> -#include <linux/mtd/concat.h> -#include <linux/io.h> - -#include <asm/outercache.h> - -#define MAX_RESOURCES 4 - -struct imx6x_weimnor_info { - struct mtd_info *mtd[MAX_RESOURCES]; - struct mtd_info *cmtd; - struct map_info map[MAX_RESOURCES]; - int nr_parts; - struct mtd_partition *parts; -}; - -static int imx6x_weimnor_remove(struct platform_device *dev) -{ - struct imx6x_weimnor_info *info; - int i; - - info = platform_get_drvdata(dev); - - if (info == NULL) - return 0; - - platform_set_drvdata(dev, NULL); - - if (info->cmtd) { - mtd_device_unregister(info->cmtd); - if (info->nr_parts) - kfree(info->parts); - if (info->cmtd != info->mtd[0]) - mtd_concat_destroy(info->cmtd); - } - - for (i = 0; i < MAX_RESOURCES; i++) { - if (info->mtd[i] != NULL) - map_destroy(info->mtd[i]); - if (info->map[i].cached) - iounmap(info->map[i].cached); - } - - kfree(info); - - return 0; -} - -static void imx6x_set_vpp(struct map_info *map, int state) -{ - struct platform_device *pdev; - struct physmap_flash_data *flash; - - pdev = (struct platform_device *)map->map_priv_1; - flash = pdev->dev.platform_data; - - if (flash->set_vpp) - flash->set_vpp(pdev, state); -} - -#define CACHELINESIZE 32 -static void imx6x_map_inval_cache(struct map_info *map, unsigned long from, -ssize_t len) -{ - unsigned long start; - unsigned long end; - unsigned long phys_start; - unsigned long phys_end; - - if (from > map->size) { - start = (unsigned long)map->cached + map->size; - phys_start = (unsigned long)map->phys + map->size; - } else { - start = (unsigned long)map->cached + from; - phys_start = (unsigned long)map->phys + from; - } - - if ((from + len) > map->size) { - end = start + map->size; - phys_end = phys_start + map->size; - } else { - end = start + len; - phys_end = phys_start + len; - } - - start &= ~(CACHELINESIZE - 1); - while (start < end) { - /* invalidate D cache line */ - asm volatile ("mcr p15, 0, %0, c7, c6, 1" : : "r" (start)); - start += CACHELINESIZE; - } - outer_inv_range(phys_start, phys_end); -} - -static const char *rom_probe_types[] = { - "cfi_probe", - "jedec_probe", - "qinfo_probe", - "map_rom", - NULL}; - -static const char *part_probe_types[] = { "cmdlinepart", "RedBoot", "afs", - NULL}; - -static int imx6x_weimnor_probe(struct platform_device *dev) -{ - struct physmap_flash_data *flash; - struct imx6x_weimnor_info *info; - const char **probe_type; - int err = 0; - int i; - int devices_found = 0; - - flash = dev->dev.platform_data; - if (flash == NULL) - return -ENODEV; - - info = devm_kzalloc(&dev->dev, sizeof(struct imx6x_weimnor_info), - GFP_KERNEL); - if (info == NULL) { - err = -ENOMEM; - goto err_out; - } - - if (flash->init) { - err = flash->init(dev); - if (err) - goto err_out; - } - - platform_set_drvdata(dev, info); - - for (i = 0; i < dev->num_resources; i++) { - printk(KERN_NOTICE - "imx6x-flash (physmap) platform " - "flash device: %.8llx at %.8llx\n", - (unsigned long long)resource_size(&dev->resource[i]), - (unsigned long long)dev->resource[i].start); - - if (!devm_request_mem_region(&dev->dev, - dev->resource[i].start, - resource_size(&dev->resource[i]), - dev_name(&dev->dev))) { - dev_err(&dev->dev, "Could not reserve memory region\n"); - err = -ENOMEM; - goto err_out; - } - - info->map[i].name = dev_name(&dev->dev); - info->map[i].phys = dev->resource[i].start; - info->map[i].size = resource_size(&dev->resource[i]); - info->map[i].bankwidth = flash->width; - info->map[i].set_vpp = imx6x_set_vpp; - info->map[i].pfow_base = 0; - info->map[i].map_priv_1 = (unsigned long)dev; - info->map[i].virt = devm_ioremap(&dev->dev, info->map[i].phys, - info->map[i].size); - if (info->map[i].virt == NULL) { - dev_err(&dev->dev, "Failed to ioremap flash region\n"); - err = -EIO; - goto err_out; - } - - info->map[i].cached = - ioremap_cached(info->map[i].phys, info->map[i].size); - if (!info->map[i].cached) - printk(KERN_WARNING "Failed to ioremap cached %s\n", - info->map[i].name); - - info->map[i].inval_cache = imx6x_map_inval_cache; - - simple_map_init(&info->map[i]); - probe_type = rom_probe_types; - - for (; info->mtd[i] == NULL && *probe_type != NULL; - probe_type++) - info->mtd[i] = do_map_probe(*probe_type, &info->map[i]); - - if (info->mtd[i] == NULL) { - dev_err(&dev->dev, "map_probe failed\n"); - err = -ENXIO; - goto err_out; - } else { - devices_found++; - } - info->mtd[i]->owner = THIS_MODULE; - info->mtd[i]->dev.parent = &dev->dev; - } - - if (devices_found == 1) { - info->cmtd = info->mtd[0]; - } else if (devices_found > 1) { - /* - * We detected multiple devices. Concatenate them together. - */ - info->cmtd = mtd_concat_create(info->mtd, devices_found, - dev_name(&dev->dev)); - if (info->cmtd == NULL) - err = -ENXIO; - } - if (err) - goto err_out; - - err = parse_mtd_partitions(info->cmtd, part_probe_types, - &info->parts, 0); - if (err > 0) { - mtd_device_register(info->cmtd, info->parts, err); - info->nr_parts = err; - return 0; - } - - if (flash->nr_parts) { - printk(KERN_NOTICE "Using physmap partition information\n"); - mtd_device_register(info->cmtd, flash->parts, - flash->nr_parts); - return 0; - } - - mtd_device_register(info->cmtd, NULL, 0); - - return 0; - -err_out: - imx6x_weimnor_remove(dev); - return err; -} - -#ifdef CONFIG_PM -static void imx6x_weimnor_shutdown(struct platform_device *dev) -{ - struct imx6x_weimnor_info *info = platform_get_drvdata(dev); - int i; - - for (i = 0; i < MAX_RESOURCES && info->mtd[i]; i++) - if (info->mtd[i]->suspend && info->mtd[i]->resume) - if (info->mtd[i]->suspend(info->mtd[i]) == 0) - info->mtd[i]->resume(info->mtd[i]); -} -#else -#define imx6x_weimnor_shutdown NULL -#endif - -static struct platform_driver imx6x_weimnor_driver = { - .probe = imx6x_weimnor_probe, - .remove = __devexit_p(imx6x_weimnor_remove), - .shutdown = imx6x_weimnor_shutdown, - .driver = { - .name = "imx6x-weimnor", - .owner = THIS_MODULE, - }, -}; - -static int __init imx6x_init(void) -{ - int err; - err = platform_driver_register(&imx6x_weimnor_driver); - return err; -} - -static void __exit imx6x_exit(void) -{ - platform_driver_unregister(&imx6x_weimnor_driver); -} - -module_init(imx6x_init); -module_exit(imx6x_exit); - -MODULE_LICENSE("GPL"); -MODULE_AUTHOR("Oliver Brown <oliver.brown@freescale.com>"); -MODULE_DESCRIPTION("MTD map driver for Freescale iMX"); - |