• John Garry's avatar
    scsi: hisi_sas: Set PHY linkrate when disconnected · e1b85487
    John Garry authored
    [ Upstream commit efdcad62 ]
    
    When the PHY comes down, we currently do not set the negotiated linkrate:
    
    root@(none)$ pwd
    /sys/class/sas_phy/phy-0:0
    root@(none)$ more enable
    1
    root@(none)$ more negotiated_linkrate
    12.0 Gbit
    root@(none)$ echo 0 > enable
    root@(none)$ more negotiated_linkrate
    12.0 Gbit
    root@(none)$
    
    This patch fixes the driver code to set it properly when the PHY comes
    down.
    
    If the PHY had been enabled, then set unknown; otherwise, flag as disabled.
    
    The logical place to set the negotiated linkrate for this scenario is PHY
    down routine, which is called from the PHY down ISR.
    
    However, it is not possible to know if the PHY comes down due to PHY
    disable or loss of link, as sas_phy.enabled member is not set until after
    the transport disable routine is complete, which races with the PHY down
    ISR.
    
    As an imperfect solution, use sas_phy_data.enable as the flag to know if
    the PHY is down due to disable. It's imperfect, as sas_phy_data is internal
    to libsas.
    
    I can't see another way without adding a new field to hisi_sas_phy and
    managing it, or changing SCSI SAS transport.
    Signed-off-by: default avatarJohn Garry <john.garry@huawei.com>
    Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
    e1b85487
hisi_sas_main.c 54.3 KB