sfc: Reinitialise and re-validate datapath caps after MC reboot
After an MC reboot, the datapath may be running a different firmware variant and have different capabilities. It is critical that we know the current capabilities so that we can pass valid flags to MC_CMD_INIT_EVQ. Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
This commit is contained in:
@@ -343,6 +343,13 @@ static int efx_ef10_init_nic(struct efx_nic *efx)
|
|||||||
struct efx_ef10_nic_data *nic_data = efx->nic_data;
|
struct efx_ef10_nic_data *nic_data = efx->nic_data;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
|
if (nic_data->must_check_datapath_caps) {
|
||||||
|
rc = efx_ef10_init_datapath_caps(efx);
|
||||||
|
if (rc)
|
||||||
|
return rc;
|
||||||
|
nic_data->must_check_datapath_caps = false;
|
||||||
|
}
|
||||||
|
|
||||||
if (nic_data->must_realloc_vis) {
|
if (nic_data->must_realloc_vis) {
|
||||||
/* We cannot let the number of VIs change now */
|
/* We cannot let the number of VIs change now */
|
||||||
rc = efx_ef10_alloc_vis(efx, nic_data->n_allocated_vis,
|
rc = efx_ef10_alloc_vis(efx, nic_data->n_allocated_vis,
|
||||||
@@ -711,6 +718,9 @@ static int efx_ef10_mcdi_poll_reboot(struct efx_nic *efx)
|
|||||||
nic_data->must_restore_filters = true;
|
nic_data->must_restore_filters = true;
|
||||||
nic_data->rx_rss_context = EFX_EF10_RSS_CONTEXT_INVALID;
|
nic_data->rx_rss_context = EFX_EF10_RSS_CONTEXT_INVALID;
|
||||||
|
|
||||||
|
/* The datapath firmware might have been changed */
|
||||||
|
nic_data->must_check_datapath_caps = true;
|
||||||
|
|
||||||
/* MAC statistics have been cleared on the NIC; clear the local
|
/* MAC statistics have been cleared on the NIC; clear the local
|
||||||
* statistic that we update with efx_update_diff_stat().
|
* statistic that we update with efx_update_diff_stat().
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -400,6 +400,8 @@ enum {
|
|||||||
* @rx_rss_context: Firmware handle for our RSS context
|
* @rx_rss_context: Firmware handle for our RSS context
|
||||||
* @stats: Hardware statistics
|
* @stats: Hardware statistics
|
||||||
* @workaround_35388: Flag: firmware supports workaround for bug 35388
|
* @workaround_35388: Flag: firmware supports workaround for bug 35388
|
||||||
|
* @must_check_datapath_caps: Flag: @datapath_caps needs to be revalidated
|
||||||
|
* after MC reboot
|
||||||
* @datapath_caps: Capabilities of datapath firmware (FLAGS1 field of
|
* @datapath_caps: Capabilities of datapath firmware (FLAGS1 field of
|
||||||
* %MC_CMD_GET_CAPABILITIES response)
|
* %MC_CMD_GET_CAPABILITIES response)
|
||||||
*/
|
*/
|
||||||
@@ -413,6 +415,7 @@ struct efx_ef10_nic_data {
|
|||||||
u32 rx_rss_context;
|
u32 rx_rss_context;
|
||||||
u64 stats[EF10_STAT_COUNT];
|
u64 stats[EF10_STAT_COUNT];
|
||||||
bool workaround_35388;
|
bool workaround_35388;
|
||||||
|
bool must_check_datapath_caps;
|
||||||
u32 datapath_caps;
|
u32 datapath_caps;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user