Skip to content

Commit 323ff71

Browse files
Sathya Perladavem330
authored andcommitted
be2net: cleanup code related to be_link_status_query()
1) link_status_query() is always called to query the link-speed (speed after applying qos). When there is no qos setting, link-speed is derived from port-speed. Do all this inside this routine and hide this from the callers. 2) adpater->phy.forced_port_speed is not being set anywhere after being initialized. Get rid of this variable. 3) Ignore async link_speed notifications till the initial value has been fetched from FW. Signed-off-by: Sathya Perla <sathya.perla@emulex.com> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent 55f5c3c commit 323ff71

File tree

5 files changed

+48
-64
lines changed

5 files changed

+48
-64
lines changed

drivers/net/ethernet/emulex/benet/be.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -337,7 +337,6 @@ struct phy_info {
337337
u16 auto_speeds_supported;
338338
u16 fixed_speeds_supported;
339339
int link_speed;
340-
int forced_port_speed;
341340
u32 dac_cable_len;
342341
u32 advertising;
343342
u32 supported;

drivers/net/ethernet/emulex/benet/be_cmds.c

Lines changed: 33 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -165,14 +165,13 @@ static void be_async_grp5_cos_priority_process(struct be_adapter *adapter,
165165
}
166166
}
167167

168-
/* Grp5 QOS Speed evt */
168+
/* Grp5 QOS Speed evt: qos_link_speed is in units of 10 Mbps */
169169
static void be_async_grp5_qos_speed_process(struct be_adapter *adapter,
170170
struct be_async_event_grp5_qos_link_speed *evt)
171171
{
172-
if (evt->physical_port == adapter->port_num) {
173-
/* qos_link_speed is in units of 10 Mbps */
174-
adapter->phy.link_speed = evt->qos_link_speed * 10;
175-
}
172+
if (adapter->phy.link_speed >= 0 &&
173+
evt->physical_port == adapter->port_num)
174+
adapter->phy.link_speed = le16_to_cpu(evt->qos_link_speed) * 10;
176175
}
177176

178177
/*Grp5 PVID evt*/
@@ -1326,9 +1325,28 @@ int lancer_cmd_get_pport_stats(struct be_adapter *adapter,
13261325
return status;
13271326
}
13281327

1329-
/* Uses synchronous mcc */
1330-
int be_cmd_link_status_query(struct be_adapter *adapter, u8 *mac_speed,
1331-
u16 *link_speed, u8 *link_status, u32 dom)
1328+
static int be_mac_to_link_speed(int mac_speed)
1329+
{
1330+
switch (mac_speed) {
1331+
case PHY_LINK_SPEED_ZERO:
1332+
return 0;
1333+
case PHY_LINK_SPEED_10MBPS:
1334+
return 10;
1335+
case PHY_LINK_SPEED_100MBPS:
1336+
return 100;
1337+
case PHY_LINK_SPEED_1GBPS:
1338+
return 1000;
1339+
case PHY_LINK_SPEED_10GBPS:
1340+
return 10000;
1341+
}
1342+
return 0;
1343+
}
1344+
1345+
/* Uses synchronous mcc
1346+
* Returns link_speed in Mbps
1347+
*/
1348+
int be_cmd_link_status_query(struct be_adapter *adapter, u16 *link_speed,
1349+
u8 *link_status, u32 dom)
13321350
{
13331351
struct be_mcc_wrb *wrb;
13341352
struct be_cmd_req_link_status *req;
@@ -1357,11 +1375,13 @@ int be_cmd_link_status_query(struct be_adapter *adapter, u8 *mac_speed,
13571375
status = be_mcc_notify_wait(adapter);
13581376
if (!status) {
13591377
struct be_cmd_resp_link_status *resp = embedded_payload(wrb);
1360-
if (resp->mac_speed != PHY_LINK_SPEED_ZERO) {
1361-
if (link_speed)
1362-
*link_speed = le16_to_cpu(resp->link_speed);
1363-
if (mac_speed)
1364-
*mac_speed = resp->mac_speed;
1378+
if (link_speed) {
1379+
*link_speed = resp->link_speed ?
1380+
le16_to_cpu(resp->link_speed) * 10 :
1381+
be_mac_to_link_speed(resp->mac_speed);
1382+
1383+
if (!resp->logical_link_status)
1384+
*link_speed = 0;
13651385
}
13661386
if (link_status)
13671387
*link_status = resp->logical_link_status;

drivers/net/ethernet/emulex/benet/be_cmds.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1714,8 +1714,8 @@ extern int be_cmd_q_destroy(struct be_adapter *adapter, struct be_queue_info *q,
17141714
int type);
17151715
extern int be_cmd_rxq_destroy(struct be_adapter *adapter,
17161716
struct be_queue_info *q);
1717-
extern int be_cmd_link_status_query(struct be_adapter *adapter, u8 *mac_speed,
1718-
u16 *link_speed, u8 *link_status, u32 dom);
1717+
extern int be_cmd_link_status_query(struct be_adapter *adapter, u16 *link_speed,
1718+
u8 *link_status, u32 dom);
17191719
extern int be_cmd_reset(struct be_adapter *adapter);
17201720
extern int be_cmd_get_stats(struct be_adapter *adapter,
17211721
struct be_dma_mem *nonemb_cmd);

drivers/net/ethernet/emulex/benet/be_ethtool.c

Lines changed: 12 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -512,28 +512,6 @@ static u32 convert_to_et_setting(u32 if_type, u32 if_speeds)
512512
return val;
513513
}
514514

515-
static int convert_to_et_speed(u32 be_speed)
516-
{
517-
int et_speed = SPEED_10000;
518-
519-
switch (be_speed) {
520-
case PHY_LINK_SPEED_10MBPS:
521-
et_speed = SPEED_10;
522-
break;
523-
case PHY_LINK_SPEED_100MBPS:
524-
et_speed = SPEED_100;
525-
break;
526-
case PHY_LINK_SPEED_1GBPS:
527-
et_speed = SPEED_1000;
528-
break;
529-
case PHY_LINK_SPEED_10GBPS:
530-
et_speed = SPEED_10000;
531-
break;
532-
}
533-
534-
return et_speed;
535-
}
536-
537515
bool be_pause_supported(struct be_adapter *adapter)
538516
{
539517
return (adapter->phy.interface_type == PHY_TYPE_SFP_PLUS_10GB ||
@@ -544,27 +522,16 @@ bool be_pause_supported(struct be_adapter *adapter)
544522
static int be_get_settings(struct net_device *netdev, struct ethtool_cmd *ecmd)
545523
{
546524
struct be_adapter *adapter = netdev_priv(netdev);
547-
u8 port_speed = 0;
548-
u16 link_speed = 0;
549525
u8 link_status;
550-
u32 et_speed = 0;
526+
u16 link_speed = 0;
551527
int status;
552528

553-
if (adapter->phy.link_speed < 0 || !(netdev->flags & IFF_UP)) {
554-
if (adapter->phy.forced_port_speed < 0) {
555-
status = be_cmd_link_status_query(adapter, &port_speed,
556-
&link_speed, &link_status, 0);
557-
if (!status)
558-
be_link_status_update(adapter, link_status);
559-
if (link_speed)
560-
et_speed = link_speed * 10;
561-
else if (link_status)
562-
et_speed = convert_to_et_speed(port_speed);
563-
} else {
564-
et_speed = adapter->phy.forced_port_speed;
565-
}
566-
567-
ethtool_cmd_speed_set(ecmd, et_speed);
529+
if (adapter->phy.link_speed < 0) {
530+
status = be_cmd_link_status_query(adapter, &link_speed,
531+
&link_status, 0);
532+
if (!status)
533+
be_link_status_update(adapter, link_status);
534+
ethtool_cmd_speed_set(ecmd, link_speed);
568535

569536
status = be_cmd_get_phy_info(adapter);
570537
if (status)
@@ -773,8 +740,8 @@ static void
773740
be_self_test(struct net_device *netdev, struct ethtool_test *test, u64 *data)
774741
{
775742
struct be_adapter *adapter = netdev_priv(netdev);
776-
u8 mac_speed = 0;
777-
u16 qos_link_speed = 0;
743+
int status;
744+
u8 link_status = 0;
778745

779746
memset(data, 0, sizeof(u64) * ETHTOOL_TESTS_NUM);
780747

@@ -798,11 +765,11 @@ be_self_test(struct net_device *netdev, struct ethtool_test *test, u64 *data)
798765
test->flags |= ETH_TEST_FL_FAILED;
799766
}
800767

801-
if (be_cmd_link_status_query(adapter, &mac_speed,
802-
&qos_link_speed, NULL, 0) != 0) {
768+
status = be_cmd_link_status_query(adapter, NULL, &link_status, 0);
769+
if (status) {
803770
test->flags |= ETH_TEST_FL_FAILED;
804771
data[4] = -1;
805-
} else if (!mac_speed) {
772+
} else if (!link_status) {
806773
test->flags |= ETH_TEST_FL_FAILED;
807774
data[4] = 1;
808775
}

drivers/net/ethernet/emulex/benet/be_main.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2440,8 +2440,7 @@ static int be_open(struct net_device *netdev)
24402440
be_eq_notify(adapter, eqo->q.id, true, false, 0);
24412441
}
24422442

2443-
status = be_cmd_link_status_query(adapter, NULL, NULL,
2444-
&link_status, 0);
2443+
status = be_cmd_link_status_query(adapter, NULL, &link_status, 0);
24452444
if (!status)
24462445
be_link_status_update(adapter, link_status);
24472446

@@ -2670,7 +2669,6 @@ static void be_setup_init(struct be_adapter *adapter)
26702669
adapter->be3_native = false;
26712670
adapter->promiscuous = false;
26722671
adapter->eq_next_idx = 0;
2673-
adapter->phy.forced_port_speed = -1;
26742672
}
26752673

26762674
static int be_get_mac_addr(struct be_adapter *adapter, u8 *mac, u32 if_handle,

0 commit comments

Comments
 (0)