Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a915ccc9 authored by Ben Hutchings's avatar Ben Hutchings
Browse files

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: default avatarBen Hutchings <bhutchings@solarflare.com>
parent e5a2538a
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -343,6 +343,13 @@ static int efx_ef10_init_nic(struct efx_nic *efx)
	struct efx_ef10_nic_data *nic_data = efx->nic_data;
	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) {
		/* We cannot let the number of VIs change now */
		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->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
	 * statistic that we update with efx_update_diff_stat().
	 */
+3 −0
Original line number Diff line number Diff line
@@ -400,6 +400,8 @@ enum {
 * @rx_rss_context: Firmware handle for our RSS context
 * @stats: Hardware statistics
 * @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
 *	%MC_CMD_GET_CAPABILITIES response)
 */
@@ -413,6 +415,7 @@ struct efx_ef10_nic_data {
	u32 rx_rss_context;
	u64 stats[EF10_STAT_COUNT];
	bool workaround_35388;
	bool must_check_datapath_caps;
	u32 datapath_caps;
};