aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/pm8001/pm80xx_hwi.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/scsi/pm8001/pm80xx_hwi.c')
-rw-r--r--drivers/scsi/pm8001/pm80xx_hwi.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/drivers/scsi/pm8001/pm80xx_hwi.c b/drivers/scsi/pm8001/pm80xx_hwi.c
index 9a389f1508de..eb4fee61df72 100644
--- a/drivers/scsi/pm8001/pm80xx_hwi.c
+++ b/drivers/scsi/pm8001/pm80xx_hwi.c
@@ -1267,6 +1267,8 @@ pm80xx_chip_soft_rst(struct pm8001_hba_info *pm8001_ha)
1267 /* check iButton feature support for motherboard controller */ 1267 /* check iButton feature support for motherboard controller */
1268 if (pm8001_ha->pdev->subsystem_vendor != 1268 if (pm8001_ha->pdev->subsystem_vendor !=
1269 PCI_VENDOR_ID_ADAPTEC2 && 1269 PCI_VENDOR_ID_ADAPTEC2 &&
1270 pm8001_ha->pdev->subsystem_vendor !=
1271 PCI_VENDOR_ID_ATTO &&
1270 pm8001_ha->pdev->subsystem_vendor != 0) { 1272 pm8001_ha->pdev->subsystem_vendor != 0) {
1271 ibutton0 = pm8001_cr32(pm8001_ha, 0, 1273 ibutton0 = pm8001_cr32(pm8001_ha, 0,
1272 MSGU_HOST_SCRATCH_PAD_6); 1274 MSGU_HOST_SCRATCH_PAD_6);
@@ -4576,6 +4578,38 @@ void pm8001_set_phy_profile(struct pm8001_hba_info *pm8001_ha,
4576 } 4578 }
4577 PM8001_INIT_DBG(pm8001_ha, pm8001_printk("phy settings completed\n")); 4579 PM8001_INIT_DBG(pm8001_ha, pm8001_printk("phy settings completed\n"));
4578} 4580}
4581
4582void pm8001_set_phy_profile_single(struct pm8001_hba_info *pm8001_ha,
4583 u32 phy, u32 length, u32 *buf)
4584{
4585 u32 tag, opc;
4586 int rc, i;
4587 struct set_phy_profile_req payload;
4588 struct inbound_queue_table *circularQ;
4589
4590 memset(&payload, 0, sizeof(payload));
4591
4592 rc = pm8001_tag_alloc(pm8001_ha, &tag);
4593 if (rc)
4594 PM8001_INIT_DBG(pm8001_ha, pm8001_printk("Invalid tag"));
4595
4596 circularQ = &pm8001_ha->inbnd_q_tbl[0];
4597 opc = OPC_INB_SET_PHY_PROFILE;
4598
4599 payload.tag = cpu_to_le32(tag);
4600 payload.ppc_phyid = (((SAS_PHY_ANALOG_SETTINGS_PAGE & 0xF) << 8)
4601 | (phy & 0xFF));
4602
4603 for (i = 0; i < length; i++)
4604 payload.reserved[i] = cpu_to_le32(*(buf + i));
4605
4606 rc = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &payload, 0);
4607 if (rc)
4608 pm8001_tag_free(pm8001_ha, tag);
4609
4610 PM8001_INIT_DBG(pm8001_ha,
4611 pm8001_printk("PHY %d settings applied", phy));
4612}
4579const struct pm8001_dispatch pm8001_80xx_dispatch = { 4613const struct pm8001_dispatch pm8001_80xx_dispatch = {
4580 .name = "pmc80xx", 4614 .name = "pmc80xx",
4581 .chip_init = pm80xx_chip_init, 4615 .chip_init = pm80xx_chip_init,