diff options
author | Padmanabh Ratnakar <padmanabh.ratnakar@emulex.com> | 2012-04-24 21:47:15 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-04-26 05:03:31 -0400 |
commit | c165541efc4d1024d7db22ecdf64359b1f6107fc (patch) | |
tree | 452445d747b5ef81d59f388e48036e5913b2091a /drivers | |
parent | 652bf64622f32c938dd4a8738ba12d51dc9fbdd4 (diff) |
be2net: Fix FW download for BE
Skip flashing a FW component if that component is not present in a
particular FW UFI image.
Signed-off-by: Somnath Kotur <somnath.kotur@emulex.com>
Signed-off-by: Padmanabh Ratnakar <padmanabh.ratnakar@emulex.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/ethernet/emulex/benet/be_cmds.c | 2 | ||||
-rw-r--r-- | drivers/net/ethernet/emulex/benet/be_hw.h | 74 | ||||
-rw-r--r-- | drivers/net/ethernet/emulex/benet/be_main.c | 168 |
3 files changed, 166 insertions, 78 deletions
diff --git a/drivers/net/ethernet/emulex/benet/be_cmds.c b/drivers/net/ethernet/emulex/benet/be_cmds.c index 2673081aaf2f..43167e863955 100644 --- a/drivers/net/ethernet/emulex/benet/be_cmds.c +++ b/drivers/net/ethernet/emulex/benet/be_cmds.c | |||
@@ -1979,7 +1979,7 @@ int be_cmd_get_flash_crc(struct be_adapter *adapter, u8 *flashed_crc, | |||
1979 | be_wrb_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_COMMON, | 1979 | be_wrb_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_COMMON, |
1980 | OPCODE_COMMON_READ_FLASHROM, sizeof(*req)+4, wrb, NULL); | 1980 | OPCODE_COMMON_READ_FLASHROM, sizeof(*req)+4, wrb, NULL); |
1981 | 1981 | ||
1982 | req->params.op_type = cpu_to_le32(IMG_TYPE_REDBOOT); | 1982 | req->params.op_type = cpu_to_le32(OPTYPE_REDBOOT); |
1983 | req->params.op_code = cpu_to_le32(FLASHROM_OPER_REPORT); | 1983 | req->params.op_code = cpu_to_le32(FLASHROM_OPER_REPORT); |
1984 | req->params.offset = cpu_to_le32(offset); | 1984 | req->params.offset = cpu_to_le32(offset); |
1985 | req->params.data_buf_size = cpu_to_le32(0x4); | 1985 | req->params.data_buf_size = cpu_to_le32(0x4); |
diff --git a/drivers/net/ethernet/emulex/benet/be_hw.h b/drivers/net/ethernet/emulex/benet/be_hw.h index f2c89e3ccabd..0949aa609164 100644 --- a/drivers/net/ethernet/emulex/benet/be_hw.h +++ b/drivers/net/ethernet/emulex/benet/be_hw.h | |||
@@ -162,22 +162,23 @@ | |||
162 | #define QUERY_FAT 1 | 162 | #define QUERY_FAT 1 |
163 | 163 | ||
164 | /* Flashrom related descriptors */ | 164 | /* Flashrom related descriptors */ |
165 | #define MAX_FLASH_COMP 32 | ||
165 | #define IMAGE_TYPE_FIRMWARE 160 | 166 | #define IMAGE_TYPE_FIRMWARE 160 |
166 | #define IMAGE_TYPE_BOOTCODE 224 | 167 | #define IMAGE_TYPE_BOOTCODE 224 |
167 | #define IMAGE_TYPE_OPTIONROM 32 | 168 | #define IMAGE_TYPE_OPTIONROM 32 |
168 | 169 | ||
169 | #define NUM_FLASHDIR_ENTRIES 32 | 170 | #define NUM_FLASHDIR_ENTRIES 32 |
170 | 171 | ||
171 | #define IMG_TYPE_ISCSI_ACTIVE 0 | 172 | #define OPTYPE_ISCSI_ACTIVE 0 |
172 | #define IMG_TYPE_REDBOOT 1 | 173 | #define OPTYPE_REDBOOT 1 |
173 | #define IMG_TYPE_BIOS 2 | 174 | #define OPTYPE_BIOS 2 |
174 | #define IMG_TYPE_PXE_BIOS 3 | 175 | #define OPTYPE_PXE_BIOS 3 |
175 | #define IMG_TYPE_FCOE_BIOS 8 | 176 | #define OPTYPE_FCOE_BIOS 8 |
176 | #define IMG_TYPE_ISCSI_BACKUP 9 | 177 | #define OPTYPE_ISCSI_BACKUP 9 |
177 | #define IMG_TYPE_FCOE_FW_ACTIVE 10 | 178 | #define OPTYPE_FCOE_FW_ACTIVE 10 |
178 | #define IMG_TYPE_FCOE_FW_BACKUP 11 | 179 | #define OPTYPE_FCOE_FW_BACKUP 11 |
179 | #define IMG_TYPE_NCSI_FW 13 | 180 | #define OPTYPE_NCSI_FW 13 |
180 | #define IMG_TYPE_PHY_FW 99 | 181 | #define OPTYPE_PHY_FW 99 |
181 | #define TN_8022 13 | 182 | #define TN_8022 13 |
182 | 183 | ||
183 | #define ILLEGAL_IOCTL_REQ 2 | 184 | #define ILLEGAL_IOCTL_REQ 2 |
@@ -223,6 +224,24 @@ | |||
223 | #define FLASH_REDBOOT_START_g3 (262144) | 224 | #define FLASH_REDBOOT_START_g3 (262144) |
224 | #define FLASH_PHY_FW_START_g3 1310720 | 225 | #define FLASH_PHY_FW_START_g3 1310720 |
225 | 226 | ||
227 | #define IMAGE_NCSI 16 | ||
228 | #define IMAGE_OPTION_ROM_PXE 32 | ||
229 | #define IMAGE_OPTION_ROM_FCoE 33 | ||
230 | #define IMAGE_OPTION_ROM_ISCSI 34 | ||
231 | #define IMAGE_FLASHISM_JUMPVECTOR 48 | ||
232 | #define IMAGE_FLASH_ISM 49 | ||
233 | #define IMAGE_JUMP_VECTOR 50 | ||
234 | #define IMAGE_FIRMWARE_iSCSI 160 | ||
235 | #define IMAGE_FIRMWARE_COMP_iSCSI 161 | ||
236 | #define IMAGE_FIRMWARE_FCoE 162 | ||
237 | #define IMAGE_FIRMWARE_COMP_FCoE 163 | ||
238 | #define IMAGE_FIRMWARE_BACKUP_iSCSI 176 | ||
239 | #define IMAGE_FIRMWARE_BACKUP_COMP_iSCSI 177 | ||
240 | #define IMAGE_FIRMWARE_BACKUP_FCoE 178 | ||
241 | #define IMAGE_FIRMWARE_BACKUP_COMP_FCoE 179 | ||
242 | #define IMAGE_FIRMWARE_PHY 192 | ||
243 | #define IMAGE_BOOT_CODE 224 | ||
244 | |||
226 | /************* Rx Packet Type Encoding **************/ | 245 | /************* Rx Packet Type Encoding **************/ |
227 | #define BE_UNICAST_PACKET 0 | 246 | #define BE_UNICAST_PACKET 0 |
228 | #define BE_MULTICAST_PACKET 1 | 247 | #define BE_MULTICAST_PACKET 1 |
@@ -445,6 +464,7 @@ struct flash_comp { | |||
445 | unsigned long offset; | 464 | unsigned long offset; |
446 | int optype; | 465 | int optype; |
447 | int size; | 466 | int size; |
467 | int img_type; | ||
448 | }; | 468 | }; |
449 | 469 | ||
450 | struct image_hdr { | 470 | struct image_hdr { |
@@ -481,17 +501,19 @@ struct flash_section_hdr { | |||
481 | u32 format_rev; | 501 | u32 format_rev; |
482 | u32 cksum; | 502 | u32 cksum; |
483 | u32 antidote; | 503 | u32 antidote; |
484 | u32 build_no; | 504 | u32 num_images; |
485 | u8 id_string[64]; | 505 | u8 id_string[128]; |
486 | u32 active_entry_mask; | 506 | u32 rsvd[4]; |
487 | u32 valid_entry_mask; | 507 | } __packed; |
488 | u32 org_content_mask; | 508 | |
489 | u32 rsvd0; | 509 | struct flash_section_hdr_g2 { |
490 | u32 rsvd1; | 510 | u32 format_rev; |
491 | u32 rsvd2; | 511 | u32 cksum; |
492 | u32 rsvd3; | 512 | u32 antidote; |
493 | u32 rsvd4; | 513 | u32 build_num; |
494 | }; | 514 | u8 id_string[128]; |
515 | u32 rsvd[8]; | ||
516 | } __packed; | ||
495 | 517 | ||
496 | struct flash_section_entry { | 518 | struct flash_section_entry { |
497 | u32 type; | 519 | u32 type; |
@@ -503,10 +525,16 @@ struct flash_section_entry { | |||
503 | u32 rsvd0; | 525 | u32 rsvd0; |
504 | u32 rsvd1; | 526 | u32 rsvd1; |
505 | u8 ver_data[32]; | 527 | u8 ver_data[32]; |
506 | }; | 528 | } __packed; |
507 | 529 | ||
508 | struct flash_section_info { | 530 | struct flash_section_info { |
509 | u8 cookie[32]; | 531 | u8 cookie[32]; |
510 | struct flash_section_hdr fsec_hdr; | 532 | struct flash_section_hdr fsec_hdr; |
511 | struct flash_section_entry fsec_entry[32]; | 533 | struct flash_section_entry fsec_entry[32]; |
512 | }; | 534 | } __packed; |
535 | |||
536 | struct flash_section_info_g2 { | ||
537 | u8 cookie[32]; | ||
538 | struct flash_section_hdr_g2 fsec_hdr; | ||
539 | struct flash_section_entry fsec_entry[32]; | ||
540 | } __packed; | ||
diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c index 8bc9e125e023..c9f757c10fdc 100644 --- a/drivers/net/ethernet/emulex/benet/be_main.c +++ b/drivers/net/ethernet/emulex/benet/be_main.c | |||
@@ -2759,6 +2759,8 @@ static void be_netpoll(struct net_device *netdev) | |||
2759 | #endif | 2759 | #endif |
2760 | 2760 | ||
2761 | #define FW_FILE_HDR_SIGN "ServerEngines Corp. " | 2761 | #define FW_FILE_HDR_SIGN "ServerEngines Corp. " |
2762 | char flash_cookie[2][16] = {"*** SE FLAS", "H DIRECTORY *** "}; | ||
2763 | |||
2762 | static bool be_flash_redboot(struct be_adapter *adapter, | 2764 | static bool be_flash_redboot(struct be_adapter *adapter, |
2763 | const u8 *p, u32 img_start, int image_size, | 2765 | const u8 *p, u32 img_start, int image_size, |
2764 | int hdr_size) | 2766 | int hdr_size) |
@@ -2792,58 +2794,101 @@ static bool phy_flashing_required(struct be_adapter *adapter) | |||
2792 | adapter->phy.interface_type == PHY_TYPE_BASET_10GB); | 2794 | adapter->phy.interface_type == PHY_TYPE_BASET_10GB); |
2793 | } | 2795 | } |
2794 | 2796 | ||
2797 | static bool is_comp_in_ufi(struct be_adapter *adapter, | ||
2798 | struct flash_section_info *fsec, int type) | ||
2799 | { | ||
2800 | int i = 0, img_type = 0; | ||
2801 | struct flash_section_info_g2 *fsec_g2 = NULL; | ||
2802 | |||
2803 | if (adapter->generation != BE_GEN3) | ||
2804 | fsec_g2 = (struct flash_section_info_g2 *)fsec; | ||
2805 | |||
2806 | for (i = 0; i < MAX_FLASH_COMP; i++) { | ||
2807 | if (fsec_g2) | ||
2808 | img_type = le32_to_cpu(fsec_g2->fsec_entry[i].type); | ||
2809 | else | ||
2810 | img_type = le32_to_cpu(fsec->fsec_entry[i].type); | ||
2811 | |||
2812 | if (img_type == type) | ||
2813 | return true; | ||
2814 | } | ||
2815 | return false; | ||
2816 | |||
2817 | } | ||
2818 | |||
2819 | struct flash_section_info *get_fsec_info(struct be_adapter *adapter, | ||
2820 | int header_size, | ||
2821 | const struct firmware *fw) | ||
2822 | { | ||
2823 | struct flash_section_info *fsec = NULL; | ||
2824 | const u8 *p = fw->data; | ||
2825 | |||
2826 | p += header_size; | ||
2827 | while (p < (fw->data + fw->size)) { | ||
2828 | fsec = (struct flash_section_info *)p; | ||
2829 | if (!memcmp(flash_cookie, fsec->cookie, sizeof(flash_cookie))) | ||
2830 | return fsec; | ||
2831 | p += 32; | ||
2832 | } | ||
2833 | return NULL; | ||
2834 | } | ||
2835 | |||
2795 | static int be_flash_data(struct be_adapter *adapter, | 2836 | static int be_flash_data(struct be_adapter *adapter, |
2796 | const struct firmware *fw, | 2837 | const struct firmware *fw, |
2797 | struct be_dma_mem *flash_cmd, int num_of_images) | 2838 | struct be_dma_mem *flash_cmd, |
2839 | int num_of_images) | ||
2798 | 2840 | ||
2799 | { | 2841 | { |
2800 | int status = 0, i, filehdr_size = 0; | 2842 | int status = 0, i, filehdr_size = 0; |
2843 | int img_hdrs_size = (num_of_images * sizeof(struct image_hdr)); | ||
2801 | u32 total_bytes = 0, flash_op; | 2844 | u32 total_bytes = 0, flash_op; |
2802 | int num_bytes; | 2845 | int num_bytes; |
2803 | const u8 *p = fw->data; | 2846 | const u8 *p = fw->data; |
2804 | struct be_cmd_write_flashrom *req = flash_cmd->va; | 2847 | struct be_cmd_write_flashrom *req = flash_cmd->va; |
2805 | const struct flash_comp *pflashcomp; | 2848 | const struct flash_comp *pflashcomp; |
2806 | int num_comp; | 2849 | int num_comp, hdr_size; |
2807 | 2850 | struct flash_section_info *fsec = NULL; | |
2808 | static const struct flash_comp gen3_flash_types[10] = { | 2851 | |
2809 | { FLASH_iSCSI_PRIMARY_IMAGE_START_g3, IMG_TYPE_ISCSI_ACTIVE, | 2852 | struct flash_comp gen3_flash_types[] = { |
2810 | FLASH_IMAGE_MAX_SIZE_g3}, | 2853 | { FLASH_iSCSI_PRIMARY_IMAGE_START_g3, OPTYPE_ISCSI_ACTIVE, |
2811 | { FLASH_REDBOOT_START_g3, IMG_TYPE_REDBOOT, | 2854 | FLASH_IMAGE_MAX_SIZE_g3, IMAGE_FIRMWARE_iSCSI}, |
2812 | FLASH_REDBOOT_IMAGE_MAX_SIZE_g3}, | 2855 | { FLASH_REDBOOT_START_g3, OPTYPE_REDBOOT, |
2813 | { FLASH_iSCSI_BIOS_START_g3, IMG_TYPE_BIOS, | 2856 | FLASH_REDBOOT_IMAGE_MAX_SIZE_g3, IMAGE_BOOT_CODE}, |
2814 | FLASH_BIOS_IMAGE_MAX_SIZE_g3}, | 2857 | { FLASH_iSCSI_BIOS_START_g3, OPTYPE_BIOS, |
2815 | { FLASH_PXE_BIOS_START_g3, IMG_TYPE_PXE_BIOS, | 2858 | FLASH_BIOS_IMAGE_MAX_SIZE_g3, IMAGE_OPTION_ROM_ISCSI}, |
2816 | FLASH_BIOS_IMAGE_MAX_SIZE_g3}, | 2859 | { FLASH_PXE_BIOS_START_g3, OPTYPE_PXE_BIOS, |
2817 | { FLASH_FCoE_BIOS_START_g3, IMG_TYPE_FCOE_BIOS, | 2860 | FLASH_BIOS_IMAGE_MAX_SIZE_g3, IMAGE_OPTION_ROM_PXE}, |
2818 | FLASH_BIOS_IMAGE_MAX_SIZE_g3}, | 2861 | { FLASH_FCoE_BIOS_START_g3, OPTYPE_FCOE_BIOS, |
2819 | { FLASH_iSCSI_BACKUP_IMAGE_START_g3, IMG_TYPE_ISCSI_BACKUP, | 2862 | FLASH_BIOS_IMAGE_MAX_SIZE_g3, IMAGE_OPTION_ROM_FCoE}, |
2820 | FLASH_IMAGE_MAX_SIZE_g3}, | 2863 | { FLASH_iSCSI_BACKUP_IMAGE_START_g3, OPTYPE_ISCSI_BACKUP, |
2821 | { FLASH_FCoE_PRIMARY_IMAGE_START_g3, IMG_TYPE_FCOE_FW_ACTIVE, | 2864 | FLASH_IMAGE_MAX_SIZE_g3, IMAGE_FIRMWARE_BACKUP_iSCSI}, |
2822 | FLASH_IMAGE_MAX_SIZE_g3}, | 2865 | { FLASH_FCoE_PRIMARY_IMAGE_START_g3, OPTYPE_FCOE_FW_ACTIVE, |
2823 | { FLASH_FCoE_BACKUP_IMAGE_START_g3, IMG_TYPE_FCOE_FW_BACKUP, | 2866 | FLASH_IMAGE_MAX_SIZE_g3, IMAGE_FIRMWARE_FCoE}, |
2824 | FLASH_IMAGE_MAX_SIZE_g3}, | 2867 | { FLASH_FCoE_BACKUP_IMAGE_START_g3, OPTYPE_FCOE_FW_BACKUP, |
2825 | { FLASH_NCSI_START_g3, IMG_TYPE_NCSI_FW, | 2868 | FLASH_IMAGE_MAX_SIZE_g3, IMAGE_FIRMWARE_BACKUP_FCoE}, |
2826 | FLASH_NCSI_IMAGE_MAX_SIZE_g3}, | 2869 | { FLASH_NCSI_START_g3, OPTYPE_NCSI_FW, |
2827 | { FLASH_PHY_FW_START_g3, IMG_TYPE_PHY_FW, | 2870 | FLASH_NCSI_IMAGE_MAX_SIZE_g3, IMAGE_NCSI}, |
2828 | FLASH_PHY_FW_IMAGE_MAX_SIZE_g3} | 2871 | { FLASH_PHY_FW_START_g3, OPTYPE_PHY_FW, |
2872 | FLASH_PHY_FW_IMAGE_MAX_SIZE_g3, IMAGE_FIRMWARE_PHY} | ||
2829 | }; | 2873 | }; |
2830 | static const struct flash_comp gen2_flash_types[8] = { | 2874 | |
2831 | { FLASH_iSCSI_PRIMARY_IMAGE_START_g2, IMG_TYPE_ISCSI_ACTIVE, | 2875 | struct flash_comp gen2_flash_types[] = { |
2832 | FLASH_IMAGE_MAX_SIZE_g2}, | 2876 | { FLASH_iSCSI_PRIMARY_IMAGE_START_g2, OPTYPE_ISCSI_ACTIVE, |
2833 | { FLASH_REDBOOT_START_g2, IMG_TYPE_REDBOOT, | 2877 | FLASH_IMAGE_MAX_SIZE_g2, IMAGE_FIRMWARE_iSCSI}, |
2834 | FLASH_REDBOOT_IMAGE_MAX_SIZE_g2}, | 2878 | { FLASH_REDBOOT_START_g2, OPTYPE_REDBOOT, |
2835 | { FLASH_iSCSI_BIOS_START_g2, IMG_TYPE_BIOS, | 2879 | FLASH_REDBOOT_IMAGE_MAX_SIZE_g2, IMAGE_BOOT_CODE}, |
2836 | FLASH_BIOS_IMAGE_MAX_SIZE_g2}, | 2880 | { FLASH_iSCSI_BIOS_START_g2, OPTYPE_BIOS, |
2837 | { FLASH_PXE_BIOS_START_g2, IMG_TYPE_PXE_BIOS, | 2881 | FLASH_BIOS_IMAGE_MAX_SIZE_g2, IMAGE_OPTION_ROM_ISCSI}, |
2838 | FLASH_BIOS_IMAGE_MAX_SIZE_g2}, | 2882 | { FLASH_PXE_BIOS_START_g2, OPTYPE_PXE_BIOS, |
2839 | { FLASH_FCoE_BIOS_START_g2, IMG_TYPE_FCOE_BIOS, | 2883 | FLASH_BIOS_IMAGE_MAX_SIZE_g2, IMAGE_OPTION_ROM_PXE}, |
2840 | FLASH_BIOS_IMAGE_MAX_SIZE_g2}, | 2884 | { FLASH_FCoE_BIOS_START_g2, OPTYPE_FCOE_BIOS, |
2841 | { FLASH_iSCSI_BACKUP_IMAGE_START_g2, IMG_TYPE_ISCSI_BACKUP, | 2885 | FLASH_BIOS_IMAGE_MAX_SIZE_g2, IMAGE_OPTION_ROM_FCoE}, |
2842 | FLASH_IMAGE_MAX_SIZE_g2}, | 2886 | { FLASH_iSCSI_BACKUP_IMAGE_START_g2, OPTYPE_ISCSI_BACKUP, |
2843 | { FLASH_FCoE_PRIMARY_IMAGE_START_g2, IMG_TYPE_FCOE_FW_ACTIVE, | 2887 | FLASH_IMAGE_MAX_SIZE_g2, IMAGE_FIRMWARE_BACKUP_iSCSI}, |
2844 | FLASH_IMAGE_MAX_SIZE_g2}, | 2888 | { FLASH_FCoE_PRIMARY_IMAGE_START_g2, OPTYPE_FCOE_FW_ACTIVE, |
2845 | { FLASH_FCoE_BACKUP_IMAGE_START_g2, IMG_TYPE_FCOE_FW_BACKUP, | 2889 | FLASH_IMAGE_MAX_SIZE_g2, IMAGE_FIRMWARE_FCoE}, |
2846 | FLASH_IMAGE_MAX_SIZE_g2} | 2890 | { FLASH_FCoE_BACKUP_IMAGE_START_g2, OPTYPE_FCOE_FW_BACKUP, |
2891 | FLASH_IMAGE_MAX_SIZE_g2, IMAGE_FIRMWARE_BACKUP_FCoE} | ||
2847 | }; | 2892 | }; |
2848 | 2893 | ||
2849 | if (adapter->generation == BE_GEN3) { | 2894 | if (adapter->generation == BE_GEN3) { |
@@ -2855,22 +2900,37 @@ static int be_flash_data(struct be_adapter *adapter, | |||
2855 | filehdr_size = sizeof(struct flash_file_hdr_g2); | 2900 | filehdr_size = sizeof(struct flash_file_hdr_g2); |
2856 | num_comp = ARRAY_SIZE(gen2_flash_types); | 2901 | num_comp = ARRAY_SIZE(gen2_flash_types); |
2857 | } | 2902 | } |
2903 | /* Get flash section info*/ | ||
2904 | fsec = get_fsec_info(adapter, filehdr_size + img_hdrs_size, fw); | ||
2905 | if (!fsec) { | ||
2906 | dev_err(&adapter->pdev->dev, | ||
2907 | "Invalid Cookie. UFI corrupted ?\n"); | ||
2908 | return -1; | ||
2909 | } | ||
2858 | for (i = 0; i < num_comp; i++) { | 2910 | for (i = 0; i < num_comp; i++) { |
2859 | if ((pflashcomp[i].optype == IMG_TYPE_NCSI_FW) && | 2911 | if (!is_comp_in_ufi(adapter, fsec, pflashcomp[i].img_type)) |
2860 | memcmp(adapter->fw_ver, "3.102.148.0", 11) < 0) | ||
2861 | continue; | 2912 | continue; |
2862 | if (pflashcomp[i].optype == IMG_TYPE_PHY_FW) { | 2913 | |
2914 | if ((pflashcomp[i].optype == OPTYPE_NCSI_FW) && | ||
2915 | memcmp(adapter->fw_ver, "3.102.148.0", 11) < 0) | ||
2916 | continue; | ||
2917 | |||
2918 | if (pflashcomp[i].optype == OPTYPE_PHY_FW) { | ||
2863 | if (!phy_flashing_required(adapter)) | 2919 | if (!phy_flashing_required(adapter)) |
2864 | continue; | 2920 | continue; |
2865 | } | 2921 | } |
2866 | if ((pflashcomp[i].optype == IMG_TYPE_REDBOOT) && | 2922 | |
2867 | (!be_flash_redboot(adapter, fw->data, | 2923 | hdr_size = filehdr_size + |
2868 | pflashcomp[i].offset, pflashcomp[i].size, filehdr_size + | 2924 | (num_of_images * sizeof(struct image_hdr)); |
2869 | (num_of_images * sizeof(struct image_hdr))))) | 2925 | |
2926 | if ((pflashcomp[i].optype == OPTYPE_REDBOOT) && | ||
2927 | (!be_flash_redboot(adapter, fw->data, pflashcomp[i].offset, | ||
2928 | pflashcomp[i].size, hdr_size))) | ||
2870 | continue; | 2929 | continue; |
2930 | |||
2931 | /* Flash the component */ | ||
2871 | p = fw->data; | 2932 | p = fw->data; |
2872 | p += filehdr_size + pflashcomp[i].offset | 2933 | p += filehdr_size + pflashcomp[i].offset + img_hdrs_size; |
2873 | + (num_of_images * sizeof(struct image_hdr)); | ||
2874 | if (p + pflashcomp[i].size > fw->data + fw->size) | 2934 | if (p + pflashcomp[i].size > fw->data + fw->size) |
2875 | return -1; | 2935 | return -1; |
2876 | total_bytes = pflashcomp[i].size; | 2936 | total_bytes = pflashcomp[i].size; |
@@ -2881,12 +2941,12 @@ static int be_flash_data(struct be_adapter *adapter, | |||
2881 | num_bytes = total_bytes; | 2941 | num_bytes = total_bytes; |
2882 | total_bytes -= num_bytes; | 2942 | total_bytes -= num_bytes; |
2883 | if (!total_bytes) { | 2943 | if (!total_bytes) { |
2884 | if (pflashcomp[i].optype == IMG_TYPE_PHY_FW) | 2944 | if (pflashcomp[i].optype == OPTYPE_PHY_FW) |
2885 | flash_op = FLASHROM_OPER_PHY_FLASH; | 2945 | flash_op = FLASHROM_OPER_PHY_FLASH; |
2886 | else | 2946 | else |
2887 | flash_op = FLASHROM_OPER_FLASH; | 2947 | flash_op = FLASHROM_OPER_FLASH; |
2888 | } else { | 2948 | } else { |
2889 | if (pflashcomp[i].optype == IMG_TYPE_PHY_FW) | 2949 | if (pflashcomp[i].optype == OPTYPE_PHY_FW) |
2890 | flash_op = FLASHROM_OPER_PHY_SAVE; | 2950 | flash_op = FLASHROM_OPER_PHY_SAVE; |
2891 | else | 2951 | else |
2892 | flash_op = FLASHROM_OPER_SAVE; | 2952 | flash_op = FLASHROM_OPER_SAVE; |
@@ -2898,7 +2958,7 @@ static int be_flash_data(struct be_adapter *adapter, | |||
2898 | if (status) { | 2958 | if (status) { |
2899 | if ((status == ILLEGAL_IOCTL_REQ) && | 2959 | if ((status == ILLEGAL_IOCTL_REQ) && |
2900 | (pflashcomp[i].optype == | 2960 | (pflashcomp[i].optype == |
2901 | IMG_TYPE_PHY_FW)) | 2961 | OPTYPE_PHY_FW)) |
2902 | break; | 2962 | break; |
2903 | dev_err(&adapter->pdev->dev, | 2963 | dev_err(&adapter->pdev->dev, |
2904 | "cmd to write to flash rom failed.\n"); | 2964 | "cmd to write to flash rom failed.\n"); |