Skip to content

Commit db15dfa

Browse files
Padmanabh Ratnakardavem330
authored andcommitted
be2net: Fix ethtool get_settings output for VF
Return default values for fields for which VFs dont have privilege to get the required information from FW. Signed-off-by: Padmanabh Ratnakar <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent f25b119 commit db15dfa

File tree

1 file changed

+42
-31
lines changed

1 file changed

+42
-31
lines changed

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

Lines changed: 42 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -528,6 +528,10 @@ static int be_get_settings(struct net_device *netdev, struct ethtool_cmd *ecmd)
528528
u8 link_status;
529529
u16 link_speed = 0;
530530
int status;
531+
u32 auto_speeds;
532+
u32 fixed_speeds;
533+
u32 dac_cable_len;
534+
u16 interface_type;
531535

532536
if (adapter->phy.link_speed < 0) {
533537
status = be_cmd_link_status_query(adapter, &link_speed,
@@ -537,39 +541,46 @@ static int be_get_settings(struct net_device *netdev, struct ethtool_cmd *ecmd)
537541
ethtool_cmd_speed_set(ecmd, link_speed);
538542

539543
status = be_cmd_get_phy_info(adapter);
540-
if (status)
541-
return status;
542-
543-
ecmd->supported =
544-
convert_to_et_setting(adapter->phy.interface_type,
545-
adapter->phy.auto_speeds_supported |
546-
adapter->phy.fixed_speeds_supported);
547-
ecmd->advertising =
548-
convert_to_et_setting(adapter->phy.interface_type,
549-
adapter->phy.auto_speeds_supported);
550-
551-
ecmd->port = be_get_port_type(adapter->phy.interface_type,
552-
adapter->phy.dac_cable_len);
553-
554-
if (adapter->phy.auto_speeds_supported) {
555-
ecmd->supported |= SUPPORTED_Autoneg;
556-
ecmd->autoneg = AUTONEG_ENABLE;
557-
ecmd->advertising |= ADVERTISED_Autoneg;
558-
}
544+
if (!status) {
545+
interface_type = adapter->phy.interface_type;
546+
auto_speeds = adapter->phy.auto_speeds_supported;
547+
fixed_speeds = adapter->phy.fixed_speeds_supported;
548+
dac_cable_len = adapter->phy.dac_cable_len;
549+
550+
ecmd->supported =
551+
convert_to_et_setting(interface_type,
552+
auto_speeds |
553+
fixed_speeds);
554+
ecmd->advertising =
555+
convert_to_et_setting(interface_type,
556+
auto_speeds);
557+
558+
ecmd->port = be_get_port_type(interface_type,
559+
dac_cable_len);
560+
561+
if (adapter->phy.auto_speeds_supported) {
562+
ecmd->supported |= SUPPORTED_Autoneg;
563+
ecmd->autoneg = AUTONEG_ENABLE;
564+
ecmd->advertising |= ADVERTISED_Autoneg;
565+
}
559566

560-
if (be_pause_supported(adapter)) {
561567
ecmd->supported |= SUPPORTED_Pause;
562-
ecmd->advertising |= ADVERTISED_Pause;
563-
}
564-
565-
switch (adapter->phy.interface_type) {
566-
case PHY_TYPE_KR_10GB:
567-
case PHY_TYPE_KX4_10GB:
568-
ecmd->transceiver = XCVR_INTERNAL;
569-
break;
570-
default:
571-
ecmd->transceiver = XCVR_EXTERNAL;
572-
break;
568+
if (be_pause_supported(adapter))
569+
ecmd->advertising |= ADVERTISED_Pause;
570+
571+
switch (adapter->phy.interface_type) {
572+
case PHY_TYPE_KR_10GB:
573+
case PHY_TYPE_KX4_10GB:
574+
ecmd->transceiver = XCVR_INTERNAL;
575+
break;
576+
default:
577+
ecmd->transceiver = XCVR_EXTERNAL;
578+
break;
579+
}
580+
} else {
581+
ecmd->port = PORT_OTHER;
582+
ecmd->autoneg = AUTONEG_DISABLE;
583+
ecmd->transceiver = XCVR_DUMMY1;
573584
}
574585

575586
/* Save for future use */

0 commit comments

Comments
 (0)