• Jacob Keller's avatar
    devlink: introduce flash update overwrite mask · 5d5b4128
    Jacob Keller authored
    Sections of device flash may contain settings or device identifying
    information. When performing a flash update, it is generally expected
    that these settings and identifiers are not overwritten.
    
    However, it may sometimes be useful to allow overwriting these fields
    when performing a flash update. Some examples include, 1) customizing
    the initial device config on first programming, such as overwriting
    default device identifying information, or 2) reverting a device
    configuration to known good state provided in the new firmware image, or
    3) in case it is suspected that current firmware logic for managing the
    preservation of fields during an update is broken.
    
    Although some devices are able to completely separate these types of
    settings and fields into separate components, this is not true for all
    hardware.
    
    To support controlling this behavior, a new
    DEVLINK_ATTR_FLASH_UPDATE_OVERWRITE_MASK is defined. This is an
    nla_bitfield32 which will define what subset of fields in a component
    should be overwritten during an update.
    
    If no bits are specified, or of the overwrite mask is not provided, then
    an update should not overwrite anything, and should maintain the
    settings and identifiers as they are in the previous image.
    
    If the overwrite mask has the DEVLINK_FLASH_OVERWRITE_SETTINGS bit set,
    then the device should be configured to overwrite any of the settings in
    the requested component with settings found in the provided image.
    
    Similarly, if the DEVLINK_FLASH_OVERWRITE_IDENTIFIERS bit is set, the
    device should be configured to overwrite any device identifiers in the
    requested component with the identifiers from the image.
    
    Multiple overwrite modes may be combined to indicate that a combination
    of the set of fields that should be overwritten.
    
    Drivers which support the new overwrite mask must set the
    DEVLINK_SUPPORT_FLASH_UPDATE_OVERWRITE_MASK in the
    supported_flash_update_params field of their devlink_ops.
    Signed-off-by: default avatarJacob Keller <jacob.e.keller@intel.com>
    Reviewed-by: default avatarJakub Kicinski <kuba@kernel.org>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    5d5b4128
devlink.c 249 KB