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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



2017-08-30 18:55 GMT+02:00 Viswas G <viswas.g@xxxxxxxxxxxxx>:
> 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.wang@xxxxxxxxxxxxxxxx>
Thanks!
>
>
>> -----Original Message-----
>> From: Jack Wang [mailto:xjtuwjp@xxxxxxxxx]
>> Sent: Tuesday, August 29, 2017 4:55 PM
>> To: Viswas G <viswas.g@xxxxxxxxxxxxx>
>> Cc: linux-scsi@xxxxxxxxxxxxxxx; Vasanthalakshmi Tharmarajan
>> <vasanthalakshmi.thar@xxxxxxxxxxxxx>
>> Subject: Re: [PATCH 3/6] pm80xx : Different SAS addresses for phys.
>>
>> EXTERNAL EMAIL
>>
>>
>> 2015-01-30 7:06 GMT+01:00 Viswas G <Viswas.G@xxxxxxxxxxxxx>:
>> > Different SAS addresses are assigned for each set of phys.
>> >
>> > Signed-off-by: Viswas G <Viswas.G@xxxxxxxxxxxxx>
>> > ---
>> >  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 = &pm8001_ha->sas_addr[0];
>> > +       sas_phy->sas_addr = (u8 *)&phy->dev_sas_addr;
>> >         sas_phy->frame_rcvd = &phy->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] = &pm8001_ha->phy[i].sas_phy;
>> >                 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->dev = pm8001_ha->dev;
>> > -
>> > +       sha->strict_wide_ports = 1;
>> >         sha->lldd_module = THIS_MODULE;
>> >         sha->sas_addr = &pm8001_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(&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_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(&phy->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);
>> > +               &pm8001_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,
>> &payload, 0);
>> >         return ret;
>> > --
>> > 2.12.3
>> >
>> This removes the possibility to form a wide port, why do you want to do it?




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]

  Powered by Linux