diff options
-rw-r--r-- | drivers/scsi/mpt3sas/mpi/mpi2_init.h | 2 | ||||
-rw-r--r-- | drivers/scsi/mpt3sas/mpt3sas_base.c | 55 | ||||
-rw-r--r-- | drivers/scsi/mpt3sas/mpt3sas_base.h | 4 | ||||
-rw-r--r-- | drivers/scsi/mpt3sas/mpt3sas_ctl.c | 11 | ||||
-rw-r--r-- | drivers/scsi/mpt3sas/mpt3sas_scsih.c | 59 | ||||
-rw-r--r-- | drivers/scsi/mpt3sas/mpt3sas_warpdrive.c | 3 |
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 | ||
76 | typedef struct _MPI2_SCSI_IO_CDB_EEDP32 { | 76 | typedef 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, | |||
3362 | static inline void | 3370 | static 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 |
3368 | static inline void | 3376 | static 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 | */ |
830 | struct _event_ack_list { | 830 | struct _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 */ |
160 | struct raid_template *mpt3sas_raid_template; | 160 | static struct raid_template *mpt3sas_raid_template; |
161 | struct raid_template *mpt2sas_raid_template; | 161 | static 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 | */ |
3905 | static void | 3905 | static 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 | } |
8588 | out: | 8585 | out: |
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", |