sfc: split setup of hardware timestamping into NIC-type operation
I added efx_ptp_get_mode() to avoid moving the definition for efx_ptp_data, since the current PTP mode is needed for siena.c:siena_set_ptp_hwtstamp. [bwh: Also move the rx_filters mask, and add kernel-doc] Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
This commit is contained in:

committed by
Ben Hutchings

parent
a6f73460b5
commit
9ec0659595
@@ -116,6 +116,54 @@ out:
|
||||
return rc ? rc : rc2;
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
*
|
||||
* PTP
|
||||
*
|
||||
**************************************************************************
|
||||
*/
|
||||
|
||||
static void siena_ptp_write_host_time(struct efx_nic *efx, u32 host_time)
|
||||
{
|
||||
_efx_writed(efx, cpu_to_le32(host_time),
|
||||
FR_CZ_MC_TREG_SMEM + MC_SMEM_P0_PTP_TIME_OFST);
|
||||
}
|
||||
|
||||
static int siena_ptp_set_ts_config(struct efx_nic *efx,
|
||||
struct hwtstamp_config *init)
|
||||
{
|
||||
int rc;
|
||||
|
||||
switch (init->rx_filter) {
|
||||
case HWTSTAMP_FILTER_NONE:
|
||||
/* if TX timestamping is still requested then leave PTP on */
|
||||
return efx_ptp_change_mode(efx,
|
||||
init->tx_type != HWTSTAMP_TX_OFF,
|
||||
efx_ptp_get_mode(efx));
|
||||
case HWTSTAMP_FILTER_PTP_V1_L4_EVENT:
|
||||
case HWTSTAMP_FILTER_PTP_V1_L4_SYNC:
|
||||
case HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ:
|
||||
init->rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_EVENT;
|
||||
return efx_ptp_change_mode(efx, true, MC_CMD_PTP_MODE_V1);
|
||||
case HWTSTAMP_FILTER_PTP_V2_L4_EVENT:
|
||||
case HWTSTAMP_FILTER_PTP_V2_L4_SYNC:
|
||||
case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ:
|
||||
init->rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_EVENT;
|
||||
rc = efx_ptp_change_mode(efx, true,
|
||||
MC_CMD_PTP_MODE_V2_ENHANCED);
|
||||
/* bug 33070 - old versions of the firmware do not support the
|
||||
* improved UUID filtering option. Similarly old versions of the
|
||||
* application do not expect it to be enabled. If the firmware
|
||||
* does not accept the enhanced mode, fall back to the standard
|
||||
* PTP v2 UUID filtering. */
|
||||
if (rc != 0)
|
||||
rc = efx_ptp_change_mode(efx, true, MC_CMD_PTP_MODE_V2);
|
||||
return rc;
|
||||
default:
|
||||
return -ERANGE;
|
||||
}
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
*
|
||||
* Device reset
|
||||
@@ -837,19 +885,6 @@ fail:
|
||||
|
||||
#endif /* CONFIG_SFC_MTD */
|
||||
|
||||
/**************************************************************************
|
||||
*
|
||||
* PTP
|
||||
*
|
||||
**************************************************************************
|
||||
*/
|
||||
|
||||
static void siena_ptp_write_host_time(struct efx_nic *efx, u32 host_time)
|
||||
{
|
||||
_efx_writed(efx, cpu_to_le32(host_time),
|
||||
FR_CZ_MC_TREG_SMEM + MC_SMEM_P0_PTP_TIME_OFST);
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
*
|
||||
* Revision-dependent attributes used by efx.c and nic.c
|
||||
@@ -942,6 +977,7 @@ const struct efx_nic_type siena_a0_nic_type = {
|
||||
.mtd_sync = efx_mcdi_mtd_sync,
|
||||
#endif
|
||||
.ptp_write_host_time = siena_ptp_write_host_time,
|
||||
.ptp_set_ts_config = siena_ptp_set_ts_config,
|
||||
|
||||
.revision = EFX_REV_SIENA_A0,
|
||||
.txd_ptr_tbl_base = FR_BZ_TX_DESC_PTR_TBL,
|
||||
@@ -960,4 +996,11 @@ const struct efx_nic_type siena_a0_nic_type = {
|
||||
NETIF_F_RXHASH | NETIF_F_NTUPLE),
|
||||
.mcdi_max_ver = 1,
|
||||
.max_rx_ip_filters = FR_BZ_RX_FILTER_TBL0_ROWS,
|
||||
.hwtstamp_filters = (1 << HWTSTAMP_FILTER_NONE |
|
||||
1 << HWTSTAMP_FILTER_PTP_V1_L4_EVENT |
|
||||
1 << HWTSTAMP_FILTER_PTP_V1_L4_SYNC |
|
||||
1 << HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ |
|
||||
1 << HWTSTAMP_FILTER_PTP_V2_L4_EVENT |
|
||||
1 << HWTSTAMP_FILTER_PTP_V2_L4_SYNC |
|
||||
1 << HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ),
|
||||
};
|
||||
|
Reference in New Issue
Block a user