/* * $Id: iq80310.c,v 1.21 2005/11/07 11:14:27 gleixner Exp $ * * Mapping for the Intel XScale IQ80310 evaluation board * * Author: Nicolas Pitre * Copyright: (C) 2001 MontaVista Software Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. */ #include #include #include #include #include #include #include #include #include #define WINDOW_ADDR 0 #define WINDOW_SIZE 8*1024*1024 #define BUSWIDTH 1 static struct mtd_info *mymtd; static struct map_info iq80310_map = { .name = "IQ80310 flash", .size = WINDOW_SIZE, .bankwidth = BUSWIDTH, .phys = WINDOW_ADDR }; static struct mtd_partition iq80310_partitions[4] = { { .name = "Firmware", .size = 0x00080000, .offset = 0, .mask_flags = MTD_WRITEABLE /* force read-only */ },{ .name = "Kernel", .size = 0x000a0000, .offset = 0x00080000, },{ .name = "Filesystem", .size = 0x00600000, .offset = 0x00120000 },{ .name = "RedBoot", .size = 0x000e0000, .offset = 0x00720000, .mask_flags = MTD_WRITEABLE } }; static struct mtd_info *mymtd; static struct mtd_partition *parsed_parts; static const char *probes[] = { "RedBoot", "cmdlinepart", NULL }; static int __init init_iq80310(void) { struct mtd_partition *parts; int nb_parts = 0; int parsed_nr_parts = 0; int ret; iq80310_map.virt = ioremap(WINDOW_ADDR, WINDOW_SIZE); if (!iq80310_map.virt) { printk("Failed to ioremap\n"); return -EIO; } simple_map_init(&iq80310_map); mymtd = do_map_probe("cfi_probe", &iq80310_map); if (!mymtd) { iounmap((void *)iq80310_map.virt); return -ENXIO; } mymtd->owner = THIS_MODULE; ret = parse_mtd_partitions(mymtd, probes, &parsed_parts, 0); if (ret > 0) parsed_nr_parts = ret; if (parsed_nr_parts > 0) { parts = parsed_parts; nb_parts = parsed_nr_parts; } else { parts = iq80310_partitions; nb_parts = ARRAY_SIZE(iq80310_partitions); } add_mtd_partitions(mymtd, parts, nb_parts); return 0; } static void __exit cleanup_iq80310(void) { if (mymtd) { del_mtd_partitions(mymtd); map_destroy(mymtd); kfree(parsed_parts); } if (iq80310_map.virt) iounmap((void *)iq80310_map.virt); } module_init(init_iq80310); module_exit(cleanup_iq80310); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Nicolas Pitre "); MODULE_DESCRIPTION("MTD map driver for Intel XScale IQ80310 evaluation board");