RE: [PATCH 1/6] pm80xx : redefine sas_identify_frame structure

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

 



Thanks. We will move that to pm80xx_hwi.h.

Regards,
Viswas G

> -----Original Message-----
> From: Jack Wang [mailto:xjtuwjp@xxxxxxxxx]
> Sent: Wednesday, August 30, 2017 9:34 PM
> To: Viswas G <viswas.g@xxxxxxxxxxxxx>
> Cc: linux-scsi@xxxxxxxxxxxxxxx; Vasanthalakshmi Tharmarajan
> <vasanthalakshmi.thar@xxxxxxxxxxxxx>
> Subject: Re: [PATCH 1/6] pm80xx : redefine sas_identify_frame structure
> 
> EXTERNAL EMAIL
> 
> 
> 2017-08-30 17:41 GMT+02:00 Viswas G <viswas.g@xxxxxxxxxxxxx>:
> > Hi Jack,
> >
> > The firmware expectation is that there is no 4 byte CRC. This causes the
> IOMB to be generated incorrectly for PHY_START. Local structure for SAS
> Identify included in the driver so that it matches the Programmer's Manual
> and Firmware expectations.
> >
> > The sas_identify struct from the kernel includes the checksum word (32-
> bits) . So it is 32 bytes rather than 28 bytes. The changed size for the sas
> identify frame means that the "spasti" field for PHY_START is at a different
> offset than documented, word 11 rather than word 10. We're not changing
> the phy analog settings so this doesn't really matter, but the docs indicate
> that the sas frame's crc isn't included. So having a local definition will be
> better than taking the system definition.
> >
> > Regards,
> > Viswas G
> 
> Hi Viswas,
> 
> The spasti field is only for pm80xx, not for pm8001, I think it's
> better to move sas_identify_frame_local to pm80xx_hwi.h.
> 
> Regards,
> Jack
> 
> 
> >
> >> -----Original Message-----
> >> From: Jack Wang [mailto:xjtuwjp@xxxxxxxxx]
> >> Sent: Tuesday, August 29, 2017 4:49 PM
> >> To: Viswas G <viswas.g@xxxxxxxxxxxxx>
> >> Cc: linux-scsi@xxxxxxxxxxxxxxx; Vasanthalakshmi Tharmarajan
> >> <vasanthalakshmi.thar@xxxxxxxxxxxxx>
> >> Subject: Re: [PATCH 1/6] pm80xx : redefine sas_identify_frame structure
> >>
> >> EXTERNAL EMAIL
> >>
> >>
> >> 2015-01-30 7:06 GMT+01:00 Viswas G <Viswas.G@xxxxxxxxxxxxx>:
> >> > sas_identify structure defined by pm80xx doesn't have CRC field.
> >> > So added a new sas_identify structure without CRC.
> >> >
> >> > Signed-off-by: Raj Dinesh <Raj.Dinesh@xxxxxxxxxxxxx>
> >> > Signed-off-by: Viswas G <Viswas.G@xxxxxxxxxxxxx>
> >> > ---
> >> >  drivers/scsi/pm8001/pm8001_hwi.h |  2 +-
> >> >  drivers/scsi/pm8001/pm8001_sas.h | 95
> >> ++++++++++++++++++++++++++++++++++++++++
> >> >  drivers/scsi/pm8001/pm80xx_hwi.h |  2 +-
> >> >  3 files changed, 97 insertions(+), 2 deletions(-)
> >> >
> >> > diff --git a/drivers/scsi/pm8001/pm8001_hwi.h
> >> b/drivers/scsi/pm8001/pm8001_hwi.h
> >> > index e4867e690c84..f4331afe9b0b 100644
> >> > --- a/drivers/scsi/pm8001/pm8001_hwi.h
> >> > +++ b/drivers/scsi/pm8001/pm8001_hwi.h
> >> > @@ -157,7 +157,7 @@ struct mpi_msg_hdr{
> >> >  struct phy_start_req {
> >> >         __le32  tag;
> >> >         __le32  ase_sh_lm_slr_phyid;
> >> > -       struct sas_identify_frame sas_identify;
> >> > +       struct sas_identify_frame_local sas_identify;
> >> >         u32     reserved[5];
> >> >  } __attribute__((packed, aligned(4)));
> >> >
> >> > diff --git a/drivers/scsi/pm8001/pm8001_sas.h
> >> b/drivers/scsi/pm8001/pm8001_sas.h
> >> > index e81a8fa7ef1a..2e17505ed5b8 100644
> >> > --- a/drivers/scsi/pm8001/pm8001_sas.h
> >> > +++ b/drivers/scsi/pm8001/pm8001_sas.h
> >> > @@ -118,6 +118,101 @@ extern const struct pm8001_dispatch
> >> pm8001_80xx_dispatch;
> >> >  struct pm8001_hba_info;
> >> >  struct pm8001_ccb_info;
> >> >  struct pm8001_device;
> >> > +#ifdef __LITTLE_ENDIAN_BITFIELD
> >> > +struct sas_identify_frame_local {
> >> > +       /* Byte 0 */
> >> > +       u8  frame_type:4;
> >> > +       u8  dev_type:3;
> >> > +       u8  _un0:1;
> >> > +
> >> > +       /* Byte 1 */
> >> > +       u8  _un1;
> >> > +
> >> > +       /* Byte 2 */
> >> > +       union {
> >> > +               struct {
> >> > +                       u8  _un20:1;
> >> > +                       u8  smp_iport:1;
> >> > +                       u8  stp_iport:1;
> >> > +                       u8  ssp_iport:1;
> >> > +                       u8  _un247:4;
> >> > +               };
> >> > +               u8 initiator_bits;
> >> > +       };
> >> > +
> >> > +       /* Byte 3 */
> >> > +       union {
> >> > +               struct {
> >> > +                       u8  _un30:1;
> >> > +                       u8 smp_tport:1;
> >> > +                       u8 stp_tport:1;
> >> > +                       u8 ssp_tport:1;
> >> > +                       u8 _un347:4;
> >> > +               };
> >> > +               u8 target_bits;
> >> > +       };
> >> > +
> >> > +       /* Byte 4 - 11 */
> >> > +       u8 _un4_11[8];
> >> > +
> >> > +       /* Byte 12 - 19 */
> >> > +       u8 sas_addr[SAS_ADDR_SIZE];
> >> > +
> >> > +       /* Byte 20 */
> >> > +       u8 phy_id;
> >> > +
> >> > +       u8 _un21_27[7];
> >> > +
> >> > +} __packed;
> >> > +
> >> > +#elif defined(__BIG_ENDIAN_BITFIELD)
> >> > +struct sas_identify_frame_local {
> >> > +       /* Byte 0 */
> >> > +       u8  _un0:1;
> >> > +       u8  dev_type:3;
> >> > +       u8  frame_type:4;
> >> > +
> >> > +       /* Byte 1 */
> >> > +       u8  _un1;
> >> > +
> >> > +       /* Byte 2 */
> >> > +       union {
> >> > +               struct {
> >> > +                       u8  _un247:4;
> >> > +                       u8  ssp_iport:1;
> >> > +                       u8  stp_iport:1;
> >> > +                       u8  smp_iport:1;
> >> > +                       u8  _un20:1;
> >> > +               };
> >> > +               u8 initiator_bits;
> >> > +       };
> >> > +
> >> > +       /* Byte 3 */
> >> > +       union {
> >> > +               struct {
> >> > +                       u8 _un347:4;
> >> > +                       u8 ssp_tport:1;
> >> > +                       u8 stp_tport:1;
> >> > +                       u8 smp_tport:1;
> >> > +                       u8 _un30:1;
> >> > +               };
> >> > +               u8 target_bits;
> >> > +       };
> >> > +
> >> > +       /* Byte 4 - 11 */
> >> > +       u8 _un4_11[8];
> >> > +
> >> > +       /* Byte 12 - 19 */
> >> > +       u8 sas_addr[SAS_ADDR_SIZE];
> >> > +
> >> > +       /* Byte 20 */
> >> > +       u8 phy_id;
> >> > +
> >> > +       u8 _un21_27[7];
> >> > +} __packed;
> >> > +#else
> >> > +#error "Bitfield order not defined!"
> >> > +#endif
> >> >  /* define task management IU */
> >> >  struct pm8001_tmf_task {
> >> >         u8      tmf;
> >> > diff --git a/drivers/scsi/pm8001/pm80xx_hwi.h
> >> b/drivers/scsi/pm8001/pm80xx_hwi.h
> >> > index 7a443bad6163..1ee2ec210065 100644
> >> > --- a/drivers/scsi/pm8001/pm80xx_hwi.h
> >> > +++ b/drivers/scsi/pm8001/pm80xx_hwi.h
> >> > @@ -248,7 +248,7 @@ struct mpi_msg_hdr {
> >> >  struct phy_start_req {
> >> >         __le32  tag;
> >> >         __le32  ase_sh_lm_slr_phyid;
> >> > -       struct sas_identify_frame sas_identify; /* 28 Bytes */
> >> > +       struct sas_identify_frame_local sas_identify; /* 28 Bytes */
> >> >         __le32 spasti;
> >> >         u32     reserved[21];
> >> >  } __attribute__((packed, aligned(4)));
> >> > --
> >> > 2.12.3
> >> >
> >> Did this cause any trouble? I guest not, as we does memset for
> >> phy_start_req,  why bother?
> >>
> >> Jack




[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