Skip to content

Commit d90939d

Browse files
committed
Merge: sfc: update to v6.12
MR: https://gitlab.com/redhat/centos-stream/src/kernel/centos-stream-9/-/merge_requests/5896 JIRA: https://issues.redhat.com/browse/RHEL-52776 Signed-off-by: Michal Schmidt <mschmidt@redhat.com> Approved-by: José Ignacio Tornos Martínez <jtornosm@redhat.com> Approved-by: Kamal Heib <kheib@redhat.com> Approved-by: CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com> Merged-by: Rado Vrbovsky <rvrbovsk@redhat.com>
2 parents b4bc47e + 9077868 commit d90939d

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+3878
-729
lines changed

drivers/net/ethernet/sfc/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ sfc-y += efx.o efx_common.o efx_channels.o nic.o \
1111
sfc-$(CONFIG_SFC_MTD) += mtd.o
1212
sfc-$(CONFIG_SFC_SRIOV) += sriov.o ef10_sriov.o ef100_sriov.o ef100_rep.o \
1313
mae.o tc.o tc_bindings.o tc_counters.o \
14-
tc_encap_actions.o
14+
tc_encap_actions.o tc_conntrack.o
1515

1616
obj-$(CONFIG_SFC) += sfc.o
1717

drivers/net/ethernet/sfc/bitfield.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
/* Lowest bit numbers and widths */
2727
#define EFX_DUMMY_FIELD_LBN 0
2828
#define EFX_DUMMY_FIELD_WIDTH 0
29+
#define EFX_BYTE_0_LBN 0
30+
#define EFX_BYTE_0_WIDTH 8
2931
#define EFX_WORD_0_LBN 0
3032
#define EFX_WORD_0_WIDTH 16
3133
#define EFX_WORD_1_LBN 16

drivers/net/ethernet/sfc/ef10.c

Lines changed: 130 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1396,7 +1396,7 @@ static void efx_ef10_table_reset_mc_allocations(struct efx_nic *efx)
13961396
efx_mcdi_filter_table_reset_mc_allocations(efx);
13971397
nic_data->must_restore_piobufs = true;
13981398
efx_ef10_forget_old_piobufs(efx);
1399-
efx->rss_context.context_id = EFX_MCDI_RSS_CONTEXT_INVALID;
1399+
efx->rss_context.priv.context_id = EFX_MCDI_RSS_CONTEXT_INVALID;
14001400

14011401
/* Driver-created vswitches and vports must be re-created */
14021402
nic_data->must_probe_vswitching = true;
@@ -3706,13 +3706,13 @@ static int efx_ef10_ptp_set_ts_sync_events(struct efx_nic *efx, bool en,
37063706
}
37073707

37083708
static int efx_ef10_ptp_set_ts_config_vf(struct efx_nic *efx,
3709-
struct hwtstamp_config *init)
3709+
struct kernel_hwtstamp_config *init)
37103710
{
37113711
return -EOPNOTSUPP;
37123712
}
37133713

37143714
static int efx_ef10_ptp_set_ts_config(struct efx_nic *efx,
3715-
struct hwtstamp_config *init)
3715+
struct kernel_hwtstamp_config *init)
37163716
{
37173717
int rc;
37183718

@@ -4302,3 +4302,130 @@ const struct efx_nic_type efx_hunt_a0_nic_type = {
43024302
.sensor_event = efx_mcdi_sensor_event,
43034303
.rx_recycle_ring_size = efx_ef10_recycle_ring_size,
43044304
};
4305+
4306+
const struct efx_nic_type efx_x4_nic_type = {
4307+
.is_vf = false,
4308+
.mem_bar = efx_ef10_pf_mem_bar,
4309+
.mem_map_size = efx_ef10_mem_map_size,
4310+
.probe = efx_ef10_probe_pf,
4311+
.remove = efx_ef10_remove,
4312+
.dimension_resources = efx_ef10_dimension_resources,
4313+
.init = efx_ef10_init_nic,
4314+
.fini = efx_ef10_fini_nic,
4315+
.map_reset_reason = efx_ef10_map_reset_reason,
4316+
.map_reset_flags = efx_ef10_map_reset_flags,
4317+
.reset = efx_ef10_reset,
4318+
.probe_port = efx_mcdi_port_probe,
4319+
.remove_port = efx_mcdi_port_remove,
4320+
.fini_dmaq = efx_fini_dmaq,
4321+
.prepare_flr = efx_ef10_prepare_flr,
4322+
.finish_flr = efx_port_dummy_op_void,
4323+
.describe_stats = efx_ef10_describe_stats,
4324+
.update_stats = efx_ef10_update_stats_pf,
4325+
.start_stats = efx_mcdi_mac_start_stats,
4326+
.pull_stats = efx_mcdi_mac_pull_stats,
4327+
.stop_stats = efx_mcdi_mac_stop_stats,
4328+
.push_irq_moderation = efx_ef10_push_irq_moderation,
4329+
.reconfigure_mac = efx_ef10_mac_reconfigure,
4330+
.check_mac_fault = efx_mcdi_mac_check_fault,
4331+
.reconfigure_port = efx_mcdi_port_reconfigure,
4332+
.get_wol = efx_ef10_get_wol,
4333+
.set_wol = efx_ef10_set_wol,
4334+
.resume_wol = efx_port_dummy_op_void,
4335+
.get_fec_stats = efx_ef10_get_fec_stats,
4336+
.test_chip = efx_ef10_test_chip,
4337+
.test_nvram = efx_mcdi_nvram_test_all,
4338+
.mcdi_request = efx_ef10_mcdi_request,
4339+
.mcdi_poll_response = efx_ef10_mcdi_poll_response,
4340+
.mcdi_read_response = efx_ef10_mcdi_read_response,
4341+
.mcdi_poll_reboot = efx_ef10_mcdi_poll_reboot,
4342+
.mcdi_reboot_detected = efx_ef10_mcdi_reboot_detected,
4343+
.irq_enable_master = efx_port_dummy_op_void,
4344+
.irq_test_generate = efx_ef10_irq_test_generate,
4345+
.irq_disable_non_ev = efx_port_dummy_op_void,
4346+
.irq_handle_msi = efx_ef10_msi_interrupt,
4347+
.tx_probe = efx_ef10_tx_probe,
4348+
.tx_init = efx_ef10_tx_init,
4349+
.tx_write = efx_ef10_tx_write,
4350+
.tx_limit_len = efx_ef10_tx_limit_len,
4351+
.tx_enqueue = __efx_enqueue_skb,
4352+
.rx_push_rss_config = efx_mcdi_pf_rx_push_rss_config,
4353+
.rx_pull_rss_config = efx_mcdi_rx_pull_rss_config,
4354+
.rx_push_rss_context_config = efx_mcdi_rx_push_rss_context_config,
4355+
.rx_pull_rss_context_config = efx_mcdi_rx_pull_rss_context_config,
4356+
.rx_restore_rss_contexts = efx_mcdi_rx_restore_rss_contexts,
4357+
.rx_probe = efx_mcdi_rx_probe,
4358+
.rx_init = efx_mcdi_rx_init,
4359+
.rx_remove = efx_mcdi_rx_remove,
4360+
.rx_write = efx_ef10_rx_write,
4361+
.rx_defer_refill = efx_ef10_rx_defer_refill,
4362+
.rx_packet = __efx_rx_packet,
4363+
.ev_probe = efx_mcdi_ev_probe,
4364+
.ev_init = efx_ef10_ev_init,
4365+
.ev_fini = efx_mcdi_ev_fini,
4366+
.ev_remove = efx_mcdi_ev_remove,
4367+
.ev_process = efx_ef10_ev_process,
4368+
.ev_read_ack = efx_ef10_ev_read_ack,
4369+
.ev_test_generate = efx_ef10_ev_test_generate,
4370+
.filter_table_probe = efx_ef10_filter_table_probe,
4371+
.filter_table_restore = efx_mcdi_filter_table_restore,
4372+
.filter_table_remove = efx_ef10_filter_table_remove,
4373+
.filter_insert = efx_mcdi_filter_insert,
4374+
.filter_remove_safe = efx_mcdi_filter_remove_safe,
4375+
.filter_get_safe = efx_mcdi_filter_get_safe,
4376+
.filter_clear_rx = efx_mcdi_filter_clear_rx,
4377+
.filter_count_rx_used = efx_mcdi_filter_count_rx_used,
4378+
.filter_get_rx_id_limit = efx_mcdi_filter_get_rx_id_limit,
4379+
.filter_get_rx_ids = efx_mcdi_filter_get_rx_ids,
4380+
#ifdef CONFIG_RFS_ACCEL
4381+
.filter_rfs_expire_one = efx_mcdi_filter_rfs_expire_one,
4382+
#endif
4383+
#ifdef CONFIG_SFC_MTD
4384+
.mtd_probe = efx_ef10_mtd_probe,
4385+
.mtd_rename = efx_mcdi_mtd_rename,
4386+
.mtd_read = efx_mcdi_mtd_read,
4387+
.mtd_erase = efx_mcdi_mtd_erase,
4388+
.mtd_write = efx_mcdi_mtd_write,
4389+
.mtd_sync = efx_mcdi_mtd_sync,
4390+
#endif
4391+
.ptp_write_host_time = efx_ef10_ptp_write_host_time,
4392+
.ptp_set_ts_sync_events = efx_ef10_ptp_set_ts_sync_events,
4393+
.ptp_set_ts_config = efx_ef10_ptp_set_ts_config,
4394+
.vlan_rx_add_vid = efx_ef10_vlan_rx_add_vid,
4395+
.vlan_rx_kill_vid = efx_ef10_vlan_rx_kill_vid,
4396+
.udp_tnl_push_ports = efx_ef10_udp_tnl_push_ports,
4397+
.udp_tnl_has_port = efx_ef10_udp_tnl_has_port,
4398+
#ifdef CONFIG_SFC_SRIOV
4399+
/* currently set to the VF versions of these functions
4400+
* because SRIOV will be reimplemented later.
4401+
*/
4402+
.vswitching_probe = efx_ef10_vswitching_probe_vf,
4403+
.vswitching_restore = efx_ef10_vswitching_restore_vf,
4404+
.vswitching_remove = efx_ef10_vswitching_remove_vf,
4405+
#endif
4406+
.get_mac_address = efx_ef10_get_mac_address_pf,
4407+
.set_mac_address = efx_ef10_set_mac_address,
4408+
.tso_versions = efx_ef10_tso_versions,
4409+
4410+
.get_phys_port_id = efx_ef10_get_phys_port_id,
4411+
.revision = EFX_REV_X4,
4412+
.max_dma_mask = DMA_BIT_MASK(ESF_DZ_TX_KER_BUF_ADDR_WIDTH),
4413+
.rx_prefix_size = ES_DZ_RX_PREFIX_SIZE,
4414+
.rx_hash_offset = ES_DZ_RX_PREFIX_HASH_OFST,
4415+
.rx_ts_offset = ES_DZ_RX_PREFIX_TSTAMP_OFST,
4416+
.can_rx_scatter = true,
4417+
.always_rx_scatter = true,
4418+
.option_descriptors = true,
4419+
.min_interrupt_mode = EFX_INT_MODE_MSIX,
4420+
.timer_period_max = 1 << ERF_DD_EVQ_IND_TIMER_VAL_WIDTH,
4421+
.offload_features = EF10_OFFLOAD_FEATURES,
4422+
.mcdi_max_ver = 2,
4423+
.max_rx_ip_filters = EFX_MCDI_FILTER_TBL_ROWS,
4424+
.hwtstamp_filters = 1 << HWTSTAMP_FILTER_NONE |
4425+
1 << HWTSTAMP_FILTER_ALL,
4426+
.check_caps = ef10_check_caps,
4427+
.print_additional_fwver = efx_ef10_print_additional_fwver,
4428+
.sensor_event = efx_mcdi_sensor_event,
4429+
.rx_recycle_ring_size = efx_ef10_recycle_ring_size,
4430+
};
4431+

drivers/net/ethernet/sfc/ef100_ethtool.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ ef100_ethtool_get_ringparam(struct net_device *net_dev,
3737
/* Ethtool options available
3838
*/
3939
const struct ethtool_ops ef100_ethtool_ops = {
40-
.cap_rss_ctx_supported = true,
4140
.get_drvinfo = efx_ethtool_get_drvinfo,
4241
.get_msglevel = efx_ethtool_get_msglevel,
4342
.set_msglevel = efx_ethtool_set_msglevel,
@@ -60,8 +59,12 @@ const struct ethtool_ops ef100_ethtool_ops = {
6059
.get_rxfh_indir_size = efx_ethtool_get_rxfh_indir_size,
6160
.get_rxfh_key_size = efx_ethtool_get_rxfh_key_size,
6261
.rxfh_per_ctx_key = true,
62+
.rxfh_priv_size = sizeof(struct efx_rss_context_priv),
6363
.get_rxfh = efx_ethtool_get_rxfh,
6464
.set_rxfh = efx_ethtool_set_rxfh,
65+
.create_rxfh_context = efx_ethtool_create_rxfh_context,
66+
.modify_rxfh_context = efx_ethtool_modify_rxfh_context,
67+
.remove_rxfh_context = efx_ethtool_remove_rxfh_context,
6568

6669
.get_module_info = efx_ethtool_get_module_info,
6770
.get_module_eeprom = efx_ethtool_get_module_eeprom,

drivers/net/ethernet/sfc/ef100_nic.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1194,7 +1194,7 @@ int ef100_probe_netdev_pf(struct efx_nic *efx)
11941194
net_dev->features |= NETIF_F_HW_TC;
11951195
efx->fixed_features |= NETIF_F_HW_TC;
11961196
}
1197-
return rc;
1197+
return 0;
11981198
}
11991199

12001200
int ef100_probe_vf(struct efx_nic *efx)

drivers/net/ethernet/sfc/efx.c

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -299,7 +299,7 @@ static int efx_probe_nic(struct efx_nic *efx)
299299
if (efx->n_channels > 1)
300300
netdev_rss_key_fill(efx->rss_context.rx_hash_key,
301301
sizeof(efx->rss_context.rx_hash_key));
302-
efx_set_default_rx_indir_table(efx, &efx->rss_context);
302+
efx_set_default_rx_indir_table(efx, efx->rss_context.rx_indir_table);
303303

304304
/* Initialise the interrupt moderation settings */
305305
efx->irq_mod_step_us = DIV_ROUND_UP(efx->timer_quantum_ns, 1000);
@@ -495,11 +495,6 @@ static int efx_ioctl(struct net_device *net_dev, struct ifreq *ifr, int cmd)
495495
struct efx_nic *efx = efx_netdev_priv(net_dev);
496496
struct mii_ioctl_data *data = if_mii(ifr);
497497

498-
if (cmd == SIOCSHWTSTAMP)
499-
return efx_ptp_set_ts_config(efx, ifr);
500-
if (cmd == SIOCGHWTSTAMP)
501-
return efx_ptp_get_ts_config(efx, ifr);
502-
503498
/* Convert phy_id from older PRTAD/DEVAD format */
504499
if ((cmd == SIOCGMIIREG || cmd == SIOCSMIIREG) &&
505500
(data->phy_id & 0xfc00) == 0x0400)
@@ -581,6 +576,23 @@ static int efx_vlan_rx_kill_vid(struct net_device *net_dev, __be16 proto, u16 vi
581576
return -EOPNOTSUPP;
582577
}
583578

579+
static int efx_hwtstamp_set(struct net_device *net_dev,
580+
struct kernel_hwtstamp_config *config,
581+
struct netlink_ext_ack *extack)
582+
{
583+
struct efx_nic *efx = efx_netdev_priv(net_dev);
584+
585+
return efx_ptp_set_ts_config(efx, config, extack);
586+
}
587+
588+
static int efx_hwtstamp_get(struct net_device *net_dev,
589+
struct kernel_hwtstamp_config *config)
590+
{
591+
struct efx_nic *efx = efx_netdev_priv(net_dev);
592+
593+
return efx_ptp_get_ts_config(efx, config);
594+
}
595+
584596
static const struct net_device_ops efx_netdev_ops = {
585597
.ndo_open = efx_net_open,
586598
.ndo_stop = efx_net_stop,
@@ -596,6 +608,8 @@ static const struct net_device_ops efx_netdev_ops = {
596608
.ndo_features_check = efx_features_check,
597609
.ndo_vlan_rx_add_vid = efx_vlan_rx_add_vid,
598610
.ndo_vlan_rx_kill_vid = efx_vlan_rx_kill_vid,
611+
.ndo_hwtstamp_set = efx_hwtstamp_set,
612+
.ndo_hwtstamp_get = efx_hwtstamp_get,
599613
#ifdef CONFIG_SFC_SRIOV
600614
.ndo_set_vf_mac = efx_sriov_set_vf_mac,
601615
.ndo_set_vf_vlan = efx_sriov_set_vf_vlan,
@@ -807,6 +821,10 @@ static const struct pci_device_id efx_pci_table[] = {
807821
.driver_data = (unsigned long) &efx_hunt_a0_nic_type},
808822
{PCI_DEVICE(PCI_VENDOR_ID_SOLARFLARE, 0x1b03), /* SFC9250 VF */
809823
.driver_data = (unsigned long) &efx_hunt_a0_vf_nic_type},
824+
{PCI_DEVICE(PCI_VENDOR_ID_SOLARFLARE, 0x0c03), /* X4 PF (FF/LL) */
825+
.driver_data = (unsigned long)&efx_x4_nic_type},
826+
{PCI_DEVICE(PCI_VENDOR_ID_SOLARFLARE, 0x2c03), /* X4 PF (FF only) */
827+
.driver_data = (unsigned long)&efx_x4_nic_type},
810828
{0} /* end of list */
811829
};
812830

drivers/net/ethernet/sfc/efx.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ static inline s32 efx_filter_get_rx_ids(struct efx_nic *efx,
158158
}
159159

160160
/* RSS contexts */
161-
static inline bool efx_rss_active(struct efx_rss_context *ctx)
161+
static inline bool efx_rss_active(struct efx_rss_context_priv *ctx)
162162
{
163163
return ctx->context_id != EFX_MCDI_RSS_CONTEXT_INVALID;
164164
}

drivers/net/ethernet/sfc/efx_channels.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1260,7 +1260,8 @@ static int efx_poll(struct napi_struct *napi, int budget)
12601260

12611261
spent = efx_process_channel(channel, budget);
12621262

1263-
xdp_do_flush_map();
1263+
if (budget)
1264+
xdp_do_flush();
12641265

12651266
if (spent < budget) {
12661267
if (efx_channel_has_rx_queue(channel) &&

drivers/net/ethernet/sfc/efx_common.c

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -714,7 +714,7 @@ void efx_reset_down(struct efx_nic *efx, enum reset_type method)
714714

715715
mutex_lock(&efx->mac_lock);
716716
down_write(&efx->filter_sem);
717-
mutex_lock(&efx->rss_lock);
717+
mutex_lock(&efx->net_dev->ethtool->rss_lock);
718718
efx->type->fini(efx);
719719
}
720720

@@ -777,7 +777,7 @@ int efx_reset_up(struct efx_nic *efx, enum reset_type method, bool ok)
777777

778778
if (efx->type->rx_restore_rss_contexts)
779779
efx->type->rx_restore_rss_contexts(efx);
780-
mutex_unlock(&efx->rss_lock);
780+
mutex_unlock(&efx->net_dev->ethtool->rss_lock);
781781
efx->type->filter_table_restore(efx);
782782
up_write(&efx->filter_sem);
783783

@@ -793,7 +793,7 @@ int efx_reset_up(struct efx_nic *efx, enum reset_type method, bool ok)
793793
fail:
794794
efx->port_initialized = false;
795795

796-
mutex_unlock(&efx->rss_lock);
796+
mutex_unlock(&efx->net_dev->ethtool->rss_lock);
797797
up_write(&efx->filter_sem);
798798
mutex_unlock(&efx->mac_lock);
799799

@@ -1000,9 +1000,7 @@ int efx_init_struct(struct efx_nic *efx, struct pci_dev *pci_dev)
10001000
efx->type->rx_hash_offset - efx->type->rx_prefix_size;
10011001
efx->rx_packet_ts_offset =
10021002
efx->type->rx_ts_offset - efx->type->rx_prefix_size;
1003-
INIT_LIST_HEAD(&efx->rss_context.list);
1004-
efx->rss_context.context_id = EFX_MCDI_RSS_CONTEXT_INVALID;
1005-
mutex_init(&efx->rss_lock);
1003+
efx->rss_context.priv.context_id = EFX_MCDI_RSS_CONTEXT_INVALID;
10061004
efx->vport_id = EVB_PORT_ID_ASSIGNED;
10071005
spin_lock_init(&efx->stats_lock);
10081006
efx->vi_stride = EFX_DEFAULT_VI_STRIDE;

drivers/net/ethernet/sfc/ethtool.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,6 @@ static int efx_ethtool_get_ts_info(struct net_device *net_dev,
235235
}
236236

237237
const struct ethtool_ops efx_ethtool_ops = {
238-
.cap_rss_ctx_supported = true,
239238
.supported_coalesce_params = ETHTOOL_COALESCE_USECS |
240239
ETHTOOL_COALESCE_USECS_IRQ |
241240
ETHTOOL_COALESCE_USE_ADAPTIVE_RX,
@@ -264,8 +263,12 @@ const struct ethtool_ops efx_ethtool_ops = {
264263
.get_rxfh_indir_size = efx_ethtool_get_rxfh_indir_size,
265264
.get_rxfh_key_size = efx_ethtool_get_rxfh_key_size,
266265
.rxfh_per_ctx_key = true,
266+
.rxfh_priv_size = sizeof(struct efx_rss_context_priv),
267267
.get_rxfh = efx_ethtool_get_rxfh,
268268
.set_rxfh = efx_ethtool_set_rxfh,
269+
.create_rxfh_context = efx_ethtool_create_rxfh_context,
270+
.modify_rxfh_context = efx_ethtool_modify_rxfh_context,
271+
.remove_rxfh_context = efx_ethtool_remove_rxfh_context,
269272
.get_ts_info = efx_ethtool_get_ts_info,
270273
.get_module_info = efx_ethtool_get_module_info,
271274
.get_module_eeprom = efx_ethtool_get_module_eeprom,

0 commit comments

Comments
 (0)