Commit a33a0155 authored by Sakthivel K's avatar Sakthivel K Committed by James Bottomley

[SCSI] pm80xx: WWN Modification for PM8081/88/89 controllers

Individual WWN read operations based on controller.
PM8081 - Read WWN from Flash VPD.
PM8088/89 - Read WWN from EEPROM.
PM8001 - Read WWN from NVM.
Signed-off-by: default avatarSakthivel K <Sakthivel.SaravananKamalRaju@pmcs.com>
Signed-off-by: default avatarAnand Kumar S <AnandKumar.Santhanam@pmcs.com>
Acked-by: default avatarJack Wang <jack_wang@usish.com>
Reviewed-by: default avatarHannes Reinecke <hare@suse.de>
Signed-off-by: default avatarJames Bottomley <JBottomley@Parallels.com>
parent a70b8fc3
...@@ -605,21 +605,50 @@ static void pm8001_post_sas_ha_init(struct Scsi_Host *shost, ...@@ -605,21 +605,50 @@ static void pm8001_post_sas_ha_init(struct Scsi_Host *shost,
*/ */
static void pm8001_init_sas_add(struct pm8001_hba_info *pm8001_ha) static void pm8001_init_sas_add(struct pm8001_hba_info *pm8001_ha)
{ {
u8 i; u8 i, j;
#ifdef PM8001_READ_VPD #ifdef PM8001_READ_VPD
/* For new SPC controllers WWN is stored in flash vpd
* For SPC/SPCve controllers WWN is stored in EEPROM
* For Older SPC WWN is stored in NVMD
*/
DECLARE_COMPLETION_ONSTACK(completion); DECLARE_COMPLETION_ONSTACK(completion);
struct pm8001_ioctl_payload payload; struct pm8001_ioctl_payload payload;
u16 deviceid;
pci_read_config_word(pm8001_ha->pdev, PCI_DEVICE_ID, &deviceid);
pm8001_ha->nvmd_completion = &completion; pm8001_ha->nvmd_completion = &completion;
payload.minor_function = 0;
payload.length = 128; if (pm8001_ha->chip_id == chip_8001) {
payload.func_specific = kzalloc(128, GFP_KERNEL); if (deviceid == 0x8081) {
payload.minor_function = 4;
payload.length = 4096;
} else {
payload.minor_function = 0;
payload.length = 128;
}
} else {
payload.minor_function = 1;
payload.length = 4096;
}
payload.offset = 0;
payload.func_specific = kzalloc(payload.length, GFP_KERNEL);
PM8001_CHIP_DISP->get_nvmd_req(pm8001_ha, &payload); PM8001_CHIP_DISP->get_nvmd_req(pm8001_ha, &payload);
wait_for_completion(&completion); wait_for_completion(&completion);
for (i = 0, j = 0; i <= 7; i++, j++) {
if (pm8001_ha->chip_id == chip_8001) {
if (deviceid == 0x8081)
pm8001_ha->sas_addr[j] =
payload.func_specific[0x704 + i];
} else
pm8001_ha->sas_addr[j] =
payload.func_specific[0x804 + i];
}
for (i = 0; i < pm8001_ha->chip->n_phy; i++) { for (i = 0; i < pm8001_ha->chip->n_phy; i++) {
memcpy(&pm8001_ha->phy[i].dev_sas_addr, pm8001_ha->sas_addr, memcpy(&pm8001_ha->phy[i].dev_sas_addr,
SAS_ADDR_SIZE); pm8001_ha->sas_addr, SAS_ADDR_SIZE);
PM8001_INIT_DBG(pm8001_ha, PM8001_INIT_DBG(pm8001_ha,
pm8001_printk("phy %d sas_addr = %016llx \n", i, pm8001_printk("phy %d sas_addr = %016llx\n", i,
pm8001_ha->phy[i].dev_sas_addr)); pm8001_ha->phy[i].dev_sas_addr));
} }
#else #else
......
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