libata: increase PMP register access timeout to 3s
authorTejun Heo <htejun@gmail.com>
Sun, 18 May 2008 16:15:10 +0000 (01:15 +0900)
committerJeff Garzik <jgarzik@redhat.com>
Mon, 19 May 2008 21:51:47 +0000 (17:51 -0400)
This timeout was set low because previously PMP register access was
done via polling and register access timeouts could stack up.  This is
no longer the case.  One timeout will make all following accesses fail
immediately.

In rare cases both marvell and SIMG PMPs need almost a second.  Bump
it to 3s.

While at it, rename it to SATA_PMP_RW_TIMEOUT.  It's not specific to
SCR access.

Signed-off-by: Tejun Heo <htejun@gmail.com>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
drivers/ata/libata-pmp.c
include/linux/libata.h

index f3ad024394c22fbf7715d01f017600a3585c9c2e..04a486a3e7b85fe21e68bd20534af36957668385 100644 (file)
@@ -48,7 +48,7 @@ static unsigned int sata_pmp_read(struct ata_link *link, int reg, u32 *r_val)
        tf.device = link->pmp;
 
        err_mask = ata_exec_internal(pmp_dev, &tf, NULL, DMA_NONE, NULL, 0,
-                                    SATA_PMP_SCR_TIMEOUT);
+                                    SATA_PMP_RW_TIMEOUT);
        if (err_mask)
                return err_mask;
 
@@ -88,7 +88,7 @@ static unsigned int sata_pmp_write(struct ata_link *link, int reg, u32 val)
        tf.lbah = (val >> 24) & 0xff;
 
        return ata_exec_internal(pmp_dev, &tf, NULL, DMA_NONE, NULL, 0,
-                                SATA_PMP_SCR_TIMEOUT);
+                                SATA_PMP_RW_TIMEOUT);
 }
 
 /**
index 07ec193fc94191a589b9035f78a4c684969a258d..8d6999da1d3e168e452586e19b189165b6116465 100644 (file)
@@ -341,7 +341,7 @@ enum {
        ATA_EH_PMP_TRIES        = 5,
        ATA_EH_PMP_LINK_TRIES   = 3,
 
-       SATA_PMP_SCR_TIMEOUT    = 250,
+       SATA_PMP_RW_TIMEOUT     = 3000,         /* PMP read/write timeout */
 
        /* Horkage types. May be set by libata or controller on drives
           (some horkage may be drive/controller pair dependant */