diff options
author | Yaniv Rosner <yanivr@broadcom.com> | 2014-01-01 04:06:43 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-01-01 22:09:47 -0500 |
commit | a429ec239cbc42dd3b2bc9933745103ca71d2b9d (patch) | |
tree | 6af84f938d02336d40c089a99821d31f85f81e22 /drivers/net/ethernet/broadcom | |
parent | e803d33a32213f2c28456faaa62b2a88f91de2ea (diff) |
bnx2x: Fix Duplex setting for 54618se
BCM54618SE is used to advertise half-duplex even if HD was not requested by the
user. This change makes the legacy speed/duplex advertisement for this PHY
exactly according to the requested speed and duplex.
Signed-off-by: Yaniv Rosner <yanivr@broadcom.com>
Signed-off-by: Ariel Elior <ariele@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/broadcom')
-rw-r--r-- | drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c | 54 |
1 files changed, 28 insertions, 26 deletions
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c index 000b6eec38a0..68417e1fb6df 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c | |||
@@ -10841,9 +10841,9 @@ static int bnx2x_54618se_config_init(struct bnx2x_phy *phy, | |||
10841 | (1<<11)); | 10841 | (1<<11)); |
10842 | 10842 | ||
10843 | if (((phy->req_line_speed == SPEED_AUTO_NEG) && | 10843 | if (((phy->req_line_speed == SPEED_AUTO_NEG) && |
10844 | (phy->speed_cap_mask & | 10844 | (phy->speed_cap_mask & |
10845 | PORT_HW_CFG_SPEED_CAPABILITY_D0_1G)) || | 10845 | PORT_HW_CFG_SPEED_CAPABILITY_D0_1G)) || |
10846 | (phy->req_line_speed == SPEED_1000)) { | 10846 | (phy->req_line_speed == SPEED_1000)) { |
10847 | an_1000_val |= (1<<8); | 10847 | an_1000_val |= (1<<8); |
10848 | autoneg_val |= (1<<9 | 1<<12); | 10848 | autoneg_val |= (1<<9 | 1<<12); |
10849 | if (phy->req_duplex == DUPLEX_FULL) | 10849 | if (phy->req_duplex == DUPLEX_FULL) |
@@ -10859,30 +10859,32 @@ static int bnx2x_54618se_config_init(struct bnx2x_phy *phy, | |||
10859 | 0x09, | 10859 | 0x09, |
10860 | &an_1000_val); | 10860 | &an_1000_val); |
10861 | 10861 | ||
10862 | /* Set 100 speed advertisement */ | 10862 | /* Advertise 10/100 link speed */ |
10863 | if (((phy->req_line_speed == SPEED_AUTO_NEG) && | 10863 | if (phy->req_line_speed == SPEED_AUTO_NEG) { |
10864 | (phy->speed_cap_mask & | 10864 | if (phy->speed_cap_mask & |
10865 | (PORT_HW_CFG_SPEED_CAPABILITY_D0_100M_FULL | | 10865 | PORT_HW_CFG_SPEED_CAPABILITY_D0_10M_HALF) { |
10866 | PORT_HW_CFG_SPEED_CAPABILITY_D0_100M_HALF)))) { | 10866 | an_10_100_val |= (1<<5); |
10867 | an_10_100_val |= (1<<7); | 10867 | autoneg_val |= (1<<9 | 1<<12); |
10868 | /* Enable autoneg and restart autoneg for legacy speeds */ | 10868 | DP(NETIF_MSG_LINK, "Advertising 10M-HD\n"); |
10869 | autoneg_val |= (1<<9 | 1<<12); | 10869 | } |
10870 | 10870 | if (phy->speed_cap_mask & | |
10871 | if (phy->req_duplex == DUPLEX_FULL) | 10871 | PORT_HW_CFG_SPEED_CAPABILITY_D0_10M_FULL) { |
10872 | an_10_100_val |= (1<<8); | ||
10873 | DP(NETIF_MSG_LINK, "Advertising 100M\n"); | ||
10874 | } | ||
10875 | |||
10876 | /* Set 10 speed advertisement */ | ||
10877 | if (((phy->req_line_speed == SPEED_AUTO_NEG) && | ||
10878 | (phy->speed_cap_mask & | ||
10879 | (PORT_HW_CFG_SPEED_CAPABILITY_D0_10M_FULL | | ||
10880 | PORT_HW_CFG_SPEED_CAPABILITY_D0_10M_HALF)))) { | ||
10881 | an_10_100_val |= (1<<5); | ||
10882 | autoneg_val |= (1<<9 | 1<<12); | ||
10883 | if (phy->req_duplex == DUPLEX_FULL) | ||
10884 | an_10_100_val |= (1<<6); | 10872 | an_10_100_val |= (1<<6); |
10885 | DP(NETIF_MSG_LINK, "Advertising 10M\n"); | 10873 | autoneg_val |= (1<<9 | 1<<12); |
10874 | DP(NETIF_MSG_LINK, "Advertising 10M-FD\n"); | ||
10875 | } | ||
10876 | if (phy->speed_cap_mask & | ||
10877 | PORT_HW_CFG_SPEED_CAPABILITY_D0_100M_HALF) { | ||
10878 | an_10_100_val |= (1<<7); | ||
10879 | autoneg_val |= (1<<9 | 1<<12); | ||
10880 | DP(NETIF_MSG_LINK, "Advertising 100M-HD\n"); | ||
10881 | } | ||
10882 | if (phy->speed_cap_mask & | ||
10883 | PORT_HW_CFG_SPEED_CAPABILITY_D0_100M_FULL) { | ||
10884 | an_10_100_val |= (1<<8); | ||
10885 | autoneg_val |= (1<<9 | 1<<12); | ||
10886 | DP(NETIF_MSG_LINK, "Advertising 100M-FD\n"); | ||
10887 | } | ||
10886 | } | 10888 | } |
10887 | 10889 | ||
10888 | /* Only 10/100 are allowed to work in FORCE mode */ | 10890 | /* Only 10/100 are allowed to work in FORCE mode */ |