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.kenn...@broadcom.com>
> Signed-off-by: James Smart <james.sm...@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;
        }


-- 
Johannes Thumshirn                                          Storage
jthumsh...@suse.de                                +49 911 74053 689
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: Felix Imendörffer, Jane Smithard, Graham Norton
HRB 21284 (AG Nürnberg)
Key fingerprint = EC38 9CAB C2C4 F25D 8600 D0D0 0393 969D 2D76 0850
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to