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] = {
        .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;
        .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;
        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;
        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);
 
 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);
 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);