* [PATCH 2/4] aacraid: Restart adapter on firmware assert
@ 2006-08-03 15:02 Mark Haverkamp
2006-08-04 15:24 ` Christoph Hellwig
0 siblings, 1 reply; 6+ messages in thread
From: Mark Haverkamp @ 2006-08-03 15:02 UTC (permalink / raw)
To: James Bottomley; +Cc: Mark Salyzyn, linux-scsi
Received from Mark Salyzyn
If the adapter should be in a blinkled (Firmware Assert) state when the
driver loads, we will perform a warm restart of the Adapter Firmware to
see if we can rescue the adapter. Possible causes of a blinkled can
occur on some early release motherboard BIOSes, transitory PCI bus
problems on embedded systems or non-x86 based architectures, transitory
startup failures of early release drives or transitory hardware
failures; some of which can bite the adapter later at runtime. Future
enhancements will include recovery during runtime.
Signed-off-by: Mark Haverkamp <markh@osdl.org>
---
--- scsi-misc-aac.orig/drivers/scsi/aacraid/aacraid.h 2006-07-31 14:33:25.000000000 -0700
+++ scsi-misc-aac/drivers/scsi/aacraid/aacraid.h 2006-07-31 14:33:47.000000000 -0700
@@ -1670,6 +1670,7 @@
#define RCV_TEMP_READINGS 0x00000025
#define GET_COMM_PREFERRED_SETTINGS 0x00000026
#define IOP_RESET 0x00001000
+#define IOP_RESET_ALWAYS 0x00001001
#define RE_INIT_ADAPTER 0x000000ee
/*
--- scsi-misc-aac.orig/drivers/scsi/aacraid/rkt.c 2006-07-31 14:33:25.000000000 -0700
+++ scsi-misc-aac/drivers/scsi/aacraid/rkt.c 2006-07-31 14:33:47.000000000 -0700
@@ -417,6 +417,17 @@
/*
* Check to see if the board panic'd while booting.
*/
+ if (rkt_readl(dev, MUnit.OMRx[0]) & KERNEL_PANIC) {
+ u32 var;
+ printk(KERN_ERR "%s%d: adapter kernel panic'd.\n", dev->name, instance);
+ var = 0;
+ if ((aac_rkt_check_health(dev) <= 0)
+ || rkt_sync_cmd(dev, IOP_RESET, 0, 0, 0, 0, 0, 0,
+ &var, NULL, NULL, NULL, NULL)
+ || (var != 0x00000001)
+ || (rkt_readl(dev, MUnit.OMRx[0]) & KERNEL_PANIC))
+ goto error_iounmap;
+ }
/*
* Check to see if the board failed any self tests.
*/
@@ -431,13 +442,6 @@
printk(KERN_ERR "%s%d: adapter monitor panic.\n", dev->name, instance);
goto error_iounmap;
}
- /*
- * Check to see if the board panic'd while booting.
- */
- if (rkt_readl(dev, MUnit.OMRx[0]) & KERNEL_PANIC) {
- printk(KERN_ERR "%s%d: adapter kernel panic'd.\n", dev->name, instance);
- goto error_iounmap;
- }
start = jiffies;
/*
* Wait for the adapter to be up and running. Wait up to 3 minutes
--- scsi-misc-aac.orig/drivers/scsi/aacraid/rx.c 2006-07-31 14:33:25.000000000 -0700
+++ scsi-misc-aac/drivers/scsi/aacraid/rx.c 2006-07-31 14:33:47.000000000 -0700
@@ -416,6 +416,17 @@
/*
* Check to see if the board panic'd while booting.
*/
+ if (rx_readl(dev, MUnit.OMRx[0]) & KERNEL_PANIC) {
+ u32 var;
+ printk(KERN_ERR "%s%d: adapter kernel panic.\n", dev->name, instance);
+ var = 0;
+ if ((aac_rx_check_health(dev) <= 0)
+ || rx_sync_cmd(dev, IOP_RESET, 0, 0, 0, 0, 0, 0,
+ &var, NULL, NULL, NULL, NULL)
+ || (var != 0x00000001)
+ || (rx_readl(dev, MUnit.OMRx[0]) & KERNEL_PANIC))
+ goto error_iounmap;
+ }
/*
* Check to see if the board failed any self tests.
*/
@@ -424,13 +435,6 @@
goto error_iounmap;
}
/*
- * Check to see if the board panic'd while booting.
- */
- if (rx_readl(dev, MUnit.OMRx[0]) & KERNEL_PANIC) {
- printk(KERN_ERR "%s%d: adapter kernel panic.\n", dev->name, instance);
- goto error_iounmap;
- }
- /*
* Check to see if the monitor panic'd while booting.
*/
if (rx_readl(dev, MUnit.OMRx[0]) & MONITOR_PANIC) {
--
Mark Haverkamp <markh@osdl.org>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 2/4] aacraid: Restart adapter on firmware assert
2006-08-03 15:02 [PATCH 2/4] aacraid: Restart adapter on firmware assert Mark Haverkamp
@ 2006-08-04 15:24 ` Christoph Hellwig
2006-08-04 15:41 ` Mark Haverkamp
2006-08-07 14:34 ` [PATCH 2/4] aacraid: Restart adapter on firmware assert (Update) Mark Haverkamp
0 siblings, 2 replies; 6+ messages in thread
From: Christoph Hellwig @ 2006-08-04 15:24 UTC (permalink / raw)
To: Mark Haverkamp; +Cc: James Bottomley, Mark Salyzyn, linux-scsi
> + if (rkt_readl(dev, MUnit.OMRx[0]) & KERNEL_PANIC) {
> + u32 var;
> + printk(KERN_ERR "%s%d: adapter kernel panic'd.\n", dev->name, instance);
> + var = 0;
> + if ((aac_rkt_check_health(dev) <= 0)
> + || rkt_sync_cmd(dev, IOP_RESET, 0, 0, 0, 0, 0, 0,
> + &var, NULL, NULL, NULL, NULL)
> + || (var != 0x00000001)
> + || (rkt_readl(dev, MUnit.OMRx[0]) & KERNEL_PANIC))
> + goto error_iounmap;
> + }
I know you guys hate me for all that nitpicking, but can we write the
if condition in normal kernel style? Even better untangle it a little
and put it into a helper function:
static int aac_rkt_restart(<args>)
{
u32 var;
printk(KERN_ERR "%s%d: adapter kernel panic'd.\n",
dev->name, instance);
if (aac_rkt_check_health(dev) <= 0)
return 1;
if (rkt_sync_cmd(dev, IOP_RESET, 0, 0, 0, 0, 0, 0,
&var, NULL, NULL, NULL, NULL)
return 1;
if (var != 0x00000001)
return 1;
if (rkt_readl(dev, MUnit.OMRx[0]) & KERNEL_PANIC)
return 1;
return 0;
}
> + if (rx_readl(dev, MUnit.OMRx[0]) & KERNEL_PANIC) {
> + u32 var;
> + printk(KERN_ERR "%s%d: adapter kernel panic.\n", dev->name, instance);
> + var = 0;
> + if ((aac_rx_check_health(dev) <= 0)
> + || rx_sync_cmd(dev, IOP_RESET, 0, 0, 0, 0, 0, 0,
> + &var, NULL, NULL, NULL, NULL)
> + || (var != 0x00000001)
> + || (rx_readl(dev, MUnit.OMRx[0]) & KERNEL_PANIC))
> + goto error_iounmap;
> + }
dito
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 2/4] aacraid: Restart adapter on firmware assert
2006-08-04 15:24 ` Christoph Hellwig
@ 2006-08-04 15:41 ` Mark Haverkamp
2006-08-07 14:34 ` [PATCH 2/4] aacraid: Restart adapter on firmware assert (Update) Mark Haverkamp
1 sibling, 0 replies; 6+ messages in thread
From: Mark Haverkamp @ 2006-08-04 15:41 UTC (permalink / raw)
To: Christoph Hellwig; +Cc: James Bottomley, Mark Salyzyn, linux-scsi
On Fri, 2006-08-04 at 16:24 +0100, Christoph Hellwig wrote:
> > + if (rkt_readl(dev, MUnit.OMRx[0]) & KERNEL_PANIC) {
> > + u32 var;
> > + printk(KERN_ERR "%s%d: adapter kernel panic'd.\n", dev->name, instance);
> > + var = 0;
> > + if ((aac_rkt_check_health(dev) <= 0)
> > + || rkt_sync_cmd(dev, IOP_RESET, 0, 0, 0, 0, 0, 0,
> > + &var, NULL, NULL, NULL, NULL)
> > + || (var != 0x00000001)
> > + || (rkt_readl(dev, MUnit.OMRx[0]) & KERNEL_PANIC))
> > + goto error_iounmap;
> > + }
>
> I know you guys hate me for all that nitpicking, but can we write the
> if condition in normal kernel style? Even better untangle it a little
> and put it into a helper function:
I do check for these things when looking over the patches. I guess I
missed some this time. I'll fix it.
--
Mark Haverkamp <markh@osdl.org>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 2/4] aacraid: Restart adapter on firmware assert (Update)
2006-08-04 15:24 ` Christoph Hellwig
2006-08-04 15:41 ` Mark Haverkamp
@ 2006-08-07 14:34 ` Mark Haverkamp
2006-08-08 15:27 ` Christoph Hellwig
1 sibling, 1 reply; 6+ messages in thread
From: Mark Haverkamp @ 2006-08-07 14:34 UTC (permalink / raw)
To: James Bottomley; +Cc: Christoph Hellwig, Mark Salyzyn, linux-scsi
Received from Mark Salyzyn
If the adapter should be in a blinkled (Firmware Assert) state when the
driver loads, we will perform a warm restart of the Adapter Firmware to
see if we can rescue the adapter. Possible causes of a blinkled can
occur on some early release motherboard BIOSes, transitory PCI bus
problems on embedded systems or non-x86 based architectures, transitory
startup failures of early release drives or transitory hardware
failures; some of which can bite the adapter later at runtime. Future
enhancements will include recovery during runtime.
Signed-off-by: Mark Haverkamp <markh@osdl.org>
---
Updated with changes suggested by Christoph.
--- scsi-misc-aac.orig/drivers/scsi/aacraid/aacraid.h 2006-07-31 14:33:25.000000000 -0700
+++ scsi-misc-aac/drivers/scsi/aacraid/aacraid.h 2006-08-04 08:51:06.000000000 -0700
@@ -1670,6 +1670,7 @@
#define RCV_TEMP_READINGS 0x00000025
#define GET_COMM_PREFERRED_SETTINGS 0x00000026
#define IOP_RESET 0x00001000
+#define IOP_RESET_ALWAYS 0x00001001
#define RE_INIT_ADAPTER 0x000000ee
/*
--- scsi-misc-aac.orig/drivers/scsi/aacraid/rkt.c 2006-07-31 14:33:25.000000000 -0700
+++ scsi-misc-aac/drivers/scsi/aacraid/rkt.c 2006-08-04 09:12:52.000000000 -0700
@@ -395,6 +395,25 @@
return 0;
}
+static int aac_rkt_restart_adapter(struct aac_dev *dev)
+{
+ u32 var;
+
+ printk(KERN_ERR "%s%d: adapter kernel panic'd.\n",
+ dev->name, dev->id);
+
+ if (aac_rkt_check_health(dev) <= 0)
+ return 1;
+ if (rkt_sync_cmd(dev, IOP_RESET, 0, 0, 0, 0, 0, 0,
+ &var, NULL, NULL, NULL, NULL))
+ return 1;
+ if (var != 0x00000001)
+ return 1;
+ if (rkt_readl(dev, MUnit.OMRx[0]) & KERNEL_PANIC)
+ return 1;
+ return 0;
+}
+
/**
* aac_rkt_init - initialize an i960 based AAC card
* @dev: device to configure
@@ -417,6 +436,9 @@
/*
* Check to see if the board panic'd while booting.
*/
+ if (rkt_readl(dev, MUnit.OMRx[0]) & KERNEL_PANIC)
+ if (aac_rkt_restart_adapter(dev))
+ goto error_iounmap;
/*
* Check to see if the board failed any self tests.
*/
@@ -431,13 +453,6 @@
printk(KERN_ERR "%s%d: adapter monitor panic.\n", dev->name, instance);
goto error_iounmap;
}
- /*
- * Check to see if the board panic'd while booting.
- */
- if (rkt_readl(dev, MUnit.OMRx[0]) & KERNEL_PANIC) {
- printk(KERN_ERR "%s%d: adapter kernel panic'd.\n", dev->name, instance);
- goto error_iounmap;
- }
start = jiffies;
/*
* Wait for the adapter to be up and running. Wait up to 3 minutes
--- scsi-misc-aac.orig/drivers/scsi/aacraid/rx.c 2006-07-31 14:33:25.000000000 -0700
+++ scsi-misc-aac/drivers/scsi/aacraid/rx.c 2006-08-04 09:12:46.000000000 -0700
@@ -394,6 +394,25 @@
return 0;
}
+static int aac_rx_restart_adapter(struct aac_dev *dev)
+{
+ u32 var;
+
+ printk(KERN_ERR "%s%d: adapter kernel panic'd.\n",
+ dev->name, dev->id);
+
+ if (aac_rx_check_health(dev) <= 0)
+ return 1;
+ if (rx_sync_cmd(dev, IOP_RESET, 0, 0, 0, 0, 0, 0,
+ &var, NULL, NULL, NULL, NULL))
+ return 1;
+ if (var != 0x00000001)
+ return 1;
+ if (rx_readl(dev, MUnit.OMRx[0]) & KERNEL_PANIC)
+ return 1;
+ return 0;
+}
+
/**
* aac_rx_init - initialize an i960 based AAC card
* @dev: device to configure
@@ -416,6 +435,9 @@
/*
* Check to see if the board panic'd while booting.
*/
+ if (rx_readl(dev, MUnit.OMRx[0]) & KERNEL_PANIC)
+ if (aac_rx_restart_adapter(dev))
+ goto error_iounmap;
/*
* Check to see if the board failed any self tests.
*/
@@ -424,13 +446,6 @@
goto error_iounmap;
}
/*
- * Check to see if the board panic'd while booting.
- */
- if (rx_readl(dev, MUnit.OMRx[0]) & KERNEL_PANIC) {
- printk(KERN_ERR "%s%d: adapter kernel panic.\n", dev->name, instance);
- goto error_iounmap;
- }
- /*
* Check to see if the monitor panic'd while booting.
*/
if (rx_readl(dev, MUnit.OMRx[0]) & MONITOR_PANIC) {
--
Mark Haverkamp <markh@osdl.org>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 2/4] aacraid: Restart adapter on firmware assert (Update)
2006-08-07 14:34 ` [PATCH 2/4] aacraid: Restart adapter on firmware assert (Update) Mark Haverkamp
@ 2006-08-08 15:27 ` Christoph Hellwig
2006-08-08 15:52 ` [PATCH 2/4] aacraid: Restart adapter on firmware assert (Update 2) Mark Haverkamp
0 siblings, 1 reply; 6+ messages in thread
From: Christoph Hellwig @ 2006-08-08 15:27 UTC (permalink / raw)
To: Mark Haverkamp
Cc: James Bottomley, Christoph Hellwig, Mark Salyzyn, linux-scsi
On Mon, Aug 07, 2006 at 07:34:59AM -0700, Mark Haverkamp wrote:
> Received from Mark Salyzyn
>
> If the adapter should be in a blinkled (Firmware Assert) state when the
> driver loads, we will perform a warm restart of the Adapter Firmware to
> see if we can rescue the adapter. Possible causes of a blinkled can
> occur on some early release motherboard BIOSes, transitory PCI bus
> problems on embedded systems or non-x86 based architectures, transitory
> startup failures of early release drives or transitory hardware
> failures; some of which can bite the adapter later at runtime. Future
> enhancements will include recovery during runtime.
Looks good to me. (except for some whitespace-damage..)
>
> Signed-off-by: Mark Haverkamp <markh@osdl.org>
> ---
>
> Updated with changes suggested by Christoph.
>
> --- scsi-misc-aac.orig/drivers/scsi/aacraid/aacraid.h 2006-07-31 14:33:25.000000000 -0700
> +++ scsi-misc-aac/drivers/scsi/aacraid/aacraid.h 2006-08-04 08:51:06.000000000 -0700
> @@ -1670,6 +1670,7 @@
> #define RCV_TEMP_READINGS 0x00000025
> #define GET_COMM_PREFERRED_SETTINGS 0x00000026
> #define IOP_RESET 0x00001000
> +#define IOP_RESET_ALWAYS 0x00001001
> #define RE_INIT_ADAPTER 0x000000ee
>
> /*
> --- scsi-misc-aac.orig/drivers/scsi/aacraid/rkt.c 2006-07-31 14:33:25.000000000 -0700
> +++ scsi-misc-aac/drivers/scsi/aacraid/rkt.c 2006-08-04 09:12:52.000000000 -0700
> @@ -395,6 +395,25 @@
> return 0;
> }
>
> +static int aac_rkt_restart_adapter(struct aac_dev *dev)
> +{
> + u32 var;
> +
> + printk(KERN_ERR "%s%d: adapter kernel panic'd.\n",
> + dev->name, dev->id);
> +
> + if (aac_rkt_check_health(dev) <= 0)
> + return 1;
> + if (rkt_sync_cmd(dev, IOP_RESET, 0, 0, 0, 0, 0, 0,
> + &var, NULL, NULL, NULL, NULL))
> + return 1;
> + if (var != 0x00000001)
> + return 1;
> + if (rkt_readl(dev, MUnit.OMRx[0]) & KERNEL_PANIC)
> + return 1;
> + return 0;
> +}
> +
> /**
> * aac_rkt_init - initialize an i960 based AAC card
> * @dev: device to configure
> @@ -417,6 +436,9 @@
> /*
> * Check to see if the board panic'd while booting.
> */
> + if (rkt_readl(dev, MUnit.OMRx[0]) & KERNEL_PANIC)
> + if (aac_rkt_restart_adapter(dev))
> + goto error_iounmap;
> /*
> * Check to see if the board failed any self tests.
> */
> @@ -431,13 +453,6 @@
> printk(KERN_ERR "%s%d: adapter monitor panic.\n", dev->name, instance);
> goto error_iounmap;
> }
> - /*
> - * Check to see if the board panic'd while booting.
> - */
> - if (rkt_readl(dev, MUnit.OMRx[0]) & KERNEL_PANIC) {
> - printk(KERN_ERR "%s%d: adapter kernel panic'd.\n", dev->name, instance);
> - goto error_iounmap;
> - }
> start = jiffies;
> /*
> * Wait for the adapter to be up and running. Wait up to 3 minutes
> --- scsi-misc-aac.orig/drivers/scsi/aacraid/rx.c 2006-07-31 14:33:25.000000000 -0700
> +++ scsi-misc-aac/drivers/scsi/aacraid/rx.c 2006-08-04 09:12:46.000000000 -0700
> @@ -394,6 +394,25 @@
> return 0;
> }
>
> +static int aac_rx_restart_adapter(struct aac_dev *dev)
> +{
> + u32 var;
> +
> + printk(KERN_ERR "%s%d: adapter kernel panic'd.\n",
> + dev->name, dev->id);
> +
> + if (aac_rx_check_health(dev) <= 0)
> + return 1;
> + if (rx_sync_cmd(dev, IOP_RESET, 0, 0, 0, 0, 0, 0,
> + &var, NULL, NULL, NULL, NULL))
> + return 1;
> + if (var != 0x00000001)
> + return 1;
> + if (rx_readl(dev, MUnit.OMRx[0]) & KERNEL_PANIC)
> + return 1;
> + return 0;
> +}
> +
> /**
> * aac_rx_init - initialize an i960 based AAC card
> * @dev: device to configure
> @@ -416,6 +435,9 @@
> /*
> * Check to see if the board panic'd while booting.
> */
> + if (rx_readl(dev, MUnit.OMRx[0]) & KERNEL_PANIC)
> + if (aac_rx_restart_adapter(dev))
> + goto error_iounmap;
> /*
> * Check to see if the board failed any self tests.
> */
> @@ -424,13 +446,6 @@
> goto error_iounmap;
> }
> /*
> - * Check to see if the board panic'd while booting.
> - */
> - if (rx_readl(dev, MUnit.OMRx[0]) & KERNEL_PANIC) {
> - printk(KERN_ERR "%s%d: adapter kernel panic.\n", dev->name, instance);
> - goto error_iounmap;
> - }
> - /*
> * Check to see if the monitor panic'd while booting.
> */
> if (rx_readl(dev, MUnit.OMRx[0]) & MONITOR_PANIC) {
>
>
>
>
>
> --
> Mark Haverkamp <markh@osdl.org>
>
---end quoted text---
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 2/4] aacraid: Restart adapter on firmware assert (Update 2)
2006-08-08 15:27 ` Christoph Hellwig
@ 2006-08-08 15:52 ` Mark Haverkamp
0 siblings, 0 replies; 6+ messages in thread
From: Mark Haverkamp @ 2006-08-08 15:52 UTC (permalink / raw)
To: Christoph Hellwig, James Bottomley; +Cc: Mark Salyzyn, linux-scsi
Received from Mark Salyzyn
If the adapter should be in a blinkled (Firmware Assert) state when the
driver loads, we will perform a warm restart of the Adapter Firmware to
see if we can rescue the adapter. Possible causes of a blinkled can
occur on some early release motherboard BIOSes, transitory PCI bus
problems on embedded systems or non-x86 based architectures, transitory
startup failures of early release drives or transitory hardware
failures; some of which can bite the adapter later at runtime. Future
enhancements will include recovery during runtime.
Fixed extra whitespace space issue.
Signed-off-by: Mark Haverkamp <markh@osdl.org>
---
--- scsi-misc-aac.orig/drivers/scsi/aacraid/aacraid.h 2006-07-31 14:33:25.000000000 -0700
+++ scsi-misc-aac/drivers/scsi/aacraid/aacraid.h 2006-08-08 08:44:04.000000000 -0700
@@ -1670,6 +1670,7 @@
#define RCV_TEMP_READINGS 0x00000025
#define GET_COMM_PREFERRED_SETTINGS 0x00000026
#define IOP_RESET 0x00001000
+#define IOP_RESET_ALWAYS 0x00001001
#define RE_INIT_ADAPTER 0x000000ee
/*
--- scsi-misc-aac.orig/drivers/scsi/aacraid/rkt.c 2006-07-31 14:33:25.000000000 -0700
+++ scsi-misc-aac/drivers/scsi/aacraid/rkt.c 2006-08-08 08:46:50.000000000 -0700
@@ -395,6 +395,25 @@
return 0;
}
+static int aac_rkt_restart_adapter(struct aac_dev *dev)
+{
+ u32 var;
+
+ printk(KERN_ERR "%s%d: adapter kernel panic'd.\n",
+ dev->name, dev->id);
+
+ if (aac_rkt_check_health(dev) <= 0)
+ return 1;
+ if (rkt_sync_cmd(dev, IOP_RESET, 0, 0, 0, 0, 0, 0,
+ &var, NULL, NULL, NULL, NULL))
+ return 1;
+ if (var != 0x00000001)
+ return 1;
+ if (rkt_readl(dev, MUnit.OMRx[0]) & KERNEL_PANIC)
+ return 1;
+ return 0;
+}
+
/**
* aac_rkt_init - initialize an i960 based AAC card
* @dev: device to configure
@@ -417,6 +436,9 @@
/*
* Check to see if the board panic'd while booting.
*/
+ if (rkt_readl(dev, MUnit.OMRx[0]) & KERNEL_PANIC)
+ if (aac_rkt_restart_adapter(dev))
+ goto error_iounmap;
/*
* Check to see if the board failed any self tests.
*/
@@ -431,13 +453,6 @@
printk(KERN_ERR "%s%d: adapter monitor panic.\n", dev->name, instance);
goto error_iounmap;
}
- /*
- * Check to see if the board panic'd while booting.
- */
- if (rkt_readl(dev, MUnit.OMRx[0]) & KERNEL_PANIC) {
- printk(KERN_ERR "%s%d: adapter kernel panic'd.\n", dev->name, instance);
- goto error_iounmap;
- }
start = jiffies;
/*
* Wait for the adapter to be up and running. Wait up to 3 minutes
--- scsi-misc-aac.orig/drivers/scsi/aacraid/rx.c 2006-07-31 14:33:25.000000000 -0700
+++ scsi-misc-aac/drivers/scsi/aacraid/rx.c 2006-08-08 08:46:16.000000000 -0700
@@ -394,6 +394,25 @@
return 0;
}
+static int aac_rx_restart_adapter(struct aac_dev *dev)
+{
+ u32 var;
+
+ printk(KERN_ERR "%s%d: adapter kernel panic'd.\n",
+ dev->name, dev->id);
+
+ if (aac_rx_check_health(dev) <= 0)
+ return 1;
+ if (rx_sync_cmd(dev, IOP_RESET, 0, 0, 0, 0, 0, 0,
+ &var, NULL, NULL, NULL, NULL))
+ return 1;
+ if (var != 0x00000001)
+ return 1;
+ if (rx_readl(dev, MUnit.OMRx[0]) & KERNEL_PANIC)
+ return 1;
+ return 0;
+}
+
/**
* aac_rx_init - initialize an i960 based AAC card
* @dev: device to configure
@@ -416,6 +435,9 @@
/*
* Check to see if the board panic'd while booting.
*/
+ if (rx_readl(dev, MUnit.OMRx[0]) & KERNEL_PANIC)
+ if (aac_rx_restart_adapter(dev))
+ goto error_iounmap;
/*
* Check to see if the board failed any self tests.
*/
@@ -424,13 +446,6 @@
goto error_iounmap;
}
/*
- * Check to see if the board panic'd while booting.
- */
- if (rx_readl(dev, MUnit.OMRx[0]) & KERNEL_PANIC) {
- printk(KERN_ERR "%s%d: adapter kernel panic.\n", dev->name, instance);
- goto error_iounmap;
- }
- /*
* Check to see if the monitor panic'd while booting.
*/
if (rx_readl(dev, MUnit.OMRx[0]) & MONITOR_PANIC) {
--
Mark Haverkamp <markh@osdl.org>
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2006-08-08 15:52 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-08-03 15:02 [PATCH 2/4] aacraid: Restart adapter on firmware assert Mark Haverkamp
2006-08-04 15:24 ` Christoph Hellwig
2006-08-04 15:41 ` Mark Haverkamp
2006-08-07 14:34 ` [PATCH 2/4] aacraid: Restart adapter on firmware assert (Update) Mark Haverkamp
2006-08-08 15:27 ` Christoph Hellwig
2006-08-08 15:52 ` [PATCH 2/4] aacraid: Restart adapter on firmware assert (Update 2) Mark Haverkamp
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).