Nand driver for Nomadik 8815 SoC (on NHK8815 board)
Subsystems (5)
From: Alessandro Rubini <[email protected]>
The patch is based on the base Nomadik support I posted to linux-arm-kernel last week. I cleaned up the code as much as possible, but a V2 patch is definitely expected, based on some cleanup in base Nomadik support.
I didn't split the headers as those have been added for this patch alone, and I know there are unrelated changes in nhk15_defconfig, but this patch as-is applies cleanly over the previous ones.
Signed-off-by Alessandro Rubini <[email protected]>
Acked-by Andrea Gallo <[email protected]>
--- arch/arm/configs/nhk15_defconfig | 115 ++++++++- arch/arm/mach-nomadik/board-8815nhk.c | 98 +++++++- arch/arm/mach-nomadik/include/mach/fsmc.h | 36 +++ arch/arm/mach-nomadik/include/mach/hardware.h | 5 +- arch/arm/mach-nomadik/include/mach/nand.h | 16 ++ drivers/mtd/nand/Kconfig | 6 + drivers/mtd/nand/Makefile | 1 + drivers/mtd/nand/nomadik_nand.c | 328 +++++++++++++++++++++++++ 8 files changed, 590 insertions(+), 15 deletions(-) create mode 100644 arch/arm/mach-nomadik/include/mach/fsmc.h create mode 100644 arch/arm/mach-nomadik/include/mach/nand.h create mode 100644 drivers/mtd/nand/nomadik_nand.c
arch/arm/configs/nhk15_defconfig +108 -7
@@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.29-rc6 -# Wed Mar 4 13:29:20 2009 +# Tue Mar 10 11:19:10 2009 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -93,6 +93,7 @@ CONFIG_HAVE_OPROFILE=y # CONFIG_KPROBES is not set CONFIG_HAVE_KPROBES=y CONFIG_HAVE_KRETPROBES=y +CONFIG_HAVE_CLK=y CONFIG_HAVE_GENERIC_DMA_COHERENT=y CONFIG_SLABINFO=y CONFIG_RT_MUTEXES=y
@@ -138,8 +139,8 @@ CONFIG_FREEZER=y # CONFIG_ARCH_NETX is not set # CONFIG_ARCH_H720X is not set # CONFIG_ARCH_IMX is not set -# CONFIG_ARCH_IOP13XX is not set CONFIG_ARCH_NOMADIK=y +# CONFIG_ARCH_IOP13XX is not set # CONFIG_ARCH_IOP32X is not set # CONFIG_ARCH_IOP33X is not set # CONFIG_ARCH_IXP23XX is not set
@@ -167,6 +168,12 @@ CONFIG_ARCH_NOMADIK=y # CONFIG_ARCH_W90X900 is not set # +# Nomadik boards +# +CONFIG_MACH_NOMADIK_8815NHK=y +CONFIG_NOMADIK_8815=y + +# # Processor Type # CONFIG_CPU_32=y
@@ -208,7 +215,8 @@ CONFIG_VMSPLIT_3G=y CONFIG_PAGE_OFFSET=0xC0000000 CONFIG_PREEMPT=y CONFIG_HZ=100 -# CONFIG_AEABI is not set +CONFIG_AEABI=y +CONFIG_OABI_COMPAT=y CONFIG_ARCH_FLATMEM_HAS_HOLES=y # CONFIG_ARCH_SPARSEMEM_DEFAULT is not set # CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
@@ -260,7 +268,6 @@ CONFIG_BINFMT_ELF=y CONFIG_HAVE_AOUT=y # CONFIG_BINFMT_AOUT is not set # CONFIG_BINFMT_MISC is not set -# CONFIG_ARTHUR is not set # # Power management options
@@ -399,7 +406,88 @@ CONFIG_EXTRA_FIRMWARE="" # CONFIG_DEBUG_DEVRES is not set # CONFIG_SYS_HYPERVISOR is not set # CONFIG_CONNECTOR is not set -# CONFIG_MTD is not set +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_CONCAT is not set +CONFIG_MTD_PARTITIONS=y +CONFIG_MTD_TESTS=m +# CONFIG_MTD_REDBOOT_PARTS is not set +# CONFIG_MTD_CMDLINE_PARTS is not set +# CONFIG_MTD_AFS_PARTS is not set +# CONFIG_MTD_AR7_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLKDEVS=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set +# CONFIG_INFTL is not set +# CONFIG_RFD_FTL is not set +# CONFIG_SSFDC is not set +# CONFIG_MTD_OOPS is not set + +# +# RAM/ROM/Flash chip drivers +# +# CONFIG_MTD_CFI is not set +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_MAP_BANK_WIDTH_1=y +CONFIG_MTD_MAP_BANK_WIDTH_2=y +CONFIG_MTD_MAP_BANK_WIDTH_4=y +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +CONFIG_MTD_CFI_I1=y +CONFIG_MTD_CFI_I2=y +# CONFIG_MTD_CFI_I4 is not set +# CONFIG_MTD_CFI_I8 is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_COMPLEX_MAPPINGS is not set +# CONFIG_MTD_PLATRAM is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLOCK2MTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set +CONFIG_MTD_NAND=y +CONFIG_MTD_NAND_VERIFY_WRITE=y +# CONFIG_MTD_NAND_ECC_SMC is not set +# CONFIG_MTD_NAND_MUSEUM_IDS is not set +CONFIG_MTD_NAND_IDS=y +# CONFIG_MTD_NAND_DISKONCHIP is not set +# CONFIG_MTD_NAND_NANDSIM is not set +# CONFIG_MTD_NAND_PLATFORM is not set +CONFIG_MTD_NAND_NOMADIK=y +# CONFIG_MTD_ONENAND is not set + +# +# LPDDR flash memory drivers +# +# CONFIG_MTD_LPDDR is not set + +# +# UBI - Unsorted block images +# +# CONFIG_MTD_UBI is not set # CONFIG_PARPORT is not set CONFIG_BLK_DEV=y # CONFIG_BLK_DEV_COW_COMMON is not set
@@ -619,6 +707,8 @@ CONFIG_SSB_POSSIBLE=y # CONFIG_MFD_SM501 is not set # CONFIG_HTC_PASIC3 is not set # CONFIG_MFD_TMIO is not set +# CONFIG_MFD_T7L66XB is not set +# CONFIG_MFD_TC6387XB is not set # # Multimedia devices
@@ -797,6 +887,17 @@ CONFIG_MISC_FILESYSTEMS=y # CONFIG_BEFS_FS is not set # CONFIG_BFS_FS is not set # CONFIG_EFS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +CONFIG_JFFS2_FS_WRITEBUFFER=y +# CONFIG_JFFS2_FS_WBUF_VERIFY is not set +# CONFIG_JFFS2_SUMMARY is not set +# CONFIG_JFFS2_FS_XATTR is not set +# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set +CONFIG_JFFS2_ZLIB=y +# CONFIG_JFFS2_LZO is not set +CONFIG_JFFS2_RTIME=y +# CONFIG_JFFS2_RUBIN is not set # CONFIG_CRAMFS is not set # CONFIG_SQUASHFS is not set # CONFIG_VXFS_FS is not set
@@ -1063,8 +1164,8 @@ CONFIG_CRC_CCITT=m CONFIG_CRC32=y # CONFIG_CRC7 is not set # CONFIG_LIBCRC32C is not set -CONFIG_ZLIB_INFLATE=m -CONFIG_ZLIB_DEFLATE=m +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y CONFIG_PLIST=y CONFIG_HAS_IOMEM=y CONFIG_HAS_IOPORT=y
arch/arm/mach-nomadik/board-8815nhk.c +92 -6
119 lines not on this page · raw message
arch/arm/mach-nomadik/include/mach/fsmc.h new file +36 -0
@@ -0,0 +1,36 @@ + +/* Definitions for the Nomadik FSMC "Flexible Static Memory controller" */ + +#ifndef __ASM_ARCH_FSMC_H +#define __ASM_ARCH_FSMC_H + +#include <mach/hardware.h> +/* +* Register list +*/ + +/* control and timing registers for CS0..CS3 */ +#define FSMC_BCR0 ((void __iomem *)(NOMADIK_FSMC_VA + 0x00)) +#define FSMC_BTR0 ((void __iomem *)(NOMADIK_FSMC_VA + 0x04)) +#define FSMC_BCR1 ((void __iomem *)(NOMADIK_FSMC_VA + 0x08)) +#define FSMC_BTR1 ((void __iomem *)(NOMADIK_FSMC_VA + 0x0c)) +#define FSMC_BCR2 ((void __iomem *)(NOMADIK_FSMC_VA + 0x10)) +#define FSMC_BTR2 ((void __iomem *)(NOMADIK_FSMC_VA + 0x14)) +#define FSMC_BCR3 ((void __iomem *)(NOMADIK_FSMC_VA + 0x18)) +#define FSMC_BTR3 ((void __iomem *)(NOMADIK_FSMC_VA + 0x1c)) + +/* pc-card and nand flash */ +#define FSMC_PCR0 ((void __iomem *)(NOMADIK_FSMC_VA + 0x40)) +#define FSMC_PMEM0 ((void __iomem *)(NOMADIK_FSMC_VA + 0x48)) +#define FSMC_PATT0 ((void __iomem *)(NOMADIK_FSMC_VA + 0x4c)) +#define FSMC_PIO0 ((void __iomem *)(NOMADIK_FSMC_VA + 0x50)) +#define FSMC_PECCR0 ((void __iomem *)(NOMADIK_FSMC_VA + 0x54)) + +#define FSMC_PCR1 ((void __iomem *)(NOMADIK_FSMC_VA + 0x60)) +#define FSMC_PMEM1 ((void __iomem *)(NOMADIK_FSMC_VA + 0x68)) +#define FSMC_PATT1 ((void __iomem *)(NOMADIK_FSMC_VA + 0x6c)) +#define FSMC_PIO1 ((void __iomem *)(NOMADIK_FSMC_VA + 0x70)) +#define FSMC_PECCR1 ((void __iomem *)(NOMADIK_FSMC_VA + 0x74)) + + +#endif /* __ASM_ARCH_FSMC_H */
arch/arm/mach-nomadik/include/mach/hardware.h +3 -2
@@ -96,7 +96,8 @@#define DENC_MODE_PAL 0#define DENC_MODE_NTSC 1 -#define NOMADIK_MTU0_VA (IO_ADDRESS(NOMADIK_MTU0_BASE)) -#define NOMADIK_MTU1_VA (IO_ADDRESS(NOMADIK_MTU1_BASE)) +#define NOMADIK_FSMC_VA IO_ADDRESS(NOMADIK_FSMC_BASE) +#define NOMADIK_MTU0_VA IO_ADDRESS(NOMADIK_MTU0_BASE) +#define NOMADIK_MTU1_VA IO_ADDRESS(NOMADIK_MTU1_BASE)#endif /* __ASM_ARCH_HARDWARE_H */
arch/arm/mach-nomadik/include/mach/nand.h new file +16 -0
@@ -0,0 +1,16 @@ +#ifndef __ASM_ARCH_NAND_H +#define __ASM_ARCH_NAND_H + +struct nomadik_nand_platform_data { +struct mtd_partition *parts; +int nparts; +int options; +int (*init) (void ); +int (*exit) (void ); +}; + +#define NAND_IO_DATA 0x40000000 +#define NAND_IO_CMD 0x40800000 +#define NAND_IO_ADDR 0x41000000 + +#endif /* __ASM_ARCH_NAND_H */
drivers/mtd/nand/Kconfig +6 -0
@@ -420,6 +420,12 @@ config MTD_NAND_MXC This enables the driver for the NAND flash controller on the MXC processors. +config MTD_NAND_NOMADIK + tristate "ST Nomadik 8815 NAND support" + depends on ARCH_NOMADIK + help + Driver for the NAND flash controller on the Nomadik, with ECC. + config MTD_NAND_SH_FLCTL tristate "Support for NAND on Renesas SuperH FLCTL" depends on MTD_NAND && SUPERH && CPU_SUBTYPE_SH7723
drivers/mtd/nand/Makefile +1 -0
@@ -36,5 +36,6 @@ obj-$(CONFIG_MTD_NAND_FSL_ELBC) += fsl_elbc_nand.o obj-$(CONFIG_MTD_NAND_FSL_UPM) += fsl_upm.o obj-$(CONFIG_MTD_NAND_SH_FLCTL) += sh_flctl.o obj-$(CONFIG_MTD_NAND_MXC) += mxc_nand.o +obj-$(CONFIG_MTD_NAND_NOMADIK) += nomadik_nand.o nand-objs := nand_base.o nand_bbt.o
drivers/mtd/nand/nomadik_nand.c new file +328 -0
328 lines not on this page · raw message
Signature · 1 line
1.6.0.2