Message ID | 20101022154030.11097.40767.stgit@dev.siriade.com |
---|---|
State | Changes Requested, archived |
Headers | show |
On Fri, Oct 22, 2010 at 11:40 PM, Guillaume LECERF <glecerf@gmail.com> wrote: > Add support for SST38VF640x chips in CFI mode. > > Signed-off-by: Guillaume LECERF <glecerf@gmail.com> > Signed-off-by: yidong zhang <zhangyd6@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. > >
2010/10/25 yidong zhang <zhangyd6@gmail.com>: > The SST38VF640x chips have no Extended Query table. I think we should > move them to the > cfi_nopri_fixup_table. According to the datasheet [1], it has. [1] http://www.sst.com/dotAsset/39749.pdf, table 13
On Mon, Oct 25, 2010 at 4:09 PM, Guillaume LECERF <glecerf@gmail.com> wrote: > 2010/10/25 yidong zhang <zhangyd6@gmail.com>: >> The SST38VF640x chips have no Extended Query table. I think we should >> move them to the >> cfi_nopri_fixup_table. > > According to the datasheet [1], it has. > > [1] http://www.sst.com/dotAsset/39749.pdf, table 13 Oh, sorry, my mistake. I tested the patch right now. But it didn't work, please the logs below. Amd/Fujitsu Extended Query Table at 0x0040 Unknown Amd/Fujitsu Extended Query version . (0xff/0xff). > -- > Guillaume LECERF > GeeXboX developer - www.geexbox.org >
2010/10/25 yidong zhang <zhangyd6@gmail.com>: > Oh, sorry, my mistake. I tested the patch right now. But it didn't > work, please the logs below. > > Amd/Fujitsu Extended Query Table at 0x0040 > Unknown Amd/Fujitsu Extended Query version . (0xff/0xff). This chip does not have a valid Major/MinorVersion. Could you please try the attached patch ?
On Mon, Oct 25, 2010 at 5:17 PM, Guillaume LECERF <glecerf@gmail.com> wrote: > 2010/10/25 yidong zhang <zhangyd6@gmail.com>: >> Oh, sorry, my mistake. I tested the patch right now. But it didn't >> work, please the logs below. >> >> Amd/Fujitsu Extended Query Table at 0x0040 >> Unknown Amd/Fujitsu Extended Query version . (0xff/0xff). > > This chip does not have a valid Major/MinorVersion. > Could you please try the attached patch ? Passed my test. Using this patch, the driver can support the chips now. > > -- > Guillaume LECERF > GeeXboX developer - www.geexbox.org >
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