aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/mpt2sas/mpt2sas_transport.c
diff options
context:
space:
mode:
authorKashyap, Desai <kashyap.desai@lsi.com>2009-10-05 06:23:06 -0400
committerJames Bottomley <James.Bottomley@suse.de>2009-10-29 13:03:15 -0400
commit463217bfecbf5d17a30133a55553d94aa9fc255e (patch)
tree1e385db37b46584968c67be20396c5b905b12180 /drivers/scsi/mpt2sas/mpt2sas_transport.c
parentec9472c74c3074541ea8389517f406b5c7ad0632 (diff)
[SCSI] mpt2sas : PPC (power pc) endian bug fix's
(1) EEDP(End to End data protection) was not working. This was due to not setting EEDP BlockSize and Flags to little endian format in the message frame. (2) Some expander sysfs attributes were not getting set properly. The sas format was not getting set due to endian issues with sas_format field in the struct rep_manu_reply. Since sas_format was not set properly, the component_vendor_id, component_revision_id, and component_id were not set. (3) In _transport_smp_handler: we don't need to convert the smid from little endian to cpu prior to calling mpt2sas_base_free_smid, because its allready in cpu format. (4) Some loginfos and ioc status were not xonverted from little endian to cpu. Signed-off-by: Kashyap Desai <kashyap.desai@lsi.com> Signed-off-by: Eric Moore <Eric.moore@lsi.com> Signed-off-by: James Bottomley <James.Bottomley@suse.de>
Diffstat (limited to 'drivers/scsi/mpt2sas/mpt2sas_transport.c')
-rw-r--r--drivers/scsi/mpt2sas/mpt2sas_transport.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/drivers/scsi/mpt2sas/mpt2sas_transport.c b/drivers/scsi/mpt2sas/mpt2sas_transport.c
index 8030bc2774c8..3a82872bad44 100644
--- a/drivers/scsi/mpt2sas/mpt2sas_transport.c
+++ b/drivers/scsi/mpt2sas/mpt2sas_transport.c
@@ -258,8 +258,7 @@ struct rep_manu_reply{
258 u8 response_length; 258 u8 response_length;
259 u16 expander_change_count; 259 u16 expander_change_count;
260 u8 reserved0[2]; 260 u8 reserved0[2];
261 u8 sas_format:1; 261 u8 sas_format;
262 u8 reserved1:7;
263 u8 reserved2[3]; 262 u8 reserved2[3];
264 u8 vendor_id[SAS_EXPANDER_VENDOR_ID_LEN]; 263 u8 vendor_id[SAS_EXPANDER_VENDOR_ID_LEN];
265 u8 product_id[SAS_EXPANDER_PRODUCT_ID_LEN]; 264 u8 product_id[SAS_EXPANDER_PRODUCT_ID_LEN];
@@ -374,7 +373,8 @@ _transport_expander_report_manufacture(struct MPT2SAS_ADAPTER *ioc,
374 mpi_request->VP_ID = 0; 373 mpi_request->VP_ID = 0;
375 sas_address_le = (u64 *)&mpi_request->SASAddress; 374 sas_address_le = (u64 *)&mpi_request->SASAddress;
376 *sas_address_le = cpu_to_le64(sas_address); 375 *sas_address_le = cpu_to_le64(sas_address);
377 mpi_request->RequestDataLength = sizeof(struct rep_manu_request); 376 mpi_request->RequestDataLength =
377 cpu_to_le16(sizeof(struct rep_manu_request));
378 psge = &mpi_request->SGL; 378 psge = &mpi_request->SGL;
379 379
380 /* WRITE sgel first */ 380 /* WRITE sgel first */
@@ -437,8 +437,8 @@ _transport_expander_report_manufacture(struct MPT2SAS_ADAPTER *ioc,
437 SAS_EXPANDER_PRODUCT_ID_LEN); 437 SAS_EXPANDER_PRODUCT_ID_LEN);
438 strncpy(edev->product_rev, manufacture_reply->product_rev, 438 strncpy(edev->product_rev, manufacture_reply->product_rev,
439 SAS_EXPANDER_PRODUCT_REV_LEN); 439 SAS_EXPANDER_PRODUCT_REV_LEN);
440 edev->level = manufacture_reply->sas_format; 440 edev->level = manufacture_reply->sas_format & 1;
441 if (manufacture_reply->sas_format) { 441 if (edev->level) {
442 strncpy(edev->component_vendor_id, 442 strncpy(edev->component_vendor_id,
443 manufacture_reply->component_vendor_id, 443 manufacture_reply->component_vendor_id,
444 SAS_EXPANDER_COMPONENT_VENDOR_ID_LEN); 444 SAS_EXPANDER_COMPONENT_VENDOR_ID_LEN);
@@ -1116,7 +1116,7 @@ _transport_smp_handler(struct Scsi_Host *shost, struct sas_rphy *rphy,
1116 dma_addr_out = pci_map_single(ioc->pdev, bio_data(req->bio), 1116 dma_addr_out = pci_map_single(ioc->pdev, bio_data(req->bio),
1117 blk_rq_bytes(req), PCI_DMA_BIDIRECTIONAL); 1117 blk_rq_bytes(req), PCI_DMA_BIDIRECTIONAL);
1118 if (!dma_addr_out) { 1118 if (!dma_addr_out) {
1119 mpt2sas_base_free_smid(ioc, le16_to_cpu(smid)); 1119 mpt2sas_base_free_smid(ioc, smid);
1120 goto unmap; 1120 goto unmap;
1121 } 1121 }
1122 1122
@@ -1134,7 +1134,7 @@ _transport_smp_handler(struct Scsi_Host *shost, struct sas_rphy *rphy,
1134 dma_addr_in = pci_map_single(ioc->pdev, bio_data(rsp->bio), 1134 dma_addr_in = pci_map_single(ioc->pdev, bio_data(rsp->bio),
1135 blk_rq_bytes(rsp), PCI_DMA_BIDIRECTIONAL); 1135 blk_rq_bytes(rsp), PCI_DMA_BIDIRECTIONAL);
1136 if (!dma_addr_in) { 1136 if (!dma_addr_in) {
1137 mpt2sas_base_free_smid(ioc, le16_to_cpu(smid)); 1137 mpt2sas_base_free_smid(ioc, smid);
1138 goto unmap; 1138 goto unmap;
1139 } 1139 }
1140 1140