diff options
Diffstat (limited to 'drivers')
-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; |