aboutsummaryrefslogtreecommitdiffstats
path: root/recipes/linux/linux-magicbox-2.6.19.2/002-flash_map.patch
blob: 5d29a047d5487f8609fb0c8866395a630253d8eb (plain)
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