From 261fed4a8c61a968af52f0bb9635c173dc339e4b Mon Sep 17 00:00:00 2001 From: Michal Simek Date: Wed, 1 May 2013 16:38:28 +0200 Subject: [PATCH] nand: Clean nand initialization in mainline way Move hardcoded values to hardware.h and use it. Signed-off-by: Michal Simek --- arch/arm/include/asm/arch-zynq/hardware.h | 2 ++ arch/arm/include/asm/arch-zynq/sys_proto.h | 1 - board/xilinx/zynq/board.c | 7 ------- drivers/mtd/nand/zynq_nand.c | 21 +++++++++++++++---- .../configs/petalinux-auto-board.h.template | 11 ++++------ include/configs/zynq_common.h | 6 +----- 6 files changed, 24 insertions(+), 24 deletions(-) diff --git a/arch/arm/include/asm/arch-zynq/hardware.h b/arch/arm/include/asm/arch-zynq/hardware.h index 5e4f633a238..805c4256fca 100644 --- a/arch/arm/include/asm/arch-zynq/hardware.h +++ b/arch/arm/include/asm/arch-zynq/hardware.h @@ -34,6 +34,8 @@ #define ZYNQ_I2C_BASEADDR0 0xE0004000 #define ZYNQ_I2C_BASEADDR1 0xE0005000 #define ZYNQ_QSPI_BASEADDR 0xE000D000 +#define ZYNQ_SMC_BASEADDR 0xE000E000 +#define ZYNQ_NAND_BASEADDR 0xE1000000 /* Reflect slcr offsets */ struct slcr_regs { diff --git a/arch/arm/include/asm/arch-zynq/sys_proto.h b/arch/arm/include/asm/arch-zynq/sys_proto.h index 776c3b2748b..6572172feea 100644 --- a/arch/arm/include/asm/arch-zynq/sys_proto.h +++ b/arch/arm/include/asm/arch-zynq/sys_proto.h @@ -36,7 +36,6 @@ extern u32 zynq_slcr_get_idcode(void); extern int zynq_slcr_get_mio_pin_status(const char *periph); /* Driver extern functions */ -extern int zynq_nand_init(struct nand_chip *nand_chip); extern int zynq_sdhci_init(u32 regbase); #endif /* _SYS_PROTO_H_ */ diff --git a/board/xilinx/zynq/board.c b/board/xilinx/zynq/board.c index 119cde439ea..979ddb13928 100644 --- a/board/xilinx/zynq/board.c +++ b/board/xilinx/zynq/board.c @@ -174,13 +174,6 @@ int board_mmc_init(bd_t *bd) } #endif -#ifdef CONFIG_CMD_NAND -int board_nand_init(struct nand_chip *nand_chip) -{ - return zynq_nand_init(nand_chip); -} -#endif - int dram_init(void) { gd->ram_size = CONFIG_SYS_SDRAM_SIZE; diff --git a/drivers/mtd/nand/zynq_nand.c b/drivers/mtd/nand/zynq_nand.c index c0390be07a0..ab1ee378d04 100644 --- a/drivers/mtd/nand/zynq_nand.c +++ b/drivers/mtd/nand/zynq_nand.c @@ -21,6 +21,7 @@ #include #include #include +#include #include /* The NAND flash driver defines */ @@ -106,8 +107,7 @@ struct xnandps_smc_regs { u32 eval0r; /* 0x418 */ }; -#define xnandps_smc_base \ - ((struct xnandps_smc_regs *) XPSS_CRTL_PARPORT_BASEADDR) +#define xnandps_smc_base ((struct xnandps_smc_regs *)ZYNQ_SMC_BASEADDR) /* * struct xnandps_command_format - Defines NAND flash command format @@ -1032,7 +1032,7 @@ static int xnandps_check_is_16bit_bw_flash(void) return is_16bit_bw; } -int zynq_nand_init(struct nand_chip *nand_chip) +static int zynq_nand_init(struct nand_chip *nand_chip, int devnum) { struct xnandps_info *xnand; struct mtd_info *mtd; @@ -1052,7 +1052,7 @@ int zynq_nand_init(struct nand_chip *nand_chip) goto free; } - xnand->nand_base = (void *)XPSS_NAND_BASEADDR; + xnand->nand_base = (void *)ZYNQ_NAND_BASEADDR; mtd = &nand_info[0]; nand_chip->priv = xnand; @@ -1230,6 +1230,9 @@ int zynq_nand_init(struct nand_chip *nand_chip) goto fail; } + if (nand_register(devnum)) + goto fail; + return 0; fail: nand_release(mtd); @@ -1237,3 +1240,13 @@ free: kfree(xnand); return err; } + +static struct nand_chip nand_chip[CONFIG_SYS_MAX_NAND_DEVICE]; + +void board_nand_init(void) +{ + struct nand_chip *nand = &nand_chip[0]; + + if (zynq_nand_init(nand, 0)) + puts("ZYNQ NAND init failed\n"); +} diff --git a/include/configs/petalinux-auto-board.h.template b/include/configs/petalinux-auto-board.h.template index 50d7c4b9d60..9d4dc034aaf 100644 --- a/include/configs/petalinux-auto-board.h.template +++ b/include/configs/petalinux-auto-board.h.template @@ -260,11 +260,10 @@ #define XILINX_FLASH_SIZE XILINX_PS7_NOR_FLASH_SIZE #endif #if defined(XILINX_PS7_NAND_BASEADDR) - #define XILINX_NAND_FLASH_BASEDDR XILINX_PS7_NAND_FLASH_BASEADDR + #define XILINX_NAND_FLASH_BASEDDR #define CONFIG_CMD_NAND #define CONFIG_CMD_NAND_LOCK_UNLOCK #define CONFIG_SYS_MAX_NAND_DEVICE 1 - #define CONFIG_SYS_NAND_BASE XPSS_NAND_BASEADDR #define CONFIG_MTD_DEVICE #define CONFIG_SYS_NAND_ONFI_DETECTION #endif @@ -273,7 +272,7 @@ #define XILINX_FLASH_START XILINX_PS7_NOR_FLASH_BASEADDR #define XILINX_FLASH_SIZE XILINX_PS7_NOR_FLASH_SIZE #elif defined(ZYNQ_BOOT_NAND) && defined(XILINX_PS7_NAND_FLASH_BASEADDR) - #define XILINX_NAND_FLASH_BASEDDR XILINX_PS7_NAND_FLASH_BASEADDR + #define XILINX_NAND_FLASH_BASEDDR #elif defined(ZYNQ_BOOT_OTHER) #define RAMENV #else @@ -347,13 +346,11 @@ #elif defined(XILINX_NAND_FLASH_BASEDDR) /* NAND Flash */ #define CONFIG_NAND_FLASH 1 #define CONFIG_NAND_ZYNQ - #define XILINX_NAND_FLASH_BASEDDR XILINX_PS7_NAND_FLASH_BASEADDR + #define CONFIG_SYS_NAND_SELF_INIT #define CONFIG_CMD_NAND #define CONFIG_CMD_NAND_LOCK_UNLOCK #define CONFIG_SYS_MAX_NAND_DEVICE 1 - #define CONFIG_SYS_NAND_BASE XILINX_NAND_FLASH_BASEDDR - #define XPSS_NAND_BASEADDR XILINX_NAND_FLASH_BASEDDR - #define XPSS_CRTL_PARPORT_BASEADDR XILINX_PS7_SMC_BASEADDR + #define CONFIG_SYS_NAND_BASE ZYNQ_NAND_BASEADDR #define CONFIG_SYS_NO_FLASH 1 #define CONFIG_MTD_DEVICE diff --git a/include/configs/zynq_common.h b/include/configs/zynq_common.h index 494c8e3f8e3..4e87cbe9620 100644 --- a/include/configs/zynq_common.h +++ b/include/configs/zynq_common.h @@ -148,7 +148,7 @@ # define CONFIG_CMD_NAND # define CONFIG_CMD_NAND_LOCK_UNLOCK # define CONFIG_SYS_MAX_NAND_DEVICE 1 -# define CONFIG_SYS_NAND_BASE XPSS_NAND_BASEADDR +# define CONFIG_SYS_NAND_SELF_INIT # define CONFIG_SYS_NAND_ONFI_DETECTION # define CONFIG_MTD_DEVICE #endif @@ -282,8 +282,4 @@ #define CONFIG_CMD_BOOTZ #undef CONFIG_BOOTM_NETBSD -/* FIXME this should be removed pretty soon */ -#define XPSS_NAND_BASEADDR 0xE1000000 -#define XPSS_CRTL_PARPORT_BASEADDR 0xE000E000 - #endif /* __CONFIG_ZYNQ_COMMON_H */ -- 2.47.3