Commit 25c6edbd authored by Viswas G's avatar Viswas G Committed by Martin K. Petersen

scsi: pm80xx: tag allocation for phy control request.

tag is taken from the tag pool instead of using the hardcoded tag
value(1).
Signed-off-by: default avatarDeepak Ukey <deepak.ukey@microsemi.com>
Signed-off-by: default avatarViswas G <Viswas.G@microsemi.com>
Acked-by: default avatarJack Wang <jinpu.wang@profitbricks.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 6c85e4bc
...@@ -3198,11 +3198,13 @@ pm8001_mpi_get_nvmd_resp(struct pm8001_hba_info *pm8001_ha, void *piomb) ...@@ -3198,11 +3198,13 @@ pm8001_mpi_get_nvmd_resp(struct pm8001_hba_info *pm8001_ha, void *piomb)
int pm8001_mpi_local_phy_ctl(struct pm8001_hba_info *pm8001_ha, void *piomb) int pm8001_mpi_local_phy_ctl(struct pm8001_hba_info *pm8001_ha, void *piomb)
{ {
u32 tag;
struct local_phy_ctl_resp *pPayload = struct local_phy_ctl_resp *pPayload =
(struct local_phy_ctl_resp *)(piomb + 4); (struct local_phy_ctl_resp *)(piomb + 4);
u32 status = le32_to_cpu(pPayload->status); u32 status = le32_to_cpu(pPayload->status);
u32 phy_id = le32_to_cpu(pPayload->phyop_phyid) & ID_BITS; u32 phy_id = le32_to_cpu(pPayload->phyop_phyid) & ID_BITS;
u32 phy_op = le32_to_cpu(pPayload->phyop_phyid) & OP_BITS; u32 phy_op = le32_to_cpu(pPayload->phyop_phyid) & OP_BITS;
tag = le32_to_cpu(pPayload->tag);
if (status != 0) { if (status != 0) {
PM8001_MSG_DBG(pm8001_ha, PM8001_MSG_DBG(pm8001_ha,
pm8001_printk("%x phy execute %x phy op failed!\n", pm8001_printk("%x phy execute %x phy op failed!\n",
...@@ -3211,6 +3213,7 @@ int pm8001_mpi_local_phy_ctl(struct pm8001_hba_info *pm8001_ha, void *piomb) ...@@ -3211,6 +3213,7 @@ int pm8001_mpi_local_phy_ctl(struct pm8001_hba_info *pm8001_ha, void *piomb)
PM8001_MSG_DBG(pm8001_ha, PM8001_MSG_DBG(pm8001_ha,
pm8001_printk("%x phy execute %x phy op success!\n", pm8001_printk("%x phy execute %x phy op success!\n",
phy_id, phy_op)); phy_id, phy_op));
pm8001_tag_free(pm8001_ha, tag);
return 0; return 0;
} }
......
...@@ -4500,17 +4500,20 @@ static int pm80xx_chip_reg_dev_req(struct pm8001_hba_info *pm8001_ha, ...@@ -4500,17 +4500,20 @@ static int pm80xx_chip_reg_dev_req(struct pm8001_hba_info *pm8001_ha,
static int pm80xx_chip_phy_ctl_req(struct pm8001_hba_info *pm8001_ha, static int pm80xx_chip_phy_ctl_req(struct pm8001_hba_info *pm8001_ha,
u32 phyId, u32 phy_op) u32 phyId, u32 phy_op)
{ {
u32 tag;
int rc;
struct local_phy_ctl_req payload; struct local_phy_ctl_req payload;
struct inbound_queue_table *circularQ; struct inbound_queue_table *circularQ;
int ret;
u32 opc = OPC_INB_LOCAL_PHY_CONTROL; u32 opc = OPC_INB_LOCAL_PHY_CONTROL;
memset(&payload, 0, sizeof(payload)); memset(&payload, 0, sizeof(payload));
rc = pm8001_tag_alloc(pm8001_ha, &tag);
if (rc)
return rc;
circularQ = &pm8001_ha->inbnd_q_tbl[0]; circularQ = &pm8001_ha->inbnd_q_tbl[0];
payload.tag = cpu_to_le32(1); payload.tag = cpu_to_le32(tag);
payload.phyop_phyid = payload.phyop_phyid =
cpu_to_le32(((phy_op & 0xFF) << 8) | (phyId & 0xFF)); cpu_to_le32(((phy_op & 0xFF) << 8) | (phyId & 0xFF));
ret = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &payload, 0); return pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &payload, 0);
return ret;
} }
static u32 pm80xx_chip_is_our_interupt(struct pm8001_hba_info *pm8001_ha) static u32 pm80xx_chip_is_our_interupt(struct pm8001_hba_info *pm8001_ha)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment