Commit 81a9e226 authored by Vasundhara Volam's avatar Vasundhara Volam Committed by David S. Miller

be2net: avoid flashing SH-B0 UFI image on SH-P2 chip

Skyhawk-B0 FW UFI is not compatible to flash on Skyhawk-P2 ASIC.
But, Skyhawk-P2 FW UFI is compatible with both B0 and P2 chips.
Signed-off-by: default avatarVasundhara Volam <vasundhara.volam@emulex.com>
Signed-off-by: default avatarSathya Perla <sathya.perla@emulex.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 5d3acd0d
...@@ -1093,6 +1093,7 @@ struct be_cmd_req_query_fw_cfg { ...@@ -1093,6 +1093,7 @@ struct be_cmd_req_query_fw_cfg {
/* ASIC revisions */ /* ASIC revisions */
#define ASIC_REV_B0 0x10 #define ASIC_REV_B0 0x10
#define ASIC_REV_P2 0x11
struct be_cmd_resp_query_fw_cfg { struct be_cmd_resp_query_fw_cfg {
struct be_cmd_resp_hdr hdr; struct be_cmd_resp_hdr hdr;
......
...@@ -4336,6 +4336,7 @@ static int lancer_fw_download(struct be_adapter *adapter, ...@@ -4336,6 +4336,7 @@ static int lancer_fw_download(struct be_adapter *adapter,
#define BE3_UFI 3 #define BE3_UFI 3
#define BE3R_UFI 10 #define BE3R_UFI 10
#define SH_UFI 4 #define SH_UFI 4
#define SH_P2_UFI 11
static int be_get_ufi_type(struct be_adapter *adapter, static int be_get_ufi_type(struct be_adapter *adapter,
struct flash_file_hdr_g3 *fhdr) struct flash_file_hdr_g3 *fhdr)
...@@ -4350,7 +4351,8 @@ static int be_get_ufi_type(struct be_adapter *adapter, ...@@ -4350,7 +4351,8 @@ static int be_get_ufi_type(struct be_adapter *adapter,
*/ */
switch (fhdr->build[0]) { switch (fhdr->build[0]) {
case BLD_STR_UFI_TYPE_SH: case BLD_STR_UFI_TYPE_SH:
return SH_UFI; return (fhdr->asic_type_rev == ASIC_REV_P2) ? SH_P2_UFI :
SH_UFI;
case BLD_STR_UFI_TYPE_BE3: case BLD_STR_UFI_TYPE_BE3:
return (fhdr->asic_type_rev == ASIC_REV_B0) ? BE3R_UFI : return (fhdr->asic_type_rev == ASIC_REV_B0) ? BE3R_UFI :
BE3_UFI; BE3_UFI;
...@@ -4364,6 +4366,7 @@ static int be_get_ufi_type(struct be_adapter *adapter, ...@@ -4364,6 +4366,7 @@ static int be_get_ufi_type(struct be_adapter *adapter,
/* Check if the flash image file is compatible with the adapter that /* Check if the flash image file is compatible with the adapter that
* is being flashed. * is being flashed.
* BE3 chips with asic-rev B0 must be flashed only with BE3R_UFI type. * BE3 chips with asic-rev B0 must be flashed only with BE3R_UFI type.
* Skyhawk chips with asic-rev P2 must be flashed only with SH_P2_UFI type.
*/ */
static bool be_check_ufi_compatibility(struct be_adapter *adapter, static bool be_check_ufi_compatibility(struct be_adapter *adapter,
struct flash_file_hdr_g3 *fhdr) struct flash_file_hdr_g3 *fhdr)
...@@ -4371,8 +4374,11 @@ static bool be_check_ufi_compatibility(struct be_adapter *adapter, ...@@ -4371,8 +4374,11 @@ static bool be_check_ufi_compatibility(struct be_adapter *adapter,
int ufi_type = be_get_ufi_type(adapter, fhdr); int ufi_type = be_get_ufi_type(adapter, fhdr);
switch (ufi_type) { switch (ufi_type) {
case SH_UFI: case SH_P2_UFI:
return skyhawk_chip(adapter); return skyhawk_chip(adapter);
case SH_UFI:
return (skyhawk_chip(adapter) &&
adapter->asic_rev < ASIC_REV_P2);
case BE3R_UFI: case BE3R_UFI:
return BE3_chip(adapter); return BE3_chip(adapter);
case BE3_UFI: case BE3_UFI:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment