• Michael Walle's avatar
    mtd: spi-nor: add OTP support · 069089ac
    Michael Walle authored
    SPI flashes sometimes have a special OTP area, which can (and is) used to
    store immutable properties like board serial number or vendor assigned
    network hardware addresses.
    
    The MTD subsystem already supports accessing such areas and some (non
    SPI NOR) flashes already implement support for it. It differentiates
    between user and factory areas. User areas can be written by the user and
    factory ones are pre-programmed and locked down by the vendor, usually
    containing an "electrical serial number". This patch will only add support
    for the user areas.
    
    Lay the foundation and implement the MTD callbacks for the SPI NOR and add
    necessary parameters to the flash_info structure. If a flash supports OTP
    it can be added by the convenience macro OTP_INFO(). Sometimes there are
    individual regions, which might have individual offsets. Therefore, it is
    possible to specify the starting address of the first regions as well as
    the distance between two regions (e.g. Winbond devices uses this method).
    
    Additionally, the regions might be locked down. Once locked, no further
    write access is possible.
    
    For SPI NOR flashes the OTP area is accessed like the normal memory, e.g.
    by offset addressing; except that you either have to use special read/write
    commands (Winbond) or you have to enter (and exit) a specific OTP mode
    (Macronix, Micron).
    
    Thus we introduce four operations to which the MTD callbacks will be
    mapped: .read(), .write(), .lock() and .is_locked(). The read and the write
    ops will be given an address offset to operate on while the locking ops use
    regions because locking always affects a whole region. It is up to the
    flash driver to implement these ops.
    Signed-off-by: default avatarMichael Walle <michael@walle.cc>
    [ta: use div64_u64(), IS_ALIGNED, params->otp.org. unsigned int region,
    drop comment, add rlen local variable in spi_nor_mtd_otp_lock()]
    Signed-off-by: default avatarTudor Ambarus <tudor.ambarus@microchip.com>
    Link: https://lore.kernel.org/r/20210321235140.8308-2-michael@walle.cc
    069089ac
core.h 17.9 KB