scsi: pm80xx: Different SAS addresses for phys.
Different SAS addresses are assigned for each set of phys. Signed-off-by: Viswas G <Viswas.G@microsemi.com> Acked-by: Jack Wang <jinpu.wang@profitbricks.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
Родитель
24fff017e1
Коммит
6c85e4bcfd
|
@ -132,7 +132,7 @@ static void pm8001_phy_init(struct pm8001_hba_info *pm8001_ha, int phy_id)
|
||||||
sas_phy->oob_mode = OOB_NOT_CONNECTED;
|
sas_phy->oob_mode = OOB_NOT_CONNECTED;
|
||||||
sas_phy->linkrate = SAS_LINK_RATE_UNKNOWN;
|
sas_phy->linkrate = SAS_LINK_RATE_UNKNOWN;
|
||||||
sas_phy->id = phy_id;
|
sas_phy->id = phy_id;
|
||||||
sas_phy->sas_addr = &pm8001_ha->sas_addr[0];
|
sas_phy->sas_addr = (u8 *)&phy->dev_sas_addr;
|
||||||
sas_phy->frame_rcvd = &phy->frame_rcvd[0];
|
sas_phy->frame_rcvd = &phy->frame_rcvd[0];
|
||||||
sas_phy->ha = (struct sas_ha_struct *)pm8001_ha->shost->hostdata;
|
sas_phy->ha = (struct sas_ha_struct *)pm8001_ha->shost->hostdata;
|
||||||
sas_phy->lldd_phy = phy;
|
sas_phy->lldd_phy = phy;
|
||||||
|
@ -591,10 +591,12 @@ static void pm8001_post_sas_ha_init(struct Scsi_Host *shost,
|
||||||
for (i = 0; i < chip_info->n_phy; i++) {
|
for (i = 0; i < chip_info->n_phy; i++) {
|
||||||
sha->sas_phy[i] = &pm8001_ha->phy[i].sas_phy;
|
sha->sas_phy[i] = &pm8001_ha->phy[i].sas_phy;
|
||||||
sha->sas_port[i] = &pm8001_ha->port[i].sas_port;
|
sha->sas_port[i] = &pm8001_ha->port[i].sas_port;
|
||||||
|
sha->sas_phy[i]->sas_addr =
|
||||||
|
(u8 *)&pm8001_ha->phy[i].dev_sas_addr;
|
||||||
}
|
}
|
||||||
sha->sas_ha_name = DRV_NAME;
|
sha->sas_ha_name = DRV_NAME;
|
||||||
sha->dev = pm8001_ha->dev;
|
sha->dev = pm8001_ha->dev;
|
||||||
|
sha->strict_wide_ports = 1;
|
||||||
sha->lldd_module = THIS_MODULE;
|
sha->lldd_module = THIS_MODULE;
|
||||||
sha->sas_addr = &pm8001_ha->sas_addr[0];
|
sha->sas_addr = &pm8001_ha->sas_addr[0];
|
||||||
sha->num_phys = chip_info->n_phy;
|
sha->num_phys = chip_info->n_phy;
|
||||||
|
@ -611,6 +613,7 @@ 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, j;
|
u8 i, j;
|
||||||
|
u8 sas_add[8];
|
||||||
#ifdef PM8001_READ_VPD
|
#ifdef PM8001_READ_VPD
|
||||||
/* For new SPC controllers WWN is stored in flash vpd
|
/* For new SPC controllers WWN is stored in flash vpd
|
||||||
* For SPC/SPCve controllers WWN is stored in EEPROM
|
* For SPC/SPCve controllers WWN is stored in EEPROM
|
||||||
|
@ -672,10 +675,12 @@ static void pm8001_init_sas_add(struct pm8001_hba_info *pm8001_ha)
|
||||||
pm8001_ha->sas_addr[j] =
|
pm8001_ha->sas_addr[j] =
|
||||||
payload.func_specific[0x804 + i];
|
payload.func_specific[0x804 + i];
|
||||||
}
|
}
|
||||||
|
memcpy(sas_add, pm8001_ha->sas_addr, SAS_ADDR_SIZE);
|
||||||
for (i = 0; i < pm8001_ha->chip->n_phy; i++) {
|
for (i = 0; i < pm8001_ha->chip->n_phy; i++) {
|
||||||
|
if (i && ((i % 4) == 0))
|
||||||
|
sas_add[7] = sas_add[7] + 4;
|
||||||
memcpy(&pm8001_ha->phy[i].dev_sas_addr,
|
memcpy(&pm8001_ha->phy[i].dev_sas_addr,
|
||||||
pm8001_ha->sas_addr, SAS_ADDR_SIZE);
|
sas_add, 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));
|
||||||
|
|
|
@ -3041,7 +3041,6 @@ hw_event_phy_down(struct pm8001_hba_info *pm8001_ha, void *piomb)
|
||||||
port->port_state = portstate;
|
port->port_state = portstate;
|
||||||
phy->identify.device_type = 0;
|
phy->identify.device_type = 0;
|
||||||
phy->phy_attached = 0;
|
phy->phy_attached = 0;
|
||||||
memset(&phy->dev_sas_addr, 0, SAS_ADDR_SIZE);
|
|
||||||
switch (portstate) {
|
switch (portstate) {
|
||||||
case PORT_VALID:
|
case PORT_VALID:
|
||||||
break;
|
break;
|
||||||
|
@ -4394,7 +4393,7 @@ pm80xx_chip_phy_start_req(struct pm8001_hba_info *pm8001_ha, u8 phy_id)
|
||||||
payload.sas_identify.dev_type = SAS_END_DEVICE;
|
payload.sas_identify.dev_type = SAS_END_DEVICE;
|
||||||
payload.sas_identify.initiator_bits = SAS_PROTOCOL_ALL;
|
payload.sas_identify.initiator_bits = SAS_PROTOCOL_ALL;
|
||||||
memcpy(payload.sas_identify.sas_addr,
|
memcpy(payload.sas_identify.sas_addr,
|
||||||
pm8001_ha->sas_addr, SAS_ADDR_SIZE);
|
&pm8001_ha->phy[phy_id].dev_sas_addr, SAS_ADDR_SIZE);
|
||||||
payload.sas_identify.phy_id = phy_id;
|
payload.sas_identify.phy_id = phy_id;
|
||||||
ret = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opcode, &payload, 0);
|
ret = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opcode, &payload, 0);
|
||||||
return ret;
|
return ret;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче