mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-26 23:30:55 +07:00
bnx2x: Remove 100Mb force speed for BCM84833
Remove unsupported speed of 100Mb force for BCM84833 due to hardware limitation. Signed-off-by: Yaniv Rosner <yanivr@broadcom.com> Signed-off-by: Eilon Greenstein <eilong@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
127302bb42
commit
7531832780
@ -365,13 +365,18 @@ static int bnx2x_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
|
|||||||
DP(NETIF_MSG_LINK, "cfg_idx = %x\n", cfg_idx);
|
DP(NETIF_MSG_LINK, "cfg_idx = %x\n", cfg_idx);
|
||||||
|
|
||||||
if (cmd->autoneg == AUTONEG_ENABLE) {
|
if (cmd->autoneg == AUTONEG_ENABLE) {
|
||||||
|
u32 an_supported_speed = bp->port.supported[cfg_idx];
|
||||||
|
if (bp->link_params.phy[EXT_PHY1].type ==
|
||||||
|
PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM84833)
|
||||||
|
an_supported_speed |= (SUPPORTED_100baseT_Half |
|
||||||
|
SUPPORTED_100baseT_Full);
|
||||||
if (!(bp->port.supported[cfg_idx] & SUPPORTED_Autoneg)) {
|
if (!(bp->port.supported[cfg_idx] & SUPPORTED_Autoneg)) {
|
||||||
DP(NETIF_MSG_LINK, "Autoneg not supported\n");
|
DP(NETIF_MSG_LINK, "Autoneg not supported\n");
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* advertise the requested speed and duplex if supported */
|
/* advertise the requested speed and duplex if supported */
|
||||||
if (cmd->advertising & ~(bp->port.supported[cfg_idx])) {
|
if (cmd->advertising & ~an_supported_speed) {
|
||||||
DP(NETIF_MSG_LINK, "Advertisement parameters "
|
DP(NETIF_MSG_LINK, "Advertisement parameters "
|
||||||
"are not supported\n");
|
"are not supported\n");
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
@ -9454,13 +9454,10 @@ static int bnx2x_848xx_cmn_config_init(struct bnx2x_phy *phy,
|
|||||||
an_1000_val);
|
an_1000_val);
|
||||||
|
|
||||||
/* set 100 speed advertisement */
|
/* set 100 speed advertisement */
|
||||||
if (((phy->req_line_speed == SPEED_AUTO_NEG) &&
|
if ((phy->req_line_speed == SPEED_AUTO_NEG) &&
|
||||||
(phy->speed_cap_mask &
|
(phy->speed_cap_mask &
|
||||||
(PORT_HW_CFG_SPEED_CAPABILITY_D0_100M_FULL |
|
(PORT_HW_CFG_SPEED_CAPABILITY_D0_100M_FULL |
|
||||||
PORT_HW_CFG_SPEED_CAPABILITY_D0_100M_HALF)) &&
|
PORT_HW_CFG_SPEED_CAPABILITY_D0_100M_HALF))) {
|
||||||
(phy->supported &
|
|
||||||
(SUPPORTED_100baseT_Half |
|
|
||||||
SUPPORTED_100baseT_Full)))) {
|
|
||||||
an_10_100_val |= (1<<7);
|
an_10_100_val |= (1<<7);
|
||||||
/* Enable autoneg and restart autoneg for legacy speeds */
|
/* Enable autoneg and restart autoneg for legacy speeds */
|
||||||
autoneg_val |= (1<<9 | 1<<12);
|
autoneg_val |= (1<<9 | 1<<12);
|
||||||
@ -11528,6 +11525,19 @@ static int bnx2x_populate_ext_phy(struct bnx2x *bp,
|
|||||||
}
|
}
|
||||||
phy->mdio_ctrl = bnx2x_get_emac_base(bp, mdc_mdio_access, port);
|
phy->mdio_ctrl = bnx2x_get_emac_base(bp, mdc_mdio_access, port);
|
||||||
|
|
||||||
|
if ((phy->type == PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM84833) &&
|
||||||
|
(phy->ver_addr)) {
|
||||||
|
/*
|
||||||
|
* Remove 100Mb link supported for BCM84833 when phy fw
|
||||||
|
* version lower than or equal to 1.39
|
||||||
|
*/
|
||||||
|
u32 raw_ver = REG_RD(bp, phy->ver_addr);
|
||||||
|
if (((raw_ver & 0x7F) <= 39) &&
|
||||||
|
(((raw_ver & 0xF80) >> 7) <= 1))
|
||||||
|
phy->supported &= ~(SUPPORTED_100baseT_Half |
|
||||||
|
SUPPORTED_100baseT_Full);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* In case mdc/mdio_access of the external phy is different than the
|
* In case mdc/mdio_access of the external phy is different than the
|
||||||
* mdc/mdio access of the XGXS, a HW lock must be taken in each access
|
* mdc/mdio access of the XGXS, a HW lock must be taken in each access
|
||||||
|
Loading…
Reference in New Issue
Block a user