Subject: [PATCH for 3.0] AT91: Change nand buswidth logic to match hardware default configuration

From: [email-masked] (Nicolas Ferre)
Date: Mon, 04 Jul 2011 11:37:01 +0200

Le 01/07/2011 12:25, Nicolas Ferre :
> The recently modified nand buswitth configuration is not aligned with
> board reality: the double footprint on boards is always populated with 8bits
> buswidth nand flashes.
> So we have to consider that without particular configuration the 8bits
> buswidth is selected by default.
> Moreover, the previous logic was always using !board_have_nand_8bit(), we
> change it to a simpler: board_have_nand_16bit().
> 
> Signed-off-by: Nicolas Ferre <[email-masked]>
> Tested-by: Ludovic Desroches <[email-masked]>

Arnd,

Can you please handle this parch for 3.0-final as a bug fix through the
arm-soc.git tree?

You can queue it in addition of the pull request sent by
Jean-Christophe: "AT91: Fix pull requset".

Thanks, best regards,

> ---
>  arch/arm/mach-at91/board-cap9adk.c           |    2 +-
>  arch/arm/mach-at91/board-sam9260ek.c         |    2 +-
>  arch/arm/mach-at91/board-sam9261ek.c         |    2 +-
>  arch/arm/mach-at91/board-sam9263ek.c         |    2 +-
>  arch/arm/mach-at91/board-sam9g20ek.c         |    2 +-
>  arch/arm/mach-at91/board-sam9m10g45ek.c      |    2 +-
>  arch/arm/mach-at91/include/mach/system_rev.h |   10 +++++-----
>  7 files changed, 11 insertions(+), 11 deletions(-)
> 
> diff --git a/arch/arm/mach-at91/board-cap9adk.c b/arch/arm/mach-at91/board-cap9adk.c
> index 1904fdf..cdb65d4 100644
> --- a/arch/arm/mach-at91/board-cap9adk.c
> +++ b/arch/arm/mach-at91/board-cap9adk.c
> @@ -215,7 +215,7 @@ static void __init cap9adk_add_device_nand(void)
>  	csa = at91_sys_read(AT91_MATRIX_EBICSA);
>  	at91_sys_write(AT91_MATRIX_EBICSA, csa | AT91_MATRIX_EBI_VDDIOMSEL_3_3V);
>  
> -	cap9adk_nand_data.bus_width_16 = !board_have_nand_8bit();
> +	cap9adk_nand_data.bus_width_16 = board_have_nand_16bit();
>  	/* setup bus-width (8 or 16) */
>  	if (cap9adk_nand_data.bus_width_16)
>  		cap9adk_nand_smc_config.mode |= AT91_SMC_DBW_16;
> diff --git a/arch/arm/mach-at91/board-sam9260ek.c b/arch/arm/mach-at91/board-sam9260ek.c
> index d600dc1..5c24074 100644
> --- a/arch/arm/mach-at91/board-sam9260ek.c
> +++ b/arch/arm/mach-at91/board-sam9260ek.c
> @@ -214,7 +214,7 @@ static struct sam9_smc_config __initdata ek_nand_smc_config = {
>  
>  static void __init ek_add_device_nand(void)
>  {
> -	ek_nand_data.bus_width_16 = !board_have_nand_8bit();
> +	ek_nand_data.bus_width_16 = board_have_nand_16bit();
>  	/* setup bus-width (8 or 16) */
>  	if (ek_nand_data.bus_width_16)
>  		ek_nand_smc_config.mode |= AT91_SMC_DBW_16;
> diff --git a/arch/arm/mach-at91/board-sam9261ek.c b/arch/arm/mach-at91/board-sam9261ek.c
> index f897f84..b60c22b 100644
> --- a/arch/arm/mach-at91/board-sam9261ek.c
> +++ b/arch/arm/mach-at91/board-sam9261ek.c
> @@ -220,7 +220,7 @@ static struct sam9_smc_config __initdata ek_nand_smc_config = {
>  
>  static void __init ek_add_device_nand(void)
>  {
> -	ek_nand_data.bus_width_16 = !board_have_nand_8bit();
> +	ek_nand_data.bus_width_16 = board_have_nand_16bit();
>  	/* setup bus-width (8 or 16) */
>  	if (ek_nand_data.bus_width_16)
>  		ek_nand_smc_config.mode |= AT91_SMC_DBW_16;
> diff --git a/arch/arm/mach-at91/board-sam9263ek.c b/arch/arm/mach-at91/board-sam9263ek.c
> index 605b26f..9bbdc92 100644
> --- a/arch/arm/mach-at91/board-sam9263ek.c
> +++ b/arch/arm/mach-at91/board-sam9263ek.c
> @@ -221,7 +221,7 @@ static struct sam9_smc_config __initdata ek_nand_smc_config = {
>  
>  static void __init ek_add_device_nand(void)
>  {
> -	ek_nand_data.bus_width_16 = !board_have_nand_8bit();
> +	ek_nand_data.bus_width_16 = board_have_nand_16bit();
>  	/* setup bus-width (8 or 16) */
>  	if (ek_nand_data.bus_width_16)
>  		ek_nand_smc_config.mode |= AT91_SMC_DBW_16;
> diff --git a/arch/arm/mach-at91/board-sam9g20ek.c b/arch/arm/mach-at91/board-sam9g20ek.c
> index 7624cf0..1325a50 100644
> --- a/arch/arm/mach-at91/board-sam9g20ek.c
> +++ b/arch/arm/mach-at91/board-sam9g20ek.c
> @@ -198,7 +198,7 @@ static struct sam9_smc_config __initdata ek_nand_smc_config = {
>  
>  static void __init ek_add_device_nand(void)
>  {
> -	ek_nand_data.bus_width_16 = !board_have_nand_8bit();
> +	ek_nand_data.bus_width_16 = board_have_nand_16bit();
>  	/* setup bus-width (8 or 16) */
>  	if (ek_nand_data.bus_width_16)
>  		ek_nand_smc_config.mode |= AT91_SMC_DBW_16;
> diff --git a/arch/arm/mach-at91/board-sam9m10g45ek.c b/arch/arm/mach-at91/board-sam9m10g45ek.c
> index 063c95d..33eaa13 100644
> --- a/arch/arm/mach-at91/board-sam9m10g45ek.c
> +++ b/arch/arm/mach-at91/board-sam9m10g45ek.c
> @@ -178,7 +178,7 @@ static struct sam9_smc_config __initdata ek_nand_smc_config = {
>  
>  static void __init ek_add_device_nand(void)
>  {
> -	ek_nand_data.bus_width_16 = !board_have_nand_8bit();
> +	ek_nand_data.bus_width_16 = board_have_nand_16bit();
>  	/* setup bus-width (8 or 16) */
>  	if (ek_nand_data.bus_width_16)
>  		ek_nand_smc_config.mode |= AT91_SMC_DBW_16;
> diff --git a/arch/arm/mach-at91/include/mach/system_rev.h b/arch/arm/mach-at91/include/mach/system_rev.h
> index b855ee7..8f48660 100644
> --- a/arch/arm/mach-at91/include/mach/system_rev.h
> +++ b/arch/arm/mach-at91/include/mach/system_rev.h
> @@ -13,13 +13,13 @@
>   * the 16-31 bit are reserved for at91 generic information
>   *
>   * bit 31:
> - *	0 => nand 16 bit
> - *	1 => nand 8 bit
> + *	0 => nand 8 bit
> + *	1 => nand 16 bit
>   */
> -#define BOARD_HAVE_NAND_8BIT	(1 << 31)
> -static int inline board_have_nand_8bit(void)
> +#define BOARD_HAVE_NAND_16BIT	(1 << 31)
> +static inline int board_have_nand_16bit(void)
>  {
> -	return system_rev & BOARD_HAVE_NAND_8BIT;
> +	return system_rev & BOARD_HAVE_NAND_16BIT;
>  }
>  
>  #endif /* __ARCH_SYSTEM_REV_H__ */

-- 
Nicolas Ferre