Message ID | 57fe999b.LkhVzK2phIyu2/YN%james.smart@broadcom.com (mailing list archive) |
---|---|
State | Superseded, archived |
Headers | show |
On Wed, Oct 12, 2016 at 01:14:19PM -0700, James Smart wrote: > > Fix fw download on SLI-4 FC adapters > > Driver performs a quick validation of magic numbers in the fw > download image. Driver needed to be updated for more recent > magic numbers. > > Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com> > Signed-off-by: James Smart <james.smart@broadcom.com> > --- > drivers/scsi/lpfc/lpfc_hw4.h | 3 ++- > drivers/scsi/lpfc/lpfc_init.c | 15 ++++++++------- > 2 files changed, 10 insertions(+), 8 deletions(-) > > diff --git a/drivers/scsi/lpfc/lpfc_hw4.h b/drivers/scsi/lpfc/lpfc_hw4.h > index bbdcb5a..5646699 100644 > --- a/drivers/scsi/lpfc/lpfc_hw4.h > +++ b/drivers/scsi/lpfc/lpfc_hw4.h > @@ -3996,7 +3996,8 @@ union lpfc_wqe128 { > struct gen_req64_wqe gen_req; > }; > > -#define LPFC_GROUP_OJECT_MAGIC_NUM 0xfeaa0001 > +#define LPFC_GROUP_OJECT_MAGIC_G5 0xfeaa0001 > +#define LPFC_GROUP_OJECT_MAGIC_G6 0xfeaa0003 > #define LPFC_FILE_TYPE_GROUP 0xf7 > #define LPFC_FILE_ID_GROUP 0xa2 > struct lpfc_grp_hdr { > diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c > index 53227e5..442bbb8 100644 > --- a/drivers/scsi/lpfc/lpfc_init.c > +++ b/drivers/scsi/lpfc/lpfc_init.c > @@ -10321,17 +10321,18 @@ lpfc_write_firmware(const struct firmware *fw, void *context) > image = (struct lpfc_grp_hdr *)fw->data; > > INIT_LIST_HEAD(&dma_buffer_list); > - if ((be32_to_cpu(image->magic_number) != LPFC_GROUP_OJECT_MAGIC_NUM) || > - (bf_get_be32(lpfc_grp_hdr_file_type, image) != > - LPFC_FILE_TYPE_GROUP) || > - (bf_get_be32(lpfc_grp_hdr_id, image) != LPFC_FILE_ID_GROUP) || > - (be32_to_cpu(image->size) != fw->size)) { > + if (((be32_to_cpu(image->magic_number) != LPFC_GROUP_OJECT_MAGIC_G5) && > + (be32_to_cpu(image->magic_number) != LPFC_GROUP_OJECT_MAGIC_G6)) || > + (bf_get_be32(lpfc_grp_hdr_file_type, image) != > + LPFC_FILE_TYPE_GROUP) || > + (be32_to_cpu(image->size) != fw->size)) { > lpfc_printf_log(phba, KERN_ERR, LOG_INIT, > "3022 Invalid FW image found. " > - "Magic:%x Type:%x ID:%x\n", > + "Magic:%x Type:%x ID:%x Size %d %ld\n", > be32_to_cpu(image->magic_number), > bf_get_be32(lpfc_grp_hdr_file_type, image), > - bf_get_be32(lpfc_grp_hdr_id, image)); > + bf_get_be32(lpfc_grp_hdr_id, image), > + be32_to_cpu(image->size), fw->size); > rc = -EINVAL; > goto release_out; > } Maybe: u32 magic_number = be32_to_cpu(image->magic_number); u32 lpfc_grp_hdr_file_type = bf_get_be32(lpfc_grp_hdr_file_type, image); u32 lpfc_grp_hdr_id = bf_get_be32(lpfc_grp_hdr_id, image); u32 size = be32_to_cpu(image->size); if ((magic_number != LPFC_GROUP_OJECT_MAGIC_G5 && magic_number != LPFC_GROUP_OJECT_MAGIC_G6) || lpfc_grp_hdr_file_type != LPFC_FILE_TYPE_GROUP || size != fw->size) { lpfc_printf_log(phba, KERN_ERR, LOG_INIT, "3022 Invalid FW image found. " "Magic:%x Type:%x ID:%x Size %d %ld\n", lpfc_grp_hdr_file_type, lpfc_grp_hdr_id, size, fw->size); rc = -EINVAL; goto release_out; }
diff --git a/drivers/scsi/lpfc/lpfc_hw4.h b/drivers/scsi/lpfc/lpfc_hw4.h index bbdcb5a..5646699 100644 --- a/drivers/scsi/lpfc/lpfc_hw4.h +++ b/drivers/scsi/lpfc/lpfc_hw4.h @@ -3996,7 +3996,8 @@ union lpfc_wqe128 { struct gen_req64_wqe gen_req; }; -#define LPFC_GROUP_OJECT_MAGIC_NUM 0xfeaa0001 +#define LPFC_GROUP_OJECT_MAGIC_G5 0xfeaa0001 +#define LPFC_GROUP_OJECT_MAGIC_G6 0xfeaa0003 #define LPFC_FILE_TYPE_GROUP 0xf7 #define LPFC_FILE_ID_GROUP 0xa2 struct lpfc_grp_hdr { diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c index 53227e5..442bbb8 100644 --- a/drivers/scsi/lpfc/lpfc_init.c +++ b/drivers/scsi/lpfc/lpfc_init.c @@ -10321,17 +10321,18 @@ lpfc_write_firmware(const struct firmware *fw, void *context) image = (struct lpfc_grp_hdr *)fw->data; INIT_LIST_HEAD(&dma_buffer_list); - if ((be32_to_cpu(image->magic_number) != LPFC_GROUP_OJECT_MAGIC_NUM) || - (bf_get_be32(lpfc_grp_hdr_file_type, image) != - LPFC_FILE_TYPE_GROUP) || - (bf_get_be32(lpfc_grp_hdr_id, image) != LPFC_FILE_ID_GROUP) || - (be32_to_cpu(image->size) != fw->size)) { + if (((be32_to_cpu(image->magic_number) != LPFC_GROUP_OJECT_MAGIC_G5) && + (be32_to_cpu(image->magic_number) != LPFC_GROUP_OJECT_MAGIC_G6)) || + (bf_get_be32(lpfc_grp_hdr_file_type, image) != + LPFC_FILE_TYPE_GROUP) || + (be32_to_cpu(image->size) != fw->size)) { lpfc_printf_log(phba, KERN_ERR, LOG_INIT, "3022 Invalid FW image found. " - "Magic:%x Type:%x ID:%x\n", + "Magic:%x Type:%x ID:%x Size %d %ld\n", be32_to_cpu(image->magic_number), bf_get_be32(lpfc_grp_hdr_file_type, image), - bf_get_be32(lpfc_grp_hdr_id, image)); + bf_get_be32(lpfc_grp_hdr_id, image), + be32_to_cpu(image->size), fw->size); rc = -EINVAL; goto release_out; }