mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-02 02:16:37 +07:00
scsi: hisi_sas: fix the issue of link rate inconsistency
In sysfs, there are two files about minimum linkrate, and also two files for maximum linkrate. Take maximum linkrate example, maximum_linkrate_hw is read-only and indicated by the register HARD_PHY_LINKRATE, and maximum_linkrate is read-write and corresponding to the register PROG_PHY_LINK_RATE. But in the function phy_up_v*_hw(), we get *_linkrate value from HARD_PHY_LINKRATE. It is not right. This patch is to fix this issue. Unreferenced PHY-interrupt enum is also removed for v3 hw. Signed-off-by: Xiaofei Tan <tanxiaofei@huawei.com> Signed-off-by: John Garry <john.garry@huawei.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
67c2bf2331
commit
eba8c20c71
@ -683,6 +683,8 @@ static void hisi_sas_phy_init(struct hisi_hba *hisi_hba, int phy_no)
|
||||
|
||||
phy->hisi_hba = hisi_hba;
|
||||
phy->port = NULL;
|
||||
phy->minimum_linkrate = SAS_LINK_RATE_1_5_GBPS;
|
||||
phy->maximum_linkrate = hisi_hba->hw->phy_get_max_linkrate();
|
||||
sas_phy->enabled = (phy_no < hisi_hba->n_phy) ? 1 : 0;
|
||||
sas_phy->class = SAS;
|
||||
sas_phy->iproto = SAS_PROTOCOL_ALL;
|
||||
|
@ -873,7 +873,6 @@ static void phy_set_linkrate_v1_hw(struct hisi_hba *hisi_hba, int phy_no,
|
||||
sas_phy->phy->maximum_linkrate = max;
|
||||
sas_phy->phy->minimum_linkrate = min;
|
||||
|
||||
min -= SAS_LINK_RATE_1_5_GBPS;
|
||||
max -= SAS_LINK_RATE_1_5_GBPS;
|
||||
|
||||
for (i = 0; i <= max; i++)
|
||||
|
@ -1603,7 +1603,6 @@ static void phy_set_linkrate_v2_hw(struct hisi_hba *hisi_hba, int phy_no,
|
||||
sas_phy->phy->maximum_linkrate = max;
|
||||
sas_phy->phy->minimum_linkrate = min;
|
||||
|
||||
min -= SAS_LINK_RATE_1_5_GBPS;
|
||||
max -= SAS_LINK_RATE_1_5_GBPS;
|
||||
|
||||
for (i = 0; i <= max; i++)
|
||||
@ -2684,7 +2683,7 @@ static int prep_abort_v2_hw(struct hisi_hba *hisi_hba,
|
||||
static int phy_up_v2_hw(int phy_no, struct hisi_hba *hisi_hba)
|
||||
{
|
||||
int i, res = IRQ_HANDLED;
|
||||
u32 port_id, link_rate, hard_phy_linkrate;
|
||||
u32 port_id, link_rate;
|
||||
struct hisi_sas_phy *phy = &hisi_hba->phy[phy_no];
|
||||
struct asd_sas_phy *sas_phy = &phy->sas_phy;
|
||||
struct device *dev = hisi_hba->dev;
|
||||
@ -2723,11 +2722,6 @@ static int phy_up_v2_hw(int phy_no, struct hisi_hba *hisi_hba)
|
||||
}
|
||||
|
||||
sas_phy->linkrate = link_rate;
|
||||
hard_phy_linkrate = hisi_sas_phy_read32(hisi_hba, phy_no,
|
||||
HARD_PHY_LINKRATE);
|
||||
phy->maximum_linkrate = hard_phy_linkrate & 0xf;
|
||||
phy->minimum_linkrate = (hard_phy_linkrate >> 4) & 0xf;
|
||||
|
||||
sas_phy->oob_mode = SAS_OOB_MODE;
|
||||
memcpy(sas_phy->attached_sas_addr, &id->sas_addr, SAS_ADDR_SIZE);
|
||||
dev_info(dev, "phyup: phy%d link_rate=%d\n", phy_no, link_rate);
|
||||
|
@ -340,12 +340,6 @@ struct hisi_sas_err_record_v3 {
|
||||
#define HISI_SAS_COMMAND_ENTRIES_V3_HW 4096
|
||||
#define HISI_SAS_MSI_COUNT_V3_HW 32
|
||||
|
||||
enum {
|
||||
HISI_SAS_PHY_PHY_UPDOWN,
|
||||
HISI_SAS_PHY_CHNL_INT,
|
||||
HISI_SAS_PHY_INT_NR
|
||||
};
|
||||
|
||||
#define DIR_NO_DATA 0
|
||||
#define DIR_TO_INI 1
|
||||
#define DIR_TO_DEVICE 2
|
||||
@ -1121,7 +1115,7 @@ static int prep_abort_v3_hw(struct hisi_hba *hisi_hba,
|
||||
static int phy_up_v3_hw(int phy_no, struct hisi_hba *hisi_hba)
|
||||
{
|
||||
int i, res = 0;
|
||||
u32 context, port_id, link_rate, hard_phy_linkrate;
|
||||
u32 context, port_id, link_rate;
|
||||
struct hisi_sas_phy *phy = &hisi_hba->phy[phy_no];
|
||||
struct asd_sas_phy *sas_phy = &phy->sas_phy;
|
||||
struct device *dev = hisi_hba->dev;
|
||||
@ -1139,10 +1133,6 @@ static int phy_up_v3_hw(int phy_no, struct hisi_hba *hisi_hba)
|
||||
goto end;
|
||||
}
|
||||
sas_phy->linkrate = link_rate;
|
||||
hard_phy_linkrate = hisi_sas_phy_read32(hisi_hba, phy_no,
|
||||
HARD_PHY_LINKRATE);
|
||||
phy->maximum_linkrate = hard_phy_linkrate & 0xf;
|
||||
phy->minimum_linkrate = (hard_phy_linkrate >> 4) & 0xf;
|
||||
phy->phy_type &= ~(PORT_TYPE_SAS | PORT_TYPE_SATA);
|
||||
|
||||
/* Check for SATA dev */
|
||||
@ -1864,7 +1854,6 @@ static void phy_set_linkrate_v3_hw(struct hisi_hba *hisi_hba, int phy_no,
|
||||
sas_phy->phy->maximum_linkrate = max;
|
||||
sas_phy->phy->minimum_linkrate = min;
|
||||
|
||||
min -= SAS_LINK_RATE_1_5_GBPS;
|
||||
max -= SAS_LINK_RATE_1_5_GBPS;
|
||||
|
||||
for (i = 0; i <= max; i++)
|
||||
|
Loading…
Reference in New Issue
Block a user