Commit 8e65e2f07c1fdbd952570591bf78316aeed1c74a

Authored by Bradley Grove
Committed by James Bottomley
1 parent 9588d24e36

[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");