Commit 8e65e2f07c1fdbd952570591bf78316aeed1c74a
Committed by
James Bottomley
1 parent
9588d24e36
Exists in
smarc-imx_3.14.28_1.0.0_ga
and in
1 other branch
[SCSI] esas2r: Fixes for big-endian platforms
In esas2r_format_init_msg(), sgl_page_size and epoch_time params are converted to little endian and the firmware version read from the hba is converted to cpu endianess. In esas2r_rq_init_request, correct and simplify the construction of the SCSI handle. These fixes are the result of testing on a PPC64 machine. Signed-off-by: Bradley Grove <bgrove@attotech.com> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Showing 2 changed files with 9 additions and 9 deletions Side-by-side Diff
drivers/scsi/esas2r/esas2r.h
... | ... | @@ -1207,7 +1207,6 @@ |
1207 | 1207 | struct esas2r_adapter *a) |
1208 | 1208 | { |
1209 | 1209 | union atto_vda_req *vrq = rq->vrq; |
1210 | - u32 handle; | |
1211 | 1210 | |
1212 | 1211 | INIT_LIST_HEAD(&rq->sg_table_head); |
1213 | 1212 | rq->data_buf = (void *)(vrq + 1); |
1214 | 1213 | |
... | ... | @@ -1243,11 +1242,9 @@ |
1243 | 1242 | |
1244 | 1243 | /* |
1245 | 1244 | * add a reference number to the handle to make it unique (until it |
1246 | - * wraps of course) while preserving the upper word | |
1245 | + * wraps of course) while preserving the least significant word | |
1247 | 1246 | */ |
1248 | - | |
1249 | - handle = be32_to_cpu(vrq->scsi.handle) & 0xFFFF0000; | |
1250 | - vrq->scsi.handle = cpu_to_be32(handle + a->cmd_ref_no++); | |
1247 | + vrq->scsi.handle = (a->cmd_ref_no++ << 16) | (u16)vrq->scsi.handle; | |
1251 | 1248 | |
1252 | 1249 | /* |
1253 | 1250 | * the following formats a SCSI request. the caller can override as |
drivers/scsi/esas2r/esas2r_init.c
... | ... | @@ -1235,8 +1235,8 @@ |
1235 | 1235 | 0, |
1236 | 1236 | NULL); |
1237 | 1237 | ci = (struct atto_vda_cfg_init *)&rq->vrq->cfg.data.init; |
1238 | - ci->sgl_page_size = sgl_page_size; | |
1239 | - ci->epoch_time = now.tv_sec; | |
1238 | + ci->sgl_page_size = cpu_to_le32(sgl_page_size); | |
1239 | + ci->epoch_time = cpu_to_le32(now.tv_sec); | |
1240 | 1240 | rq->flags |= RF_FAILURE_OK; |
1241 | 1241 | a->init_msg = ESAS2R_INIT_MSG_INIT; |
1242 | 1242 | break; |
1243 | 1243 | |
... | ... | @@ -1246,12 +1246,15 @@ |
1246 | 1246 | if (rq->req_stat == RS_SUCCESS) { |
1247 | 1247 | u32 major; |
1248 | 1248 | u32 minor; |
1249 | + u16 fw_release; | |
1249 | 1250 | |
1250 | 1251 | a->fw_version = le16_to_cpu( |
1251 | 1252 | rq->func_rsp.cfg_rsp.vda_version); |
1252 | 1253 | a->fw_build = rq->func_rsp.cfg_rsp.fw_build; |
1253 | - major = LOBYTE(rq->func_rsp.cfg_rsp.fw_release); | |
1254 | - minor = HIBYTE(rq->func_rsp.cfg_rsp.fw_release); | |
1254 | + fw_release = le16_to_cpu( | |
1255 | + rq->func_rsp.cfg_rsp.fw_release); | |
1256 | + major = LOBYTE(fw_release); | |
1257 | + minor = HIBYTE(fw_release); | |
1255 | 1258 | a->fw_version += (major << 16) + (minor << 24); |
1256 | 1259 | } else { |
1257 | 1260 | esas2r_hdebug("FAILED"); |