uniform flash using cmdset_0002
Hello,
I have an AM29LV641DH NOR flash in my machine that results in the following printks if DEBUG_CFI_FEATURES is defined in drivers/mtd/chips/cfi_cmdset_0002.c:
physmap-flash.0: Found 1 x16 devices at 0x0 in 16-bit bank
Amd/Fujitsu Extended Query Table at 0x0040
Silicon revision: 0
Address sensitive unlock: Required
Erase Suspend: Read/write
Block protection: 4 sectors per group
Temporary block unprotect: Supported
Block protect/unprotect scheme: 4
Number of simultaneous operations: 0
Burst mode: Not supported
Page mode: Not supported
Vpp Supply Minimum Program/Erase Voltage: 11.5 V
Vpp Supply Maximum Program/Erase Voltage: 12.5 V Top/Bottom Boot Block: Uniform, Top WP
physmap-flash.0: CFI does not contain boot bank location. Assuming top.
The last message comes from the following code in cfi_cmdset_0002() (drivers/mtd/chips/cfi_cmdset_0002.c):
bootloc = extp->TopBottom;
if ((bootloc != 2) && (bootloc != 3)) {
printk(KERN_WARNING "%s: CFI does not contain boot "
"bank location. Assuming top.\n", map->name);
bootloc = 2;
}For that chip extp->TopBottom is 5.
I wonder what is intended here. The only other usage of bootloc (which is a local variable for cfi_cmdset_0002()) is
if (bootloc == 3 && something_else) {
...So if ((bootloc != 2) && (bootloc != 3)) setting bootloc = 2 doesn't change anything!?
If I didn't oversee something I suggest to delete the if containing the warning.
Best regards
Uwe
Signature · 3 lines
Uwe Kleine-König, Software Engineer Digi International GmbH Branch Breisach, Küferstrasse 8, 79206 Breisach, Germany Tax: 315/5781/0242 / VAT: DE153662976 / Reg. Amtsgericht Dortmund HRB 13962
Uwe Kleine-König <Uwe.Kleine-Koenig <at> digi.com> writes:
[snip]
Quoted 17 lines
physmap-flash.0: CFI does not contain boot bank location. Assuming top.
The last message comes from the following code in
cfi_cmdset_0002()(drivers/mtd/chips/cfi_cmdset_0002.c):bootloc = extp->TopBottom; if ((bootloc != 2) && (bootloc != 3)) { printk(KERN_WARNING "%s: CFI does not contain boot " "bank location. Assuming top.\n", map->name); bootloc = 2; }For that chip
extp->TopBottomis 5.I wonder what is intended here. The only other usage of bootloc (which is a local variable for
cfi_cmdset_0002()) is
Quoted 9 lines
if (bootloc == 3 && something_else) { ...So if ((bootloc != 2) && (bootloc != 3)) setting bootloc = 2 doesn't change anything!?
If I didn't oversee something I suggest to delete the if containing the warning.
Full ACK.
Nice catch, Uwe.
The worst thing is that it says "Assuming top" but sets bootloc to bottom (2) :(
I figure that:
- this code was intended for early chips with an AMD/Fujitsu V1.0 CFI PRI which does not contain TopBottom (such AMD chips are now handled in fixup_amd_bootblock()),
- an earlier version of this code must have set bootloc to top (3) which would have had some effect.
However the effect would possibly be undesirable in cases such as yours :(
I see you sent a patch to linux-mtd but it seems to have been completely ignored :(
Do you know where I can find your patch in a form where I can reply to it? If so I shall add my ACK (FWIW) and ping it.
Cheers,
Chris