diff options
author | Tejun Heo <htejun@gmail.com> | 2006-07-03 03:07:26 -0400 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2006-07-05 22:16:27 -0400 |
commit | e9c839142d698086d3fe33a0daafde55ddd00c4e (patch) | |
tree | f7b586dec514854b536866c9d9cbe2bd39e25c23 /drivers/scsi | |
parent | 28324304350e23db24d679c55de3f06a5b1e40aa (diff) |
[PATCH] libata: clean up debounce parameters and improve parameter selection
The names of predefined debounce timing parameters didn't exactly
match their usages. Rename to more generic names and implement param
selection helper sata_ehc_deb_timing() which uses EHI_HOTPLUGGED to
select params.
Combined with the previous EHI_RESUME_LINK differentiation, this makes
parameter selection accurate. e.g. user scan resumes link but normal
deb param is used instead of hotplug param.
Signed-off-by: Tejun Heo <htejun@gmail.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'drivers/scsi')
-rw-r--r-- | drivers/scsi/libata-core.c | 25 | ||||
-rw-r--r-- | drivers/scsi/sata_sil24.c | 2 |
2 files changed, 12 insertions, 15 deletions
diff --git a/drivers/scsi/libata-core.c b/drivers/scsi/libata-core.c index 90db054fa994..73174452d1c1 100644 --- a/drivers/scsi/libata-core.c +++ b/drivers/scsi/libata-core.c | |||
@@ -61,9 +61,9 @@ | |||
61 | #include "libata.h" | 61 | #include "libata.h" |
62 | 62 | ||
63 | /* debounce timing parameters in msecs { interval, duration, timeout } */ | 63 | /* debounce timing parameters in msecs { interval, duration, timeout } */ |
64 | const unsigned long sata_deb_timing_boot[] = { 5, 100, 2000 }; | 64 | const unsigned long sata_deb_timing_normal[] = { 5, 100, 2000 }; |
65 | const unsigned long sata_deb_timing_eh[] = { 25, 500, 2000 }; | 65 | const unsigned long sata_deb_timing_hotplug[] = { 25, 500, 2000 }; |
66 | const unsigned long sata_deb_timing_before_fsrst[] = { 100, 2000, 5000 }; | 66 | const unsigned long sata_deb_timing_long[] = { 100, 2000, 5000 }; |
67 | 67 | ||
68 | static unsigned int ata_dev_init_params(struct ata_device *dev, | 68 | static unsigned int ata_dev_init_params(struct ata_device *dev, |
69 | u16 heads, u16 sectors); | 69 | u16 heads, u16 sectors); |
@@ -2588,7 +2588,7 @@ static void ata_wait_spinup(struct ata_port *ap) | |||
2588 | 2588 | ||
2589 | /* first, debounce phy if SATA */ | 2589 | /* first, debounce phy if SATA */ |
2590 | if (ap->cbl == ATA_CBL_SATA) { | 2590 | if (ap->cbl == ATA_CBL_SATA) { |
2591 | rc = sata_phy_debounce(ap, sata_deb_timing_eh); | 2591 | rc = sata_phy_debounce(ap, sata_deb_timing_hotplug); |
2592 | 2592 | ||
2593 | /* if debounced successfully and offline, no need to wait */ | 2593 | /* if debounced successfully and offline, no need to wait */ |
2594 | if ((rc == 0 || rc == -EOPNOTSUPP) && ata_port_offline(ap)) | 2594 | if ((rc == 0 || rc == -EOPNOTSUPP) && ata_port_offline(ap)) |
@@ -2624,7 +2624,7 @@ static void ata_wait_spinup(struct ata_port *ap) | |||
2624 | int ata_std_prereset(struct ata_port *ap) | 2624 | int ata_std_prereset(struct ata_port *ap) |
2625 | { | 2625 | { |
2626 | struct ata_eh_context *ehc = &ap->eh_context; | 2626 | struct ata_eh_context *ehc = &ap->eh_context; |
2627 | const unsigned long *timing; | 2627 | const unsigned long *timing = sata_ehc_deb_timing(ehc); |
2628 | int rc; | 2628 | int rc; |
2629 | 2629 | ||
2630 | /* handle link resume & hotplug spinup */ | 2630 | /* handle link resume & hotplug spinup */ |
@@ -2642,11 +2642,6 @@ int ata_std_prereset(struct ata_port *ap) | |||
2642 | 2642 | ||
2643 | /* if SATA, resume phy */ | 2643 | /* if SATA, resume phy */ |
2644 | if (ap->cbl == ATA_CBL_SATA) { | 2644 | if (ap->cbl == ATA_CBL_SATA) { |
2645 | if (ap->pflags & ATA_PFLAG_LOADING) | ||
2646 | timing = sata_deb_timing_boot; | ||
2647 | else | ||
2648 | timing = sata_deb_timing_eh; | ||
2649 | |||
2650 | rc = sata_phy_resume(ap, timing); | 2645 | rc = sata_phy_resume(ap, timing); |
2651 | if (rc && rc != -EOPNOTSUPP) { | 2646 | if (rc && rc != -EOPNOTSUPP) { |
2652 | /* phy resume failed */ | 2647 | /* phy resume failed */ |
@@ -2734,6 +2729,8 @@ int ata_std_softreset(struct ata_port *ap, unsigned int *classes) | |||
2734 | */ | 2729 | */ |
2735 | int sata_std_hardreset(struct ata_port *ap, unsigned int *class) | 2730 | int sata_std_hardreset(struct ata_port *ap, unsigned int *class) |
2736 | { | 2731 | { |
2732 | struct ata_eh_context *ehc = &ap->eh_context; | ||
2733 | const unsigned long *timing = sata_ehc_deb_timing(ehc); | ||
2737 | u32 scontrol; | 2734 | u32 scontrol; |
2738 | int rc; | 2735 | int rc; |
2739 | 2736 | ||
@@ -2771,7 +2768,7 @@ int sata_std_hardreset(struct ata_port *ap, unsigned int *class) | |||
2771 | msleep(1); | 2768 | msleep(1); |
2772 | 2769 | ||
2773 | /* bring phy back */ | 2770 | /* bring phy back */ |
2774 | sata_phy_resume(ap, sata_deb_timing_eh); | 2771 | sata_phy_resume(ap, timing); |
2775 | 2772 | ||
2776 | /* TODO: phy layer with polling, timeouts, etc. */ | 2773 | /* TODO: phy layer with polling, timeouts, etc. */ |
2777 | if (ata_port_offline(ap)) { | 2774 | if (ata_port_offline(ap)) { |
@@ -5852,9 +5849,9 @@ u32 ata_wait_register(void __iomem *reg, u32 mask, u32 val, | |||
5852 | * Do not depend on ABI/API stability. | 5849 | * Do not depend on ABI/API stability. |
5853 | */ | 5850 | */ |
5854 | 5851 | ||
5855 | EXPORT_SYMBOL_GPL(sata_deb_timing_boot); | 5852 | EXPORT_SYMBOL_GPL(sata_deb_timing_normal); |
5856 | EXPORT_SYMBOL_GPL(sata_deb_timing_eh); | 5853 | EXPORT_SYMBOL_GPL(sata_deb_timing_hotplug); |
5857 | EXPORT_SYMBOL_GPL(sata_deb_timing_before_fsrst); | 5854 | EXPORT_SYMBOL_GPL(sata_deb_timing_long); |
5858 | EXPORT_SYMBOL_GPL(ata_std_bios_param); | 5855 | EXPORT_SYMBOL_GPL(ata_std_bios_param); |
5859 | EXPORT_SYMBOL_GPL(ata_std_ports); | 5856 | EXPORT_SYMBOL_GPL(ata_std_ports); |
5860 | EXPORT_SYMBOL_GPL(ata_device_add); | 5857 | EXPORT_SYMBOL_GPL(ata_device_add); |
diff --git a/drivers/scsi/sata_sil24.c b/drivers/scsi/sata_sil24.c index 07a1c6a8a414..04ae1ef25484 100644 --- a/drivers/scsi/sata_sil24.c +++ b/drivers/scsi/sata_sil24.c | |||
@@ -607,7 +607,7 @@ static int sil24_hardreset(struct ata_port *ap, unsigned int *class) | |||
607 | /* SStatus oscillates between zero and valid status after | 607 | /* SStatus oscillates between zero and valid status after |
608 | * DEV_RST, debounce it. | 608 | * DEV_RST, debounce it. |
609 | */ | 609 | */ |
610 | rc = sata_phy_debounce(ap, sata_deb_timing_before_fsrst); | 610 | rc = sata_phy_debounce(ap, sata_deb_timing_long); |
611 | if (rc) { | 611 | if (rc) { |
612 | reason = "PHY debouncing failed"; | 612 | reason = "PHY debouncing failed"; |
613 | goto err; | 613 | goto err; |