Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e6f44b13 authored by Xiang Chen's avatar Xiang Chen Committed by Greg Kroah-Hartman
Browse files

scsi: hisi_sas: send primitive NOTIFY to SSP situation only



[ Upstream commit 569eddcf3a0f4efff4ef96a7012010e0f7daa8b4 ]

Send primitive NOTIFY to SSP situation only, or it causes underflow issue
when sending IO. Also rename hisi_sas_hw.sl_notify() to hisi_sas_hw.
sl_notify_ssp().

Signed-off-by: default avatarXiang Chen <chenxiang66@hisilicon.com>
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>
parent 84d3454e
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -220,7 +220,7 @@ struct hisi_sas_hw {
	int (*slot_index_alloc)(struct hisi_hba *hisi_hba, int *slot_idx,
				struct domain_device *device);
	struct hisi_sas_device *(*alloc_dev)(struct domain_device *device);
	void (*sl_notify)(struct hisi_hba *hisi_hba, int phy_no);
	void (*sl_notify_ssp)(struct hisi_hba *hisi_hba, int phy_no);
	int (*get_free_slot)(struct hisi_hba *hisi_hba, struct hisi_sas_dq *dq);
	void (*start_delivery)(struct hisi_sas_dq *dq);
	void (*prep_ssp)(struct hisi_hba *hisi_hba,
+2 −1
Original line number Diff line number Diff line
@@ -716,7 +716,8 @@ static void hisi_sas_phyup_work(struct work_struct *work)
	struct asd_sas_phy *sas_phy = &phy->sas_phy;
	int phy_no = sas_phy->id;

	hisi_hba->hw->sl_notify(hisi_hba, phy_no); /* This requires a sleep */
	if (phy->identify.target_port_protocols == SAS_PROTOCOL_SSP)
		hisi_hba->hw->sl_notify_ssp(hisi_hba, phy_no);
	hisi_sas_bytes_dmaed(hisi_hba, phy_no);
}

+2 −2
Original line number Diff line number Diff line
@@ -834,7 +834,7 @@ static void phys_init_v1_hw(struct hisi_hba *hisi_hba)
	mod_timer(timer, jiffies + HZ);
}

static void sl_notify_v1_hw(struct hisi_hba *hisi_hba, int phy_no)
static void sl_notify_ssp_v1_hw(struct hisi_hba *hisi_hba, int phy_no)
{
	u32 sl_control;

@@ -1822,7 +1822,7 @@ static struct scsi_host_template sht_v1_hw = {
static const struct hisi_sas_hw hisi_sas_v1_hw = {
	.hw_init = hisi_sas_v1_init,
	.setup_itct = setup_itct_v1_hw,
	.sl_notify = sl_notify_v1_hw,
	.sl_notify_ssp = sl_notify_ssp_v1_hw,
	.clear_itct = clear_itct_v1_hw,
	.prep_smp = prep_smp_v1_hw,
	.prep_ssp = prep_ssp_v1_hw,
+2 −2
Original line number Diff line number Diff line
@@ -1584,7 +1584,7 @@ static void phys_init_v2_hw(struct hisi_hba *hisi_hba)
	}
}

static void sl_notify_v2_hw(struct hisi_hba *hisi_hba, int phy_no)
static void sl_notify_ssp_v2_hw(struct hisi_hba *hisi_hba, int phy_no)
{
	u32 sl_control;

@@ -3575,7 +3575,7 @@ static const struct hisi_sas_hw hisi_sas_v2_hw = {
	.setup_itct = setup_itct_v2_hw,
	.slot_index_alloc = slot_index_alloc_quirk_v2_hw,
	.alloc_dev = alloc_dev_quirk_v2_hw,
	.sl_notify = sl_notify_v2_hw,
	.sl_notify_ssp = sl_notify_ssp_v2_hw,
	.get_wideport_bitmap = get_wideport_bitmap_v2_hw,
	.clear_itct = clear_itct_v2_hw,
	.free_device = free_device_v2_hw,
+2 −2
Original line number Diff line number Diff line
@@ -827,7 +827,7 @@ static void phys_init_v3_hw(struct hisi_hba *hisi_hba)
	}
}

static void sl_notify_v3_hw(struct hisi_hba *hisi_hba, int phy_no)
static void sl_notify_ssp_v3_hw(struct hisi_hba *hisi_hba, int phy_no)
{
	u32 sl_control;

@@ -2127,7 +2127,7 @@ static const struct hisi_sas_hw hisi_sas_v3_hw = {
	.get_wideport_bitmap = get_wideport_bitmap_v3_hw,
	.complete_hdr_size = sizeof(struct hisi_sas_complete_v3_hdr),
	.clear_itct = clear_itct_v3_hw,
	.sl_notify = sl_notify_v3_hw,
	.sl_notify_ssp = sl_notify_ssp_v3_hw,
	.prep_ssp = prep_ssp_v3_hw,
	.prep_smp = prep_smp_v3_hw,
	.prep_stp = prep_ata_v3_hw,