aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/hpsa_cmd.h
diff options
context:
space:
mode:
authorStephen M. Cameron <scameron@beardog.cce.hp.com>2010-06-16 14:51:40 -0400
committerJames Bottomley <James.Bottomley@suse.de>2010-07-27 13:02:00 -0400
commit1df8552abf36519ca8b9e2a8d1e204bac2076d51 (patch)
tree6bf8e7f5dad9917e07edf126e24a40f101f6a496 /drivers/scsi/hpsa_cmd.h
parent4c2a8c40d877effc25774f00406a4a7df1967102 (diff)
[SCSI] hpsa: Fix hard reset code.
Smart Array controllers newer than the P600 do not honor the PCI power state method of resetting the controllers. Instead, in these cases we can get them to reset via the "doorbell" register. This escaped notice until we began using "performant" mode because the fact that the controllers did not reset did not normally impede subsequent operation, and so things generally appeared to "work". Once the performant mode code was added, if the controller does not reset, it remains in performant mode. The code immediately after the reset presumes the controller is in "simple" mode (which previously, it had remained in simple mode the whole time). If the controller remains in performant mode any code which presumes it is in simple mode will not work. So the reset needs to be fixed. Unfortunately there are some controllers which cannot be reset by either method. (eg. p800). We detect these cases by noticing that the controller seems to remain in performant mode even after a reset has been attempted. In those case, we proceed anyway, as if the reset has happened (and skip the step of waiting for the controller to become ready -- which is expecting it to be in "simple" mode.) To sum up, we try to do a better job of resetting the controller if "reset_devices" is set, and if it doesn't work, we print a message and try to continue anyway. Signed-off-by: Stephen M. Cameron <scameron@beardog.cce.hp.com> Signed-off-by: James Bottomley <James.Bottomley@suse.de>
Diffstat (limited to 'drivers/scsi/hpsa_cmd.h')
-rw-r--r--drivers/scsi/hpsa_cmd.h4
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/scsi/hpsa_cmd.h b/drivers/scsi/hpsa_cmd.h
index 78de9b6d1e0b..f5c4c3cc0530 100644
--- a/drivers/scsi/hpsa_cmd.h
+++ b/drivers/scsi/hpsa_cmd.h
@@ -100,6 +100,7 @@
100/* Configuration Table */ 100/* Configuration Table */
101#define CFGTBL_ChangeReq 0x00000001l 101#define CFGTBL_ChangeReq 0x00000001l
102#define CFGTBL_AccCmds 0x00000001l 102#define CFGTBL_AccCmds 0x00000001l
103#define DOORBELL_CTLR_RESET 0x00000004l
103 104
104#define CFGTBL_Trans_Simple 0x00000002l 105#define CFGTBL_Trans_Simple 0x00000002l
105#define CFGTBL_Trans_Performant 0x00000004l 106#define CFGTBL_Trans_Performant 0x00000004l
@@ -339,6 +340,9 @@ struct CfgTable {
339 u32 MaxPhysicalDevices; 340 u32 MaxPhysicalDevices;
340 u32 MaxPhysicalDrivesPerLogicalUnit; 341 u32 MaxPhysicalDrivesPerLogicalUnit;
341 u32 MaxPerformantModeCommands; 342 u32 MaxPerformantModeCommands;
343 u8 reserved[0x78 - 0x58];
344 u32 misc_fw_support; /* offset 0x78 */
345#define MISC_FW_DOORBELL_RESET (0x02)
342}; 346};
343 347
344#define NUM_BLOCKFETCH_ENTRIES 8 348#define NUM_BLOCKFETCH_ENTRIES 8