mlxsw_sp_port->dev->dev_addr);
 }
 
-static int mlxsw_sp_port_max_mtu_get(struct mlxsw_sp_port *mlxsw_sp_port, int *p_max_mtu)
-{
-       struct mlxsw_sp *mlxsw_sp = mlxsw_sp_port->mlxsw_sp;
-       char pmtu_pl[MLXSW_REG_PMTU_LEN];
-       int err;
-
-       mlxsw_reg_pmtu_pack(pmtu_pl, mlxsw_sp_port->local_port, 0);
-       err = mlxsw_reg_query(mlxsw_sp->core, MLXSW_REG(pmtu), pmtu_pl);
-       if (err)
-               return err;
-
-       *p_max_mtu = mlxsw_reg_pmtu_max_mtu_get(pmtu_pl);
-       return 0;
-}
-
 static int mlxsw_sp_port_mtu_set(struct mlxsw_sp_port *mlxsw_sp_port, u16 mtu)
 {
        struct mlxsw_sp *mlxsw_sp = mlxsw_sp_port->mlxsw_sp;
                goto err_max_speed_get;
        }
 
-       err = mlxsw_sp_port_max_mtu_get(mlxsw_sp_port, &mlxsw_sp_port->max_mtu);
-       if (err) {
-               dev_err(mlxsw_sp->bus_info->dev, "Port %d: Failed to get maximum MTU\n",
-                       mlxsw_sp_port->local_port);
-               goto err_port_max_mtu_get;
-       }
-
        err = mlxsw_sp_port_mtu_set(mlxsw_sp_port, ETH_DATA_LEN);
        if (err) {
                dev_err(mlxsw_sp->bus_info->dev, "Port %d: Failed to set MTU\n",
 err_port_buffers_init:
 err_port_admin_status_set:
 err_port_mtu_set:
-err_port_max_mtu_get:
 err_max_speed_get:
 err_port_speed_by_width_set:
 err_port_system_port_mapping_set:
 
                                      struct mlxsw_sp_hdroom *hdroom)
 {
        struct mlxsw_sp *mlxsw_sp = mlxsw_sp_port->mlxsw_sp;
+       unsigned int max_mtu = mlxsw_sp_port->dev->max_mtu;
        u16 reserve_cells;
        int i;
 
+       max_mtu += MLXSW_PORT_ETH_FRAME_HDR;
        /* Internal buffer. */
-       reserve_cells = mlxsw_sp_hdroom_int_buf_size_get(mlxsw_sp, mlxsw_sp_port->max_mtu,
+       reserve_cells = mlxsw_sp_hdroom_int_buf_size_get(mlxsw_sp, max_mtu,
                                                         mlxsw_sp_port->max_speed);
        reserve_cells = mlxsw_sp_port_headroom_8x_adjust(mlxsw_sp_port, reserve_cells);
        hdroom->int_buf.reserve_cells = reserve_cells;
        mlxsw_sp_hdroom_bufs_reset_sizes(mlxsw_sp_port, &hdroom);
 
        /* Buffer 9 is used for control traffic. */
-       size9 = mlxsw_sp_port_headroom_8x_adjust(mlxsw_sp_port, mlxsw_sp_port->max_mtu);
+       size9 = mlxsw_sp_port_headroom_8x_adjust(mlxsw_sp_port,
+                                                mlxsw_sp_port->dev->max_mtu +
+                                                MLXSW_PORT_ETH_FRAME_HDR);
        hdroom.bufs.buf[9].size_cells = mlxsw_sp_bytes_cells(mlxsw_sp, size9);
 
        return __mlxsw_sp_hdroom_configure(mlxsw_sp_port, &hdroom, true);