• Changyuan Lyu's avatar
    scsi: pm80xx: Fix 'Unknown' max/min linkrate · e78276ca
    Changyuan Lyu authored
    Currently, the data flow of the max/min linkrate in the driver is
    
     * in pm8001_get_lrate_mode():
       hardcoded value ==> struct sas_phy
    
     * in pm8001_bytes_dmaed():
       struct pm8001_phy ==> struct sas_phy
    
     * in pm8001_phy_control():
       libsas data ==> struct pm8001_phy
    
    Since pm8001_bytes_dmaed() follows pm8001_get_lrate_mode(), and the fields
    in struct pm8001_phy are not initialized, sysfs
    `/sys/class/sas_phy/phy-*/maximum_linkrate` always shows `Unknown`.
    
    To fix the issue, change the dataflow to the following:
    
     * in pm8001_phy_init():
       initial value ==> struct pm8001_phy
    
     * in pm8001_get_lrate_mode():
       struct pm8001_phy ==> struct sas_phy
    
     * in pm8001_phy_control():
       libsas data ==> struct pm8001_phy
    
    For negotiated linkrate, the current dataflow is:
    
     * in pm8001_get_lrate_mode():
       iomb data ==> struct asd_sas_phy ==> struct sas_phy
    
     * in pm8001_bytes_dmaed():
       struct asd_sas_phy ==> struct sas_phy
    
    Since pm8001_bytes_dmaed() follows pm8001_get_lrate_mode(), the assignment
    statements in pm8001_bytes_dmaed() are unnecessary and cleaned up.
    
    Link: https://lore.kernel.org/r/20220707175210.528858-1-changyuanl@google.comReviewed-by: default avatarIgor Pylypiv <ipylypiv@google.com>
    Acked-by: default avatarJack Wang <jinpu.wang@ionos.com>
    Signed-off-by: default avatarChangyuan Lyu <changyuanl@google.com>
    Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
    e78276ca
pm8001_init.c 45.2 KB