err = mlxsw_sp_port_headroom_set(mlxsw_sp_port, mtu, pause_en);
        if (err)
                return err;
-       err = mlxsw_sp_span_port_mtu_update(mlxsw_sp_port, mtu);
-       if (err)
-               goto err_span_port_mtu_update;
        err = mlxsw_sp_port_mtu_set(mlxsw_sp_port, mtu);
        if (err)
                goto err_port_mtu_set;
        return 0;
 
 err_port_mtu_set:
-       mlxsw_sp_span_port_mtu_update(mlxsw_sp_port, dev->mtu);
-err_span_port_mtu_update:
        mlxsw_sp_port_headroom_set(mlxsw_sp_port, dev->mtu, pause_en);
        return err;
 }
 
        INIT_DELAYED_WORK(&mlxsw_sp_port->ptp.shaper_dw,
                          mlxsw_sp->ptp_ops->shaper_work);
-       INIT_DELAYED_WORK(&mlxsw_sp_port->span.speed_update_dw,
-                         mlxsw_sp_span_speed_update_work);
 
        mlxsw_sp->ports[local_port] = mlxsw_sp_port;
        err = register_netdev(dev);
        struct mlxsw_sp_port *mlxsw_sp_port = mlxsw_sp->ports[local_port];
 
        cancel_delayed_work_sync(&mlxsw_sp_port->periodic_hw_stats.update_dw);
-       cancel_delayed_work_sync(&mlxsw_sp_port->span.speed_update_dw);
        cancel_delayed_work_sync(&mlxsw_sp_port->ptp.shaper_dw);
        mlxsw_sp_port_ptp_clear(mlxsw_sp_port);
        mlxsw_core_port_clear(mlxsw_sp->core, local_port, mlxsw_sp);
                netdev_info(mlxsw_sp_port->dev, "link up\n");
                netif_carrier_on(mlxsw_sp_port->dev);
                mlxsw_core_schedule_dw(&mlxsw_sp_port->ptp.shaper_dw, 0);
-               mlxsw_core_schedule_dw(&mlxsw_sp_port->span.speed_update_dw, 0);
        } else {
                netdev_info(mlxsw_sp_port->dev, "link down\n");
                netif_carrier_off(mlxsw_sp_port->dev);
 
 }
 
 static int
-mlxsw_sp_span_port_buffer_update(struct mlxsw_sp_port *mlxsw_sp_port, u16 mtu)
+mlxsw_sp_span_port_buffer_enable(struct mlxsw_sp_port *mlxsw_sp_port)
 {
        struct mlxsw_sp *mlxsw_sp = mlxsw_sp_port->mlxsw_sp;
        char sbib_pl[MLXSW_REG_SBIB_LEN];
        u32 buffsize;
-       u32 speed;
-       int err;
-
-       err = mlxsw_sp_port_speed_get(mlxsw_sp_port, &speed);
-       if (err)
-               return err;
-       if (speed == SPEED_UNKNOWN)
-               speed = 0;
 
-       buffsize = mlxsw_sp_span_buffsize_get(mlxsw_sp, speed, mtu);
+       buffsize = mlxsw_sp_span_buffsize_get(mlxsw_sp, mlxsw_sp_port->max_speed,
+                                             mlxsw_sp_port->max_mtu);
        buffsize = mlxsw_sp_port_headroom_8x_adjust(mlxsw_sp_port, buffsize);
        mlxsw_reg_sbib_pack(sbib_pl, mlxsw_sp_port->local_port, buffsize);
        return mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(sbib), sbib_pl);
        return NULL;
 }
 
-int mlxsw_sp_span_port_mtu_update(struct mlxsw_sp_port *port, u16 mtu)
-{
-       struct mlxsw_sp *mlxsw_sp = port->mlxsw_sp;
-       int err = 0;
-
-       /* If port is egress mirrored, the shared buffer size should be
-        * updated according to the mtu value
-        */
-       mutex_lock(&mlxsw_sp->span->analyzed_ports_lock);
-
-       if (mlxsw_sp_span_analyzed_port_find(mlxsw_sp->span, port->local_port,
-                                            false))
-               err = mlxsw_sp_span_port_buffer_update(port, mtu);
-
-       mutex_unlock(&mlxsw_sp->span->analyzed_ports_lock);
-
-       return err;
-}
-
-void mlxsw_sp_span_speed_update_work(struct work_struct *work)
-{
-       struct delayed_work *dwork = to_delayed_work(work);
-       struct mlxsw_sp_port *mlxsw_sp_port;
-       struct mlxsw_sp *mlxsw_sp;
-
-       mlxsw_sp_port = container_of(dwork, struct mlxsw_sp_port,
-                                    span.speed_update_dw);
-
-       /* If port is egress mirrored, the shared buffer size should be
-        * updated according to the speed value.
-        */
-       mlxsw_sp = mlxsw_sp_port->mlxsw_sp;
-       mutex_lock(&mlxsw_sp->span->analyzed_ports_lock);
-
-       if (mlxsw_sp_span_analyzed_port_find(mlxsw_sp->span,
-                                            mlxsw_sp_port->local_port, false))
-               mlxsw_sp_span_port_buffer_update(mlxsw_sp_port,
-                                                mlxsw_sp_port->dev->mtu);
-
-       mutex_unlock(&mlxsw_sp->span->analyzed_ports_lock);
-}
-
 static const struct mlxsw_sp_span_entry_ops *
 mlxsw_sp_span_entry_ops(struct mlxsw_sp *mlxsw_sp,
                        const struct net_device *to_dev)
         * does the mirroring.
         */
        if (!ingress) {
-               u16 mtu = mlxsw_sp_port->dev->mtu;
-
-               err = mlxsw_sp_span_port_buffer_update(mlxsw_sp_port, mtu);
+               err = mlxsw_sp_span_port_buffer_enable(mlxsw_sp_port);
                if (err)
                        goto err_buffer_update;
        }