[U-Boot] [PATCH v3] NAND: add support for reading ONFI page table
Scott Wood
scottwood at freescale.com
Tue Feb 15 00:46:07 CET 2011
On Mon, 14 Feb 2011 16:48:01 +0100
Florian Fainelli <florian at openwrt.org> wrote:
> From: Florian Fainelli <florian at 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 <florian at 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
More information about the U-Boot
mailing list