forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
mlxsw: spectrum: Extend to support Spectrum-3 ASIC
Extend existing driver for Spectrum and Spectrum-2 ASICs to support Spectrum-3 ASIC as well. Signed-off-by: Jiri Pirko <[email protected]> Reviewed-by: Petr Machata <[email protected]> Signed-off-by: Ido Schimmel <[email protected]> Signed-off-by: David S. Miller <[email protected]>
- Loading branch information
Showing
3 changed files
with
59 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -65,6 +65,7 @@ static const struct mlxsw_fw_rev mlxsw_sp1_fw_rev = { | |
|
||
static const char mlxsw_sp1_driver_name[] = "mlxsw_spectrum"; | ||
static const char mlxsw_sp2_driver_name[] = "mlxsw_spectrum2"; | ||
static const char mlxsw_sp3_driver_name[] = "mlxsw_spectrum3"; | ||
static const char mlxsw_sp_driver_version[] = "1.0"; | ||
|
||
static const unsigned char mlxsw_sp1_mac_mask[ETH_ALEN] = { | ||
|
@@ -5290,6 +5291,35 @@ static struct mlxsw_driver mlxsw_sp2_driver = { | |
.res_query_enabled = true, | ||
}; | ||
|
||
static struct mlxsw_driver mlxsw_sp3_driver = { | ||
.kind = mlxsw_sp3_driver_name, | ||
.priv_size = sizeof(struct mlxsw_sp), | ||
.init = mlxsw_sp2_init, | ||
.fini = mlxsw_sp_fini, | ||
.basic_trap_groups_set = mlxsw_sp_basic_trap_groups_set, | ||
.port_split = mlxsw_sp_port_split, | ||
.port_unsplit = mlxsw_sp_port_unsplit, | ||
.sb_pool_get = mlxsw_sp_sb_pool_get, | ||
.sb_pool_set = mlxsw_sp_sb_pool_set, | ||
.sb_port_pool_get = mlxsw_sp_sb_port_pool_get, | ||
.sb_port_pool_set = mlxsw_sp_sb_port_pool_set, | ||
.sb_tc_pool_bind_get = mlxsw_sp_sb_tc_pool_bind_get, | ||
.sb_tc_pool_bind_set = mlxsw_sp_sb_tc_pool_bind_set, | ||
.sb_occ_snapshot = mlxsw_sp_sb_occ_snapshot, | ||
.sb_occ_max_clear = mlxsw_sp_sb_occ_max_clear, | ||
.sb_occ_port_pool_get = mlxsw_sp_sb_occ_port_pool_get, | ||
.sb_occ_tc_port_bind_get = mlxsw_sp_sb_occ_tc_port_bind_get, | ||
.flash_update = mlxsw_sp_flash_update, | ||
.txhdr_construct = mlxsw_sp_txhdr_construct, | ||
.resources_register = mlxsw_sp2_resources_register, | ||
.params_register = mlxsw_sp2_params_register, | ||
.params_unregister = mlxsw_sp2_params_unregister, | ||
.ptp_transmitted = mlxsw_sp_ptp_transmitted, | ||
.txhdr_len = MLXSW_TXHDR_LEN, | ||
.profile = &mlxsw_sp2_config_profile, | ||
.res_query_enabled = true, | ||
}; | ||
|
||
bool mlxsw_sp_port_dev_check(const struct net_device *dev) | ||
{ | ||
return dev->netdev_ops == &mlxsw_sp_port_netdev_ops; | ||
|
@@ -6324,6 +6354,16 @@ static struct pci_driver mlxsw_sp2_pci_driver = { | |
.id_table = mlxsw_sp2_pci_id_table, | ||
}; | ||
|
||
static const struct pci_device_id mlxsw_sp3_pci_id_table[] = { | ||
{PCI_VDEVICE(MELLANOX, PCI_DEVICE_ID_MELLANOX_SPECTRUM3), 0}, | ||
{0, }, | ||
}; | ||
|
||
static struct pci_driver mlxsw_sp3_pci_driver = { | ||
.name = mlxsw_sp3_driver_name, | ||
.id_table = mlxsw_sp3_pci_id_table, | ||
}; | ||
|
||
static int __init mlxsw_sp_module_init(void) | ||
{ | ||
int err; | ||
|
@@ -6339,6 +6379,10 @@ static int __init mlxsw_sp_module_init(void) | |
if (err) | ||
goto err_sp2_core_driver_register; | ||
|
||
err = mlxsw_core_driver_register(&mlxsw_sp3_driver); | ||
if (err) | ||
goto err_sp3_core_driver_register; | ||
|
||
err = mlxsw_pci_driver_register(&mlxsw_sp1_pci_driver); | ||
if (err) | ||
goto err_sp1_pci_driver_register; | ||
|
@@ -6347,11 +6391,19 @@ static int __init mlxsw_sp_module_init(void) | |
if (err) | ||
goto err_sp2_pci_driver_register; | ||
|
||
err = mlxsw_pci_driver_register(&mlxsw_sp3_pci_driver); | ||
if (err) | ||
goto err_sp3_pci_driver_register; | ||
|
||
return 0; | ||
|
||
err_sp3_pci_driver_register: | ||
mlxsw_pci_driver_unregister(&mlxsw_sp2_pci_driver); | ||
err_sp2_pci_driver_register: | ||
mlxsw_pci_driver_unregister(&mlxsw_sp1_pci_driver); | ||
err_sp1_pci_driver_register: | ||
mlxsw_core_driver_unregister(&mlxsw_sp3_driver); | ||
err_sp3_core_driver_register: | ||
mlxsw_core_driver_unregister(&mlxsw_sp2_driver); | ||
err_sp2_core_driver_register: | ||
mlxsw_core_driver_unregister(&mlxsw_sp1_driver); | ||
|
@@ -6363,8 +6415,10 @@ static int __init mlxsw_sp_module_init(void) | |
|
||
static void __exit mlxsw_sp_module_exit(void) | ||
{ | ||
mlxsw_pci_driver_unregister(&mlxsw_sp3_pci_driver); | ||
mlxsw_pci_driver_unregister(&mlxsw_sp2_pci_driver); | ||
mlxsw_pci_driver_unregister(&mlxsw_sp1_pci_driver); | ||
mlxsw_core_driver_unregister(&mlxsw_sp3_driver); | ||
mlxsw_core_driver_unregister(&mlxsw_sp2_driver); | ||
mlxsw_core_driver_unregister(&mlxsw_sp1_driver); | ||
unregister_inet6addr_validator_notifier(&mlxsw_sp_inet6addr_valid_nb); | ||
|
@@ -6379,4 +6433,5 @@ MODULE_AUTHOR("Jiri Pirko <[email protected]>"); | |
MODULE_DESCRIPTION("Mellanox Spectrum driver"); | ||
MODULE_DEVICE_TABLE(pci, mlxsw_sp1_pci_id_table); | ||
MODULE_DEVICE_TABLE(pci, mlxsw_sp2_pci_id_table); | ||
MODULE_DEVICE_TABLE(pci, mlxsw_sp3_pci_id_table); | ||
MODULE_FIRMWARE(MLXSW_SP1_FW_FILENAME); |