scsi: qla2xxx: Fix flash update in 28XX adapters on big endian machines
authorArun Easi <aeasi@marvell.com>
Wed, 2 Dec 2020 13:23:08 +0000 (05:23 -0800)
committerMartin K. Petersen <martin.petersen@oracle.com>
Wed, 9 Dec 2020 16:34:18 +0000 (11:34 -0500)
Flash update failed due to missing endian conversion in FLT region access
as well as in checksum computation.

Link: https://lore.kernel.org/r/20201202132312.19966-12-njavali@marvell.com
Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
Signed-off-by: Arun Easi <aeasi@marvell.com>
Signed-off-by: Nilesh Javali <njavali@marvell.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/qla2xxx/qla_sup.c

index 0f92e9a..f771fab 100644 (file)
@@ -2634,14 +2634,14 @@ qla28xx_extract_sfub_and_verify(struct scsi_qla_host *vha, uint32_t *buf,
            sizeof(struct secure_flash_update_block));
 
        for (i = 0; i < (sizeof(struct secure_flash_update_block) >> 2); i++)
-               check_sum += p[i];
+               check_sum += le32_to_cpu(p[i]);
 
        check_sum = (~check_sum) + 1;
 
-       if (check_sum != p[i]) {
+       if (check_sum != le32_to_cpu(p[i])) {
                ql_log(ql_log_warn, vha, 0x7097,
                    "SFUB checksum failed, 0x%x, 0x%x\n",
-                   check_sum, p[i]);
+                   check_sum, le32_to_cpu(p[i]));
                return QLA_COMMAND_ERROR;
        }
 
@@ -2721,7 +2721,7 @@ qla28xx_write_flash_data(scsi_qla_host_t *vha, uint32_t *dwptr, uint32_t faddr,
        if (ha->flags.secure_adapter && region.attribute) {
 
                ql_log(ql_log_warn + ql_dbg_verbose, vha, 0xffff,
-                   "Region %x is secure\n", region.code);
+                   "Region %x is secure\n", le16_to_cpu(region.code));
 
                switch (le16_to_cpu(region.code)) {
                case FLT_REG_FW:
@@ -2775,7 +2775,7 @@ qla28xx_write_flash_data(scsi_qla_host_t *vha, uint32_t *dwptr, uint32_t faddr,
                default:
                        ql_log(ql_log_warn + ql_dbg_verbose, vha,
                            0xffff, "Secure region %x not supported\n",
-                           region.code);
+                           le16_to_cpu(region.code));
                        rval = QLA_COMMAND_ERROR;
                        goto done;
                }