[PATCH 4/4] mtd: cfi_cmdset_0002: add CFI detection for SST 38VF640x chips

yidong zhang zhangyd6 at gmail.com
Sun Oct 24 21:18:16 EDT 2010


On Fri, Oct 22, 2010 at 11:40 PM, Guillaume LECERF <glecerf at gmail.com> wrote:
> Add support for SST38VF640x chips in CFI mode.
>
> Signed-off-by: Guillaume LECERF <glecerf at gmail.com>
> Signed-off-by: yidong zhang <zhangyd6 at gmail.com>
> ---
>  drivers/mtd/chips/cfi_cmdset_0002.c |   19 +++++++++++++++++++
>  1 files changed, 19 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/mtd/chips/cfi_cmdset_0002.c b/drivers/mtd/chips/cfi_cmdset_0002.c
> index a359967..0248253 100644
> --- a/drivers/mtd/chips/cfi_cmdset_0002.c
> +++ b/drivers/mtd/chips/cfi_cmdset_0002.c
> @@ -296,6 +296,21 @@ static void fixup_sst39vf_rev_b(struct mtd_info *mtd, void *param)
>        sector_erase_cmd = CMD(0x50);
>  }
>
> +static void fixup_sst38vf640x_sectorsize(struct mtd_info *mtd, void *param)
> +{
> +       struct map_info *map = mtd->priv;
> +       struct cfi_private *cfi = map->fldrv_priv;
> +
> +       fixup_sst39vf_rev_b(mtd, param);
> +
> +       /*
> +        * CFI reports 1024 sectors (0x03ff +1) of 64KBytes (0x0100 *256) where
> +        * it should report a size of 8KBytes (0x0020 *256).
> +        */
> +       cfi->cfiq->EraseRegionInfo[0] = 0x002003ff;
> +       pr_warning("%s: Bad 38VF640x CFI data, adjust sector size from 64 to 8KBytes\n", mtd->name);
> +}
> +
>  static void fixup_s29gl064n_sectors(struct mtd_info *mtd, void *param)
>  {
>        struct map_info *map = mtd->priv;
> @@ -347,6 +362,10 @@ static struct cfi_fixup cfi_fixup_table[] = {
>        { CFI_MFR_AMD, 0x1301, fixup_s29gl064n_sectors, NULL, },
>        { CFI_MFR_AMD, 0x1a00, fixup_s29gl032n_sectors, NULL, },
>        { CFI_MFR_AMD, 0x1a01, fixup_s29gl032n_sectors, NULL, },
> +       { CFI_MFR_SST, 0x536A, fixup_sst38vf640x_sectorsize, NULL, }, /* SST38VF6402 */
> +       { CFI_MFR_SST, 0x536B, fixup_sst38vf640x_sectorsize, NULL, }, /* SST38VF6401 */
> +       { CFI_MFR_SST, 0x536C, fixup_sst38vf640x_sectorsize, NULL, }, /* SST38VF6404 */
> +       { CFI_MFR_SST, 0x536D, fixup_sst38vf640x_sectorsize, NULL, }, /* SST38VF6403 */
>  #if !FORCE_WORD_WRITE
>        { CFI_MFR_ANY, CFI_ID_ANY, fixup_use_write_buffers, NULL, },
>  #endif
The SST38VF640x chips have no Extended Query table. I think we should
move them to the
 cfi_nopri_fixup_table.

>
>



More information about the linux-mtd mailing list