440_nand_correct_data: not implemented\n"); return -1; } #endif int board_nand_init(struct nand_chip *nand) { u_int32_t cfg; u_int8_t tacls, twrph0, twrph1; struct s3c24x0_clock_power *clk_power = s3c24x0_get_base_clock_power(); struct s3c2440_nand *nand_reg = s3c2440_get_base_nand(); debugX(1, "board_nand_init()\n"); writel(readl(&clk_power->clkcon) | (1 << 4), &clk_power->clkcon); /* initialize hardware */ #if defined(CONFIG_S3C24XX_CUSTOM_NAND_TIMING) tacls = CONFIG_S3C24XX_TACLS; twrph0 = CONFIG_S3C24XX_TWRPH0; twrph1 = CONFIG_S3C24XX_TWRPH1; #else tacls = 4; twrph0 = 8; twrph1 = 8; #endif cfg = S3C2440_NFCONF_TACLS(tacls - 1); cfg |= S3C2440_NFCONF_TWRPH0(twrph0 - 1); cfg |= S3C2440_NFCONF_TWRPH1(twrph1 - 1); writel(cfg, &nand_reg->nfconf); cfg = S3C2440_NFCONT_EN; cfg |= S3C2440_NFCONT_nFCE; cfg |= S3C2440_NFCONT_INITECC; writel(cfg, &nand_reg->nfcont); /* initialize nand_chip data structure */ nand->IO_ADDR_R = (void *)&nand_reg->nfdata; nand->IO_ADDR_W = (void *)&nand_reg->nfdata; nand->select_chip = NULL; /* read_buf and write_buf are default */ /* read_byte and write_byte are default */ #ifdef CONFIG_NAND_SPL nand->read_buf = nand_read_buf; #endif /* hwcontrol always must be implemented */ nand->cmd_ctrl = s3c2440_hwcontrol; nand->dev_ready = s3c2440_dev_ready; #ifdef CONFIG_S3C2440_NAND_HWECC nand->ecc.hwctl = s3c2440_nand_enable_hwecc; nand->ecc.calculate = s3c2440_nand_calculate_ecc; nand->ecc.correct = s3c2440_nand_correct_data; nand->ecc.mode = NAND_ECC_HW; nand->ecc.size = CONFIG_SYS_NAND_ECCSIZE; nand->ecc.bytes = CONFIG_SYS_NAND_ECCBYTES; #else nand->ecc.mode = NAND_ECC_SOFT; #endif #ifdef CONFIG_S3C2440_NAND_BBT nand->options = NAND_USE_FLASH_BBT; #else nand->options = 0; #endif debugX(1, "end of nand_init\n"); return 0; } 再在include/configs/mini2440.h中添加 #define CONFIG_NAND_S3C2440 #define CONFIG_SYS_MAX_NAND_DEVICE 1 #define CONFIG_SYS_NAND_BASE 0x4E000000 #define CONFIG_MTD_DEVICE #define CONFIG_CMD_NAND 编译好后使用supervivi 的d命令下载到sdram的0x33f80000地指出执行 U-Boot 2011.03 (Nov 29 2011 - 09:21:34) DRAM: 64 MiB Flash: 2 MiB NAND: 256 MiB *** Warning - bad CRC, using default environment In: serial Out: serial Err: serial Net: dm9000 mini2440 # nand info Device 0: nand0, sector size 128 KiB mini2440 # mini2440已经能够很好的支持nand flash
|