mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-30 08:02:30 +00:00
scsi: lpfc: Fix fw download on SLI-4 FC adapters
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> Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de> Reviewed-by: Hannes Reinecke <hare@suse.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
c691816e00
commit
6b6ef5db25
2 changed files with 13 additions and 10 deletions
|
@ -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 {
|
||||
|
|
|
@ -10312,6 +10312,7 @@ lpfc_write_firmware(const struct firmware *fw, void *context)
|
|||
int i, rc = 0;
|
||||
struct lpfc_dmabuf *dmabuf, *next;
|
||||
uint32_t offset = 0, temp_offset = 0;
|
||||
uint32_t magic_number, ftype, fid, fsize;
|
||||
|
||||
/* It can be null in no-wait mode, sanity check */
|
||||
if (!fw) {
|
||||
|
@ -10320,18 +10321,19 @@ lpfc_write_firmware(const struct firmware *fw, void *context)
|
|||
}
|
||||
image = (struct lpfc_grp_hdr *)fw->data;
|
||||
|
||||
magic_number = be32_to_cpu(image->magic_number);
|
||||
ftype = bf_get_be32(lpfc_grp_hdr_file_type, image);
|
||||
fid = bf_get_be32(lpfc_grp_hdr_id, image),
|
||||
fsize = be32_to_cpu(image->size);
|
||||
|
||||
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 ((magic_number != LPFC_GROUP_OJECT_MAGIC_G5 &&
|
||||
magic_number != LPFC_GROUP_OJECT_MAGIC_G6) ||
|
||||
ftype != LPFC_FILE_TYPE_GROUP || fsize != fw->size) {
|
||||
lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
|
||||
"3022 Invalid FW image found. "
|
||||
"Magic:%x Type:%x ID:%x\n",
|
||||
be32_to_cpu(image->magic_number),
|
||||
bf_get_be32(lpfc_grp_hdr_file_type, image),
|
||||
bf_get_be32(lpfc_grp_hdr_id, image));
|
||||
"Magic:%x Type:%x ID:%x Size %d %ld\n",
|
||||
magic_number, ftype, fid, fsize, fw->size);
|
||||
rc = -EINVAL;
|
||||
goto release_out;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue