[U-Boot-Users] [PATCH 6/7] NAND: add NAND driver for s3c64xx
Wolfgang Denk
wd at denx.de
Thu Jul 31 16:24:30 CEST 2008
In message <Pine.LNX.4.64.0807311246100.4832 at axis700.grange> you wrote:
> Ported from u-boot-1.1.6 driver by Samsung.
>
> Signed-off-by: Guennadi Liakhovetski <lg at denx.de>
...
> --- /dev/null
> +++ b/drivers/mtd/nand/s3c64xx.c
> @@ -0,0 +1,315 @@
> +/*
> + * (C) Copyright 2006 DENX Software Engineering
Please add your name here.
> +/*
> + * Function to print out oob buffer for debugging
> + * Written by jsgood
Then jsgood should be mentioned in the (C) lines?
> + case 1: /* 1 bit error (Correctable)
> + (nfestat0 >> 7) & 0x7ff :error byte number
> + (nfestat0 >> 4) & 0x7 :error bit number */
> + printf("S3C NAND: 1 bit error detected at byte %ld. Correcting from "
> + "0x%02x ", (nfestat0 >> 7) & 0x7ff, dat[(nfestat0 >> 7) & 0x7ff]);
> + dat[(nfestat0 >> 7) & 0x7ff] ^= (1 << ((nfestat0 >> 4) & 0x7));
> + printf("to 0x%02x...OK\n", dat[(nfestat0 >> 7) & 0x7ff]);
I guess there should be a way to write this code so it is actually
readable? This is U-Boot, not the IOCCC (yes, there *is* some
difference, still).
> +int board_nand_init(struct nand_chip *nand)
> +{
> + NFCONT_REG = (NFCONT_REG & ~NFCONT_WP) | NFCONT_ENABLE | 0x6;
> +
> + nand->IO_ADDR_R = (void __iomem *)NFDATA;
> + nand->IO_ADDR_W = (void __iomem *)NFDATA;
> + nand->hwcontrol = s3c_nand_hwcontrol;
> + nand->dev_ready = s3c_nand_device_ready;
> + nand->select_chip = s3c_nand_select_chip;
> + nand->options = 0;
> +#ifdef CONFIG_NAND_SPL
> + nand->read_byte = nand_read_byte;
> + nand->write_byte = nand_write_byte;
> + nand->read_buf = nand_read_buf;
> +#endif
> +
> + do {
> + struct mtd_info m;
> + int cellinfo;
> +
> + m.priv = nand;
> +
> + s3c_nand_select_chip(&m, 0);
> + s3c_nand_hwcontrol(&m, NAND_CTL_SETCLE);
> + writeb(NAND_CMD_READID, nand->IO_ADDR_W);
> + s3c_nand_hwcontrol(&m, NAND_CTL_CLRCLE);
> + s3c_nand_device_ready(&m);
> + cellinfo = readb(nand->IO_ADDR_R);
> + cellinfo += readb(nand->IO_ADDR_R);
> + cellinfo += readb(nand->IO_ADDR_R);
> + s3c_nand_select_chip(&m, -1);
> + nand->eccmode = cellinfo;
> + } while (0);
Please get rid of the do...while here - or does it serve any purpose?
> + /* A shot in the dark, I don't know how to use this smart ECC-mode
> + * selection with the current driver */
Incorrect multiline comment style.
Please check other files for that, too.
Best regards,
Wolfgang Denk
--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
Once upon a time, "PC" meant "personal computer". Now it seems to
only mean "Prisoner of Bill". Alas! All my PCs run Unix, and those
include Intel, Sparc, and other processors.
-- Tom "Bring back the non-PC meaning of `PC'" Christiansen
More information about the U-Boot
mailing list