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.12 178 lines 4.9 kB view raw
1/* 2 * Flash memory access on Alchemy Pb1xxx boards 3 * 4 * (C) 2001 Pete Popov <ppopov@mvista.com> 5 * 6 * $Id: pb1xxx-flash.c,v 1.14 2004/11/04 13:24:15 gleixner Exp $ 7 */ 8 9#include <linux/config.h> 10#include <linux/module.h> 11#include <linux/types.h> 12#include <linux/init.h> 13#include <linux/kernel.h> 14 15#include <linux/mtd/mtd.h> 16#include <linux/mtd/map.h> 17#include <linux/mtd/partitions.h> 18 19#include <asm/io.h> 20 21#ifdef DEBUG_RW 22#define DBG(x...) printk(x) 23#else 24#define DBG(x...) 25#endif 26 27#ifdef CONFIG_MIPS_PB1000 28 29#define WINDOW_ADDR 0x1F800000 30#define WINDOW_SIZE 0x800000 31 32static struct mtd_partition pb1xxx_partitions[] = { 33 { 34 .name = "yamon env", 35 .size = 0x00020000, 36 .offset = 0, 37 .mask_flags = MTD_WRITEABLE}, 38 { 39 .name = "User FS", 40 .size = 0x003e0000, 41 .offset = 0x20000,}, 42 { 43 .name = "boot code", 44 .size = 0x100000, 45 .offset = 0x400000, 46 .mask_flags = MTD_WRITEABLE}, 47 { 48 .name = "raw/kernel", 49 .size = 0x300000, 50 .offset = 0x500000} 51}; 52 53#elif defined(CONFIG_MIPS_PB1500) || defined(CONFIG_MIPS_PB1100) 54 55#if defined(CONFIG_MTD_PB1500_BOOT) && defined(CONFIG_MTD_PB1500_USER) 56/* both 32MB banks will be used. Combine the first 32MB bank and the 57 * first 28MB of the second bank together into a single jffs/jffs2 58 * partition. 59 */ 60#define WINDOW_ADDR 0x1C000000 61#define WINDOW_SIZE 0x4000000 62static struct mtd_partition pb1xxx_partitions[] = { 63 { 64 .name = "User FS", 65 .size = 0x3c00000, 66 .offset = 0x0000000 67 },{ 68 .name = "yamon", 69 .size = 0x0100000, 70 .offset = 0x3c00000, 71 .mask_flags = MTD_WRITEABLE 72 },{ 73 .name = "raw kernel", 74 .size = 0x02c0000, 75 .offset = 0x3d00000 76 } 77}; 78#elif defined(CONFIG_MTD_PB1500_BOOT) && !defined(CONFIG_MTD_PB1500_USER) 79#define WINDOW_ADDR 0x1E000000 80#define WINDOW_SIZE 0x2000000 81static struct mtd_partition pb1xxx_partitions[] = { 82 { 83 .name = "User FS", 84 .size = 0x1c00000, 85 .offset = 0x0000000 86 },{ 87 .name = "yamon", 88 .size = 0x0100000, 89 .offset = 0x1c00000, 90 .mask_flags = MTD_WRITEABLE 91 },{ 92 .name = "raw kernel", 93 .size = 0x02c0000, 94 .offset = 0x1d00000 95 } 96}; 97#elif !defined(CONFIG_MTD_PB1500_BOOT) && defined(CONFIG_MTD_PB1500_USER) 98#define WINDOW_ADDR 0x1C000000 99#define WINDOW_SIZE 0x2000000 100static struct mtd_partition pb1xxx_partitions[] = { 101 { 102 .name = "User FS", 103 .size = 0x1e00000, 104 .offset = 0x0000000 105 },{ 106 .name = "raw kernel", 107 .size = 0x0200000, 108 .offset = 0x1e00000, 109 } 110}; 111#else 112#error MTD_PB1500 define combo error /* should never happen */ 113#endif 114#else 115#error Unsupported board 116#endif 117 118#define NAME "Pb1x00 Linux Flash" 119#define PADDR WINDOW_ADDR 120#define BUSWIDTH 4 121#define SIZE WINDOW_SIZE 122#define PARTITIONS 4 123 124static struct map_info pb1xxx_mtd_map = { 125 .name = NAME, 126 .size = SIZE, 127 .bankwidth = BUSWIDTH, 128 .phys = PADDR, 129}; 130 131static struct mtd_info *pb1xxx_mtd; 132 133int __init pb1xxx_mtd_init(void) 134{ 135 struct mtd_partition *parts; 136 int nb_parts = 0; 137 char *part_type; 138 139 /* 140 * Static partition definition selection 141 */ 142 part_type = "static"; 143 parts = pb1xxx_partitions; 144 nb_parts = ARRAY_SIZE(pb1xxx_partitions); 145 146 /* 147 * Now let's probe for the actual flash. Do it here since 148 * specific machine settings might have been set above. 149 */ 150 printk(KERN_NOTICE "Pb1xxx flash: probing %d-bit flash bus\n", 151 BUSWIDTH*8); 152 pb1xxx_mtd_map.virt = ioremap(WINDOW_ADDR, WINDOW_SIZE); 153 154 simple_map_init(&pb1xxx_mtd_map); 155 156 pb1xxx_mtd = do_map_probe("cfi_probe", &pb1xxx_mtd_map); 157 if (!pb1xxx_mtd) return -ENXIO; 158 pb1xxx_mtd->owner = THIS_MODULE; 159 160 add_mtd_partitions(pb1xxx_mtd, parts, nb_parts); 161 return 0; 162} 163 164static void __exit pb1xxx_mtd_cleanup(void) 165{ 166 if (pb1xxx_mtd) { 167 del_mtd_partitions(pb1xxx_mtd); 168 map_destroy(pb1xxx_mtd); 169 iounmap((void *) pb1xxx_mtd_map.virt); 170 } 171} 172 173module_init(pb1xxx_mtd_init); 174module_exit(pb1xxx_mtd_cleanup); 175 176MODULE_AUTHOR("Pete Popov"); 177MODULE_DESCRIPTION("Pb1xxx CFI map driver"); 178MODULE_LICENSE("GPL");