Patchwork [U-Boot,1/1] cfi fix for Spansion and MB->MiB

login
register
mail settings
Submitter Aaron Williams
Date Jan. 26, 2011, 1:56 a.m.
Message ID <201101251756.30586.Aaron.Williams@caviumnetworks.com>
Download mbox | patch
Permalink /patch/80425/
State Changes Requested
Headers show

Comments

Aaron Williams - Jan. 26, 2011, 1:56 a.m.
I ran into a problem with the Spansion S29GL064N flash chip in that it returns 
a manufacturer ID of 0 and it also requires the AMD geometry fixup.

Additionally, I modified a few print statements to use KiB/MiB instead of 
kB/MB.

-Aaron Williams
Andrew Dyer - Jan. 26, 2011, 5:09 a.m.
On Tue, Jan 25, 2011 at 19:56, Aaron Williams
<Aaron.Williams@caviumnetworks.com> wrote:
> I ran into a problem with the Spansion S29GL064N flash chip in that it returns
> a manufacturer ID of 0 and it also requires the AMD geometry fixup.
>
> Additionally, I modified a few print statements to use KiB/MiB instead of
> kB/MB.
>
> -Aaron Williams
>
> diff --git a/drivers/mtd/cfi_flash.c b/drivers/mtd/cfi_flash.c
> index dd394a8..105eb3f 100644
> --- a/drivers/mtd/cfi_flash.c
> +++ b/drivers/mtd/cfi_flash.c
> @@ -1162,10 +1162,10 @@ void flash_print_info (flash_info_t * info)
>                info->name,
>                (info->portwidth << 3), (info->chipwidth << 3));
>        if (info->size < 1024*1024)
> -               printf ("  Size: %ld kB in %d Sectors\n",
> +               printf ("  Size: %ld KiB in %d Sectors\n",
>                        info->size >> 10, info->sector_count);
>        else
> -               printf ("  Size: %ld MB in %d Sectors\n",
> +               printf ("  Size: %ld MiB in %d Sectors\n",
>                        info->size >> 20, info->sector_count);
>        printf ("  ");
>        switch (info->vendor) {
> @@ -1924,6 +1924,7 @@ ulong flash_get_size (phys_addr_t base, int banknum)
>
>                /* Do manufacturer-specific fixups */
>                switch (info->manufacturer_id) {
> +               case 0x0000:
>                case 0x0001:
>                        flash_fixup_amd(info, &qry);
>                        break;

I think something is wrong here.  You shouldn't get a manufacturer ID
of 0000 from a Spansion part.  cmdset_amd_read_jedec_ids() should be
where it's coming from, reading the datasheet is pretty clear that
these parts return an 0001 or 01 depending on the BYTE# pin.  I've
used other parts in the series GL128N, GL256N, GL256P that have the
same command set and not seen this.
Wolfgang Denk - Jan. 26, 2011, 7:45 a.m.
Dear Aaron Williams,

In message <201101251756.30586.Aaron.Williams@caviumnetworks.com> you wrote:
> I ran into a problem with the Spansion S29GL064N flash chip in that it returns 
> a manufacturer ID of 0 and it also requires the AMD geometry fixup.
> 
> Additionally, I modified a few print statements to use KiB/MiB instead of 
> kB/MB.

Please split into two separate, independent patches.

And don't forget to add your signed-off-by line.

Best regards,

Wolfgang Denk

Patch

diff --git a/drivers/mtd/cfi_flash.c b/drivers/mtd/cfi_flash.c
index dd394a8..105eb3f 100644
--- a/drivers/mtd/cfi_flash.c
+++ b/drivers/mtd/cfi_flash.c
@@ -1162,10 +1162,10 @@  void flash_print_info (flash_info_t * info)
                info->name,
                (info->portwidth << 3), (info->chipwidth << 3));
        if (info->size < 1024*1024)
-               printf ("  Size: %ld kB in %d Sectors\n",
+               printf ("  Size: %ld KiB in %d Sectors\n",
                        info->size >> 10, info->sector_count);
        else
-               printf ("  Size: %ld MB in %d Sectors\n",
+               printf ("  Size: %ld MiB in %d Sectors\n",
                        info->size >> 20, info->sector_count);
        printf ("  ");
        switch (info->vendor) {
@@ -1924,6 +1924,7 @@  ulong flash_get_size (phys_addr_t base, int banknum)
 
                /* Do manufacturer-specific fixups */
                switch (info->manufacturer_id) {
+               case 0x0000:
                case 0x0001:
                        flash_fixup_amd(info, &qry);
                        break;