public inbox for linux-scsi@vger.kernel.org
 help / color / mirror / Atom feed
From: Jeff Garzik <jeff@garzik.org>
To: ed.lin@promise.com
Cc: "James.Bottomley" <James.Bottomley@suse.de>,
	linux-scsi <linux-scsi@vger.kernel.org>,
	promise_linux <promise_linux@promise.com>
Subject: Re: [PATCH] stex: Add reset code for st_yel
Date: Sat, 15 Aug 2009 07:10:26 -0400	[thread overview]
Message-ID: <4A8697A2.3050704@garzik.org> (raw)
In-Reply-To: <200908142202591084033@promise.com>

Ed Lin wrote:
> Add reset related code for st_yel.
> 1. Set the SS_H2I_INT_RESET bit.
> 2. Wait for the SS_MU_OPERATIONAL flag. This is also part of
>    normal handshake process so move it to handshake routine.
> 3. Continue handshake with the firmware.
> 
> Signed-off-by: Ed Lin <ed.lin@promise.com>
> ---
> 
> diff --git a/drivers/scsi/stex.c b/drivers/scsi/stex.c
> index 8d2a95c..b57f92f 100644
> --- a/drivers/scsi/stex.c
> +++ b/drivers/scsi/stex.c
> @@ -55,6 +55,7 @@ enum {
>  	OIS	= 0x30,	/* MU_OUTBOUND_INTERRUPT_STATUS */
>  	OIM	= 0x3c,	/* MU_OUTBOUND_INTERRUPT_MASK */
>  
> +	YIOA_STATUS				= 0x00,
>  	YH2I_INT				= 0x20,
>  	YINT_EN					= 0x34,
>  	YI2H_INT				= 0x9c,
> @@ -108,6 +109,10 @@ enum {
>  
>  	SS_HEAD_HANDSHAKE			= 0x80,
>  
> +	SS_H2I_INT_RESET			= 0x100,
> +
> +	SS_MU_OPERATIONAL			= 0x80000000,
> +
>  	STEX_CDB_LENGTH				= 16,
>  	STATUS_VAR_LEN				= 128,
>  
> @@ -884,7 +889,7 @@ static void stex_ss_mu_intr(struct st_hba *hba)
>  		tag = (u16)value;
>  		if (unlikely(tag >= hba->host->can_queue)) {
>  			printk(KERN_WARNING DRV_NAME
> -					"(%s): invalid tag\n", pci_name(hba->pdev));
> +				"(%s): invalid tag\n", pci_name(hba->pdev));
>  			continue;
>  		}
>  
> @@ -1040,16 +1045,28 @@ static int stex_ss_handshake(struct st_hba *hba)
>  	void __iomem *base = hba->mmio_base;
>  	struct st_msg_header *msg_h;
>  	struct handshake_frame *h;
> -	__le32 *scratch = hba->scratch;
> +	__le32 *scratch;
>  	u32 data;
>  	unsigned long before;
>  	int ret = 0;
>  
> -	h = (struct handshake_frame *)(hba->alloc_rq(hba));
> -	msg_h = (struct st_msg_header *)h - 1;
> +	before = jiffies;
> +	while ((readl(base + YIOA_STATUS) & SS_MU_OPERATIONAL) == 0) {
> +		if (time_after(jiffies, before + MU_MAX_DELAY * HZ)) {
> +			printk(KERN_ERR DRV_NAME
> +				"(%s): firmware not operational\n",
> +				pci_name(hba->pdev));
> +			return -1;
> +		}
> +		rmb();
> +		msleep(1);
> +	}

hmmmmm.  Is that rmb() really necessary?  It does not appear to be so.

At worst, the rmb should occur immediately after the loop, no?

ACK everything else.

	Jeff



  reply	other threads:[~2009-08-15 11:10 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-08-15  6:03 [PATCH] stex: Add reset code for st_yel Ed Lin
2009-08-15 11:10 ` Jeff Garzik [this message]
2009-08-17 23:03   ` Ed Lin - PTU

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=4A8697A2.3050704@garzik.org \
    --to=jeff@garzik.org \
    --cc=James.Bottomley@suse.de \
    --cc=ed.lin@promise.com \
    --cc=linux-scsi@vger.kernel.org \
    --cc=promise_linux@promise.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