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 <[email protected]>
> Signed-off-by: James Smart <[email protected]>
> ---
> 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
[email protected] +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 [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html