All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stefan Roese <sr@denx.de>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 2/3] SPEAr: Configure FSMC driver for NAND interface
Date: Mon, 27 Feb 2012 11:02:18 +0100	[thread overview]
Message-ID: <201202271102.18797.sr@denx.de> (raw)
In-Reply-To: <1330335504-32226-3-git-send-email-amit.virdi@st.com>

Hi Amit,

please find a few comments below.

On Monday 27 February 2012 10:38:23 Amit Virdi wrote:
> From: Vipin KUMAR <vipin.kumar@st.com>
> 
> Since FSMC is a standard IP and it supports different memory interfaces, it
> is supported independent of spear platform and spear is configured to use
> that driver for interfacing with the NAND device
> 
> Signed-off-by: Vipin Kumar <vipin.kumar@st.com>
> Signed-off-by: Amit Virdi <amit.virdi@st.com>
> ---
>  arch/arm/include/asm/arch-spear/hardware.h |    8 ++++----
>  board/spear/spear300/spear300.c            |    7 ++++---
>  board/spear/spear310/spear310.c            |    7 ++++---
>  board/spear/spear320/spear320.c            |    7 ++++---
>  board/spear/spear600/spear600.c            |    7 ++++---
>  include/configs/spear-common.h             |    2 +-
>  include/configs/spear3xx.h                 |    4 ++++
>  include/configs/spear6xx.h                 |    3 +++
>  8 files changed, 28 insertions(+), 17 deletions(-)
>
> diff --git a/arch/arm/include/asm/arch-spear/hardware.h
> b/arch/arm/include/asm/arch-spear/hardware.h index 818f36c..a6517b2 100644
> --- a/arch/arm/include/asm/arch-spear/hardware.h
> +++ b/arch/arm/include/asm/arch-spear/hardware.h
> @@ -37,15 +37,15 @@
> 
>  #if defined(CONFIG_SPEAR600)
>  #define CONFIG_SYS_I2C_BASE			(0xD0200000)
> -#define CONFIG_SPEAR_FSMCBASE			(0xD1800000)
> +#define CONFIG_SYS_FSMC_BASE			(0xD1800000)

Please remove the parentheses here as they are not needed. Should be done to 
all those defines, perhaps in a cosmetic cleanup patch at some time as well:

+#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
> @@ -57,7 +57,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/board/spear/spear300/spear300.c
> b/board/spear/spear300/spear300.c index 60ee544..32bcb77 100644
> --- a/board/spear/spear300/spear300.c
> +++ b/board/spear/spear300/spear300.c
> @@ -24,10 +24,10 @@
>  #include <common.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)
>  {
> @@ -46,13 +46,14 @@ int board_nand_init(struct nand_chip *nand)
>  	struct misc_regs *const misc_regs_p =
>  	    (struct misc_regs *)CONFIG_SPEAR_MISCBASE;
> 
> +#if defined(CONFIG_NAND_FSMC)
>  	if (((readl(&misc_regs_p->auto_cfg_reg) & MISC_SOCCFGMSK) ==
>  	     MISC_SOCCFG30) ||
>  	    ((readl(&misc_regs_p->auto_cfg_reg) & MISC_SOCCFGMSK) ==
>  	     MISC_SOCCFG31)) {
> 
> -		return spear_nand_init(nand);
> +		return fsmc_nand_init(nand);
>  	}
> -
> +#endif
>  	return -1;
>  }
> diff --git a/board/spear/spear310/spear310.c
> b/board/spear/spear310/spear310.c index 03dfe16..8b58218 100644
> --- a/board/spear/spear310/spear310.c
> +++ b/board/spear/spear310/spear310.c
> @@ -25,10 +25,10 @@
>  #include <common.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)
>  {
> @@ -47,13 +47,14 @@ int board_nand_init(struct nand_chip *nand)
>  	struct misc_regs *const misc_regs_p =
>  	    (struct misc_regs *)CONFIG_SPEAR_MISCBASE;
> 
> +#if defined(CONFIG_NAND_FSMC)
>  	if (((readl(&misc_regs_p->auto_cfg_reg) & MISC_SOCCFGMSK) ==
>  	     MISC_SOCCFG30) ||
>  	    ((readl(&misc_regs_p->auto_cfg_reg) & MISC_SOCCFGMSK) ==
>  	     MISC_SOCCFG31)) {
> 
> -		return spear_nand_init(nand);
> +		return fsmc_nand_init(nand);
>  	}
> -
> +#endif
>  	return -1;
>  }
> diff --git a/board/spear/spear320/spear320.c
> b/board/spear/spear320/spear320.c index 2ba2dbb..172ad35 100644
> --- a/board/spear/spear320/spear320.c
> +++ b/board/spear/spear320/spear320.c
> @@ -25,10 +25,10 @@
>  #include <common.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)
>  {
> @@ -47,13 +47,14 @@ int board_nand_init(struct nand_chip *nand)
>  	struct misc_regs *const misc_regs_p =
>  	    (struct misc_regs *)CONFIG_SPEAR_MISCBASE;
> 
> +#if defined(CONFIG_NAND_FSMC)
>  	if (((readl(&misc_regs_p->auto_cfg_reg) & MISC_SOCCFGMSK) ==
>  	     MISC_SOCCFG30) ||
>  	    ((readl(&misc_regs_p->auto_cfg_reg) & MISC_SOCCFGMSK) ==
>  	     MISC_SOCCFG31)) {
> 
> -		return spear_nand_init(nand);
> +		return fsmc_nand_init(nand);
>  	}
> -
> +#endif
>  	return -1;
>  }
> diff --git a/board/spear/spear600/spear600.c
> b/board/spear/spear600/spear600.c index eef9a37..7cf63d6 100644
> --- a/board/spear/spear600/spear600.c
> +++ b/board/spear/spear600/spear600.c
> @@ -24,10 +24,10 @@
>  #include <common.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)
>  {
> @@ -46,8 +46,9 @@ int board_nand_init(struct nand_chip *nand)
>  	struct misc_regs *const misc_regs_p =
>  	    (struct misc_regs *)CONFIG_SPEAR_MISCBASE;
> 
> +#if defined(CONFIG_NAND_FSMC)
>  	if (!(readl(&misc_regs_p->auto_cfg_reg) & MISC_NANDDIS))
> -		return spear_nand_init(nand);
> -
> +		return fsmc_nand_init(nand);
> +#endif
>  	return -1;
>  }
> diff --git a/include/configs/spear-common.h
> b/include/configs/spear-common.h index 516b78e..c37305f 100644
> --- a/include/configs/spear-common.h
> +++ b/include/configs/spear-common.h
> @@ -90,7 +90,7 @@
>  /* NAND FLASH Configuration */
>  #define CONFIG_MTD_DEVICE
>  #define CONFIG_MTD_PARTITIONS
> -#define CONFIG_NAND_SPEAR			1
> +#define CONFIG_NAND_FSMC
>  #define CONFIG_SYS_MAX_NAND_DEVICE		1
>  #define CONFIG_MTD_NAND_VERIFY_WRITE

I suggest that you remove this last define. Most likely it was added for 
debugging purpose only. It slows down the speed and it brakes UBI support.
 
> diff --git a/include/configs/spear3xx.h b/include/configs/spear3xx.h
> index bd5d111..5bdd874 100644
> --- a/include/configs/spear3xx.h
> +++ b/include/configs/spear3xx.h
> @@ -117,6 +117,10 @@
> 
>  #endif
> 
> +/* NAND flash configuration */
> +#define CONFIG_SYS_FSMC_NAND_SP
> +#define CONFIG_SYS_FSMC_NAND_8BIT
> +
>  #if defined(CONFIG_SPEAR300)
>  #define CONFIG_SYS_NAND_BASE			0x80000000
> 
> diff --git a/include/configs/spear6xx.h b/include/configs/spear6xx.h
> index 8de7ebd..1e06c72 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
> +#define CONFIG_SYS_FSMC_NAND_8BIT

You also need the following define for this to work with the latest NAND 
subsystem:

#define CONFIG_MTD_ECC_SOFT

Not sure about SPEAr3xx. Most likely this needs it as well.

Thanks,
Stefan

--
DENX Software Engineering GmbH,      MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich,  Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-0 Fax: (+49)-8142-66989-80 Email: office at denx.de

  reply	other threads:[~2012-02-27 10:02 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-02-27  9:38 [U-Boot] [PATCH 0/3] mtd/NAND: Support for FSMC controller Amit Virdi
2012-02-27  9:38 ` [U-Boot] [PATCH 1/3] mtd/NAND: Add FSMC driver support Amit Virdi
2012-03-01 21:27   ` Scott Wood
2012-03-02 11:16     ` Amit Virdi
2012-03-05 23:39       ` Scott Wood
2012-02-27  9:38 ` [U-Boot] [PATCH 2/3] SPEAr: Configure FSMC driver for NAND interface Amit Virdi
2012-02-27 10:02   ` Stefan Roese [this message]
2012-02-27 10:15     ` Amit Virdi
2012-02-27 22:32     ` Scott Wood
2012-02-29 10:11       ` Amit Virdi
2012-02-29 18:03         ` Scott Wood
2012-03-02 11:24           ` Amit Virdi
2012-03-02 13:44           ` Stefan Roese
2012-03-02 17:19             ` Scott Wood
2012-02-29 10:09     ` Amit Virdi
2012-02-27  9:38 ` [U-Boot] [PATCH 3/3] mtd/NAND: Remove obsolete SPEAr specific NAND drivers Amit Virdi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=201202271102.18797.sr@denx.de \
    --to=sr@denx.de \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.