diff options
Diffstat (limited to 'drivers/ata/libata-core.c')
-rw-r--r-- | drivers/ata/libata-core.c | 66 |
1 files changed, 1 insertions, 65 deletions
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index 86f405b4831..3d8b62f7441 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c | |||
@@ -1907,22 +1907,6 @@ unsigned ata_exec_internal_sg(struct ata_device *dev, | |||
1907 | ap->qc_active = preempted_qc_active; | 1907 | ap->qc_active = preempted_qc_active; |
1908 | ap->nr_active_links = preempted_nr_active_links; | 1908 | ap->nr_active_links = preempted_nr_active_links; |
1909 | 1909 | ||
1910 | /* XXX - Some LLDDs (sata_mv) disable port on command failure. | ||
1911 | * Until those drivers are fixed, we detect the condition | ||
1912 | * here, fail the command with AC_ERR_SYSTEM and reenable the | ||
1913 | * port. | ||
1914 | * | ||
1915 | * Note that this doesn't change any behavior as internal | ||
1916 | * command failure results in disabling the device in the | ||
1917 | * higher layer for LLDDs without new reset/EH callbacks. | ||
1918 | * | ||
1919 | * Kill the following code as soon as those drivers are fixed. | ||
1920 | */ | ||
1921 | if (ap->flags & ATA_FLAG_DISABLED) { | ||
1922 | err_mask |= AC_ERR_SYSTEM; | ||
1923 | ata_port_probe(ap); | ||
1924 | } | ||
1925 | |||
1926 | spin_unlock_irqrestore(ap->lock, flags); | 1910 | spin_unlock_irqrestore(ap->lock, flags); |
1927 | 1911 | ||
1928 | if ((err_mask & AC_ERR_TIMEOUT) && auto_timeout) | 1912 | if ((err_mask & AC_ERR_TIMEOUT) && auto_timeout) |
@@ -2768,8 +2752,6 @@ int ata_bus_probe(struct ata_port *ap) | |||
2768 | int rc; | 2752 | int rc; |
2769 | struct ata_device *dev; | 2753 | struct ata_device *dev; |
2770 | 2754 | ||
2771 | ata_port_probe(ap); | ||
2772 | |||
2773 | ata_for_each_dev(dev, &ap->link, ALL) | 2755 | ata_for_each_dev(dev, &ap->link, ALL) |
2774 | tries[dev->devno] = ATA_PROBE_MAX_TRIES; | 2756 | tries[dev->devno] = ATA_PROBE_MAX_TRIES; |
2775 | 2757 | ||
@@ -2797,8 +2779,7 @@ int ata_bus_probe(struct ata_port *ap) | |||
2797 | ap->ops->phy_reset(ap); | 2779 | ap->ops->phy_reset(ap); |
2798 | 2780 | ||
2799 | ata_for_each_dev(dev, &ap->link, ALL) { | 2781 | ata_for_each_dev(dev, &ap->link, ALL) { |
2800 | if (!(ap->flags & ATA_FLAG_DISABLED) && | 2782 | if (dev->class != ATA_DEV_UNKNOWN) |
2801 | dev->class != ATA_DEV_UNKNOWN) | ||
2802 | classes[dev->devno] = dev->class; | 2783 | classes[dev->devno] = dev->class; |
2803 | else | 2784 | else |
2804 | classes[dev->devno] = ATA_DEV_NONE; | 2785 | classes[dev->devno] = ATA_DEV_NONE; |
@@ -2806,8 +2787,6 @@ int ata_bus_probe(struct ata_port *ap) | |||
2806 | dev->class = ATA_DEV_UNKNOWN; | 2787 | dev->class = ATA_DEV_UNKNOWN; |
2807 | } | 2788 | } |
2808 | 2789 | ||
2809 | ata_port_probe(ap); | ||
2810 | |||
2811 | /* read IDENTIFY page and configure devices. We have to do the identify | 2790 | /* read IDENTIFY page and configure devices. We have to do the identify |
2812 | specific sequence bass-ackwards so that PDIAG- is released by | 2791 | specific sequence bass-ackwards so that PDIAG- is released by |
2813 | the slave device */ | 2792 | the slave device */ |
@@ -2857,8 +2836,6 @@ int ata_bus_probe(struct ata_port *ap) | |||
2857 | ata_for_each_dev(dev, &ap->link, ENABLED) | 2836 | ata_for_each_dev(dev, &ap->link, ENABLED) |
2858 | return 0; | 2837 | return 0; |
2859 | 2838 | ||
2860 | /* no device present, disable port */ | ||
2861 | ata_port_disable(ap); | ||
2862 | return -ENODEV; | 2839 | return -ENODEV; |
2863 | 2840 | ||
2864 | fail: | 2841 | fail: |
@@ -2890,22 +2867,6 @@ int ata_bus_probe(struct ata_port *ap) | |||
2890 | } | 2867 | } |
2891 | 2868 | ||
2892 | /** | 2869 | /** |
2893 | * ata_port_probe - Mark port as enabled | ||
2894 | * @ap: Port for which we indicate enablement | ||
2895 | * | ||
2896 | * Modify @ap data structure such that the system | ||
2897 | * thinks that the entire port is enabled. | ||
2898 | * | ||
2899 | * LOCKING: host lock, or some other form of | ||
2900 | * serialization. | ||
2901 | */ | ||
2902 | |||
2903 | void ata_port_probe(struct ata_port *ap) | ||
2904 | { | ||
2905 | ap->flags &= ~ATA_FLAG_DISABLED; | ||
2906 | } | ||
2907 | |||
2908 | /** | ||
2909 | * sata_print_link_status - Print SATA link status | 2870 | * sata_print_link_status - Print SATA link status |
2910 | * @link: SATA link to printk link status about | 2871 | * @link: SATA link to printk link status about |
2911 | * | 2872 | * |
@@ -2952,26 +2913,6 @@ struct ata_device *ata_dev_pair(struct ata_device *adev) | |||
2952 | } | 2913 | } |
2953 | 2914 | ||
2954 | /** | 2915 | /** |
2955 | * ata_port_disable - Disable port. | ||
2956 | * @ap: Port to be disabled. | ||
2957 | * | ||
2958 | * Modify @ap data structure such that the system | ||
2959 | * thinks that the entire port is disabled, and should | ||
2960 | * never attempt to probe or communicate with devices | ||
2961 | * on this port. | ||
2962 | * | ||
2963 | * LOCKING: host lock, or some other form of | ||
2964 | * serialization. | ||
2965 | */ | ||
2966 | |||
2967 | void ata_port_disable(struct ata_port *ap) | ||
2968 | { | ||
2969 | ap->link.device[0].class = ATA_DEV_NONE; | ||
2970 | ap->link.device[1].class = ATA_DEV_NONE; | ||
2971 | ap->flags |= ATA_FLAG_DISABLED; | ||
2972 | } | ||
2973 | |||
2974 | /** | ||
2975 | * sata_down_spd_limit - adjust SATA spd limit downward | 2916 | * sata_down_spd_limit - adjust SATA spd limit downward |
2976 | * @link: Link to adjust SATA spd limit for | 2917 | * @link: Link to adjust SATA spd limit for |
2977 | * @spd_limit: Additional limit | 2918 | * @spd_limit: Additional limit |
@@ -5716,7 +5657,6 @@ struct ata_port *ata_port_alloc(struct ata_host *host) | |||
5716 | 5657 | ||
5717 | ap->pflags |= ATA_PFLAG_INITIALIZING; | 5658 | ap->pflags |= ATA_PFLAG_INITIALIZING; |
5718 | ap->lock = &host->lock; | 5659 | ap->lock = &host->lock; |
5719 | ap->flags = ATA_FLAG_DISABLED; | ||
5720 | ap->print_id = -1; | 5660 | ap->print_id = -1; |
5721 | ap->ctl = ATA_DEVCTL_OBS; | 5661 | ap->ctl = ATA_DEVCTL_OBS; |
5722 | ap->host = host; | 5662 | ap->host = host; |
@@ -6145,8 +6085,6 @@ static void async_port_probe(void *data, async_cookie_t cookie) | |||
6145 | struct ata_eh_info *ehi = &ap->link.eh_info; | 6085 | struct ata_eh_info *ehi = &ap->link.eh_info; |
6146 | unsigned long flags; | 6086 | unsigned long flags; |
6147 | 6087 | ||
6148 | ata_port_probe(ap); | ||
6149 | |||
6150 | /* kick EH for boot probing */ | 6088 | /* kick EH for boot probing */ |
6151 | spin_lock_irqsave(ap->lock, flags); | 6089 | spin_lock_irqsave(ap->lock, flags); |
6152 | 6090 | ||
@@ -6823,7 +6761,6 @@ EXPORT_SYMBOL_GPL(ata_port_start); | |||
6823 | EXPORT_SYMBOL_GPL(ata_do_set_mode); | 6761 | EXPORT_SYMBOL_GPL(ata_do_set_mode); |
6824 | EXPORT_SYMBOL_GPL(ata_std_qc_defer); | 6762 | EXPORT_SYMBOL_GPL(ata_std_qc_defer); |
6825 | EXPORT_SYMBOL_GPL(ata_noop_qc_prep); | 6763 | EXPORT_SYMBOL_GPL(ata_noop_qc_prep); |
6826 | EXPORT_SYMBOL_GPL(ata_port_probe); | ||
6827 | EXPORT_SYMBOL_GPL(ata_dev_disable); | 6764 | EXPORT_SYMBOL_GPL(ata_dev_disable); |
6828 | EXPORT_SYMBOL_GPL(sata_set_spd); | 6765 | EXPORT_SYMBOL_GPL(sata_set_spd); |
6829 | EXPORT_SYMBOL_GPL(ata_wait_after_reset); | 6766 | EXPORT_SYMBOL_GPL(ata_wait_after_reset); |
@@ -6835,7 +6772,6 @@ EXPORT_SYMBOL_GPL(sata_std_hardreset); | |||
6835 | EXPORT_SYMBOL_GPL(ata_std_postreset); | 6772 | EXPORT_SYMBOL_GPL(ata_std_postreset); |
6836 | EXPORT_SYMBOL_GPL(ata_dev_classify); | 6773 | EXPORT_SYMBOL_GPL(ata_dev_classify); |
6837 | EXPORT_SYMBOL_GPL(ata_dev_pair); | 6774 | EXPORT_SYMBOL_GPL(ata_dev_pair); |
6838 | EXPORT_SYMBOL_GPL(ata_port_disable); | ||
6839 | EXPORT_SYMBOL_GPL(ata_ratelimit); | 6775 | EXPORT_SYMBOL_GPL(ata_ratelimit); |
6840 | EXPORT_SYMBOL_GPL(ata_wait_register); | 6776 | EXPORT_SYMBOL_GPL(ata_wait_register); |
6841 | EXPORT_SYMBOL_GPL(ata_scsi_queuecmd); | 6777 | EXPORT_SYMBOL_GPL(ata_scsi_queuecmd); |