aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/mpt2sas
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2012-10-02 22:01:32 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2012-10-02 22:01:32 -0400
commit3151367f8778a1789d6f6e6f6c642681b6cd6d64 (patch)
tree1869d5429a25abd994ae94079808b8db060ec6f3 /drivers/scsi/mpt2sas
parent16642a2e7be23bbda013fc32d8f6c68982eab603 (diff)
parentfe709ed827d370e6b0c0a9f9456da1c22bdcd118 (diff)
Merge tag 'scsi-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi
Pull first round of SCSI updates from James Bottomley: "This is a large set of updates, mostly for drivers (qla2xxx [including support for new 83xx based card], qla4xxx, mpt2sas, bfa, zfcp, hpsa, be2iscsi, isci, lpfc, ipr, ibmvfc, ibmvscsi, megaraid_sas). There's also a rework for tape adding virtually unlimited numbers of tape drives plus a set of dif fixes for sd and a fix for a live lock on hot remove of SCSI devices. This round includes a signed tag pull of isci-for-3.6 Signed-off-by: James Bottomley <JBottomley@Parallels.com>" Fix up trivial conflict in drivers/scsi/qla2xxx/qla_nx.c due to new PCI helper function use in a function that was removed by this pull. * tag 'scsi-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi: (198 commits) [SCSI] st: remove st_mutex [SCSI] sd: Ensure we correctly disable devices with unknown protection type [SCSI] hpsa: gen8plus Smart Array IDs [SCSI] qla4xxx: Update driver version to 5.03.00-k1 [SCSI] qla4xxx: Disable generating pause frames for ISP83XX [SCSI] qla4xxx: Fix double clearing of risc_intr for ISP83XX [SCSI] qla4xxx: IDC implementation for Loopback [SCSI] qla4xxx: update copyrights in LICENSE.qla4xxx [SCSI] qla4xxx: Fix panic while rmmod [SCSI] qla4xxx: Fail probe_adapter if IRQ allocation fails [SCSI] qla4xxx: Prevent MSI/MSI-X falling back to INTx for ISP82XX [SCSI] qla4xxx: Update idc reg in case of PCI AER [SCSI] qla4xxx: Fix double IDC locking in qla4_8xxx_error_recovery [SCSI] qla4xxx: Clear interrupt while unloading driver for ISP83XX [SCSI] qla4xxx: Print correct IDC version [SCSI] qla4xxx: Added new mbox cmd to pass driver version to FW [SCSI] scsi_dh_alua: Enable STPG for unavailable ports [SCSI] scsi_remove_target: fix softlockup regression on hot remove [SCSI] ibmvscsi: Fix host config length field overflow [SCSI] ibmvscsi: Remove backend abstraction ...
Diffstat (limited to 'drivers/scsi/mpt2sas')
-rw-r--r--drivers/scsi/mpt2sas/Kconfig2
-rw-r--r--drivers/scsi/mpt2sas/mpi/mpi2.h14
-rw-r--r--drivers/scsi/mpt2sas/mpi/mpi2_init.h9
-rw-r--r--drivers/scsi/mpt2sas/mpi/mpi2_ioc.h8
-rw-r--r--drivers/scsi/mpt2sas/mpi/mpi2_raid.h7
-rw-r--r--drivers/scsi/mpt2sas/mpt2sas_base.c6
-rw-r--r--drivers/scsi/mpt2sas/mpt2sas_base.h14
-rw-r--r--drivers/scsi/mpt2sas/mpt2sas_config.c38
-rw-r--r--drivers/scsi/mpt2sas/mpt2sas_ctl.c80
-rw-r--r--drivers/scsi/mpt2sas/mpt2sas_ctl.h2
-rw-r--r--drivers/scsi/mpt2sas/mpt2sas_debug.h2
-rw-r--r--drivers/scsi/mpt2sas/mpt2sas_scsih.c59
-rw-r--r--drivers/scsi/mpt2sas/mpt2sas_transport.c2
13 files changed, 195 insertions, 48 deletions
diff --git a/drivers/scsi/mpt2sas/Kconfig b/drivers/scsi/mpt2sas/Kconfig
index bbb7e4bf30a3..39f08dd20556 100644
--- a/drivers/scsi/mpt2sas/Kconfig
+++ b/drivers/scsi/mpt2sas/Kconfig
@@ -2,7 +2,7 @@
2# Kernel configuration file for the MPT2SAS 2# Kernel configuration file for the MPT2SAS
3# 3#
4# This code is based on drivers/scsi/mpt2sas/Kconfig 4# This code is based on drivers/scsi/mpt2sas/Kconfig
5# Copyright (C) 2007-2010 LSI Corporation 5# Copyright (C) 2007-2012 LSI Corporation
6# (mailto:DL-MPTFusionLinux@lsi.com) 6# (mailto:DL-MPTFusionLinux@lsi.com)
7 7
8# This program is free software; you can redistribute it and/or 8# This program is free software; you can redistribute it and/or
diff --git a/drivers/scsi/mpt2sas/mpi/mpi2.h b/drivers/scsi/mpt2sas/mpi/mpi2.h
index a80f3220c641..e960f9625c78 100644
--- a/drivers/scsi/mpt2sas/mpi/mpi2.h
+++ b/drivers/scsi/mpt2sas/mpi/mpi2.h
@@ -1,5 +1,5 @@
1/* 1/*
2 * Copyright (c) 2000-2011 LSI Corporation. 2 * Copyright (c) 2000-2012 LSI Corporation.
3 * 3 *
4 * 4 *
5 * Name: mpi2.h 5 * Name: mpi2.h
@@ -8,7 +8,7 @@
8 * scatter/gather formats. 8 * scatter/gather formats.
9 * Creation Date: June 21, 2006 9 * Creation Date: June 21, 2006
10 * 10 *
11 * mpi2.h Version: 02.00.23 11 * mpi2.h Version: 02.00.25
12 * 12 *
13 * Version History 13 * Version History
14 * --------------- 14 * ---------------
@@ -72,6 +72,9 @@
72 * 05-25-11 02.00.21 Bumped MPI2_HEADER_VERSION_UNIT. 72 * 05-25-11 02.00.21 Bumped MPI2_HEADER_VERSION_UNIT.
73 * 08-24-11 02.00.22 Bumped MPI2_HEADER_VERSION_UNIT. 73 * 08-24-11 02.00.22 Bumped MPI2_HEADER_VERSION_UNIT.
74 * 11-18-11 02.00.23 Bumped MPI2_HEADER_VERSION_UNIT. 74 * 11-18-11 02.00.23 Bumped MPI2_HEADER_VERSION_UNIT.
75 * 02-06-12 02.00.24 Bumped MPI2_HEADER_VERSION_UNIT.
76 * 03-29-12 02.00.25 Bumped MPI2_HEADER_VERSION_UNIT.
77 * Added Hard Reset delay timings.
75 * -------------------------------------------------------------------------- 78 * --------------------------------------------------------------------------
76 */ 79 */
77 80
@@ -97,7 +100,7 @@
97#define MPI2_VERSION_02_00 (0x0200) 100#define MPI2_VERSION_02_00 (0x0200)
98 101
99/* versioning for this MPI header set */ 102/* versioning for this MPI header set */
100#define MPI2_HEADER_VERSION_UNIT (0x17) 103#define MPI2_HEADER_VERSION_UNIT (0x19)
101#define MPI2_HEADER_VERSION_DEV (0x00) 104#define MPI2_HEADER_VERSION_DEV (0x00)
102#define MPI2_HEADER_VERSION_UNIT_MASK (0xFF00) 105#define MPI2_HEADER_VERSION_UNIT_MASK (0xFF00)
103#define MPI2_HEADER_VERSION_UNIT_SHIFT (8) 106#define MPI2_HEADER_VERSION_UNIT_SHIFT (8)
@@ -275,6 +278,11 @@ typedef volatile struct _MPI2_SYSTEM_INTERFACE_REGS
275#define MPI2_REQUEST_DESCRIPTOR_POST_HIGH_OFFSET (0x000000C4) 278#define MPI2_REQUEST_DESCRIPTOR_POST_HIGH_OFFSET (0x000000C4)
276 279
277 280
281/* Hard Reset delay timings */
282#define MPI2_HARD_RESET_PCIE_FIRST_READ_DELAY_MICRO_SEC (50000)
283#define MPI2_HARD_RESET_PCIE_RESET_READ_WINDOW_MICRO_SEC (255000)
284#define MPI2_HARD_RESET_PCIE_SECOND_READ_DELAY_MICRO_SEC (256000)
285
278/***************************************************************************** 286/*****************************************************************************
279* 287*
280* Message Descriptors 288* Message Descriptors
diff --git a/drivers/scsi/mpt2sas/mpi/mpi2_init.h b/drivers/scsi/mpt2sas/mpi/mpi2_init.h
index de90162413c2..38c5da398143 100644
--- a/drivers/scsi/mpt2sas/mpi/mpi2_init.h
+++ b/drivers/scsi/mpt2sas/mpi/mpi2_init.h
@@ -1,12 +1,12 @@
1/* 1/*
2 * Copyright (c) 2000-2010 LSI Corporation. 2 * Copyright (c) 2000-2012 LSI Corporation.
3 * 3 *
4 * 4 *
5 * Name: mpi2_init.h 5 * Name: mpi2_init.h
6 * Title: MPI SCSI initiator mode messages and structures 6 * Title: MPI SCSI initiator mode messages and structures
7 * Creation Date: June 23, 2006 7 * Creation Date: June 23, 2006
8 * 8 *
9 * mpi2_init.h Version: 02.00.11 9 * mpi2_init.h Version: 02.00.13
10 * 10 *
11 * Version History 11 * Version History
12 * --------------- 12 * ---------------
@@ -34,6 +34,8 @@
34 * 02-10-10 02.00.09 Removed unused structure that had "#if 0" around it. 34 * 02-10-10 02.00.09 Removed unused structure that had "#if 0" around it.
35 * 05-12-10 02.00.10 Added optional vendor-unique region to SCSI IO Request. 35 * 05-12-10 02.00.10 Added optional vendor-unique region to SCSI IO Request.
36 * 11-10-10 02.00.11 Added MPI2_SCSIIO_NUM_SGLOFFSETS define. 36 * 11-10-10 02.00.11 Added MPI2_SCSIIO_NUM_SGLOFFSETS define.
37 * 02-06-12 02.00.13 Added alternate defines for Task Priority / Command
38 * Priority to match SAM-4.
37 * -------------------------------------------------------------------------- 39 * --------------------------------------------------------------------------
38 */ 40 */
39 41
@@ -194,6 +196,9 @@ typedef struct _MPI2_SCSI_IO_REQUEST
194 196
195#define MPI2_SCSIIO_CONTROL_TASKPRI_MASK (0x00007800) 197#define MPI2_SCSIIO_CONTROL_TASKPRI_MASK (0x00007800)
196#define MPI2_SCSIIO_CONTROL_TASKPRI_SHIFT (11) 198#define MPI2_SCSIIO_CONTROL_TASKPRI_SHIFT (11)
199/* alternate name for the previous field; called Command Priority in SAM-4 */
200#define MPI2_SCSIIO_CONTROL_CMDPRI_MASK (0x00007800)
201#define MPI2_SCSIIO_CONTROL_CMDPRI_SHIFT (11)
197 202
198#define MPI2_SCSIIO_CONTROL_TASKATTRIBUTE_MASK (0x00000700) 203#define MPI2_SCSIIO_CONTROL_TASKATTRIBUTE_MASK (0x00000700)
199#define MPI2_SCSIIO_CONTROL_SIMPLEQ (0x00000000) 204#define MPI2_SCSIIO_CONTROL_SIMPLEQ (0x00000000)
diff --git a/drivers/scsi/mpt2sas/mpi/mpi2_ioc.h b/drivers/scsi/mpt2sas/mpi/mpi2_ioc.h
index 9a925c07a9ec..b0d4760bb17d 100644
--- a/drivers/scsi/mpt2sas/mpi/mpi2_ioc.h
+++ b/drivers/scsi/mpt2sas/mpi/mpi2_ioc.h
@@ -1,12 +1,12 @@
1/* 1/*
2 * Copyright (c) 2000-2011 LSI Corporation. 2 * Copyright (c) 2000-2012 LSI Corporation.
3 * 3 *
4 * 4 *
5 * Name: mpi2_ioc.h 5 * Name: mpi2_ioc.h
6 * Title: MPI IOC, Port, Event, FW Download, and FW Upload messages 6 * Title: MPI IOC, Port, Event, FW Download, and FW Upload messages
7 * Creation Date: October 11, 2006 7 * Creation Date: October 11, 2006
8 * 8 *
9 * mpi2_ioc.h Version: 02.00.19 9 * mpi2_ioc.h Version: 02.00.21
10 * 10 *
11 * Version History 11 * Version History
12 * --------------- 12 * ---------------
@@ -117,6 +117,7 @@
117 * 08-24-11 02.00.19 Added PhysicalPort field to 117 * 08-24-11 02.00.19 Added PhysicalPort field to
118 * MPI2_EVENT_DATA_SAS_DEVICE_STATUS_CHANGE structure. 118 * MPI2_EVENT_DATA_SAS_DEVICE_STATUS_CHANGE structure.
119 * Marked MPI2_PM_CONTROL_FEATURE_PCIE_LINK as obsolete. 119 * Marked MPI2_PM_CONTROL_FEATURE_PCIE_LINK as obsolete.
120 * 03-29-12 02.00.21 Added a product specific range to event values.
120 * -------------------------------------------------------------------------- 121 * --------------------------------------------------------------------------
121 */ 122 */
122 123
@@ -492,7 +493,8 @@ typedef struct _MPI2_EVENT_NOTIFICATION_REPLY
492#define MPI2_EVENT_SAS_NOTIFY_PRIMITIVE (0x0026) 493#define MPI2_EVENT_SAS_NOTIFY_PRIMITIVE (0x0026)
493#define MPI2_EVENT_TEMP_THRESHOLD (0x0027) 494#define MPI2_EVENT_TEMP_THRESHOLD (0x0027)
494#define MPI2_EVENT_HOST_MESSAGE (0x0028) 495#define MPI2_EVENT_HOST_MESSAGE (0x0028)
495 496#define MPI2_EVENT_MIN_PRODUCT_SPECIFIC (0x006E)
497#define MPI2_EVENT_MAX_PRODUCT_SPECIFIC (0x007F)
496 498
497/* Log Entry Added Event data */ 499/* Log Entry Added Event data */
498 500
diff --git a/drivers/scsi/mpt2sas/mpi/mpi2_raid.h b/drivers/scsi/mpt2sas/mpi/mpi2_raid.h
index 0601612b875a..2b38af213beb 100644
--- a/drivers/scsi/mpt2sas/mpi/mpi2_raid.h
+++ b/drivers/scsi/mpt2sas/mpi/mpi2_raid.h
@@ -1,12 +1,12 @@
1/* 1/*
2 * Copyright (c) 2000-2010 LSI Corporation. 2 * Copyright (c) 2000-2012 LSI Corporation.
3 * 3 *
4 * 4 *
5 * Name: mpi2_raid.h 5 * Name: mpi2_raid.h
6 * Title: MPI Integrated RAID messages and structures 6 * Title: MPI Integrated RAID messages and structures
7 * Creation Date: April 26, 2007 7 * Creation Date: April 26, 2007
8 * 8 *
9 * mpi2_raid.h Version: 02.00.06 9 * mpi2_raid.h Version: 02.00.08
10 * 10 *
11 * Version History 11 * Version History
12 * --------------- 12 * ---------------
@@ -26,7 +26,7 @@
26 * 08-24-10 02.00.06 Added MPI2_RAID_ACTION_COMPATIBILITY_CHECK along with 26 * 08-24-10 02.00.06 Added MPI2_RAID_ACTION_COMPATIBILITY_CHECK along with
27 * related structures and defines. 27 * related structures and defines.
28 * Added product-specific range to RAID Action values. 28 * Added product-specific range to RAID Action values.
29 29 * 02-06-12 02.00.08 Added MPI2_RAID_ACTION_PHYSDISK_HIDDEN.
30 * -------------------------------------------------------------------------- 30 * --------------------------------------------------------------------------
31 */ 31 */
32 32
@@ -181,6 +181,7 @@ typedef struct _MPI2_RAID_ACTION_REQUEST
181#define MPI2_RAID_ACTION_START_RAID_FUNCTION (0x21) 181#define MPI2_RAID_ACTION_START_RAID_FUNCTION (0x21)
182#define MPI2_RAID_ACTION_STOP_RAID_FUNCTION (0x22) 182#define MPI2_RAID_ACTION_STOP_RAID_FUNCTION (0x22)
183#define MPI2_RAID_ACTION_COMPATIBILITY_CHECK (0x23) 183#define MPI2_RAID_ACTION_COMPATIBILITY_CHECK (0x23)
184#define MPI2_RAID_ACTION_PHYSDISK_HIDDEN (0x24)
184#define MPI2_RAID_ACTION_MIN_PRODUCT_SPECIFIC (0x80) 185#define MPI2_RAID_ACTION_MIN_PRODUCT_SPECIFIC (0x80)
185#define MPI2_RAID_ACTION_MAX_PRODUCT_SPECIFIC (0xFF) 186#define MPI2_RAID_ACTION_MAX_PRODUCT_SPECIFIC (0xFF)
186 187
diff --git a/drivers/scsi/mpt2sas/mpt2sas_base.c b/drivers/scsi/mpt2sas/mpt2sas_base.c
index 9d5a56c4b332..ffd85c511c8e 100644
--- a/drivers/scsi/mpt2sas/mpt2sas_base.c
+++ b/drivers/scsi/mpt2sas/mpt2sas_base.c
@@ -3,7 +3,7 @@
3 * for access to MPT (Message Passing Technology) firmware. 3 * for access to MPT (Message Passing Technology) firmware.
4 * 4 *
5 * This code is based on drivers/scsi/mpt2sas/mpt2_base.c 5 * This code is based on drivers/scsi/mpt2sas/mpt2_base.c
6 * Copyright (C) 2007-2010 LSI Corporation 6 * Copyright (C) 2007-2012 LSI Corporation
7 * (mailto:DL-MPTFusionLinux@lsi.com) 7 * (mailto:DL-MPTFusionLinux@lsi.com)
8 * 8 *
9 * This program is free software; you can redistribute it and/or 9 * This program is free software; you can redistribute it and/or
@@ -1978,9 +1978,9 @@ _base_display_intel_branding(struct MPT2SAS_ADAPTER *ioc)
1978 printk(MPT2SAS_INFO_FMT "%s\n", ioc->name, 1978 printk(MPT2SAS_INFO_FMT "%s\n", ioc->name,
1979 MPT2SAS_INTEL_RMS2LL040_BRANDING); 1979 MPT2SAS_INTEL_RMS2LL040_BRANDING);
1980 break; 1980 break;
1981 case MPT2SAS_INTEL_RAMSDALE_SSDID: 1981 case MPT2SAS_INTEL_SSD910_SSDID:
1982 printk(MPT2SAS_INFO_FMT "%s\n", ioc->name, 1982 printk(MPT2SAS_INFO_FMT "%s\n", ioc->name,
1983 MPT2SAS_INTEL_RAMSDALE_BRANDING); 1983 MPT2SAS_INTEL_SSD910_BRANDING);
1984 break; 1984 break;
1985 default: 1985 default:
1986 break; 1986 break;
diff --git a/drivers/scsi/mpt2sas/mpt2sas_base.h b/drivers/scsi/mpt2sas/mpt2sas_base.h
index b3a1a30055d6..543d8d637479 100644
--- a/drivers/scsi/mpt2sas/mpt2sas_base.h
+++ b/drivers/scsi/mpt2sas/mpt2sas_base.h
@@ -3,7 +3,7 @@
3 * for access to MPT (Message Passing Technology) firmware. 3 * for access to MPT (Message Passing Technology) firmware.
4 * 4 *
5 * This code is based on drivers/scsi/mpt2sas/mpt2_base.h 5 * This code is based on drivers/scsi/mpt2sas/mpt2_base.h
6 * Copyright (C) 2007-2010 LSI Corporation 6 * Copyright (C) 2007-2012 LSI Corporation
7 * (mailto:DL-MPTFusionLinux@lsi.com) 7 * (mailto:DL-MPTFusionLinux@lsi.com)
8 * 8 *
9 * This program is free software; you can redistribute it and/or 9 * This program is free software; you can redistribute it and/or
@@ -69,8 +69,8 @@
69#define MPT2SAS_DRIVER_NAME "mpt2sas" 69#define MPT2SAS_DRIVER_NAME "mpt2sas"
70#define MPT2SAS_AUTHOR "LSI Corporation <DL-MPTFusionLinux@lsi.com>" 70#define MPT2SAS_AUTHOR "LSI Corporation <DL-MPTFusionLinux@lsi.com>"
71#define MPT2SAS_DESCRIPTION "LSI MPT Fusion SAS 2.0 Device Driver" 71#define MPT2SAS_DESCRIPTION "LSI MPT Fusion SAS 2.0 Device Driver"
72#define MPT2SAS_DRIVER_VERSION "13.100.00.00" 72#define MPT2SAS_DRIVER_VERSION "14.100.00.00"
73#define MPT2SAS_MAJOR_VERSION 13 73#define MPT2SAS_MAJOR_VERSION 14
74#define MPT2SAS_MINOR_VERSION 100 74#define MPT2SAS_MINOR_VERSION 100
75#define MPT2SAS_BUILD_VERSION 00 75#define MPT2SAS_BUILD_VERSION 00
76#define MPT2SAS_RELEASE_VERSION 00 76#define MPT2SAS_RELEASE_VERSION 00
@@ -171,8 +171,8 @@
171 "Intel Integrated RAID Module RMS2LL040" 171 "Intel Integrated RAID Module RMS2LL040"
172#define MPT2SAS_INTEL_RS25GB008_BRANDING \ 172#define MPT2SAS_INTEL_RS25GB008_BRANDING \
173 "Intel(R) RAID Controller RS25GB008" 173 "Intel(R) RAID Controller RS25GB008"
174#define MPT2SAS_INTEL_RAMSDALE_BRANDING \ 174#define MPT2SAS_INTEL_SSD910_BRANDING \
175 "Intel 720 Series SSD" 175 "Intel(R) SSD 910 Series"
176/* 176/*
177 * Intel HBA SSDIDs 177 * Intel HBA SSDIDs
178 */ 178 */
@@ -183,7 +183,7 @@
183#define MPT2SAS_INTEL_RMS2LL080_SSDID 0x350E 183#define MPT2SAS_INTEL_RMS2LL080_SSDID 0x350E
184#define MPT2SAS_INTEL_RMS2LL040_SSDID 0x350F 184#define MPT2SAS_INTEL_RMS2LL040_SSDID 0x350F
185#define MPT2SAS_INTEL_RS25GB008_SSDID 0x3000 185#define MPT2SAS_INTEL_RS25GB008_SSDID 0x3000
186#define MPT2SAS_INTEL_RAMSDALE_SSDID 0x3700 186#define MPT2SAS_INTEL_SSD910_SSDID 0x3700
187 187
188/* 188/*
189 * HP HBA branding 189 * HP HBA branding
@@ -1096,6 +1096,8 @@ int mpt2sas_config_get_iounit_pg1(struct MPT2SAS_ADAPTER *ioc, Mpi2ConfigReply_t
1096 *mpi_reply, Mpi2IOUnitPage1_t *config_page); 1096 *mpi_reply, Mpi2IOUnitPage1_t *config_page);
1097int mpt2sas_config_set_iounit_pg1(struct MPT2SAS_ADAPTER *ioc, Mpi2ConfigReply_t 1097int mpt2sas_config_set_iounit_pg1(struct MPT2SAS_ADAPTER *ioc, Mpi2ConfigReply_t
1098 *mpi_reply, Mpi2IOUnitPage1_t *config_page); 1098 *mpi_reply, Mpi2IOUnitPage1_t *config_page);
1099int mpt2sas_config_get_iounit_pg3(struct MPT2SAS_ADAPTER *ioc,
1100 Mpi2ConfigReply_t *mpi_reply, Mpi2IOUnitPage3_t *config_page, u16 sz);
1099int mpt2sas_config_get_sas_iounit_pg1(struct MPT2SAS_ADAPTER *ioc, Mpi2ConfigReply_t 1101int mpt2sas_config_get_sas_iounit_pg1(struct MPT2SAS_ADAPTER *ioc, Mpi2ConfigReply_t
1100 *mpi_reply, Mpi2SasIOUnitPage1_t *config_page, u16 sz); 1102 *mpi_reply, Mpi2SasIOUnitPage1_t *config_page, u16 sz);
1101int mpt2sas_config_set_sas_iounit_pg1(struct MPT2SAS_ADAPTER *ioc, 1103int mpt2sas_config_set_sas_iounit_pg1(struct MPT2SAS_ADAPTER *ioc,
diff --git a/drivers/scsi/mpt2sas/mpt2sas_config.c b/drivers/scsi/mpt2sas/mpt2sas_config.c
index 2b4d37613d32..863778071a9d 100644
--- a/drivers/scsi/mpt2sas/mpt2sas_config.c
+++ b/drivers/scsi/mpt2sas/mpt2sas_config.c
@@ -2,7 +2,7 @@
2 * This module provides common API for accessing firmware configuration pages 2 * This module provides common API for accessing firmware configuration pages
3 * 3 *
4 * This code is based on drivers/scsi/mpt2sas/mpt2_base.c 4 * This code is based on drivers/scsi/mpt2sas/mpt2_base.c
5 * Copyright (C) 2007-2010 LSI Corporation 5 * Copyright (C) 2007-2012 LSI Corporation
6 * (mailto:DL-MPTFusionLinux@lsi.com) 6 * (mailto:DL-MPTFusionLinux@lsi.com)
7 * 7 *
8 * This program is free software; you can redistribute it and/or 8 * This program is free software; you can redistribute it and/or
@@ -683,6 +683,42 @@ mpt2sas_config_set_iounit_pg1(struct MPT2SAS_ADAPTER *ioc,
683} 683}
684 684
685/** 685/**
686 * mpt2sas_config_get_iounit_pg3 - obtain iounit page 3
687 * @ioc: per adapter object
688 * @mpi_reply: reply mf payload returned from firmware
689 * @config_page: contents of the config page
690 * @sz: size of buffer passed in config_page
691 * Context: sleep.
692 *
693 * Returns 0 for success, non-zero for failure.
694 */
695int
696mpt2sas_config_get_iounit_pg3(struct MPT2SAS_ADAPTER *ioc,
697 Mpi2ConfigReply_t *mpi_reply, Mpi2IOUnitPage3_t *config_page, u16 sz)
698{
699 Mpi2ConfigRequest_t mpi_request;
700 int r;
701
702 memset(&mpi_request, 0, sizeof(Mpi2ConfigRequest_t));
703 mpi_request.Function = MPI2_FUNCTION_CONFIG;
704 mpi_request.Action = MPI2_CONFIG_ACTION_PAGE_HEADER;
705 mpi_request.Header.PageType = MPI2_CONFIG_PAGETYPE_IO_UNIT;
706 mpi_request.Header.PageNumber = 3;
707 mpi_request.Header.PageVersion = MPI2_IOUNITPAGE3_PAGEVERSION;
708 mpt2sas_base_build_zero_len_sge(ioc, &mpi_request.PageBufferSGE);
709 r = _config_request(ioc, &mpi_request, mpi_reply,
710 MPT2_CONFIG_PAGE_DEFAULT_TIMEOUT, NULL, 0);
711 if (r)
712 goto out;
713
714 mpi_request.Action = MPI2_CONFIG_ACTION_PAGE_READ_CURRENT;
715 r = _config_request(ioc, &mpi_request, mpi_reply,
716 MPT2_CONFIG_PAGE_DEFAULT_TIMEOUT, config_page, sz);
717 out:
718 return r;
719}
720
721/**
686 * mpt2sas_config_get_ioc_pg8 - obtain ioc page 8 722 * mpt2sas_config_get_ioc_pg8 - obtain ioc page 8
687 * @ioc: per adapter object 723 * @ioc: per adapter object
688 * @mpi_reply: reply mf payload returned from firmware 724 * @mpi_reply: reply mf payload returned from firmware
diff --git a/drivers/scsi/mpt2sas/mpt2sas_ctl.c b/drivers/scsi/mpt2sas/mpt2sas_ctl.c
index 49bdd2dc8452..08685c4cf231 100644
--- a/drivers/scsi/mpt2sas/mpt2sas_ctl.c
+++ b/drivers/scsi/mpt2sas/mpt2sas_ctl.c
@@ -3,7 +3,7 @@
3 * controllers 3 * controllers
4 * 4 *
5 * This code is based on drivers/scsi/mpt2sas/mpt2_ctl.c 5 * This code is based on drivers/scsi/mpt2sas/mpt2_ctl.c
6 * Copyright (C) 2007-2010 LSI Corporation 6 * Copyright (C) 2007-2012 LSI Corporation
7 * (mailto:DL-MPTFusionLinux@lsi.com) 7 * (mailto:DL-MPTFusionLinux@lsi.com)
8 * 8 *
9 * This program is free software; you can redistribute it and/or 9 * This program is free software; you can redistribute it and/or
@@ -2181,10 +2181,12 @@ _ctl_ioctl_main(struct file *file, unsigned int cmd, void __user *arg,
2181 return -EAGAIN; 2181 return -EAGAIN;
2182 2182
2183 state = (file->f_flags & O_NONBLOCK) ? NON_BLOCKING : BLOCKING; 2183 state = (file->f_flags & O_NONBLOCK) ? NON_BLOCKING : BLOCKING;
2184 if (state == NON_BLOCKING && !mutex_trylock(&ioc->ctl_cmds.mutex)) 2184 if (state == NON_BLOCKING) {
2185 return -EAGAIN; 2185 if (!mutex_trylock(&ioc->ctl_cmds.mutex))
2186 else if (mutex_lock_interruptible(&ioc->ctl_cmds.mutex)) 2186 return -EAGAIN;
2187 } else if (mutex_lock_interruptible(&ioc->ctl_cmds.mutex)) {
2187 return -ERESTARTSYS; 2188 return -ERESTARTSYS;
2189 }
2188 2190
2189 switch (cmd) { 2191 switch (cmd) {
2190 case MPT2IOCINFO: 2192 case MPT2IOCINFO:
@@ -2690,6 +2692,75 @@ _ctl_ioc_reply_queue_count_show(struct device *cdev,
2690static DEVICE_ATTR(reply_queue_count, S_IRUGO, 2692static DEVICE_ATTR(reply_queue_count, S_IRUGO,
2691 _ctl_ioc_reply_queue_count_show, NULL); 2693 _ctl_ioc_reply_queue_count_show, NULL);
2692 2694
2695/**
2696 * _ctl_BRM_status_show - Backup Rail Monitor Status
2697 * @cdev - pointer to embedded class device
2698 * @buf - the buffer returned
2699 *
2700 * This is number of reply queues
2701 *
2702 * A sysfs 'read-only' shost attribute.
2703 */
2704static ssize_t
2705_ctl_BRM_status_show(struct device *cdev, struct device_attribute *attr,
2706 char *buf)
2707{
2708 struct Scsi_Host *shost = class_to_shost(cdev);
2709 struct MPT2SAS_ADAPTER *ioc = shost_priv(shost);
2710 Mpi2IOUnitPage3_t *io_unit_pg3 = NULL;
2711 Mpi2ConfigReply_t mpi_reply;
2712 u16 backup_rail_monitor_status = 0;
2713 u16 ioc_status;
2714 int sz;
2715 ssize_t rc = 0;
2716
2717 if (!ioc->is_warpdrive) {
2718 printk(MPT2SAS_ERR_FMT "%s: BRM attribute is only for"\
2719 "warpdrive\n", ioc->name, __func__);
2720 goto out;
2721 }
2722
2723 /* allocate upto GPIOVal 36 entries */
2724 sz = offsetof(Mpi2IOUnitPage3_t, GPIOVal) + (sizeof(u16) * 36);
2725 io_unit_pg3 = kzalloc(sz, GFP_KERNEL);
2726 if (!io_unit_pg3) {
2727 printk(MPT2SAS_ERR_FMT "%s: failed allocating memory"\
2728 "for iounit_pg3: (%d) bytes\n", ioc->name, __func__, sz);
2729 goto out;
2730 }
2731
2732 if (mpt2sas_config_get_iounit_pg3(ioc, &mpi_reply, io_unit_pg3, sz) !=
2733 0) {
2734 printk(MPT2SAS_ERR_FMT
2735 "%s: failed reading iounit_pg3\n", ioc->name,
2736 __func__);
2737 goto out;
2738 }
2739
2740 ioc_status = le16_to_cpu(mpi_reply.IOCStatus) & MPI2_IOCSTATUS_MASK;
2741 if (ioc_status != MPI2_IOCSTATUS_SUCCESS) {
2742 printk(MPT2SAS_ERR_FMT "%s: iounit_pg3 failed with"\
2743 "ioc_status(0x%04x)\n", ioc->name, __func__, ioc_status);
2744 goto out;
2745 }
2746
2747 if (io_unit_pg3->GPIOCount < 25) {
2748 printk(MPT2SAS_ERR_FMT "%s: iounit_pg3->GPIOCount less than"\
2749 "25 entries, detected (%d) entries\n", ioc->name, __func__,
2750 io_unit_pg3->GPIOCount);
2751 goto out;
2752 }
2753
2754 /* BRM status is in bit zero of GPIOVal[24] */
2755 backup_rail_monitor_status = le16_to_cpu(io_unit_pg3->GPIOVal[24]);
2756 rc = snprintf(buf, PAGE_SIZE, "%d\n", (backup_rail_monitor_status & 1));
2757
2758 out:
2759 kfree(io_unit_pg3);
2760 return rc;
2761}
2762static DEVICE_ATTR(BRM_status, S_IRUGO, _ctl_BRM_status_show, NULL);
2763
2693struct DIAG_BUFFER_START { 2764struct DIAG_BUFFER_START {
2694 __le32 Size; 2765 __le32 Size;
2695 __le32 DiagVersion; 2766 __le32 DiagVersion;
@@ -2901,6 +2972,7 @@ struct device_attribute *mpt2sas_host_attrs[] = {
2901 &dev_attr_host_trace_buffer, 2972 &dev_attr_host_trace_buffer,
2902 &dev_attr_host_trace_buffer_enable, 2973 &dev_attr_host_trace_buffer_enable,
2903 &dev_attr_reply_queue_count, 2974 &dev_attr_reply_queue_count,
2975 &dev_attr_BRM_status,
2904 NULL, 2976 NULL,
2905}; 2977};
2906 2978
diff --git a/drivers/scsi/mpt2sas/mpt2sas_ctl.h b/drivers/scsi/mpt2sas/mpt2sas_ctl.h
index 11ff1d5fb8f0..b5eb0d1b8ea6 100644
--- a/drivers/scsi/mpt2sas/mpt2sas_ctl.h
+++ b/drivers/scsi/mpt2sas/mpt2sas_ctl.h
@@ -3,7 +3,7 @@
3 * controllers 3 * controllers
4 * 4 *
5 * This code is based on drivers/scsi/mpt2sas/mpt2_ctl.h 5 * This code is based on drivers/scsi/mpt2sas/mpt2_ctl.h
6 * Copyright (C) 2007-2010 LSI Corporation 6 * Copyright (C) 2007-2012 LSI Corporation
7 * (mailto:DL-MPTFusionLinux@lsi.com) 7 * (mailto:DL-MPTFusionLinux@lsi.com)
8 * 8 *
9 * This program is free software; you can redistribute it and/or 9 * This program is free software; you can redistribute it and/or
diff --git a/drivers/scsi/mpt2sas/mpt2sas_debug.h b/drivers/scsi/mpt2sas/mpt2sas_debug.h
index 9731f8e661bf..69cc7d0c112c 100644
--- a/drivers/scsi/mpt2sas/mpt2sas_debug.h
+++ b/drivers/scsi/mpt2sas/mpt2sas_debug.h
@@ -2,7 +2,7 @@
2 * Logging Support for MPT (Message Passing Technology) based controllers 2 * Logging Support for MPT (Message Passing Technology) based controllers
3 * 3 *
4 * This code is based on drivers/scsi/mpt2sas/mpt2_debug.c 4 * This code is based on drivers/scsi/mpt2sas/mpt2_debug.c
5 * Copyright (C) 2007-2010 LSI Corporation 5 * Copyright (C) 2007-2012 LSI Corporation
6 * (mailto:DL-MPTFusionLinux@lsi.com) 6 * (mailto:DL-MPTFusionLinux@lsi.com)
7 * 7 *
8 * This program is free software; you can redistribute it and/or 8 * This program is free software; you can redistribute it and/or
diff --git a/drivers/scsi/mpt2sas/mpt2sas_scsih.c b/drivers/scsi/mpt2sas/mpt2sas_scsih.c
index 1ccae45c5270..af4e6c451b1b 100644
--- a/drivers/scsi/mpt2sas/mpt2sas_scsih.c
+++ b/drivers/scsi/mpt2sas/mpt2sas_scsih.c
@@ -2,7 +2,7 @@
2 * Scsi Host Layer for MPT (Message Passing Technology) based controllers 2 * Scsi Host Layer for MPT (Message Passing Technology) based controllers
3 * 3 *
4 * This code is based on drivers/scsi/mpt2sas/mpt2_scsih.c 4 * This code is based on drivers/scsi/mpt2sas/mpt2_scsih.c
5 * Copyright (C) 2007-2010 LSI Corporation 5 * Copyright (C) 2007-2012 LSI Corporation
6 * (mailto:DL-MPTFusionLinux@lsi.com) 6 * (mailto:DL-MPTFusionLinux@lsi.com)
7 * 7 *
8 * This program is free software; you can redistribute it and/or 8 * This program is free software; you can redistribute it and/or
@@ -119,6 +119,15 @@ module_param(diag_buffer_enable, int, 0);
119MODULE_PARM_DESC(diag_buffer_enable, " post diag buffers " 119MODULE_PARM_DESC(diag_buffer_enable, " post diag buffers "
120 "(TRACE=1/SNAPSHOT=2/EXTENDED=4/default=0)"); 120 "(TRACE=1/SNAPSHOT=2/EXTENDED=4/default=0)");
121 121
122static int disable_discovery = -1;
123module_param(disable_discovery, int, 0);
124MODULE_PARM_DESC(disable_discovery, " disable discovery ");
125
126/* permit overriding the host protection capabilities mask (EEDP/T10 PI) */
127static int prot_mask = 0;
128module_param(prot_mask, int, 0);
129MODULE_PARM_DESC(prot_mask, " host protection capabilities mask, def=7 ");
130
122/** 131/**
123 * struct sense_info - common structure for obtaining sense keys 132 * struct sense_info - common structure for obtaining sense keys
124 * @skey: sense key 133 * @skey: sense key
@@ -3768,8 +3777,6 @@ static void
3768_scsih_eedp_error_handling(struct scsi_cmnd *scmd, u16 ioc_status) 3777_scsih_eedp_error_handling(struct scsi_cmnd *scmd, u16 ioc_status)
3769{ 3778{
3770 u8 ascq; 3779 u8 ascq;
3771 u8 sk;
3772 u8 host_byte;
3773 3780
3774 switch (ioc_status) { 3781 switch (ioc_status) {
3775 case MPI2_IOCSTATUS_EEDP_GUARD_ERROR: 3782 case MPI2_IOCSTATUS_EEDP_GUARD_ERROR:
@@ -3786,16 +3793,8 @@ _scsih_eedp_error_handling(struct scsi_cmnd *scmd, u16 ioc_status)
3786 break; 3793 break;
3787 } 3794 }
3788 3795
3789 if (scmd->sc_data_direction == DMA_TO_DEVICE) { 3796 scsi_build_sense_buffer(0, scmd->sense_buffer, ILLEGAL_REQUEST, 0x10, ascq);
3790 sk = ILLEGAL_REQUEST; 3797 scmd->result = DRIVER_SENSE << 24 | (DID_ABORT << 16) |
3791 host_byte = DID_ABORT;
3792 } else {
3793 sk = ABORTED_COMMAND;
3794 host_byte = DID_OK;
3795 }
3796
3797 scsi_build_sense_buffer(0, scmd->sense_buffer, sk, 0x10, ascq);
3798 scmd->result = DRIVER_SENSE << 24 | (host_byte << 16) |
3799 SAM_STAT_CHECK_CONDITION; 3798 SAM_STAT_CHECK_CONDITION;
3800} 3799}
3801 3800
@@ -5973,8 +5972,14 @@ _scsih_sas_discovery_event(struct MPT2SAS_ADAPTER *ioc,
5973#endif 5972#endif
5974 5973
5975 if (event_data->ReasonCode == MPI2_EVENT_SAS_DISC_RC_STARTED && 5974 if (event_data->ReasonCode == MPI2_EVENT_SAS_DISC_RC_STARTED &&
5976 !ioc->sas_hba.num_phys) 5975 !ioc->sas_hba.num_phys) {
5976 if (disable_discovery > 0 && ioc->shost_recovery) {
5977 /* Wait for the reset to complete */
5978 while (ioc->shost_recovery)
5979 ssleep(1);
5980 }
5977 _scsih_sas_host_add(ioc); 5981 _scsih_sas_host_add(ioc);
5982 }
5978} 5983}
5979 5984
5980/** 5985/**
@@ -7254,7 +7259,8 @@ mpt2sas_scsih_reset_handler(struct MPT2SAS_ADAPTER *ioc, int reset_phase)
7254 _scsih_search_responding_sas_devices(ioc); 7259 _scsih_search_responding_sas_devices(ioc);
7255 _scsih_search_responding_raid_devices(ioc); 7260 _scsih_search_responding_raid_devices(ioc);
7256 _scsih_search_responding_expanders(ioc); 7261 _scsih_search_responding_expanders(ioc);
7257 if (!ioc->is_driver_loading) { 7262 if ((!ioc->is_driver_loading) && !(disable_discovery > 0 &&
7263 !ioc->sas_hba.num_phys)) {
7258 _scsih_prep_device_scan(ioc); 7264 _scsih_prep_device_scan(ioc);
7259 _scsih_search_responding_sas_devices(ioc); 7265 _scsih_search_responding_sas_devices(ioc);
7260 _scsih_search_responding_raid_devices(ioc); 7266 _scsih_search_responding_raid_devices(ioc);
@@ -7929,6 +7935,9 @@ _scsih_scan_start(struct Scsi_Host *shost)
7929 if (diag_buffer_enable != -1 && diag_buffer_enable != 0) 7935 if (diag_buffer_enable != -1 && diag_buffer_enable != 0)
7930 mpt2sas_enable_diag_buffer(ioc, diag_buffer_enable); 7936 mpt2sas_enable_diag_buffer(ioc, diag_buffer_enable);
7931 7937
7938 if (disable_discovery > 0)
7939 return;
7940
7932 ioc->start_scan = 1; 7941 ioc->start_scan = 1;
7933 rc = mpt2sas_port_enable(ioc); 7942 rc = mpt2sas_port_enable(ioc);
7934 7943
@@ -7950,6 +7959,12 @@ _scsih_scan_finished(struct Scsi_Host *shost, unsigned long time)
7950{ 7959{
7951 struct MPT2SAS_ADAPTER *ioc = shost_priv(shost); 7960 struct MPT2SAS_ADAPTER *ioc = shost_priv(shost);
7952 7961
7962 if (disable_discovery > 0) {
7963 ioc->is_driver_loading = 0;
7964 ioc->wait_for_discovery_to_complete = 0;
7965 return 1;
7966 }
7967
7953 if (time >= (300 * HZ)) { 7968 if (time >= (300 * HZ)) {
7954 ioc->base_cmds.status = MPT2_CMD_NOT_USED; 7969 ioc->base_cmds.status = MPT2_CMD_NOT_USED;
7955 printk(MPT2SAS_INFO_FMT "port enable: FAILED with timeout " 7970 printk(MPT2SAS_INFO_FMT "port enable: FAILED with timeout "
@@ -8055,8 +8070,8 @@ _scsih_probe(struct pci_dev *pdev, const struct pci_device_id *id)
8055 if (max_sectors != 0xFFFF) { 8070 if (max_sectors != 0xFFFF) {
8056 if (max_sectors < 64) { 8071 if (max_sectors < 64) {
8057 shost->max_sectors = 64; 8072 shost->max_sectors = 64;
8058 printk(MPT2SAS_WARN_FMT "Invalid value %d passed " 8073 printk(MPT2SAS_WARN_FMT "Invalid value %d passed "\
8059 "for max_sectors, range is 64 to 8192. Assigning " 8074 "for max_sectors, range is 64 to 32767. Assigning "\
8060 "value of 64.\n", ioc->name, max_sectors); 8075 "value of 64.\n", ioc->name, max_sectors);
8061 } else if (max_sectors > 32767) { 8076 } else if (max_sectors > 32767) {
8062 shost->max_sectors = 32767; 8077 shost->max_sectors = 32767;
@@ -8078,8 +8093,14 @@ _scsih_probe(struct pci_dev *pdev, const struct pci_device_id *id)
8078 goto out_add_shost_fail; 8093 goto out_add_shost_fail;
8079 } 8094 }
8080 8095
8081 scsi_host_set_prot(shost, SHOST_DIF_TYPE1_PROTECTION 8096 /* register EEDP capabilities with SCSI layer */
8082 | SHOST_DIF_TYPE2_PROTECTION | SHOST_DIF_TYPE3_PROTECTION); 8097 if (prot_mask)
8098 scsi_host_set_prot(shost, prot_mask);
8099 else
8100 scsi_host_set_prot(shost, SHOST_DIF_TYPE1_PROTECTION
8101 | SHOST_DIF_TYPE2_PROTECTION
8102 | SHOST_DIF_TYPE3_PROTECTION);
8103
8083 scsi_host_set_guard(shost, SHOST_DIX_GUARD_CRC); 8104 scsi_host_set_guard(shost, SHOST_DIX_GUARD_CRC);
8084 8105
8085 /* event thread */ 8106 /* event thread */
diff --git a/drivers/scsi/mpt2sas/mpt2sas_transport.c b/drivers/scsi/mpt2sas/mpt2sas_transport.c
index c6cf20f60720..8c2ffbe6af0f 100644
--- a/drivers/scsi/mpt2sas/mpt2sas_transport.c
+++ b/drivers/scsi/mpt2sas/mpt2sas_transport.c
@@ -2,7 +2,7 @@
2 * SAS Transport Layer for MPT (Message Passing Technology) based controllers 2 * SAS Transport Layer for MPT (Message Passing Technology) based controllers
3 * 3 *
4 * This code is based on drivers/scsi/mpt2sas/mpt2_transport.c 4 * This code is based on drivers/scsi/mpt2sas/mpt2_transport.c
5 * Copyright (C) 2007-2010 LSI Corporation 5 * Copyright (C) 2007-2012 LSI Corporation
6 * (mailto:DL-MPTFusionLinux@lsi.com) 6 * (mailto:DL-MPTFusionLinux@lsi.com)
7 * 7 *
8 * This program is free software; you can redistribute it and/or 8 * This program is free software; you can redistribute it and/or