Re: [PATCH 3/6] pm80xx : Different SAS addresses for phys.

2017-09-01 Thread Jack Wang
2017-08-30 18:55 GMT+02:00 Viswas G <viswa...@microsemi.com>:
> Hi Jack,
>
> This is a customer requirement. Since the SAS addresses of all the phys were 
> same , when the attached SAS addresses are different, it was forming only one 
> domain.  If we assign different SAS addresses, this will cause duplicate 
> domain unless we set the strict_wide_port to 1.
>
> Regards,
> Viswas G

Ok, understand now!

Acked-by: Jack Wang <jinpu.w...@profitbricks.com>
Thanks!
>
>
>> -Original Message-
>> From: Jack Wang [mailto:xjtu...@gmail.com]
>> Sent: Tuesday, August 29, 2017 4:55 PM
>> To: Viswas G <viswa...@microsemi.com>
>> Cc: linux-scsi@vger.kernel.org; Vasanthalakshmi Tharmarajan
>> <vasanthalakshmi.t...@microsemi.com>
>> Subject: Re: [PATCH 3/6] pm80xx : Different SAS addresses for phys.
>>
>> EXTERNAL EMAIL
>>
>>
>> 2015-01-30 7:06 GMT+01:00 Viswas G <viswa...@microsemi.com>:
>> > Different SAS addresses are assigned for each set of phys.
>> >
>> > Signed-off-by: Viswas G <viswa...@microsemi.com>
>> > ---
>> >  drivers/scsi/pm8001/pm8001_init.c | 13 +
>> >  drivers/scsi/pm8001/pm80xx_hwi.c  |  3 +--
>> >  2 files changed, 10 insertions(+), 6 deletions(-)
>> >
>> > diff --git a/drivers/scsi/pm8001/pm8001_init.c
>> b/drivers/scsi/pm8001/pm8001_init.c
>> > index 034b2f7d1135..d282f1562615 100644
>> > --- a/drivers/scsi/pm8001/pm8001_init.c
>> > +++ b/drivers/scsi/pm8001/pm8001_init.c
>> > @@ -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->linkrate = SAS_LINK_RATE_UNKNOWN;
>> > sas_phy->id = phy_id;
>> > -   sas_phy->sas_addr = _ha->sas_addr[0];
>> > +   sas_phy->sas_addr = (u8 *)>dev_sas_addr;
>> > sas_phy->frame_rcvd = >frame_rcvd[0];
>> > sas_phy->ha = (struct sas_ha_struct *)pm8001_ha->shost->hostdata;
>> > sas_phy->lldd_phy = phy;
>> > @@ -593,10 +593,12 @@ static void  pm8001_post_sas_ha_init(struct
>> Scsi_Host *shost,
>> > for (i = 0; i < chip_info->n_phy; i++) {
>> > sha->sas_phy[i] = _ha->phy[i].sas_phy;
>> > sha->sas_port[i] = _ha->port[i].sas_port;
>> > +   sha->sas_phy[i]->sas_addr =
>> > +   (u8 *)_ha->phy[i].dev_sas_addr;
>> > }
>> > sha->sas_ha_name = DRV_NAME;
>> > sha->dev = pm8001_ha->dev;
>> > -
>> > +   sha->strict_wide_ports = 1;
>> > sha->lldd_module = THIS_MODULE;
>> > sha->sas_addr = _ha->sas_addr[0];
>> > sha->num_phys = chip_info->n_phy;
>> > @@ -613,6 +615,7 @@ static void  pm8001_post_sas_ha_init(struct
>> Scsi_Host *shost,
>> >  static void pm8001_init_sas_add(struct pm8001_hba_info *pm8001_ha)
>> >  {
>> > u8 i, j;
>> > +   u8 sas_add[8];
>> >  #ifdef PM8001_READ_VPD
>> > /* For new SPC controllers WWN is stored in flash vpd
>> > *  For SPC/SPCve controllers WWN is stored in EEPROM
>> > @@ -674,10 +677,12 @@ static void pm8001_init_sas_add(struct
>> pm8001_hba_info *pm8001_ha)
>> > pm8001_ha->sas_addr[j] =
>> > 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++) {
>> > +   if (i && ((i % 4) == 0))
>> > +   sas_add[7] = sas_add[7] + 4;
>> > memcpy(_ha->phy[i].dev_sas_addr,
>> > -   pm8001_ha->sas_addr, SAS_ADDR_SIZE);
>> > +   sas_add, SAS_ADDR_SIZE);
>> > PM8001_INIT_DBG(pm8001_ha,
>> > pm8001_printk("phy %d sas_addr = %016llx\n", i,
>> > pm8001_ha->phy[i].dev_sas_addr));
>> > diff --git a/drivers/scsi/pm8001/pm80xx_hwi.c
>> b/drivers/scsi/pm8001/pm80xx_hwi.c
>> > index 8fb5ddf08cc4..a07b023c09bf 100644
>> > --- a/drivers/scsi/pm8001/pm80xx_hwi.c
>> > +++ b/drivers/scsi/pm8001/pm80xx_hwi.c
>> > @@ -3041,7 +3041,6 @@ hw_event_phy_down(str

RE: [PATCH 3/6] pm80xx : Different SAS addresses for phys.

2017-08-30 Thread Viswas G
Hi Jack,

This is a customer requirement. Since the SAS addresses of all the phys were 
same , when the attached SAS addresses are different, it was forming only one 
domain.  If we assign different SAS addresses, this will cause duplicate domain 
unless we set the strict_wide_port to 1.

Regards,
Viswas G


> -Original Message-
> From: Jack Wang [mailto:xjtu...@gmail.com]
> Sent: Tuesday, August 29, 2017 4:55 PM
> To: Viswas G <viswa...@microsemi.com>
> Cc: linux-scsi@vger.kernel.org; Vasanthalakshmi Tharmarajan
> <vasanthalakshmi.t...@microsemi.com>
> Subject: Re: [PATCH 3/6] pm80xx : Different SAS addresses for phys.
> 
> EXTERNAL EMAIL
> 
> 
> 2015-01-30 7:06 GMT+01:00 Viswas G <viswa...@microsemi.com>:
> > Different SAS addresses are assigned for each set of phys.
> >
> > Signed-off-by: Viswas G <viswa...@microsemi.com>
> > ---
> >  drivers/scsi/pm8001/pm8001_init.c | 13 +
> >  drivers/scsi/pm8001/pm80xx_hwi.c  |  3 +--
> >  2 files changed, 10 insertions(+), 6 deletions(-)
> >
> > diff --git a/drivers/scsi/pm8001/pm8001_init.c
> b/drivers/scsi/pm8001/pm8001_init.c
> > index 034b2f7d1135..d282f1562615 100644
> > --- a/drivers/scsi/pm8001/pm8001_init.c
> > +++ b/drivers/scsi/pm8001/pm8001_init.c
> > @@ -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->linkrate = SAS_LINK_RATE_UNKNOWN;
> > sas_phy->id = phy_id;
> > -   sas_phy->sas_addr = _ha->sas_addr[0];
> > +   sas_phy->sas_addr = (u8 *)>dev_sas_addr;
> > sas_phy->frame_rcvd = >frame_rcvd[0];
> > sas_phy->ha = (struct sas_ha_struct *)pm8001_ha->shost->hostdata;
> > sas_phy->lldd_phy = phy;
> > @@ -593,10 +593,12 @@ static void  pm8001_post_sas_ha_init(struct
> Scsi_Host *shost,
> > for (i = 0; i < chip_info->n_phy; i++) {
> > sha->sas_phy[i] = _ha->phy[i].sas_phy;
> > sha->sas_port[i] = _ha->port[i].sas_port;
> > +   sha->sas_phy[i]->sas_addr =
> > +   (u8 *)_ha->phy[i].dev_sas_addr;
> > }
> > sha->sas_ha_name = DRV_NAME;
> > sha->dev = pm8001_ha->dev;
> > -
> > +   sha->strict_wide_ports = 1;
> > sha->lldd_module = THIS_MODULE;
> > sha->sas_addr = _ha->sas_addr[0];
> > sha->num_phys = chip_info->n_phy;
> > @@ -613,6 +615,7 @@ static void  pm8001_post_sas_ha_init(struct
> Scsi_Host *shost,
> >  static void pm8001_init_sas_add(struct pm8001_hba_info *pm8001_ha)
> >  {
> > u8 i, j;
> > +   u8 sas_add[8];
> >  #ifdef PM8001_READ_VPD
> > /* For new SPC controllers WWN is stored in flash vpd
> > *  For SPC/SPCve controllers WWN is stored in EEPROM
> > @@ -674,10 +677,12 @@ static void pm8001_init_sas_add(struct
> pm8001_hba_info *pm8001_ha)
> > pm8001_ha->sas_addr[j] =
> > 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++) {
> > +   if (i && ((i % 4) == 0))
> > +   sas_add[7] = sas_add[7] + 4;
> > memcpy(_ha->phy[i].dev_sas_addr,
> > -   pm8001_ha->sas_addr, SAS_ADDR_SIZE);
> > +   sas_add, SAS_ADDR_SIZE);
> > PM8001_INIT_DBG(pm8001_ha,
> > pm8001_printk("phy %d sas_addr = %016llx\n", i,
> > pm8001_ha->phy[i].dev_sas_addr));
> > diff --git a/drivers/scsi/pm8001/pm80xx_hwi.c
> b/drivers/scsi/pm8001/pm80xx_hwi.c
> > index 8fb5ddf08cc4..a07b023c09bf 100644
> > --- a/drivers/scsi/pm8001/pm80xx_hwi.c
> > +++ b/drivers/scsi/pm8001/pm80xx_hwi.c
> > @@ -3041,7 +3041,6 @@ hw_event_phy_down(struct pm8001_hba_info
> *pm8001_ha, void *piomb)
> > port->port_state = portstate;
> > phy->identify.device_type = 0;
> > phy->phy_attached = 0;
> > -   memset(>dev_sas_addr, 0, SAS_ADDR_SIZE);
> > switch (portstate) {
> > case PORT_VALID:
> > 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.initiator_bits = SAS_PROTOCOL_ALL;
> > memcpy(payload.sas_identify.sas_addr,
> > -   pm8001_ha->sas_addr, SAS_ADDR_SIZE);
> > +   _ha->phy[phy_id].dev_sas_addr, SAS_ADDR_SIZE);
> > payload.sas_identify.phy_id = phy_id;
> > ret = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opcode,
> , 0);
> > return ret;
> > --
> > 2.12.3
> >
> This removes the possibility to form a wide port, why do you want to do it?


Re: [PATCH 3/6] pm80xx : Different SAS addresses for phys.

2017-08-29 Thread Jack Wang
2015-01-30 7:06 GMT+01:00 Viswas G :
> Different SAS addresses are assigned for each set of phys.
>
> Signed-off-by: Viswas G 
> ---
>  drivers/scsi/pm8001/pm8001_init.c | 13 +
>  drivers/scsi/pm8001/pm80xx_hwi.c  |  3 +--
>  2 files changed, 10 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/scsi/pm8001/pm8001_init.c 
> b/drivers/scsi/pm8001/pm8001_init.c
> index 034b2f7d1135..d282f1562615 100644
> --- a/drivers/scsi/pm8001/pm8001_init.c
> +++ b/drivers/scsi/pm8001/pm8001_init.c
> @@ -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->linkrate = SAS_LINK_RATE_UNKNOWN;
> sas_phy->id = phy_id;
> -   sas_phy->sas_addr = _ha->sas_addr[0];
> +   sas_phy->sas_addr = (u8 *)>dev_sas_addr;
> sas_phy->frame_rcvd = >frame_rcvd[0];
> sas_phy->ha = (struct sas_ha_struct *)pm8001_ha->shost->hostdata;
> sas_phy->lldd_phy = phy;
> @@ -593,10 +593,12 @@ static void  pm8001_post_sas_ha_init(struct Scsi_Host 
> *shost,
> for (i = 0; i < chip_info->n_phy; i++) {
> sha->sas_phy[i] = _ha->phy[i].sas_phy;
> sha->sas_port[i] = _ha->port[i].sas_port;
> +   sha->sas_phy[i]->sas_addr =
> +   (u8 *)_ha->phy[i].dev_sas_addr;
> }
> sha->sas_ha_name = DRV_NAME;
> sha->dev = pm8001_ha->dev;
> -
> +   sha->strict_wide_ports = 1;
> sha->lldd_module = THIS_MODULE;
> sha->sas_addr = _ha->sas_addr[0];
> sha->num_phys = chip_info->n_phy;
> @@ -613,6 +615,7 @@ static void  pm8001_post_sas_ha_init(struct Scsi_Host 
> *shost,
>  static void pm8001_init_sas_add(struct pm8001_hba_info *pm8001_ha)
>  {
> u8 i, j;
> +   u8 sas_add[8];
>  #ifdef PM8001_READ_VPD
> /* For new SPC controllers WWN is stored in flash vpd
> *  For SPC/SPCve controllers WWN is stored in EEPROM
> @@ -674,10 +677,12 @@ static void pm8001_init_sas_add(struct pm8001_hba_info 
> *pm8001_ha)
> pm8001_ha->sas_addr[j] =
> 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++) {
> +   if (i && ((i % 4) == 0))
> +   sas_add[7] = sas_add[7] + 4;
> memcpy(_ha->phy[i].dev_sas_addr,
> -   pm8001_ha->sas_addr, SAS_ADDR_SIZE);
> +   sas_add, SAS_ADDR_SIZE);
> PM8001_INIT_DBG(pm8001_ha,
> pm8001_printk("phy %d sas_addr = %016llx\n", i,
> pm8001_ha->phy[i].dev_sas_addr));
> diff --git a/drivers/scsi/pm8001/pm80xx_hwi.c 
> b/drivers/scsi/pm8001/pm80xx_hwi.c
> index 8fb5ddf08cc4..a07b023c09bf 100644
> --- a/drivers/scsi/pm8001/pm80xx_hwi.c
> +++ b/drivers/scsi/pm8001/pm80xx_hwi.c
> @@ -3041,7 +3041,6 @@ hw_event_phy_down(struct pm8001_hba_info *pm8001_ha, 
> void *piomb)
> port->port_state = portstate;
> phy->identify.device_type = 0;
> phy->phy_attached = 0;
> -   memset(>dev_sas_addr, 0, SAS_ADDR_SIZE);
> switch (portstate) {
> case PORT_VALID:
> 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.initiator_bits = SAS_PROTOCOL_ALL;
> memcpy(payload.sas_identify.sas_addr,
> -   pm8001_ha->sas_addr, SAS_ADDR_SIZE);
> +   _ha->phy[phy_id].dev_sas_addr, SAS_ADDR_SIZE);
> payload.sas_identify.phy_id = phy_id;
> ret = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opcode, , 0);
> return ret;
> --
> 2.12.3
>
This removes the possibility to form a wide port, why do you want to do it?


[PATCH 3/6] pm80xx : Different SAS addresses for phys.

2017-08-25 Thread Viswas G
Different SAS addresses are assigned for each set of phys.

Signed-off-by: Viswas G 
---
 drivers/scsi/pm8001/pm8001_init.c | 13 +
 drivers/scsi/pm8001/pm80xx_hwi.c  |  3 +--
 2 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/drivers/scsi/pm8001/pm8001_init.c 
b/drivers/scsi/pm8001/pm8001_init.c
index 034b2f7d1135..d282f1562615 100644
--- a/drivers/scsi/pm8001/pm8001_init.c
+++ b/drivers/scsi/pm8001/pm8001_init.c
@@ -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->linkrate = SAS_LINK_RATE_UNKNOWN;
sas_phy->id = phy_id;
-   sas_phy->sas_addr = _ha->sas_addr[0];
+   sas_phy->sas_addr = (u8 *)>dev_sas_addr;
sas_phy->frame_rcvd = >frame_rcvd[0];
sas_phy->ha = (struct sas_ha_struct *)pm8001_ha->shost->hostdata;
sas_phy->lldd_phy = phy;
@@ -593,10 +593,12 @@ static void  pm8001_post_sas_ha_init(struct Scsi_Host 
*shost,
for (i = 0; i < chip_info->n_phy; i++) {
sha->sas_phy[i] = _ha->phy[i].sas_phy;
sha->sas_port[i] = _ha->port[i].sas_port;
+   sha->sas_phy[i]->sas_addr =
+   (u8 *)_ha->phy[i].dev_sas_addr;
}
sha->sas_ha_name = DRV_NAME;
sha->dev = pm8001_ha->dev;
-
+   sha->strict_wide_ports = 1;
sha->lldd_module = THIS_MODULE;
sha->sas_addr = _ha->sas_addr[0];
sha->num_phys = chip_info->n_phy;
@@ -613,6 +615,7 @@ static void  pm8001_post_sas_ha_init(struct Scsi_Host 
*shost,
 static void pm8001_init_sas_add(struct pm8001_hba_info *pm8001_ha)
 {
u8 i, j;
+   u8 sas_add[8];
 #ifdef PM8001_READ_VPD
/* For new SPC controllers WWN is stored in flash vpd
*  For SPC/SPCve controllers WWN is stored in EEPROM
@@ -674,10 +677,12 @@ static void pm8001_init_sas_add(struct pm8001_hba_info 
*pm8001_ha)
pm8001_ha->sas_addr[j] =
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++) {
+   if (i && ((i % 4) == 0))
+   sas_add[7] = sas_add[7] + 4;
memcpy(_ha->phy[i].dev_sas_addr,
-   pm8001_ha->sas_addr, SAS_ADDR_SIZE);
+   sas_add, SAS_ADDR_SIZE);
PM8001_INIT_DBG(pm8001_ha,
pm8001_printk("phy %d sas_addr = %016llx\n", i,
pm8001_ha->phy[i].dev_sas_addr));
diff --git a/drivers/scsi/pm8001/pm80xx_hwi.c b/drivers/scsi/pm8001/pm80xx_hwi.c
index 8fb5ddf08cc4..a07b023c09bf 100644
--- a/drivers/scsi/pm8001/pm80xx_hwi.c
+++ b/drivers/scsi/pm8001/pm80xx_hwi.c
@@ -3041,7 +3041,6 @@ hw_event_phy_down(struct pm8001_hba_info *pm8001_ha, void 
*piomb)
port->port_state = portstate;
phy->identify.device_type = 0;
phy->phy_attached = 0;
-   memset(>dev_sas_addr, 0, SAS_ADDR_SIZE);
switch (portstate) {
case PORT_VALID:
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.initiator_bits = SAS_PROTOCOL_ALL;
memcpy(payload.sas_identify.sas_addr,
-   pm8001_ha->sas_addr, SAS_ADDR_SIZE);
+   _ha->phy[phy_id].dev_sas_addr, SAS_ADDR_SIZE);
payload.sas_identify.phy_id = phy_id;
ret = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opcode, , 0);
return ret;
-- 
2.12.3