* [PATCH 1/1] aacraid: Dual firmware image support
@ 2013-03-18 4:58 Mahesh Rajashekhara
2013-03-18 14:15 ` Tomas Henzl
0 siblings, 1 reply; 3+ messages in thread
From: Mahesh Rajashekhara @ 2013-03-18 4:58 UTC (permalink / raw)
To: JBottomley, linux-scsi
Cc: aacraid, Achim.Leubner, Tony.Ruiz, Mahesh.Rajashekhara
This patch adds dual flash firmware support for Series 7 and above controllers.
Signed-off-by: Mahesh Rajashekhara <Mahesh.Rajashekhara@pmcs.com>
---
drivers/scsi/aacraid/aacraid.h | 6 +++++-
drivers/scsi/aacraid/comminit.c | 2 +-
drivers/scsi/aacraid/src.c | 31 ++++++++++++++++++++++++++++++-
3 files changed, 36 insertions(+), 3 deletions(-)
diff --git a/drivers/scsi/aacraid/aacraid.h b/drivers/scsi/aacraid/aacraid.h
index a6f7190..9323d05 100644
--- a/drivers/scsi/aacraid/aacraid.h
+++ b/drivers/scsi/aacraid/aacraid.h
@@ -12,7 +12,7 @@
*----------------------------------------------------------------------------*/
#ifndef AAC_DRIVER_BUILD
-# define AAC_DRIVER_BUILD 30000
+# define AAC_DRIVER_BUILD 30200
# define AAC_DRIVER_BRANCH "-ms"
#endif
#define MAXIMUM_NUM_CONTAINERS 32
@@ -1918,6 +1918,10 @@ extern struct aac_common aac_config;
#define MONITOR_PANIC 0x00000020
#define KERNEL_UP_AND_RUNNING 0x00000080
#define KERNEL_PANIC 0x00000100
+#define FLASH_UPD_PENDING 0x00002000
+#define FLASH_UPD_SUCCESS 0x00004000
+#define FLASH_UPD_FAILED 0x00008000
+#define FWUPD_TIMEOUT (5 * 60)
/*
* Doorbell bit defines
diff --git a/drivers/scsi/aacraid/comminit.c b/drivers/scsi/aacraid/comminit.c
index 3f75995..177b094 100644
--- a/drivers/scsi/aacraid/comminit.c
+++ b/drivers/scsi/aacraid/comminit.c
@@ -214,7 +214,7 @@ int aac_send_shutdown(struct aac_dev * dev)
cmd = (struct aac_close *) fib_data(fibctx);
cmd->command = cpu_to_le32(VM_CloseAll);
- cmd->cid = cpu_to_le32(0xffffffff);
+ cmd->cid = cpu_to_le32(0xfffffffe);
status = aac_fib_send(ContainerCommand,
fibctx,
diff --git a/drivers/scsi/aacraid/src.c b/drivers/scsi/aacraid/src.c
index e2e3492..b8be2ab 100644
--- a/drivers/scsi/aacraid/src.c
+++ b/drivers/scsi/aacraid/src.c
@@ -685,6 +685,7 @@ int aac_srcv_init(struct aac_dev *dev)
unsigned long status;
int restart = 0;
int instance = dev->id;
+ int waitCount;
const char *name = dev->name;
dev->a_ops.adapter_ioremap = aac_srcv_ioremap;
@@ -703,6 +704,32 @@ int aac_srcv_init(struct aac_dev *dev)
!aac_src_restart_adapter(dev, 0))
++restart;
/*
+ * Check to see if flash update is running.
+ * Wait for the adapter to be up and running. Wait up to 5 minutes
+ */
+ status = src_readl(dev, MUnit.OMR);
+ if (status & FLASH_UPD_PENDING) {
+ start = jiffies;
+ do {
+ status = src_readl(dev, MUnit.OMR);
+ if (time_after(jiffies, start+HZ*FWUPD_TIMEOUT)) {
+ printk(KERN_ERR "%s%d: adapter flash update failed.\n",
+ dev->name, instance);
+ goto error_iounmap;
+ }
+ } while (!(status & FLASH_UPD_SUCCESS) &&
+ !(status & FLASH_UPD_FAILED));
+ /* Delay 10 seconds.
+ * Because right now FW is doing a soft reset,
+ * do not read scratch pad register at this time
+ */
+ waitCount = 10 * 10000;
+ while (waitCount) {
+ udelay(100); /* delay 100 microseconds */
+ waitCount--;
+ }
+ }
+ /*
* Check to see if the board panic'd while booting.
*/
status = src_readl(dev, MUnit.OMR);
@@ -730,7 +757,9 @@ int aac_srcv_init(struct aac_dev *dev)
/*
* Wait for the adapter to be up and running. Wait up to 3 minutes
*/
- while (!((status = src_readl(dev, MUnit.OMR)) & KERNEL_UP_AND_RUNNING)) {
+ while (!((status = src_readl(dev, MUnit.OMR)) &
+ KERNEL_UP_AND_RUNNING) ||
+ status == 0xffffffff) {
if ((restart &&
(status & (KERNEL_PANIC|SELF_TEST_FAILED|MONITOR_PANIC))) ||
time_after(jiffies, start+HZ*startup_timeout)) {
--
1.7.7.6
^ permalink raw reply related [flat|nested] 3+ messages in thread* Re: [PATCH 1/1] aacraid: Dual firmware image support
2013-03-18 4:58 [PATCH 1/1] aacraid: Dual firmware image support Mahesh Rajashekhara
@ 2013-03-18 14:15 ` Tomas Henzl
0 siblings, 0 replies; 3+ messages in thread
From: Tomas Henzl @ 2013-03-18 14:15 UTC (permalink / raw)
To: Mahesh Rajashekhara
Cc: JBottomley, linux-scsi, aacraid, Achim.Leubner, Tony.Ruiz
On 03/18/2013 05:58 AM, Mahesh Rajashekhara wrote:
> This patch adds dual flash firmware support for Series 7 and above controllers.
>
> Signed-off-by: Mahesh Rajashekhara <Mahesh.Rajashekhara@pmcs.com>
> ---
> drivers/scsi/aacraid/aacraid.h | 6 +++++-
> drivers/scsi/aacraid/comminit.c | 2 +-
> drivers/scsi/aacraid/src.c | 31 ++++++++++++++++++++++++++++++-
> 3 files changed, 36 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/scsi/aacraid/aacraid.h b/drivers/scsi/aacraid/aacraid.h
> index a6f7190..9323d05 100644
> --- a/drivers/scsi/aacraid/aacraid.h
> +++ b/drivers/scsi/aacraid/aacraid.h
> @@ -12,7 +12,7 @@
> *----------------------------------------------------------------------------*/
>
> #ifndef AAC_DRIVER_BUILD
> -# define AAC_DRIVER_BUILD 30000
> +# define AAC_DRIVER_BUILD 30200
> # define AAC_DRIVER_BRANCH "-ms"
> #endif
> #define MAXIMUM_NUM_CONTAINERS 32
> @@ -1918,6 +1918,10 @@ extern struct aac_common aac_config;
> #define MONITOR_PANIC 0x00000020
> #define KERNEL_UP_AND_RUNNING 0x00000080
> #define KERNEL_PANIC 0x00000100
> +#define FLASH_UPD_PENDING 0x00002000
> +#define FLASH_UPD_SUCCESS 0x00004000
> +#define FLASH_UPD_FAILED 0x00008000
> +#define FWUPD_TIMEOUT (5 * 60)
>
> /*
> * Doorbell bit defines
> diff --git a/drivers/scsi/aacraid/comminit.c b/drivers/scsi/aacraid/comminit.c
> index 3f75995..177b094 100644
> --- a/drivers/scsi/aacraid/comminit.c
> +++ b/drivers/scsi/aacraid/comminit.c
> @@ -214,7 +214,7 @@ int aac_send_shutdown(struct aac_dev * dev)
> cmd = (struct aac_close *) fib_data(fibctx);
>
> cmd->command = cpu_to_le32(VM_CloseAll);
> - cmd->cid = cpu_to_le32(0xffffffff);
> + cmd->cid = cpu_to_le32(0xfffffffe);
>
> status = aac_fib_send(ContainerCommand,
> fibctx,
> diff --git a/drivers/scsi/aacraid/src.c b/drivers/scsi/aacraid/src.c
> index e2e3492..b8be2ab 100644
> --- a/drivers/scsi/aacraid/src.c
> +++ b/drivers/scsi/aacraid/src.c
> @@ -685,6 +685,7 @@ int aac_srcv_init(struct aac_dev *dev)
> unsigned long status;
> int restart = 0;
> int instance = dev->id;
> + int waitCount;
> const char *name = dev->name;
>
> dev->a_ops.adapter_ioremap = aac_srcv_ioremap;
> @@ -703,6 +704,32 @@ int aac_srcv_init(struct aac_dev *dev)
> !aac_src_restart_adapter(dev, 0))
> ++restart;
> /*
> + * Check to see if flash update is running.
> + * Wait for the adapter to be up and running. Wait up to 5 minutes
> + */
> + status = src_readl(dev, MUnit.OMR);
> + if (status & FLASH_UPD_PENDING) {
> + start = jiffies;
> + do {
> + status = src_readl(dev, MUnit.OMR);
> + if (time_after(jiffies, start+HZ*FWUPD_TIMEOUT)) {
> + printk(KERN_ERR "%s%d: adapter flash update failed.\n",
> + dev->name, instance);
> + goto error_iounmap;
> + }
> + } while (!(status & FLASH_UPD_SUCCESS) &&
> + !(status & FLASH_UPD_FAILED));
> + /* Delay 10 seconds.
> + * Because right now FW is doing a soft reset,
> + * do not read scratch pad register at this time
> + */
> + waitCount = 10 * 10000;
> + while (waitCount) {
> + udelay(100); /* delay 100 microseconds */
> + waitCount--;
Hi Mahesh,
what is the reason for udelay here ?
Maybe a ssleep (10); does the same job.
Regards, Tomas
> + }
> + }
> + /*
> * Check to see if the board panic'd while booting.
> */
> status = src_readl(dev, MUnit.OMR);
> @@ -730,7 +757,9 @@ int aac_srcv_init(struct aac_dev *dev)
> /*
> * Wait for the adapter to be up and running. Wait up to 3 minutes
> */
> - while (!((status = src_readl(dev, MUnit.OMR)) & KERNEL_UP_AND_RUNNING)) {
> + while (!((status = src_readl(dev, MUnit.OMR)) &
> + KERNEL_UP_AND_RUNNING) ||
> + status == 0xffffffff) {
> if ((restart &&
> (status & (KERNEL_PANIC|SELF_TEST_FAILED|MONITOR_PANIC))) ||
> time_after(jiffies, start+HZ*startup_timeout)) {
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH 1/1] aacraid: Dual firmware image support
@ 2013-03-19 7:07 Mahesh Rajashekhara
0 siblings, 0 replies; 3+ messages in thread
From: Mahesh Rajashekhara @ 2013-03-19 7:07 UTC (permalink / raw)
To: thenzl, JBottomley, linux-scsi
Cc: aacraid, Achim.Leubner, Tony.Ruiz, Mahesh.Rajashekhara
Hi Tomas,
Thanks for your review comments.
I have used sslep(10) instead udelay in this patch.
Hi James,
Patch description:
This patch adds dual flash firmware support for Series 7 and above controllers.
Regards,
Mahesh
Signed-off-by: Mahesh Rajashekhara <Mahesh.Rajashekhara@pmcs.com>
---
drivers/scsi/aacraid/aacraid.h | 6 +++++-
drivers/scsi/aacraid/comminit.c | 2 +-
drivers/scsi/aacraid/src.c | 26 +++++++++++++++++++++++++-
3 files changed, 31 insertions(+), 3 deletions(-)
diff --git a/drivers/scsi/aacraid/aacraid.h b/drivers/scsi/aacraid/aacraid.h
index a6f7190..9323d05 100644
--- a/drivers/scsi/aacraid/aacraid.h
+++ b/drivers/scsi/aacraid/aacraid.h
@@ -12,7 +12,7 @@
*----------------------------------------------------------------------------*/
#ifndef AAC_DRIVER_BUILD
-# define AAC_DRIVER_BUILD 30000
+# define AAC_DRIVER_BUILD 30200
# define AAC_DRIVER_BRANCH "-ms"
#endif
#define MAXIMUM_NUM_CONTAINERS 32
@@ -1918,6 +1918,10 @@ extern struct aac_common aac_config;
#define MONITOR_PANIC 0x00000020
#define KERNEL_UP_AND_RUNNING 0x00000080
#define KERNEL_PANIC 0x00000100
+#define FLASH_UPD_PENDING 0x00002000
+#define FLASH_UPD_SUCCESS 0x00004000
+#define FLASH_UPD_FAILED 0x00008000
+#define FWUPD_TIMEOUT (5 * 60)
/*
* Doorbell bit defines
diff --git a/drivers/scsi/aacraid/comminit.c b/drivers/scsi/aacraid/comminit.c
index 3f75995..177b094 100644
--- a/drivers/scsi/aacraid/comminit.c
+++ b/drivers/scsi/aacraid/comminit.c
@@ -214,7 +214,7 @@ int aac_send_shutdown(struct aac_dev * dev)
cmd = (struct aac_close *) fib_data(fibctx);
cmd->command = cpu_to_le32(VM_CloseAll);
- cmd->cid = cpu_to_le32(0xffffffff);
+ cmd->cid = cpu_to_le32(0xfffffffe);
status = aac_fib_send(ContainerCommand,
fibctx,
diff --git a/drivers/scsi/aacraid/src.c b/drivers/scsi/aacraid/src.c
index e2e3492..0f56d8d 100644
--- a/drivers/scsi/aacraid/src.c
+++ b/drivers/scsi/aacraid/src.c
@@ -703,6 +703,28 @@ int aac_srcv_init(struct aac_dev *dev)
!aac_src_restart_adapter(dev, 0))
++restart;
/*
+ * Check to see if flash update is running.
+ * Wait for the adapter to be up and running. Wait up to 5 minutes
+ */
+ status = src_readl(dev, MUnit.OMR);
+ if (status & FLASH_UPD_PENDING) {
+ start = jiffies;
+ do {
+ status = src_readl(dev, MUnit.OMR);
+ if (time_after(jiffies, start+HZ*FWUPD_TIMEOUT)) {
+ printk(KERN_ERR "%s%d: adapter flash update failed.\n",
+ dev->name, instance);
+ goto error_iounmap;
+ }
+ } while (!(status & FLASH_UPD_SUCCESS) &&
+ !(status & FLASH_UPD_FAILED));
+ /* Delay 10 seconds.
+ * Because right now FW is doing a soft reset,
+ * do not read scratch pad register at this time
+ */
+ ssleep(10);
+ }
+ /*
* Check to see if the board panic'd while booting.
*/
status = src_readl(dev, MUnit.OMR);
@@ -730,7 +752,9 @@ int aac_srcv_init(struct aac_dev *dev)
/*
* Wait for the adapter to be up and running. Wait up to 3 minutes
*/
- while (!((status = src_readl(dev, MUnit.OMR)) & KERNEL_UP_AND_RUNNING)) {
+ while (!((status = src_readl(dev, MUnit.OMR)) &
+ KERNEL_UP_AND_RUNNING) ||
+ status == 0xffffffff) {
if ((restart &&
(status & (KERNEL_PANIC|SELF_TEST_FAILED|MONITOR_PANIC))) ||
time_after(jiffies, start+HZ*startup_timeout)) {
--
1.7.7.6
^ permalink raw reply related [flat|nested] 3+ messages in thread
end of thread, other threads:[~2013-03-19 12:49 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-03-18 4:58 [PATCH 1/1] aacraid: Dual firmware image support Mahesh Rajashekhara
2013-03-18 14:15 ` Tomas Henzl
-- strict thread matches above, loose matches on Subject: below --
2013-03-19 7:07 Mahesh Rajashekhara
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.