return mlxsw_core_bus_device_register(mlxsw_core->bus_info,
                                              mlxsw_core->bus,
                                              mlxsw_core->bus_priv, true,
-                                             devlink);
+                                             devlink, extack);
 }
 
 static int mlxsw_devlink_flash_update(struct devlink *devlink,
 __mlxsw_core_bus_device_register(const struct mlxsw_bus_info *mlxsw_bus_info,
                                 const struct mlxsw_bus *mlxsw_bus,
                                 void *bus_priv, bool reload,
-                                struct devlink *devlink)
+                                struct devlink *devlink,
+                                struct netlink_ext_ack *extack)
 {
        const char *device_kind = mlxsw_bus_info->device_kind;
        struct mlxsw_core *mlxsw_core;
        }
 
        if (mlxsw_driver->init) {
-               err = mlxsw_driver->init(mlxsw_core, mlxsw_bus_info);
+               err = mlxsw_driver->init(mlxsw_core, mlxsw_bus_info, extack);
                if (err)
                        goto err_driver_init;
        }
 int mlxsw_core_bus_device_register(const struct mlxsw_bus_info *mlxsw_bus_info,
                                   const struct mlxsw_bus *mlxsw_bus,
                                   void *bus_priv, bool reload,
-                                  struct devlink *devlink)
+                                  struct devlink *devlink,
+                                  struct netlink_ext_ack *extack)
 {
        bool called_again = false;
        int err;
 
 again:
        err = __mlxsw_core_bus_device_register(mlxsw_bus_info, mlxsw_bus,
-                                              bus_priv, reload, devlink);
+                                              bus_priv, reload,
+                                              devlink, extack);
        /* -EAGAIN is returned in case the FW was updated. FW needs
         * a reset, so lets try to call __mlxsw_core_bus_device_register()
         * again.
 
 int mlxsw_core_bus_device_register(const struct mlxsw_bus_info *mlxsw_bus_info,
                                   const struct mlxsw_bus *mlxsw_bus,
                                   void *bus_priv, bool reload,
-                                  struct devlink *devlink);
+                                  struct devlink *devlink,
+                                  struct netlink_ext_ack *extack);
 void mlxsw_core_bus_device_unregister(struct mlxsw_core *mlxsw_core, bool reload);
 
 struct mlxsw_tx_info {
        const char *kind;
        size_t priv_size;
        int (*init)(struct mlxsw_core *mlxsw_core,
-                   const struct mlxsw_bus_info *mlxsw_bus_info);
+                   const struct mlxsw_bus_info *mlxsw_bus_info,
+                   struct netlink_ext_ack *extack);
        void (*fini)(struct mlxsw_core *mlxsw_core);
        int (*basic_trap_groups_set)(struct mlxsw_core *mlxsw_core);
        int (*port_type_set)(struct mlxsw_core *mlxsw_core, u8 local_port,
 
 
        err = mlxsw_core_bus_device_register(&mlxsw_i2c->bus_info,
                                             &mlxsw_i2c_bus, mlxsw_i2c, false,
-                                            NULL);
+                                            NULL, NULL);
        if (err) {
                dev_err(&client->dev, "Fail to register core bus\n");
                return err;
 
 }
 
 static int mlxsw_m_init(struct mlxsw_core *mlxsw_core,
-                       const struct mlxsw_bus_info *mlxsw_bus_info)
+                       const struct mlxsw_bus_info *mlxsw_bus_info,
+                       struct netlink_ext_ack *extack)
 {
        struct mlxsw_m *mlxsw_m = mlxsw_core_driver_priv(mlxsw_core);
        int err;
 
 
        err = mlxsw_core_bus_device_register(&mlxsw_pci->bus_info,
                                             &mlxsw_pci_bus, mlxsw_pci, false,
-                                            NULL);
+                                            NULL, NULL);
        if (err) {
                dev_err(&pdev->dev, "cannot register bus device\n");
                goto err_bus_device_register;
 
                                    unsigned long event, void *ptr);
 
 static int mlxsw_sp_init(struct mlxsw_core *mlxsw_core,
-                        const struct mlxsw_bus_info *mlxsw_bus_info)
+                        const struct mlxsw_bus_info *mlxsw_bus_info,
+                        struct netlink_ext_ack *extack)
 {
        struct mlxsw_sp *mlxsw_sp = mlxsw_core_driver_priv(mlxsw_core);
        int err;
                goto err_acl_init;
        }
 
-       err = mlxsw_sp_router_init(mlxsw_sp);
+       err = mlxsw_sp_router_init(mlxsw_sp, extack);
        if (err) {
                dev_err(mlxsw_sp->bus_info->dev, "Failed to initialize router\n");
                goto err_router_init;
 }
 
 static int mlxsw_sp1_init(struct mlxsw_core *mlxsw_core,
-                         const struct mlxsw_bus_info *mlxsw_bus_info)
+                         const struct mlxsw_bus_info *mlxsw_bus_info,
+                         struct netlink_ext_ack *extack)
 {
        struct mlxsw_sp *mlxsw_sp = mlxsw_core_driver_priv(mlxsw_core);
 
        mlxsw_sp->listeners = mlxsw_sp1_listener;
        mlxsw_sp->listeners_count = ARRAY_SIZE(mlxsw_sp1_listener);
 
-       return mlxsw_sp_init(mlxsw_core, mlxsw_bus_info);
+       return mlxsw_sp_init(mlxsw_core, mlxsw_bus_info, extack);
 }
 
 static int mlxsw_sp2_init(struct mlxsw_core *mlxsw_core,
-                         const struct mlxsw_bus_info *mlxsw_bus_info)
+                         const struct mlxsw_bus_info *mlxsw_bus_info,
+                         struct netlink_ext_ack *extack)
 {
        struct mlxsw_sp *mlxsw_sp = mlxsw_core_driver_priv(mlxsw_core);
 
        mlxsw_sp->port_type_speed_ops = &mlxsw_sp2_port_type_speed_ops;
        mlxsw_sp->ptp_ops = &mlxsw_sp2_ptp_ops;
 
-       return mlxsw_sp_init(mlxsw_core, mlxsw_bus_info);
+       return mlxsw_sp_init(mlxsw_core, mlxsw_bus_info, extack);
 }
 
 static void mlxsw_sp_fini(struct mlxsw_core *mlxsw_core)
 
        struct in6_addr addr6;
 };
 
-int mlxsw_sp_router_init(struct mlxsw_sp *mlxsw_sp);
+int mlxsw_sp_router_init(struct mlxsw_sp *mlxsw_sp,
+                        struct netlink_ext_ack *extack);
 void mlxsw_sp_router_fini(struct mlxsw_sp *mlxsw_sp);
 int mlxsw_sp_netdevice_router_port_event(struct net_device *dev,
                                         unsigned long event, void *ptr);
 
        mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(rgcr), rgcr_pl);
 }
 
-int mlxsw_sp_router_init(struct mlxsw_sp *mlxsw_sp)
+int mlxsw_sp_router_init(struct mlxsw_sp *mlxsw_sp,
+                        struct netlink_ext_ack *extack)
 {
        struct mlxsw_sp_router *router;
        int err;
        mlxsw_sp->router->fib_nb.notifier_call = mlxsw_sp_router_fib_event;
        err = register_fib_notifier(mlxsw_sp_net(mlxsw_sp),
                                    &mlxsw_sp->router->fib_nb,
-                                   mlxsw_sp_router_fib_dump_flush, NULL);
+                                   mlxsw_sp_router_fib_dump_flush, extack);
        if (err)
                goto err_register_fib_notifier;
 
 
 }
 
 static int mlxsw_sib_init(struct mlxsw_core *mlxsw_core,
-                         const struct mlxsw_bus_info *mlxsw_bus_info)
+                         const struct mlxsw_bus_info *mlxsw_bus_info,
+                         struct netlink_ext_ack *extack)
 {
        struct mlxsw_sib *mlxsw_sib = mlxsw_core_driver_priv(mlxsw_core);
        int err;
 
 }
 
 static int mlxsw_sx_init(struct mlxsw_core *mlxsw_core,
-                        const struct mlxsw_bus_info *mlxsw_bus_info)
+                        const struct mlxsw_bus_info *mlxsw_bus_info,
+                        struct netlink_ext_ack *extack)
 {
        struct mlxsw_sx *mlxsw_sx = mlxsw_core_driver_priv(mlxsw_core);
        int err;