|
@@ -60,8 +60,11 @@
|
|
|
#define DRIVER_NAME "HP HPSA Driver (v " HPSA_DRIVER_VERSION ")"
|
|
|
#define HPSA "hpsa"
|
|
|
|
|
|
-/* How long to wait (in milliseconds) for board to go into simple mode */
|
|
|
-#define MAX_CONFIG_WAIT 30000
|
|
|
+/* How long to wait for CISS doorbell communication */
|
|
|
+#define CLEAR_EVENT_WAIT_INTERVAL 20 /* ms for each msleep() call */
|
|
|
+#define MODE_CHANGE_WAIT_INTERVAL 10 /* ms for each msleep() call */
|
|
|
+#define MAX_CLEAR_EVENT_WAIT 30000 /* times 20 ms = 600 s */
|
|
|
+#define MAX_MODE_CHANGE_WAIT 2000 /* times 10 ms = 20 s */
|
|
|
#define MAX_IOCTL_CONFIG_WAIT 1000
|
|
|
|
|
|
/*define how many times we will try a command because of bus resets */
|
|
@@ -6194,14 +6197,14 @@ static void hpsa_wait_for_clear_event_notify_ack(struct ctlr_info *h)
|
|
|
u32 doorbell_value;
|
|
|
unsigned long flags;
|
|
|
/* wait until the clear_event_notify bit 6 is cleared by controller. */
|
|
|
- for (i = 0; i < MAX_CONFIG_WAIT; i++) {
|
|
|
+ for (i = 0; i < MAX_CLEAR_EVENT_WAIT; i++) {
|
|
|
spin_lock_irqsave(&h->lock, flags);
|
|
|
doorbell_value = readl(h->vaddr + SA5_DOORBELL);
|
|
|
spin_unlock_irqrestore(&h->lock, flags);
|
|
|
if (!(doorbell_value & DOORBELL_CLEAR_EVENTS))
|
|
|
break;
|
|
|
/* delay and try again */
|
|
|
- msleep(20);
|
|
|
+ msleep(CLEAR_EVENT_WAIT_INTERVAL);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -6215,14 +6218,14 @@ static void hpsa_wait_for_mode_change_ack(struct ctlr_info *h)
|
|
|
* (e.g.: hot replace a failed 144GB drive in a RAID 5 set right
|
|
|
* as we enter this code.)
|
|
|
*/
|
|
|
- for (i = 0; i < MAX_CONFIG_WAIT; i++) {
|
|
|
+ for (i = 0; i < MAX_MODE_CHANGE_WAIT; i++) {
|
|
|
spin_lock_irqsave(&h->lock, flags);
|
|
|
doorbell_value = readl(h->vaddr + SA5_DOORBELL);
|
|
|
spin_unlock_irqrestore(&h->lock, flags);
|
|
|
if (!(doorbell_value & CFGTBL_ChangeReq))
|
|
|
break;
|
|
|
/* delay and try again */
|
|
|
- usleep_range(10000, 20000);
|
|
|
+ msleep(MODE_CHANGE_WAIT_INTERVAL);
|
|
|
}
|
|
|
}
|
|
|
|