diff options
| -rw-r--r-- | drivers/ata/sata_promise.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/drivers/ata/sata_promise.c b/drivers/ata/sata_promise.c index 750d8cdc00cd..ba9a2570a742 100644 --- a/drivers/ata/sata_promise.c +++ b/drivers/ata/sata_promise.c | |||
| @@ -153,6 +153,10 @@ static void pdc_freeze(struct ata_port *ap); | |||
| 153 | static void pdc_sata_freeze(struct ata_port *ap); | 153 | static void pdc_sata_freeze(struct ata_port *ap); |
| 154 | static void pdc_thaw(struct ata_port *ap); | 154 | static void pdc_thaw(struct ata_port *ap); |
| 155 | static void pdc_sata_thaw(struct ata_port *ap); | 155 | static void pdc_sata_thaw(struct ata_port *ap); |
| 156 | static int pdc_pata_softreset(struct ata_link *link, unsigned int *class, | ||
| 157 | unsigned long deadline); | ||
| 158 | static int pdc_sata_hardreset(struct ata_link *link, unsigned int *class, | ||
| 159 | unsigned long deadline); | ||
| 156 | static void pdc_error_handler(struct ata_port *ap); | 160 | static void pdc_error_handler(struct ata_port *ap); |
| 157 | static void pdc_post_internal_cmd(struct ata_queued_cmd *qc); | 161 | static void pdc_post_internal_cmd(struct ata_queued_cmd *qc); |
| 158 | static int pdc_pata_cable_detect(struct ata_port *ap); | 162 | static int pdc_pata_cable_detect(struct ata_port *ap); |
| @@ -186,6 +190,7 @@ static struct ata_port_operations pdc_sata_ops = { | |||
| 186 | .scr_read = pdc_sata_scr_read, | 190 | .scr_read = pdc_sata_scr_read, |
| 187 | .scr_write = pdc_sata_scr_write, | 191 | .scr_write = pdc_sata_scr_write, |
| 188 | .port_start = pdc_sata_port_start, | 192 | .port_start = pdc_sata_port_start, |
| 193 | .hardreset = pdc_sata_hardreset, | ||
| 189 | }; | 194 | }; |
| 190 | 195 | ||
| 191 | /* First-generation chips need a more restrictive ->check_atapi_dma op */ | 196 | /* First-generation chips need a more restrictive ->check_atapi_dma op */ |
| @@ -200,6 +205,7 @@ static struct ata_port_operations pdc_pata_ops = { | |||
| 200 | .freeze = pdc_freeze, | 205 | .freeze = pdc_freeze, |
| 201 | .thaw = pdc_thaw, | 206 | .thaw = pdc_thaw, |
| 202 | .port_start = pdc_common_port_start, | 207 | .port_start = pdc_common_port_start, |
| 208 | .softreset = pdc_pata_softreset, | ||
| 203 | }; | 209 | }; |
| 204 | 210 | ||
| 205 | static const struct ata_port_info pdc_port_info[] = { | 211 | static const struct ata_port_info pdc_port_info[] = { |
| @@ -693,6 +699,20 @@ static void pdc_sata_thaw(struct ata_port *ap) | |||
| 693 | readl(host_mmio + hotplug_offset); /* flush */ | 699 | readl(host_mmio + hotplug_offset); /* flush */ |
| 694 | } | 700 | } |
| 695 | 701 | ||
| 702 | static int pdc_pata_softreset(struct ata_link *link, unsigned int *class, | ||
| 703 | unsigned long deadline) | ||
| 704 | { | ||
| 705 | pdc_reset_port(link->ap); | ||
| 706 | return ata_sff_softreset(link, class, deadline); | ||
| 707 | } | ||
| 708 | |||
| 709 | static int pdc_sata_hardreset(struct ata_link *link, unsigned int *class, | ||
| 710 | unsigned long deadline) | ||
| 711 | { | ||
| 712 | pdc_reset_port(link->ap); | ||
| 713 | return sata_sff_hardreset(link, class, deadline); | ||
| 714 | } | ||
| 715 | |||
| 696 | static void pdc_error_handler(struct ata_port *ap) | 716 | static void pdc_error_handler(struct ata_port *ap) |
| 697 | { | 717 | { |
| 698 | if (!(ap->pflags & ATA_PFLAG_FROZEN)) | 718 | if (!(ap->pflags & ATA_PFLAG_FROZEN)) |
