[flashrom] [PATCH/FULL/SVN] Support for 4-bytes addressing SPI flash chips 32MB+ (256Mb+)
Boris Baykov
dev at borisbaykov.com
Thu Jan 15 13:08:25 CET 2015
> Boris,
> Thank you for your effort! This is indeed a very useful feature that flashrom has been
> lacking for too long.
I wonder if this is helpful to may people. Thanks.
> - Use of a fishing-world word 'BAIT' many times throughout the code.
> Probably, 'BYTE' was intended. This typo is quite alarming for me.
4BAIT is not BYTE )))
It's just the short form of 4-Byte Addressing Instruction Table, a part of SFDP 1.6
> - In walk_eraseregions() variables percent_last and percent_current are
> initialized conditionally, which makes some compilers (e.g., mingw32msvc-gcc v4.2.1)
> complain about possible use of those variables uninitialized.
I used gcc Linux so I haven't checked it with mingw. I'm sorry for these warnings.
> - Happy New Year!
> I believe that the 'History of changes' in sfdp.c should contain dates
> from 2015, not from 2014. In other newly added places I guess it is also 2015, not 2014.
> ;)
O, yeah, it's funny :-) Should be 2015 of course.
> - Looks like currently one can define a chip with size over 16MB but without
> FEATURE_4BA_SUPPORT and get strange results. Maybe it would be better to imply
> 4BA support for any chips over 16MB and get rid of FEATURE_4BA_SUPPORT bit?
Good idea!
> - What is this 'eraser.type' field is for? I don't see any actual use for it.
> Looks like an index field to me if I understand JESD216B right.
> Wouldn't it be more correct to search for a proper eraser using block size
> rather than 'eraser type' ? Current implementation forces developers to
> think about those 'eraser types' each time they add a new 4BA chip.
> Am I overlooking anything here?
This field is used to change the required eraser from 4BA (or EREG) to
4BA_direct in sfdp_change_uniform_eraser_4ba_direct in sfdp.c
> + tmp32 = ((unsigned int)buf[(4 * 0) + 0]);
> + tmp32 |= ((unsigned int)buf[(4 * 0) + 1]) << 8;
> + tmp32 |= ((unsigned int)buf[(4 * 0) + 2]) << 16;
> + tmp32 |= ((unsigned int)buf[(4 * 0) + 3]) << 24;
> make my eyes bleed. Why not use a loop or at least a macro?
This code is just a copy-paste from sfdp.c to sfdp.c to make parsing of new
dwords same as all others. All previous dwords have same code. Macro is better.
> Also, I couldn't manage to make this patch work with MXIC MX25L25635F chip which
> supports all the 4BA modes (direct, EN4B, EAR). I tried various combinations,
> but it couldn't properly erase the chip anyway. Didn't work in SFDP mode as well
> (only SFDP 1.0 is supported by the chip). Hence, I couldn't check if it reads
> back properly what was written. I didn't do any debugging though to find out
> the reason.
Try to uncomment FBA_USE_EXT_ADDR_REG_BY_DEFAULT define in sfdp.c It may work after.
Surely it should be checked more deeply with the chip.
> Thanks again.
Thank you, Alexander
Boris Baykov
More information about the flashrom
mailing list