aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/scsi/mpt3sas/mpi/mpi2_init.h2
-rw-r--r--drivers/scsi/mpt3sas/mpt3sas_base.c55
-rw-r--r--drivers/scsi/mpt3sas/mpt3sas_base.h4
-rw-r--r--drivers/scsi/mpt3sas/mpt3sas_ctl.c11
-rw-r--r--drivers/scsi/mpt3sas/mpt3sas_scsih.c59
-rw-r--r--drivers/scsi/mpt3sas/mpt3sas_warpdrive.c3
6 files changed, 71 insertions, 63 deletions
diff --git a/drivers/scsi/mpt3sas/mpi/mpi2_init.h b/drivers/scsi/mpt3sas/mpi/mpi2_init.h
index 948a3ba682d7..6213ce6791ac 100644
--- a/drivers/scsi/mpt3sas/mpi/mpi2_init.h
+++ b/drivers/scsi/mpt3sas/mpi/mpi2_init.h
@@ -75,7 +75,7 @@
75 75
76typedef struct _MPI2_SCSI_IO_CDB_EEDP32 { 76typedef struct _MPI2_SCSI_IO_CDB_EEDP32 {
77 U8 CDB[20]; /*0x00 */ 77 U8 CDB[20]; /*0x00 */
78 U32 PrimaryReferenceTag; /*0x14 */ 78 __be32 PrimaryReferenceTag; /*0x14 */
79 U16 PrimaryApplicationTag; /*0x18 */ 79 U16 PrimaryApplicationTag; /*0x18 */
80 U16 PrimaryApplicationTagMask; /*0x1A */ 80 U16 PrimaryApplicationTagMask; /*0x1A */
81 U32 TransferLength; /*0x1C */ 81 U32 TransferLength; /*0x1C */
diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
index 4edf1fc0e80c..ca17915b2d1b 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_base.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
@@ -394,13 +394,14 @@ static void _clone_sg_entries(struct MPT3SAS_ADAPTER *ioc,
394 buff_ptr_phys = buffer_iomem_phys; 394 buff_ptr_phys = buffer_iomem_phys;
395 WARN_ON(buff_ptr_phys > U32_MAX); 395 WARN_ON(buff_ptr_phys > U32_MAX);
396 396
397 if (sgel->FlagsLength & 397 if (le32_to_cpu(sgel->FlagsLength) &
398 (MPI2_SGE_FLAGS_HOST_TO_IOC << MPI2_SGE_FLAGS_SHIFT)) 398 (MPI2_SGE_FLAGS_HOST_TO_IOC << MPI2_SGE_FLAGS_SHIFT))
399 is_write = 1; 399 is_write = 1;
400 400
401 for (i = 0; i < MPT_MIN_PHYS_SEGMENTS + ioc->facts.MaxChainDepth; i++) { 401 for (i = 0; i < MPT_MIN_PHYS_SEGMENTS + ioc->facts.MaxChainDepth; i++) {
402 402
403 sgl_flags = (sgel->FlagsLength >> MPI2_SGE_FLAGS_SHIFT); 403 sgl_flags =
404 (le32_to_cpu(sgel->FlagsLength) >> MPI2_SGE_FLAGS_SHIFT);
404 405
405 switch (sgl_flags & MPI2_SGE_FLAGS_ELEMENT_MASK) { 406 switch (sgl_flags & MPI2_SGE_FLAGS_ELEMENT_MASK) {
406 case MPI2_SGE_FLAGS_CHAIN_ELEMENT: 407 case MPI2_SGE_FLAGS_CHAIN_ELEMENT:
@@ -411,7 +412,7 @@ static void _clone_sg_entries(struct MPT3SAS_ADAPTER *ioc,
411 */ 412 */
412 sgel_next = 413 sgel_next =
413 _base_get_chain_buffer_dma_to_chain_buffer(ioc, 414 _base_get_chain_buffer_dma_to_chain_buffer(ioc,
414 sgel->Address); 415 le32_to_cpu(sgel->Address));
415 if (sgel_next == NULL) 416 if (sgel_next == NULL)
416 return; 417 return;
417 /* 418 /*
@@ -426,7 +427,8 @@ static void _clone_sg_entries(struct MPT3SAS_ADAPTER *ioc,
426 dst_addr_phys = _base_get_chain_phys(ioc, 427 dst_addr_phys = _base_get_chain_phys(ioc,
427 smid, sge_chain_count); 428 smid, sge_chain_count);
428 WARN_ON(dst_addr_phys > U32_MAX); 429 WARN_ON(dst_addr_phys > U32_MAX);
429 sgel->Address = (u32)dst_addr_phys; 430 sgel->Address =
431 cpu_to_le32(lower_32_bits(dst_addr_phys));
430 sgel = sgel_next; 432 sgel = sgel_next;
431 sge_chain_count++; 433 sge_chain_count++;
432 break; 434 break;
@@ -435,22 +437,28 @@ static void _clone_sg_entries(struct MPT3SAS_ADAPTER *ioc,
435 if (is_scsiio_req) { 437 if (is_scsiio_req) {
436 _base_clone_to_sys_mem(buff_ptr, 438 _base_clone_to_sys_mem(buff_ptr,
437 sg_virt(sg_scmd), 439 sg_virt(sg_scmd),
438 (sgel->FlagsLength & 0x00ffffff)); 440 (le32_to_cpu(sgel->FlagsLength) &
441 0x00ffffff));
439 /* 442 /*
440 * FIXME: this relies on a a zero 443 * FIXME: this relies on a a zero
441 * PCI mem_offset. 444 * PCI mem_offset.
442 */ 445 */
443 sgel->Address = (u32)buff_ptr_phys; 446 sgel->Address =
447 cpu_to_le32((u32)buff_ptr_phys);
444 } else { 448 } else {
445 _base_clone_to_sys_mem(buff_ptr, 449 _base_clone_to_sys_mem(buff_ptr,
446 ioc->config_vaddr, 450 ioc->config_vaddr,
447 (sgel->FlagsLength & 0x00ffffff)); 451 (le32_to_cpu(sgel->FlagsLength) &
448 sgel->Address = (u32)buff_ptr_phys; 452 0x00ffffff));
453 sgel->Address =
454 cpu_to_le32((u32)buff_ptr_phys);
449 } 455 }
450 } 456 }
451 buff_ptr += (sgel->FlagsLength & 0x00ffffff); 457 buff_ptr += (le32_to_cpu(sgel->FlagsLength) &
452 buff_ptr_phys += (sgel->FlagsLength & 0x00ffffff); 458 0x00ffffff);
453 if ((sgel->FlagsLength & 459 buff_ptr_phys += (le32_to_cpu(sgel->FlagsLength) &
460 0x00ffffff);
461 if ((le32_to_cpu(sgel->FlagsLength) &
454 (MPI2_SGE_FLAGS_END_OF_BUFFER 462 (MPI2_SGE_FLAGS_END_OF_BUFFER
455 << MPI2_SGE_FLAGS_SHIFT))) 463 << MPI2_SGE_FLAGS_SHIFT)))
456 goto eob_clone_chain; 464 goto eob_clone_chain;
@@ -1433,7 +1441,7 @@ _base_interrupt(int irq, void *bus_id)
1433 cpu_to_le32(reply); 1441 cpu_to_le32(reply);
1434 if (ioc->is_mcpu_endpoint) 1442 if (ioc->is_mcpu_endpoint)
1435 _base_clone_reply_to_sys_mem(ioc, 1443 _base_clone_reply_to_sys_mem(ioc,
1436 cpu_to_le32(reply), 1444 reply,
1437 ioc->reply_free_host_index); 1445 ioc->reply_free_host_index);
1438 writel(ioc->reply_free_host_index, 1446 writel(ioc->reply_free_host_index,
1439 &ioc->chip->ReplyFreeHostIndex); 1447 &ioc->chip->ReplyFreeHostIndex);
@@ -3044,7 +3052,7 @@ mpt3sas_base_map_resources(struct MPT3SAS_ADAPTER *ioc)
3044 3052
3045 for (i = 0; i < ioc->combined_reply_index_count; i++) { 3053 for (i = 0; i < ioc->combined_reply_index_count; i++) {
3046 ioc->replyPostRegisterIndex[i] = (resource_size_t *) 3054 ioc->replyPostRegisterIndex[i] = (resource_size_t *)
3047 ((u8 *)&ioc->chip->Doorbell + 3055 ((u8 __force *)&ioc->chip->Doorbell +
3048 MPI25_SUP_REPLY_POST_HOST_INDEX_OFFSET + 3056 MPI25_SUP_REPLY_POST_HOST_INDEX_OFFSET +
3049 (i * MPT3_SUP_REPLY_POST_HOST_INDEX_REG_OFFSET)); 3057 (i * MPT3_SUP_REPLY_POST_HOST_INDEX_REG_OFFSET));
3050 } 3058 }
@@ -3339,7 +3347,7 @@ _base_mpi_ep_writeq(__u64 b, volatile void __iomem *addr,
3339 spinlock_t *writeq_lock) 3347 spinlock_t *writeq_lock)
3340{ 3348{
3341 unsigned long flags; 3349 unsigned long flags;
3342 __u64 data_out = cpu_to_le64(b); 3350 __u64 data_out = b;
3343 3351
3344 spin_lock_irqsave(writeq_lock, flags); 3352 spin_lock_irqsave(writeq_lock, flags);
3345 writel((u32)(data_out), addr); 3353 writel((u32)(data_out), addr);
@@ -3362,7 +3370,7 @@ _base_mpi_ep_writeq(__u64 b, volatile void __iomem *addr,
3362static inline void 3370static inline void
3363_base_writeq(__u64 b, volatile void __iomem *addr, spinlock_t *writeq_lock) 3371_base_writeq(__u64 b, volatile void __iomem *addr, spinlock_t *writeq_lock)
3364{ 3372{
3365 writeq(cpu_to_le64(b), addr); 3373 writeq(b, addr);
3366} 3374}
3367#else 3375#else
3368static inline void 3376static inline void
@@ -3389,7 +3397,7 @@ _base_put_smid_mpi_ep_scsi_io(struct MPT3SAS_ADAPTER *ioc, u16 smid, u16 handle)
3389 __le32 *mfp = (__le32 *)mpt3sas_base_get_msg_frame(ioc, smid); 3397 __le32 *mfp = (__le32 *)mpt3sas_base_get_msg_frame(ioc, smid);
3390 3398
3391 _clone_sg_entries(ioc, (void *) mfp, smid); 3399 _clone_sg_entries(ioc, (void *) mfp, smid);
3392 mpi_req_iomem = (void *)ioc->chip + 3400 mpi_req_iomem = (void __force *)ioc->chip +
3393 MPI_FRAME_START_OFFSET + (smid * ioc->request_sz); 3401 MPI_FRAME_START_OFFSET + (smid * ioc->request_sz);
3394 _base_clone_mpi_to_sys_mem(mpi_req_iomem, (void *)mfp, 3402 _base_clone_mpi_to_sys_mem(mpi_req_iomem, (void *)mfp,
3395 ioc->request_sz); 3403 ioc->request_sz);
@@ -3473,7 +3481,8 @@ mpt3sas_base_put_smid_hi_priority(struct MPT3SAS_ADAPTER *ioc, u16 smid,
3473 3481
3474 request_hdr = (MPI2RequestHeader_t *)mfp; 3482 request_hdr = (MPI2RequestHeader_t *)mfp;
3475 /* TBD 256 is offset within sys register. */ 3483 /* TBD 256 is offset within sys register. */
3476 mpi_req_iomem = (void *)ioc->chip + MPI_FRAME_START_OFFSET 3484 mpi_req_iomem = (void __force *)ioc->chip
3485 + MPI_FRAME_START_OFFSET
3477 + (smid * ioc->request_sz); 3486 + (smid * ioc->request_sz);
3478 _base_clone_mpi_to_sys_mem(mpi_req_iomem, (void *)mfp, 3487 _base_clone_mpi_to_sys_mem(mpi_req_iomem, (void *)mfp,
3479 ioc->request_sz); 3488 ioc->request_sz);
@@ -3542,7 +3551,7 @@ mpt3sas_base_put_smid_default(struct MPT3SAS_ADAPTER *ioc, u16 smid)
3542 3551
3543 _clone_sg_entries(ioc, (void *) mfp, smid); 3552 _clone_sg_entries(ioc, (void *) mfp, smid);
3544 /* TBD 256 is offset within sys register */ 3553 /* TBD 256 is offset within sys register */
3545 mpi_req_iomem = (void *)ioc->chip + 3554 mpi_req_iomem = (void __force *)ioc->chip +
3546 MPI_FRAME_START_OFFSET + (smid * ioc->request_sz); 3555 MPI_FRAME_START_OFFSET + (smid * ioc->request_sz);
3547 _base_clone_mpi_to_sys_mem(mpi_req_iomem, (void *)mfp, 3556 _base_clone_mpi_to_sys_mem(mpi_req_iomem, (void *)mfp,
3548 ioc->request_sz); 3557 ioc->request_sz);
@@ -5002,7 +5011,7 @@ _base_handshake_req_reply_wait(struct MPT3SAS_ADAPTER *ioc, int request_bytes,
5002 5011
5003 /* send message 32-bits at a time */ 5012 /* send message 32-bits at a time */
5004 for (i = 0, failed = 0; i < request_bytes/4 && !failed; i++) { 5013 for (i = 0, failed = 0; i < request_bytes/4 && !failed; i++) {
5005 writel(cpu_to_le32(request[i]), &ioc->chip->Doorbell); 5014 writel((u32)(request[i]), &ioc->chip->Doorbell);
5006 if ((_base_wait_for_doorbell_ack(ioc, 5))) 5015 if ((_base_wait_for_doorbell_ack(ioc, 5)))
5007 failed = 1; 5016 failed = 1;
5008 } 5017 }
@@ -5023,7 +5032,7 @@ _base_handshake_req_reply_wait(struct MPT3SAS_ADAPTER *ioc, int request_bytes,
5023 } 5032 }
5024 5033
5025 /* read the first two 16-bits, it gives the total length of the reply */ 5034 /* read the first two 16-bits, it gives the total length of the reply */
5026 reply[0] = le16_to_cpu(readl(&ioc->chip->Doorbell) 5035 reply[0] = (u16)(readl(&ioc->chip->Doorbell)
5027 & MPI2_DOORBELL_DATA_MASK); 5036 & MPI2_DOORBELL_DATA_MASK);
5028 writel(0, &ioc->chip->HostInterruptStatus); 5037 writel(0, &ioc->chip->HostInterruptStatus);
5029 if ((_base_wait_for_doorbell_int(ioc, 5))) { 5038 if ((_base_wait_for_doorbell_int(ioc, 5))) {
@@ -5032,7 +5041,7 @@ _base_handshake_req_reply_wait(struct MPT3SAS_ADAPTER *ioc, int request_bytes,
5032 ioc->name, __LINE__); 5041 ioc->name, __LINE__);
5033 return -EFAULT; 5042 return -EFAULT;
5034 } 5043 }
5035 reply[1] = le16_to_cpu(readl(&ioc->chip->Doorbell) 5044 reply[1] = (u16)(readl(&ioc->chip->Doorbell)
5036 & MPI2_DOORBELL_DATA_MASK); 5045 & MPI2_DOORBELL_DATA_MASK);
5037 writel(0, &ioc->chip->HostInterruptStatus); 5046 writel(0, &ioc->chip->HostInterruptStatus);
5038 5047
@@ -5046,7 +5055,7 @@ _base_handshake_req_reply_wait(struct MPT3SAS_ADAPTER *ioc, int request_bytes,
5046 if (i >= reply_bytes/2) /* overflow case */ 5055 if (i >= reply_bytes/2) /* overflow case */
5047 readl(&ioc->chip->Doorbell); 5056 readl(&ioc->chip->Doorbell);
5048 else 5057 else
5049 reply[i] = le16_to_cpu(readl(&ioc->chip->Doorbell) 5058 reply[i] = (u16)(readl(&ioc->chip->Doorbell)
5050 & MPI2_DOORBELL_DATA_MASK); 5059 & MPI2_DOORBELL_DATA_MASK);
5051 writel(0, &ioc->chip->HostInterruptStatus); 5060 writel(0, &ioc->chip->HostInterruptStatus);
5052 } 5061 }
@@ -6172,7 +6181,7 @@ _base_make_ioc_operational(struct MPT3SAS_ADAPTER *ioc)
6172 ioc->reply_free[i] = cpu_to_le32(reply_address); 6181 ioc->reply_free[i] = cpu_to_le32(reply_address);
6173 if (ioc->is_mcpu_endpoint) 6182 if (ioc->is_mcpu_endpoint)
6174 _base_clone_reply_to_sys_mem(ioc, 6183 _base_clone_reply_to_sys_mem(ioc,
6175 (__le32)reply_address, i); 6184 reply_address, i);
6176 } 6185 }
6177 6186
6178 /* initialize reply queues */ 6187 /* initialize reply queues */
diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.h b/drivers/scsi/mpt3sas/mpt3sas_base.h
index ae36d8fb2f2b..331210523f1a 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_base.h
+++ b/drivers/scsi/mpt3sas/mpt3sas_base.h
@@ -829,8 +829,8 @@ struct _sc_list {
829 */ 829 */
830struct _event_ack_list { 830struct _event_ack_list {
831 struct list_head list; 831 struct list_head list;
832 u16 Event; 832 U16 Event;
833 u32 EventContext; 833 U32 EventContext;
834}; 834};
835 835
836/** 836/**
diff --git a/drivers/scsi/mpt3sas/mpt3sas_ctl.c b/drivers/scsi/mpt3sas/mpt3sas_ctl.c
index d3cb387ba9f4..c1b17d64c95f 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_ctl.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_ctl.c
@@ -297,7 +297,7 @@ mpt3sas_ctl_done(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index,
297 nvme_error_reply = 297 nvme_error_reply =
298 (Mpi26NVMeEncapsulatedErrorReply_t *)mpi_reply; 298 (Mpi26NVMeEncapsulatedErrorReply_t *)mpi_reply;
299 sz = min_t(u32, NVME_ERROR_RESPONSE_SIZE, 299 sz = min_t(u32, NVME_ERROR_RESPONSE_SIZE,
300 le32_to_cpu(nvme_error_reply->ErrorResponseCount)); 300 le16_to_cpu(nvme_error_reply->ErrorResponseCount));
301 sense_data = mpt3sas_base_get_sense_buffer(ioc, smid); 301 sense_data = mpt3sas_base_get_sense_buffer(ioc, smid);
302 memcpy(ioc->ctl_cmds.sense, sense_data, sz); 302 memcpy(ioc->ctl_cmds.sense, sense_data, sz);
303 } 303 }
@@ -803,12 +803,13 @@ _ctl_do_mpt_command(struct MPT3SAS_ADAPTER *ioc, struct mpt3_ioctl_command karg,
803 * Build the PRPs and set direction bits. 803 * Build the PRPs and set direction bits.
804 * Send the request. 804 * Send the request.
805 */ 805 */
806 nvme_encap_request->ErrorResponseBaseAddress = ioc->sense_dma & 806 nvme_encap_request->ErrorResponseBaseAddress =
807 0xFFFFFFFF00000000; 807 cpu_to_le64(ioc->sense_dma & 0xFFFFFFFF00000000UL);
808 nvme_encap_request->ErrorResponseBaseAddress |= 808 nvme_encap_request->ErrorResponseBaseAddress |=
809 (U64)mpt3sas_base_get_sense_buffer_dma(ioc, smid); 809 cpu_to_le64(le32_to_cpu(
810 mpt3sas_base_get_sense_buffer_dma(ioc, smid)));
810 nvme_encap_request->ErrorResponseAllocationLength = 811 nvme_encap_request->ErrorResponseAllocationLength =
811 NVME_ERROR_RESPONSE_SIZE; 812 cpu_to_le16(NVME_ERROR_RESPONSE_SIZE);
812 memset(ioc->ctl_cmds.sense, 0, NVME_ERROR_RESPONSE_SIZE); 813 memset(ioc->ctl_cmds.sense, 0, NVME_ERROR_RESPONSE_SIZE);
813 ioc->build_nvme_prp(ioc, smid, nvme_encap_request, 814 ioc->build_nvme_prp(ioc, smid, nvme_encap_request,
814 data_out_dma, data_out_sz, data_in_dma, data_in_sz); 815 data_out_dma, data_out_sz, data_in_dma, data_in_sz);
diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
index 8cd3782fab49..0319b34ebf6c 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
@@ -157,8 +157,8 @@ MODULE_PARM_DESC(prot_mask, " host protection capabilities mask, def=7 ");
157 157
158 158
159/* raid transport support */ 159/* raid transport support */
160struct raid_template *mpt3sas_raid_template; 160static struct raid_template *mpt3sas_raid_template;
161struct raid_template *mpt2sas_raid_template; 161static struct raid_template *mpt2sas_raid_template;
162 162
163 163
164/** 164/**
@@ -3725,7 +3725,7 @@ _scsih_tm_tr_complete(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index,
3725 if (!delayed_sc) 3725 if (!delayed_sc)
3726 return _scsih_check_for_pending_tm(ioc, smid); 3726 return _scsih_check_for_pending_tm(ioc, smid);
3727 INIT_LIST_HEAD(&delayed_sc->list); 3727 INIT_LIST_HEAD(&delayed_sc->list);
3728 delayed_sc->handle = mpi_request_tm->DevHandle; 3728 delayed_sc->handle = le16_to_cpu(mpi_request_tm->DevHandle);
3729 list_add_tail(&delayed_sc->list, &ioc->delayed_sc_list); 3729 list_add_tail(&delayed_sc->list, &ioc->delayed_sc_list);
3730 dewtprintk(ioc, pr_info(MPT3SAS_FMT 3730 dewtprintk(ioc, pr_info(MPT3SAS_FMT
3731 "DELAYED:sc:handle(0x%04x), (open)\n", 3731 "DELAYED:sc:handle(0x%04x), (open)\n",
@@ -3903,8 +3903,8 @@ _scsih_tm_volume_tr_complete(struct MPT3SAS_ADAPTER *ioc, u16 smid,
3903 * Context - processed in interrupt context. 3903 * Context - processed in interrupt context.
3904 */ 3904 */
3905static void 3905static void
3906_scsih_issue_delayed_event_ack(struct MPT3SAS_ADAPTER *ioc, u16 smid, u16 event, 3906_scsih_issue_delayed_event_ack(struct MPT3SAS_ADAPTER *ioc, u16 smid, U16 event,
3907 u32 event_context) 3907 U32 event_context)
3908{ 3908{
3909 Mpi2EventAckRequest_t *ack_request; 3909 Mpi2EventAckRequest_t *ack_request;
3910 int i = smid - ioc->internal_smid; 3910 int i = smid - ioc->internal_smid;
@@ -3979,13 +3979,13 @@ _scsih_issue_delayed_sas_io_unit_ctrl(struct MPT3SAS_ADAPTER *ioc,
3979 3979
3980 dewtprintk(ioc, pr_info(MPT3SAS_FMT 3980 dewtprintk(ioc, pr_info(MPT3SAS_FMT
3981 "sc_send:handle(0x%04x), (open), smid(%d), cb(%d)\n", 3981 "sc_send:handle(0x%04x), (open), smid(%d), cb(%d)\n",
3982 ioc->name, le16_to_cpu(handle), smid, 3982 ioc->name, handle, smid,
3983 ioc->tm_sas_control_cb_idx)); 3983 ioc->tm_sas_control_cb_idx));
3984 mpi_request = mpt3sas_base_get_msg_frame(ioc, smid); 3984 mpi_request = mpt3sas_base_get_msg_frame(ioc, smid);
3985 memset(mpi_request, 0, sizeof(Mpi2SasIoUnitControlRequest_t)); 3985 memset(mpi_request, 0, sizeof(Mpi2SasIoUnitControlRequest_t));
3986 mpi_request->Function = MPI2_FUNCTION_SAS_IO_UNIT_CONTROL; 3986 mpi_request->Function = MPI2_FUNCTION_SAS_IO_UNIT_CONTROL;
3987 mpi_request->Operation = MPI2_SAS_OP_REMOVE_DEVICE; 3987 mpi_request->Operation = MPI2_SAS_OP_REMOVE_DEVICE;
3988 mpi_request->DevHandle = handle; 3988 mpi_request->DevHandle = cpu_to_le16(handle);
3989 mpt3sas_base_put_smid_default(ioc, smid); 3989 mpt3sas_base_put_smid_default(ioc, smid);
3990} 3990}
3991 3991
@@ -6108,7 +6108,7 @@ _scsih_add_device(struct MPT3SAS_ADAPTER *ioc, u16 handle, u8 phy_num,
6108 if (sas_device_pg0.EnclosureHandle) { 6108 if (sas_device_pg0.EnclosureHandle) {
6109 encl_pg0_rc = mpt3sas_config_get_enclosure_pg0(ioc, &mpi_reply, 6109 encl_pg0_rc = mpt3sas_config_get_enclosure_pg0(ioc, &mpi_reply,
6110 &enclosure_pg0, MPI2_SAS_ENCLOS_PGAD_FORM_HANDLE, 6110 &enclosure_pg0, MPI2_SAS_ENCLOS_PGAD_FORM_HANDLE,
6111 sas_device_pg0.EnclosureHandle); 6111 le16_to_cpu(sas_device_pg0.EnclosureHandle));
6112 if (encl_pg0_rc) 6112 if (encl_pg0_rc)
6113 pr_info(MPT3SAS_FMT 6113 pr_info(MPT3SAS_FMT
6114 "Enclosure Pg0 read failed for handle(0x%04x)\n", 6114 "Enclosure Pg0 read failed for handle(0x%04x)\n",
@@ -6917,7 +6917,7 @@ _scsih_pcie_add_device(struct MPT3SAS_ADAPTER *ioc, u16 handle)
6917 if (pcie_device->enclosure_handle != 0) 6917 if (pcie_device->enclosure_handle != 0)
6918 pcie_device->slot = le16_to_cpu(pcie_device_pg0.Slot); 6918 pcie_device->slot = le16_to_cpu(pcie_device_pg0.Slot);
6919 6919
6920 if (le16_to_cpu(pcie_device_pg0.Flags) & 6920 if (le32_to_cpu(pcie_device_pg0.Flags) &
6921 MPI26_PCIEDEV0_FLAGS_ENCL_LEVEL_VALID) { 6921 MPI26_PCIEDEV0_FLAGS_ENCL_LEVEL_VALID) {
6922 pcie_device->enclosure_level = pcie_device_pg0.EnclosureLevel; 6922 pcie_device->enclosure_level = pcie_device_pg0.EnclosureLevel;
6923 memcpy(&pcie_device->connector_name[0], 6923 memcpy(&pcie_device->connector_name[0],
@@ -8364,8 +8364,9 @@ Mpi2SasDevicePage0_t *sas_device_pg0)
8364 8364
8365 spin_lock_irqsave(&ioc->sas_device_lock, flags); 8365 spin_lock_irqsave(&ioc->sas_device_lock, flags);
8366 list_for_each_entry(sas_device, &ioc->sas_device_list, list) { 8366 list_for_each_entry(sas_device, &ioc->sas_device_list, list) {
8367 if ((sas_device->sas_address == sas_device_pg0->SASAddress) && 8367 if ((sas_device->sas_address == le64_to_cpu(
8368 (sas_device->slot == sas_device_pg0->Slot)) { 8368 sas_device_pg0->SASAddress)) && (sas_device->slot ==
8369 le16_to_cpu(sas_device_pg0->Slot))) {
8369 sas_device->responding = 1; 8370 sas_device->responding = 1;
8370 starget = sas_device->starget; 8371 starget = sas_device->starget;
8371 if (starget && starget->hostdata) { 8372 if (starget && starget->hostdata) {
@@ -8377,7 +8378,7 @@ Mpi2SasDevicePage0_t *sas_device_pg0)
8377 if (starget) { 8378 if (starget) {
8378 starget_printk(KERN_INFO, starget, 8379 starget_printk(KERN_INFO, starget,
8379 "handle(0x%04x), sas_addr(0x%016llx)\n", 8380 "handle(0x%04x), sas_addr(0x%016llx)\n",
8380 sas_device_pg0->DevHandle, 8381 le16_to_cpu(sas_device_pg0->DevHandle),
8381 (unsigned long long) 8382 (unsigned long long)
8382 sas_device->sas_address); 8383 sas_device->sas_address);
8383 8384
@@ -8389,7 +8390,7 @@ Mpi2SasDevicePage0_t *sas_device_pg0)
8389 sas_device->enclosure_logical_id, 8390 sas_device->enclosure_logical_id,
8390 sas_device->slot); 8391 sas_device->slot);
8391 } 8392 }
8392 if (sas_device_pg0->Flags & 8393 if (le16_to_cpu(sas_device_pg0->Flags) &
8393 MPI2_SAS_DEVICE0_FLAGS_ENCL_LEVEL_VALID) { 8394 MPI2_SAS_DEVICE0_FLAGS_ENCL_LEVEL_VALID) {
8394 sas_device->enclosure_level = 8395 sas_device->enclosure_level =
8395 sas_device_pg0->EnclosureLevel; 8396 sas_device_pg0->EnclosureLevel;
@@ -8403,14 +8404,16 @@ Mpi2SasDevicePage0_t *sas_device_pg0)
8403 _scsih_get_enclosure_logicalid_chassis_slot(ioc, 8404 _scsih_get_enclosure_logicalid_chassis_slot(ioc,
8404 sas_device_pg0, sas_device); 8405 sas_device_pg0, sas_device);
8405 8406
8406 if (sas_device->handle == sas_device_pg0->DevHandle) 8407 if (sas_device->handle == le16_to_cpu(
8408 sas_device_pg0->DevHandle))
8407 goto out; 8409 goto out;
8408 pr_info("\thandle changed from(0x%04x)!!!\n", 8410 pr_info("\thandle changed from(0x%04x)!!!\n",
8409 sas_device->handle); 8411 sas_device->handle);
8410 sas_device->handle = sas_device_pg0->DevHandle; 8412 sas_device->handle = le16_to_cpu(
8413 sas_device_pg0->DevHandle);
8411 if (sas_target_priv_data) 8414 if (sas_target_priv_data)
8412 sas_target_priv_data->handle = 8415 sas_target_priv_data->handle =
8413 sas_device_pg0->DevHandle; 8416 le16_to_cpu(sas_device_pg0->DevHandle);
8414 goto out; 8417 goto out;
8415 } 8418 }
8416 } 8419 }
@@ -8449,15 +8452,10 @@ _scsih_search_responding_sas_devices(struct MPT3SAS_ADAPTER *ioc)
8449 MPI2_IOCSTATUS_MASK; 8452 MPI2_IOCSTATUS_MASK;
8450 if (ioc_status != MPI2_IOCSTATUS_SUCCESS) 8453 if (ioc_status != MPI2_IOCSTATUS_SUCCESS)
8451 break; 8454 break;
8452 handle = sas_device_pg0.DevHandle = 8455 handle = le16_to_cpu(sas_device_pg0.DevHandle);
8453 le16_to_cpu(sas_device_pg0.DevHandle);
8454 device_info = le32_to_cpu(sas_device_pg0.DeviceInfo); 8456 device_info = le32_to_cpu(sas_device_pg0.DeviceInfo);
8455 if (!(_scsih_is_end_device(device_info))) 8457 if (!(_scsih_is_end_device(device_info)))
8456 continue; 8458 continue;
8457 sas_device_pg0.SASAddress =
8458 le64_to_cpu(sas_device_pg0.SASAddress);
8459 sas_device_pg0.Slot = le16_to_cpu(sas_device_pg0.Slot);
8460 sas_device_pg0.Flags = le16_to_cpu(sas_device_pg0.Flags);
8461 _scsih_mark_responding_sas_device(ioc, &sas_device_pg0); 8459 _scsih_mark_responding_sas_device(ioc, &sas_device_pg0);
8462 } 8460 }
8463 8461
@@ -8487,8 +8485,9 @@ _scsih_mark_responding_pcie_device(struct MPT3SAS_ADAPTER *ioc,
8487 8485
8488 spin_lock_irqsave(&ioc->pcie_device_lock, flags); 8486 spin_lock_irqsave(&ioc->pcie_device_lock, flags);
8489 list_for_each_entry(pcie_device, &ioc->pcie_device_list, list) { 8487 list_for_each_entry(pcie_device, &ioc->pcie_device_list, list) {
8490 if ((pcie_device->wwid == pcie_device_pg0->WWID) && 8488 if ((pcie_device->wwid == le64_to_cpu(pcie_device_pg0->WWID))
8491 (pcie_device->slot == pcie_device_pg0->Slot)) { 8489 && (pcie_device->slot == le16_to_cpu(
8490 pcie_device_pg0->Slot))) {
8492 pcie_device->responding = 1; 8491 pcie_device->responding = 1;
8493 starget = pcie_device->starget; 8492 starget = pcie_device->starget;
8494 if (starget && starget->hostdata) { 8493 if (starget && starget->hostdata) {
@@ -8523,14 +8522,16 @@ _scsih_mark_responding_pcie_device(struct MPT3SAS_ADAPTER *ioc,
8523 pcie_device->connector_name[0] = '\0'; 8522 pcie_device->connector_name[0] = '\0';
8524 } 8523 }
8525 8524
8526 if (pcie_device->handle == pcie_device_pg0->DevHandle) 8525 if (pcie_device->handle == le16_to_cpu(
8526 pcie_device_pg0->DevHandle))
8527 goto out; 8527 goto out;
8528 pr_info("\thandle changed from(0x%04x)!!!\n", 8528 pr_info("\thandle changed from(0x%04x)!!!\n",
8529 pcie_device->handle); 8529 pcie_device->handle);
8530 pcie_device->handle = pcie_device_pg0->DevHandle; 8530 pcie_device->handle = le16_to_cpu(
8531 pcie_device_pg0->DevHandle);
8531 if (sas_target_priv_data) 8532 if (sas_target_priv_data)
8532 sas_target_priv_data->handle = 8533 sas_target_priv_data->handle =
8533 pcie_device_pg0->DevHandle; 8534 le16_to_cpu(pcie_device_pg0->DevHandle);
8534 goto out; 8535 goto out;
8535 } 8536 }
8536 } 8537 }
@@ -8579,10 +8580,6 @@ _scsih_search_responding_pcie_devices(struct MPT3SAS_ADAPTER *ioc)
8579 device_info = le32_to_cpu(pcie_device_pg0.DeviceInfo); 8580 device_info = le32_to_cpu(pcie_device_pg0.DeviceInfo);
8580 if (!(_scsih_is_nvme_device(device_info))) 8581 if (!(_scsih_is_nvme_device(device_info)))
8581 continue; 8582 continue;
8582 pcie_device_pg0.WWID = le64_to_cpu(pcie_device_pg0.WWID),
8583 pcie_device_pg0.Slot = le16_to_cpu(pcie_device_pg0.Slot);
8584 pcie_device_pg0.Flags = le32_to_cpu(pcie_device_pg0.Flags);
8585 pcie_device_pg0.DevHandle = handle;
8586 _scsih_mark_responding_pcie_device(ioc, &pcie_device_pg0); 8583 _scsih_mark_responding_pcie_device(ioc, &pcie_device_pg0);
8587 } 8584 }
8588out: 8585out:
diff --git a/drivers/scsi/mpt3sas/mpt3sas_warpdrive.c b/drivers/scsi/mpt3sas/mpt3sas_warpdrive.c
index 6bfcee4757e0..45aa94915cbf 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_warpdrive.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_warpdrive.c
@@ -177,7 +177,8 @@ mpt3sas_init_warpdrive_properties(struct MPT3SAS_ADAPTER *ioc,
177 if (mpt3sas_config_get_phys_disk_pg0(ioc, &mpi_reply, 177 if (mpt3sas_config_get_phys_disk_pg0(ioc, &mpi_reply,
178 &pd_pg0, MPI2_PHYSDISK_PGAD_FORM_PHYSDISKNUM, 178 &pd_pg0, MPI2_PHYSDISK_PGAD_FORM_PHYSDISKNUM,
179 vol_pg0->PhysDisk[count].PhysDiskNum) || 179 vol_pg0->PhysDisk[count].PhysDiskNum) ||
180 pd_pg0.DevHandle == MPT3SAS_INVALID_DEVICE_HANDLE) { 180 le16_to_cpu(pd_pg0.DevHandle) ==
181 MPT3SAS_INVALID_DEVICE_HANDLE) {
181 pr_info(MPT3SAS_FMT "WarpDrive : Direct IO is " 182 pr_info(MPT3SAS_FMT "WarpDrive : Direct IO is "
182 "disabled for the drive with handle(0x%04x) member" 183 "disabled for the drive with handle(0x%04x) member"
183 "handle retrieval failed for member number=%d\n", 184 "handle retrieval failed for member number=%d\n",