Hi, Jeff Could you have any comment about this patch? There is no any feedback since 12/20/2011. Thanks Jerry Huang > -----Original Message----- > From: Huang Changming-R66093 > Sent: Monday, December 19, 2011 10:36 AM > To: linux-ide@xxxxxxxxxxxxxxx > Cc: Huang Changming-R66093; Jeff Garzik > Subject: [PATCH 1/2 v3] libata-pmp: add schedule timeout to support some > PMP cards > > From: Jerry Huang <Chang-Ming.Huang@xxxxxxxxxxxxx> > > With Freescale SATA controller, some PMP cards(e.g JMB393 PMP card) > can't work on some platforms (e.g mpc837x, p1022): > During PMP initialize, when reading the PMP SCR, we will observe the > TIMEOUT > error because PMP card SCR is not ready. > Therefore, we need enough time to wait for the PMP card ready for SCR > read. > > below is the error log: > fsl-sata e0018000.sata: Sata FSL Platform/CSB Driver init > scsi0 : sata_fsl > ata1: SATA max UDMA/133 irq 44 > ata1: Signature Update detected @ 504 msecs > ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300) > ata2.15: Port Multiplier 1.2, 0x197b:0x0325 r0, 15 ports, feat 0x5/0xf > ata2.00: hard resetting link > ata2.15: qc timeout (cmd 0xe4) > ata2.00: failed to read SCR 0 (Emask=0x4) > ata2.00: failed to read SCR 0 (Emask=0x40) > ata2.00: failed to read SCR 0 (Emask=0x40) > ata2: ATA_SRST issue failed > ata2.00: failed to read SCR 0 (Emask=0x40) > ata2.00: reset failed, giving up > ata2.15: hard resetting link > ata2: Hardreset failed, not off-lined 0 > ata2: No Signature Update > ata2.15: SATA link up 3.0 Gbps (SStatus 123 SControl 300) > ata2.00: hard resetting link > ata2.15: qc timeout (cmd 0xe4) > ata2.00: failed to read SCR 0 (Emask=0x4) > ata2.00: failed to read SCR 0 (Emask=0x40) > ata2.00: failed to read SCR 0 (Emask=0x40) > ata2: ATA_SRST issue failed > ata2.00: failed to read SCR 0 (Emask=0x40) > ata2.00: reset failed, giving up > ata2.15: hard resetting link > ata2: Hardreset failed, not off-lined 0 > ata2: No Signature Update > ata2.15: SATA link up 3.0 Gbps (SStatus 123 SControl 300) > ata2.00: hard resetting link > ata2.15: qc timeout (cmd 0xe4) > ata2.00: failed to read SCR 0 (Emask=0x4) > ata2.00: failed to read SCR 0 (Emask=0x40) > ata2.00: failed to read SCR 0 (Emask=0x40) > ata2: ATA_SRST issue failed > ata2.00: failed to read SCR 0 (Emask=0x40) > ata2.00: reset failed, giving up > ata2.00: failed to recover link after 3 tries, disabling > ata2.15: hard resetting link > ata2: Hardreset failed, not off-lined 0 > ata2: No Signature Update > ata2.15: SATA link up 3.0 Gbps (SStatus 123 SControl 300) > ata2.15: qc timeout (cmd 0xe4) > ata2.00: failed to read SCR 0 (Emask=0x4) > ata2.00: failed to write SCR 1 (Emask=0x40) > ata2.00: failed to clear SError.N (errno=-5) > ata2.15: hard resetting link > ata2: Hardreset failed, not off-lined 0 > ata2: No Signature Update > ata2.15: SATA link up 3.0 Gbps (SStatus 123 SControl 300) > ata2.01: hard resetting link > ata2.01: failed to resume link (SControl 0) > ata2.01: SATA link down (SStatus 0 SControl 0) > ata2.02: hard resetting link > ata2.02: failed to resume link (SControl 0) > ata2.02: SATA link down (SStatus 0 SControl 0) > ...... > ata2.14: hard resetting link > ata2.14: failed to resume link (SControl 0) > ata2.14: SATA link down (SStatus 0 SControl 0) > ata2: EH complete > > Signed-off-by: Jerry Huang <Chang-Ming.Huang@xxxxxxxxxxxxx> > CC: Jeff Garzik <jgarzik@xxxxxxxxx> > --- > changes for v2: > - use function msecs_to_jiffies to calculate the jiffies for 1ms > - cleanup the code > changes for v3: > - add the quirks to support pmp card > - add the CC > > drivers/ata/libata-pmp.c | 12 ++++++++++++ > include/linux/libata.h | 1 + > 2 files changed, 13 insertions(+), 0 deletions(-) > > diff --git a/drivers/ata/libata-pmp.c b/drivers/ata/libata-pmp.c > index 21b80c5..d7d4bb5 100644 > --- a/drivers/ata/libata-pmp.c > +++ b/drivers/ata/libata-pmp.c > @@ -146,6 +146,13 @@ int sata_pmp_scr_read(struct ata_link *link, int reg, > u32 *r_val) > if (reg > SATA_PMP_PSCR_CONTROL) > return -EINVAL; > > + /* For some PMP card, we need delay some time */ > + if (link->flags & ATA_LFLAG_DELAY) { > + set_current_state(TASK_INTERRUPTIBLE); > + /* sleep 50 msecond */ > + schedule_timeout(msecs_to_jiffies(50)); > + } > + > err_mask = sata_pmp_read(link, reg, r_val); > if (err_mask) { > ata_link_warn(link, "failed to read SCR %d (Emask=0x%x)\n", > @@ -456,6 +463,11 @@ static void sata_pmp_quirks(struct ata_port *ap) > ATA_LFLAG_NO_SRST | > ATA_LFLAG_ASSUME_ATA; > } > + } else if (vendor == 0x197b && devid == 0x0325) { > + /* For jmicron JMB393 card, need some time to ready the PMP > */ > + ata_for_each_link(link, ap, EDGE) { > + link->flags |= ATA_LFLAG_DELAY; > + } > } > } > > diff --git a/include/linux/libata.h b/include/linux/libata.h > index cafc09a..c23ddf9 100644 > --- a/include/linux/libata.h > +++ b/include/linux/libata.h > @@ -182,6 +182,7 @@ enum { > ATA_LFLAG_DISABLED = (1 << 6), /* link is disabled */ > ATA_LFLAG_SW_ACTIVITY = (1 << 7), /* keep activity stats */ > ATA_LFLAG_NO_LPM = (1 << 8), /* disable LPM on this link */ > + ATA_LFLAG_DELAY = (1 << 9), /* delay some time */ > > /* struct ata_port flags */ > ATA_FLAG_SLAVE_POSS = (1 << 0), /* host supports slave dev */ > -- > 1.7.5.4 -- To unsubscribe from this list: send the line "unsubscribe linux-ide" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html