Bug Fixes for SFC driver
Subsystems (3)
cover Bug Fixes for SFC driver
I am taking over the upstream patch submission work for the sfc driver from Ben Hutchings.
These patches are bug fixes to the sfc driver involving replacement of the PORT RESET MC command and fixing transposed ptp_{under,over}size_sync_window_statistics
The PORT_RESET bug fix is needed for all versions supporting EF10 i.e all versions including and after 3.12.
Ben Hutchings (1):
sfc: Fix transposed ptp_{under,over}size_sync_windows statistics
Jon Cooper (1):
sfc: Change efx_mcdi_reset_port to use ENTITY_RESET MC command.
drivers/net/ethernet/sfc/ef10.c | 31 ++++++++++++++++++++++++++----- drivers/net/ethernet/sfc/mcdi.c | 14 +++++++++++--- drivers/net/ethernet/sfc/ptp.c | 4 ++-- 3 files changed, 39 insertions(+), 10 deletions(-)
PATCH 1/2 sfc: Change efx_mcdi_reset_port to use ENTITY_RESET MC command.
From: Jon Cooper <[email protected]>
PORT_RESET MC command was NOP in the ef10 firmware hence we are using ENTITY_RESET to make sure all resource allocations are reset.
--- drivers/net/ethernet/sfc/ef10.c | 31 ++++++++++++++++++++++++++----- drivers/net/ethernet/sfc/mcdi.c | 14 +++++++++++--- 2 files changed, 37 insertions(+), 8 deletions(-)
drivers/net/ethernet/sfc/ef10.c +26 -5
@@ -683,6 +683,17 @@ static int efx_ef10_init_nic(struct efx_nic *efx)return 0 ; } +static void efx_ef10_reset_mc_allocations (struct efx_nic *efx) +{ +struct efx_ef10_nic_data *nic_data = efx->nic_data; + +/* All our allocations have been reset */ + nic_data->must_realloc_vis = true; + nic_data->must_restore_filters = true; + nic_data->must_restore_piobufs = true; + nic_data->rx_rss_context =EFX_EF10_RSS_CONTEXT_INVALID ; +} +static int efx_ef10_map_reset_flags (u32 *flags) {enum {
@@ -713,6 +724,19 @@ static int efx_ef10_map_reset_flags(u32 *flags)return -EINVAL ; } +static int efx_ef10_reset (struct efx_nic *efx,enum reset_type reset_type) +{ +int rc =efx_mcdi_reset (efx, reset_type); + +/* If it was a port reset, trigger reallocation of MC resources. +* Note that on an MC reset nothing needs to be done now because we'll +* detect the MC reset later and handle it then. +*/ +if (reset_type ==RESET_TYPE_ALL && !rc) +efx_ef10_reset_mc_allocations (efx); +return rc; +} +#define EF10_DMA_STAT (ext_name, mcdi_name) \ [EF10_STAT_ ## ext_name] = \ { #ext_name, 64, 8 * MC_CMD_MAC_ ## mcdi_name }
@@ -1078,10 +1102,7 @@ static int efx_ef10_mcdi_poll_reboot(struct efx_nic *efx) nic_data->warm_boot_count = rc;/* All our allocations have been reset */ - nic_data->must_realloc_vis = true; - nic_data->must_restore_filters = true; - nic_data->must_restore_piobufs = true; - nic_data->rx_rss_context =EFX_EF10_RSS_CONTEXT_INVALID ; +efx_ef10_reset_mc_allocations (efx);/* The datapath firmware might have been changed */ nic_data->must_check_datapath_caps = true;
@@ -3571,7 +3592,7 @@ const struct efx_nic_type efx_hunt_a0_nic_type = { .fini = efx_port_dummy_op_void, .map_reset_reason = efx_mcdi_map_reset_reason, .map_reset_flags = efx_ef10_map_reset_flags, - .reset = efx_mcdi_reset, + .reset = efx_ef10_reset, .probe_port = efx_mcdi_port_probe, .remove_port = efx_mcdi_port_remove, .fini_dmaq = efx_ef10_fini_dmaq,
drivers/net/ethernet/sfc/mcdi.c +11 -3
@@ -1471,9 +1471,17 @@ void efx_mcdi_set_id_led(struct efx_nic *efx, enum efx_led_mode mode) NULL, 0, NULL); } -static int efx_mcdi_reset_port (struct efx_nic *efx) +static int efx_mcdi_reset_func (struct efx_nic *efx) { -return efx_mcdi_rpc (efx,MC_CMD_ENTITY_RESET ,NULL ,0 ,NULL ,0 ,NULL ); +MCDI_DECLARE_BUF (inbuf,MC_CMD_ENTITY_RESET_IN_LEN ); +int rc; + +BUILD_BUG_ON (MC_CMD_ENTITY_RESET_OUT_LEN !=0 ); +MCDI_POPULATE_DWORD_1 (inbuf,ENTITY_RESET_IN_FLAG , +ENTITY_RESET_IN_FUNCTION_RESOURCE_RESET ,1 ); + rc =efx_mcdi_rpc (efx,MC_CMD_ENTITY_RESET , inbuf,sizeof (inbuf), +NULL ,0 ,NULL ); +return rc; }static int efx_mcdi_reset_mc (struct efx_nic *efx)
@@ -1510,7 +1518,7 @@ int efx_mcdi_reset(struct efx_nic *efx, enum reset_type method)if (method ==RESET_TYPE_WORLD )return efx_mcdi_reset_mc (efx);else -return efx_mcdi_reset_port (efx); +return efx_mcdi_reset_func (efx); } static int efx_mcdi_wol_filter_set(struct efx_nic *efx, u32 type,
PATCH 2/2 sfc: Fix transposed ptp_{under,over}size_sync_windows statistics
In reply to Shradha ShahFrom: Ben Hutchings <[email protected]>
Somehow I transposed these two while bringing the original statistics support upstream.
--- drivers/net/ethernet/sfc/ptp.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)
drivers/net/ethernet/sfc/ptp.c +2 -2
@@ -753,9 +753,9 @@ efx_ptp_process_times(struct efx_nic *efx, MCDI_DECLARE_STRUCT_PTR(synch_buf),if (window <SYNCHRONISATION_GRANULARITY_NS ) { ++ptp->invalid_sync_windows; }else if (corrected >=MAX_SYNCHRONISATION_NS ) { - ++ptp->undersize_sync_windows; - }else if (corrected < ptp->min_synchronisation_ns) { ++ptp->oversize_sync_windows; + }else if (corrected < ptp->min_synchronisation_ns) { + ++ptp->undersize_sync_windows; }else { ngood++; last_good = i;
Quoted 13 lines · Shradha Shah
I am taking over the upstream patch submission work for the sfc driver from Ben Hutchings.
These patches are bug fixes to the sfc driver involving replacement of the PORT RESET MC command and fixing transposed ptp_{under,over}size_sync_window_statistics
The
PORT_RESETbug fix is needed for all versions supporting EF10 i.e all versions including and after 3.12.Ben Hutchings (1):
sfc: Fix transposed ptp_{under,over}size_sync_windows statistics
Quoted 7 lines
Jon Cooper (1):
sfc: Changeefx_mcdi_reset_portto useENTITY_RESETMC command.drivers/net/ethernet/sfc/ef10.c | 31 ++++++++++++++++++++++++++----- drivers/net/ethernet/sfc/mcdi.c | 14 +++++++++++--- drivers/net/ethernet/sfc/ptp.c | 4 ++-- 3 files changed, 39 insertions(+), 10 deletions(-)
David, I don't know if you're waiting for my ack on these, but in case you are:
Shradha will send a MAINTAINERS update in the next patch series.
Ben.
Signature · 3 lines
Ben Hutchings, Staff Engineer, Solarflare Not speaking for my employer; that's the marketing department's job. They asked us to note that Solarflare product names are trademarked.
David Miller
maintainerFrom: Shradha Shah <[email protected]>
Date: Fri, 17 Jan 2014 19:45:36 +0000
Quoted 9 lines
I am taking over the upstream patch submission work for the sfc driver from Ben Hutchings.
These patches are bug fixes to the sfc driver involving replacement of the PORT RESET MC command and fixing transposed ptp_{under,over}size_sync_window_statistics
The
PORT_RESETbug fix is needed for all versions supporting EF10 i.e all versions including and after 3.12.
Series applied, thanks.