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@xxxxxxxxxxx> > --- > > 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 -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html