Vipin KUMAR wrote: > Since FSMC is a standard IP and it supports different memory interfaces the > FSMC
grammar 'interfaces the' -> 'interfaces; the' > is supported independent of spear platform and spear is configured to use that > driver for interfacing with the NAND device Describe that because the common interface is used, the spear specific files arch/arm/include/asm/arch-spear/spr_nand.h, drivers/mtd/nand/spr_nand.c Have been removed and replaced with ... > > Signed-off-by: Vipin Kumar <vipin.ku...@st.com> > --- > arch/arm/include/asm/arch-spear/hardware.h | 8 +- > arch/arm/include/asm/arch-spear/spr_nand.h | 57 ------------- > board/spear/spear300/spear300.c | 4 +- > board/spear/spear310/spear310.c | 4 +- > board/spear/spear320/spear320.c | 4 +- > board/spear/spear600/spear600.c | 4 +- > drivers/mtd/nand/Makefile | 1 - > drivers/mtd/nand/spr_nand.c | 124 > ---------------------------- > include/configs/spear-common.h | 2 +- > include/configs/spear3xx.h | 4 + > include/configs/spear6xx.h | 3 + > 11 files changed, 20 insertions(+), 195 deletions(-) > delete mode 100644 arch/arm/include/asm/arch-spear/spr_nand.h > delete mode 100644 drivers/mtd/nand/spr_nand.c > > diff --git a/arch/arm/include/asm/arch-spear/hardware.h > b/arch/arm/include/asm/arch-spear/hardware.h > index 9f1e154..52037b6 100644 > --- a/arch/arm/include/asm/arch-spear/hardware.h > +++ b/arch/arm/include/asm/arch-spear/hardware.h > @@ -38,15 +38,15 @@ > > #if defined(CONFIG_SPEAR600) > #define CONFIG_SYS_I2C_BASE (0xD0200000) > -#define CONFIG_SPEAR_FSMCBASE (0xD1800000) > +#define CONFIG_SYS_FSMC_BASE (0xD1800000) > > #elif defined(CONFIG_SPEAR300) > #define CONFIG_SYS_I2C_BASE (0xD0180000) > -#define CONFIG_SPEAR_FSMCBASE (0x94000000) > +#define CONFIG_SYS_FSMC_BASE (0x94000000) > > #elif defined(CONFIG_SPEAR310) > #define CONFIG_SYS_I2C_BASE (0xD0180000) > -#define CONFIG_SPEAR_FSMCBASE (0x44000000) > +#define CONFIG_SYS_FSMC_BASE (0x44000000) > > #undef CONFIG_SYS_NAND_CLE > #undef CONFIG_SYS_NAND_ALE > @@ -63,7 +63,7 @@ > > #elif defined(CONFIG_SPEAR320) > #define CONFIG_SYS_I2C_BASE (0xD0180000) > -#define CONFIG_SPEAR_FSMCBASE (0x4C000000) > +#define CONFIG_SYS_FSMC_BASE (0x4C000000) > > #define CONFIG_SPEAR_EMIBASE (0x40000000) > #define CONFIG_SPEAR_RASBASE (0xB3000000) > diff --git a/arch/arm/include/asm/arch-spear/spr_nand.h > b/arch/arm/include/asm/arch-spear/spr_nand.h > deleted file mode 100644 > index 2b63dc7..0000000 > --- a/arch/arm/include/asm/arch-spear/spr_nand.h > +++ /dev/null > @@ -1,57 +0,0 @@ > -/* > - * (C) Copyright 2009 > - * Vipin Kumar, ST Micoelectronics, vipin.ku...@st.com. > - * > - * See file CREDITS for list of people who contributed to this > - * project. > - * > - * This program is free software; you can redistribute it and/or > - * modify it under the terms of the GNU General Public License as > - * published by the Free Software Foundation; either version 2 of > - * the License, or (at your option) any later version. > - * > - * This program is distributed in the hope that it will be useful, > - * but WITHOUT ANY WARRANTY; without even the implied warranty of > - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > - * GNU General Public License for more details. > - * > - * You should have received a copy of the GNU General Public License > - * along with this program; if not, write to the Free Software > - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, > - * MA 02111-1307 USA > - */ > - > -#ifndef __SPR_NAND_H__ > -#define __SPR_NAND_H__ > - > -struct fsmc_regs { > - u32 reserved_1[0x10]; > - u32 genmemctrl_pc; > - u32 reserved_2; > - u32 genmemctrl_comm; > - u32 genmemctrl_attrib; > - u32 reserved_3; > - u32 genmemctrl_ecc; > -}; > - > -/* genmemctrl_pc register definitions */ > -#define FSMC_RESET (1 << 0) > -#define FSMC_WAITON (1 << 1) > -#define FSMC_ENABLE (1 << 2) > -#define FSMC_DEVTYPE_NAND (1 << 3) > -#define FSMC_DEVWID_8 (0 << 4) > -#define FSMC_DEVWID_16 (1 << 4) > -#define FSMC_ECCEN (1 << 6) > -#define FSMC_ECCPLEN_512 (0 << 7) > -#define FSMC_ECCPLEN_256 (1 << 7) > -#define FSMC_TCLR_1 (1 << 9) > -#define FSMC_TAR_1 (1 << 13) > - > -/* genmemctrl_comm register definitions */ > -#define FSMC_TSET_0 (0 << 0) > -#define FSMC_TWAIT_6 (6 << 8) > -#define FSMC_THOLD_4 (4 << 16) > -#define FSMC_THIZ_1 (1 << 24) > - > -extern int spear_nand_init(struct nand_chip *nand); > -#endif > diff --git a/board/spear/spear300/spear300.c b/board/spear/spear300/spear300.c > index cd24247..bb98161 100644 > --- a/board/spear/spear300/spear300.c > +++ b/board/spear/spear300/spear300.c > @@ -25,10 +25,10 @@ > #include <netdev.h> > #include <nand.h> > #include <asm/io.h> > +#include <linux/mtd/fsmc_nand.h> > #include <asm/arch/hardware.h> > #include <asm/arch/spr_defs.h> > #include <asm/arch/spr_misc.h> > -#include <asm/arch/spr_nand.h> > > int board_init(void) > { > @@ -52,7 +52,7 @@ int board_nand_init(struct nand_chip *nand) > ((readl(&misc_regs_p->auto_cfg_reg) & MISC_SOCCFGMSK) == > MISC_SOCCFG31)) { > > - return spear_nand_init(nand); > + return fsmc_nand_init(nand); Can make this conditionally compiled with CONFIG_NAND_FSMC It this is common, it may be able to move to the spear/common dir. Tom > } > > return -1; > diff --git a/board/spear/spear310/spear310.c b/board/spear/spear310/spear310.c > index 1207709..dfb7728 100644 > --- a/board/spear/spear310/spear310.c > +++ b/board/spear/spear310/spear310.c > @@ -26,10 +26,10 @@ > #include <netdev.h> > #include <nand.h> > #include <asm/io.h> > +#include <linux/mtd/fsmc_nand.h> > #include <asm/arch/hardware.h> > #include <asm/arch/spr_defs.h> > #include <asm/arch/spr_misc.h> > -#include <asm/arch/spr_nand.h> > > int board_init(void) > { > @@ -53,7 +53,7 @@ int board_nand_init(struct nand_chip *nand) > ((readl(&misc_regs_p->auto_cfg_reg) & MISC_SOCCFGMSK) == > MISC_SOCCFG31)) { > > - return spear_nand_init(nand); > + return fsmc_nand_init(nand); > } > > return -1; > diff --git a/board/spear/spear320/spear320.c b/board/spear/spear320/spear320.c > index efc9a99..a15ffc4 100644 > --- a/board/spear/spear320/spear320.c > +++ b/board/spear/spear320/spear320.c > @@ -26,10 +26,10 @@ > #include <netdev.h> > #include <nand.h> > #include <asm/io.h> > +#include <linux/mtd/fsmc_nand.h> > #include <asm/arch/hardware.h> > #include <asm/arch/spr_defs.h> > #include <asm/arch/spr_misc.h> > -#include <asm/arch/spr_nand.h> > > int board_init(void) > { > @@ -53,7 +53,7 @@ int board_nand_init(struct nand_chip *nand) > ((readl(&misc_regs_p->auto_cfg_reg) & MISC_SOCCFGMSK) == > MISC_SOCCFG31)) { > > - return spear_nand_init(nand); > + return fsmc_nand_init(nand); > } > > return -1; > diff --git a/board/spear/spear600/spear600.c b/board/spear/spear600/spear600.c > index 6d921bd..f7f25d2 100644 > --- a/board/spear/spear600/spear600.c > +++ b/board/spear/spear600/spear600.c > @@ -25,10 +25,10 @@ > #include <netdev.h> > #include <nand.h> > #include <asm/io.h> > +#include <linux/mtd/fsmc_nand.h> > #include <asm/arch/hardware.h> > #include <asm/arch/spr_defs.h> > #include <asm/arch/spr_misc.h> > -#include <asm/arch/spr_nand.h> > > int board_init(void) > { > @@ -48,7 +48,7 @@ int board_nand_init(struct nand_chip *nand) > (struct misc_regs *)CONFIG_SPEAR_MISCBASE; > > if (!(readl(&misc_regs_p->auto_cfg_reg) & MISC_NANDDIS)) > - return spear_nand_init(nand); > + return fsmc_nand_init(nand); > > return -1; > } > diff --git a/drivers/mtd/nand/Makefile b/drivers/mtd/nand/Makefile > index 4c6b54f..36fc8b3 100644 > --- a/drivers/mtd/nand/Makefile > +++ b/drivers/mtd/nand/Makefile > @@ -48,7 +48,6 @@ COBJS-$(CONFIG_NAND_NDFC) += ndfc.o > COBJS-$(CONFIG_NAND_NOMADIK) += nomadik.o > COBJS-$(CONFIG_NAND_S3C2410) += s3c2410_nand.o > COBJS-$(CONFIG_NAND_S3C64XX) += s3c64xx.o > -COBJS-$(CONFIG_NAND_SPEAR) += spr_nand.o > COBJS-$(CONFIG_NAND_OMAP_GPMC) += omap_gpmc.o > COBJS-$(CONFIG_NAND_PLAT) += nand_plat.o > endif > diff --git a/drivers/mtd/nand/spr_nand.c b/drivers/mtd/nand/spr_nand.c > deleted file mode 100644 > index 097d0c6..0000000 > --- a/drivers/mtd/nand/spr_nand.c > +++ /dev/null > @@ -1,124 +0,0 @@ > -/* > - * (C) Copyright 2009 > - * Vipin Kumar, ST Micoelectronics, vipin.ku...@st.com. > - * > - * See file CREDITS for list of people who contributed to this > - * project. > - * > - * This program is free software; you can redistribute it and/or > - * modify it under the terms of the GNU General Public License as > - * published by the Free Software Foundation; either version 2 of > - * the License, or (at your option) any later version. > - * > - * This program is distributed in the hope that it will be useful, > - * but WITHOUT ANY WARRANTY; without even the implied warranty of > - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > - * GNU General Public License for more details. > - * > - * You should have received a copy of the GNU General Public License > - * along with this program; if not, write to the Free Software > - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, > - * MA 02111-1307 USA > - */ > - > -#include <common.h> > -#include <nand.h> > -#include <linux/mtd/nand_ecc.h> > -#include <asm/io.h> > -#include <asm/arch/hardware.h> > -#include <asm/arch/spr_nand.h> > - > -static struct fsmc_regs *const fsmc_regs_p = > - (struct fsmc_regs *)CONFIG_SPEAR_FSMCBASE; > - > -static struct nand_ecclayout spear_nand_ecclayout = { > - .eccbytes = 24, > - .eccpos = {2, 3, 4, 18, 19, 20, 34, 35, 36, 50, 51, 52, > - 66, 67, 68, 82, 83, 84, 98, 99, 100, 114, 115, 116}, > - .oobfree = { > - {.offset = 8, .length = 8}, > - {.offset = 24, .length = 8}, > - {.offset = 40, .length = 8}, > - {.offset = 56, .length = 8}, > - {.offset = 72, .length = 8}, > - {.offset = 88, .length = 8}, > - {.offset = 104, .length = 8}, > - {.offset = 120, .length = 8} > - } > -}; > - > -static void spear_nand_hwcontrol(struct mtd_info *mtd, int cmd, uint ctrl) > -{ > - struct nand_chip *this = mtd->priv; > - ulong IO_ADDR_W; > - > - if (ctrl & NAND_CTRL_CHANGE) { > - IO_ADDR_W = (ulong)this->IO_ADDR_W; > - > - IO_ADDR_W &= ~(CONFIG_SYS_NAND_CLE | CONFIG_SYS_NAND_ALE); > - if (ctrl & NAND_CLE) > - IO_ADDR_W |= CONFIG_SYS_NAND_CLE; > - if (ctrl & NAND_ALE) > - IO_ADDR_W |= CONFIG_SYS_NAND_ALE; > - > - if (ctrl & NAND_NCE) { > - writel(readl(&fsmc_regs_p->genmemctrl_pc) | > - FSMC_ENABLE, &fsmc_regs_p->genmemctrl_pc); > - } else { > - writel(readl(&fsmc_regs_p->genmemctrl_pc) & > - ~FSMC_ENABLE, &fsmc_regs_p->genmemctrl_pc); > - } > - this->IO_ADDR_W = (void *)IO_ADDR_W; > - } > - > - if (cmd != NAND_CMD_NONE) > - writeb(cmd, this->IO_ADDR_W); > -} > - > -static int spear_read_hwecc(struct mtd_info *mtd, > - const u_char *data, u_char ecc[3]) > -{ > - u_int ecc_tmp; > - > - /* read the h/w ECC */ > - ecc_tmp = readl(&fsmc_regs_p->genmemctrl_ecc); > - > - ecc[0] = (u_char) (ecc_tmp & 0xFF); > - ecc[1] = (u_char) ((ecc_tmp & 0xFF00) >> 8); > - ecc[2] = (u_char) ((ecc_tmp & 0xFF0000) >> 16); > - > - return 0; > -} > - > -void spear_enable_hwecc(struct mtd_info *mtd, int mode) > -{ > - writel(readl(&fsmc_regs_p->genmemctrl_pc) & ~0x80, > - &fsmc_regs_p->genmemctrl_pc); > - writel(readl(&fsmc_regs_p->genmemctrl_pc) & ~FSMC_ECCEN, > - &fsmc_regs_p->genmemctrl_pc); > - writel(readl(&fsmc_regs_p->genmemctrl_pc) | FSMC_ECCEN, > - &fsmc_regs_p->genmemctrl_pc); > -} > - > -int spear_nand_init(struct nand_chip *nand) > -{ > - writel(FSMC_DEVWID_8 | FSMC_DEVTYPE_NAND | FSMC_ENABLE | FSMC_WAITON, > - &fsmc_regs_p->genmemctrl_pc); > - writel(readl(&fsmc_regs_p->genmemctrl_pc) | FSMC_TCLR_1 | FSMC_TAR_1, > - &fsmc_regs_p->genmemctrl_pc); > - writel(FSMC_THIZ_1 | FSMC_THOLD_4 | FSMC_TWAIT_6 | FSMC_TSET_0, > - &fsmc_regs_p->genmemctrl_comm); > - writel(FSMC_THIZ_1 | FSMC_THOLD_4 | FSMC_TWAIT_6 | FSMC_TSET_0, > - &fsmc_regs_p->genmemctrl_attrib); > - > - nand->options = 0; > - nand->ecc.mode = NAND_ECC_HW; > - nand->ecc.layout = &spear_nand_ecclayout; > - nand->ecc.size = 512; > - nand->ecc.bytes = 3; > - nand->ecc.calculate = spear_read_hwecc; > - nand->ecc.hwctl = spear_enable_hwecc; > - nand->ecc.correct = nand_correct_data; > - nand->cmd_ctrl = spear_nand_hwcontrol; > - return 0; > -} > diff --git a/include/configs/spear-common.h b/include/configs/spear-common.h > index ecb1fd1..3eaa086 100644 > --- a/include/configs/spear-common.h > +++ b/include/configs/spear-common.h > @@ -90,7 +90,7 @@ > #define CONFIG_SYS_LOADS_BAUD_CHANGE > > /* NAND FLASH Configuration */ > -#define CONFIG_NAND_SPEAR 1 > +#define CONFIG_NAND_FSMC 1 > #define CONFIG_SYS_MAX_NAND_DEVICE 1 > #define CONFIG_MTD_NAND_VERIFY_WRITE 1 > > diff --git a/include/configs/spear3xx.h b/include/configs/spear3xx.h > index 689d914..fde505c 100644 > --- a/include/configs/spear3xx.h > +++ b/include/configs/spear3xx.h > @@ -133,6 +133,10 @@ > > #endif > > +/* NAND flash configuration */ > +#define CONFIG_SYS_FSMC_NAND_SP 1 > +#define CONFIG_SYS_FSMC_NAND_8BIT 1 > + > #if defined(CONFIG_SPEAR300) > #define CONFIG_SYS_NAND_BASE (0x80000000) > > diff --git a/include/configs/spear6xx.h b/include/configs/spear6xx.h > index 2ad5beb..2532344 100644 > --- a/include/configs/spear6xx.h > +++ b/include/configs/spear6xx.h > @@ -38,6 +38,9 @@ > #define CONFIG_PL01x_PORTS { (void *)CONFIG_SYS_SERIAL0, \ > (void *)CONFIG_SYS_SERIAL1 } > > +/* NAND flash configuration */ > +#define CONFIG_SYS_FSMC_NAND_SP 1 > +#define CONFIG_SYS_FSMC_NAND_8BIT 1 > #define CONFIG_SYS_NAND_BASE (0xD2000000) > > #endif /* __CONFIG_H */ _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot