[PATCH] ls1043ardb: nand driver fixups for revision v7.0 boards

Peng Fan peng.fan at oss.nxp.com
Mon Sep 26 10:27:12 CEST 2022



On 9/26/2022 4:18 PM, Wei Lu wrote:
> The LS1043ARDB rev v7.0 board replace nand device MT29F4G08ABBDAH4-AITX:D
> with MT29F4G08ABBFAH4-AIT:F. Reflecting this change in board_fix_fdt().
> CPLD V3.0 is needed for nandboot as the nand device changed.
> A new macro CPLD_CFG_RCW_SRC_NAND_4K(4Kpage) is added to distinguish from
> CPLD_CFG_RCW_SRC_NAND(2Kpage) to support nandboot on rev v7.0 board.
> 
> Signed-off-by: Wei Lu <w.lu at nxp.com>

Reviewed-by: Peng Fan <peng.fan at nxp.com>

> ---
>   board/freescale/ls1043ardb/cpld.c       |  4 +++
>   board/freescale/ls1043ardb/cpld.h       |  1 +
>   board/freescale/ls1043ardb/ls1043ardb.c | 46 ++++++++++++++++++++++++-
>   3 files changed, 50 insertions(+), 1 deletion(-)
> 
> diff --git a/board/freescale/ls1043ardb/cpld.c b/board/freescale/ls1043ardb/cpld.c
> index 5d2e8015a0..232035638b 100644
> --- a/board/freescale/ls1043ardb/cpld.c
> +++ b/board/freescale/ls1043ardb/cpld.c
> @@ -69,6 +69,10 @@ void cpld_set_defbank(void)
>   void cpld_set_nand(void)
>   {
>   	u16 reg = CPLD_CFG_RCW_SRC_NAND;
> +
> +	if (CPLD_READ(cpld_ver) > 0x2)
> +		reg = CPLD_CFG_RCW_SRC_NAND_4K;
> +
>   	u8 reg5 = (u8)(reg >> 1);
>   	u8 reg6 = (u8)(reg & 1);
>   
> diff --git a/board/freescale/ls1043ardb/cpld.h b/board/freescale/ls1043ardb/cpld.h
> index 2e757b557f..eed34d6354 100644
> --- a/board/freescale/ls1043ardb/cpld.h
> +++ b/board/freescale/ls1043ardb/cpld.h
> @@ -41,5 +41,6 @@ void cpld_rev_bit(unsigned char *value);
>   #define CPLD_BANK_SEL_ALTBANK	0x04
>   #define CPLD_CFG_RCW_SRC_NOR	0x025
>   #define CPLD_CFG_RCW_SRC_NAND	0x106
> +#define CPLD_CFG_RCW_SRC_NAND_4K	0x118
>   #define CPLD_CFG_RCW_SRC_SD	0x040
>   #endif
> diff --git a/board/freescale/ls1043ardb/ls1043ardb.c b/board/freescale/ls1043ardb/ls1043ardb.c
> index f388eb496f..8c91f0771f 100644
> --- a/board/freescale/ls1043ardb/ls1043ardb.c
> +++ b/board/freescale/ls1043ardb/ls1043ardb.c
> @@ -167,7 +167,7 @@ int checkboard(void)
>   
>   	if (cfg_rcw_src == 0x25)
>   		printf("vBank %d\n", CPLD_READ(vbank));
> -	else if (cfg_rcw_src == 0x106)
> +	else if ((cfg_rcw_src == 0x106) || (cfg_rcw_src == 0x118))
>   		puts("NAND\n");
>   	else
>   		printf("Invalid setting of SW4\n");
> @@ -347,10 +347,54 @@ int ft_board_setup(void *blob, struct bd_info *bd)
>   	return 0;
>   }
>   
> +void nand_fixup(void)
> +{
> +	u32 csor = 0;
> +
> +	if (CPLD_READ(pcba_ver) < 0x7)
> +		return;
> +
> +    /* Change NAND Flash PGS/SPRZ configuration */
> +	csor = CONFIG_SYS_NAND_CSOR;
> +	if ((csor & CSOR_NAND_PGS_MASK) == CSOR_NAND_PGS_2K)
> +		csor = (csor & ~(CSOR_NAND_PGS_MASK)) | CSOR_NAND_PGS_4K;
> +
> +	if ((csor & CSOR_NAND_SPRZ_MASK) == CSOR_NAND_SPRZ_64)
> +		csor = (csor & ~(CSOR_NAND_SPRZ_MASK)) | CSOR_NAND_SPRZ_224;
> +
> +	if (IS_ENABLED(CONFIG_TFABOOT)) {
> +		u8 cfg_rcw_src1, cfg_rcw_src2;
> +		u16 cfg_rcw_src;
> +
> +		cfg_rcw_src1 = CPLD_READ(cfg_rcw_src1);
> +		cfg_rcw_src2 = CPLD_READ(cfg_rcw_src2);
> +		cpld_rev_bit(&cfg_rcw_src1);
> +		cfg_rcw_src = cfg_rcw_src1;
> +		cfg_rcw_src = (cfg_rcw_src << 1) | cfg_rcw_src2;
> +
> +		if (cfg_rcw_src == 0x25)
> +			set_ifc_csor(IFC_CS1, csor);
> +		else if (cfg_rcw_src == 0x118)
> +			set_ifc_csor(IFC_CS0, csor);
> +		else
> +			printf("Invalid setting\n");
> +	} else {
> +		if (IS_ENABLED(CONFIG_NAND_BOOT))
> +			set_ifc_csor(IFC_CS0, csor);
> +		else
> +			set_ifc_csor(IFC_CS1, csor);
> +	}
> +}
> +
>   #if IS_ENABLED(CONFIG_OF_BOARD_FIXUP)
>   int board_fix_fdt(void *blob)
>   {
> +	/* nand driver fix up */
> +	nand_fixup();
> +
> +	/* fdt fix up */
>   	fdt_fixup_phy_addr(blob);
> +
>   	return 0;
>   }
>   #endif


More information about the U-Boot mailing list