diff options
Diffstat (limited to 'drivers/scsi/mpt2sas')
| -rw-r--r-- | drivers/scsi/mpt2sas/mpt2sas_base.c | 65 | ||||
| -rw-r--r-- | drivers/scsi/mpt2sas/mpt2sas_base.h | 53 | ||||
| -rw-r--r-- | drivers/scsi/mpt2sas/mpt2sas_ctl.c | 10 | ||||
| -rw-r--r-- | drivers/scsi/mpt2sas/mpt2sas_debug.h | 2 | ||||
| -rw-r--r-- | drivers/scsi/mpt2sas/mpt2sas_scsih.c | 12 | ||||
| -rw-r--r-- | drivers/scsi/mpt2sas/mpt2sas_transport.c | 24 |
6 files changed, 96 insertions, 70 deletions
diff --git a/drivers/scsi/mpt2sas/mpt2sas_base.c b/drivers/scsi/mpt2sas/mpt2sas_base.c index efa0255491c2..1da606cb2461 100644 --- a/drivers/scsi/mpt2sas/mpt2sas_base.c +++ b/drivers/scsi/mpt2sas/mpt2sas_base.c | |||
| @@ -94,7 +94,7 @@ module_param(diag_buffer_enable, int, 0); | |||
| 94 | MODULE_PARM_DESC(diag_buffer_enable, " post diag buffers " | 94 | MODULE_PARM_DESC(diag_buffer_enable, " post diag buffers " |
| 95 | "(TRACE=1/SNAPSHOT=2/EXTENDED=4/default=0)"); | 95 | "(TRACE=1/SNAPSHOT=2/EXTENDED=4/default=0)"); |
| 96 | 96 | ||
| 97 | int mpt2sas_fwfault_debug; | 97 | static int mpt2sas_fwfault_debug; |
| 98 | MODULE_PARM_DESC(mpt2sas_fwfault_debug, " enable detection of firmware fault " | 98 | MODULE_PARM_DESC(mpt2sas_fwfault_debug, " enable detection of firmware fault " |
| 99 | "and halt firmware - (default=0)"); | 99 | "and halt firmware - (default=0)"); |
| 100 | 100 | ||
| @@ -857,7 +857,7 @@ _base_interrupt(int irq, void *bus_id) | |||
| 857 | completed_cmds = 0; | 857 | completed_cmds = 0; |
| 858 | cb_idx = 0xFF; | 858 | cb_idx = 0xFF; |
| 859 | do { | 859 | do { |
| 860 | rd.word = rpf->Words; | 860 | rd.word = le64_to_cpu(rpf->Words); |
| 861 | if (rd.u.low == UINT_MAX || rd.u.high == UINT_MAX) | 861 | if (rd.u.low == UINT_MAX || rd.u.high == UINT_MAX) |
| 862 | goto out; | 862 | goto out; |
| 863 | reply = 0; | 863 | reply = 0; |
| @@ -906,7 +906,7 @@ _base_interrupt(int irq, void *bus_id) | |||
| 906 | 906 | ||
| 907 | next: | 907 | next: |
| 908 | 908 | ||
| 909 | rpf->Words = ULLONG_MAX; | 909 | rpf->Words = cpu_to_le64(ULLONG_MAX); |
| 910 | ioc->reply_post_host_index = (ioc->reply_post_host_index == | 910 | ioc->reply_post_host_index = (ioc->reply_post_host_index == |
| 911 | (ioc->reply_post_queue_depth - 1)) ? 0 : | 911 | (ioc->reply_post_queue_depth - 1)) ? 0 : |
| 912 | ioc->reply_post_host_index + 1; | 912 | ioc->reply_post_host_index + 1; |
| @@ -1817,7 +1817,9 @@ _base_display_ioc_capabilities(struct MPT2SAS_ADAPTER *ioc) | |||
| 1817 | char desc[16]; | 1817 | char desc[16]; |
| 1818 | u8 revision; | 1818 | u8 revision; |
| 1819 | u32 iounit_pg1_flags; | 1819 | u32 iounit_pg1_flags; |
| 1820 | u32 bios_version; | ||
| 1820 | 1821 | ||
| 1822 | bios_version = le32_to_cpu(ioc->bios_pg3.BiosVersion); | ||
| 1821 | pci_read_config_byte(ioc->pdev, PCI_CLASS_REVISION, &revision); | 1823 | pci_read_config_byte(ioc->pdev, PCI_CLASS_REVISION, &revision); |
| 1822 | strncpy(desc, ioc->manu_pg0.ChipName, 16); | 1824 | strncpy(desc, ioc->manu_pg0.ChipName, 16); |
| 1823 | printk(MPT2SAS_INFO_FMT "%s: FWVersion(%02d.%02d.%02d.%02d), " | 1825 | printk(MPT2SAS_INFO_FMT "%s: FWVersion(%02d.%02d.%02d.%02d), " |
| @@ -1828,10 +1830,10 @@ _base_display_ioc_capabilities(struct MPT2SAS_ADAPTER *ioc) | |||
| 1828 | (ioc->facts.FWVersion.Word & 0x0000FF00) >> 8, | 1830 | (ioc->facts.FWVersion.Word & 0x0000FF00) >> 8, |
| 1829 | ioc->facts.FWVersion.Word & 0x000000FF, | 1831 | ioc->facts.FWVersion.Word & 0x000000FF, |
| 1830 | revision, | 1832 | revision, |
| 1831 | (ioc->bios_pg3.BiosVersion & 0xFF000000) >> 24, | 1833 | (bios_version & 0xFF000000) >> 24, |
| 1832 | (ioc->bios_pg3.BiosVersion & 0x00FF0000) >> 16, | 1834 | (bios_version & 0x00FF0000) >> 16, |
| 1833 | (ioc->bios_pg3.BiosVersion & 0x0000FF00) >> 8, | 1835 | (bios_version & 0x0000FF00) >> 8, |
| 1834 | ioc->bios_pg3.BiosVersion & 0x000000FF); | 1836 | bios_version & 0x000000FF); |
| 1835 | 1837 | ||
| 1836 | _base_display_dell_branding(ioc); | 1838 | _base_display_dell_branding(ioc); |
| 1837 | _base_display_intel_branding(ioc); | 1839 | _base_display_intel_branding(ioc); |
| @@ -2150,7 +2152,7 @@ _base_release_memory_pools(struct MPT2SAS_ADAPTER *ioc) | |||
| 2150 | static int | 2152 | static int |
| 2151 | _base_allocate_memory_pools(struct MPT2SAS_ADAPTER *ioc, int sleep_flag) | 2153 | _base_allocate_memory_pools(struct MPT2SAS_ADAPTER *ioc, int sleep_flag) |
| 2152 | { | 2154 | { |
| 2153 | Mpi2IOCFactsReply_t *facts; | 2155 | struct mpt2sas_facts *facts; |
| 2154 | u32 queue_size, queue_diff; | 2156 | u32 queue_size, queue_diff; |
| 2155 | u16 max_sge_elements; | 2157 | u16 max_sge_elements; |
| 2156 | u16 num_of_reply_frames; | 2158 | u16 num_of_reply_frames; |
| @@ -2783,7 +2785,7 @@ _base_handshake_req_reply_wait(struct MPT2SAS_ADAPTER *ioc, int request_bytes, | |||
| 2783 | int i; | 2785 | int i; |
| 2784 | u8 failed; | 2786 | u8 failed; |
| 2785 | u16 dummy; | 2787 | u16 dummy; |
| 2786 | u32 *mfp; | 2788 | __le32 *mfp; |
| 2787 | 2789 | ||
| 2788 | /* make sure doorbell is not in use */ | 2790 | /* make sure doorbell is not in use */ |
| 2789 | if ((readl(&ioc->chip->Doorbell) & MPI2_DOORBELL_USED)) { | 2791 | if ((readl(&ioc->chip->Doorbell) & MPI2_DOORBELL_USED)) { |
| @@ -2871,7 +2873,7 @@ _base_handshake_req_reply_wait(struct MPT2SAS_ADAPTER *ioc, int request_bytes, | |||
| 2871 | writel(0, &ioc->chip->HostInterruptStatus); | 2873 | writel(0, &ioc->chip->HostInterruptStatus); |
| 2872 | 2874 | ||
| 2873 | if (ioc->logging_level & MPT_DEBUG_INIT) { | 2875 | if (ioc->logging_level & MPT_DEBUG_INIT) { |
| 2874 | mfp = (u32 *)reply; | 2876 | mfp = (__le32 *)reply; |
| 2875 | printk(KERN_INFO "\toffset:data\n"); | 2877 | printk(KERN_INFO "\toffset:data\n"); |
| 2876 | for (i = 0; i < reply_bytes/4; i++) | 2878 | for (i = 0; i < reply_bytes/4; i++) |
| 2877 | printk(KERN_INFO "\t[0x%02x]:%08x\n", i*4, | 2879 | printk(KERN_INFO "\t[0x%02x]:%08x\n", i*4, |
| @@ -3097,7 +3099,8 @@ static int | |||
| 3097 | _base_get_port_facts(struct MPT2SAS_ADAPTER *ioc, int port, int sleep_flag) | 3099 | _base_get_port_facts(struct MPT2SAS_ADAPTER *ioc, int port, int sleep_flag) |
| 3098 | { | 3100 | { |
| 3099 | Mpi2PortFactsRequest_t mpi_request; | 3101 | Mpi2PortFactsRequest_t mpi_request; |
| 3100 | Mpi2PortFactsReply_t mpi_reply, *pfacts; | 3102 | Mpi2PortFactsReply_t mpi_reply; |
| 3103 | struct mpt2sas_port_facts *pfacts; | ||
| 3101 | int mpi_reply_sz, mpi_request_sz, r; | 3104 | int mpi_reply_sz, mpi_request_sz, r; |
| 3102 | 3105 | ||
| 3103 | dinitprintk(ioc, printk(MPT2SAS_INFO_FMT "%s\n", ioc->name, | 3106 | dinitprintk(ioc, printk(MPT2SAS_INFO_FMT "%s\n", ioc->name, |
| @@ -3139,7 +3142,8 @@ static int | |||
| 3139 | _base_get_ioc_facts(struct MPT2SAS_ADAPTER *ioc, int sleep_flag) | 3142 | _base_get_ioc_facts(struct MPT2SAS_ADAPTER *ioc, int sleep_flag) |
| 3140 | { | 3143 | { |
| 3141 | Mpi2IOCFactsRequest_t mpi_request; | 3144 | Mpi2IOCFactsRequest_t mpi_request; |
| 3142 | Mpi2IOCFactsReply_t mpi_reply, *facts; | 3145 | Mpi2IOCFactsReply_t mpi_reply; |
| 3146 | struct mpt2sas_facts *facts; | ||
| 3143 | int mpi_reply_sz, mpi_request_sz, r; | 3147 | int mpi_reply_sz, mpi_request_sz, r; |
| 3144 | 3148 | ||
| 3145 | dinitprintk(ioc, printk(MPT2SAS_INFO_FMT "%s\n", ioc->name, | 3149 | dinitprintk(ioc, printk(MPT2SAS_INFO_FMT "%s\n", ioc->name, |
| @@ -3225,17 +3229,6 @@ _base_send_ioc_init(struct MPT2SAS_ADAPTER *ioc, int sleep_flag) | |||
| 3225 | mpi_request.MsgVersion = cpu_to_le16(MPI2_VERSION); | 3229 | mpi_request.MsgVersion = cpu_to_le16(MPI2_VERSION); |
| 3226 | mpi_request.HeaderVersion = cpu_to_le16(MPI2_HEADER_VERSION); | 3230 | mpi_request.HeaderVersion = cpu_to_le16(MPI2_HEADER_VERSION); |
| 3227 | 3231 | ||
| 3228 | /* In MPI Revision I (0xA), the SystemReplyFrameSize(offset 0x18) was | ||
| 3229 | * removed and made reserved. For those with older firmware will need | ||
| 3230 | * this fix. It was decided that the Reply and Request frame sizes are | ||
| 3231 | * the same. | ||
| 3232 | */ | ||
| 3233 | if ((ioc->facts.HeaderVersion >> 8) < 0xA) { | ||
| 3234 | mpi_request.Reserved7 = cpu_to_le16(ioc->reply_sz); | ||
| 3235 | /* mpi_request.SystemReplyFrameSize = | ||
| 3236 | * cpu_to_le16(ioc->reply_sz); | ||
| 3237 | */ | ||
| 3238 | } | ||
| 3239 | 3232 | ||
| 3240 | mpi_request.SystemRequestFrameSize = cpu_to_le16(ioc->request_sz/4); | 3233 | mpi_request.SystemRequestFrameSize = cpu_to_le16(ioc->request_sz/4); |
| 3241 | mpi_request.ReplyDescriptorPostQueueDepth = | 3234 | mpi_request.ReplyDescriptorPostQueueDepth = |
| @@ -3243,25 +3236,17 @@ _base_send_ioc_init(struct MPT2SAS_ADAPTER *ioc, int sleep_flag) | |||
| 3243 | mpi_request.ReplyFreeQueueDepth = | 3236 | mpi_request.ReplyFreeQueueDepth = |
| 3244 | cpu_to_le16(ioc->reply_free_queue_depth); | 3237 | cpu_to_le16(ioc->reply_free_queue_depth); |
| 3245 | 3238 | ||
| 3246 | #if BITS_PER_LONG > 32 | ||
| 3247 | mpi_request.SenseBufferAddressHigh = | 3239 | mpi_request.SenseBufferAddressHigh = |
| 3248 | cpu_to_le32(ioc->sense_dma >> 32); | 3240 | cpu_to_le32((u64)ioc->sense_dma >> 32); |
| 3249 | mpi_request.SystemReplyAddressHigh = | 3241 | mpi_request.SystemReplyAddressHigh = |
| 3250 | cpu_to_le32(ioc->reply_dma >> 32); | 3242 | cpu_to_le32((u64)ioc->reply_dma >> 32); |
| 3251 | mpi_request.SystemRequestFrameBaseAddress = | 3243 | mpi_request.SystemRequestFrameBaseAddress = |
| 3252 | cpu_to_le64(ioc->request_dma); | 3244 | cpu_to_le64((u64)ioc->request_dma); |
| 3253 | mpi_request.ReplyFreeQueueAddress = | 3245 | mpi_request.ReplyFreeQueueAddress = |
| 3254 | cpu_to_le64(ioc->reply_free_dma); | 3246 | cpu_to_le64((u64)ioc->reply_free_dma); |
| 3255 | mpi_request.ReplyDescriptorPostQueueAddress = | 3247 | mpi_request.ReplyDescriptorPostQueueAddress = |
| 3256 | cpu_to_le64(ioc->reply_post_free_dma); | 3248 | cpu_to_le64((u64)ioc->reply_post_free_dma); |
| 3257 | #else | 3249 | |
| 3258 | mpi_request.SystemRequestFrameBaseAddress = | ||
| 3259 | cpu_to_le32(ioc->request_dma); | ||
| 3260 | mpi_request.ReplyFreeQueueAddress = | ||
| 3261 | cpu_to_le32(ioc->reply_free_dma); | ||
| 3262 | mpi_request.ReplyDescriptorPostQueueAddress = | ||
| 3263 | cpu_to_le32(ioc->reply_post_free_dma); | ||
| 3264 | #endif | ||
| 3265 | 3250 | ||
| 3266 | /* This time stamp specifies number of milliseconds | 3251 | /* This time stamp specifies number of milliseconds |
| 3267 | * since epoch ~ midnight January 1, 1970. | 3252 | * since epoch ~ midnight January 1, 1970. |
| @@ -3271,10 +3256,10 @@ _base_send_ioc_init(struct MPT2SAS_ADAPTER *ioc, int sleep_flag) | |||
| 3271 | (current_time.tv_usec / 1000)); | 3256 | (current_time.tv_usec / 1000)); |
| 3272 | 3257 | ||
| 3273 | if (ioc->logging_level & MPT_DEBUG_INIT) { | 3258 | if (ioc->logging_level & MPT_DEBUG_INIT) { |
| 3274 | u32 *mfp; | 3259 | __le32 *mfp; |
| 3275 | int i; | 3260 | int i; |
| 3276 | 3261 | ||
| 3277 | mfp = (u32 *)&mpi_request; | 3262 | mfp = (__le32 *)&mpi_request; |
| 3278 | printk(KERN_INFO "\toffset:data\n"); | 3263 | printk(KERN_INFO "\toffset:data\n"); |
| 3279 | for (i = 0; i < sizeof(Mpi2IOCInitRequest_t)/4; i++) | 3264 | for (i = 0; i < sizeof(Mpi2IOCInitRequest_t)/4; i++) |
| 3280 | printk(KERN_INFO "\t[0x%02x]:%08x\n", i*4, | 3265 | printk(KERN_INFO "\t[0x%02x]:%08x\n", i*4, |
| @@ -3759,7 +3744,7 @@ _base_make_ioc_operational(struct MPT2SAS_ADAPTER *ioc, int sleep_flag) | |||
| 3759 | 3744 | ||
| 3760 | /* initialize Reply Post Free Queue */ | 3745 | /* initialize Reply Post Free Queue */ |
| 3761 | for (i = 0; i < ioc->reply_post_queue_depth; i++) | 3746 | for (i = 0; i < ioc->reply_post_queue_depth; i++) |
| 3762 | ioc->reply_post_free[i].Words = ULLONG_MAX; | 3747 | ioc->reply_post_free[i].Words = cpu_to_le64(ULLONG_MAX); |
| 3763 | 3748 | ||
| 3764 | r = _base_send_ioc_init(ioc, sleep_flag); | 3749 | r = _base_send_ioc_init(ioc, sleep_flag); |
| 3765 | if (r) | 3750 | if (r) |
diff --git a/drivers/scsi/mpt2sas/mpt2sas_base.h b/drivers/scsi/mpt2sas/mpt2sas_base.h index dcc289c25459..451dc1ce2287 100644 --- a/drivers/scsi/mpt2sas/mpt2sas_base.h +++ b/drivers/scsi/mpt2sas/mpt2sas_base.h | |||
| @@ -541,6 +541,53 @@ struct _tr_list { | |||
| 541 | 541 | ||
| 542 | typedef void (*MPT_ADD_SGE)(void *paddr, u32 flags_length, dma_addr_t dma_addr); | 542 | typedef void (*MPT_ADD_SGE)(void *paddr, u32 flags_length, dma_addr_t dma_addr); |
| 543 | 543 | ||
| 544 | /* IOC Facts and Port Facts converted from little endian to cpu */ | ||
| 545 | union mpi2_version_union { | ||
| 546 | MPI2_VERSION_STRUCT Struct; | ||
| 547 | u32 Word; | ||
| 548 | }; | ||
| 549 | |||
| 550 | struct mpt2sas_facts { | ||
| 551 | u16 MsgVersion; | ||
| 552 | u16 HeaderVersion; | ||
| 553 | u8 IOCNumber; | ||
| 554 | u8 VP_ID; | ||
| 555 | u8 VF_ID; | ||
| 556 | u16 IOCExceptions; | ||
| 557 | u16 IOCStatus; | ||
| 558 | u32 IOCLogInfo; | ||
| 559 | u8 MaxChainDepth; | ||
| 560 | u8 WhoInit; | ||
| 561 | u8 NumberOfPorts; | ||
| 562 | u8 MaxMSIxVectors; | ||
| 563 | u16 RequestCredit; | ||
| 564 | u16 ProductID; | ||
| 565 | u32 IOCCapabilities; | ||
| 566 | union mpi2_version_union FWVersion; | ||
| 567 | u16 IOCRequestFrameSize; | ||
| 568 | u16 Reserved3; | ||
| 569 | u16 MaxInitiators; | ||
| 570 | u16 MaxTargets; | ||
| 571 | u16 MaxSasExpanders; | ||
| 572 | u16 MaxEnclosures; | ||
| 573 | u16 ProtocolFlags; | ||
| 574 | u16 HighPriorityCredit; | ||
| 575 | u16 MaxReplyDescriptorPostQueueDepth; | ||
| 576 | u8 ReplyFrameSize; | ||
| 577 | u8 MaxVolumes; | ||
| 578 | u16 MaxDevHandle; | ||
| 579 | u16 MaxPersistentEntries; | ||
| 580 | u16 MinDevHandle; | ||
| 581 | }; | ||
| 582 | |||
| 583 | struct mpt2sas_port_facts { | ||
| 584 | u8 PortNumber; | ||
| 585 | u8 VP_ID; | ||
| 586 | u8 VF_ID; | ||
| 587 | u8 PortType; | ||
| 588 | u16 MaxPostedCmdBuffers; | ||
| 589 | }; | ||
| 590 | |||
| 544 | /** | 591 | /** |
| 545 | * struct MPT2SAS_ADAPTER - per adapter struct | 592 | * struct MPT2SAS_ADAPTER - per adapter struct |
| 546 | * @list: ioc_list | 593 | * @list: ioc_list |
| @@ -749,8 +796,8 @@ struct MPT2SAS_ADAPTER { | |||
| 749 | u32 event_masks[MPI2_EVENT_NOTIFY_EVENTMASK_WORDS]; | 796 | u32 event_masks[MPI2_EVENT_NOTIFY_EVENTMASK_WORDS]; |
| 750 | 797 | ||
| 751 | /* static config pages */ | 798 | /* static config pages */ |
| 752 | Mpi2IOCFactsReply_t facts; | 799 | struct mpt2sas_facts facts; |
| 753 | Mpi2PortFactsReply_t *pfacts; | 800 | struct mpt2sas_port_facts *pfacts; |
| 754 | Mpi2ManufacturingPage0_t manu_pg0; | 801 | Mpi2ManufacturingPage0_t manu_pg0; |
| 755 | Mpi2BiosPage2_t bios_pg2; | 802 | Mpi2BiosPage2_t bios_pg2; |
| 756 | Mpi2BiosPage3_t bios_pg3; | 803 | Mpi2BiosPage3_t bios_pg3; |
| @@ -840,7 +887,7 @@ struct MPT2SAS_ADAPTER { | |||
| 840 | 887 | ||
| 841 | /* reply free queue */ | 888 | /* reply free queue */ |
| 842 | u16 reply_free_queue_depth; | 889 | u16 reply_free_queue_depth; |
| 843 | u32 *reply_free; | 890 | __le32 *reply_free; |
| 844 | dma_addr_t reply_free_dma; | 891 | dma_addr_t reply_free_dma; |
| 845 | struct dma_pool *reply_free_dma_pool; | 892 | struct dma_pool *reply_free_dma_pool; |
| 846 | u32 reply_free_host_index; | 893 | u32 reply_free_host_index; |
diff --git a/drivers/scsi/mpt2sas/mpt2sas_ctl.c b/drivers/scsi/mpt2sas/mpt2sas_ctl.c index 437c2d94c45a..d1c3bba7e936 100644 --- a/drivers/scsi/mpt2sas/mpt2sas_ctl.c +++ b/drivers/scsi/mpt2sas/mpt2sas_ctl.c | |||
| @@ -2706,13 +2706,13 @@ static DEVICE_ATTR(ioc_reset_count, S_IRUGO, | |||
| 2706 | _ctl_ioc_reset_count_show, NULL); | 2706 | _ctl_ioc_reset_count_show, NULL); |
| 2707 | 2707 | ||
| 2708 | struct DIAG_BUFFER_START { | 2708 | struct DIAG_BUFFER_START { |
| 2709 | u32 Size; | 2709 | __le32 Size; |
| 2710 | u32 DiagVersion; | 2710 | __le32 DiagVersion; |
| 2711 | u8 BufferType; | 2711 | u8 BufferType; |
| 2712 | u8 Reserved[3]; | 2712 | u8 Reserved[3]; |
| 2713 | u32 Reserved1; | 2713 | __le32 Reserved1; |
| 2714 | u32 Reserved2; | 2714 | __le32 Reserved2; |
| 2715 | u32 Reserved3; | 2715 | __le32 Reserved3; |
| 2716 | }; | 2716 | }; |
| 2717 | /** | 2717 | /** |
| 2718 | * _ctl_host_trace_buffer_size_show - host buffer size (trace only) | 2718 | * _ctl_host_trace_buffer_size_show - host buffer size (trace only) |
diff --git a/drivers/scsi/mpt2sas/mpt2sas_debug.h b/drivers/scsi/mpt2sas/mpt2sas_debug.h index 3dcddfeb6f4c..9731f8e661bf 100644 --- a/drivers/scsi/mpt2sas/mpt2sas_debug.h +++ b/drivers/scsi/mpt2sas/mpt2sas_debug.h | |||
| @@ -164,7 +164,7 @@ static inline void | |||
| 164 | _debug_dump_mf(void *mpi_request, int sz) | 164 | _debug_dump_mf(void *mpi_request, int sz) |
| 165 | { | 165 | { |
| 166 | int i; | 166 | int i; |
| 167 | u32 *mfp = (u32 *)mpi_request; | 167 | __le32 *mfp = (__le32 *)mpi_request; |
| 168 | 168 | ||
| 169 | printk(KERN_INFO "mf:\n\t"); | 169 | printk(KERN_INFO "mf:\n\t"); |
| 170 | for (i = 0; i < sz; i++) { | 170 | for (i = 0; i < sz; i++) { |
diff --git a/drivers/scsi/mpt2sas/mpt2sas_scsih.c b/drivers/scsi/mpt2sas/mpt2sas_scsih.c index a7dbc6825f5f..e327a3c03608 100644 --- a/drivers/scsi/mpt2sas/mpt2sas_scsih.c +++ b/drivers/scsi/mpt2sas/mpt2sas_scsih.c | |||
| @@ -1956,7 +1956,7 @@ _scsih_slave_configure(struct scsi_device *sdev) | |||
| 1956 | case MPI2_RAID_VOL_TYPE_RAID1E: | 1956 | case MPI2_RAID_VOL_TYPE_RAID1E: |
| 1957 | qdepth = MPT2SAS_RAID_QUEUE_DEPTH; | 1957 | qdepth = MPT2SAS_RAID_QUEUE_DEPTH; |
| 1958 | if (ioc->manu_pg10.OEMIdentifier && | 1958 | if (ioc->manu_pg10.OEMIdentifier && |
| 1959 | (ioc->manu_pg10.GenericFlags0 & | 1959 | (le32_to_cpu(ioc->manu_pg10.GenericFlags0) & |
| 1960 | MFG10_GF0_R10_DISPLAY) && | 1960 | MFG10_GF0_R10_DISPLAY) && |
| 1961 | !(raid_device->num_pds % 2)) | 1961 | !(raid_device->num_pds % 2)) |
| 1962 | r_level = "RAID10"; | 1962 | r_level = "RAID10"; |
| @@ -4598,7 +4598,7 @@ _scsih_expander_add(struct MPT2SAS_ADAPTER *ioc, u16 handle) | |||
| 4598 | Mpi2SasEnclosurePage0_t enclosure_pg0; | 4598 | Mpi2SasEnclosurePage0_t enclosure_pg0; |
| 4599 | u32 ioc_status; | 4599 | u32 ioc_status; |
| 4600 | u16 parent_handle; | 4600 | u16 parent_handle; |
| 4601 | __le64 sas_address, sas_address_parent = 0; | 4601 | u64 sas_address, sas_address_parent = 0; |
| 4602 | int i; | 4602 | int i; |
| 4603 | unsigned long flags; | 4603 | unsigned long flags; |
| 4604 | struct _sas_port *mpt2sas_port = NULL; | 4604 | struct _sas_port *mpt2sas_port = NULL; |
| @@ -5404,7 +5404,7 @@ _scsih_sas_device_status_change_event(struct MPT2SAS_ADAPTER *ioc, | |||
| 5404 | { | 5404 | { |
| 5405 | struct MPT2SAS_TARGET *target_priv_data; | 5405 | struct MPT2SAS_TARGET *target_priv_data; |
| 5406 | struct _sas_device *sas_device; | 5406 | struct _sas_device *sas_device; |
| 5407 | __le64 sas_address; | 5407 | u64 sas_address; |
| 5408 | unsigned long flags; | 5408 | unsigned long flags; |
| 5409 | Mpi2EventDataSasDeviceStatusChange_t *event_data = | 5409 | Mpi2EventDataSasDeviceStatusChange_t *event_data = |
| 5410 | fw_event->event_data; | 5410 | fw_event->event_data; |
| @@ -6566,7 +6566,7 @@ _scsih_search_responding_expanders(struct MPT2SAS_ADAPTER *ioc) | |||
| 6566 | Mpi2ExpanderPage0_t expander_pg0; | 6566 | Mpi2ExpanderPage0_t expander_pg0; |
| 6567 | Mpi2ConfigReply_t mpi_reply; | 6567 | Mpi2ConfigReply_t mpi_reply; |
| 6568 | u16 ioc_status; | 6568 | u16 ioc_status; |
| 6569 | __le64 sas_address; | 6569 | u64 sas_address; |
| 6570 | u16 handle; | 6570 | u16 handle; |
| 6571 | 6571 | ||
| 6572 | printk(MPT2SAS_INFO_FMT "%s\n", ioc->name, __func__); | 6572 | printk(MPT2SAS_INFO_FMT "%s\n", ioc->name, __func__); |
| @@ -7505,7 +7505,7 @@ _scsih_suspend(struct pci_dev *pdev, pm_message_t state) | |||
| 7505 | { | 7505 | { |
| 7506 | struct Scsi_Host *shost = pci_get_drvdata(pdev); | 7506 | struct Scsi_Host *shost = pci_get_drvdata(pdev); |
| 7507 | struct MPT2SAS_ADAPTER *ioc = shost_priv(shost); | 7507 | struct MPT2SAS_ADAPTER *ioc = shost_priv(shost); |
| 7508 | u32 device_state; | 7508 | pci_power_t device_state; |
| 7509 | 7509 | ||
| 7510 | mpt2sas_base_stop_watchdog(ioc); | 7510 | mpt2sas_base_stop_watchdog(ioc); |
| 7511 | scsi_block_requests(shost); | 7511 | scsi_block_requests(shost); |
| @@ -7532,7 +7532,7 @@ _scsih_resume(struct pci_dev *pdev) | |||
| 7532 | { | 7532 | { |
| 7533 | struct Scsi_Host *shost = pci_get_drvdata(pdev); | 7533 | struct Scsi_Host *shost = pci_get_drvdata(pdev); |
| 7534 | struct MPT2SAS_ADAPTER *ioc = shost_priv(shost); | 7534 | struct MPT2SAS_ADAPTER *ioc = shost_priv(shost); |
| 7535 | u32 device_state = pdev->current_state; | 7535 | pci_power_t device_state = pdev->current_state; |
| 7536 | int r; | 7536 | int r; |
| 7537 | 7537 | ||
| 7538 | printk(MPT2SAS_INFO_FMT "pdev=0x%p, slot=%s, previous " | 7538 | printk(MPT2SAS_INFO_FMT "pdev=0x%p, slot=%s, previous " |
diff --git a/drivers/scsi/mpt2sas/mpt2sas_transport.c b/drivers/scsi/mpt2sas/mpt2sas_transport.c index cb1cdecbe0f8..15c798026217 100644 --- a/drivers/scsi/mpt2sas/mpt2sas_transport.c +++ b/drivers/scsi/mpt2sas/mpt2sas_transport.c | |||
| @@ -299,7 +299,6 @@ _transport_expander_report_manufacture(struct MPT2SAS_ADAPTER *ioc, | |||
| 299 | void *data_out = NULL; | 299 | void *data_out = NULL; |
| 300 | dma_addr_t data_out_dma; | 300 | dma_addr_t data_out_dma; |
| 301 | u32 sz; | 301 | u32 sz; |
| 302 | u64 *sas_address_le; | ||
| 303 | u16 wait_state_count; | 302 | u16 wait_state_count; |
| 304 | 303 | ||
| 305 | if (ioc->shost_recovery || ioc->pci_error_recovery) { | 304 | if (ioc->shost_recovery || ioc->pci_error_recovery) { |
| @@ -372,8 +371,7 @@ _transport_expander_report_manufacture(struct MPT2SAS_ADAPTER *ioc, | |||
| 372 | mpi_request->PhysicalPort = 0xFF; | 371 | mpi_request->PhysicalPort = 0xFF; |
| 373 | mpi_request->VF_ID = 0; /* TODO */ | 372 | mpi_request->VF_ID = 0; /* TODO */ |
| 374 | mpi_request->VP_ID = 0; | 373 | mpi_request->VP_ID = 0; |
| 375 | sas_address_le = (u64 *)&mpi_request->SASAddress; | 374 | mpi_request->SASAddress = cpu_to_le64(sas_address); |
| 376 | *sas_address_le = cpu_to_le64(sas_address); | ||
| 377 | mpi_request->RequestDataLength = | 375 | mpi_request->RequestDataLength = |
| 378 | cpu_to_le16(sizeof(struct rep_manu_request)); | 376 | cpu_to_le16(sizeof(struct rep_manu_request)); |
| 379 | psge = &mpi_request->SGL; | 377 | psge = &mpi_request->SGL; |
| @@ -1049,14 +1047,14 @@ struct phy_error_log_reply{ | |||
| 1049 | u8 function; /* 0x11 */ | 1047 | u8 function; /* 0x11 */ |
| 1050 | u8 function_result; | 1048 | u8 function_result; |
| 1051 | u8 response_length; | 1049 | u8 response_length; |
| 1052 | u16 expander_change_count; | 1050 | __be16 expander_change_count; |
| 1053 | u8 reserved_1[3]; | 1051 | u8 reserved_1[3]; |
| 1054 | u8 phy_identifier; | 1052 | u8 phy_identifier; |
| 1055 | u8 reserved_2[2]; | 1053 | u8 reserved_2[2]; |
| 1056 | u32 invalid_dword; | 1054 | __be32 invalid_dword; |
| 1057 | u32 running_disparity_error; | 1055 | __be32 running_disparity_error; |
| 1058 | u32 loss_of_dword_sync; | 1056 | __be32 loss_of_dword_sync; |
| 1059 | u32 phy_reset_problem; | 1057 | __be32 phy_reset_problem; |
| 1060 | }; | 1058 | }; |
| 1061 | 1059 | ||
| 1062 | /** | 1060 | /** |
| @@ -1085,7 +1083,6 @@ _transport_get_expander_phy_error_log(struct MPT2SAS_ADAPTER *ioc, | |||
| 1085 | void *data_out = NULL; | 1083 | void *data_out = NULL; |
| 1086 | dma_addr_t data_out_dma; | 1084 | dma_addr_t data_out_dma; |
| 1087 | u32 sz; | 1085 | u32 sz; |
| 1088 | u64 *sas_address_le; | ||
| 1089 | u16 wait_state_count; | 1086 | u16 wait_state_count; |
| 1090 | 1087 | ||
| 1091 | if (ioc->shost_recovery || ioc->pci_error_recovery) { | 1088 | if (ioc->shost_recovery || ioc->pci_error_recovery) { |
| @@ -1160,8 +1157,7 @@ _transport_get_expander_phy_error_log(struct MPT2SAS_ADAPTER *ioc, | |||
| 1160 | mpi_request->PhysicalPort = 0xFF; | 1157 | mpi_request->PhysicalPort = 0xFF; |
| 1161 | mpi_request->VF_ID = 0; /* TODO */ | 1158 | mpi_request->VF_ID = 0; /* TODO */ |
| 1162 | mpi_request->VP_ID = 0; | 1159 | mpi_request->VP_ID = 0; |
| 1163 | sas_address_le = (u64 *)&mpi_request->SASAddress; | 1160 | mpi_request->SASAddress = cpu_to_le64(phy->identify.sas_address); |
| 1164 | *sas_address_le = cpu_to_le64(phy->identify.sas_address); | ||
| 1165 | mpi_request->RequestDataLength = | 1161 | mpi_request->RequestDataLength = |
| 1166 | cpu_to_le16(sizeof(struct phy_error_log_request)); | 1162 | cpu_to_le16(sizeof(struct phy_error_log_request)); |
| 1167 | psge = &mpi_request->SGL; | 1163 | psge = &mpi_request->SGL; |
| @@ -1406,7 +1402,6 @@ _transport_expander_phy_control(struct MPT2SAS_ADAPTER *ioc, | |||
| 1406 | void *data_out = NULL; | 1402 | void *data_out = NULL; |
| 1407 | dma_addr_t data_out_dma; | 1403 | dma_addr_t data_out_dma; |
| 1408 | u32 sz; | 1404 | u32 sz; |
| 1409 | u64 *sas_address_le; | ||
| 1410 | u16 wait_state_count; | 1405 | u16 wait_state_count; |
| 1411 | 1406 | ||
| 1412 | if (ioc->shost_recovery) { | 1407 | if (ioc->shost_recovery) { |
| @@ -1486,8 +1481,7 @@ _transport_expander_phy_control(struct MPT2SAS_ADAPTER *ioc, | |||
| 1486 | mpi_request->PhysicalPort = 0xFF; | 1481 | mpi_request->PhysicalPort = 0xFF; |
| 1487 | mpi_request->VF_ID = 0; /* TODO */ | 1482 | mpi_request->VF_ID = 0; /* TODO */ |
| 1488 | mpi_request->VP_ID = 0; | 1483 | mpi_request->VP_ID = 0; |
| 1489 | sas_address_le = (u64 *)&mpi_request->SASAddress; | 1484 | mpi_request->SASAddress = cpu_to_le64(phy->identify.sas_address); |
| 1490 | *sas_address_le = cpu_to_le64(phy->identify.sas_address); | ||
| 1491 | mpi_request->RequestDataLength = | 1485 | mpi_request->RequestDataLength = |
| 1492 | cpu_to_le16(sizeof(struct phy_error_log_request)); | 1486 | cpu_to_le16(sizeof(struct phy_error_log_request)); |
| 1493 | psge = &mpi_request->SGL; | 1487 | psge = &mpi_request->SGL; |
| @@ -1914,7 +1908,7 @@ _transport_smp_handler(struct Scsi_Host *shost, struct sas_rphy *rphy, | |||
| 1914 | mpi_request->PhysicalPort = 0xFF; | 1908 | mpi_request->PhysicalPort = 0xFF; |
| 1915 | mpi_request->VF_ID = 0; /* TODO */ | 1909 | mpi_request->VF_ID = 0; /* TODO */ |
| 1916 | mpi_request->VP_ID = 0; | 1910 | mpi_request->VP_ID = 0; |
| 1917 | *((u64 *)&mpi_request->SASAddress) = (rphy) ? | 1911 | mpi_request->SASAddress = (rphy) ? |
| 1918 | cpu_to_le64(rphy->identify.sas_address) : | 1912 | cpu_to_le64(rphy->identify.sas_address) : |
| 1919 | cpu_to_le64(ioc->sas_hba.sas_address); | 1913 | cpu_to_le64(ioc->sas_hba.sas_address); |
| 1920 | mpi_request->RequestDataLength = cpu_to_le16(blk_rq_bytes(req) - 4); | 1914 | mpi_request->RequestDataLength = cpu_to_le16(blk_rq_bytes(req) - 4); |
