Quantcast
Channel: Mellanox Interconnect Community: Message List
Viewing all articles
Browse latest Browse all 6211

Re: Link speed limited to 10gbps

$
0
0

There are driver sources left by the installation, in /usr/source/mlnx-en-2.2, driver tree could instrumented, recompiled, etc.

 

It seems that Mellanox is using some soft of mailbox mechanism to talk to the firmware - it is very well seen from the driver sources. Responsible function to query firmware seems to be mlx4_cmd_box(), now looking into en_port.c function mlx4_en_QUERY_PORT() talks to firmware and gets 10gbps value back from the firmware. This function is executed multiple times when LKM is inserted and also when "ethtool" queries interface data.

 

 

int mlx4_en_QUERY_PORT(struct mlx4_en_dev *mdev, u8 port)

{

  struct mlx4_en_query_port_context *qport_context;

  struct mlx4_en_priv *priv = netdev_priv(mdev->pndev[port]);

  struct mlx4_en_port_state *state = &priv->port_state;

  struct mlx4_cmd_mailbox *mailbox;

  int err;

 

  printk("%s: ENTER\n", __func__);

 

  mailbox = mlx4_alloc_cmd_mailbox(mdev->dev);

  if (IS_ERR(mailbox))

  return PTR_ERR(mailbox);

  memset(mailbox->buf, 0, sizeof(*qport_context));

  err = mlx4_cmd_box(mdev->dev, 0, mailbox->dma, port, 0,

    MLX4_CMD_QUERY_PORT, MLX4_CMD_TIME_CLASS_B,

    MLX4_CMD_WRAPPED);

  if (err)

  goto out;

  qport_context = mailbox->buf;

 

 

  /* This command is always accessed from Ethtool context

  * already synchronized, no need in locking */

  state->link_state = !!(qport_context->link_up & MLX4_EN_LINK_UP_MASK);

  switch (qport_context->link_speed & MLX4_EN_SPEED_MASK) {

  case MLX4_EN_1G_SPEED:

  state->link_speed = 1000;

  break;

  case MLX4_EN_10G_SPEED_XAUI:

  case MLX4_EN_10G_SPEED_XFI:

  printk("%s-%d: Link speed reported @10GBPS\n",

  __func__, __LINE__);

  state->link_speed = 10000;

  break;

  case MLX4_EN_20G_SPEED:

  state->link_speed = 20000;

  break;

  case MLX4_EN_40G_SPEED:

  printk("%s-%d: Link speed reported @40GBPS\n",

  __func__, __LINE__);

  state->link_speed = 40000;

  break;

  case MLX4_EN_56G_SPEED:

  state->link_speed = 56000;

  break;

  default:

  state->link_speed = -1;

  break;

  }

  state->transciver = qport_context->transceiver;

  state->autoneg = !!(qport_context->autoneg & MLX4_EN_AUTONEG_MASK);

 

 

out:

  mlx4_free_cmd_mailbox(mdev->dev, mailbox);

  return err;

}

 

Regards,

 

   Philip


Viewing all articles
Browse latest Browse all 6211

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>