From: "Stephen M. Cameron" <scameron@beardog.cce.hp.com>
To: axboe@kernel.dk
Cc: mikem@beardog.cce.hp.com, akpm@linux-foundation.org,
thenzl@redhat.com, linux-kernel@vger.kernel.org,
smcameron@yahoo.com
Subject: [PATCH 11/16] cciss: use new doorbell-bit-5 reset method
Date: Tue, 03 May 2011 14:53:46 -0500 [thread overview]
Message-ID: <20110503195346.5154.2503.stgit@beardog.cce.hp.com> (raw)
In-Reply-To: <20110503194919.5154.78352.stgit@beardog.cce.hp.com>
From: Stephen M. Cameron <scameron@beardog.cce.hp.com>
The bit-2-doorbell reset method seemed to cause (survivable) NMIs
on some systems and (unsurvivable) IOCK NMIs on some G7 servers.
Firmware guys implemented a new doorbell method to alleviate these
problems triggered by bit 5 of the doorbell register. We want to
use it if it's available.
Signed-off-by: Stephen M. Cameron <scameron@beardog.cce.hp.com>
---
drivers/block/cciss.c | 25 ++++++++++++++-----------
drivers/block/cciss_cmd.h | 2 ++
2 files changed, 16 insertions(+), 11 deletions(-)
diff --git a/drivers/block/cciss.c b/drivers/block/cciss.c
index b9f8658..df58c59 100644
--- a/drivers/block/cciss.c
+++ b/drivers/block/cciss.c
@@ -4384,7 +4384,7 @@ static __devinit int cciss_message(struct pci_dev *pdev, unsigned char opcode, u
#define cciss_noop(p) cciss_message(p, 3, 0)
static int cciss_controller_hard_reset(struct pci_dev *pdev,
- void * __iomem vaddr, bool use_doorbell)
+ void * __iomem vaddr, u32 use_doorbell)
{
u16 pmcsr;
int pos;
@@ -4395,7 +4395,7 @@ static int cciss_controller_hard_reset(struct pci_dev *pdev,
* other way using the doorbell register.
*/
dev_info(&pdev->dev, "using doorbell to reset controller\n");
- writel(DOORBELL_CTLR_RESET, vaddr + SA5_DOORBELL);
+ writel(use_doorbell, vaddr + SA5_DOORBELL);
msleep(1000);
} else { /* Try to do it the PCI power state way */
@@ -4499,7 +4499,7 @@ static __devinit int cciss_kdump_hard_reset_controller(struct pci_dev *pdev)
u32 misc_fw_support;
int rc;
CfgTable_struct __iomem *cfgtable;
- bool use_doorbell;
+ u32 use_doorbell;
u32 board_id;
u16 command_register;
@@ -4560,15 +4560,18 @@ static __devinit int cciss_kdump_hard_reset_controller(struct pci_dev *pdev)
if (rc)
goto unmap_vaddr;
- /* If reset via doorbell register is supported, use that. */
- misc_fw_support = readl(&cfgtable->misc_fw_support);
- use_doorbell = misc_fw_support & MISC_FW_DOORBELL_RESET;
-
- /* The doorbell reset seems to cause lockups on some Smart
- * Arrays (e.g. P410, P410i, maybe others). Until this is
- * fixed or at least isolated, avoid the doorbell reset.
+ /* If reset via doorbell register is supported, use that.
+ * There are two such methods. Favor the newest method.
*/
- use_doorbell = 0;
+ misc_fw_support = readl(&cfgtable->misc_fw_support);
+ use_doorbell = misc_fw_support & MISC_FW_DOORBELL_RESET2;
+ if (use_doorbell) {
+ use_doorbell = DOORBELL_CTLR_RESET2;
+ } else {
+ use_doorbell = misc_fw_support & MISC_FW_DOORBELL_RESET;
+ if (use_doorbell)
+ use_doorbell = DOORBELL_CTLR_RESET;
+ }
rc = cciss_controller_hard_reset(pdev, vaddr, use_doorbell);
if (rc)
diff --git a/drivers/block/cciss_cmd.h b/drivers/block/cciss_cmd.h
index 3b20c31..d9be6b4 100644
--- a/drivers/block/cciss_cmd.h
+++ b/drivers/block/cciss_cmd.h
@@ -53,6 +53,7 @@
#define CFGTBL_ChangeReq 0x00000001l
#define CFGTBL_AccCmds 0x00000001l
#define DOORBELL_CTLR_RESET 0x00000004l
+#define DOORBELL_CTLR_RESET2 0x00000020l
#define CFGTBL_Trans_Simple 0x00000002l
#define CFGTBL_Trans_Performant 0x00000004l
@@ -243,6 +244,7 @@ typedef struct _CfgTable_struct {
u8 reserved[0x78 - 0x58];
u32 misc_fw_support; /* offset 0x78 */
#define MISC_FW_DOORBELL_RESET (0x02)
+#define MISC_FW_DOORBELL_RESET2 (0x10)
u8 driver_version[32];
} CfgTable_struct;
next prev parent reply other threads:[~2011-05-03 20:01 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-05-03 19:52 [PATCH 00/16] cciss: May 3, 2011 updates Stephen M. Cameron
2011-05-03 19:52 ` [PATCH 01/16] cciss: add readl after writel in interrupt mask setting code Stephen M. Cameron
2011-05-03 19:53 ` [PATCH 02/16] cciss: do a better job of detecting controller reset failure Stephen M. Cameron
2011-05-03 19:53 ` [PATCH 03/16] cciss: factor out command pool allocation functions Stephen M. Cameron
2011-05-03 19:53 ` [PATCH 04/16] cciss: factor out scatterlist " Stephen M. Cameron
2011-05-03 19:53 ` [PATCH 05/16] cciss: factor out irq request code Stephen M. Cameron
2011-05-03 19:53 ` [PATCH 06/16] cciss: fix reply pool and block fetch table memory leaks Stephen M. Cameron
2011-05-03 19:53 ` [PATCH 07/16] cciss: get rid of message related magic numbers Stephen M. Cameron
2011-05-03 19:53 ` [PATCH 08/16] cciss: increase time to wait for board reset to start Stephen M. Cameron
2011-05-03 19:53 ` [PATCH 09/16] cciss: clarify messages around reset behavior Stephen M. Cameron
2011-05-03 19:53 ` [PATCH 10/16] cciss: increase timeouts for post-reset no-ops Stephen M. Cameron
2011-05-03 19:53 ` Stephen M. Cameron [this message]
2011-05-03 19:53 ` [PATCH 12/16] cciss: do soft reset if hard reset is broken Stephen M. Cameron
2011-05-03 19:53 ` [PATCH 13/16] cciss: remove superfluous sleeps around reset code Stephen M. Cameron
2011-05-03 19:54 ` [PATCH 14/16] cciss: do not attempt PCI power management reset method if we know it won't work Stephen M. Cameron
2011-05-03 19:54 ` [PATCH 15/16] cciss: do not use bit 2 doorbell reset Stephen M. Cameron
2011-05-03 19:54 ` [PATCH 16/16] cciss: add cciss_tape_cmds module paramter Stephen M. Cameron
2011-05-06 14:29 ` [PATCH 00/16] cciss: May 3, 2011 updates Jens Axboe
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20110503195346.5154.2503.stgit@beardog.cce.hp.com \
--to=scameron@beardog.cce.hp.com \
--cc=akpm@linux-foundation.org \
--cc=axboe@kernel.dk \
--cc=linux-kernel@vger.kernel.org \
--cc=mikem@beardog.cce.hp.com \
--cc=smcameron@yahoo.com \
--cc=thenzl@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox