mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-26 06:30:39 +00:00
mtd: nand: s3c: Unify the register definition and naming
Merge struct s3c2410_nand and struct s3c2440_nand into one unified struct s3c24x0_nand. While at it, fix up and rename the functions to retrieve the NAND base address and fix up the s3c NAND driver to reflect this change. Signed-off-by: Marek Vasut <marex@denx.de> Cc: Kyungmin Park <kyungmin.park@samsung.com> Cc: Lukasz Majewski <l.majewski@samsung.com> Cc: Minkyu Kang <mk7.kang@samsung.com> Cc: Scott Wood <scottwood@freescale.com> Cc: Vladimir Zapolskiy <vz@mleia.com>
This commit is contained in:
parent
2260457341
commit
b19157bf3f
4 changed files with 38 additions and 39 deletions
|
@ -83,9 +83,9 @@ static inline struct s3c24x0_lcd *s3c24x0_get_base_lcd(void)
|
|||
return (struct s3c24x0_lcd *)S3C24X0_LCD_BASE;
|
||||
}
|
||||
|
||||
static inline struct s3c2410_nand *s3c2410_get_base_nand(void)
|
||||
static inline struct s3c24x0_nand *s3c24x0_get_base_nand(void)
|
||||
{
|
||||
return (struct s3c2410_nand *)S3C2410_NAND_BASE;
|
||||
return (struct s3c24x0_nand *)S3C2410_NAND_BASE;
|
||||
}
|
||||
|
||||
static inline struct s3c24x0_uart
|
||||
|
|
|
@ -81,9 +81,9 @@ static inline struct s3c24x0_lcd *s3c24x0_get_base_lcd(void)
|
|||
return (struct s3c24x0_lcd *)S3C24X0_LCD_BASE;
|
||||
}
|
||||
|
||||
static inline struct s3c2440_nand *s3c2440_get_base_nand(void)
|
||||
static inline struct s3c24x0_nand *s3c24x0_get_base_nand(void)
|
||||
{
|
||||
return (struct s3c2440_nand *)S3C2440_NAND_BASE;
|
||||
return (struct s3c24x0_nand *)S3C2440_NAND_BASE;
|
||||
}
|
||||
|
||||
static inline struct s3c24x0_uart
|
||||
|
|
|
@ -135,34 +135,33 @@ struct s3c24x0_lcd {
|
|||
};
|
||||
|
||||
|
||||
#ifdef CONFIG_S3C2410
|
||||
/* NAND FLASH (see S3C2410 manual chapter 6) */
|
||||
struct s3c2410_nand {
|
||||
u32 nfconf;
|
||||
u32 nfcmd;
|
||||
u32 nfaddr;
|
||||
u32 nfdata;
|
||||
u32 nfstat;
|
||||
u32 nfecc;
|
||||
};
|
||||
#endif
|
||||
#ifdef CONFIG_S3C2440
|
||||
/* NAND FLASH (see S3C2440 manual chapter 6) */
|
||||
struct s3c2440_nand {
|
||||
/* NAND FLASH (see manual chapter 6) */
|
||||
struct s3c24x0_nand {
|
||||
u32 nfconf;
|
||||
#ifndef CONFIG_S3C2410
|
||||
u32 nfcont;
|
||||
#endif
|
||||
u32 nfcmd;
|
||||
u32 nfaddr;
|
||||
u32 nfdata;
|
||||
#ifndef CONFIG_S3C2410
|
||||
u32 nfeccd0;
|
||||
u32 nfeccd1;
|
||||
u32 nfeccd;
|
||||
#endif
|
||||
u32 nfstat;
|
||||
#ifdef CONFIG_S3C2410
|
||||
u32 nfecc;
|
||||
#else
|
||||
u32 nfstat0;
|
||||
u32 nfstat1;
|
||||
};
|
||||
u32 nfmecc0;
|
||||
u32 nfmecc1;
|
||||
u32 nfsecc;
|
||||
u32 nfsblk;
|
||||
u32 nfeblk;
|
||||
#endif
|
||||
|
||||
};
|
||||
|
||||
/* UART (see manual chapter 11) */
|
||||
struct s3c24x0_uart {
|
||||
|
|
|
@ -38,10 +38,10 @@ static void nand_read_buf(struct mtd_info *mtd, u_char *buf, int len)
|
|||
}
|
||||
#endif
|
||||
|
||||
static void s3c2410_hwcontrol(struct mtd_info *mtd, int cmd, unsigned int ctrl)
|
||||
static void s3c24x0_hwcontrol(struct mtd_info *mtd, int cmd, unsigned int ctrl)
|
||||
{
|
||||
struct nand_chip *chip = mtd->priv;
|
||||
struct s3c2410_nand *nand = s3c2410_get_base_nand();
|
||||
struct s3c24x0_nand *nand = s3c24x0_get_base_nand();
|
||||
|
||||
debug("hwcontrol(): 0x%02x 0x%02x\n", cmd, ctrl);
|
||||
|
||||
|
@ -67,35 +67,35 @@ static void s3c2410_hwcontrol(struct mtd_info *mtd, int cmd, unsigned int ctrl)
|
|||
writeb(cmd, chip->IO_ADDR_W);
|
||||
}
|
||||
|
||||
static int s3c2410_dev_ready(struct mtd_info *mtd)
|
||||
static int s3c24x0_dev_ready(struct mtd_info *mtd)
|
||||
{
|
||||
struct s3c2410_nand *nand = s3c2410_get_base_nand();
|
||||
struct s3c24x0_nand *nand = s3c24x0_get_base_nand();
|
||||
debug("dev_ready\n");
|
||||
return readl(&nand->nfstat) & 0x01;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_S3C2410_NAND_HWECC
|
||||
void s3c2410_nand_enable_hwecc(struct mtd_info *mtd, int mode)
|
||||
void s3c24x0_nand_enable_hwecc(struct mtd_info *mtd, int mode)
|
||||
{
|
||||
struct s3c2410_nand *nand = s3c2410_get_base_nand();
|
||||
debug("s3c2410_nand_enable_hwecc(%p, %d)\n", mtd, mode);
|
||||
struct s3c24x0_nand *nand = s3c24x0_get_base_nand();
|
||||
debug("s3c24x0_nand_enable_hwecc(%p, %d)\n", mtd, mode);
|
||||
writel(readl(&nand->nfconf) | S3C2410_NFCONF_INITECC, &nand->nfconf);
|
||||
}
|
||||
|
||||
static int s3c2410_nand_calculate_ecc(struct mtd_info *mtd, const u_char *dat,
|
||||
static int s3c24x0_nand_calculate_ecc(struct mtd_info *mtd, const u_char *dat,
|
||||
u_char *ecc_code)
|
||||
{
|
||||
struct s3c2410_nand *nand = s3c2410_get_base_nand();
|
||||
struct s3c24x0_nand *nand = s3c24x0_get_base_nand();
|
||||
ecc_code[0] = readb(&nand->nfecc);
|
||||
ecc_code[1] = readb(&nand->nfecc + 1);
|
||||
ecc_code[2] = readb(&nand->nfecc + 2);
|
||||
debug("s3c2410_nand_calculate_hwecc(%p,): 0x%02x 0x%02x 0x%02x\n",
|
||||
mtd , ecc_code[0], ecc_code[1], ecc_code[2]);
|
||||
debug("s3c24x0_nand_calculate_hwecc(%p,): 0x%02x 0x%02x 0x%02x\n",
|
||||
mtd , ecc_code[0], ecc_code[1], ecc_code[2]);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int s3c2410_nand_correct_data(struct mtd_info *mtd, u_char *dat,
|
||||
static int s3c24x0_nand_correct_data(struct mtd_info *mtd, u_char *dat,
|
||||
u_char *read_ecc, u_char *calc_ecc)
|
||||
{
|
||||
if (read_ecc[0] == calc_ecc[0] &&
|
||||
|
@ -103,7 +103,7 @@ static int s3c2410_nand_correct_data(struct mtd_info *mtd, u_char *dat,
|
|||
read_ecc[2] == calc_ecc[2])
|
||||
return 0;
|
||||
|
||||
printf("s3c2410_nand_correct_data: not implemented\n");
|
||||
printf("s3c24x0_nand_correct_data: not implemented\n");
|
||||
return -1;
|
||||
}
|
||||
#endif
|
||||
|
@ -113,7 +113,7 @@ 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 s3c2410_nand *nand_reg = s3c2410_get_base_nand();
|
||||
struct s3c24x0_nand *nand_reg = s3c24x0_get_base_nand();
|
||||
|
||||
debug("board_nand_init()\n");
|
||||
|
||||
|
@ -149,14 +149,14 @@ int board_nand_init(struct nand_chip *nand)
|
|||
#endif
|
||||
|
||||
/* hwcontrol always must be implemented */
|
||||
nand->cmd_ctrl = s3c2410_hwcontrol;
|
||||
nand->cmd_ctrl = s3c24x0_hwcontrol;
|
||||
|
||||
nand->dev_ready = s3c2410_dev_ready;
|
||||
nand->dev_ready = s3c24x0_dev_ready;
|
||||
|
||||
#ifdef CONFIG_S3C2410_NAND_HWECC
|
||||
nand->ecc.hwctl = s3c2410_nand_enable_hwecc;
|
||||
nand->ecc.calculate = s3c2410_nand_calculate_ecc;
|
||||
nand->ecc.correct = s3c2410_nand_correct_data;
|
||||
nand->ecc.hwctl = s3c24x0_nand_enable_hwecc;
|
||||
nand->ecc.calculate = s3c24x0_nand_calculate_ecc;
|
||||
nand->ecc.correct = s3c24x0_nand_correct_data;
|
||||
nand->ecc.mode = NAND_ECC_HW;
|
||||
nand->ecc.size = CONFIG_SYS_NAND_ECCSIZE;
|
||||
nand->ecc.bytes = CONFIG_SYS_NAND_ECCBYTES;
|
||||
|
|
Loading…
Reference in a new issue