aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mtd
diff options
context:
space:
mode:
authorArtem Bityutskiy <artem.bityutskiy@linux.intel.com>2013-03-11 12:24:37 -0400
committerDavid Woodhouse <David.Woodhouse@intel.com>2013-04-05 08:01:55 -0400
commitb08a25ade20542d43881c94c6fd4e03f90c1f096 (patch)
tree30346e977ea1a16821a850155a76e07cd01237ef /drivers/mtd
parentbece641c967a8fa76cae718daa46c36a0c298cc7 (diff)
mtd: remove the ixp2000 map driver
This driver depends on CONFIG_IXP2000 which is not defined anywhere, which means this driver is dead. Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com> Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
Diffstat (limited to 'drivers/mtd')
-rw-r--r--drivers/mtd/maps/Kconfig9
-rw-r--r--drivers/mtd/maps/Makefile1
-rw-r--r--drivers/mtd/maps/ixp2000.c253
3 files changed, 0 insertions, 263 deletions
diff --git a/drivers/mtd/maps/Kconfig b/drivers/mtd/maps/Kconfig
index b6a369a07dbc..4b70976b2cc5 100644
--- a/drivers/mtd/maps/Kconfig
+++ b/drivers/mtd/maps/Kconfig
@@ -297,15 +297,6 @@ config MTD_IXP4XX
297 IXDP425 and Coyote. If you have an IXP4xx based board and 297 IXDP425 and Coyote. If you have an IXP4xx based board and
298 would like to use the flash chips on it, say 'Y'. 298 would like to use the flash chips on it, say 'Y'.
299 299
300config MTD_IXP2000
301 tristate "CFI Flash device mapped on Intel IXP2000 based systems"
302 depends on MTD_CFI && MTD_COMPLEX_MAPPINGS && ARCH_IXP2000
303 help
304 This enables MTD access to flash devices on platforms based
305 on Intel's IXP2000 family of network processors. If you have an
306 IXP2000 based board and would like to use the flash chips on it,
307 say 'Y'.
308
309config MTD_AUTCPU12 300config MTD_AUTCPU12
310 bool "NV-RAM mapping AUTCPU12 board" 301 bool "NV-RAM mapping AUTCPU12 board"
311 depends on ARCH_AUTCPU12 302 depends on ARCH_AUTCPU12
diff --git a/drivers/mtd/maps/Makefile b/drivers/mtd/maps/Makefile
index 7315ed8c9643..781e4b8cb977 100644
--- a/drivers/mtd/maps/Makefile
+++ b/drivers/mtd/maps/Makefile
@@ -39,7 +39,6 @@ obj-$(CONFIG_MTD_NETtel) += nettel.o
39obj-$(CONFIG_MTD_SCB2_FLASH) += scb2_flash.o 39obj-$(CONFIG_MTD_SCB2_FLASH) += scb2_flash.o
40obj-$(CONFIG_MTD_H720X) += h720x-flash.o 40obj-$(CONFIG_MTD_H720X) += h720x-flash.o
41obj-$(CONFIG_MTD_IXP4XX) += ixp4xx.o 41obj-$(CONFIG_MTD_IXP4XX) += ixp4xx.o
42obj-$(CONFIG_MTD_IXP2000) += ixp2000.o
43obj-$(CONFIG_MTD_PLATRAM) += plat-ram.o 42obj-$(CONFIG_MTD_PLATRAM) += plat-ram.o
44obj-$(CONFIG_MTD_INTEL_VR_NOR) += intel_vr_nor.o 43obj-$(CONFIG_MTD_INTEL_VR_NOR) += intel_vr_nor.o
45obj-$(CONFIG_MTD_BFIN_ASYNC) += bfin-async-flash.o 44obj-$(CONFIG_MTD_BFIN_ASYNC) += bfin-async-flash.o
diff --git a/drivers/mtd/maps/ixp2000.c b/drivers/mtd/maps/ixp2000.c
deleted file mode 100644
index 4a41ced0f710..000000000000
--- a/drivers/mtd/maps/ixp2000.c
+++ /dev/null
@@ -1,253 +0,0 @@
1/*
2 * drivers/mtd/maps/ixp2000.c
3 *
4 * Mapping for the Intel XScale IXP2000 based systems
5 *
6 * Copyright (C) 2002 Intel Corp.
7 * Copyright (C) 2003-2004 MontaVista Software, Inc.
8 *
9 * Original Author: Naeem M Afzal <naeem.m.afzal@intel.com>
10 * Maintainer: Deepak Saxena <dsaxena@plexity.net>
11 *
12 * This program is free software; you can redistribute it and/or modify
13 * it under the terms of the GNU General Public License version 2 as
14 * published by the Free Software Foundation.
15 *
16 */
17
18#include <linux/module.h>
19#include <linux/types.h>
20#include <linux/init.h>
21#include <linux/kernel.h>
22#include <linux/string.h>
23#include <linux/slab.h>
24#include <linux/ioport.h>
25#include <linux/device.h>
26#include <linux/platform_device.h>
27
28#include <linux/mtd/mtd.h>
29#include <linux/mtd/map.h>
30#include <linux/mtd/partitions.h>
31
32#include <asm/io.h>
33#include <mach/hardware.h>
34#include <asm/mach/flash.h>
35
36#include <linux/reboot.h>
37
38struct ixp2000_flash_info {
39 struct mtd_info *mtd;
40 struct map_info map;
41 struct resource *res;
42};
43
44static inline unsigned long flash_bank_setup(struct map_info *map, unsigned long ofs)
45{
46 unsigned long (*set_bank)(unsigned long) =
47 (unsigned long(*)(unsigned long))map->map_priv_2;
48
49 return (set_bank ? set_bank(ofs) : ofs);
50}
51
52#ifdef __ARMEB__
53/*
54 * Rev A0 and A1 of IXP2400 silicon have a broken addressing unit which
55 * causes the lower address bits to be XORed with 0x11 on 8 bit accesses
56 * and XORed with 0x10 on 16 bit accesses. See the spec update, erratum 44.
57 */
58static int erratum44_workaround = 0;
59
60static inline unsigned long address_fix8_write(unsigned long addr)
61{
62 if (erratum44_workaround) {
63 return (addr ^ 3);
64 }
65 return addr;
66}
67#else
68
69#define address_fix8_write(x) (x)
70#endif
71
72static map_word ixp2000_flash_read8(struct map_info *map, unsigned long ofs)
73{
74 map_word val;
75
76 val.x[0] = *((u8 *)(map->map_priv_1 + flash_bank_setup(map, ofs)));
77 return val;
78}
79
80/*
81 * We can't use the standard memcpy due to the broken SlowPort
82 * address translation on rev A0 and A1 silicon and the fact that
83 * we have banked flash.
84 */
85static void ixp2000_flash_copy_from(struct map_info *map, void *to,
86 unsigned long from, ssize_t len)
87{
88 from = flash_bank_setup(map, from);
89 while(len--)
90 *(__u8 *) to++ = *(__u8 *)(map->map_priv_1 + from++);
91}
92
93static void ixp2000_flash_write8(struct map_info *map, map_word d, unsigned long ofs)
94{
95 *(__u8 *) (address_fix8_write(map->map_priv_1 +
96 flash_bank_setup(map, ofs))) = d.x[0];
97}
98
99static void ixp2000_flash_copy_to(struct map_info *map, unsigned long to,
100 const void *from, ssize_t len)
101{
102 to = flash_bank_setup(map, to);
103 while(len--) {
104 unsigned long tmp = address_fix8_write(map->map_priv_1 + to++);
105 *(__u8 *)(tmp) = *(__u8 *)(from++);
106 }
107}
108
109
110static int ixp2000_flash_remove(struct platform_device *dev)
111{
112 struct flash_platform_data *plat = dev->dev.platform_data;
113 struct ixp2000_flash_info *info = platform_get_drvdata(dev);
114
115 platform_set_drvdata(dev, NULL);
116
117 if(!info)
118 return 0;
119
120 if (info->mtd) {
121 mtd_device_unregister(info->mtd);
122 map_destroy(info->mtd);
123 }
124 if (info->map.map_priv_1)
125 iounmap((void *) info->map.map_priv_1);
126
127 if (info->res) {
128 release_resource(info->res);
129 kfree(info->res);
130 }
131
132 if (plat->exit)
133 plat->exit();
134
135 return 0;
136}
137
138
139static int ixp2000_flash_probe(struct platform_device *dev)
140{
141 static const char *probes[] = { "RedBoot", "cmdlinepart", NULL };
142 struct ixp2000_flash_data *ixp_data = dev->dev.platform_data;
143 struct flash_platform_data *plat;
144 struct ixp2000_flash_info *info;
145 unsigned long window_size;
146 int err = -1;
147
148 if (!ixp_data)
149 return -ENODEV;
150
151 plat = ixp_data->platform_data;
152 if (!plat)
153 return -ENODEV;
154
155 window_size = resource_size(dev->resource);
156 dev_info(&dev->dev, "Probe of IXP2000 flash(%d banks x %dMiB)\n",
157 ixp_data->nr_banks, ((u32)window_size >> 20));
158
159 if (plat->width != 1) {
160 dev_err(&dev->dev, "IXP2000 MTD map only supports 8-bit mode, asking for %d\n",
161 plat->width * 8);
162 return -EIO;
163 }
164
165 info = kzalloc(sizeof(struct ixp2000_flash_info), GFP_KERNEL);
166 if(!info) {
167 err = -ENOMEM;
168 goto Error;
169 }
170
171 platform_set_drvdata(dev, info);
172
173 /*
174 * Tell the MTD layer we're not 1:1 mapped so that it does
175 * not attempt to do a direct access on us.
176 */
177 info->map.phys = NO_XIP;
178
179 info->map.size = ixp_data->nr_banks * window_size;
180 info->map.bankwidth = 1;
181
182 /*
183 * map_priv_2 is used to store a ptr to the bank_setup routine
184 */
185 info->map.map_priv_2 = (unsigned long) ixp_data->bank_setup;
186
187 info->map.name = dev_name(&dev->dev);
188 info->map.read = ixp2000_flash_read8;
189 info->map.write = ixp2000_flash_write8;
190 info->map.copy_from = ixp2000_flash_copy_from;
191 info->map.copy_to = ixp2000_flash_copy_to;
192
193 info->res = request_mem_region(dev->resource->start,
194 resource_size(dev->resource),
195 dev_name(&dev->dev));
196 if (!info->res) {
197 dev_err(&dev->dev, "Could not reserve memory region\n");
198 err = -ENOMEM;
199 goto Error;
200 }
201
202 info->map.map_priv_1 =
203 (unsigned long)ioremap(dev->resource->start,
204 resource_size(dev->resource));
205 if (!info->map.map_priv_1) {
206 dev_err(&dev->dev, "Failed to ioremap flash region\n");
207 err = -EIO;
208 goto Error;
209 }
210
211#if defined(__ARMEB__)
212 /*
213 * Enable erratum 44 workaround for NPUs with broken slowport
214 */
215
216 erratum44_workaround = ixp2000_has_broken_slowport();
217 dev_info(&dev->dev, "Erratum 44 workaround %s\n",
218 erratum44_workaround ? "enabled" : "disabled");
219#endif
220
221 info->mtd = do_map_probe(plat->map_name, &info->map);
222 if (!info->mtd) {
223 dev_err(&dev->dev, "map_probe failed\n");
224 err = -ENXIO;
225 goto Error;
226 }
227 info->mtd->owner = THIS_MODULE;
228
229 err = mtd_device_parse_register(info->mtd, probes, NULL, NULL, 0);
230 if (err)
231 goto Error;
232
233 return 0;
234
235Error:
236 ixp2000_flash_remove(dev);
237 return err;
238}
239
240static struct platform_driver ixp2000_flash_driver = {
241 .probe = ixp2000_flash_probe,
242 .remove = ixp2000_flash_remove,
243 .driver = {
244 .name = "IXP2000-Flash",
245 .owner = THIS_MODULE,
246 },
247};
248
249module_platform_driver(ixp2000_flash_driver);
250
251MODULE_LICENSE("GPL");
252MODULE_AUTHOR("Deepak Saxena <dsaxena@plexity.net>");
253MODULE_ALIAS("platform:IXP2000-Flash");