• Tudor Ambarus's avatar
    mtd: spi-nor: core: Track flash's internal address mode · d7931a21
    Tudor Ambarus authored
    We need to track the flash's internal address mode as there are flashes
    that can operate with 4B opcodes but unfortunately do not have a 4B opcode
    correspondent for all the 3B opcodes. Such an example is the Infineon
    Semper chips which provide 4B opcodes for read/program/erase but do not
    provide 4B opcodes for Read/Write Any Register. These registers are
    indexed by address and require the internal address mode of the flash
    before Read/Write Any Register opcodes are issued.
    4B opcodes are preferred over changing the flash's address mode to 4byte,
    as set_4byte_addr_mode could be done in a non-volatile way and could break
    the boot sequence. Thus we need to track the flash's internal address mode
    so that we can use 4B opcodes together with opcodes that don't have a 4B
    opcode correspondent. Track flash's internal address mode.
    
    addr_mode_nbytes is discovered when parsing BFPT. For the
    BFPT_DWORD1_ADDRESS_BYTES_3_OR_4 case, one could introduce a method that
    queries the flash's internal address mode at run-time (works for Winbond).
    If a run-time querying can not be accomplished or if SFDP is not defined
    at all, but the address mode is volatile and resets to a default known
    value at boot, one can change the default addr_mode_nbytes value of 3 by
    introducing a flash_info flag. If the address mode can not be queried,
    discovered and it is configured via a non-volatile register, we may
    introduce a dt property, but it will harm the generic approach of the
    jedec,spi-nor compatible. All this complexity is not needed now, so let it
    for future development.
    Signed-off-by: default avatarTudor Ambarus <tudor.ambarus@microchip.com>
    Reviewed-by: default avatarTakahiro Kuwano <Takahiro.Kuwano@infineon.com>
    Reviewed-by: default avatarMichael Walle <michael@walle.cc>
    Link: https://lore.kernel.org/r/20220725092505.446315-6-tudor.ambarus@microchip.com
    d7931a21
core.h 25 KB