Add devlink flash update command. Advanced NICs have firmware stored in flash and often cryptographically secured. Updating that flash is handled by management firmware. Ethtool has a flash update command which served us well, however, it has two shortcomings: - it takes rtnl_lock unnecessarily - really flash update has nothing to do with networking, so using a networking device as a handle is suboptimal, which leads us to the second one: - it requires a functioning netdev - in case device enters an error state and can't spawn a netdev (e.g. communication with the device fails) there is no netdev to use as a handle for flashing. Devlink already has the ability to report the firmware versions, now with the ability to update the firmware/flash we will be able to recover devices in bad state. To enable updates of sub-components of the FW allow passing component name. This name should correspond to one of the versions reported in devlink info. v1: - replace target id with component name (Jiri).
Showing the changes to include/uapi/linux (1 of 3 files). Show all
Unified · Split
| @@ -103,6 +103,8 @@ enum devlink_command { · 102 unmodified lines | |||
| 103 | DEVLINK_CMD_HEALTH_REPORTER_DUMP_GET, | 103 | DEVLINK_CMD_HEALTH_REPORTER_DUMP_GET, |
| 104 | DEVLINK_CMD_HEALTH_REPORTER_DUMP_CLEAR, | 104 | DEVLINK_CMD_HEALTH_REPORTER_DUMP_CLEAR, |
| 105 | 105 | ||
| 106 | DEVLINK_CMD_FLASH_UPDATE, | ||
| 107 | |||
| 106 | /* add new commands above here */ | 108 | /* add new commands above here */ |
| 107 | __DEVLINK_CMD_MAX, | 109 | __DEVLINK_CMD_MAX, |
| 108 | DEVLINK_CMD_MAX = __DEVLINK_CMD_MAX - 1 | 110 | DEVLINK_CMD_MAX = __DEVLINK_CMD_MAX - 1 |
| @@ -326,6 +328,10 @@ enum devlink_attr { · 217 unmodified lines | |||
| 326 | DEVLINK_ATTR_HEALTH_REPORTER_DUMP_TS, /* u64 */ | 328 | DEVLINK_ATTR_HEALTH_REPORTER_DUMP_TS, /* u64 */ |
| 327 | DEVLINK_ATTR_HEALTH_REPORTER_GRACEFUL_PERIOD, /* u64 */ | 329 | DEVLINK_ATTR_HEALTH_REPORTER_GRACEFUL_PERIOD, /* u64 */ |
| 328 | DEVLINK_ATTR_HEALTH_REPORTER_AUTO_RECOVER, /* u8 */ | 330 | DEVLINK_ATTR_HEALTH_REPORTER_AUTO_RECOVER, /* u8 */ |
| 331 | |||
| 332 | DEVLINK_ATTR_FLASH_UPDATE_FILE_NAME, /* string */ | ||
| 333 | DEVLINK_ATTR_FLASH_UPDATE_COMPONENT, /* string */ | ||
| 334 | |||
| 329 | /* add new attributes above here, update the policy in devlink.c */ | 335 | /* add new attributes above here, update the policy in devlink.c */ |
| 330 | 336 | ||
| 331 | __DEVLINK_ATTR_MAX, | 337 | __DEVLINK_ATTR_MAX, |