lkml.org 
[lkml]   [2020]   [Mar]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 017/123] net: hns3: fix a not link up issue when fibre port supports autoneg
    Date
    From: Jian Shen <shenjian15@huawei.com>

    [ Upstream commit 68e1006f618e509fc7869259fe83ceec4a95dac3 ]

    When fibre port supports auto-negotiation, the IMP(Intelligent
    Management Process) processes the speed of auto-negotiation
    and the user's speed separately.
    For below case, the port will get a not link up problem.
    step 1: disables auto-negotiation and sets speed to A, then
    the driver's MAC speed will be updated to A.
    step 2: enables auto-negotiation and MAC gets negotiated
    speed B, then the driver's MAC speed will be updated to B
    through querying in periodical task.
    step 3: MAC gets new negotiated speed A.
    step 4: disables auto-negotiation and sets speed to B before
    periodical task query new MAC speed A, the driver will ignore
    the speed configuration.

    This patch fixes it by skipping speed and duplex checking when
    fibre port supports auto-negotiation.

    Fixes: 22f48e24a23d ("net: hns3: add autoneg and change speed support for fibre port")
    Signed-off-by: Jian Shen <shenjian15@huawei.com>
    Signed-off-by: Huazhong Tan <tanhuazhong@huawei.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c | 4 +++-
    1 file changed, 3 insertions(+), 1 deletion(-)

    --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
    +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
    @@ -2417,10 +2417,12 @@ static int hclge_cfg_mac_speed_dup_hw(st

    int hclge_cfg_mac_speed_dup(struct hclge_dev *hdev, int speed, u8 duplex)
    {
    + struct hclge_mac *mac = &hdev->hw.mac;
    int ret;

    duplex = hclge_check_speed_dup(duplex, speed);
    - if (hdev->hw.mac.speed == speed && hdev->hw.mac.duplex == duplex)
    + if (!mac->support_autoneg && mac->speed == speed &&
    + mac->duplex == duplex)
    return 0;

    ret = hclge_cfg_mac_speed_dup_hw(hdev, speed, duplex);

    \
     
     \ /
      Last update: 2020-03-17 12:01    [W:4.251 / U:0.172 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site