@@ -95,6 +95,7 @@ static const struct mlxsw_fw_rev mlxsw_sp3_fw_rev = {
95
95
static const char mlxsw_sp1_driver_name [] = "mlxsw_spectrum" ;
96
96
static const char mlxsw_sp2_driver_name [] = "mlxsw_spectrum2" ;
97
97
static const char mlxsw_sp3_driver_name [] = "mlxsw_spectrum3" ;
98
+ static const char mlxsw_sp4_driver_name [] = "mlxsw_spectrum4" ;
98
99
99
100
static const unsigned char mlxsw_sp1_mac_mask [ETH_ALEN ] = {
100
101
0xff , 0xff , 0xff , 0xff , 0xfc , 0x00
@@ -3155,6 +3156,7 @@ static int mlxsw_sp2_init(struct mlxsw_core *mlxsw_core,
3155
3156
mlxsw_sp -> mr_tcam_ops = & mlxsw_sp2_mr_tcam_ops ;
3156
3157
mlxsw_sp -> acl_rulei_ops = & mlxsw_sp2_acl_rulei_ops ;
3157
3158
mlxsw_sp -> acl_tcam_ops = & mlxsw_sp2_acl_tcam_ops ;
3159
+ mlxsw_sp -> acl_bf_ops = & mlxsw_sp2_acl_bf_ops ;
3158
3160
mlxsw_sp -> nve_ops_arr = mlxsw_sp2_nve_ops_arr ;
3159
3161
mlxsw_sp -> mac_mask = mlxsw_sp2_mac_mask ;
3160
3162
mlxsw_sp -> sb_vals = & mlxsw_sp2_sb_vals ;
@@ -3184,6 +3186,7 @@ static int mlxsw_sp3_init(struct mlxsw_core *mlxsw_core,
3184
3186
mlxsw_sp -> mr_tcam_ops = & mlxsw_sp2_mr_tcam_ops ;
3185
3187
mlxsw_sp -> acl_rulei_ops = & mlxsw_sp2_acl_rulei_ops ;
3186
3188
mlxsw_sp -> acl_tcam_ops = & mlxsw_sp2_acl_tcam_ops ;
3189
+ mlxsw_sp -> acl_bf_ops = & mlxsw_sp2_acl_bf_ops ;
3187
3190
mlxsw_sp -> nve_ops_arr = mlxsw_sp2_nve_ops_arr ;
3188
3191
mlxsw_sp -> mac_mask = mlxsw_sp2_mac_mask ;
3189
3192
mlxsw_sp -> sb_vals = & mlxsw_sp2_sb_vals ;
@@ -3200,6 +3203,36 @@ static int mlxsw_sp3_init(struct mlxsw_core *mlxsw_core,
3200
3203
return mlxsw_sp_init (mlxsw_core , mlxsw_bus_info , extack );
3201
3204
}
3202
3205
3206
+ static int mlxsw_sp4_init (struct mlxsw_core * mlxsw_core ,
3207
+ const struct mlxsw_bus_info * mlxsw_bus_info ,
3208
+ struct netlink_ext_ack * extack )
3209
+ {
3210
+ struct mlxsw_sp * mlxsw_sp = mlxsw_core_driver_priv (mlxsw_core );
3211
+
3212
+ mlxsw_sp -> switchdev_ops = & mlxsw_sp2_switchdev_ops ;
3213
+ mlxsw_sp -> kvdl_ops = & mlxsw_sp2_kvdl_ops ;
3214
+ mlxsw_sp -> afa_ops = & mlxsw_sp2_act_afa_ops ;
3215
+ mlxsw_sp -> afk_ops = & mlxsw_sp4_afk_ops ;
3216
+ mlxsw_sp -> mr_tcam_ops = & mlxsw_sp2_mr_tcam_ops ;
3217
+ mlxsw_sp -> acl_rulei_ops = & mlxsw_sp2_acl_rulei_ops ;
3218
+ mlxsw_sp -> acl_tcam_ops = & mlxsw_sp2_acl_tcam_ops ;
3219
+ mlxsw_sp -> acl_bf_ops = & mlxsw_sp4_acl_bf_ops ;
3220
+ mlxsw_sp -> nve_ops_arr = mlxsw_sp2_nve_ops_arr ;
3221
+ mlxsw_sp -> mac_mask = mlxsw_sp2_mac_mask ;
3222
+ mlxsw_sp -> sb_vals = & mlxsw_sp2_sb_vals ;
3223
+ mlxsw_sp -> sb_ops = & mlxsw_sp3_sb_ops ;
3224
+ mlxsw_sp -> port_type_speed_ops = & mlxsw_sp2_port_type_speed_ops ;
3225
+ mlxsw_sp -> ptp_ops = & mlxsw_sp2_ptp_ops ;
3226
+ mlxsw_sp -> span_ops = & mlxsw_sp3_span_ops ;
3227
+ mlxsw_sp -> policer_core_ops = & mlxsw_sp2_policer_core_ops ;
3228
+ mlxsw_sp -> trap_ops = & mlxsw_sp2_trap_ops ;
3229
+ mlxsw_sp -> mall_ops = & mlxsw_sp2_mall_ops ;
3230
+ mlxsw_sp -> router_ops = & mlxsw_sp2_router_ops ;
3231
+ mlxsw_sp -> lowest_shaper_bs = MLXSW_REG_QEEC_LOWEST_SHAPER_BS_SP4 ;
3232
+
3233
+ return mlxsw_sp_init (mlxsw_core , mlxsw_bus_info , extack );
3234
+ }
3235
+
3203
3236
static void mlxsw_sp_fini (struct mlxsw_core * mlxsw_core )
3204
3237
{
3205
3238
struct mlxsw_sp * mlxsw_sp = mlxsw_core_driver_priv (mlxsw_core );
@@ -3759,6 +3792,45 @@ static struct mlxsw_driver mlxsw_sp3_driver = {
3759
3792
.temp_warn_enabled = true,
3760
3793
};
3761
3794
3795
+ static struct mlxsw_driver mlxsw_sp4_driver = {
3796
+ .kind = mlxsw_sp4_driver_name ,
3797
+ .priv_size = sizeof (struct mlxsw_sp ),
3798
+ .init = mlxsw_sp4_init ,
3799
+ .fini = mlxsw_sp_fini ,
3800
+ .basic_trap_groups_set = mlxsw_sp_basic_trap_groups_set ,
3801
+ .port_split = mlxsw_sp_port_split ,
3802
+ .port_unsplit = mlxsw_sp_port_unsplit ,
3803
+ .sb_pool_get = mlxsw_sp_sb_pool_get ,
3804
+ .sb_pool_set = mlxsw_sp_sb_pool_set ,
3805
+ .sb_port_pool_get = mlxsw_sp_sb_port_pool_get ,
3806
+ .sb_port_pool_set = mlxsw_sp_sb_port_pool_set ,
3807
+ .sb_tc_pool_bind_get = mlxsw_sp_sb_tc_pool_bind_get ,
3808
+ .sb_tc_pool_bind_set = mlxsw_sp_sb_tc_pool_bind_set ,
3809
+ .sb_occ_snapshot = mlxsw_sp_sb_occ_snapshot ,
3810
+ .sb_occ_max_clear = mlxsw_sp_sb_occ_max_clear ,
3811
+ .sb_occ_port_pool_get = mlxsw_sp_sb_occ_port_pool_get ,
3812
+ .sb_occ_tc_port_bind_get = mlxsw_sp_sb_occ_tc_port_bind_get ,
3813
+ .trap_init = mlxsw_sp_trap_init ,
3814
+ .trap_fini = mlxsw_sp_trap_fini ,
3815
+ .trap_action_set = mlxsw_sp_trap_action_set ,
3816
+ .trap_group_init = mlxsw_sp_trap_group_init ,
3817
+ .trap_group_set = mlxsw_sp_trap_group_set ,
3818
+ .trap_policer_init = mlxsw_sp_trap_policer_init ,
3819
+ .trap_policer_fini = mlxsw_sp_trap_policer_fini ,
3820
+ .trap_policer_set = mlxsw_sp_trap_policer_set ,
3821
+ .trap_policer_counter_get = mlxsw_sp_trap_policer_counter_get ,
3822
+ .txhdr_construct = mlxsw_sp_txhdr_construct ,
3823
+ .resources_register = mlxsw_sp2_resources_register ,
3824
+ .params_register = mlxsw_sp2_params_register ,
3825
+ .params_unregister = mlxsw_sp2_params_unregister ,
3826
+ .ptp_transmitted = mlxsw_sp_ptp_transmitted ,
3827
+ .txhdr_len = MLXSW_TXHDR_LEN ,
3828
+ .profile = & mlxsw_sp2_config_profile ,
3829
+ .res_query_enabled = true,
3830
+ .fw_fatal_enabled = true,
3831
+ .temp_warn_enabled = true,
3832
+ };
3833
+
3762
3834
bool mlxsw_sp_port_dev_check (const struct net_device * dev )
3763
3835
{
3764
3836
return dev -> netdev_ops == & mlxsw_sp_port_netdev_ops ;
@@ -4926,6 +4998,16 @@ static struct pci_driver mlxsw_sp3_pci_driver = {
4926
4998
.id_table = mlxsw_sp3_pci_id_table ,
4927
4999
};
4928
5000
5001
+ static const struct pci_device_id mlxsw_sp4_pci_id_table [] = {
5002
+ {PCI_VDEVICE (MELLANOX , PCI_DEVICE_ID_MELLANOX_SPECTRUM4 ), 0 },
5003
+ {0 , },
5004
+ };
5005
+
5006
+ static struct pci_driver mlxsw_sp4_pci_driver = {
5007
+ .name = mlxsw_sp4_driver_name ,
5008
+ .id_table = mlxsw_sp4_pci_id_table ,
5009
+ };
5010
+
4929
5011
static int __init mlxsw_sp_module_init (void )
4930
5012
{
4931
5013
int err ;
@@ -4945,6 +5027,10 @@ static int __init mlxsw_sp_module_init(void)
4945
5027
if (err )
4946
5028
goto err_sp3_core_driver_register ;
4947
5029
5030
+ err = mlxsw_core_driver_register (& mlxsw_sp4_driver );
5031
+ if (err )
5032
+ goto err_sp4_core_driver_register ;
5033
+
4948
5034
err = mlxsw_pci_driver_register (& mlxsw_sp1_pci_driver );
4949
5035
if (err )
4950
5036
goto err_sp1_pci_driver_register ;
@@ -4957,13 +5043,21 @@ static int __init mlxsw_sp_module_init(void)
4957
5043
if (err )
4958
5044
goto err_sp3_pci_driver_register ;
4959
5045
5046
+ err = mlxsw_pci_driver_register (& mlxsw_sp4_pci_driver );
5047
+ if (err )
5048
+ goto err_sp4_pci_driver_register ;
5049
+
4960
5050
return 0 ;
4961
5051
5052
+ err_sp4_pci_driver_register :
5053
+ mlxsw_pci_driver_unregister (& mlxsw_sp3_pci_driver );
4962
5054
err_sp3_pci_driver_register :
4963
5055
mlxsw_pci_driver_unregister (& mlxsw_sp2_pci_driver );
4964
5056
err_sp2_pci_driver_register :
4965
5057
mlxsw_pci_driver_unregister (& mlxsw_sp1_pci_driver );
4966
5058
err_sp1_pci_driver_register :
5059
+ mlxsw_core_driver_unregister (& mlxsw_sp4_driver );
5060
+ err_sp4_core_driver_register :
4967
5061
mlxsw_core_driver_unregister (& mlxsw_sp3_driver );
4968
5062
err_sp3_core_driver_register :
4969
5063
mlxsw_core_driver_unregister (& mlxsw_sp2_driver );
@@ -4977,9 +5071,11 @@ static int __init mlxsw_sp_module_init(void)
4977
5071
4978
5072
static void __exit mlxsw_sp_module_exit (void )
4979
5073
{
5074
+ mlxsw_pci_driver_unregister (& mlxsw_sp4_pci_driver );
4980
5075
mlxsw_pci_driver_unregister (& mlxsw_sp3_pci_driver );
4981
5076
mlxsw_pci_driver_unregister (& mlxsw_sp2_pci_driver );
4982
5077
mlxsw_pci_driver_unregister (& mlxsw_sp1_pci_driver );
5078
+ mlxsw_core_driver_unregister (& mlxsw_sp4_driver );
4983
5079
mlxsw_core_driver_unregister (& mlxsw_sp3_driver );
4984
5080
mlxsw_core_driver_unregister (& mlxsw_sp2_driver );
4985
5081
mlxsw_core_driver_unregister (& mlxsw_sp1_driver );
@@ -4996,6 +5092,7 @@ MODULE_DESCRIPTION("Mellanox Spectrum driver");
4996
5092
MODULE_DEVICE_TABLE (pci , mlxsw_sp1_pci_id_table );
4997
5093
MODULE_DEVICE_TABLE (pci , mlxsw_sp2_pci_id_table );
4998
5094
MODULE_DEVICE_TABLE (pci , mlxsw_sp3_pci_id_table );
5095
+ MODULE_DEVICE_TABLE (pci , mlxsw_sp4_pci_id_table );
4999
5096
MODULE_FIRMWARE (MLXSW_SP1_FW_FILENAME );
5000
5097
MODULE_FIRMWARE (MLXSW_SP2_FW_FILENAME );
5001
5098
MODULE_FIRMWARE (MLXSW_SP3_FW_FILENAME );
0 commit comments