Commit cf6bf971 authored by Chaitra P B's avatar Chaitra P B Committed by Martin K. Petersen

scsi: mpt3sas: Bug fix for big endian systems.

This patch fixes sparse warnings and bugs on big endian systems.
Signed-off-by: default avatarChaitra P B <chaitra.basappa@broadcom.com>
Signed-off-by: default avatarSuganath Prabu S <suganath-prabu.subramani@broadcom.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 23b389c2
...@@ -75,7 +75,7 @@ ...@@ -75,7 +75,7 @@
typedef struct _MPI2_SCSI_IO_CDB_EEDP32 { typedef struct _MPI2_SCSI_IO_CDB_EEDP32 {
U8 CDB[20]; /*0x00 */ U8 CDB[20]; /*0x00 */
U32 PrimaryReferenceTag; /*0x14 */ __be32 PrimaryReferenceTag; /*0x14 */
U16 PrimaryApplicationTag; /*0x18 */ U16 PrimaryApplicationTag; /*0x18 */
U16 PrimaryApplicationTagMask; /*0x1A */ U16 PrimaryApplicationTagMask; /*0x1A */
U32 TransferLength; /*0x1C */ U32 TransferLength; /*0x1C */
......
...@@ -394,13 +394,14 @@ static void _clone_sg_entries(struct MPT3SAS_ADAPTER *ioc, ...@@ -394,13 +394,14 @@ static void _clone_sg_entries(struct MPT3SAS_ADAPTER *ioc,
buff_ptr_phys = buffer_iomem_phys; buff_ptr_phys = buffer_iomem_phys;
WARN_ON(buff_ptr_phys > U32_MAX); WARN_ON(buff_ptr_phys > U32_MAX);
if (sgel->FlagsLength & if (le32_to_cpu(sgel->FlagsLength) &
(MPI2_SGE_FLAGS_HOST_TO_IOC << MPI2_SGE_FLAGS_SHIFT)) (MPI2_SGE_FLAGS_HOST_TO_IOC << MPI2_SGE_FLAGS_SHIFT))
is_write = 1; is_write = 1;
for (i = 0; i < MPT_MIN_PHYS_SEGMENTS + ioc->facts.MaxChainDepth; i++) { for (i = 0; i < MPT_MIN_PHYS_SEGMENTS + ioc->facts.MaxChainDepth; i++) {
sgl_flags = (sgel->FlagsLength >> MPI2_SGE_FLAGS_SHIFT); sgl_flags =
(le32_to_cpu(sgel->FlagsLength) >> MPI2_SGE_FLAGS_SHIFT);
switch (sgl_flags & MPI2_SGE_FLAGS_ELEMENT_MASK) { switch (sgl_flags & MPI2_SGE_FLAGS_ELEMENT_MASK) {
case MPI2_SGE_FLAGS_CHAIN_ELEMENT: case MPI2_SGE_FLAGS_CHAIN_ELEMENT:
...@@ -411,7 +412,7 @@ static void _clone_sg_entries(struct MPT3SAS_ADAPTER *ioc, ...@@ -411,7 +412,7 @@ static void _clone_sg_entries(struct MPT3SAS_ADAPTER *ioc,
*/ */
sgel_next = sgel_next =
_base_get_chain_buffer_dma_to_chain_buffer(ioc, _base_get_chain_buffer_dma_to_chain_buffer(ioc,
sgel->Address); le32_to_cpu(sgel->Address));
if (sgel_next == NULL) if (sgel_next == NULL)
return; return;
/* /*
...@@ -426,7 +427,8 @@ static void _clone_sg_entries(struct MPT3SAS_ADAPTER *ioc, ...@@ -426,7 +427,8 @@ static void _clone_sg_entries(struct MPT3SAS_ADAPTER *ioc,
dst_addr_phys = _base_get_chain_phys(ioc, dst_addr_phys = _base_get_chain_phys(ioc,
smid, sge_chain_count); smid, sge_chain_count);
WARN_ON(dst_addr_phys > U32_MAX); WARN_ON(dst_addr_phys > U32_MAX);
sgel->Address = (u32)dst_addr_phys; sgel->Address =
cpu_to_le32(lower_32_bits(dst_addr_phys));
sgel = sgel_next; sgel = sgel_next;
sge_chain_count++; sge_chain_count++;
break; break;
...@@ -435,22 +437,28 @@ static void _clone_sg_entries(struct MPT3SAS_ADAPTER *ioc, ...@@ -435,22 +437,28 @@ static void _clone_sg_entries(struct MPT3SAS_ADAPTER *ioc,
if (is_scsiio_req) { if (is_scsiio_req) {
_base_clone_to_sys_mem(buff_ptr, _base_clone_to_sys_mem(buff_ptr,
sg_virt(sg_scmd), sg_virt(sg_scmd),
(sgel->FlagsLength & 0x00ffffff)); (le32_to_cpu(sgel->FlagsLength) &
0x00ffffff));
/* /*
* FIXME: this relies on a a zero * FIXME: this relies on a a zero
* PCI mem_offset. * PCI mem_offset.
*/ */
sgel->Address = (u32)buff_ptr_phys; sgel->Address =
cpu_to_le32((u32)buff_ptr_phys);
} else { } else {
_base_clone_to_sys_mem(buff_ptr, _base_clone_to_sys_mem(buff_ptr,
ioc->config_vaddr, ioc->config_vaddr,
(sgel->FlagsLength & 0x00ffffff)); (le32_to_cpu(sgel->FlagsLength) &
sgel->Address = (u32)buff_ptr_phys; 0x00ffffff));
sgel->Address =
cpu_to_le32((u32)buff_ptr_phys);
} }
} }
buff_ptr += (sgel->FlagsLength & 0x00ffffff); buff_ptr += (le32_to_cpu(sgel->FlagsLength) &
buff_ptr_phys += (sgel->FlagsLength & 0x00ffffff); 0x00ffffff);
if ((sgel->FlagsLength & buff_ptr_phys += (le32_to_cpu(sgel->FlagsLength) &
0x00ffffff);
if ((le32_to_cpu(sgel->FlagsLength) &
(MPI2_SGE_FLAGS_END_OF_BUFFER (MPI2_SGE_FLAGS_END_OF_BUFFER
<< MPI2_SGE_FLAGS_SHIFT))) << MPI2_SGE_FLAGS_SHIFT)))
goto eob_clone_chain; goto eob_clone_chain;
...@@ -1433,7 +1441,7 @@ _base_interrupt(int irq, void *bus_id) ...@@ -1433,7 +1441,7 @@ _base_interrupt(int irq, void *bus_id)
cpu_to_le32(reply); cpu_to_le32(reply);
if (ioc->is_mcpu_endpoint) if (ioc->is_mcpu_endpoint)
_base_clone_reply_to_sys_mem(ioc, _base_clone_reply_to_sys_mem(ioc,
cpu_to_le32(reply), reply,
ioc->reply_free_host_index); ioc->reply_free_host_index);
writel(ioc->reply_free_host_index, writel(ioc->reply_free_host_index,
&ioc->chip->ReplyFreeHostIndex); &ioc->chip->ReplyFreeHostIndex);
...@@ -3044,7 +3052,7 @@ mpt3sas_base_map_resources(struct MPT3SAS_ADAPTER *ioc) ...@@ -3044,7 +3052,7 @@ mpt3sas_base_map_resources(struct MPT3SAS_ADAPTER *ioc)
for (i = 0; i < ioc->combined_reply_index_count; i++) { for (i = 0; i < ioc->combined_reply_index_count; i++) {
ioc->replyPostRegisterIndex[i] = (resource_size_t *) ioc->replyPostRegisterIndex[i] = (resource_size_t *)
((u8 *)&ioc->chip->Doorbell + ((u8 __force *)&ioc->chip->Doorbell +
MPI25_SUP_REPLY_POST_HOST_INDEX_OFFSET + MPI25_SUP_REPLY_POST_HOST_INDEX_OFFSET +
(i * MPT3_SUP_REPLY_POST_HOST_INDEX_REG_OFFSET)); (i * MPT3_SUP_REPLY_POST_HOST_INDEX_REG_OFFSET));
} }
...@@ -3339,7 +3347,7 @@ _base_mpi_ep_writeq(__u64 b, volatile void __iomem *addr, ...@@ -3339,7 +3347,7 @@ _base_mpi_ep_writeq(__u64 b, volatile void __iomem *addr,
spinlock_t *writeq_lock) spinlock_t *writeq_lock)
{ {
unsigned long flags; unsigned long flags;
__u64 data_out = cpu_to_le64(b); __u64 data_out = b;
spin_lock_irqsave(writeq_lock, flags); spin_lock_irqsave(writeq_lock, flags);
writel((u32)(data_out), addr); writel((u32)(data_out), addr);
...@@ -3362,7 +3370,7 @@ _base_mpi_ep_writeq(__u64 b, volatile void __iomem *addr, ...@@ -3362,7 +3370,7 @@ _base_mpi_ep_writeq(__u64 b, volatile void __iomem *addr,
static inline void static inline void
_base_writeq(__u64 b, volatile void __iomem *addr, spinlock_t *writeq_lock) _base_writeq(__u64 b, volatile void __iomem *addr, spinlock_t *writeq_lock)
{ {
writeq(cpu_to_le64(b), addr); writeq(b, addr);
} }
#else #else
static inline void static inline void
...@@ -3389,7 +3397,7 @@ _base_put_smid_mpi_ep_scsi_io(struct MPT3SAS_ADAPTER *ioc, u16 smid, u16 handle) ...@@ -3389,7 +3397,7 @@ _base_put_smid_mpi_ep_scsi_io(struct MPT3SAS_ADAPTER *ioc, u16 smid, u16 handle)
__le32 *mfp = (__le32 *)mpt3sas_base_get_msg_frame(ioc, smid); __le32 *mfp = (__le32 *)mpt3sas_base_get_msg_frame(ioc, smid);
_clone_sg_entries(ioc, (void *) mfp, smid); _clone_sg_entries(ioc, (void *) mfp, smid);
mpi_req_iomem = (void *)ioc->chip + mpi_req_iomem = (void __force *)ioc->chip +
MPI_FRAME_START_OFFSET + (smid * ioc->request_sz); MPI_FRAME_START_OFFSET + (smid * ioc->request_sz);
_base_clone_mpi_to_sys_mem(mpi_req_iomem, (void *)mfp, _base_clone_mpi_to_sys_mem(mpi_req_iomem, (void *)mfp,
ioc->request_sz); ioc->request_sz);
...@@ -3473,7 +3481,8 @@ mpt3sas_base_put_smid_hi_priority(struct MPT3SAS_ADAPTER *ioc, u16 smid, ...@@ -3473,7 +3481,8 @@ mpt3sas_base_put_smid_hi_priority(struct MPT3SAS_ADAPTER *ioc, u16 smid,
request_hdr = (MPI2RequestHeader_t *)mfp; request_hdr = (MPI2RequestHeader_t *)mfp;
/* TBD 256 is offset within sys register. */ /* TBD 256 is offset within sys register. */
mpi_req_iomem = (void *)ioc->chip + MPI_FRAME_START_OFFSET mpi_req_iomem = (void __force *)ioc->chip
+ MPI_FRAME_START_OFFSET
+ (smid * ioc->request_sz); + (smid * ioc->request_sz);
_base_clone_mpi_to_sys_mem(mpi_req_iomem, (void *)mfp, _base_clone_mpi_to_sys_mem(mpi_req_iomem, (void *)mfp,
ioc->request_sz); ioc->request_sz);
...@@ -3542,7 +3551,7 @@ mpt3sas_base_put_smid_default(struct MPT3SAS_ADAPTER *ioc, u16 smid) ...@@ -3542,7 +3551,7 @@ mpt3sas_base_put_smid_default(struct MPT3SAS_ADAPTER *ioc, u16 smid)
_clone_sg_entries(ioc, (void *) mfp, smid); _clone_sg_entries(ioc, (void *) mfp, smid);
/* TBD 256 is offset within sys register */ /* TBD 256 is offset within sys register */
mpi_req_iomem = (void *)ioc->chip + mpi_req_iomem = (void __force *)ioc->chip +
MPI_FRAME_START_OFFSET + (smid * ioc->request_sz); MPI_FRAME_START_OFFSET + (smid * ioc->request_sz);
_base_clone_mpi_to_sys_mem(mpi_req_iomem, (void *)mfp, _base_clone_mpi_to_sys_mem(mpi_req_iomem, (void *)mfp,
ioc->request_sz); ioc->request_sz);
...@@ -5002,7 +5011,7 @@ _base_handshake_req_reply_wait(struct MPT3SAS_ADAPTER *ioc, int request_bytes, ...@@ -5002,7 +5011,7 @@ _base_handshake_req_reply_wait(struct MPT3SAS_ADAPTER *ioc, int request_bytes,
/* send message 32-bits at a time */ /* send message 32-bits at a time */
for (i = 0, failed = 0; i < request_bytes/4 && !failed; i++) { for (i = 0, failed = 0; i < request_bytes/4 && !failed; i++) {
writel(cpu_to_le32(request[i]), &ioc->chip->Doorbell); writel((u32)(request[i]), &ioc->chip->Doorbell);
if ((_base_wait_for_doorbell_ack(ioc, 5))) if ((_base_wait_for_doorbell_ack(ioc, 5)))
failed = 1; failed = 1;
} }
...@@ -5023,7 +5032,7 @@ _base_handshake_req_reply_wait(struct MPT3SAS_ADAPTER *ioc, int request_bytes, ...@@ -5023,7 +5032,7 @@ _base_handshake_req_reply_wait(struct MPT3SAS_ADAPTER *ioc, int request_bytes,
} }
/* read the first two 16-bits, it gives the total length of the reply */ /* read the first two 16-bits, it gives the total length of the reply */
reply[0] = le16_to_cpu(readl(&ioc->chip->Doorbell) reply[0] = (u16)(readl(&ioc->chip->Doorbell)
& MPI2_DOORBELL_DATA_MASK); & MPI2_DOORBELL_DATA_MASK);
writel(0, &ioc->chip->HostInterruptStatus); writel(0, &ioc->chip->HostInterruptStatus);
if ((_base_wait_for_doorbell_int(ioc, 5))) { 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,7 +5041,7 @@ _base_handshake_req_reply_wait(struct MPT3SAS_ADAPTER *ioc, int request_bytes,
ioc->name, __LINE__); ioc->name, __LINE__);
return -EFAULT; return -EFAULT;
} }
reply[1] = le16_to_cpu(readl(&ioc->chip->Doorbell) reply[1] = (u16)(readl(&ioc->chip->Doorbell)
& MPI2_DOORBELL_DATA_MASK); & MPI2_DOORBELL_DATA_MASK);
writel(0, &ioc->chip->HostInterruptStatus); writel(0, &ioc->chip->HostInterruptStatus);
...@@ -5046,7 +5055,7 @@ _base_handshake_req_reply_wait(struct MPT3SAS_ADAPTER *ioc, int request_bytes, ...@@ -5046,7 +5055,7 @@ _base_handshake_req_reply_wait(struct MPT3SAS_ADAPTER *ioc, int request_bytes,
if (i >= reply_bytes/2) /* overflow case */ if (i >= reply_bytes/2) /* overflow case */
readl(&ioc->chip->Doorbell); readl(&ioc->chip->Doorbell);
else else
reply[i] = le16_to_cpu(readl(&ioc->chip->Doorbell) reply[i] = (u16)(readl(&ioc->chip->Doorbell)
& MPI2_DOORBELL_DATA_MASK); & MPI2_DOORBELL_DATA_MASK);
writel(0, &ioc->chip->HostInterruptStatus); writel(0, &ioc->chip->HostInterruptStatus);
} }
...@@ -6172,7 +6181,7 @@ _base_make_ioc_operational(struct MPT3SAS_ADAPTER *ioc) ...@@ -6172,7 +6181,7 @@ _base_make_ioc_operational(struct MPT3SAS_ADAPTER *ioc)
ioc->reply_free[i] = cpu_to_le32(reply_address); ioc->reply_free[i] = cpu_to_le32(reply_address);
if (ioc->is_mcpu_endpoint) if (ioc->is_mcpu_endpoint)
_base_clone_reply_to_sys_mem(ioc, _base_clone_reply_to_sys_mem(ioc,
(__le32)reply_address, i); reply_address, i);
} }
/* initialize reply queues */ /* initialize reply queues */
......
...@@ -829,8 +829,8 @@ struct _sc_list { ...@@ -829,8 +829,8 @@ struct _sc_list {
*/ */
struct _event_ack_list { struct _event_ack_list {
struct list_head list; struct list_head list;
u16 Event; U16 Event;
u32 EventContext; U32 EventContext;
}; };
/** /**
......
...@@ -297,7 +297,7 @@ mpt3sas_ctl_done(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index, ...@@ -297,7 +297,7 @@ mpt3sas_ctl_done(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index,
nvme_error_reply = nvme_error_reply =
(Mpi26NVMeEncapsulatedErrorReply_t *)mpi_reply; (Mpi26NVMeEncapsulatedErrorReply_t *)mpi_reply;
sz = min_t(u32, NVME_ERROR_RESPONSE_SIZE, sz = min_t(u32, NVME_ERROR_RESPONSE_SIZE,
le32_to_cpu(nvme_error_reply->ErrorResponseCount)); le16_to_cpu(nvme_error_reply->ErrorResponseCount));
sense_data = mpt3sas_base_get_sense_buffer(ioc, smid); sense_data = mpt3sas_base_get_sense_buffer(ioc, smid);
memcpy(ioc->ctl_cmds.sense, sense_data, sz); memcpy(ioc->ctl_cmds.sense, sense_data, sz);
} }
...@@ -803,12 +803,13 @@ _ctl_do_mpt_command(struct MPT3SAS_ADAPTER *ioc, struct mpt3_ioctl_command karg, ...@@ -803,12 +803,13 @@ _ctl_do_mpt_command(struct MPT3SAS_ADAPTER *ioc, struct mpt3_ioctl_command karg,
* Build the PRPs and set direction bits. * Build the PRPs and set direction bits.
* Send the request. * Send the request.
*/ */
nvme_encap_request->ErrorResponseBaseAddress = ioc->sense_dma & nvme_encap_request->ErrorResponseBaseAddress =
0xFFFFFFFF00000000; cpu_to_le64(ioc->sense_dma & 0xFFFFFFFF00000000UL);
nvme_encap_request->ErrorResponseBaseAddress |= nvme_encap_request->ErrorResponseBaseAddress |=
(U64)mpt3sas_base_get_sense_buffer_dma(ioc, smid); cpu_to_le64(le32_to_cpu(
mpt3sas_base_get_sense_buffer_dma(ioc, smid)));
nvme_encap_request->ErrorResponseAllocationLength = nvme_encap_request->ErrorResponseAllocationLength =
NVME_ERROR_RESPONSE_SIZE; cpu_to_le16(NVME_ERROR_RESPONSE_SIZE);
memset(ioc->ctl_cmds.sense, 0, NVME_ERROR_RESPONSE_SIZE); memset(ioc->ctl_cmds.sense, 0, NVME_ERROR_RESPONSE_SIZE);
ioc->build_nvme_prp(ioc, smid, nvme_encap_request, ioc->build_nvme_prp(ioc, smid, nvme_encap_request,
data_out_dma, data_out_sz, data_in_dma, data_in_sz); data_out_dma, data_out_sz, data_in_dma, data_in_sz);
......
...@@ -157,8 +157,8 @@ MODULE_PARM_DESC(prot_mask, " host protection capabilities mask, def=7 "); ...@@ -157,8 +157,8 @@ MODULE_PARM_DESC(prot_mask, " host protection capabilities mask, def=7 ");
/* raid transport support */ /* raid transport support */
struct raid_template *mpt3sas_raid_template; static struct raid_template *mpt3sas_raid_template;
struct raid_template *mpt2sas_raid_template; static struct raid_template *mpt2sas_raid_template;
/** /**
...@@ -3725,7 +3725,7 @@ _scsih_tm_tr_complete(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index, ...@@ -3725,7 +3725,7 @@ _scsih_tm_tr_complete(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index,
if (!delayed_sc) if (!delayed_sc)
return _scsih_check_for_pending_tm(ioc, smid); return _scsih_check_for_pending_tm(ioc, smid);
INIT_LIST_HEAD(&delayed_sc->list); INIT_LIST_HEAD(&delayed_sc->list);
delayed_sc->handle = mpi_request_tm->DevHandle; delayed_sc->handle = le16_to_cpu(mpi_request_tm->DevHandle);
list_add_tail(&delayed_sc->list, &ioc->delayed_sc_list); list_add_tail(&delayed_sc->list, &ioc->delayed_sc_list);
dewtprintk(ioc, pr_info(MPT3SAS_FMT dewtprintk(ioc, pr_info(MPT3SAS_FMT
"DELAYED:sc:handle(0x%04x), (open)\n", "DELAYED:sc:handle(0x%04x), (open)\n",
...@@ -3903,8 +3903,8 @@ _scsih_tm_volume_tr_complete(struct MPT3SAS_ADAPTER *ioc, u16 smid, ...@@ -3903,8 +3903,8 @@ _scsih_tm_volume_tr_complete(struct MPT3SAS_ADAPTER *ioc, u16 smid,
* Context - processed in interrupt context. * Context - processed in interrupt context.
*/ */
static void static void
_scsih_issue_delayed_event_ack(struct MPT3SAS_ADAPTER *ioc, u16 smid, u16 event, _scsih_issue_delayed_event_ack(struct MPT3SAS_ADAPTER *ioc, u16 smid, U16 event,
u32 event_context) U32 event_context)
{ {
Mpi2EventAckRequest_t *ack_request; Mpi2EventAckRequest_t *ack_request;
int i = smid - ioc->internal_smid; int i = smid - ioc->internal_smid;
...@@ -3979,13 +3979,13 @@ _scsih_issue_delayed_sas_io_unit_ctrl(struct MPT3SAS_ADAPTER *ioc, ...@@ -3979,13 +3979,13 @@ _scsih_issue_delayed_sas_io_unit_ctrl(struct MPT3SAS_ADAPTER *ioc,
dewtprintk(ioc, pr_info(MPT3SAS_FMT dewtprintk(ioc, pr_info(MPT3SAS_FMT
"sc_send:handle(0x%04x), (open), smid(%d), cb(%d)\n", "sc_send:handle(0x%04x), (open), smid(%d), cb(%d)\n",
ioc->name, le16_to_cpu(handle), smid, ioc->name, handle, smid,
ioc->tm_sas_control_cb_idx)); ioc->tm_sas_control_cb_idx));
mpi_request = mpt3sas_base_get_msg_frame(ioc, smid); mpi_request = mpt3sas_base_get_msg_frame(ioc, smid);
memset(mpi_request, 0, sizeof(Mpi2SasIoUnitControlRequest_t)); memset(mpi_request, 0, sizeof(Mpi2SasIoUnitControlRequest_t));
mpi_request->Function = MPI2_FUNCTION_SAS_IO_UNIT_CONTROL; mpi_request->Function = MPI2_FUNCTION_SAS_IO_UNIT_CONTROL;
mpi_request->Operation = MPI2_SAS_OP_REMOVE_DEVICE; mpi_request->Operation = MPI2_SAS_OP_REMOVE_DEVICE;
mpi_request->DevHandle = handle; mpi_request->DevHandle = cpu_to_le16(handle);
mpt3sas_base_put_smid_default(ioc, smid); mpt3sas_base_put_smid_default(ioc, smid);
} }
...@@ -6108,7 +6108,7 @@ _scsih_add_device(struct MPT3SAS_ADAPTER *ioc, u16 handle, u8 phy_num, ...@@ -6108,7 +6108,7 @@ _scsih_add_device(struct MPT3SAS_ADAPTER *ioc, u16 handle, u8 phy_num,
if (sas_device_pg0.EnclosureHandle) { if (sas_device_pg0.EnclosureHandle) {
encl_pg0_rc = mpt3sas_config_get_enclosure_pg0(ioc, &mpi_reply, encl_pg0_rc = mpt3sas_config_get_enclosure_pg0(ioc, &mpi_reply,
&enclosure_pg0, MPI2_SAS_ENCLOS_PGAD_FORM_HANDLE, &enclosure_pg0, MPI2_SAS_ENCLOS_PGAD_FORM_HANDLE,
sas_device_pg0.EnclosureHandle); le16_to_cpu(sas_device_pg0.EnclosureHandle));
if (encl_pg0_rc) if (encl_pg0_rc)
pr_info(MPT3SAS_FMT pr_info(MPT3SAS_FMT
"Enclosure Pg0 read failed for handle(0x%04x)\n", "Enclosure Pg0 read failed for handle(0x%04x)\n",
...@@ -6917,7 +6917,7 @@ _scsih_pcie_add_device(struct MPT3SAS_ADAPTER *ioc, u16 handle) ...@@ -6917,7 +6917,7 @@ _scsih_pcie_add_device(struct MPT3SAS_ADAPTER *ioc, u16 handle)
if (pcie_device->enclosure_handle != 0) if (pcie_device->enclosure_handle != 0)
pcie_device->slot = le16_to_cpu(pcie_device_pg0.Slot); pcie_device->slot = le16_to_cpu(pcie_device_pg0.Slot);
if (le16_to_cpu(pcie_device_pg0.Flags) & if (le32_to_cpu(pcie_device_pg0.Flags) &
MPI26_PCIEDEV0_FLAGS_ENCL_LEVEL_VALID) { MPI26_PCIEDEV0_FLAGS_ENCL_LEVEL_VALID) {
pcie_device->enclosure_level = pcie_device_pg0.EnclosureLevel; pcie_device->enclosure_level = pcie_device_pg0.EnclosureLevel;
memcpy(&pcie_device->connector_name[0], memcpy(&pcie_device->connector_name[0],
...@@ -8364,8 +8364,9 @@ Mpi2SasDevicePage0_t *sas_device_pg0) ...@@ -8364,8 +8364,9 @@ Mpi2SasDevicePage0_t *sas_device_pg0)
spin_lock_irqsave(&ioc->sas_device_lock, flags); spin_lock_irqsave(&ioc->sas_device_lock, flags);
list_for_each_entry(sas_device, &ioc->sas_device_list, list) { list_for_each_entry(sas_device, &ioc->sas_device_list, list) {
if ((sas_device->sas_address == sas_device_pg0->SASAddress) && if ((sas_device->sas_address == le64_to_cpu(
(sas_device->slot == sas_device_pg0->Slot)) { sas_device_pg0->SASAddress)) && (sas_device->slot ==
le16_to_cpu(sas_device_pg0->Slot))) {
sas_device->responding = 1; sas_device->responding = 1;
starget = sas_device->starget; starget = sas_device->starget;
if (starget && starget->hostdata) { if (starget && starget->hostdata) {
...@@ -8377,7 +8378,7 @@ Mpi2SasDevicePage0_t *sas_device_pg0) ...@@ -8377,7 +8378,7 @@ Mpi2SasDevicePage0_t *sas_device_pg0)
if (starget) { if (starget) {
starget_printk(KERN_INFO, starget, starget_printk(KERN_INFO, starget,
"handle(0x%04x), sas_addr(0x%016llx)\n", "handle(0x%04x), sas_addr(0x%016llx)\n",
sas_device_pg0->DevHandle, le16_to_cpu(sas_device_pg0->DevHandle),
(unsigned long long) (unsigned long long)
sas_device->sas_address); sas_device->sas_address);
...@@ -8389,7 +8390,7 @@ Mpi2SasDevicePage0_t *sas_device_pg0) ...@@ -8389,7 +8390,7 @@ Mpi2SasDevicePage0_t *sas_device_pg0)
sas_device->enclosure_logical_id, sas_device->enclosure_logical_id,
sas_device->slot); sas_device->slot);
} }
if (sas_device_pg0->Flags & if (le16_to_cpu(sas_device_pg0->Flags) &
MPI2_SAS_DEVICE0_FLAGS_ENCL_LEVEL_VALID) { MPI2_SAS_DEVICE0_FLAGS_ENCL_LEVEL_VALID) {
sas_device->enclosure_level = sas_device->enclosure_level =
sas_device_pg0->EnclosureLevel; sas_device_pg0->EnclosureLevel;
...@@ -8403,14 +8404,16 @@ Mpi2SasDevicePage0_t *sas_device_pg0) ...@@ -8403,14 +8404,16 @@ Mpi2SasDevicePage0_t *sas_device_pg0)
_scsih_get_enclosure_logicalid_chassis_slot(ioc, _scsih_get_enclosure_logicalid_chassis_slot(ioc,
sas_device_pg0, sas_device); sas_device_pg0, sas_device);
if (sas_device->handle == sas_device_pg0->DevHandle) if (sas_device->handle == le16_to_cpu(
sas_device_pg0->DevHandle))
goto out; goto out;
pr_info("\thandle changed from(0x%04x)!!!\n", pr_info("\thandle changed from(0x%04x)!!!\n",
sas_device->handle); sas_device->handle);
sas_device->handle = sas_device_pg0->DevHandle; sas_device->handle = le16_to_cpu(
sas_device_pg0->DevHandle);
if (sas_target_priv_data) if (sas_target_priv_data)
sas_target_priv_data->handle = sas_target_priv_data->handle =
sas_device_pg0->DevHandle; le16_to_cpu(sas_device_pg0->DevHandle);
goto out; goto out;
} }
} }
...@@ -8449,15 +8452,10 @@ _scsih_search_responding_sas_devices(struct MPT3SAS_ADAPTER *ioc) ...@@ -8449,15 +8452,10 @@ _scsih_search_responding_sas_devices(struct MPT3SAS_ADAPTER *ioc)
MPI2_IOCSTATUS_MASK; MPI2_IOCSTATUS_MASK;
if (ioc_status != MPI2_IOCSTATUS_SUCCESS) if (ioc_status != MPI2_IOCSTATUS_SUCCESS)
break; break;
handle = sas_device_pg0.DevHandle = handle = le16_to_cpu(sas_device_pg0.DevHandle);
le16_to_cpu(sas_device_pg0.DevHandle);
device_info = le32_to_cpu(sas_device_pg0.DeviceInfo); device_info = le32_to_cpu(sas_device_pg0.DeviceInfo);
if (!(_scsih_is_end_device(device_info))) if (!(_scsih_is_end_device(device_info)))
continue; continue;
sas_device_pg0.SASAddress =
le64_to_cpu(sas_device_pg0.SASAddress);
sas_device_pg0.Slot = le16_to_cpu(sas_device_pg0.Slot);
sas_device_pg0.Flags = le16_to_cpu(sas_device_pg0.Flags);
_scsih_mark_responding_sas_device(ioc, &sas_device_pg0); _scsih_mark_responding_sas_device(ioc, &sas_device_pg0);
} }
...@@ -8487,8 +8485,9 @@ _scsih_mark_responding_pcie_device(struct MPT3SAS_ADAPTER *ioc, ...@@ -8487,8 +8485,9 @@ _scsih_mark_responding_pcie_device(struct MPT3SAS_ADAPTER *ioc,
spin_lock_irqsave(&ioc->pcie_device_lock, flags); spin_lock_irqsave(&ioc->pcie_device_lock, flags);
list_for_each_entry(pcie_device, &ioc->pcie_device_list, list) { list_for_each_entry(pcie_device, &ioc->pcie_device_list, list) {
if ((pcie_device->wwid == pcie_device_pg0->WWID) && if ((pcie_device->wwid == le64_to_cpu(pcie_device_pg0->WWID))
(pcie_device->slot == pcie_device_pg0->Slot)) { && (pcie_device->slot == le16_to_cpu(
pcie_device_pg0->Slot))) {
pcie_device->responding = 1; pcie_device->responding = 1;
starget = pcie_device->starget; starget = pcie_device->starget;
if (starget && starget->hostdata) { if (starget && starget->hostdata) {
...@@ -8523,14 +8522,16 @@ _scsih_mark_responding_pcie_device(struct MPT3SAS_ADAPTER *ioc, ...@@ -8523,14 +8522,16 @@ _scsih_mark_responding_pcie_device(struct MPT3SAS_ADAPTER *ioc,
pcie_device->connector_name[0] = '\0'; pcie_device->connector_name[0] = '\0';
} }
if (pcie_device->handle == pcie_device_pg0->DevHandle) if (pcie_device->handle == le16_to_cpu(
pcie_device_pg0->DevHandle))
goto out; goto out;
pr_info("\thandle changed from(0x%04x)!!!\n", pr_info("\thandle changed from(0x%04x)!!!\n",
pcie_device->handle); pcie_device->handle);
pcie_device->handle = pcie_device_pg0->DevHandle; pcie_device->handle = le16_to_cpu(
pcie_device_pg0->DevHandle);
if (sas_target_priv_data) if (sas_target_priv_data)
sas_target_priv_data->handle = sas_target_priv_data->handle =
pcie_device_pg0->DevHandle; le16_to_cpu(pcie_device_pg0->DevHandle);
goto out; goto out;
} }
} }
...@@ -8579,10 +8580,6 @@ _scsih_search_responding_pcie_devices(struct MPT3SAS_ADAPTER *ioc) ...@@ -8579,10 +8580,6 @@ _scsih_search_responding_pcie_devices(struct MPT3SAS_ADAPTER *ioc)
device_info = le32_to_cpu(pcie_device_pg0.DeviceInfo); device_info = le32_to_cpu(pcie_device_pg0.DeviceInfo);
if (!(_scsih_is_nvme_device(device_info))) if (!(_scsih_is_nvme_device(device_info)))
continue; continue;
pcie_device_pg0.WWID = le64_to_cpu(pcie_device_pg0.WWID),
pcie_device_pg0.Slot = le16_to_cpu(pcie_device_pg0.Slot);
pcie_device_pg0.Flags = le32_to_cpu(pcie_device_pg0.Flags);
pcie_device_pg0.DevHandle = handle;
_scsih_mark_responding_pcie_device(ioc, &pcie_device_pg0); _scsih_mark_responding_pcie_device(ioc, &pcie_device_pg0);
} }
out: out:
......
...@@ -177,7 +177,8 @@ mpt3sas_init_warpdrive_properties(struct MPT3SAS_ADAPTER *ioc, ...@@ -177,7 +177,8 @@ mpt3sas_init_warpdrive_properties(struct MPT3SAS_ADAPTER *ioc,
if (mpt3sas_config_get_phys_disk_pg0(ioc, &mpi_reply, if (mpt3sas_config_get_phys_disk_pg0(ioc, &mpi_reply,
&pd_pg0, MPI2_PHYSDISK_PGAD_FORM_PHYSDISKNUM, &pd_pg0, MPI2_PHYSDISK_PGAD_FORM_PHYSDISKNUM,
vol_pg0->PhysDisk[count].PhysDiskNum) || vol_pg0->PhysDisk[count].PhysDiskNum) ||
pd_pg0.DevHandle == MPT3SAS_INVALID_DEVICE_HANDLE) { le16_to_cpu(pd_pg0.DevHandle) ==
MPT3SAS_INVALID_DEVICE_HANDLE) {
pr_info(MPT3SAS_FMT "WarpDrive : Direct IO is " pr_info(MPT3SAS_FMT "WarpDrive : Direct IO is "
"disabled for the drive with handle(0x%04x) member" "disabled for the drive with handle(0x%04x) member"
"handle retrieval failed for member number=%d\n", "handle retrieval failed for member number=%d\n",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment