On Mon, 14 Feb 2011 16:48:01 +0100 Florian Fainelli <flor...@openwrt.org> wrote:
> From: Florian Fainelli <flor...@openwrt.org> > > This patch adds support for reading an ONFI page parameter from a NAND > device supporting it. If this is the case, struct nand_chip onfi_version > member contains the supported ONFI version, 0 otherwise. > > This allows NAND drivers past nand_scan_ident to set the best timings for the > NAND chip. > > Signed-off-by: Florian Fainelli <flor...@openwrt.org> > --- > Patch against your 'next' branch The 'next' branch is old, since I haven't pushed anything to it yet this cycle. Base it on Wolfgang's 'next'. > Changes since v1: > - ifdef out ONFI detection code around CONFIG_SYS_NAND_ONFI_DETECTION > - removed bogus comment > - fixed busw variable usage > - move non-ONFI detection code to its own function > - fixed stylistic issues spotted by Scott > > Changes since v2: > - reduce lenght of some lines down to 80 columns > - change chip->options consistently wrt to ONFI detected or not > - removed extra spaces > > diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c > index 5239c1f..7becb99 100644 > --- a/drivers/mtd/nand/nand_base.c > +++ b/drivers/mtd/nand/nand_base.c > @@ -2409,15 +2409,137 @@ static void nand_set_defaults(struct nand_chip > *chip, int busw) > chip->controller = &chip->hwcontrol; > } > > +#ifdef CONFIG_SYS_NAND_ONFI_DETECTION > +static u16 onfi_crc16(u16 crc, u8 const *p, size_t len) > +{ > + int i; > + > + while (len--) { > + crc ^= *p++ << 8; > + for (i = 0; i < 8; i++) > + crc = (crc << 1) ^ ((crc & 0x8000) ? 0x8005 : 0); > + } > + > + return crc; > +} Is this different from what's in lib/crc16.c (other than appearing to have made a different speed/size tradeoff)? > +#define ONFI_CRC_BASE 0x4F4E Is this ONFI-specific, or standard for crc16? > + > +/* > + * Check if the NAND chip is ONFI compliant, returns 1 if it is, 0 otherwise > + */ > +static int nand_flash_detect_onfi(struct mtd_info *mtd, > + struct nand_chip *chip, > + int *busw) > +{ [snip] > + chip->options &= ~NAND_CHIPOPTIONS_MSK; > + chip->options |= NAND_NO_READRDY & NAND_CHIPOPTIONS_MSK; Won't this get overwritten by this later? > + /* Get chip options, preserve non chip based options */ > + chip->options &= ~NAND_CHIPOPTIONS_MSK; > + chip->options |= type->options & NAND_CHIPOPTIONS_MSK; -Scott _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot