Skip to content

Commit cf06766

Browse files
jco-xilinxkuba-moo
authored andcommitted
sfc: Add X4 PF support
Add X4 series. Most functionality is the same as previous EF10 nics but enough is different to warrant a new nic type struct and revision; for example legacy interrupts and SRIOV are not supported. Most removed features will be re-added later as new implementations. Signed-off-by: Jonathan Cooper <[email protected]> Acked-by: Edward Cree <[email protected]> Acked-by: Martin Habets <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
1 parent af647fe commit cf06766

File tree

4 files changed

+134
-0
lines changed

4 files changed

+134
-0
lines changed

drivers/net/ethernet/sfc/ef10.c

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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/efx.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -821,6 +821,10 @@ static const struct pci_device_id efx_pci_table[] = {
821821
.driver_data = (unsigned long) &efx_hunt_a0_nic_type},
822822
{PCI_DEVICE(PCI_VENDOR_ID_SOLARFLARE, 0x1b03), /* SFC9250 VF */
823823
.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},
824828
{0} /* end of list */
825829
};
826830

drivers/net/ethernet/sfc/nic.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,4 +211,6 @@ int efx_ef10_tx_tso_desc(struct efx_tx_queue *tx_queue, struct sk_buff *skb,
211211
extern const struct efx_nic_type efx_hunt_a0_nic_type;
212212
extern const struct efx_nic_type efx_hunt_a0_vf_nic_type;
213213

214+
extern const struct efx_nic_type efx_x4_nic_type;
215+
214216
#endif /* EFX_NIC_H */

drivers/net/ethernet/sfc/nic_common.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ enum {
2121
*/
2222
EFX_REV_HUNT_A0 = 4,
2323
EFX_REV_EF100 = 5,
24+
EFX_REV_X4 = 6,
2425
};
2526

2627
static inline int efx_nic_rev(struct efx_nic *efx)

0 commit comments

Comments
 (0)