1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
|
diff -urN linux.old/drivers/mtd/maps/Kconfig linux.dev/drivers/mtd/maps/Kconfig
--- linux.old/drivers/mtd/maps/Kconfig 2006-08-30 06:30:59.000000000 +0200
+++ linux.dev/drivers/mtd/maps/Kconfig 2006-08-30 06:11:51.000000000 +0200
@@ -323,6 +323,15 @@
Walnut board. If you have one of these boards and would like to
use the flash chips on it, say 'Y'.
+config MTD_MAGICMAP
+ tristate "Flash device mapped on IBM 405EP MagicBox"
+ depends on MTD_CFI && MTD_PARTITIONS && 40x && MAGICBOX
+ help
+ This enables access routines for the flash chips on the IBM 405EP
+ MagicBox board. If you have one of these boards and would like to
+ use the flash chips on it, say 'Y'.
+
+
config MTD_EBONY
tristate "Flash devices mapped on IBM 440GP Ebony"
depends on MTD_JEDECPROBE && EBONY
diff -urN linux.old/drivers/mtd/maps/magicmap.c linux.dev/drivers/mtd/maps/magicmap.c
--- linux.old/drivers/mtd/maps/magicmap.c 1970-01-01 01:00:00.000000000 +0100
+++ linux.dev/drivers/mtd/maps/magicmap.c 2006-08-30 06:52:34.000000000 +0200
@@ -0,0 +1,113 @@
+/*
+ * magicmap.c: Copyleft 2005 Karol Lewandowski
+ *
+ * Mapping for MagicBox flash.
+ * Based on walnut.c.
+ *
+ * Heikki Lindholm <holindho@infradead.org>
+ *
+ *
+ * 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.
+ */
+
+#include <linux/module.h>
+#include <linux/types.h>
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/mtd/mtd.h>
+#include <linux/mtd/map.h>
+#include <linux/mtd/partitions.h>
+#include <linux/autoconf.h>
+#include <asm/io.h>
+
+static struct mtd_info *flash;
+
+static struct map_info magic_map = {
+ .name = "Magically mapped flash",
+ .phys = 0xffc00000,
+ .size = 0x400000,
+ .bankwidth = 2,
+};
+
+static struct mtd_partition magic_partitions[] = {
+ {
+ .name = "linux",
+ .offset = 0x0,
+ .size = 0x3c0000,
+ },
+ {
+ .name = "rootfs",
+ .offset = 0x100000,
+ .size = 0x2c0000,
+ },
+ {
+ .name = "bootloader",
+ .offset = 0x3c0000,
+ .size = 0x040000,
+ .mask_flags = MTD_WRITEABLE,
+ },
+};
+
+int __init init_magic(void)
+{
+ u32 size, len;
+
+ magic_map.virt =
+ (void __iomem *)ioremap(magic_map.phys, magic_map.size);
+
+ if (!magic_map.virt) {
+ printk("Failed to ioremap flash.\n");
+ return -EIO;
+ }
+
+ simple_map_init(&magic_map);
+
+ flash = do_map_probe("cfi_probe", &magic_map);
+ if (flash) {
+ flash->owner = THIS_MODULE;
+ if (flash->read(flash, 12, sizeof(u32), &len, (char *) &size) ||
+ len != 4)
+ return -ENXIO;
+ size += 0x40; /* header size of the uImage */
+ if (size < 0x400000) {
+ /* skip to next erase block */
+ if (size & (flash->erasesize - 1)) {
+ size |= (flash->erasesize - 1);
+ size += 1;
+ }
+ magic_partitions[1].offset = size;
+ magic_partitions[1].size = magic_partitions[2].offset - size;
+ }
+
+ add_mtd_partitions(flash, magic_partitions,
+ ARRAY_SIZE(magic_partitions));
+ } else {
+ printk("map probe failed for flash\n");
+ return -ENXIO;
+ }
+
+ return 0;
+}
+
+static void __exit cleanup_magic(void)
+{
+ if (flash) {
+ del_mtd_partitions(flash);
+ map_destroy(flash);
+ }
+
+ if (magic_map.virt) {
+ iounmap((void *)magic_map.virt);
+ magic_map.virt = NULL;
+ }
+}
+
+module_init(init_magic);
+module_exit(cleanup_magic);
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Karol Lewandowski");
+MODULE_DESCRIPTION("MTD map and partitions for IBM 405EP MagicBox boards");
diff -urN linux.old/drivers/mtd/maps/Makefile linux.dev/drivers/mtd/maps/Makefile
--- linux.old/drivers/mtd/maps/Makefile 2006-08-30 06:30:59.000000000 +0200
+++ linux.dev/drivers/mtd/maps/Makefile 2006-08-30 06:11:51.000000000 +0200
@@ -58,6 +58,7 @@
obj-$(CONFIG_MTD_BEECH) += beech-mtd.o
obj-$(CONFIG_MTD_ARCTIC) += arctic-mtd.o
obj-$(CONFIG_MTD_WALNUT) += walnut.o
+obj-$(CONFIG_MTD_MAGICMAP) += magicmap.o
obj-$(CONFIG_MTD_H720X) += h720x-flash.o
obj-$(CONFIG_MTD_SBC8240) += sbc8240.o
obj-$(CONFIG_MTD_NOR_TOTO) += omap-toto-flash.o
|