WARN_ON(cmd != DEVLINK_CMD_PARAM_NEW && cmd != DEVLINK_CMD_PARAM_DEL &&
                cmd != DEVLINK_CMD_PORT_PARAM_NEW &&
                cmd != DEVLINK_CMD_PORT_PARAM_DEL);
-       ASSERT_DEVLINK_REGISTERED(devlink);
+
+       /* devlink_notify_register() / devlink_notify_unregister()
+        * will replay the notifications if the params are added/removed
+        * outside of the lifetime of the instance.
+        */
+       if (!devl_is_registered(devlink))
+               return;
 
        msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
        if (!msg)
        const struct devlink_param *param = params;
        int i, err;
 
-       ASSERT_DEVLINK_NOT_REGISTERED(devlink);
-
        for (i = 0; i < params_count; i++, param++) {
                err = devlink_param_register(devlink, param);
                if (err)
        const struct devlink_param *param = params;
        int i;
 
-       ASSERT_DEVLINK_NOT_REGISTERED(devlink);
-
        for (i = 0; i < params_count; i++, param++)
                devlink_param_unregister(devlink, param);
 }
 {
        struct devlink_param_item *param_item;
 
-       ASSERT_DEVLINK_NOT_REGISTERED(devlink);
-
        WARN_ON(devlink_param_verify(param));
        WARN_ON(devlink_param_find_by_name(&devlink->param_list, param->name));
 
        param_item->param = param;
 
        list_add_tail(¶m_item->list, &devlink->param_list);
+       devlink_param_notify(devlink, 0, param_item, DEVLINK_CMD_PARAM_NEW);
        return 0;
 }
 EXPORT_SYMBOL_GPL(devlink_param_register);
 {
        struct devlink_param_item *param_item;
 
-       ASSERT_DEVLINK_NOT_REGISTERED(devlink);
-
        param_item =
                devlink_param_find_by_name(&devlink->param_list, param->name);
        WARN_ON(!param_item);
+       devlink_param_notify(devlink, 0, param_item, DEVLINK_CMD_PARAM_DEL);
        list_del(¶m_item->list);
        kfree(param_item);
 }
 {
        struct devlink_param_item *param_item;
 
-       ASSERT_DEVLINK_NOT_REGISTERED(devlink);
-
        param_item = devlink_param_find_by_id(&devlink->param_list, param_id);
        if (!param_item)
                return -EINVAL;
        else
                param_item->driverinit_value = init_val;
        param_item->driverinit_value_valid = true;
+
+       devlink_param_notify(devlink, 0, param_item, DEVLINK_CMD_PARAM_NEW);
        return 0;
 }
 EXPORT_SYMBOL_GPL(devlink_param_driverinit_value_set);