Commit 9b1b31d5 authored by David S. Miller's avatar David S. Miller

Merge branch 'sfc-remove-nic_data-usage-in-common-code'

Edward Cree says:

====================
sfc: remove nic_data usage in common code

efx->nic_data should only be used from NIC-specific code (i.e. nic_type
 functions and things they call), in files like ef10[_sriov].c and
 siena.c.  This series refactors several nic_data usages from common
 code (mainly in mcdi_filters.c) into nic_type functions, in preparation
 for the upcoming ef100 driver which will use those functions but have
 its own struct layout for efx->nic_data distinct from ef10's.
After this series, one nic_data usage (in ptp.c) remains; it wasn't
 clear to me how to fix it, and ef100 devices don't yet have PTP support
 (so the initial ef100 driver will not call that code).
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents a90f704a 9b46132c
This diff is collapsed.
...@@ -232,15 +232,14 @@ static int efx_ef10_sriov_restore_vf_vswitching(struct efx_nic *efx) ...@@ -232,15 +232,14 @@ static int efx_ef10_sriov_restore_vf_vswitching(struct efx_nic *efx)
static int efx_ef10_vadaptor_alloc_set_features(struct efx_nic *efx) static int efx_ef10_vadaptor_alloc_set_features(struct efx_nic *efx)
{ {
struct efx_ef10_nic_data *nic_data = efx->nic_data;
u32 port_flags; u32 port_flags;
int rc; int rc;
rc = efx_ef10_vadaptor_alloc(efx, nic_data->vport_id); rc = efx_ef10_vadaptor_alloc(efx, efx->vport_id);
if (rc) if (rc)
goto fail_vadaptor_alloc; goto fail_vadaptor_alloc;
rc = efx_ef10_vadaptor_query(efx, nic_data->vport_id, rc = efx_ef10_vadaptor_query(efx, efx->vport_id,
&port_flags, NULL, NULL); &port_flags, NULL, NULL);
if (rc) if (rc)
goto fail_vadaptor_query; goto fail_vadaptor_query;
...@@ -281,11 +280,11 @@ int efx_ef10_vswitching_probe_pf(struct efx_nic *efx) ...@@ -281,11 +280,11 @@ int efx_ef10_vswitching_probe_pf(struct efx_nic *efx)
rc = efx_ef10_vport_alloc(efx, EVB_PORT_ID_ASSIGNED, rc = efx_ef10_vport_alloc(efx, EVB_PORT_ID_ASSIGNED,
MC_CMD_VPORT_ALLOC_IN_VPORT_TYPE_NORMAL, MC_CMD_VPORT_ALLOC_IN_VPORT_TYPE_NORMAL,
EFX_EF10_NO_VLAN, &nic_data->vport_id); EFX_EF10_NO_VLAN, &efx->vport_id);
if (rc) if (rc)
goto fail2; goto fail2;
rc = efx_ef10_vport_add_mac(efx, nic_data->vport_id, net_dev->dev_addr); rc = efx_ef10_vport_add_mac(efx, efx->vport_id, net_dev->dev_addr);
if (rc) if (rc)
goto fail3; goto fail3;
ether_addr_copy(nic_data->vport_mac, net_dev->dev_addr); ether_addr_copy(nic_data->vport_mac, net_dev->dev_addr);
...@@ -296,11 +295,11 @@ int efx_ef10_vswitching_probe_pf(struct efx_nic *efx) ...@@ -296,11 +295,11 @@ int efx_ef10_vswitching_probe_pf(struct efx_nic *efx)
return 0; return 0;
fail4: fail4:
efx_ef10_vport_del_mac(efx, nic_data->vport_id, nic_data->vport_mac); efx_ef10_vport_del_mac(efx, efx->vport_id, nic_data->vport_mac);
eth_zero_addr(nic_data->vport_mac); eth_zero_addr(nic_data->vport_mac);
fail3: fail3:
efx_ef10_vport_free(efx, nic_data->vport_id); efx_ef10_vport_free(efx, efx->vport_id);
nic_data->vport_id = EVB_PORT_ID_ASSIGNED; efx->vport_id = EVB_PORT_ID_ASSIGNED;
fail2: fail2:
efx_ef10_vswitch_free(efx, EVB_PORT_ID_ASSIGNED); efx_ef10_vswitch_free(efx, EVB_PORT_ID_ASSIGNED);
fail1: fail1:
...@@ -355,22 +354,22 @@ void efx_ef10_vswitching_remove_pf(struct efx_nic *efx) ...@@ -355,22 +354,22 @@ void efx_ef10_vswitching_remove_pf(struct efx_nic *efx)
efx_ef10_sriov_free_vf_vswitching(efx); efx_ef10_sriov_free_vf_vswitching(efx);
efx_ef10_vadaptor_free(efx, nic_data->vport_id); efx_ef10_vadaptor_free(efx, efx->vport_id);
if (nic_data->vport_id == EVB_PORT_ID_ASSIGNED) if (efx->vport_id == EVB_PORT_ID_ASSIGNED)
return; /* No vswitch was ever created */ return; /* No vswitch was ever created */
if (!is_zero_ether_addr(nic_data->vport_mac)) { if (!is_zero_ether_addr(nic_data->vport_mac)) {
efx_ef10_vport_del_mac(efx, nic_data->vport_id, efx_ef10_vport_del_mac(efx, efx->vport_id,
efx->net_dev->dev_addr); efx->net_dev->dev_addr);
eth_zero_addr(nic_data->vport_mac); eth_zero_addr(nic_data->vport_mac);
} }
efx_ef10_vport_free(efx, nic_data->vport_id); efx_ef10_vport_free(efx, efx->vport_id);
nic_data->vport_id = EVB_PORT_ID_ASSIGNED; efx->vport_id = EVB_PORT_ID_ASSIGNED;
/* Only free the vswitch if no VFs are assigned */ /* Only free the vswitch if no VFs are assigned */
if (!pci_vfs_assigned(efx->pci_dev)) if (!pci_vfs_assigned(efx->pci_dev))
efx_ef10_vswitch_free(efx, nic_data->vport_id); efx_ef10_vswitch_free(efx, efx->vport_id);
} }
void efx_ef10_vswitching_remove_vf(struct efx_nic *efx) void efx_ef10_vswitching_remove_vf(struct efx_nic *efx)
......
...@@ -1425,23 +1425,16 @@ void efx_mcdi_print_fwver(struct efx_nic *efx, char *buf, size_t len) ...@@ -1425,23 +1425,16 @@ void efx_mcdi_print_fwver(struct efx_nic *efx, char *buf, size_t len)
le16_to_cpu(ver_words[2]), le16_to_cpu(ver_words[2]),
le16_to_cpu(ver_words[3])); le16_to_cpu(ver_words[3]));
/* EF10 may have multiple datapath firmware variants within a if (efx->type->print_additional_fwver)
* single version. Report which variants are running. offset += efx->type->print_additional_fwver(efx, buf + offset,
*/ len - offset);
if (efx_nic_rev(efx) >= EFX_REV_HUNT_A0) {
struct efx_ef10_nic_data *nic_data = efx->nic_data;
offset += scnprintf(buf + offset, len - offset, " rx%x tx%x",
nic_data->rx_dpcpu_fw_id,
nic_data->tx_dpcpu_fw_id);
/* It's theoretically possible for the string to exceed 31 /* It's theoretically possible for the string to exceed 31
* characters, though in practice the first three version * characters, though in practice the first three version
* components are short enough that this doesn't happen. * components are short enough that this doesn't happen.
*/ */
if (WARN_ON(offset >= len)) if (WARN_ON(offset >= len))
buf[0] = 0; buf[0] = 0;
}
return; return;
......
...@@ -326,6 +326,18 @@ void efx_mcdi_sensor_event(struct efx_nic *efx, efx_qword_t *ev); ...@@ -326,6 +326,18 @@ void efx_mcdi_sensor_event(struct efx_nic *efx, efx_qword_t *ev);
#define MCDI_EVENT_FIELD(_ev, _field) \ #define MCDI_EVENT_FIELD(_ev, _field) \
EFX_QWORD_FIELD(_ev, MCDI_EVENT_ ## _field) EFX_QWORD_FIELD(_ev, MCDI_EVENT_ ## _field)
#define MCDI_CAPABILITY(field) \
MC_CMD_GET_CAPABILITIES_V4_OUT_ ## field ## _LBN
#define MCDI_CAPABILITY_OFST(field) \
MC_CMD_GET_CAPABILITIES_V4_OUT_ ## field ## _OFST
/* field is FLAGS1 or FLAGS2 */
#define efx_has_cap(efx, flag, field) \
efx->type->check_caps(efx, \
MCDI_CAPABILITY(flag), \
MCDI_CAPABILITY_OFST(field))
void efx_mcdi_print_fwver(struct efx_nic *efx, char *buf, size_t len); void efx_mcdi_print_fwver(struct efx_nic *efx, char *buf, size_t len);
int efx_mcdi_get_board_cfg(struct efx_nic *efx, u8 *mac_address, int efx_mcdi_get_board_cfg(struct efx_nic *efx, u8 *mac_address,
u16 *fw_subtype_list, u32 *capabilities); u16 *fw_subtype_list, u32 *capabilities);
......
This diff is collapsed.
...@@ -55,6 +55,8 @@ struct efx_mcdi_filter_table { ...@@ -55,6 +55,8 @@ struct efx_mcdi_filter_table {
u32 rx_match_mcdi_flags[ u32 rx_match_mcdi_flags[
MC_CMD_GET_PARSER_DISP_INFO_OUT_SUPPORTED_MATCHES_MAXNUM * 2]; MC_CMD_GET_PARSER_DISP_INFO_OUT_SUPPORTED_MATCHES_MAXNUM * 2];
unsigned int rx_match_count; unsigned int rx_match_count;
/* Our RSS context is exclusive (as opposed to shared) */
bool rx_rss_context_exclusive;
struct rw_semaphore lock; /* Protects entries */ struct rw_semaphore lock; /* Protects entries */
struct { struct {
...@@ -75,14 +77,27 @@ struct efx_mcdi_filter_table { ...@@ -75,14 +77,27 @@ struct efx_mcdi_filter_table {
/* Whether in multicast promiscuous mode when last changed */ /* Whether in multicast promiscuous mode when last changed */
bool mc_promisc_last; bool mc_promisc_last;
bool mc_overflow; /* Too many MC addrs; should always imply mc_promisc */ bool mc_overflow; /* Too many MC addrs; should always imply mc_promisc */
/* RSS contexts have yet to be restored after MC reboot */
bool must_restore_rss_contexts;
/* filters have yet to be restored after MC reboot */
bool must_restore_filters;
/* Multicast filter chaining allows less-specific filters to receive
* multicast packets that matched more-specific filters. Early EF10
* firmware didn't support this (SF bug 26807); if mc_chaining == false
* then we still subscribe the dev_mc_list even when mc_promisc to
* prevent another VI stealing the traffic.
*/
bool mc_chaining;
bool vlan_filter; bool vlan_filter;
struct list_head vlan_list; struct list_head vlan_list;
}; };
int efx_mcdi_filter_table_probe(struct efx_nic *efx); int efx_mcdi_filter_table_probe(struct efx_nic *efx, bool multicast_chaining);
void efx_mcdi_filter_table_remove(struct efx_nic *efx); void efx_mcdi_filter_table_remove(struct efx_nic *efx);
void efx_mcdi_filter_table_restore(struct efx_nic *efx); void efx_mcdi_filter_table_restore(struct efx_nic *efx);
void efx_mcdi_filter_table_reset_mc_allocations(struct efx_nic *efx);
/* /*
* The filter table(s) are managed by firmware and we have write-only * The filter table(s) are managed by firmware and we have write-only
* access. When removing filters we must identify them to the * access. When removing filters we must identify them to the
......
...@@ -168,21 +168,18 @@ int efx_mcdi_tx_init(struct efx_tx_queue *tx_queue, bool tso_v2) ...@@ -168,21 +168,18 @@ int efx_mcdi_tx_init(struct efx_tx_queue *tx_queue, bool tso_v2)
size_t entries = tx_queue->txd.buf.len / EFX_BUF_SIZE; size_t entries = tx_queue->txd.buf.len / EFX_BUF_SIZE;
struct efx_channel *channel = tx_queue->channel; struct efx_channel *channel = tx_queue->channel;
struct efx_nic *efx = tx_queue->efx; struct efx_nic *efx = tx_queue->efx;
struct efx_ef10_nic_data *nic_data;
dma_addr_t dma_addr; dma_addr_t dma_addr;
size_t inlen; size_t inlen;
int rc, i; int rc, i;
BUILD_BUG_ON(MC_CMD_INIT_TXQ_OUT_LEN != 0); BUILD_BUG_ON(MC_CMD_INIT_TXQ_OUT_LEN != 0);
nic_data = efx->nic_data;
MCDI_SET_DWORD(inbuf, INIT_TXQ_IN_SIZE, tx_queue->ptr_mask + 1); MCDI_SET_DWORD(inbuf, INIT_TXQ_IN_SIZE, tx_queue->ptr_mask + 1);
MCDI_SET_DWORD(inbuf, INIT_TXQ_IN_TARGET_EVQ, channel->channel); MCDI_SET_DWORD(inbuf, INIT_TXQ_IN_TARGET_EVQ, channel->channel);
MCDI_SET_DWORD(inbuf, INIT_TXQ_IN_LABEL, tx_queue->queue); MCDI_SET_DWORD(inbuf, INIT_TXQ_IN_LABEL, tx_queue->queue);
MCDI_SET_DWORD(inbuf, INIT_TXQ_IN_INSTANCE, tx_queue->queue); MCDI_SET_DWORD(inbuf, INIT_TXQ_IN_INSTANCE, tx_queue->queue);
MCDI_SET_DWORD(inbuf, INIT_TXQ_IN_OWNER_ID, 0); MCDI_SET_DWORD(inbuf, INIT_TXQ_IN_OWNER_ID, 0);
MCDI_SET_DWORD(inbuf, INIT_TXQ_IN_PORT_ID, nic_data->vport_id); MCDI_SET_DWORD(inbuf, INIT_TXQ_IN_PORT_ID, efx->vport_id);
dma_addr = tx_queue->txd.buf.dma_addr; dma_addr = tx_queue->txd.buf.dma_addr;
...@@ -276,7 +273,6 @@ void efx_mcdi_rx_init(struct efx_rx_queue *rx_queue) ...@@ -276,7 +273,6 @@ void efx_mcdi_rx_init(struct efx_rx_queue *rx_queue)
struct efx_channel *channel = efx_rx_queue_channel(rx_queue); struct efx_channel *channel = efx_rx_queue_channel(rx_queue);
size_t entries = rx_queue->rxd.buf.len / EFX_BUF_SIZE; size_t entries = rx_queue->rxd.buf.len / EFX_BUF_SIZE;
struct efx_nic *efx = rx_queue->efx; struct efx_nic *efx = rx_queue->efx;
struct efx_ef10_nic_data *nic_data = efx->nic_data;
dma_addr_t dma_addr; dma_addr_t dma_addr;
size_t inlen; size_t inlen;
int rc; int rc;
...@@ -295,7 +291,7 @@ void efx_mcdi_rx_init(struct efx_rx_queue *rx_queue) ...@@ -295,7 +291,7 @@ void efx_mcdi_rx_init(struct efx_rx_queue *rx_queue)
INIT_RXQ_IN_FLAG_PREFIX, 1, INIT_RXQ_IN_FLAG_PREFIX, 1,
INIT_RXQ_IN_FLAG_TIMESTAMP, 1); INIT_RXQ_IN_FLAG_TIMESTAMP, 1);
MCDI_SET_DWORD(inbuf, INIT_RXQ_IN_OWNER_ID, 0); MCDI_SET_DWORD(inbuf, INIT_RXQ_IN_OWNER_ID, 0);
MCDI_SET_DWORD(inbuf, INIT_RXQ_IN_PORT_ID, nic_data->vport_id); MCDI_SET_DWORD(inbuf, INIT_RXQ_IN_PORT_ID, efx->vport_id);
dma_addr = rx_queue->rxd.buf.dma_addr; dma_addr = rx_queue->rxd.buf.dma_addr;
......
...@@ -722,11 +722,8 @@ static int efx_mcdi_mac_stats(struct efx_nic *efx, ...@@ -722,11 +722,8 @@ static int efx_mcdi_mac_stats(struct efx_nic *efx,
MAC_STATS_IN_PERIOD_MS, period); MAC_STATS_IN_PERIOD_MS, period);
MCDI_SET_DWORD(inbuf, MAC_STATS_IN_DMA_LEN, dma_len); MCDI_SET_DWORD(inbuf, MAC_STATS_IN_DMA_LEN, dma_len);
if (efx_nic_rev(efx) >= EFX_REV_HUNT_A0) { if (efx_nic_rev(efx) >= EFX_REV_HUNT_A0)
struct efx_ef10_nic_data *nic_data = efx->nic_data; MCDI_SET_DWORD(inbuf, MAC_STATS_IN_PORT_ID, efx->vport_id);
MCDI_SET_DWORD(inbuf, MAC_STATS_IN_PORT_ID, nic_data->vport_id);
}
rc = efx_mcdi_rpc_quiet(efx, MC_CMD_MAC_STATS, inbuf, sizeof(inbuf), rc = efx_mcdi_rpc_quiet(efx, MC_CMD_MAC_STATS, inbuf, sizeof(inbuf),
NULL, 0, NULL); NULL, 0, NULL);
......
...@@ -887,8 +887,10 @@ struct efx_async_filter_insertion { ...@@ -887,8 +887,10 @@ struct efx_async_filter_insertion {
* @rss_context: Main RSS context. Its @list member is the head of the list of * @rss_context: Main RSS context. Its @list member is the head of the list of
* RSS contexts created by user requests * RSS contexts created by user requests
* @rss_lock: Protects custom RSS context software state in @rss_context.list * @rss_lock: Protects custom RSS context software state in @rss_context.list
* @vport_id: The function's vport ID, only relevant for PFs
* @int_error_count: Number of internal errors seen recently * @int_error_count: Number of internal errors seen recently
* @int_error_expire: Time at which error count will be expired * @int_error_expire: Time at which error count will be expired
* @must_realloc_vis: Flag: VIs have yet to be reallocated after MC reboot
* @irq_soft_enabled: Are IRQs soft-enabled? If not, IRQ handler will * @irq_soft_enabled: Are IRQs soft-enabled? If not, IRQ handler will
* acknowledge but do nothing else. * acknowledge but do nothing else.
* @irq_status: Interrupt status buffer * @irq_status: Interrupt status buffer
...@@ -1044,10 +1046,12 @@ struct efx_nic { ...@@ -1044,10 +1046,12 @@ struct efx_nic {
bool rx_scatter; bool rx_scatter;
struct efx_rss_context rss_context; struct efx_rss_context rss_context;
struct mutex rss_lock; struct mutex rss_lock;
u32 vport_id;
unsigned int_error_count; unsigned int_error_count;
unsigned long int_error_expire; unsigned long int_error_expire;
bool must_realloc_vis;
bool irq_soft_enabled; bool irq_soft_enabled;
struct efx_buffer irq_status; struct efx_buffer irq_status;
unsigned irq_zero_count; unsigned irq_zero_count;
...@@ -1292,6 +1296,7 @@ struct efx_udp_tunnel { ...@@ -1292,6 +1296,7 @@ struct efx_udp_tunnel {
* @udp_tnl_add_port: Add a UDP tunnel port * @udp_tnl_add_port: Add a UDP tunnel port
* @udp_tnl_has_port: Check if a port has been added as UDP tunnel * @udp_tnl_has_port: Check if a port has been added as UDP tunnel
* @udp_tnl_del_port: Remove a UDP tunnel port * @udp_tnl_del_port: Remove a UDP tunnel port
* @print_additional_fwver: Dump NIC-specific additional FW version info
* @revision: Hardware architecture revision * @revision: Hardware architecture revision
* @txd_ptr_tbl_base: TX descriptor ring base address * @txd_ptr_tbl_base: TX descriptor ring base address
* @rxd_ptr_tbl_base: RX descriptor ring base address * @rxd_ptr_tbl_base: RX descriptor ring base address
...@@ -1352,6 +1357,9 @@ struct efx_nic_type { ...@@ -1352,6 +1357,9 @@ struct efx_nic_type {
void (*get_wol)(struct efx_nic *efx, struct ethtool_wolinfo *wol); void (*get_wol)(struct efx_nic *efx, struct ethtool_wolinfo *wol);
int (*set_wol)(struct efx_nic *efx, u32 type); int (*set_wol)(struct efx_nic *efx, u32 type);
void (*resume_wol)(struct efx_nic *efx); void (*resume_wol)(struct efx_nic *efx);
unsigned int (*check_caps)(const struct efx_nic *efx,
u8 flag,
u32 offset);
int (*test_chip)(struct efx_nic *efx, struct efx_self_tests *tests); int (*test_chip)(struct efx_nic *efx, struct efx_self_tests *tests);
int (*test_nvram)(struct efx_nic *efx); int (*test_nvram)(struct efx_nic *efx);
void (*mcdi_request)(struct efx_nic *efx, void (*mcdi_request)(struct efx_nic *efx,
...@@ -1462,6 +1470,8 @@ struct efx_nic_type { ...@@ -1462,6 +1470,8 @@ struct efx_nic_type {
int (*udp_tnl_add_port)(struct efx_nic *efx, struct efx_udp_tunnel tnl); int (*udp_tnl_add_port)(struct efx_nic *efx, struct efx_udp_tunnel tnl);
bool (*udp_tnl_has_port)(struct efx_nic *efx, __be16 port); bool (*udp_tnl_has_port)(struct efx_nic *efx, __be16 port);
int (*udp_tnl_del_port)(struct efx_nic *efx, struct efx_udp_tunnel tnl); int (*udp_tnl_del_port)(struct efx_nic *efx, struct efx_udp_tunnel tnl);
size_t (*print_additional_fwver)(struct efx_nic *efx, char *buf,
size_t len);
int revision; int revision;
unsigned int txd_ptr_tbl_base; unsigned int txd_ptr_tbl_base;
......
...@@ -360,10 +360,6 @@ enum { ...@@ -360,10 +360,6 @@ enum {
* @warm_boot_count: Last seen MC warm boot count * @warm_boot_count: Last seen MC warm boot count
* @vi_base: Absolute index of first VI in this function * @vi_base: Absolute index of first VI in this function
* @n_allocated_vis: Number of VIs allocated to this function * @n_allocated_vis: Number of VIs allocated to this function
* @must_realloc_vis: Flag: VIs have yet to be reallocated after MC reboot
* @must_restore_rss_contexts: Flag: RSS contexts have yet to be restored after
* MC reboot
* @must_restore_filters: Flag: filters have yet to be restored after MC reboot
* @n_piobufs: Number of PIO buffers allocated to this function * @n_piobufs: Number of PIO buffers allocated to this function
* @wc_membase: Base address of write-combining mapping of the memory BAR * @wc_membase: Base address of write-combining mapping of the memory BAR
* @pio_write_base: Base address for writing PIO buffers * @pio_write_base: Base address for writing PIO buffers
...@@ -372,7 +368,6 @@ enum { ...@@ -372,7 +368,6 @@ enum {
* @piobuf_size: size of a single PIO buffer * @piobuf_size: size of a single PIO buffer
* @must_restore_piobufs: Flag: PIO buffers have yet to be restored after MC * @must_restore_piobufs: Flag: PIO buffers have yet to be restored after MC
* reboot * reboot
* @rx_rss_context_exclusive: Whether our RSS context is exclusive or shared
* @stats: Hardware statistics * @stats: Hardware statistics
* @workaround_35388: Flag: firmware supports workaround for bug 35388 * @workaround_35388: Flag: firmware supports workaround for bug 35388
* @workaround_26807: Flag: firmware supports workaround for bug 26807 * @workaround_26807: Flag: firmware supports workaround for bug 26807
...@@ -385,7 +380,6 @@ enum { ...@@ -385,7 +380,6 @@ enum {
* %MC_CMD_GET_CAPABILITIES response) * %MC_CMD_GET_CAPABILITIES response)
* @rx_dpcpu_fw_id: Firmware ID of the RxDPCPU * @rx_dpcpu_fw_id: Firmware ID of the RxDPCPU
* @tx_dpcpu_fw_id: Firmware ID of the TxDPCPU * @tx_dpcpu_fw_id: Firmware ID of the TxDPCPU
* @vport_id: The function's vport ID, only relevant for PFs
* @must_probe_vswitching: Flag: vswitching has yet to be setup after MC reboot * @must_probe_vswitching: Flag: vswitching has yet to be setup after MC reboot
* @pf_index: The number for this PF, or the parent PF if this is a VF * @pf_index: The number for this PF, or the parent PF if this is a VF
#ifdef CONFIG_SFC_SRIOV #ifdef CONFIG_SFC_SRIOV
...@@ -404,16 +398,12 @@ struct efx_ef10_nic_data { ...@@ -404,16 +398,12 @@ struct efx_ef10_nic_data {
u16 warm_boot_count; u16 warm_boot_count;
unsigned int vi_base; unsigned int vi_base;
unsigned int n_allocated_vis; unsigned int n_allocated_vis;
bool must_realloc_vis;
bool must_restore_rss_contexts;
bool must_restore_filters;
unsigned int n_piobufs; unsigned int n_piobufs;
void __iomem *wc_membase, *pio_write_base; void __iomem *wc_membase, *pio_write_base;
unsigned int pio_write_vi_base; unsigned int pio_write_vi_base;
unsigned int piobuf_handle[EF10_TX_PIOBUF_COUNT]; unsigned int piobuf_handle[EF10_TX_PIOBUF_COUNT];
u16 piobuf_size; u16 piobuf_size;
bool must_restore_piobufs; bool must_restore_piobufs;
bool rx_rss_context_exclusive;
u64 stats[EF10_STAT_COUNT]; u64 stats[EF10_STAT_COUNT];
bool workaround_35388; bool workaround_35388;
bool workaround_26807; bool workaround_26807;
...@@ -423,7 +413,6 @@ struct efx_ef10_nic_data { ...@@ -423,7 +413,6 @@ struct efx_ef10_nic_data {
u32 datapath_caps2; u32 datapath_caps2;
unsigned int rx_dpcpu_fw_id; unsigned int rx_dpcpu_fw_id;
unsigned int tx_dpcpu_fw_id; unsigned int tx_dpcpu_fw_id;
unsigned int vport_id;
bool must_probe_vswitching; bool must_probe_vswitching;
unsigned int pf_index; unsigned int pf_index;
u8 port_id[ETH_ALEN]; u8 port_id[ETH_ALEN];
......
...@@ -352,12 +352,7 @@ static int efx_phc_enable(struct ptp_clock_info *ptp, ...@@ -352,12 +352,7 @@ static int efx_phc_enable(struct ptp_clock_info *ptp,
bool efx_ptp_use_mac_tx_timestamps(struct efx_nic *efx) bool efx_ptp_use_mac_tx_timestamps(struct efx_nic *efx)
{ {
struct efx_ef10_nic_data *nic_data = efx->nic_data; return efx_has_cap(efx, TX_MAC_TIMESTAMPING, FLAGS2);
return ((efx_nic_rev(efx) >= EFX_REV_HUNT_A0) &&
(nic_data->datapath_caps2 &
(1 << MC_CMD_GET_CAPABILITIES_V2_OUT_TX_MAC_TIMESTAMPING_LBN)
));
} }
/* PTP 'extra' channel is still a traffic channel, but we only create TX queues /* PTP 'extra' channel is still a traffic channel, but we only create TX queues
......
...@@ -948,6 +948,13 @@ static int siena_mtd_probe(struct efx_nic *efx) ...@@ -948,6 +948,13 @@ static int siena_mtd_probe(struct efx_nic *efx)
#endif /* CONFIG_SFC_MTD */ #endif /* CONFIG_SFC_MTD */
unsigned int siena_check_caps(const struct efx_nic *efx,
u8 flag, u32 offset)
{
/* Siena did not support MC_CMD_GET_CAPABILITIES */
return 0;
}
/************************************************************************** /**************************************************************************
* *
* Revision-dependent attributes used by efx.c and nic.c * Revision-dependent attributes used by efx.c and nic.c
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment