diff options
| author | Kyungmin Park <kyungmin.park@samsung.com> | 2005-07-11 06:41:53 -0400 |
|---|---|---|
| committer | Thomas Gleixner <tglx@mtd.linutronix.de> | 2005-11-06 15:17:24 -0500 |
| commit | cd5f6346bc28a41375412b49b290d22ee4e4bbe8 (patch) | |
| tree | e90e028e7319f2787fd8660d10d8455aba95ddc5 | |
| parent | 4ce1f562189696605a84813cf71847c0cc698414 (diff) | |
[MTD] Add initial support for OneNAND flash chips
OneNAND is a new flash technology from Samsung with integrated SRAM
buffers and logic interface.
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
| -rw-r--r-- | drivers/mtd/Kconfig | 10 | ||||
| -rw-r--r-- | drivers/mtd/Makefile | 4 | ||||
| -rw-r--r-- | drivers/mtd/onenand/Kconfig | 32 | ||||
| -rw-r--r-- | drivers/mtd/onenand/Makefile | 9 | ||||
| -rw-r--r-- | drivers/mtd/onenand/omap-onenand.c | 178 | ||||
| -rw-r--r-- | drivers/mtd/onenand/onenand_base.c | 1462 | ||||
| -rw-r--r-- | include/linux/mtd/onenand.h | 134 | ||||
| -rw-r--r-- | include/linux/mtd/onenand_regs.h | 167 |
8 files changed, 1990 insertions, 6 deletions
diff --git a/drivers/mtd/Kconfig b/drivers/mtd/Kconfig index 843a1cbe0866..3dbfbafb3481 100644 --- a/drivers/mtd/Kconfig +++ b/drivers/mtd/Kconfig | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | # $Id: Kconfig,v 1.9 2005/06/16 08:49:29 sean Exp $ | 1 | # $Id: Kconfig,v 1.10 2005/07/11 10:39:27 gleixner Exp $ |
| 2 | 2 | ||
| 3 | menu "Memory Technology Devices (MTD)" | 3 | menu "Memory Technology Devices (MTD)" |
| 4 | 4 | ||
| @@ -259,9 +259,9 @@ config RFD_FTL | |||
| 259 | ---help--- | 259 | ---help--- |
| 260 | This provides support for the flash translation layer known | 260 | This provides support for the flash translation layer known |
| 261 | as the Resident Flash Disk (RFD), as used by the Embedded BIOS | 261 | as the Resident Flash Disk (RFD), as used by the Embedded BIOS |
| 262 | of General Software. | 262 | of General Software. There is a blurb at: |
| 263 | See http://www.gensw.com/pages/prod/bios/rfd.htm for further | 263 | |
| 264 | information. | 264 | http://www.gensw.com/pages/prod/bios/rfd.htm |
| 265 | 265 | ||
| 266 | source "drivers/mtd/chips/Kconfig" | 266 | source "drivers/mtd/chips/Kconfig" |
| 267 | 267 | ||
| @@ -271,5 +271,7 @@ source "drivers/mtd/devices/Kconfig" | |||
| 271 | 271 | ||
| 272 | source "drivers/mtd/nand/Kconfig" | 272 | source "drivers/mtd/nand/Kconfig" |
| 273 | 273 | ||
| 274 | source "drivers/mtd/onenand/Kconfig" | ||
| 275 | |||
| 274 | endmenu | 276 | endmenu |
| 275 | 277 | ||
diff --git a/drivers/mtd/Makefile b/drivers/mtd/Makefile index cb16b7d478ce..fc9374407c2b 100644 --- a/drivers/mtd/Makefile +++ b/drivers/mtd/Makefile | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | # | 1 | # |
| 2 | # Makefile for the memory technology device drivers. | 2 | # Makefile for the memory technology device drivers. |
| 3 | # | 3 | # |
| 4 | # $Id: Makefile.common,v 1.6 2005/06/16 08:49:29 sean Exp $ | 4 | # $Id: Makefile.common,v 1.7 2005/07/11 10:39:27 gleixner Exp $ |
| 5 | 5 | ||
| 6 | # Core functionality. | 6 | # Core functionality. |
| 7 | mtd-y := mtdcore.o | 7 | mtd-y := mtdcore.o |
| @@ -25,4 +25,4 @@ obj-$(CONFIG_RFD_FTL) += rfd_ftl.o mtd_blkdevs.o | |||
| 25 | nftl-objs := nftlcore.o nftlmount.o | 25 | nftl-objs := nftlcore.o nftlmount.o |
| 26 | inftl-objs := inftlcore.o inftlmount.o | 26 | inftl-objs := inftlcore.o inftlmount.o |
| 27 | 27 | ||
| 28 | obj-y += chips/ maps/ devices/ nand/ | 28 | obj-y += chips/ maps/ devices/ nand/ onenand/ |
diff --git a/drivers/mtd/onenand/Kconfig b/drivers/mtd/onenand/Kconfig new file mode 100644 index 000000000000..7d76ede984d8 --- /dev/null +++ b/drivers/mtd/onenand/Kconfig | |||
| @@ -0,0 +1,32 @@ | |||
| 1 | # | ||
| 2 | # linux/drivers/mtd/onenand/Kconfig | ||
| 3 | # | ||
| 4 | |||
| 5 | menu "OneNAND Flash Device Drivers (EXPERIMENTAL)" | ||
| 6 | depends on MTD != n && EXPERIMENTAL | ||
| 7 | |||
| 8 | config MTD_ONENAND | ||
| 9 | tristate "OneNAND Device Support" | ||
| 10 | depends on MTD | ||
| 11 | help | ||
| 12 | This enables support for accessing all type of OneNAND flash | ||
| 13 | devices. For further information see | ||
| 14 | <http://www.samsung.com/Products/Semiconductor/Flash/OneNAND_TM/index.htm>. | ||
| 15 | |||
| 16 | config MTD_ONENAND_VERIFY_WRITE | ||
| 17 | bool "Verify OneNAND page writes" | ||
| 18 | depends on MTD_ONENAND | ||
| 19 | help | ||
| 20 | This adds an extra check when data is written to the flash. The | ||
| 21 | OneNAND flash device internally checks only bits transitioning | ||
| 22 | from 1 to 0. There is a rare possibility that even though the | ||
| 23 | device thinks the write was successful, a bit could have been | ||
| 24 | flipped accidentaly due to device wear or something else. | ||
| 25 | |||
| 26 | config MTD_ONENAND_OMAP | ||
| 27 | tristate "OneNAND Flash device on OMAP board" | ||
| 28 | depends on ARCH_OMAP && MTD_ONENAND | ||
| 29 | help | ||
| 30 | Support for OneNAND flash on TI OMAP board. | ||
| 31 | |||
| 32 | endmenu | ||
diff --git a/drivers/mtd/onenand/Makefile b/drivers/mtd/onenand/Makefile new file mode 100644 index 000000000000..f4e75864d8b5 --- /dev/null +++ b/drivers/mtd/onenand/Makefile | |||
| @@ -0,0 +1,9 @@ | |||
| 1 | # | ||
| 2 | # Makefile for the OneNAND MTD | ||
| 3 | # | ||
| 4 | |||
| 5 | # Core functionality. | ||
| 6 | obj-$(CONFIG_MTD_ONENAND) += onenand_base.o | ||
| 7 | |||
| 8 | # Board specific. | ||
| 9 | obj-$(CONFIG_MTD_ONENAND_OMAP) += omap-onenand.o | ||
diff --git a/drivers/mtd/onenand/omap-onenand.c b/drivers/mtd/onenand/omap-onenand.c new file mode 100644 index 000000000000..56e1aec6b835 --- /dev/null +++ b/drivers/mtd/onenand/omap-onenand.c | |||
| @@ -0,0 +1,178 @@ | |||
| 1 | /* | ||
| 2 | * linux/drivers/mtd/onenand/omap-onenand.c | ||
| 3 | * | ||
| 4 | * Copyright (c) 2005 Samsung Electronics | ||
| 5 | * Kyungmin Park <kyungmin.park@samsung.com> | ||
| 6 | * | ||
| 7 | * Derived from linux/drivers/mtd/nand/omap-nand-flash.c | ||
| 8 | * | ||
| 9 | * This program is free software; you can redistribute it and/or modify | ||
| 10 | * it under the terms of the GNU General Public License version 2 as | ||
| 11 | * published by the Free Software Foundation. | ||
| 12 | * | ||
| 13 | * Overview: | ||
| 14 | * This is a device driver for the OneNAND flash device for TI OMAP boards. | ||
| 15 | */ | ||
| 16 | |||
| 17 | #include <linux/slab.h> | ||
| 18 | #include <linux/init.h> | ||
| 19 | #include <linux/module.h> | ||
| 20 | #include <linux/mtd/mtd.h> | ||
| 21 | #include <linux/mtd/onenand.h> | ||
| 22 | #include <linux/mtd/partitions.h> | ||
| 23 | |||
| 24 | #include <asm/io.h> | ||
| 25 | #include <asm/arch/hardware.h> | ||
| 26 | #include <asm/arch/tc.h> | ||
| 27 | #include <asm/sizes.h> | ||
| 28 | |||
| 29 | #define OMAP_ONENAND_FLASH_START1 OMAP_CS2A_PHYS | ||
| 30 | #define OMAP_ONENAND_FLASH_START2 OMAP_CS0_PHYS | ||
| 31 | /* | ||
| 32 | * MTD structure for OMAP board | ||
| 33 | */ | ||
| 34 | static struct mtd_info *omap_onenand_mtd = NULL; | ||
| 35 | |||
| 36 | /* | ||
| 37 | * Define partitions for flash devices | ||
| 38 | */ | ||
| 39 | |||
| 40 | #ifdef CONFIG_MTD_PARTITIONS | ||
| 41 | static struct mtd_partition static_partition[] = { | ||
| 42 | { | ||
| 43 | .name = "X-Loader + U-Boot", | ||
| 44 | .offset = 0, | ||
| 45 | .size = SZ_128K, | ||
| 46 | .mask_flags = MTD_WRITEABLE /* force read-only */ | ||
| 47 | }, | ||
| 48 | { | ||
| 49 | .name = "U-Boot Environment", | ||
| 50 | .offset = MTDPART_OFS_APPEND, | ||
| 51 | .size = SZ_128K, | ||
| 52 | .mask_flags = MTD_WRITEABLE /* force read-only */ | ||
| 53 | }, | ||
| 54 | { | ||
| 55 | .name = "kernel", | ||
| 56 | .offset = MTDPART_OFS_APPEND, | ||
| 57 | .size = 2 * SZ_1M | ||
| 58 | }, | ||
| 59 | { | ||
| 60 | .name = "filesystem0", | ||
| 61 | .offset = MTDPART_OFS_APPEND, | ||
| 62 | .size = SZ_16M, | ||
| 63 | }, | ||
| 64 | { | ||
| 65 | .name = "filesystem1", | ||
| 66 | .offset = MTDPART_OFS_APPEND, | ||
| 67 | .size = MTDPART_SIZ_FULL, | ||
| 68 | }, | ||
| 69 | }; | ||
| 70 | |||
| 71 | const char *part_probes[] = { "cmdlinepart", NULL, }; | ||
| 72 | |||
| 73 | #endif | ||
| 74 | |||
| 75 | /* Scan to find existance of the device at base. | ||
| 76 | This also allocates oob and data internal buffers */ | ||
| 77 | static char onenand_name[] = "onenand"; | ||
| 78 | |||
| 79 | /* | ||
| 80 | * Main initialization routine | ||
| 81 | */ | ||
| 82 | static int __init omap_onenand_init (void) | ||
| 83 | { | ||
| 84 | struct onenand_chip *this; | ||
