return err;
        }
 
-       hinic_devlink_register(hwdev->devlink_dev);
        err = hinic_func_to_func_init(hwdev);
        if (err) {
                dev_err(&hwif->pdev->dev, "Failed to init mailbox\n");
-               hinic_devlink_unregister(hwdev->devlink_dev);
                hinic_pf_to_mgmt_free(&pfhwdev->pf_to_mgmt);
                return err;
        }
        }
 
        hinic_set_pf_action(hwif, HINIC_PF_MGMT_ACTIVE);
-
+       hinic_devlink_register(hwdev->devlink_dev);
        return 0;
 }
 
 {
        struct hinic_hwdev *hwdev = &pfhwdev->hwdev;
 
+       hinic_devlink_unregister(hwdev->devlink_dev);
        hinic_set_pf_action(hwdev->hwif, HINIC_PF_MGMT_INIT);
 
        if (!HINIC_IS_VF(hwdev->hwif)) {
 
        hinic_func_to_func_free(hwdev);
 
-       hinic_devlink_unregister(hwdev->devlink_dev);
-
        hinic_pf_to_mgmt_free(&pfhwdev->pf_to_mgmt);
 }