Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v2.6.21 176 lines 4.2 kB view raw
1/* 2 * $Id: redwood.c,v 1.11 2005/11/07 11:14:28 gleixner Exp $ 3 * 4 * drivers/mtd/maps/redwood.c 5 * 6 * FLASH map for the IBM Redwood 4/5/6 boards. 7 * 8 * Author: MontaVista Software, Inc. <source@mvista.com> 9 * 10 * 2001-2003 (c) MontaVista, Software, Inc. This file is licensed under 11 * the terms of the GNU General Public License version 2. This program 12 * is licensed "as is" without any warranty of any kind, whether express 13 * or implied. 14 */ 15 16#include <linux/module.h> 17#include <linux/types.h> 18#include <linux/kernel.h> 19#include <linux/init.h> 20 21#include <linux/mtd/mtd.h> 22#include <linux/mtd/map.h> 23#include <linux/mtd/partitions.h> 24 25#include <asm/io.h> 26 27#if !defined (CONFIG_REDWOOD_6) 28 29#define WINDOW_ADDR 0xffc00000 30#define WINDOW_SIZE 0x00400000 31 32#define RW_PART0_OF 0 33#define RW_PART0_SZ 0x10000 34#define RW_PART1_OF RW_PART0_SZ 35#define RW_PART1_SZ 0x200000 - 0x10000 36#define RW_PART2_OF 0x200000 37#define RW_PART2_SZ 0x10000 38#define RW_PART3_OF 0x210000 39#define RW_PART3_SZ 0x200000 - (0x10000 + 0x20000) 40#define RW_PART4_OF 0x3e0000 41#define RW_PART4_SZ 0x20000 42 43static struct mtd_partition redwood_flash_partitions[] = { 44 { 45 .name = "Redwood OpenBIOS Vital Product Data", 46 .offset = RW_PART0_OF, 47 .size = RW_PART0_SZ, 48 .mask_flags = MTD_WRITEABLE /* force read-only */ 49 }, 50 { 51 .name = "Redwood kernel", 52 .offset = RW_PART1_OF, 53 .size = RW_PART1_SZ 54 }, 55 { 56 .name = "Redwood OpenBIOS non-volatile storage", 57 .offset = RW_PART2_OF, 58 .size = RW_PART2_SZ, 59 .mask_flags = MTD_WRITEABLE /* force read-only */ 60 }, 61 { 62 .name = "Redwood filesystem", 63 .offset = RW_PART3_OF, 64 .size = RW_PART3_SZ 65 }, 66 { 67 .name = "Redwood OpenBIOS", 68 .offset = RW_PART4_OF, 69 .size = RW_PART4_SZ, 70 .mask_flags = MTD_WRITEABLE /* force read-only */ 71 } 72}; 73 74#else /* CONFIG_REDWOOD_6 */ 75/* FIXME: the window is bigger - armin */ 76#define WINDOW_ADDR 0xff800000 77#define WINDOW_SIZE 0x00800000 78 79#define RW_PART0_OF 0 80#define RW_PART0_SZ 0x400000 /* 4 MiB data */ 81#define RW_PART1_OF RW_PART0_OF + RW_PART0_SZ 82#define RW_PART1_SZ 0x10000 /* 64K VPD */ 83#define RW_PART2_OF RW_PART1_OF + RW_PART1_SZ 84#define RW_PART2_SZ 0x400000 - (0x10000 + 0x20000) 85#define RW_PART3_OF RW_PART2_OF + RW_PART2_SZ 86#define RW_PART3_SZ 0x20000 87 88static struct mtd_partition redwood_flash_partitions[] = { 89 { 90 .name = "Redwood filesystem", 91 .offset = RW_PART0_OF, 92 .size = RW_PART0_SZ 93 }, 94 { 95 .name = "Redwood OpenBIOS Vital Product Data", 96 .offset = RW_PART1_OF, 97 .size = RW_PART1_SZ, 98 .mask_flags = MTD_WRITEABLE /* force read-only */ 99 }, 100 { 101 .name = "Redwood kernel", 102 .offset = RW_PART2_OF, 103 .size = RW_PART2_SZ 104 }, 105 { 106 .name = "Redwood OpenBIOS", 107 .offset = RW_PART3_OF, 108 .size = RW_PART3_SZ, 109 .mask_flags = MTD_WRITEABLE /* force read-only */ 110 } 111}; 112 113#endif /* CONFIG_REDWOOD_6 */ 114 115struct map_info redwood_flash_map = { 116 .name = "IBM Redwood", 117 .size = WINDOW_SIZE, 118 .bankwidth = 2, 119 .phys = WINDOW_ADDR, 120}; 121 122 123#define NUM_REDWOOD_FLASH_PARTITIONS ARRAY_SIZE(redwood_flash_partitions) 124 125static struct mtd_info *redwood_mtd; 126 127int __init init_redwood_flash(void) 128{ 129 int err; 130 131 printk(KERN_NOTICE "redwood: flash mapping: %x at %x\n", 132 WINDOW_SIZE, WINDOW_ADDR); 133 134 redwood_flash_map.virt = ioremap(WINDOW_ADDR, WINDOW_SIZE); 135 136 if (!redwood_flash_map.virt) { 137 printk("init_redwood_flash: failed to ioremap\n"); 138 return -EIO; 139 } 140 simple_map_init(&redwood_flash_map); 141 142 redwood_mtd = do_map_probe("cfi_probe",&redwood_flash_map); 143 144 if (redwood_mtd) { 145 redwood_mtd->owner = THIS_MODULE; 146 err = add_mtd_partitions(redwood_mtd, 147 redwood_flash_partitions, 148 NUM_REDWOOD_FLASH_PARTITIONS); 149 if (err) { 150 printk("init_redwood_flash: add_mtd_partitions failed\n"); 151 iounmap(redwood_flash_map.virt); 152 } 153 return err; 154 155 } 156 157 iounmap(redwood_flash_map.virt); 158 return -ENXIO; 159} 160 161static void __exit cleanup_redwood_flash(void) 162{ 163 if (redwood_mtd) { 164 del_mtd_partitions(redwood_mtd); 165 /* moved iounmap after map_destroy - armin */ 166 map_destroy(redwood_mtd); 167 iounmap((void *)redwood_flash_map.virt); 168 } 169} 170 171module_init(init_redwood_flash); 172module_exit(cleanup_redwood_flash); 173 174MODULE_LICENSE("GPL"); 175MODULE_AUTHOR("MontaVista Software <source@mvista.com>"); 176MODULE_DESCRIPTION("MTD map driver for the IBM Redwood reference boards");