Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F110448402
D4817.id11998.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
5 KB
Referenced Files
None
Subscribers
None
D4817.id11998.diff
View Options
Index: sys/dev/mlx5/mlx5_en/en.h
===================================================================
--- sys/dev/mlx5/mlx5_en/en.h
+++ sys/dev/mlx5/mlx5_en/en.h
@@ -373,11 +373,11 @@
bool cqe_zipping_en;
u32 lro_wqe_sz;
u16 rx_hash_log_tbl_sz;
+ u8 tx_pauseframe_control;
+ u8 rx_pauseframe_control;
};
#define MLX5E_PARAMS(m) \
- m(+1, u64 tx_pauseframe_control, "tx_pauseframe_control", "Set to enable TX pause frames. Clear to disable.") \
- m(+1, u64 rx_pauseframe_control, "rx_pauseframe_control", "Set to enable RX pause frames. Clear to disable.") \
m(+1, u64 tx_queue_size_max, "tx_queue_size_max", "Max send queue size") \
m(+1, u64 rx_queue_size_max, "rx_queue_size_max", "Max receive queue size") \
m(+1, u64 tx_queue_size, "tx_queue_size", "Default send queue size") \
Index: sys/dev/mlx5/mlx5_en/mlx5_en_ethtool.c
===================================================================
--- sys/dev/mlx5/mlx5_en/mlx5_en_ethtool.c
+++ sys/dev/mlx5/mlx5_en/mlx5_en_ethtool.c
@@ -113,21 +113,6 @@
}
priv->params.tx_cq_moderation_pkts = priv->params_ethtool.tx_coalesce_pkts;
- if (&priv->params_ethtool.arg[arg2] == &priv->params_ethtool.rx_pauseframe_control ||
- &priv->params_ethtool.arg[arg2] == &priv->params_ethtool.tx_pauseframe_control) {
- /* range check parameters */
- priv->params_ethtool.rx_pauseframe_control =
- priv->params_ethtool.rx_pauseframe_control ? 1 : 0;
- priv->params_ethtool.tx_pauseframe_control =
- priv->params_ethtool.tx_pauseframe_control ? 1 : 0;
-
- /* update firmware */
- error = -mlx5_set_port_pause(priv->mdev, 1,
- priv->params_ethtool.rx_pauseframe_control,
- priv->params_ethtool.tx_pauseframe_control);
- goto done;
- }
-
was_opened = test_bit(MLX5E_STATE_OPENED, &priv->state);
if (was_opened) {
u64 *xarg = priv->params_ethtool.arg + arg2;
Index: sys/dev/mlx5/mlx5_en/mlx5_en_main.c
===================================================================
--- sys/dev/mlx5/mlx5_en/mlx5_en_main.c
+++ sys/dev/mlx5/mlx5_en/mlx5_en_main.c
@@ -222,8 +222,8 @@
ifmr->ifm_status = priv->media_status_last;
ifmr->ifm_active = priv->media_active_last |
- (priv->params_ethtool.rx_pauseframe_control ? IFM_ETH_RXPAUSE : 0) |
- (priv->params_ethtool.tx_pauseframe_control ? IFM_ETH_TXPAUSE : 0);
+ (priv->params.rx_pauseframe_control ? IFM_ETH_RXPAUSE : 0) |
+ (priv->params.tx_pauseframe_control ? IFM_ETH_TXPAUSE : 0);
}
@@ -250,6 +250,7 @@
struct mlx5_core_dev *mdev = priv->mdev;
u32 eth_proto_cap;
u32 link_mode;
+ int was_opened;
int locked;
int error;
@@ -263,24 +264,45 @@
}
link_mode = mlx5e_find_link_mode(IFM_SUBTYPE(priv->media.ifm_media));
+ /* query supported capabilities */
error = mlx5_query_port_proto_cap(mdev, ð_proto_cap, MLX5_PTYS_EN);
- if (error) {
+ if (error != 0) {
if_printf(dev, "Query port media capability failed\n");
goto done;
}
- if (IFM_SUBTYPE(priv->media.ifm_media) == IFM_AUTO)
+ /* check for autoselect */
+ if (IFM_SUBTYPE(priv->media.ifm_media) == IFM_AUTO) {
link_mode = eth_proto_cap;
- else
+ if (link_mode == 0) {
+ if_printf(dev, "Port media capability is zero\n");
+ error = EINVAL;
+ goto done;
+ }
+ } else {
link_mode = link_mode & eth_proto_cap;
-
- if (!link_mode) {
- if_printf(dev, "Not supported link mode requested\n");
- error = EINVAL;
- goto done;
+ if (link_mode == 0) {
+ if_printf(dev, "Not supported link mode requested\n");
+ error = EINVAL;
+ goto done;
+ }
}
+ /* update pauseframe control bits */
+ priv->params.rx_pauseframe_control =
+ (priv->media.ifm_media & IFM_ETH_RXPAUSE) ? 1 : 0;
+ priv->params.tx_pauseframe_control =
+ (priv->media.ifm_media & IFM_ETH_TXPAUSE) ? 1 : 0;
+
+ /* check if device is opened */
+ was_opened = test_bit(MLX5E_STATE_OPENED, &priv->state);
+
+ /* reconfigure the hardware */
mlx5_set_port_status(mdev, MLX5_PORT_DOWN);
mlx5_set_port_proto(mdev, link_mode, MLX5_PTYS_EN);
- mlx5_set_port_status(mdev, MLX5_PORT_UP);
+ mlx5_set_port_pause(mdev, 1,
+ priv->params.rx_pauseframe_control,
+ priv->params.tx_pauseframe_control);
+ if (was_opened)
+ mlx5_set_port_status(mdev, MLX5_PORT_UP);
done:
if (!locked)
@@ -2874,11 +2896,17 @@
/* Set default media status */
priv->media_status_last = IFM_AVALID;
- priv->media_active_last = IFM_ETHER | IFM_AUTO;
+ priv->media_active_last = IFM_ETHER | IFM_AUTO |
+ IFM_ETH_RXPAUSE | IFM_FDX;
- /* Pauseframes are enabled by default */
- priv->params_ethtool.tx_pauseframe_control = 1;
- priv->params_ethtool.rx_pauseframe_control = 1;
+ /* Only receiving pauseframes is enabled by default */
+ priv->params.tx_pauseframe_control = 0;
+ priv->params.rx_pauseframe_control = 1;
+
+ /* Update firmware */
+ mlx5_set_port_pause(mdev, 1,
+ priv->params.rx_pauseframe_control,
+ priv->params.tx_pauseframe_control);
err = mlx5_query_port_proto_cap(mdev, ð_proto_cap, MLX5_PTYS_EN);
if (err) {
@@ -2894,14 +2922,24 @@
for (i = 0; i < MLX5E_LINK_MODES_NUMBER; ++i) {
if (mlx5e_mode_table[i].baudrate == 0)
continue;
- if (MLX5E_PROT_MASK(i) & eth_proto_cap)
+ if (MLX5E_PROT_MASK(i) & eth_proto_cap) {
+ ifmedia_add(&priv->media,
+ mlx5e_mode_table[i].subtype |
+ IFM_ETHER, 0, NULL);
ifmedia_add(&priv->media,
- IFM_ETHER | mlx5e_mode_table[i].subtype |
- IFM_FDX, 0, NULL);
+ mlx5e_mode_table[i].subtype |
+ IFM_ETHER | IFM_FDX |
+ IFM_ETH_RXPAUSE | IFM_ETH_TXPAUSE, 0, NULL);
+ }
}
ifmedia_add(&priv->media, IFM_ETHER | IFM_AUTO, 0, NULL);
- ifmedia_set(&priv->media, IFM_ETHER | IFM_AUTO);
+ ifmedia_add(&priv->media, IFM_ETHER | IFM_AUTO | IFM_FDX |
+ IFM_ETH_RXPAUSE | IFM_ETH_TXPAUSE, 0, NULL);
+
+ /* Set autoselect by default */
+ ifmedia_set(&priv->media, IFM_ETHER | IFM_AUTO | IFM_FDX |
+ IFM_ETH_RXPAUSE | IFM_ETH_TXPAUSE);
ether_ifattach(ifp, dev_addr);
/* Register for VLAN events */
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Wed, Feb 19, 2:39 PM (16 h, 26 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
16722357
Default Alt Text
D4817.id11998.diff (5 KB)
Attached To
Mode
D4817: mlx5en: Allow RX and TX pause frames to be set through ifconfig
Attached
Detach File
Event Timeline
Log In to Comment