diff options
53 files changed, 388 insertions, 185 deletions
diff --git a/Documentation/devicetree/bindings/ata/ahci-platform.txt b/Documentation/devicetree/bindings/ata/ahci-platform.txt index b519f9b699c3..3ec0c5c4f0e9 100644 --- a/Documentation/devicetree/bindings/ata/ahci-platform.txt +++ b/Documentation/devicetree/bindings/ata/ahci-platform.txt | |||
@@ -12,6 +12,11 @@ Optional properties: | |||
12 | - calxeda,port-phys: phandle-combophy and lane assignment, which maps each | 12 | - calxeda,port-phys: phandle-combophy and lane assignment, which maps each |
13 | SATA port to a combophy and a lane within that | 13 | SATA port to a combophy and a lane within that |
14 | combophy | 14 | combophy |
15 | - calxeda,sgpio-gpio: phandle-gpio bank, bit offset, and default on or off, | ||
16 | which indicates that the driver supports SGPIO | ||
17 | indicator lights using the indicated GPIOs | ||
18 | - calxeda,led-order : a u32 array that map port numbers to offsets within the | ||
19 | SGPIO bitstream. | ||
15 | - dma-coherent : Present if dma operations are coherent | 20 | - dma-coherent : Present if dma operations are coherent |
16 | 21 | ||
17 | Example: | 22 | Example: |
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index ef8bd35814cf..25dc4a0e7e48 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt | |||
@@ -1458,6 +1458,8 @@ bytes respectively. Such letter suffixes can also be entirely omitted. | |||
1458 | 1458 | ||
1459 | * dump_id: dump IDENTIFY data. | 1459 | * dump_id: dump IDENTIFY data. |
1460 | 1460 | ||
1461 | * atapi_dmadir: Enable ATAPI DMADIR bridge support | ||
1462 | |||
1461 | If there are multiple matching configurations changing | 1463 | If there are multiple matching configurations changing |
1462 | the same attribute, the last one is used. | 1464 | the same attribute, the last one is used. |
1463 | 1465 | ||
diff --git a/arch/arm/boot/dts/ecx-common.dtsi b/arch/arm/boot/dts/ecx-common.dtsi index d61b535f682a..e8559b753c9d 100644 --- a/arch/arm/boot/dts/ecx-common.dtsi +++ b/arch/arm/boot/dts/ecx-common.dtsi | |||
@@ -33,6 +33,8 @@ | |||
33 | calxeda,port-phys = <&combophy5 0 &combophy0 0 | 33 | calxeda,port-phys = <&combophy5 0 &combophy0 0 |
34 | &combophy0 1 &combophy0 2 | 34 | &combophy0 1 &combophy0 2 |
35 | &combophy0 3>; | 35 | &combophy0 3>; |
36 | calxeda,sgpio-gpio =<&gpioh 5 1 &gpioh 6 1 &gpioh 7 1>; | ||
37 | calxeda,led-order = <4 0 1 2 3>; | ||
36 | }; | 38 | }; |
37 | 39 | ||
38 | sdhci@ffe0e000 { | 40 | sdhci@ffe0e000 { |
diff --git a/drivers/ata/Kconfig b/drivers/ata/Kconfig index a5a3ebcbdd2c..aba6e93b0502 100644 --- a/drivers/ata/Kconfig +++ b/drivers/ata/Kconfig | |||
@@ -263,7 +263,6 @@ config SATA_PROMISE | |||
263 | 263 | ||
264 | config SATA_RCAR | 264 | config SATA_RCAR |
265 | tristate "Renesas R-Car SATA support" | 265 | tristate "Renesas R-Car SATA support" |
266 | depends on ARCH_SHMOBILE && ARCH_R8A7779 | ||
267 | help | 266 | help |
268 | This option enables support for Renesas R-Car Serial ATA. | 267 | This option enables support for Renesas R-Car Serial ATA. |
269 | 268 | ||
diff --git a/drivers/ata/acard-ahci.c b/drivers/ata/acard-ahci.c index 9d0cf019ce59..fd665d919df2 100644 --- a/drivers/ata/acard-ahci.c +++ b/drivers/ata/acard-ahci.c | |||
@@ -128,7 +128,7 @@ static struct pci_driver acard_ahci_pci_driver = { | |||
128 | #ifdef CONFIG_PM | 128 | #ifdef CONFIG_PM |
129 | static int acard_ahci_pci_device_suspend(struct pci_dev *pdev, pm_message_t mesg) | 129 | static int acard_ahci_pci_device_suspend(struct pci_dev *pdev, pm_message_t mesg) |
130 | { | 130 | { |
131 | struct ata_host *host = dev_get_drvdata(&pdev->dev); | 131 | struct ata_host *host = pci_get_drvdata(pdev); |
132 | struct ahci_host_priv *hpriv = host->private_data; | 132 | struct ahci_host_priv *hpriv = host->private_data; |
133 | void __iomem *mmio = hpriv->mmio; | 133 | void __iomem *mmio = hpriv->mmio; |
134 | u32 ctl; | 134 | u32 ctl; |
@@ -156,7 +156,7 @@ static int acard_ahci_pci_device_suspend(struct pci_dev *pdev, pm_message_t mesg | |||
156 | 156 | ||
157 | static int acard_ahci_pci_device_resume(struct pci_dev *pdev) | 157 | static int acard_ahci_pci_device_resume(struct pci_dev *pdev) |
158 | { | 158 | { |
159 | struct ata_host *host = dev_get_drvdata(&pdev->dev); | 159 | struct ata_host *host = pci_get_drvdata(pdev); |
160 | int rc; | 160 | int rc; |
161 | 161 | ||
162 | rc = ata_pci_device_do_resume(pdev); | 162 | rc = ata_pci_device_do_resume(pdev); |
diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c index fe1a889c6910..5064f3ea20f1 100644 --- a/drivers/ata/ahci.c +++ b/drivers/ata/ahci.c | |||
@@ -291,6 +291,7 @@ static const struct pci_device_id ahci_pci_tbl[] = { | |||
291 | { PCI_VDEVICE(INTEL, 0x8d64), board_ahci }, /* Wellsburg RAID */ | 291 | { PCI_VDEVICE(INTEL, 0x8d64), board_ahci }, /* Wellsburg RAID */ |
292 | { PCI_VDEVICE(INTEL, 0x8d66), board_ahci }, /* Wellsburg RAID */ | 292 | { PCI_VDEVICE(INTEL, 0x8d66), board_ahci }, /* Wellsburg RAID */ |
293 | { PCI_VDEVICE(INTEL, 0x8d6e), board_ahci }, /* Wellsburg RAID */ | 293 | { PCI_VDEVICE(INTEL, 0x8d6e), board_ahci }, /* Wellsburg RAID */ |
294 | { PCI_VDEVICE(INTEL, 0x23a3), board_ahci }, /* Coleto Creek AHCI */ | ||
294 | 295 | ||
295 | /* JMicron 360/1/3/5/6, match class to avoid IDE function */ | 296 | /* JMicron 360/1/3/5/6, match class to avoid IDE function */ |
296 | { PCI_VENDOR_ID_JMICRON, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, | 297 | { PCI_VENDOR_ID_JMICRON, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, |
@@ -586,7 +587,7 @@ static int ahci_p5wdh_hardreset(struct ata_link *link, unsigned int *class, | |||
586 | 587 | ||
587 | /* clear D2H reception area to properly wait for D2H FIS */ | 588 | /* clear D2H reception area to properly wait for D2H FIS */ |
588 | ata_tf_init(link->device, &tf); | 589 | ata_tf_init(link->device, &tf); |
589 | tf.command = 0x80; | 590 | tf.command = ATA_BUSY; |
590 | ata_tf_to_fis(&tf, 0, 0, d2h_fis); | 591 | ata_tf_to_fis(&tf, 0, 0, d2h_fis); |
591 | 592 | ||
592 | rc = sata_link_hardreset(link, sata_ehc_deb_timing(&link->eh_context), | 593 | rc = sata_link_hardreset(link, sata_ehc_deb_timing(&link->eh_context), |
@@ -619,7 +620,7 @@ static int ahci_p5wdh_hardreset(struct ata_link *link, unsigned int *class, | |||
619 | #ifdef CONFIG_PM | 620 | #ifdef CONFIG_PM |
620 | static int ahci_pci_device_suspend(struct pci_dev *pdev, pm_message_t mesg) | 621 | static int ahci_pci_device_suspend(struct pci_dev *pdev, pm_message_t mesg) |
621 | { | 622 | { |
622 | struct ata_host *host = dev_get_drvdata(&pdev->dev); | 623 | struct ata_host *host = pci_get_drvdata(pdev); |
623 | struct ahci_host_priv *hpriv = host->private_data; | 624 | struct ahci_host_priv *hpriv = host->private_data; |
624 | void __iomem *mmio = hpriv->mmio; | 625 | void __iomem *mmio = hpriv->mmio; |
625 | u32 ctl; | 626 | u32 ctl; |
@@ -647,7 +648,7 @@ static int ahci_pci_device_suspend(struct pci_dev *pdev, pm_message_t mesg) | |||
647 | 648 | ||
648 | static int ahci_pci_device_resume(struct pci_dev *pdev) | 649 | static int ahci_pci_device_resume(struct pci_dev *pdev) |
649 | { | 650 | { |
650 | struct ata_host *host = dev_get_drvdata(&pdev->dev); | 651 | struct ata_host *host = pci_get_drvdata(pdev); |
651 | int rc; | 652 | int rc; |
652 | 653 | ||
653 | rc = ata_pci_device_do_resume(pdev); | 654 | rc = ata_pci_device_do_resume(pdev); |
@@ -1145,9 +1146,11 @@ int ahci_host_activate(struct ata_host *host, int irq, unsigned int n_msis) | |||
1145 | return rc; | 1146 | return rc; |
1146 | 1147 | ||
1147 | for (i = 0; i < host->n_ports; i++) { | 1148 | for (i = 0; i < host->n_ports; i++) { |
1149 | struct ahci_port_priv *pp = host->ports[i]->private_data; | ||
1150 | |||
1148 | rc = devm_request_threaded_irq(host->dev, | 1151 | rc = devm_request_threaded_irq(host->dev, |
1149 | irq + i, ahci_hw_interrupt, ahci_thread_fn, IRQF_SHARED, | 1152 | irq + i, ahci_hw_interrupt, ahci_thread_fn, IRQF_SHARED, |
1150 | dev_driver_string(host->dev), host->ports[i]); | 1153 | pp->irq_desc, host->ports[i]); |
1151 | if (rc) | 1154 | if (rc) |
1152 | goto out_free_irqs; | 1155 | goto out_free_irqs; |
1153 | } | 1156 | } |
diff --git a/drivers/ata/ahci.h b/drivers/ata/ahci.h index 10b14d45cfd2..11456371f29b 100644 --- a/drivers/ata/ahci.h +++ b/drivers/ata/ahci.h | |||
@@ -306,6 +306,7 @@ struct ahci_port_priv { | |||
306 | int fbs_last_dev; /* save FBS.DEV of last FIS */ | 306 | int fbs_last_dev; /* save FBS.DEV of last FIS */ |
307 | /* enclosure management info per PM slot */ | 307 | /* enclosure management info per PM slot */ |
308 | struct ahci_em_priv em_priv[EM_MAX_SLOTS]; | 308 | struct ahci_em_priv em_priv[EM_MAX_SLOTS]; |
309 | char *irq_desc; /* desc in /proc/interrupts */ | ||
309 | }; | 310 | }; |
310 | 311 | ||
311 | struct ahci_host_priv { | 312 | struct ahci_host_priv { |
@@ -321,6 +322,7 @@ struct ahci_host_priv { | |||
321 | u32 em_buf_sz; /* EM buffer size in byte */ | 322 | u32 em_buf_sz; /* EM buffer size in byte */ |
322 | u32 em_msg_type; /* EM message type */ | 323 | u32 em_msg_type; /* EM message type */ |
323 | struct clk *clk; /* Only for platforms supporting clk */ | 324 | struct clk *clk; /* Only for platforms supporting clk */ |
325 | void *plat_data; /* Other platform data */ | ||
324 | }; | 326 | }; |
325 | 327 | ||
326 | extern int ahci_ignore_sss; | 328 | extern int ahci_ignore_sss; |
diff --git a/drivers/ata/ahci_platform.c b/drivers/ata/ahci_platform.c index 7a8a2841fe64..2daaee05cab1 100644 --- a/drivers/ata/ahci_platform.c +++ b/drivers/ata/ahci_platform.c | |||
@@ -327,6 +327,7 @@ static SIMPLE_DEV_PM_OPS(ahci_pm_ops, ahci_suspend, ahci_resume); | |||
327 | 327 | ||
328 | static const struct of_device_id ahci_of_match[] = { | 328 | static const struct of_device_id ahci_of_match[] = { |
329 | { .compatible = "snps,spear-ahci", }, | 329 | { .compatible = "snps,spear-ahci", }, |
330 | { .compatible = "snps,exynos5440-ahci", }, | ||
330 | {}, | 331 | {}, |
331 | }; | 332 | }; |
332 | MODULE_DEVICE_TABLE(of, ahci_of_match); | 333 | MODULE_DEVICE_TABLE(of, ahci_of_match); |
diff --git a/drivers/ata/ata_piix.c b/drivers/ata/ata_piix.c index 9a8a674e8fac..b52a10c8eeb9 100644 --- a/drivers/ata/ata_piix.c +++ b/drivers/ata/ata_piix.c | |||
@@ -338,6 +338,8 @@ static const struct pci_device_id piix_pci_tbl[] = { | |||
338 | /* SATA Controller IDE (BayTrail) */ | 338 | /* SATA Controller IDE (BayTrail) */ |
339 | { 0x8086, 0x0F20, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata_byt }, | 339 | { 0x8086, 0x0F20, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata_byt }, |
340 | { 0x8086, 0x0F21, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata_byt }, | 340 | { 0x8086, 0x0F21, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata_byt }, |
341 | /* SATA Controller IDE (Coleto Creek) */ | ||
342 | { 0x8086, 0x23a6, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata }, | ||
341 | 343 | ||
342 | { } /* terminate list */ | 344 | { } /* terminate list */ |
343 | }; | 345 | }; |
@@ -993,7 +995,7 @@ static int piix_broken_suspend(void) | |||
993 | 995 | ||
994 | static int piix_pci_device_suspend(struct pci_dev *pdev, pm_message_t mesg) | 996 | static int piix_pci_device_suspend(struct pci_dev *pdev, pm_message_t mesg) |
995 | { | 997 | { |
996 | struct ata_host *host = dev_get_drvdata(&pdev->dev); | 998 | struct ata_host *host = pci_get_drvdata(pdev); |
997 | unsigned long flags; | 999 | unsigned long flags; |
998 | int rc = 0; | 1000 | int rc = 0; |
999 | 1001 | ||
@@ -1028,7 +1030,7 @@ static int piix_pci_device_suspend(struct pci_dev *pdev, pm_message_t mesg) | |||
1028 | 1030 | ||
1029 | static int piix_pci_device_resume(struct pci_dev *pdev) | 1031 | static int piix_pci_device_resume(struct pci_dev *pdev) |
1030 | { | 1032 | { |
1031 | struct ata_host *host = dev_get_drvdata(&pdev->dev); | 1033 | struct ata_host *host = pci_get_drvdata(pdev); |
1032 | unsigned long flags; | 1034 | unsigned long flags; |
1033 | int rc; | 1035 | int rc; |
1034 | 1036 | ||
@@ -1751,7 +1753,7 @@ static int piix_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
1751 | 1753 | ||
1752 | static void piix_remove_one(struct pci_dev *pdev) | 1754 | static void piix_remove_one(struct pci_dev *pdev) |
1753 | { | 1755 | { |
1754 | struct ata_host *host = dev_get_drvdata(&pdev->dev); | 1756 | struct ata_host *host = pci_get_drvdata(pdev); |
1755 | struct piix_host_priv *hpriv = host->private_data; | 1757 | struct piix_host_priv *hpriv = host->private_data; |
1756 | 1758 | ||
1757 | pci_write_config_dword(pdev, PIIX_IOCFG, hpriv->saved_iocfg); | 1759 | pci_write_config_dword(pdev, PIIX_IOCFG, hpriv->saved_iocfg); |
diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c index a70ff154f586..acfd0f711069 100644 --- a/drivers/ata/libahci.c +++ b/drivers/ata/libahci.c | |||
@@ -173,6 +173,7 @@ struct ata_port_operations ahci_ops = { | |||
173 | .em_store = ahci_led_store, | 173 | .em_store = ahci_led_store, |
174 | .sw_activity_show = ahci_activity_show, | 174 | .sw_activity_show = ahci_activity_show, |
175 | .sw_activity_store = ahci_activity_store, | 175 | .sw_activity_store = ahci_activity_store, |
176 | .transmit_led_message = ahci_transmit_led_message, | ||
176 | #ifdef CONFIG_PM | 177 | #ifdef CONFIG_PM |
177 | .port_suspend = ahci_port_suspend, | 178 | .port_suspend = ahci_port_suspend, |
178 | .port_resume = ahci_port_resume, | 179 | .port_resume = ahci_port_resume, |
@@ -774,7 +775,7 @@ static void ahci_start_port(struct ata_port *ap) | |||
774 | 775 | ||
775 | /* EM Transmit bit maybe busy during init */ | 776 | /* EM Transmit bit maybe busy during init */ |
776 | for (i = 0; i < EM_MAX_RETRY; i++) { | 777 | for (i = 0; i < EM_MAX_RETRY; i++) { |
777 | rc = ahci_transmit_led_message(ap, | 778 | rc = ap->ops->transmit_led_message(ap, |
778 | emp->led_state, | 779 | emp->led_state, |
779 | 4); | 780 | 4); |
780 | if (rc == -EBUSY) | 781 | if (rc == -EBUSY) |
@@ -915,7 +916,7 @@ static void ahci_sw_activity_blink(unsigned long arg) | |||
915 | led_message |= (1 << 16); | 916 | led_message |= (1 << 16); |
916 | } | 917 | } |
917 | spin_unlock_irqrestore(ap->lock, flags); | 918 | spin_unlock_irqrestore(ap->lock, flags); |
918 | ahci_transmit_led_message(ap, led_message, 4); | 919 | ap->ops->transmit_led_message(ap, led_message, 4); |
919 | } | 920 | } |
920 | 921 | ||
921 | static void ahci_init_sw_activity(struct ata_link *link) | 922 | static void ahci_init_sw_activity(struct ata_link *link) |
@@ -1044,7 +1045,7 @@ static ssize_t ahci_led_store(struct ata_port *ap, const char *buf, | |||
1044 | if (emp->blink_policy) | 1045 | if (emp->blink_policy) |
1045 | state &= ~EM_MSG_LED_VALUE_ACTIVITY; | 1046 | state &= ~EM_MSG_LED_VALUE_ACTIVITY; |
1046 | 1047 | ||
1047 | return ahci_transmit_led_message(ap, state, size); | 1048 | return ap->ops->transmit_led_message(ap, state, size); |
1048 | } | 1049 | } |
1049 | 1050 | ||
1050 | static ssize_t ahci_activity_store(struct ata_device *dev, enum sw_activity val) | 1051 | static ssize_t ahci_activity_store(struct ata_device *dev, enum sw_activity val) |
@@ -1063,7 +1064,7 @@ static ssize_t ahci_activity_store(struct ata_device *dev, enum sw_activity val) | |||
1063 | /* set the LED to OFF */ | 1064 | /* set the LED to OFF */ |
1064 | port_led_state &= EM_MSG_LED_VALUE_OFF; | 1065 | port_led_state &= EM_MSG_LED_VALUE_OFF; |
1065 | port_led_state |= (ap->port_no | (link->pmp << 8)); | 1066 | port_led_state |= (ap->port_no | (link->pmp << 8)); |
1066 | ahci_transmit_led_message(ap, port_led_state, 4); | 1067 | ap->ops->transmit_led_message(ap, port_led_state, 4); |
1067 | } else { | 1068 | } else { |
1068 | link->flags |= ATA_LFLAG_SW_ACTIVITY; | 1069 | link->flags |= ATA_LFLAG_SW_ACTIVITY; |
1069 | if (val == BLINK_OFF) { | 1070 | if (val == BLINK_OFF) { |
@@ -1071,7 +1072,7 @@ static ssize_t ahci_activity_store(struct ata_device *dev, enum sw_activity val) | |||
1071 | port_led_state &= EM_MSG_LED_VALUE_OFF; | 1072 | port_led_state &= EM_MSG_LED_VALUE_OFF; |
1072 | port_led_state |= (ap->port_no | (link->pmp << 8)); | 1073 | port_led_state |= (ap->port_no | (link->pmp << 8)); |
1073 | port_led_state |= EM_MSG_LED_VALUE_ON; /* check this */ | 1074 | port_led_state |= EM_MSG_LED_VALUE_ON; /* check this */ |
1074 | ahci_transmit_led_message(ap, port_led_state, 4); | 1075 | ap->ops->transmit_led_message(ap, port_led_state, 4); |
1075 | } | 1076 | } |
1076 | } | 1077 | } |
1077 | emp->blink_policy = val; | 1078 | emp->blink_policy = val; |
@@ -1412,7 +1413,7 @@ static int ahci_hardreset(struct ata_link *link, unsigned int *class, | |||
1412 | 1413 | ||
1413 | /* clear D2H reception area to properly wait for D2H FIS */ | 1414 | /* clear D2H reception area to properly wait for D2H FIS */ |
1414 | ata_tf_init(link->device, &tf); | 1415 | ata_tf_init(link->device, &tf); |
1415 | tf.command = 0x80; | 1416 | tf.command = ATA_BUSY; |
1416 | ata_tf_to_fis(&tf, 0, 0, d2h_fis); | 1417 | ata_tf_to_fis(&tf, 0, 0, d2h_fis); |
1417 | 1418 | ||
1418 | rc = sata_link_hardreset(link, timing, deadline, &online, | 1419 | rc = sata_link_hardreset(link, timing, deadline, &online, |
@@ -1560,8 +1561,7 @@ static void ahci_error_intr(struct ata_port *ap, u32 irq_stat) | |||
1560 | u32 fbs = readl(port_mmio + PORT_FBS); | 1561 | u32 fbs = readl(port_mmio + PORT_FBS); |
1561 | int pmp = fbs >> PORT_FBS_DWE_OFFSET; | 1562 | int pmp = fbs >> PORT_FBS_DWE_OFFSET; |
1562 | 1563 | ||
1563 | if ((fbs & PORT_FBS_SDE) && (pmp < ap->nr_pmp_links) && | 1564 | if ((fbs & PORT_FBS_SDE) && (pmp < ap->nr_pmp_links)) { |
1564 | ata_link_online(&ap->pmp_link[pmp])) { | ||
1565 | link = &ap->pmp_link[pmp]; | 1565 | link = &ap->pmp_link[pmp]; |
1566 | fbs_need_dec = true; | 1566 | fbs_need_dec = true; |
1567 | } | 1567 | } |
@@ -2234,6 +2234,16 @@ static int ahci_port_start(struct ata_port *ap) | |||
2234 | if (!pp) | 2234 | if (!pp) |
2235 | return -ENOMEM; | 2235 | return -ENOMEM; |
2236 | 2236 | ||
2237 | if (ap->host->n_ports > 1) { | ||
2238 | pp->irq_desc = devm_kzalloc(dev, 8, GFP_KERNEL); | ||
2239 | if (!pp->irq_desc) { | ||
2240 | devm_kfree(dev, pp); | ||
2241 | return -ENOMEM; | ||
2242 | } | ||
2243 | snprintf(pp->irq_desc, 8, | ||
2244 | "%s%d", dev_driver_string(dev), ap->port_no); | ||
2245 | } | ||
2246 | |||
2237 | /* check FBS capability */ | 2247 | /* check FBS capability */ |
2238 | if ((hpriv->cap & HOST_CAP_FBS) && sata_pmp_supported(ap)) { | 2248 | if ((hpriv->cap & HOST_CAP_FBS) && sata_pmp_supported(ap)) { |
2239 | void __iomem *port_mmio = ahci_port_base(ap); | 2249 | void __iomem *port_mmio = ahci_port_base(ap); |
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index 6e458a40a93b..c24354d44f3d 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c | |||
@@ -2401,7 +2401,7 @@ int ata_dev_configure(struct ata_device *dev) | |||
2401 | cdb_intr_string = ", CDB intr"; | 2401 | cdb_intr_string = ", CDB intr"; |
2402 | } | 2402 | } |
2403 | 2403 | ||
2404 | if (atapi_dmadir || atapi_id_dmadir(dev->id)) { | 2404 | if (atapi_dmadir || (dev->horkage & ATA_HORKAGE_ATAPI_DMADIR) || atapi_id_dmadir(dev->id)) { |
2405 | dev->flags |= ATA_DFLAG_DMADIR; | 2405 | dev->flags |= ATA_DFLAG_DMADIR; |
2406 | dma_dir_string = ", DMADIR"; | 2406 | dma_dir_string = ", DMADIR"; |
2407 | } | 2407 | } |
@@ -5642,6 +5642,7 @@ struct ata_port *ata_port_alloc(struct ata_host *host) | |||
5642 | ap->pflags |= ATA_PFLAG_INITIALIZING | ATA_PFLAG_FROZEN; | 5642 | ap->pflags |= ATA_PFLAG_INITIALIZING | ATA_PFLAG_FROZEN; |
5643 | ap->lock = &host->lock; | 5643 | ap->lock = &host->lock; |
5644 | ap->print_id = -1; | 5644 | ap->print_id = -1; |
5645 | ap->local_port_no = -1; | ||
5645 | ap->host = host; | 5646 | ap->host = host; |
5646 | ap->dev = host->dev; | 5647 | ap->dev = host->dev; |
5647 | 5648 | ||
@@ -6132,9 +6133,10 @@ int ata_host_register(struct ata_host *host, struct scsi_host_template *sht) | |||
6132 | kfree(host->ports[i]); | 6133 | kfree(host->ports[i]); |
6133 | 6134 | ||
6134 | /* give ports names and add SCSI hosts */ | 6135 | /* give ports names and add SCSI hosts */ |
6135 | for (i = 0; i < host->n_ports; i++) | 6136 | for (i = 0; i < host->n_ports; i++) { |
6136 | host->ports[i]->print_id = atomic_inc_return(&ata_print_id); | 6137 | host->ports[i]->print_id = atomic_inc_return(&ata_print_id); |
6137 | 6138 | host->ports[i]->local_port_no = i + 1; | |
6139 | } | ||
6138 | 6140 | ||
6139 | /* Create associated sysfs transport objects */ | 6141 | /* Create associated sysfs transport objects */ |
6140 | for (i = 0; i < host->n_ports; i++) { | 6142 | for (i = 0; i < host->n_ports; i++) { |
@@ -6502,6 +6504,7 @@ static int __init ata_parse_force_one(char **cur, | |||
6502 | { "nosrst", .lflags = ATA_LFLAG_NO_SRST }, | 6504 | { "nosrst", .lflags = ATA_LFLAG_NO_SRST }, |
6503 | { "norst", .lflags = ATA_LFLAG_NO_HRST | ATA_LFLAG_NO_SRST }, | 6505 | { "norst", .lflags = ATA_LFLAG_NO_HRST | ATA_LFLAG_NO_SRST }, |
6504 | { "rstonce", .lflags = ATA_LFLAG_RST_ONCE }, | 6506 | { "rstonce", .lflags = ATA_LFLAG_RST_ONCE }, |
6507 | { "atapi_dmadir", .horkage_on = ATA_HORKAGE_ATAPI_DMADIR }, | ||
6505 | }; | 6508 | }; |
6506 | char *start = *cur, *p = *cur; | 6509 | char *start = *cur, *p = *cur; |
6507 | char *id, *val, *endp; | 6510 | char *id, *val, *endp; |
diff --git a/drivers/ata/libata-pmp.c b/drivers/ata/libata-pmp.c index 61c59ee45ce9..1c41722bb7e2 100644 --- a/drivers/ata/libata-pmp.c +++ b/drivers/ata/libata-pmp.c | |||
@@ -389,9 +389,13 @@ static void sata_pmp_quirks(struct ata_port *ap) | |||
389 | /* link reports offline after LPM */ | 389 | /* link reports offline after LPM */ |
390 | link->flags |= ATA_LFLAG_NO_LPM; | 390 | link->flags |= ATA_LFLAG_NO_LPM; |
391 | 391 | ||
392 | /* Class code report is unreliable. */ | 392 | /* |
393 | * Class code report is unreliable and SRST times | ||
394 | * out under certain configurations. | ||
395 | */ | ||
393 | if (link->pmp < 5) | 396 | if (link->pmp < 5) |
394 | link->flags |= ATA_LFLAG_ASSUME_ATA; | 397 | link->flags |= ATA_LFLAG_NO_SRST | |
398 | ATA_LFLAG_ASSUME_ATA; | ||
395 | 399 | ||
396 | /* port 5 is for SEMB device and it doesn't like SRST */ | 400 | /* port 5 is for SEMB device and it doesn't like SRST */ |
397 | if (link->pmp == 5) | 401 | if (link->pmp == 5) |
@@ -399,20 +403,17 @@ static void sata_pmp_quirks(struct ata_port *ap) | |||
399 | ATA_LFLAG_ASSUME_SEMB; | 403 | ATA_LFLAG_ASSUME_SEMB; |
400 | } | 404 | } |
401 | } else if (vendor == 0x1095 && devid == 0x4723) { | 405 | } else if (vendor == 0x1095 && devid == 0x4723) { |
402 | /* sil4723 quirks */ | 406 | /* |
403 | ata_for_each_link(link, ap, EDGE) { | 407 | * sil4723 quirks |
404 | /* link reports offline after LPM */ | 408 | * |
405 | link->flags |= ATA_LFLAG_NO_LPM; | 409 | * Link reports offline after LPM. Class code report is |
406 | 410 | * unreliable. SIMG PMPs never got SRST reliable and the | |
407 | /* class code report is unreliable */ | 411 | * config device at port 2 locks up on SRST. |
408 | if (link->pmp < 2) | 412 | */ |
409 | link->flags |= ATA_LFLAG_ASSUME_ATA; | 413 | ata_for_each_link(link, ap, EDGE) |
410 | 414 | link->flags |= ATA_LFLAG_NO_LPM | | |
411 | /* the config device at port 2 locks up on SRST */ | 415 | ATA_LFLAG_NO_SRST | |
412 | if (link->pmp == 2) | 416 | ATA_LFLAG_ASSUME_ATA; |
413 | link->flags |= ATA_LFLAG_NO_SRST | | ||
414 | ATA_LFLAG_ASSUME_ATA; | ||
415 | } | ||
416 | } else if (vendor == 0x1095 && devid == 0x4726) { | 417 | } else if (vendor == 0x1095 && devid == 0x4726) { |
417 | /* sil4726 quirks */ | 418 | /* sil4726 quirks */ |
418 | ata_for_each_link(link, ap, EDGE) { | 419 | ata_for_each_link(link, ap, EDGE) { |
diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c index 0101af541436..83c08907e042 100644 --- a/drivers/ata/libata-scsi.c +++ b/drivers/ata/libata-scsi.c | |||
@@ -849,25 +849,24 @@ static void ata_to_sense_error(unsigned id, u8 drv_stat, u8 drv_err, u8 *sk, | |||
849 | /* Bad address mark */ | 849 | /* Bad address mark */ |
850 | {0x01, MEDIUM_ERROR, 0x13, 0x00}, // Address mark not found Address mark not found for data field | 850 | {0x01, MEDIUM_ERROR, 0x13, 0x00}, // Address mark not found Address mark not found for data field |
851 | /* TRK0 */ | 851 | /* TRK0 */ |
852 | {0x02, HARDWARE_ERROR, 0x00, 0x00}, // Track 0 not found Hardware error | 852 | {0x02, HARDWARE_ERROR, 0x00, 0x00}, // Track 0 not found Hardware error |
853 | /* Abort & !ICRC */ | 853 | /* Abort: 0x04 is not translated here, see below */ |
854 | {0x04, ABORTED_COMMAND, 0x00, 0x00}, // Aborted command Aborted command | ||
855 | /* Media change request */ | 854 | /* Media change request */ |
856 | {0x08, NOT_READY, 0x04, 0x00}, // Media change request FIXME: faking offline | 855 | {0x08, NOT_READY, 0x04, 0x00}, // Media change request FIXME: faking offline |
857 | /* SRV */ | 856 | /* SRV/IDNF */ |
858 | {0x10, ABORTED_COMMAND, 0x14, 0x00}, // ID not found Recorded entity not found | 857 | {0x10, ILLEGAL_REQUEST, 0x21, 0x00}, // ID not found Logical address out of range |
859 | /* Media change */ | 858 | /* MC */ |
860 | {0x08, NOT_READY, 0x04, 0x00}, // Media change FIXME: faking offline | 859 | {0x20, UNIT_ATTENTION, 0x28, 0x00}, // Media Changed Not ready to ready change, medium may have changed |
861 | /* ECC */ | 860 | /* ECC */ |
862 | {0x40, MEDIUM_ERROR, 0x11, 0x04}, // Uncorrectable ECC error Unrecovered read error | 861 | {0x40, MEDIUM_ERROR, 0x11, 0x04}, // Uncorrectable ECC error Unrecovered read error |
863 | /* BBD - block marked bad */ | 862 | /* BBD - block marked bad */ |
864 | {0x80, MEDIUM_ERROR, 0x11, 0x04}, // Block marked bad Medium error, unrecovered read error | 863 | {0x80, MEDIUM_ERROR, 0x11, 0x04}, // Block marked bad Medium error, unrecovered read error |
865 | {0xFF, 0xFF, 0xFF, 0xFF}, // END mark | 864 | {0xFF, 0xFF, 0xFF, 0xFF}, // END mark |
866 | }; | 865 | }; |
867 | static const unsigned char stat_table[][4] = { | 866 | static const unsigned char stat_table[][4] = { |
868 | /* Must be first because BUSY means no other bits valid */ | 867 | /* Must be first because BUSY means no other bits valid */ |
869 | {0x80, ABORTED_COMMAND, 0x47, 0x00}, // Busy, fake parity for now | 868 | {0x80, ABORTED_COMMAND, 0x47, 0x00}, // Busy, fake parity for now |
870 | {0x20, HARDWARE_ERROR, 0x00, 0x00}, // Device fault | 869 | {0x20, HARDWARE_ERROR, 0x44, 0x00}, // Device fault, internal target failure |
871 | {0x08, ABORTED_COMMAND, 0x47, 0x00}, // Timed out in xfer, fake parity for now | 870 | {0x08, ABORTED_COMMAND, 0x47, 0x00}, // Timed out in xfer, fake parity for now |
872 | {0x04, RECOVERED_ERROR, 0x11, 0x00}, // Recovered ECC error Medium error, recovered | 871 | {0x04, RECOVERED_ERROR, 0x11, 0x00}, // Recovered ECC error Medium error, recovered |
873 | {0xFF, 0xFF, 0xFF, 0xFF}, // END mark | 872 | {0xFF, 0xFF, 0xFF, 0xFF}, // END mark |
@@ -892,13 +891,13 @@ static void ata_to_sense_error(unsigned id, u8 drv_stat, u8 drv_err, u8 *sk, | |||
892 | goto translate_done; | 891 | goto translate_done; |
893 | } | 892 | } |
894 | } | 893 | } |
895 | /* No immediate match */ | ||
896 | if (verbose) | ||
897 | printk(KERN_WARNING "ata%u: no sense translation for " | ||
898 | "error 0x%02x\n", id, drv_err); | ||
899 | } | 894 | } |
900 | 895 | ||
901 | /* Fall back to interpreting status bits */ | 896 | /* |
897 | * Fall back to interpreting status bits. Note that if the drv_err | ||
898 | * has only the ABRT bit set, we decode drv_stat. ABRT by itself | ||
899 | * is not descriptive enough. | ||
900 | */ | ||
902 | for (i = 0; stat_table[i][0] != 0xFF; i++) { | 901 | for (i = 0; stat_table[i][0] != 0xFF; i++) { |
903 | if (stat_table[i][0] & drv_stat) { | 902 | if (stat_table[i][0] & drv_stat) { |
904 | *sk = stat_table[i][1]; | 903 | *sk = stat_table[i][1]; |
@@ -907,13 +906,11 @@ static void ata_to_sense_error(unsigned id, u8 drv_stat, u8 drv_err, u8 *sk, | |||
907 | goto translate_done; | 906 | goto translate_done; |
908 | } | 907 | } |
909 | } | 908 | } |
910 | /* No error? Undecoded? */ | ||
911 | if (verbose) | ||
912 | printk(KERN_WARNING "ata%u: no sense translation for " | ||
913 | "status: 0x%02x\n", id, drv_stat); | ||
914 | 909 | ||
915 | /* We need a sensible error return here, which is tricky, and one | 910 | /* |
916 | that won't cause people to do things like return a disk wrongly */ | 911 | * We need a sensible error return here, which is tricky, and one |
912 | * that won't cause people to do things like return a disk wrongly. | ||
913 | */ | ||
917 | *sk = ABORTED_COMMAND; | 914 | *sk = ABORTED_COMMAND; |
918 | *asc = 0x00; | 915 | *asc = 0x00; |
919 | *ascq = 0x00; | 916 | *ascq = 0x00; |
diff --git a/drivers/ata/libata-transport.c b/drivers/ata/libata-transport.c index c04d393d20c1..077a856f5fd0 100644 --- a/drivers/ata/libata-transport.c +++ b/drivers/ata/libata-transport.c | |||
@@ -37,7 +37,7 @@ | |||
37 | #include "libata.h" | 37 | #include "libata.h" |
38 | #include "libata-transport.h" | 38 | #include "libata-transport.h" |
39 | 39 | ||
40 | #define ATA_PORT_ATTRS 2 | 40 | #define ATA_PORT_ATTRS 3 |
41 | #define ATA_LINK_ATTRS 3 | 41 | #define ATA_LINK_ATTRS 3 |
42 | #define ATA_DEV_ATTRS 9 | 42 | #define ATA_DEV_ATTRS 9 |
43 | 43 | ||
@@ -216,6 +216,7 @@ static DEVICE_ATTR(name, S_IRUGO, show_ata_port_##name, NULL) | |||
216 | 216 | ||
217 | ata_port_simple_attr(nr_pmp_links, nr_pmp_links, "%d\n", int); | 217 | ata_port_simple_attr(nr_pmp_links, nr_pmp_links, "%d\n", int); |
218 | ata_port_simple_attr(stats.idle_irq, idle_irq, "%ld\n", unsigned long); | 218 | ata_port_simple_attr(stats.idle_irq, idle_irq, "%ld\n", unsigned long); |
219 | ata_port_simple_attr(local_port_no, port_no, "%u\n", unsigned int); | ||
219 | 220 | ||
220 | static DECLARE_TRANSPORT_CLASS(ata_port_class, | 221 | static DECLARE_TRANSPORT_CLASS(ata_port_class, |
221 | "ata_port", NULL, NULL, NULL); | 222 | "ata_port", NULL, NULL, NULL); |
@@ -709,6 +710,7 @@ struct scsi_transport_template *ata_attach_transport(void) | |||
709 | count = 0; | 710 | count = 0; |
710 | SETUP_PORT_ATTRIBUTE(nr_pmp_links); | 711 | SETUP_PORT_ATTRIBUTE(nr_pmp_links); |
711 | SETUP_PORT_ATTRIBUTE(idle_irq); | 712 | SETUP_PORT_ATTRIBUTE(idle_irq); |
713 | SETUP_PORT_ATTRIBUTE(port_no); | ||
712 | BUG_ON(count > ATA_PORT_ATTRS); | 714 | BUG_ON(count > ATA_PORT_ATTRS); |
713 | i->port_attrs[count] = NULL; | 715 | i->port_attrs[count] = NULL; |
714 | 716 | ||
diff --git a/drivers/ata/libata-zpodd.c b/drivers/ata/libata-zpodd.c index 90b159b740b3..cd8daf47188b 100644 --- a/drivers/ata/libata-zpodd.c +++ b/drivers/ata/libata-zpodd.c | |||
@@ -32,13 +32,14 @@ struct zpodd { | |||
32 | 32 | ||
33 | static int eject_tray(struct ata_device *dev) | 33 | static int eject_tray(struct ata_device *dev) |
34 | { | 34 | { |
35 | struct ata_taskfile tf = {}; | 35 | struct ata_taskfile tf; |
36 | const char cdb[] = { GPCMD_START_STOP_UNIT, | 36 | const char cdb[] = { GPCMD_START_STOP_UNIT, |
37 | 0, 0, 0, | 37 | 0, 0, 0, |
38 | 0x02, /* LoEj */ | 38 | 0x02, /* LoEj */ |
39 | 0, 0, 0, 0, 0, 0, 0, | 39 | 0, 0, 0, 0, 0, 0, 0, |
40 | }; | 40 | }; |
41 | 41 | ||
42 | ata_tf_init(dev, &tf); | ||
42 | tf.flags = ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE; | 43 | tf.flags = ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE; |
43 | tf.command = ATA_CMD_PACKET; | 44 | tf.command = ATA_CMD_PACKET; |
44 | tf.protocol = ATAPI_PROT_NODATA; | 45 | tf.protocol = ATAPI_PROT_NODATA; |
@@ -52,8 +53,7 @@ static enum odd_mech_type zpodd_get_mech_type(struct ata_device *dev) | |||
52 | char buf[16]; | 53 | char buf[16]; |
53 | unsigned int ret; | 54 | unsigned int ret; |
54 | struct rm_feature_desc *desc = (void *)(buf + 8); | 55 | struct rm_feature_desc *desc = (void *)(buf + 8); |
55 | struct ata_taskfile tf = {}; | 56 | struct ata_taskfile tf; |
56 | |||
57 | char cdb[] = { GPCMD_GET_CONFIGURATION, | 57 | char cdb[] = { GPCMD_GET_CONFIGURATION, |
58 | 2, /* only 1 feature descriptor requested */ | 58 | 2, /* only 1 feature descriptor requested */ |
59 | 0, 3, /* 3, removable medium feature */ | 59 | 0, 3, /* 3, removable medium feature */ |
@@ -62,6 +62,7 @@ static enum odd_mech_type zpodd_get_mech_type(struct ata_device *dev) | |||
62 | 0, 0, 0, | 62 | 0, 0, 0, |
63 | }; | 63 | }; |
64 | 64 | ||
65 | ata_tf_init(dev, &tf); | ||
65 | tf.flags = ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE; | 66 | tf.flags = ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE; |
66 | tf.command = ATA_CMD_PACKET; | 67 | tf.command = ATA_CMD_PACKET; |
67 | tf.protocol = ATAPI_PROT_PIO; | 68 | tf.protocol = ATAPI_PROT_PIO; |
diff --git a/drivers/ata/pata_ali.c b/drivers/ata/pata_ali.c index 61da0694aecd..1b7b2ccabcff 100644 --- a/drivers/ata/pata_ali.c +++ b/drivers/ata/pata_ali.c | |||
@@ -592,7 +592,7 @@ static int ali_init_one(struct pci_dev *pdev, const struct pci_device_id *id) | |||
592 | #ifdef CONFIG_PM | 592 | #ifdef CONFIG_PM |
593 | static int ali_reinit_one(struct pci_dev *pdev) | 593 | static int ali_reinit_one(struct pci_dev *pdev) |
594 | { | 594 | { |
595 | struct ata_host *host = dev_get_drvdata(&pdev->dev); | 595 | struct ata_host *host = pci_get_drvdata(pdev); |
596 | int rc; | 596 | int rc; |
597 | 597 | ||
598 | rc = ata_pci_device_do_resume(pdev); | 598 | rc = ata_pci_device_do_resume(pdev); |
diff --git a/drivers/ata/pata_amd.c b/drivers/ata/pata_amd.c index 82a08922afcd..d23e2b3ca0b6 100644 --- a/drivers/ata/pata_amd.c +++ b/drivers/ata/pata_amd.c | |||
@@ -578,7 +578,7 @@ static int amd_init_one(struct pci_dev *pdev, const struct pci_device_id *id) | |||
578 | #ifdef CONFIG_PM | 578 | #ifdef CONFIG_PM |
579 | static int amd_reinit_one(struct pci_dev *pdev) | 579 | static int amd_reinit_one(struct pci_dev *pdev) |
580 | { | 580 | { |
581 | struct ata_host *host = dev_get_drvdata(&pdev->dev); | 581 | struct ata_host *host = pci_get_drvdata(pdev); |
582 | int rc; | 582 | int rc; |
583 | 583 | ||
584 | rc = ata_pci_device_do_resume(pdev); | 584 | rc = ata_pci_device_do_resume(pdev); |
diff --git a/drivers/ata/pata_arasan_cf.c b/drivers/ata/pata_arasan_cf.c index 7638121cb5d1..848ed3254ddd 100644 --- a/drivers/ata/pata_arasan_cf.c +++ b/drivers/ata/pata_arasan_cf.c | |||
@@ -908,7 +908,7 @@ free_clk: | |||
908 | 908 | ||
909 | static int arasan_cf_remove(struct platform_device *pdev) | 909 | static int arasan_cf_remove(struct platform_device *pdev) |
910 | { | 910 | { |
911 | struct ata_host *host = dev_get_drvdata(&pdev->dev); | 911 | struct ata_host *host = platform_get_drvdata(pdev); |
912 | struct arasan_cf_dev *acdev = host->ports[0]->private_data; | 912 | struct arasan_cf_dev *acdev = host->ports[0]->private_data; |
913 | 913 | ||
914 | ata_host_detach(host); | 914 | ata_host_detach(host); |
diff --git a/drivers/ata/pata_artop.c b/drivers/ata/pata_artop.c index 74b215c09b21..1581dee2967a 100644 --- a/drivers/ata/pata_artop.c +++ b/drivers/ata/pata_artop.c | |||
@@ -426,7 +426,7 @@ static const struct pci_device_id artop_pci_tbl[] = { | |||
426 | #ifdef CONFIG_PM | 426 | #ifdef CONFIG_PM |
427 | static int atp8xx_reinit_one(struct pci_dev *pdev) | 427 | static int atp8xx_reinit_one(struct pci_dev *pdev) |
428 | { | 428 | { |
429 | struct ata_host *host = dev_get_drvdata(&pdev->dev); | 429 | struct ata_host *host = pci_get_drvdata(pdev); |
430 | int rc; | 430 | int rc; |
431 | 431 | ||
432 | rc = ata_pci_device_do_resume(pdev); | 432 | rc = ata_pci_device_do_resume(pdev); |
diff --git a/drivers/ata/pata_at91.c b/drivers/ata/pata_at91.c index 033f3f4c20ad..5364f97b42c6 100644 --- a/drivers/ata/pata_at91.c +++ b/drivers/ata/pata_at91.c | |||
@@ -422,7 +422,7 @@ err_put: | |||
422 | 422 | ||
423 | static int pata_at91_remove(struct platform_device *pdev) | 423 | static int pata_at91_remove(struct platform_device *pdev) |
424 | { | 424 | { |
425 | struct ata_host *host = dev_get_drvdata(&pdev->dev); | 425 | struct ata_host *host = platform_get_drvdata(pdev); |
426 | struct at91_ide_info *info; | 426 | struct at91_ide_info *info; |
427 | 427 | ||
428 | if (!host) | 428 | if (!host) |
diff --git a/drivers/ata/pata_atp867x.c b/drivers/ata/pata_atp867x.c index 041f50d53240..2ca5026f2c15 100644 --- a/drivers/ata/pata_atp867x.c +++ b/drivers/ata/pata_atp867x.c | |||
@@ -534,7 +534,7 @@ err_out: | |||
534 | #ifdef CONFIG_PM | 534 | #ifdef CONFIG_PM |
535 | static int atp867x_reinit_one(struct pci_dev *pdev) | 535 | static int atp867x_reinit_one(struct pci_dev *pdev) |
536 | { | 536 | { |
537 | struct ata_host *host = dev_get_drvdata(&pdev->dev); | 537 | struct ata_host *host = pci_get_drvdata(pdev); |
538 | int rc; | 538 | int rc; |
539 | 539 | ||
540 | rc = ata_pci_device_do_resume(pdev); | 540 | rc = ata_pci_device_do_resume(pdev); |
diff --git a/drivers/ata/pata_bf54x.c b/drivers/ata/pata_bf54x.c index 8d43510c6bec..ba0d8a29dc23 100644 --- a/drivers/ata/pata_bf54x.c +++ b/drivers/ata/pata_bf54x.c | |||
@@ -1596,7 +1596,7 @@ static int bfin_atapi_probe(struct platform_device *pdev) | |||
1596 | return -ENODEV; | 1596 | return -ENODEV; |
1597 | } | 1597 | } |
1598 | 1598 | ||
1599 | dev_set_drvdata(&pdev->dev, host); | 1599 | platform_set_drvdata(pdev, host); |
1600 | 1600 | ||
1601 | return 0; | 1601 | return 0; |
1602 | } | 1602 | } |
@@ -1610,11 +1610,9 @@ static int bfin_atapi_probe(struct platform_device *pdev) | |||
1610 | */ | 1610 | */ |
1611 | static int bfin_atapi_remove(struct platform_device *pdev) | 1611 | static int bfin_atapi_remove(struct platform_device *pdev) |
1612 | { | 1612 | { |
1613 | struct device *dev = &pdev->dev; | 1613 | struct ata_host *host = platform_get_drvdata(pdev); |
1614 | struct ata_host *host = dev_get_drvdata(dev); | ||
1615 | 1614 | ||
1616 | ata_host_detach(host); | 1615 | ata_host_detach(host); |
1617 | dev_set_drvdata(&pdev->dev, NULL); | ||
1618 | 1616 | ||
1619 | peripheral_free_list(atapi_io_port); | 1617 | peripheral_free_list(atapi_io_port); |
1620 | 1618 | ||
@@ -1624,7 +1622,7 @@ static int bfin_atapi_remove(struct platform_device *pdev) | |||
1624 | #ifdef CONFIG_PM | 1622 | #ifdef CONFIG_PM |
1625 | static int bfin_atapi_suspend(struct platform_device *pdev, pm_message_t state) | 1623 | static int bfin_atapi_suspend(struct platform_device *pdev, pm_message_t state) |
1626 | { | 1624 | { |
1627 | struct ata_host *host = dev_get_drvdata(&pdev->dev); | 1625 | struct ata_host *host = platform_get_drvdata(pdev); |
1628 | if (host) | 1626 | if (host) |
1629 | return ata_host_suspend(host, state); | 1627 | return ata_host_suspend(host, state); |
1630 | else | 1628 | else |
@@ -1633,7 +1631,7 @@ static int bfin_atapi_suspend(struct platform_device *pdev, pm_message_t state) | |||
1633 | 1631 | ||
1634 | static int bfin_atapi_resume(struct platform_device *pdev) | 1632 | static int bfin_atapi_resume(struct platform_device *pdev) |
1635 | { | 1633 | { |
1636 | struct ata_host *host = dev_get_drvdata(&pdev->dev); | 1634 | struct ata_host *host = platform_get_drvdata(pdev); |
1637 | int ret; | 1635 | int ret; |
1638 | 1636 | ||
1639 | if (host) { | 1637 | if (host) { |
diff --git a/drivers/ata/pata_cmd640.c b/drivers/ata/pata_cmd640.c index 504b98b58e19..8fb69e5ca1b7 100644 --- a/drivers/ata/pata_cmd640.c +++ b/drivers/ata/pata_cmd640.c | |||
@@ -235,7 +235,7 @@ static int cmd640_init_one(struct pci_dev *pdev, const struct pci_device_id *id) | |||
235 | #ifdef CONFIG_PM | 235 | #ifdef CONFIG_PM |
236 | static int cmd640_reinit_one(struct pci_dev *pdev) | 236 | static int cmd640_reinit_one(struct pci_dev *pdev) |
237 | { | 237 | { |
238 | struct ata_host *host = dev_get_drvdata(&pdev->dev); | 238 | struct ata_host *host = pci_get_drvdata(pdev); |
239 | int rc; | 239 | int rc; |
240 | 240 | ||
241 | rc = ata_pci_device_do_resume(pdev); | 241 | rc = ata_pci_device_do_resume(pdev); |
diff --git a/drivers/ata/pata_cmd64x.c b/drivers/ata/pata_cmd64x.c index 2949cfc2dd31..1275a8d4dedc 100644 --- a/drivers/ata/pata_cmd64x.c +++ b/drivers/ata/pata_cmd64x.c | |||
@@ -491,7 +491,7 @@ static int cmd64x_init_one(struct pci_dev *pdev, const struct pci_device_id *id) | |||
491 | #ifdef CONFIG_PM | 491 | #ifdef CONFIG_PM |
492 | static int cmd64x_reinit_one(struct pci_dev *pdev) | 492 | static int cmd64x_reinit_one(struct pci_dev *pdev) |
493 | { | 493 | { |
494 | struct ata_host *host = dev_get_drvdata(&pdev->dev); | 494 | struct ata_host *host = pci_get_drvdata(pdev); |
495 | int rc; | 495 | int rc; |
496 | 496 | ||
497 | rc = ata_pci_device_do_resume(pdev); | 497 | rc = ata_pci_device_do_resume(pdev); |
diff --git a/drivers/ata/pata_cs5520.c b/drivers/ata/pata_cs5520.c index bfcf377e8f77..f10baabbf5db 100644 --- a/drivers/ata/pata_cs5520.c +++ b/drivers/ata/pata_cs5520.c | |||
@@ -241,7 +241,7 @@ static int cs5520_init_one(struct pci_dev *pdev, const struct pci_device_id *id) | |||
241 | 241 | ||
242 | static int cs5520_reinit_one(struct pci_dev *pdev) | 242 | static int cs5520_reinit_one(struct pci_dev *pdev) |
243 | { | 243 | { |
244 | struct ata_host *host = dev_get_drvdata(&pdev->dev); | 244 | struct ata_host *host = pci_get_drvdata(pdev); |
245 | u8 pcicfg; | 245 | u8 pcicfg; |
246 | int rc; | 246 | int rc; |
247 | 247 | ||
@@ -269,7 +269,7 @@ static int cs5520_reinit_one(struct pci_dev *pdev) | |||
269 | 269 | ||
270 | static int cs5520_pci_device_suspend(struct pci_dev *pdev, pm_message_t mesg) | 270 | static int cs5520_pci_device_suspend(struct pci_dev *pdev, pm_message_t mesg) |
271 | { | 271 | { |
272 | struct ata_host *host = dev_get_drvdata(&pdev->dev); | 272 | struct ata_host *host = pci_get_drvdata(pdev); |
273 | int rc = 0; | 273 | int rc = 0; |
274 | 274 | ||
275 | rc = ata_host_suspend(host, mesg); | 275 | rc = ata_host_suspend(host, mesg); |
diff --git a/drivers/ata/pata_cs5530.c b/drivers/ata/pata_cs5530.c index 48389ae0b330..f07f2296acdc 100644 --- a/drivers/ata/pata_cs5530.c +++ b/drivers/ata/pata_cs5530.c | |||
@@ -330,7 +330,7 @@ static int cs5530_init_one(struct pci_dev *pdev, const struct pci_device_id *id) | |||
330 | #ifdef CONFIG_PM | 330 | #ifdef CONFIG_PM |
331 | static int cs5530_reinit_one(struct pci_dev *pdev) | 331 | static int cs5530_reinit_one(struct pci_dev *pdev) |
332 | { | 332 | { |
333 | struct ata_host *host = dev_get_drvdata(&pdev->dev); | 333 | struct ata_host *host = pci_get_drvdata(pdev); |
334 | int rc; | 334 | int rc; |
335 | 335 | ||
336 | rc = ata_pci_device_do_resume(pdev); | 336 | rc = ata_pci_device_do_resume(pdev); |
diff --git a/drivers/ata/pata_hpt366.c b/drivers/ata/pata_hpt366.c index 4be884a9f5ed..35b521348d31 100644 --- a/drivers/ata/pata_hpt366.c +++ b/drivers/ata/pata_hpt366.c | |||
@@ -390,7 +390,7 @@ static int hpt36x_init_one(struct pci_dev *dev, const struct pci_device_id *id) | |||
390 | #ifdef CONFIG_PM | 390 | #ifdef CONFIG_PM |
391 | static int hpt36x_reinit_one(struct pci_dev *dev) | 391 | static int hpt36x_reinit_one(struct pci_dev *dev) |
392 | { | 392 | { |
393 | struct ata_host *host = dev_get_drvdata(&dev->dev); | 393 | struct ata_host *host = pci_get_drvdata(dev); |
394 | int rc; | 394 | int rc; |
395 | 395 | ||
396 | rc = ata_pci_device_do_resume(dev); | 396 | rc = ata_pci_device_do_resume(dev); |
diff --git a/drivers/ata/pata_hpt3x3.c b/drivers/ata/pata_hpt3x3.c index 76c9314bb824..85cf2861e0b7 100644 --- a/drivers/ata/pata_hpt3x3.c +++ b/drivers/ata/pata_hpt3x3.c | |||
@@ -253,7 +253,7 @@ static int hpt3x3_init_one(struct pci_dev *pdev, const struct pci_device_id *id) | |||
253 | #ifdef CONFIG_PM | 253 | #ifdef CONFIG_PM |
254 | static int hpt3x3_reinit_one(struct pci_dev *dev) | 254 | static int hpt3x3_reinit_one(struct pci_dev *dev) |
255 | { | 255 | { |
256 | struct ata_host *host = dev_get_drvdata(&dev->dev); | 256 | struct ata_host *host = pci_get_drvdata(dev); |
257 | int rc; | 257 | int rc; |
258 | 258 | ||
259 | rc = ata_pci_device_do_resume(dev); | 259 | rc = ata_pci_device_do_resume(dev); |
diff --git a/drivers/ata/pata_imx.c b/drivers/ata/pata_imx.c index aa3d166e02eb..4ec7c04b3f82 100644 --- a/drivers/ata/pata_imx.c +++ b/drivers/ata/pata_imx.c | |||
@@ -177,7 +177,7 @@ err: | |||
177 | 177 | ||
178 | static int pata_imx_remove(struct platform_device *pdev) | 178 | static int pata_imx_remove(struct platform_device *pdev) |
179 | { | 179 | { |
180 | struct ata_host *host = dev_get_drvdata(&pdev->dev); | 180 | struct ata_host *host = platform_get_drvdata(pdev); |
181 | struct pata_imx_priv *priv = host->private_data; | 181 | struct pata_imx_priv *priv = host->private_data; |
182 | 182 | ||
183 | ata_host_detach(host); | 183 | ata_host_detach(host); |
diff --git a/drivers/ata/pata_it821x.c b/drivers/ata/pata_it821x.c index 9cc05d808ad5..581e04d80367 100644 --- a/drivers/ata/pata_it821x.c +++ b/drivers/ata/pata_it821x.c | |||
@@ -939,7 +939,7 @@ static int it821x_init_one(struct pci_dev *pdev, const struct pci_device_id *id) | |||
939 | #ifdef CONFIG_PM | 939 | #ifdef CONFIG_PM |
940 | static int it821x_reinit_one(struct pci_dev *pdev) | 940 | static int it821x_reinit_one(struct pci_dev *pdev) |
941 | { | 941 | { |
942 | struct ata_host *host = dev_get_drvdata(&pdev->dev); | 942 | struct ata_host *host = pci_get_drvdata(pdev); |
943 | int rc; | 943 | int rc; |
944 | 944 | ||
945 | rc = ata_pci_device_do_resume(pdev); | 945 | rc = ata_pci_device_do_resume(pdev); |
diff --git a/drivers/ata/pata_macio.c b/drivers/ata/pata_macio.c index e5725edcf515..c28d0645e851 100644 --- a/drivers/ata/pata_macio.c +++ b/drivers/ata/pata_macio.c | |||
@@ -1311,7 +1311,7 @@ static int pata_macio_pci_attach(struct pci_dev *pdev, | |||
1311 | 1311 | ||
1312 | static void pata_macio_pci_detach(struct pci_dev *pdev) | 1312 | static void pata_macio_pci_detach(struct pci_dev *pdev) |
1313 | { | 1313 | { |
1314 | struct ata_host *host = dev_get_drvdata(&pdev->dev); | 1314 | struct ata_host *host = pci_get_drvdata(pdev); |
1315 | 1315 | ||
1316 | ata_host_detach(host); | 1316 | ata_host_detach(host); |
1317 | } | 1317 | } |
@@ -1320,14 +1320,14 @@ static void pata_macio_pci_detach(struct pci_dev *pdev) | |||
1320 | 1320 | ||
1321 | static int pata_macio_pci_suspend(struct pci_dev *pdev, pm_message_t mesg) | 1321 | static int pata_macio_pci_suspend(struct pci_dev *pdev, pm_message_t mesg) |
1322 | { | 1322 | { |
1323 | struct ata_host *host = dev_get_drvdata(&pdev->dev); | 1323 | struct ata_host *host = pci_get_drvdata(pdev); |
1324 | 1324 | ||
1325 | return pata_macio_do_suspend(host->private_data, mesg); | 1325 | return pata_macio_do_suspend(host->private_data, mesg); |
1326 | } | 1326 | } |
1327 | 1327 | ||
1328 | static int pata_macio_pci_resume(struct pci_dev *pdev) | 1328 | static int pata_macio_pci_resume(struct pci_dev *pdev) |
1329 | { | 1329 | { |
1330 | struct ata_host *host = dev_get_drvdata(&pdev->dev); | 1330 | struct ata_host *host = pci_get_drvdata(pdev); |
1331 | 1331 | ||
1332 | return pata_macio_do_resume(host->private_data); | 1332 | return pata_macio_do_resume(host->private_data); |
1333 | } | 1333 | } |
diff --git a/drivers/ata/pata_mpc52xx.c b/drivers/ata/pata_mpc52xx.c index 3a8fb28b71f2..0024ced3e200 100644 --- a/drivers/ata/pata_mpc52xx.c +++ b/drivers/ata/pata_mpc52xx.c | |||
@@ -825,7 +825,7 @@ mpc52xx_ata_remove(struct platform_device *op) | |||
825 | static int | 825 | static int |
826 | mpc52xx_ata_suspend(struct platform_device *op, pm_message_t state) | 826 | mpc52xx_ata_suspend(struct platform_device *op, pm_message_t state) |
827 | { | 827 | { |
828 | struct ata_host *host = dev_get_drvdata(&op->dev); | 828 | struct ata_host *host = platform_get_drvdata(op); |
829 | 829 | ||
830 | return ata_host_suspend(host, state); | 830 | return ata_host_suspend(host, state); |
831 | } | 831 | } |
@@ -833,7 +833,7 @@ mpc52xx_ata_suspend(struct platform_device *op, pm_message_t state) | |||
833 | static int | 833 | static int |
834 | mpc52xx_ata_resume(struct platform_device *op) | 834 | mpc52xx_ata_resume(struct platform_device *op) |
835 | { | 835 | { |
836 | struct ata_host *host = dev_get_drvdata(&op->dev); | 836 | struct ata_host *host = platform_get_drvdata(op); |
837 | struct mpc52xx_ata_priv *priv = host->private_data; | 837 | struct mpc52xx_ata_priv *priv = host->private_data; |
838 | int rv; | 838 | int rv; |
839 | 839 | ||
diff --git a/drivers/ata/pata_ninja32.c b/drivers/ata/pata_ninja32.c index 12010ed596c4..9513e071040d 100644 --- a/drivers/ata/pata_ninja32.c +++ b/drivers/ata/pata_ninja32.c | |||
@@ -157,7 +157,7 @@ static int ninja32_init_one(struct pci_dev *dev, const struct pci_device_id *id) | |||
157 | 157 | ||
158 | static int ninja32_reinit_one(struct pci_dev *pdev) | 158 | static int ninja32_reinit_one(struct pci_dev *pdev) |
159 | { | 159 | { |
160 | struct ata_host *host = dev_get_drvdata(&pdev->dev); | 160 | struct ata_host *host = pci_get_drvdata(pdev); |
161 | int rc; | 161 | int rc; |
162 | 162 | ||
163 | rc = ata_pci_device_do_resume(pdev); | 163 | rc = ata_pci_device_do_resume(pdev); |
diff --git a/drivers/ata/pata_ns87415.c b/drivers/ata/pata_ns87415.c index 6f6fa1060505..16dc3a63a23d 100644 --- a/drivers/ata/pata_ns87415.c +++ b/drivers/ata/pata_ns87415.c | |||
@@ -389,7 +389,7 @@ static const struct pci_device_id ns87415_pci_tbl[] = { | |||
389 | #ifdef CONFIG_PM | 389 | #ifdef CONFIG_PM |
390 | static int ns87415_reinit_one(struct pci_dev *pdev) | 390 | static int ns87415_reinit_one(struct pci_dev *pdev) |
391 | { | 391 | { |
392 | struct ata_host *host = dev_get_drvdata(&pdev->dev); | 392 | struct ata_host *host = pci_get_drvdata(pdev); |
393 | int rc; | 393 | int rc; |
394 | 394 | ||
395 | rc = ata_pci_device_do_resume(pdev); | 395 | rc = ata_pci_device_do_resume(pdev); |
diff --git a/drivers/ata/pata_pdc2027x.c b/drivers/ata/pata_pdc2027x.c index c76e65927b0e..9d874c85d64d 100644 --- a/drivers/ata/pata_pdc2027x.c +++ b/drivers/ata/pata_pdc2027x.c | |||
@@ -765,7 +765,7 @@ static int pdc2027x_init_one(struct pci_dev *pdev, | |||
765 | #ifdef CONFIG_PM | 765 | #ifdef CONFIG_PM |
766 | static int pdc2027x_reinit_one(struct pci_dev *pdev) | 766 | static int pdc2027x_reinit_one(struct pci_dev *pdev) |
767 | { | 767 | { |
768 | struct ata_host *host = dev_get_drvdata(&pdev->dev); | 768 | struct ata_host *host = pci_get_drvdata(pdev); |
769 | unsigned int board_idx; | 769 | unsigned int board_idx; |
770 | int rc; | 770 | int rc; |
771 | 771 | ||
diff --git a/drivers/ata/pata_pxa.c b/drivers/ata/pata_pxa.c index b0ac9e0c5e01..942ef94b29e6 100644 --- a/drivers/ata/pata_pxa.c +++ b/drivers/ata/pata_pxa.c | |||
@@ -371,7 +371,7 @@ static int pxa_ata_probe(struct platform_device *pdev) | |||
371 | 371 | ||
372 | static int pxa_ata_remove(struct platform_device *pdev) | 372 | static int pxa_ata_remove(struct platform_device *pdev) |
373 | { | 373 | { |
374 | struct ata_host *host = dev_get_drvdata(&pdev->dev); | 374 | struct ata_host *host = platform_get_drvdata(pdev); |
375 | struct pata_pxa_data *data = host->ports[0]->private_data; | 375 | struct pata_pxa_data *data = host->ports[0]->private_data; |
376 | 376 | ||
377 | pxa_free_dma(data->dma_channel); | 377 | pxa_free_dma(data->dma_channel); |
diff --git a/drivers/ata/pata_rdc.c b/drivers/ata/pata_rdc.c index 6a8665574fee..79a970f05a2e 100644 --- a/drivers/ata/pata_rdc.c +++ b/drivers/ata/pata_rdc.c | |||
@@ -364,7 +364,7 @@ static int rdc_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
364 | 364 | ||
365 | static void rdc_remove_one(struct pci_dev *pdev) | 365 | static void rdc_remove_one(struct pci_dev *pdev) |
366 | { | 366 | { |
367 | struct ata_host *host = dev_get_drvdata(&pdev->dev); | 367 | struct ata_host *host = pci_get_drvdata(pdev); |
368 | struct rdc_host_priv *hpriv = host->private_data; | 368 | struct rdc_host_priv *hpriv = host->private_data; |
369 | 369 | ||
370 | pci_write_config_dword(pdev, 0x54, hpriv->saved_iocfg); | 370 | pci_write_config_dword(pdev, 0x54, hpriv->saved_iocfg); |
diff --git a/drivers/ata/pata_rz1000.c b/drivers/ata/pata_rz1000.c index 60f4de2dd47d..040b093617a4 100644 --- a/drivers/ata/pata_rz1000.c +++ b/drivers/ata/pata_rz1000.c | |||
@@ -105,7 +105,7 @@ static int rz1000_init_one (struct pci_dev *pdev, const struct pci_device_id *en | |||
105 | #ifdef CONFIG_PM | 105 | #ifdef CONFIG_PM |
106 | static int rz1000_reinit_one(struct pci_dev *pdev) | 106 | static int rz1000_reinit_one(struct pci_dev *pdev) |
107 | { | 107 | { |
108 | struct ata_host *host = dev_get_drvdata(&pdev->dev); | 108 | struct ata_host *host = pci_get_drvdata(pdev); |
109 | int rc; | 109 | int rc; |
110 | 110 | ||
111 | rc = ata_pci_device_do_resume(pdev); | 111 | rc = ata_pci_device_do_resume(pdev); |
diff --git a/drivers/ata/pata_serverworks.c b/drivers/ata/pata_serverworks.c index f3febbce6c46..96c6a79ef606 100644 --- a/drivers/ata/pata_serverworks.c +++ b/drivers/ata/pata_serverworks.c | |||
@@ -440,7 +440,7 @@ static int serverworks_init_one(struct pci_dev *pdev, const struct pci_device_id | |||
440 | #ifdef CONFIG_PM | 440 | #ifdef CONFIG_PM |
441 | static int serverworks_reinit_one(struct pci_dev *pdev) | 441 | static int serverworks_reinit_one(struct pci_dev *pdev) |
442 | { | 442 | { |
443 | struct ata_host *host = dev_get_drvdata(&pdev->dev); | 443 | struct ata_host *host = pci_get_drvdata(pdev); |
444 | int rc; | 444 | int rc; |
445 | 445 | ||
446 | rc = ata_pci_device_do_resume(pdev); | 446 | rc = ata_pci_device_do_resume(pdev); |
diff --git a/drivers/ata/pata_sil680.c b/drivers/ata/pata_sil680.c index 64c5f0d0f812..c4b0b073ba8e 100644 --- a/drivers/ata/pata_sil680.c +++ b/drivers/ata/pata_sil680.c | |||
@@ -407,7 +407,7 @@ use_ioports: | |||
407 | #ifdef CONFIG_PM | 407 | #ifdef CONFIG_PM |
408 | static int sil680_reinit_one(struct pci_dev *pdev) | 408 | static int sil680_reinit_one(struct pci_dev *pdev) |
409 | { | 409 | { |
410 | struct ata_host *host = dev_get_drvdata(&pdev->dev); | 410 | struct ata_host *host = pci_get_drvdata(pdev); |
411 | int try_mmio, rc; | 411 | int try_mmio, rc; |
412 | 412 | ||
413 | rc = ata_pci_device_do_resume(pdev); | 413 | rc = ata_pci_device_do_resume(pdev); |
diff --git a/drivers/ata/pata_sis.c b/drivers/ata/pata_sis.c index 2d5ac1361262..1e8363640bf5 100644 --- a/drivers/ata/pata_sis.c +++ b/drivers/ata/pata_sis.c | |||
@@ -873,7 +873,7 @@ static int sis_init_one (struct pci_dev *pdev, const struct pci_device_id *ent) | |||
873 | #ifdef CONFIG_PM | 873 | #ifdef CONFIG_PM |
874 | static int sis_reinit_one(struct pci_dev *pdev) | 874 | static int sis_reinit_one(struct pci_dev *pdev) |
875 | { | 875 | { |
876 | struct ata_host *host = dev_get_drvdata(&pdev->dev); | 876 | struct ata_host *host = pci_get_drvdata(pdev); |
877 | int rc; | 877 | int rc; |
878 | 878 | ||
879 | rc = ata_pci_device_do_resume(pdev); | 879 | rc = ata_pci_device_do_resume(pdev); |
diff --git a/drivers/ata/pata_sl82c105.c b/drivers/ata/pata_sl82c105.c index 738e000107d6..6816911ac422 100644 --- a/drivers/ata/pata_sl82c105.c +++ b/drivers/ata/pata_sl82c105.c | |||
@@ -341,7 +341,7 @@ static int sl82c105_init_one(struct pci_dev *dev, const struct pci_device_id *id | |||
341 | #ifdef CONFIG_PM | 341 | #ifdef CONFIG_PM |
342 | static int sl82c105_reinit_one(struct pci_dev *pdev) | 342 | static int sl82c105_reinit_one(struct pci_dev *pdev) |
343 | { | 343 | { |
344 | struct ata_host *host = dev_get_drvdata(&pdev->dev); | 344 | struct ata_host *host = pci_get_drvdata(pdev); |
345 | int rc; | 345 | int rc; |
346 | 346 | ||
347 | rc = ata_pci_device_do_resume(pdev); | 347 | rc = ata_pci_device_do_resume(pdev); |
diff --git a/drivers/ata/pata_triflex.c b/drivers/ata/pata_triflex.c index c8e589d91231..94473da68c02 100644 --- a/drivers/ata/pata_triflex.c +++ b/drivers/ata/pata_triflex.c | |||
@@ -211,7 +211,7 @@ static const struct pci_device_id triflex[] = { | |||
211 | #ifdef CONFIG_PM | 211 | #ifdef CONFIG_PM |
212 | static int triflex_ata_pci_device_suspend(struct pci_dev *pdev, pm_message_t mesg) | 212 | static int triflex_ata_pci_device_suspend(struct pci_dev *pdev, pm_message_t mesg) |
213 | { | 213 | { |
214 | struct ata_host *host = dev_get_drvdata(&pdev->dev); | 214 | struct ata_host *host = pci_get_drvdata(pdev); |
215 | int rc = 0; | 215 | int rc = 0; |
216 | 216 | ||
217 | rc = ata_host_suspend(host, mesg); | 217 | rc = ata_host_suspend(host, mesg); |
diff --git a/drivers/ata/pata_via.c b/drivers/ata/pata_via.c index 8d2a9fdf6b8d..c3ab9a6c3965 100644 --- a/drivers/ata/pata_via.c +++ b/drivers/ata/pata_via.c | |||
@@ -673,7 +673,7 @@ static int via_init_one(struct pci_dev *pdev, const struct pci_device_id *id) | |||
673 | 673 | ||
674 | static int via_reinit_one(struct pci_dev *pdev) | 674 | static int via_reinit_one(struct pci_dev *pdev) |
675 | { | 675 | { |
676 | struct ata_host *host = dev_get_drvdata(&pdev->dev); | 676 | struct ata_host *host = pci_get_drvdata(pdev); |
677 | int rc; | 677 | int rc; |
678 | 678 | ||
679 | rc = ata_pci_device_do_resume(pdev); | 679 | rc = ata_pci_device_do_resume(pdev); |
diff --git a/drivers/ata/sata_fsl.c b/drivers/ata/sata_fsl.c index d40e403e82dd..19720a0a4a65 100644 --- a/drivers/ata/sata_fsl.c +++ b/drivers/ata/sata_fsl.c | |||
@@ -1532,7 +1532,7 @@ static int sata_fsl_probe(struct platform_device *ofdev) | |||
1532 | ata_host_activate(host, irq, sata_fsl_interrupt, SATA_FSL_IRQ_FLAG, | 1532 | ata_host_activate(host, irq, sata_fsl_interrupt, SATA_FSL_IRQ_FLAG, |
1533 | &sata_fsl_sht); | 1533 | &sata_fsl_sht); |
1534 | 1534 | ||
1535 | dev_set_drvdata(&ofdev->dev, host); | 1535 | platform_set_drvdata(ofdev, host); |
1536 | 1536 | ||
1537 | host_priv->intr_coalescing.show = fsl_sata_intr_coalescing_show; | 1537 | host_priv->intr_coalescing.show = fsl_sata_intr_coalescing_show; |
1538 | host_priv->intr_coalescing.store = fsl_sata_intr_coalescing_store; | 1538 | host_priv->intr_coalescing.store = fsl_sata_intr_coalescing_store; |
@@ -1558,10 +1558,8 @@ static int sata_fsl_probe(struct platform_device *ofdev) | |||
1558 | 1558 | ||
1559 | error_exit_with_cleanup: | 1559 | error_exit_with_cleanup: |
1560 | 1560 | ||
1561 | if (host) { | 1561 | if (host) |
1562 | dev_set_drvdata(&ofdev->dev, NULL); | ||
1563 | ata_host_detach(host); | 1562 | ata_host_detach(host); |
1564 | } | ||
1565 | 1563 | ||
1566 | if (hcr_base) | 1564 | if (hcr_base) |
1567 | iounmap(hcr_base); | 1565 | iounmap(hcr_base); |
@@ -1572,7 +1570,7 @@ error_exit_with_cleanup: | |||
1572 | 1570 | ||
1573 | static int sata_fsl_remove(struct platform_device *ofdev) | 1571 | static int sata_fsl_remove(struct platform_device *ofdev) |
1574 | { | 1572 | { |
1575 | struct ata_host *host = dev_get_drvdata(&ofdev->dev); | 1573 | struct ata_host *host = platform_get_drvdata(ofdev); |
1576 | struct sata_fsl_host_priv *host_priv = host->private_data; | 1574 | struct sata_fsl_host_priv *host_priv = host->private_data; |
1577 | 1575 | ||
1578 | device_remove_file(&ofdev->dev, &host_priv->intr_coalescing); | 1576 | device_remove_file(&ofdev->dev, &host_priv->intr_coalescing); |
@@ -1580,8 +1578,6 @@ static int sata_fsl_remove(struct platform_device *ofdev) | |||
1580 | 1578 | ||
1581 | ata_host_detach(host); | 1579 | ata_host_detach(host); |
1582 | 1580 | ||
1583 | dev_set_drvdata(&ofdev->dev, NULL); | ||
1584 | |||
1585 | irq_dispose_mapping(host_priv->irq); | 1581 | irq_dispose_mapping(host_priv->irq); |
1586 | iounmap(host_priv->hcr_base); | 1582 | iounmap(host_priv->hcr_base); |
1587 | kfree(host_priv); | 1583 | kfree(host_priv); |
@@ -1592,13 +1588,13 @@ static int sata_fsl_remove(struct platform_device *ofdev) | |||
1592 | #ifdef CONFIG_PM | 1588 | #ifdef CONFIG_PM |
1593 | static int sata_fsl_suspend(struct platform_device *op, pm_message_t state) | 1589 | static int sata_fsl_suspend(struct platform_device *op, pm_message_t state) |
1594 | { | 1590 | { |
1595 | struct ata_host *host = dev_get_drvdata(&op->dev); | 1591 | struct ata_host *host = platform_get_drvdata(op); |
1596 | return ata_host_suspend(host, state); | 1592 | return ata_host_suspend(host, state); |
1597 | } | 1593 | } |
1598 | 1594 | ||
1599 | static int sata_fsl_resume(struct platform_device *op) | 1595 | static int sata_fsl_resume(struct platform_device *op) |
1600 | { | 1596 | { |
1601 | struct ata_host *host = dev_get_drvdata(&op->dev); | 1597 | struct ata_host *host = platform_get_drvdata(op); |
1602 | struct sata_fsl_host_priv *host_priv = host->private_data; | 1598 | struct sata_fsl_host_priv *host_priv = host->private_data; |
1603 | int ret; | 1599 | int ret; |
1604 | void __iomem *hcr_base = host_priv->hcr_base; | 1600 | void __iomem *hcr_base = host_priv->hcr_base; |
diff --git a/drivers/ata/sata_highbank.c b/drivers/ata/sata_highbank.c index b20aa96b958d..d047d92a456f 100644 --- a/drivers/ata/sata_highbank.c +++ b/drivers/ata/sata_highbank.c | |||
@@ -33,6 +33,9 @@ | |||
33 | #include <linux/interrupt.h> | 33 | #include <linux/interrupt.h> |
34 | #include <linux/delay.h> | 34 | #include <linux/delay.h> |
35 | #include <linux/export.h> | 35 | #include <linux/export.h> |
36 | #include <linux/gpio.h> | ||
37 | #include <linux/of_gpio.h> | ||
38 | |||
36 | #include "ahci.h" | 39 | #include "ahci.h" |
37 | 40 | ||
38 | #define CPHY_MAP(dev, addr) ((((dev) & 0x1f) << 7) | (((addr) >> 9) & 0x7f)) | 41 | #define CPHY_MAP(dev, addr) ((((dev) & 0x1f) << 7) | (((addr) >> 9) & 0x7f)) |
@@ -66,6 +69,146 @@ struct phy_lane_info { | |||
66 | }; | 69 | }; |
67 | static struct phy_lane_info port_data[CPHY_PORT_COUNT]; | 70 | static struct phy_lane_info port_data[CPHY_PORT_COUNT]; |
68 | 71 | ||
72 | static DEFINE_SPINLOCK(sgpio_lock); | ||
73 | #define SCLOCK 0 | ||
74 | #define SLOAD 1 | ||
75 | #define SDATA 2 | ||
76 | #define SGPIO_PINS 3 | ||
77 | #define SGPIO_PORTS 8 | ||
78 | |||
79 | /* can be cast as an ahci_host_priv for compatibility with most functions */ | ||
80 | struct ecx_plat_data { | ||
81 | u32 n_ports; | ||
82 | unsigned sgpio_gpio[SGPIO_PINS]; | ||
83 | u32 sgpio_pattern; | ||
84 | u32 port_to_sgpio[SGPIO_PORTS]; | ||
85 | }; | ||
86 | |||
87 | #define SGPIO_SIGNALS 3 | ||
88 | #define ECX_ACTIVITY_BITS 0x300000 | ||
89 | #define ECX_ACTIVITY_SHIFT 2 | ||
90 | #define ECX_LOCATE_BITS 0x80000 | ||
91 | #define ECX_LOCATE_SHIFT 1 | ||
92 | #define ECX_FAULT_BITS 0x400000 | ||
93 | #define ECX_FAULT_SHIFT 0 | ||
94 | static inline int sgpio_bit_shift(struct ecx_plat_data *pdata, u32 port, | ||
95 | u32 shift) | ||
96 | { | ||
97 | return 1 << (3 * pdata->port_to_sgpio[port] + shift); | ||
98 | } | ||
99 | |||
100 | static void ecx_parse_sgpio(struct ecx_plat_data *pdata, u32 port, u32 state) | ||
101 | { | ||
102 | if (state & ECX_ACTIVITY_BITS) | ||
103 | pdata->sgpio_pattern |= sgpio_bit_shift(pdata, port, | ||
104 | ECX_ACTIVITY_SHIFT); | ||
105 | else | ||
106 | pdata->sgpio_pattern &= ~sgpio_bit_shift(pdata, port, | ||
107 | ECX_ACTIVITY_SHIFT); | ||
108 | if (state & ECX_LOCATE_BITS) | ||
109 | pdata->sgpio_pattern |= sgpio_bit_shift(pdata, port, | ||
110 | ECX_LOCATE_SHIFT); | ||
111 | else | ||
112 | pdata->sgpio_pattern &= ~sgpio_bit_shift(pdata, port, | ||
113 | ECX_LOCATE_SHIFT); | ||
114 | if (state & ECX_FAULT_BITS) | ||
115 | pdata->sgpio_pattern |= sgpio_bit_shift(pdata, port, | ||
116 | ECX_FAULT_SHIFT); | ||
117 | else | ||
118 | pdata->sgpio_pattern &= ~sgpio_bit_shift(pdata, port, | ||
119 | ECX_FAULT_SHIFT); | ||
120 | } | ||
121 | |||
122 | /* | ||
123 | * Tell the LED controller that the signal has changed by raising the clock | ||
124 | * line for 50 uS and then lowering it for 50 uS. | ||
125 | */ | ||
126 | static void ecx_led_cycle_clock(struct ecx_plat_data *pdata) | ||
127 | { | ||
128 | gpio_set_value(pdata->sgpio_gpio[SCLOCK], 1); | ||
129 | udelay(50); | ||
130 | gpio_set_value(pdata->sgpio_gpio[SCLOCK], 0); | ||
131 | udelay(50); | ||
132 | } | ||
133 | |||
134 | static ssize_t ecx_transmit_led_message(struct ata_port *ap, u32 state, | ||
135 | ssize_t size) | ||
136 | { | ||
137 | struct ahci_host_priv *hpriv = ap->host->private_data; | ||
138 | struct ecx_plat_data *pdata = (struct ecx_plat_data *) hpriv->plat_data; | ||
139 | struct ahci_port_priv *pp = ap->private_data; | ||
140 | unsigned long flags; | ||
141 | int pmp, i; | ||
142 | struct ahci_em_priv *emp; | ||
143 | u32 sgpio_out; | ||
144 | |||
145 | /* get the slot number from the message */ | ||
146 | pmp = (state & EM_MSG_LED_PMP_SLOT) >> 8; | ||
147 | if (pmp < EM_MAX_SLOTS) | ||
148 | emp = &pp->em_priv[pmp]; | ||
149 | else | ||
150 | return -EINVAL; | ||
151 | |||
152 | if (!(hpriv->em_msg_type & EM_MSG_TYPE_LED)) | ||
153 | return size; | ||
154 | |||
155 | spin_lock_irqsave(&sgpio_lock, flags); | ||
156 | ecx_parse_sgpio(pdata, ap->port_no, state); | ||
157 | sgpio_out = pdata->sgpio_pattern; | ||
158 | gpio_set_value(pdata->sgpio_gpio[SLOAD], 1); | ||
159 | ecx_led_cycle_clock(pdata); | ||
160 | gpio_set_value(pdata->sgpio_gpio[SLOAD], 0); | ||
161 | /* | ||
162 | * bit-bang out the SGPIO pattern, by consuming a bit and then | ||
163 | * clocking it out. | ||
164 | */ | ||
165 | for (i = 0; i < (SGPIO_SIGNALS * pdata->n_ports); i++) { | ||
166 | gpio_set_value(pdata->sgpio_gpio[SDATA], sgpio_out & 1); | ||
167 | sgpio_out >>= 1; | ||
168 | ecx_led_cycle_clock(pdata); | ||
169 | } | ||
170 | |||
171 | /* save off new led state for port/slot */ | ||
172 | emp->led_state = state; | ||
173 | |||
174 | spin_unlock_irqrestore(&sgpio_lock, flags); | ||
175 | return size; | ||
176 | } | ||
177 | |||
178 | static void highbank_set_em_messages(struct device *dev, | ||
179 | struct ahci_host_priv *hpriv, | ||
180 | struct ata_port_info *pi) | ||
181 | { | ||
182 | struct device_node *np = dev->of_node; | ||
183 | struct ecx_plat_data *pdata = hpriv->plat_data; | ||
184 | int i; | ||
185 | int err; | ||
186 | |||
187 | for (i = 0; i < SGPIO_PINS; i++) { | ||
188 | err = of_get_named_gpio(np, "calxeda,sgpio-gpio", i); | ||
189 | if (IS_ERR_VALUE(err)) | ||
190 | return; | ||
191 | |||
192 | pdata->sgpio_gpio[i] = err; | ||
193 | err = gpio_request(pdata->sgpio_gpio[i], "CX SGPIO"); | ||
194 | if (err) { | ||
195 | pr_err("sata_highbank gpio_request %d failed: %d\n", | ||
196 | i, err); | ||
197 | return; | ||
198 | } | ||
199 | gpio_direction_output(pdata->sgpio_gpio[i], 1); | ||
200 | } | ||
201 | of_property_read_u32_array(np, "calxeda,led-order", | ||
202 | pdata->port_to_sgpio, | ||
203 | pdata->n_ports); | ||
204 | |||
205 | /* store em_loc */ | ||
206 | hpriv->em_loc = 0; | ||
207 | hpriv->em_buf_sz = 4; | ||
208 | hpriv->em_msg_type = EM_MSG_TYPE_LED; | ||
209 | pi->flags |= ATA_FLAG_EM | ATA_FLAG_SW_ACTIVITY; | ||
210 | } | ||
211 | |||
69 | static u32 __combo_phy_reg_read(u8 sata_port, u32 addr) | 212 | static u32 __combo_phy_reg_read(u8 sata_port, u32 addr) |
70 | { | 213 | { |
71 | u32 data; | 214 | u32 data; |
@@ -196,10 +339,26 @@ static int highbank_initialize_phys(struct device *dev, void __iomem *addr) | |||
196 | return 0; | 339 | return 0; |
197 | } | 340 | } |
198 | 341 | ||
342 | /* | ||
343 | * The Calxeda SATA phy intermittently fails to bring up a link with Gen3 | ||
344 | * Retrying the phy hard reset can work around the issue, but the drive | ||
345 | * may fail again. In less than 150 out of 15000 test runs, it took more | ||
346 | * than 10 tries for the link to be established (but never more than 35). | ||
347 | * Triple the maximum observed retry count to provide plenty of margin for | ||
348 | * rare events and to guarantee that the link is established. | ||
349 | * | ||
350 | * Also, the default 2 second time-out on a failed drive is too long in | ||
351 | * this situation. The uboot implementation of the same driver function | ||
352 | * uses a much shorter time-out period and never experiences a time out | ||
353 | * issue. Reducing the time-out to 500ms improves the responsiveness. | ||
354 | * The other timing constants were kept the same as the stock AHCI driver. | ||
355 | * This change was also tested 15000 times on 24 drives and none of them | ||
356 | * experienced a time out. | ||
357 | */ | ||
199 | static int ahci_highbank_hardreset(struct ata_link *link, unsigned int *class, | 358 | static int ahci_highbank_hardreset(struct ata_link *link, unsigned int *class, |
200 | unsigned long deadline) | 359 | unsigned long deadline) |
201 | { | 360 | { |
202 | const unsigned long *timing = sata_ehc_deb_timing(&link->eh_context); | 361 | static const unsigned long timing[] = { 5, 100, 500}; |
203 | struct ata_port *ap = link->ap; | 362 | struct ata_port *ap = link->ap; |
204 | struct ahci_port_priv *pp = ap->private_data; | 363 | struct ahci_port_priv *pp = ap->private_data; |
205 | u8 *d2h_fis = pp->rx_fis + RX_FIS_D2H_REG; | 364 | u8 *d2h_fis = pp->rx_fis + RX_FIS_D2H_REG; |
@@ -207,7 +366,7 @@ static int ahci_highbank_hardreset(struct ata_link *link, unsigned int *class, | |||
207 | bool online; | 366 | bool online; |
208 | u32 sstatus; | 367 | u32 sstatus; |
209 | int rc; | 368 | int rc; |
210 | int retry = 10; | 369 | int retry = 100; |
211 | 370 | ||
212 | ahci_stop_engine(ap); | 371 | ahci_stop_engine(ap); |
213 | 372 | ||
@@ -241,6 +400,7 @@ static int ahci_highbank_hardreset(struct ata_link *link, unsigned int *class, | |||
241 | static struct ata_port_operations ahci_highbank_ops = { | 400 | static struct ata_port_operations ahci_highbank_ops = { |
242 | .inherits = &ahci_ops, | 401 | .inherits = &ahci_ops, |
243 | .hardreset = ahci_highbank_hardreset, | 402 | .hardreset = ahci_highbank_hardreset, |
403 | .transmit_led_message = ecx_transmit_led_message, | ||
244 | }; | 404 | }; |
245 | 405 | ||
246 | static const struct ata_port_info ahci_highbank_port_info = { | 406 | static const struct ata_port_info ahci_highbank_port_info = { |
@@ -264,12 +424,13 @@ static int ahci_highbank_probe(struct platform_device *pdev) | |||
264 | { | 424 | { |
265 | struct device *dev = &pdev->dev; | 425 | struct device *dev = &pdev->dev; |
266 | struct ahci_host_priv *hpriv; | 426 | struct ahci_host_priv *hpriv; |
427 | struct ecx_plat_data *pdata; | ||
267 | struct ata_host *host; | 428 | struct ata_host *host; |
268 | struct resource *mem; | 429 | struct resource *mem; |
269 | int irq; | 430 | int irq; |
270 | int n_ports; | ||
271 | int i; | 431 | int i; |
272 | int rc; | 432 | int rc; |
433 | u32 n_ports; | ||
273 | struct ata_port_info pi = ahci_highbank_port_info; | 434 | struct ata_port_info pi = ahci_highbank_port_info; |
274 | const struct ata_port_info *ppi[] = { &pi, NULL }; | 435 | const struct ata_port_info *ppi[] = { &pi, NULL }; |
275 | 436 | ||
@@ -290,6 +451,11 @@ static int ahci_highbank_probe(struct platform_device *pdev) | |||
290 | dev_err(dev, "can't alloc ahci_host_priv\n"); | 451 | dev_err(dev, "can't alloc ahci_host_priv\n"); |
291 | return -ENOMEM; | 452 | return -ENOMEM; |
292 | } | 453 | } |
454 | pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL); | ||
455 | if (!pdata) { | ||
456 | dev_err(dev, "can't alloc ecx_plat_data\n"); | ||
457 | return -ENOMEM; | ||
458 | } | ||
293 | 459 | ||
294 | hpriv->flags |= (unsigned long)pi.private_data; | 460 | hpriv->flags |= (unsigned long)pi.private_data; |
295 | 461 | ||
@@ -313,8 +479,6 @@ static int ahci_highbank_probe(struct platform_device *pdev) | |||
313 | if (hpriv->cap & HOST_CAP_PMP) | 479 | if (hpriv->cap & HOST_CAP_PMP) |
314 | pi.flags |= ATA_FLAG_PMP; | 480 | pi.flags |= ATA_FLAG_PMP; |
315 | 481 | ||
316 | ahci_set_em_messages(hpriv, &pi); | ||
317 | |||
318 | /* CAP.NP sometimes indicate the index of the last enabled | 482 | /* CAP.NP sometimes indicate the index of the last enabled |
319 | * port, at other times, that of the last possible port, so | 483 | * port, at other times, that of the last possible port, so |
320 | * determining the maximum port number requires looking at | 484 | * determining the maximum port number requires looking at |
@@ -322,6 +486,10 @@ static int ahci_highbank_probe(struct platform_device *pdev) | |||
322 | */ | 486 | */ |
323 | n_ports = max(ahci_nr_ports(hpriv->cap), fls(hpriv->port_map)); | 487 | n_ports = max(ahci_nr_ports(hpriv->cap), fls(hpriv->port_map)); |
324 | 488 | ||
489 | pdata->n_ports = n_ports; | ||
490 | hpriv->plat_data = pdata; | ||
491 | highbank_set_em_messages(dev, hpriv, &pi); | ||
492 | |||
325 | host = ata_host_alloc_pinfo(dev, ppi, n_ports); | 493 | host = ata_host_alloc_pinfo(dev, ppi, n_ports); |
326 | if (!host) { | 494 | if (!host) { |
327 | rc = -ENOMEM; | 495 | rc = -ENOMEM; |
@@ -333,9 +501,6 @@ static int ahci_highbank_probe(struct platform_device *pdev) | |||
333 | if (!(hpriv->cap & HOST_CAP_SSS) || ahci_ignore_sss) | 501 | if (!(hpriv->cap & HOST_CAP_SSS) || ahci_ignore_sss) |
334 | host->flags |= ATA_HOST_PARALLEL_SCAN; | 502 | host->flags |= ATA_HOST_PARALLEL_SCAN; |
335 | 503 | ||
336 | if (pi.flags & ATA_FLAG_EM) | ||
337 | ahci_reset_em(host); | ||
338 | |||
339 | for (i = 0; i < host->n_ports; i++) { | 504 | for (i = 0; i < host->n_ports; i++) { |
340 | struct ata_port *ap = host->ports[i]; | 505 | struct ata_port *ap = host->ports[i]; |
341 | 506 | ||
diff --git a/drivers/ata/sata_inic162x.c b/drivers/ata/sata_inic162x.c index 1e6827c89429..e45131748248 100644 --- a/drivers/ata/sata_inic162x.c +++ b/drivers/ata/sata_inic162x.c | |||
@@ -776,7 +776,7 @@ static int init_controller(void __iomem *mmio_base, u16 hctl) | |||
776 | #ifdef CONFIG_PM | 776 | #ifdef CONFIG_PM |
777 | static int inic_pci_device_resume(struct pci_dev *pdev) | 777 | static int inic_pci_device_resume(struct pci_dev *pdev) |
778 | { | 778 | { |
779 | struct ata_host *host = dev_get_drvdata(&pdev->dev); | 779 | struct ata_host *host = pci_get_drvdata(pdev); |
780 | struct inic_host_priv *hpriv = host->private_data; | 780 | struct inic_host_priv *hpriv = host->private_data; |
781 | int rc; | 781 | int rc; |
782 | 782 | ||
diff --git a/drivers/ata/sata_nv.c b/drivers/ata/sata_nv.c index 85ee4993ca74..d74def823d3e 100644 --- a/drivers/ata/sata_nv.c +++ b/drivers/ata/sata_nv.c | |||
@@ -2435,7 +2435,7 @@ static int nv_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
2435 | #ifdef CONFIG_PM | 2435 | #ifdef CONFIG_PM |
2436 | static int nv_pci_device_resume(struct pci_dev *pdev) | 2436 | static int nv_pci_device_resume(struct pci_dev *pdev) |
2437 | { | 2437 | { |
2438 | struct ata_host *host = dev_get_drvdata(&pdev->dev); | 2438 | struct ata_host *host = pci_get_drvdata(pdev); |
2439 | struct nv_host_priv *hpriv = host->private_data; | 2439 | struct nv_host_priv *hpriv = host->private_data; |
2440 | int rc; | 2440 | int rc; |
2441 | 2441 | ||
diff --git a/drivers/ata/sata_rcar.c b/drivers/ata/sata_rcar.c index 249c8a289bfd..8108eb065444 100644 --- a/drivers/ata/sata_rcar.c +++ b/drivers/ata/sata_rcar.c | |||
@@ -121,6 +121,8 @@ | |||
121 | /* Descriptor table word 0 bit (when DTA32M = 1) */ | 121 | /* Descriptor table word 0 bit (when DTA32M = 1) */ |
122 | #define SATA_RCAR_DTEND BIT(0) | 122 | #define SATA_RCAR_DTEND BIT(0) |
123 | 123 | ||
124 | #define SATA_RCAR_DMA_BOUNDARY 0x1FFFFFFEUL | ||
125 | |||
124 | struct sata_rcar_priv { | 126 | struct sata_rcar_priv { |
125 | void __iomem *base; | 127 | void __iomem *base; |
126 | struct clk *clk; | 128 | struct clk *clk; |
@@ -128,41 +130,44 @@ struct sata_rcar_priv { | |||
128 | 130 | ||
129 | static void sata_rcar_phy_initialize(struct sata_rcar_priv *priv) | 131 | static void sata_rcar_phy_initialize(struct sata_rcar_priv *priv) |
130 | { | 132 | { |
133 | void __iomem *base = priv->base; | ||
134 | |||
131 | /* idle state */ | 135 | /* idle state */ |
132 | iowrite32(0, priv->base + SATAPHYADDR_REG); | 136 | iowrite32(0, base + SATAPHYADDR_REG); |
133 | /* reset */ | 137 | /* reset */ |
134 | iowrite32(SATAPHYRESET_PHYRST, priv->base + SATAPHYRESET_REG); | 138 | iowrite32(SATAPHYRESET_PHYRST, base + SATAPHYRESET_REG); |
135 | udelay(10); | 139 | udelay(10); |
136 | /* deassert reset */ | 140 | /* deassert reset */ |
137 | iowrite32(0, priv->base + SATAPHYRESET_REG); | 141 | iowrite32(0, base + SATAPHYRESET_REG); |
138 | } | 142 | } |
139 | 143 | ||
140 | static void sata_rcar_phy_write(struct sata_rcar_priv *priv, u16 reg, u32 val, | 144 | static void sata_rcar_phy_write(struct sata_rcar_priv *priv, u16 reg, u32 val, |
141 | int group) | 145 | int group) |
142 | { | 146 | { |
147 | void __iomem *base = priv->base; | ||
143 | int timeout; | 148 | int timeout; |
144 | 149 | ||
145 | /* deassert reset */ | 150 | /* deassert reset */ |
146 | iowrite32(0, priv->base + SATAPHYRESET_REG); | 151 | iowrite32(0, base + SATAPHYRESET_REG); |
147 | /* lane 1 */ | 152 | /* lane 1 */ |
148 | iowrite32(SATAPHYACCEN_PHYLANE, priv->base + SATAPHYACCEN_REG); | 153 | iowrite32(SATAPHYACCEN_PHYLANE, base + SATAPHYACCEN_REG); |
149 | /* write phy register value */ | 154 | /* write phy register value */ |
150 | iowrite32(val, priv->base + SATAPHYWDATA_REG); | 155 | iowrite32(val, base + SATAPHYWDATA_REG); |
151 | /* set register group */ | 156 | /* set register group */ |
152 | if (group) | 157 | if (group) |
153 | reg |= SATAPHYADDR_PHYRATEMODE; | 158 | reg |= SATAPHYADDR_PHYRATEMODE; |
154 | /* write command */ | 159 | /* write command */ |
155 | iowrite32(SATAPHYADDR_PHYCMD_WRITE | reg, priv->base + SATAPHYADDR_REG); | 160 | iowrite32(SATAPHYADDR_PHYCMD_WRITE | reg, base + SATAPHYADDR_REG); |
156 | /* wait for ack */ | 161 | /* wait for ack */ |
157 | for (timeout = 0; timeout < 100; timeout++) { | 162 | for (timeout = 0; timeout < 100; timeout++) { |
158 | val = ioread32(priv->base + SATAPHYACK_REG); | 163 | val = ioread32(base + SATAPHYACK_REG); |
159 | if (val & SATAPHYACK_PHYACK) | 164 | if (val & SATAPHYACK_PHYACK) |
160 | break; | 165 | break; |
161 | } | 166 | } |
162 | if (timeout >= 100) | 167 | if (timeout >= 100) |
163 | pr_err("%s timeout\n", __func__); | 168 | pr_err("%s timeout\n", __func__); |
164 | /* idle state */ | 169 | /* idle state */ |
165 | iowrite32(0, priv->base + SATAPHYADDR_REG); | 170 | iowrite32(0, base + SATAPHYADDR_REG); |
166 | } | 171 | } |
167 | 172 | ||
168 | static void sata_rcar_freeze(struct ata_port *ap) | 173 | static void sata_rcar_freeze(struct ata_port *ap) |
@@ -178,14 +183,15 @@ static void sata_rcar_freeze(struct ata_port *ap) | |||
178 | static void sata_rcar_thaw(struct ata_port *ap) | 183 | static void sata_rcar_thaw(struct ata_port *ap) |
179 | { | 184 | { |
180 | struct sata_rcar_priv *priv = ap->host->private_data; | 185 | struct sata_rcar_priv *priv = ap->host->private_data; |
186 | void __iomem *base = priv->base; | ||
181 | 187 | ||
182 | /* ack */ | 188 | /* ack */ |
183 | iowrite32(~SATA_RCAR_INT_MASK, priv->base + SATAINTSTAT_REG); | 189 | iowrite32(~(u32)SATA_RCAR_INT_MASK, base + SATAINTSTAT_REG); |
184 | 190 | ||
185 | ata_sff_thaw(ap); | 191 | ata_sff_thaw(ap); |
186 | 192 | ||
187 | /* unmask */ | 193 | /* unmask */ |
188 | iowrite32(0x7ff & ~SATA_RCAR_INT_MASK, priv->base + SATAINTMASK_REG); | 194 | iowrite32(0x7ff & ~SATA_RCAR_INT_MASK, base + SATAINTMASK_REG); |
189 | } | 195 | } |
190 | 196 | ||
191 | static void sata_rcar_ioread16_rep(void __iomem *reg, void *buffer, int count) | 197 | static void sata_rcar_ioread16_rep(void __iomem *reg, void *buffer, int count) |
@@ -474,11 +480,10 @@ static void sata_rcar_bmdma_fill_sg(struct ata_queued_cmd *qc) | |||
474 | struct ata_port *ap = qc->ap; | 480 | struct ata_port *ap = qc->ap; |
475 | struct ata_bmdma_prd *prd = ap->bmdma_prd; | 481 | struct ata_bmdma_prd *prd = ap->bmdma_prd; |
476 | struct scatterlist *sg; | 482 | struct scatterlist *sg; |
477 | unsigned int si, pi; | 483 | unsigned int si; |
478 | 484 | ||
479 | pi = 0; | ||
480 | for_each_sg(qc->sg, sg, qc->n_elem, si) { | 485 | for_each_sg(qc->sg, sg, qc->n_elem, si) { |
481 | u32 addr, sg_len, len; | 486 | u32 addr, sg_len; |
482 | 487 | ||
483 | /* | 488 | /* |
484 | * Note: h/w doesn't support 64-bit, so we unconditionally | 489 | * Note: h/w doesn't support 64-bit, so we unconditionally |
@@ -487,24 +492,13 @@ static void sata_rcar_bmdma_fill_sg(struct ata_queued_cmd *qc) | |||
487 | addr = (u32)sg_dma_address(sg); | 492 | addr = (u32)sg_dma_address(sg); |
488 | sg_len = sg_dma_len(sg); | 493 | sg_len = sg_dma_len(sg); |
489 | 494 | ||
490 | /* H/w transfer count is only 29 bits long, let's be careful */ | 495 | prd[si].addr = cpu_to_le32(addr); |
491 | while (sg_len) { | 496 | prd[si].flags_len = cpu_to_le32(sg_len); |
492 | len = sg_len; | 497 | VPRINTK("PRD[%u] = (0x%X, 0x%X)\n", si, addr, sg_len); |
493 | if (len > 0x1ffffffe) | ||
494 | len = 0x1ffffffe; | ||
495 | |||
496 | prd[pi].addr = cpu_to_le32(addr); | ||
497 | prd[pi].flags_len = cpu_to_le32(len); | ||
498 | VPRINTK("PRD[%u] = (0x%X, 0x%X)\n", pi, addr, len); | ||
499 | |||
500 | pi++; | ||
501 | sg_len -= len; | ||
502 | addr += len; | ||
503 | } | ||
504 | } | 498 | } |
505 | 499 | ||
506 | /* end-of-table flag */ | 500 | /* end-of-table flag */ |
507 | prd[pi - 1].addr |= cpu_to_le32(SATA_RCAR_DTEND); | 501 | prd[si - 1].addr |= cpu_to_le32(SATA_RCAR_DTEND); |
508 | } | 502 | } |
509 | 503 | ||
510 | static void sata_rcar_qc_prep(struct ata_queued_cmd *qc) | 504 | static void sata_rcar_qc_prep(struct ata_queued_cmd *qc) |
@@ -519,15 +513,16 @@ static void sata_rcar_bmdma_setup(struct ata_queued_cmd *qc) | |||
519 | { | 513 | { |
520 | struct ata_port *ap = qc->ap; | 514 | struct ata_port *ap = qc->ap; |
521 | unsigned int rw = qc->tf.flags & ATA_TFLAG_WRITE; | 515 | unsigned int rw = qc->tf.flags & ATA_TFLAG_WRITE; |
522 | u32 dmactl; | ||
523 | struct sata_rcar_priv *priv = ap->host->private_data; | 516 | struct sata_rcar_priv *priv = ap->host->private_data; |
517 | void __iomem *base = priv->base; | ||
518 | u32 dmactl; | ||
524 | 519 | ||
525 | /* load PRD table addr. */ | 520 | /* load PRD table addr. */ |
526 | mb(); /* make sure PRD table writes are visible to controller */ | 521 | mb(); /* make sure PRD table writes are visible to controller */ |
527 | iowrite32(ap->bmdma_prd_dma, priv->base + ATAPI_DTB_ADR_REG); | 522 | iowrite32(ap->bmdma_prd_dma, base + ATAPI_DTB_ADR_REG); |
528 | 523 | ||
529 | /* specify data direction, triple-check start bit is clear */ | 524 | /* specify data direction, triple-check start bit is clear */ |
530 | dmactl = ioread32(priv->base + ATAPI_CONTROL1_REG); | 525 | dmactl = ioread32(base + ATAPI_CONTROL1_REG); |
531 | dmactl &= ~(ATAPI_CONTROL1_RW | ATAPI_CONTROL1_STOP); | 526 | dmactl &= ~(ATAPI_CONTROL1_RW | ATAPI_CONTROL1_STOP); |
532 | if (dmactl & ATAPI_CONTROL1_START) { | 527 | if (dmactl & ATAPI_CONTROL1_START) { |
533 | dmactl &= ~ATAPI_CONTROL1_START; | 528 | dmactl &= ~ATAPI_CONTROL1_START; |
@@ -535,7 +530,7 @@ static void sata_rcar_bmdma_setup(struct ata_queued_cmd *qc) | |||
535 | } | 530 | } |
536 | if (!rw) | 531 | if (!rw) |
537 | dmactl |= ATAPI_CONTROL1_RW; | 532 | dmactl |= ATAPI_CONTROL1_RW; |
538 | iowrite32(dmactl, priv->base + ATAPI_CONTROL1_REG); | 533 | iowrite32(dmactl, base + ATAPI_CONTROL1_REG); |
539 | 534 | ||
540 | /* issue r/w command */ | 535 | /* issue r/w command */ |
541 | ap->ops->sff_exec_command(ap, &qc->tf); | 536 | ap->ops->sff_exec_command(ap, &qc->tf); |
@@ -544,28 +539,30 @@ static void sata_rcar_bmdma_setup(struct ata_queued_cmd *qc) | |||
544 | static void sata_rcar_bmdma_start(struct ata_queued_cmd *qc) | 539 | static void sata_rcar_bmdma_start(struct ata_queued_cmd *qc) |
545 | { | 540 | { |
546 | struct ata_port *ap = qc->ap; | 541 | struct ata_port *ap = qc->ap; |
547 | u32 dmactl; | ||
548 | struct sata_rcar_priv *priv = ap->host->private_data; | 542 | struct sata_rcar_priv *priv = ap->host->private_data; |
543 | void __iomem *base = priv->base; | ||
544 | u32 dmactl; | ||
549 | 545 | ||
550 | /* start host DMA transaction */ | 546 | /* start host DMA transaction */ |
551 | dmactl = ioread32(priv->base + ATAPI_CONTROL1_REG); | 547 | dmactl = ioread32(base + ATAPI_CONTROL1_REG); |
552 | dmactl &= ~ATAPI_CONTROL1_STOP; | 548 | dmactl &= ~ATAPI_CONTROL1_STOP; |
553 | dmactl |= ATAPI_CONTROL1_START; | 549 | dmactl |= ATAPI_CONTROL1_START; |
554 | iowrite32(dmactl, priv->base + ATAPI_CONTROL1_REG); | 550 | iowrite32(dmactl, base + ATAPI_CONTROL1_REG); |
555 | } | 551 | } |
556 | 552 | ||
557 | static void sata_rcar_bmdma_stop(struct ata_queued_cmd *qc) | 553 | static void sata_rcar_bmdma_stop(struct ata_queued_cmd *qc) |
558 | { | 554 | { |
559 | struct ata_port *ap = qc->ap; | 555 | struct ata_port *ap = qc->ap; |
560 | struct sata_rcar_priv *priv = ap->host->private_data; | 556 | struct sata_rcar_priv *priv = ap->host->private_data; |
557 | void __iomem *base = priv->base; | ||
561 | u32 dmactl; | 558 | u32 dmactl; |
562 | 559 | ||
563 | /* force termination of DMA transfer if active */ | 560 | /* force termination of DMA transfer if active */ |
564 | dmactl = ioread32(priv->base + ATAPI_CONTROL1_REG); | 561 | dmactl = ioread32(base + ATAPI_CONTROL1_REG); |
565 | if (dmactl & ATAPI_CONTROL1_START) { | 562 | if (dmactl & ATAPI_CONTROL1_START) { |
566 | dmactl &= ~ATAPI_CONTROL1_START; | 563 | dmactl &= ~ATAPI_CONTROL1_START; |
567 | dmactl |= ATAPI_CONTROL1_STOP; | 564 | dmactl |= ATAPI_CONTROL1_STOP; |
568 | iowrite32(dmactl, priv->base + ATAPI_CONTROL1_REG); | 565 | iowrite32(dmactl, base + ATAPI_CONTROL1_REG); |
569 | } | 566 | } |
570 | 567 | ||
571 | /* one-PIO-cycle guaranteed wait, per spec, for HDMA1:0 transition */ | 568 | /* one-PIO-cycle guaranteed wait, per spec, for HDMA1:0 transition */ |
@@ -575,8 +572,8 @@ static void sata_rcar_bmdma_stop(struct ata_queued_cmd *qc) | |||
575 | static u8 sata_rcar_bmdma_status(struct ata_port *ap) | 572 | static u8 sata_rcar_bmdma_status(struct ata_port *ap) |
576 | { | 573 | { |
577 | struct sata_rcar_priv *priv = ap->host->private_data; | 574 | struct sata_rcar_priv *priv = ap->host->private_data; |
578 | u32 status; | ||
579 | u8 host_stat = 0; | 575 | u8 host_stat = 0; |
576 | u32 status; | ||
580 | 577 | ||
581 | status = ioread32(priv->base + ATAPI_STATUS_REG); | 578 | status = ioread32(priv->base + ATAPI_STATUS_REG); |
582 | if (status & ATAPI_STATUS_DEVINT) | 579 | if (status & ATAPI_STATUS_DEVINT) |
@@ -588,7 +585,14 @@ static u8 sata_rcar_bmdma_status(struct ata_port *ap) | |||
588 | } | 585 | } |
589 | 586 | ||
590 | static struct scsi_host_template sata_rcar_sht = { | 587 | static struct scsi_host_template sata_rcar_sht = { |
591 | ATA_BMDMA_SHT(DRV_NAME), | 588 | ATA_BASE_SHT(DRV_NAME), |
589 | /* | ||
590 | * This controller allows transfer chunks up to 512MB which cross 64KB | ||
591 | * boundaries, therefore the DMA limits are more relaxed than standard | ||
592 | * ATA SFF. | ||
593 | */ | ||
594 | .sg_tablesize = ATA_MAX_PRD, | ||
595 | .dma_boundary = SATA_RCAR_DMA_BOUNDARY, | ||
592 | }; | 596 | }; |
593 | 597 | ||
594 | static struct ata_port_operations sata_rcar_port_ops = { | 598 | static struct ata_port_operations sata_rcar_port_ops = { |
@@ -668,19 +672,20 @@ static irqreturn_t sata_rcar_interrupt(int irq, void *dev_instance) | |||
668 | { | 672 | { |
669 | struct ata_host *host = dev_instance; | 673 | struct ata_host *host = dev_instance; |
670 | struct sata_rcar_priv *priv = host->private_data; | 674 | struct sata_rcar_priv *priv = host->private_data; |
671 | struct ata_port *ap; | 675 | void __iomem *base = priv->base; |
672 | unsigned int handled = 0; | 676 | unsigned int handled = 0; |
677 | struct ata_port *ap; | ||
673 | u32 sataintstat; | 678 | u32 sataintstat; |
674 | unsigned long flags; | 679 | unsigned long flags; |
675 | 680 | ||
676 | spin_lock_irqsave(&host->lock, flags); | 681 | spin_lock_irqsave(&host->lock, flags); |
677 | 682 | ||
678 | sataintstat = ioread32(priv->base + SATAINTSTAT_REG); | 683 | sataintstat = ioread32(base + SATAINTSTAT_REG); |
679 | sataintstat &= SATA_RCAR_INT_MASK; | 684 | sataintstat &= SATA_RCAR_INT_MASK; |
680 | if (!sataintstat) | 685 | if (!sataintstat) |
681 | goto done; | 686 | goto done; |
682 | /* ack */ | 687 | /* ack */ |
683 | iowrite32(~sataintstat & 0x7ff, priv->base + SATAINTSTAT_REG); | 688 | iowrite32(~sataintstat & 0x7ff, base + SATAINTSTAT_REG); |
684 | 689 | ||
685 | ap = host->ports[0]; | 690 | ap = host->ports[0]; |
686 | 691 | ||
@@ -702,15 +707,16 @@ static void sata_rcar_setup_port(struct ata_host *host) | |||
702 | struct ata_port *ap = host->ports[0]; | 707 | struct ata_port *ap = host->ports[0]; |
703 | struct ata_ioports *ioaddr = &ap->ioaddr; | 708 | struct ata_ioports *ioaddr = &ap->ioaddr; |
704 | struct sata_rcar_priv *priv = host->private_data; | 709 | struct sata_rcar_priv *priv = host->private_data; |
710 | void __iomem *base = priv->base; | ||
705 | 711 | ||
706 | ap->ops = &sata_rcar_port_ops; | 712 | ap->ops = &sata_rcar_port_ops; |
707 | ap->pio_mask = ATA_PIO4; | 713 | ap->pio_mask = ATA_PIO4; |
708 | ap->udma_mask = ATA_UDMA6; | 714 | ap->udma_mask = ATA_UDMA6; |
709 | ap->flags |= ATA_FLAG_SATA; | 715 | ap->flags |= ATA_FLAG_SATA; |
710 | 716 | ||
711 | ioaddr->cmd_addr = priv->base + SDATA_REG; | 717 | ioaddr->cmd_addr = base + SDATA_REG; |
712 | ioaddr->ctl_addr = priv->base + SSDEVCON_REG; | 718 | ioaddr->ctl_addr = base + SSDEVCON_REG; |
713 | ioaddr->scr_addr = priv->base + SCRSSTS_REG; | 719 | ioaddr->scr_addr = base + SCRSSTS_REG; |
714 | ioaddr->altstatus_addr = ioaddr->ctl_addr; | 720 | ioaddr->altstatus_addr = ioaddr->ctl_addr; |
715 | 721 | ||
716 | ioaddr->data_addr = ioaddr->cmd_addr + (ATA_REG_DATA << 2); | 722 | ioaddr->data_addr = ioaddr->cmd_addr + (ATA_REG_DATA << 2); |
@@ -728,6 +734,7 @@ static void sata_rcar_setup_port(struct ata_host *host) | |||
728 | static void sata_rcar_init_controller(struct ata_host *host) | 734 | static void sata_rcar_init_controller(struct ata_host *host) |
729 | { | 735 | { |
730 | struct sata_rcar_priv *priv = host->private_data; | 736 | struct sata_rcar_priv *priv = host->private_data; |
737 | void __iomem *base = priv->base; | ||
731 | u32 val; | 738 | u32 val; |
732 | 739 | ||
733 | /* reset and setup phy */ | 740 | /* reset and setup phy */ |
@@ -740,27 +747,27 @@ static void sata_rcar_init_controller(struct ata_host *host) | |||
740 | sata_rcar_phy_write(priv, SATAPCTLR4_REG, 0x28E80000, 0); | 747 | sata_rcar_phy_write(priv, SATAPCTLR4_REG, 0x28E80000, 0); |
741 | 748 | ||
742 | /* SATA-IP reset state */ | 749 | /* SATA-IP reset state */ |
743 | val = ioread32(priv->base + ATAPI_CONTROL1_REG); | 750 | val = ioread32(base + ATAPI_CONTROL1_REG); |
744 | val |= ATAPI_CONTROL1_RESET; | 751 | val |= ATAPI_CONTROL1_RESET; |
745 | iowrite32(val, priv->base + ATAPI_CONTROL1_REG); | 752 | iowrite32(val, base + ATAPI_CONTROL1_REG); |
746 | 753 | ||
747 | /* ISM mode, PRD mode, DTEND flag at bit 0 */ | 754 | /* ISM mode, PRD mode, DTEND flag at bit 0 */ |
748 | val = ioread32(priv->base + ATAPI_CONTROL1_REG); | 755 | val = ioread32(base + ATAPI_CONTROL1_REG); |
749 | val |= ATAPI_CONTROL1_ISM; | 756 | val |= ATAPI_CONTROL1_ISM; |
750 | val |= ATAPI_CONTROL1_DESE; | 757 | val |= ATAPI_CONTROL1_DESE; |
751 | val |= ATAPI_CONTROL1_DTA32M; | 758 | val |= ATAPI_CONTROL1_DTA32M; |
752 | iowrite32(val, priv->base + ATAPI_CONTROL1_REG); | 759 | iowrite32(val, base + ATAPI_CONTROL1_REG); |
753 | 760 | ||
754 | /* Release the SATA-IP from the reset state */ | 761 | /* Release the SATA-IP from the reset state */ |
755 | val = ioread32(priv->base + ATAPI_CONTROL1_REG); | 762 | val = ioread32(base + ATAPI_CONTROL1_REG); |
756 | val &= ~ATAPI_CONTROL1_RESET; | 763 | val &= ~ATAPI_CONTROL1_RESET; |
757 | iowrite32(val, priv->base + ATAPI_CONTROL1_REG); | 764 | iowrite32(val, base + ATAPI_CONTROL1_REG); |
758 | 765 | ||
759 | /* ack and mask */ | 766 | /* ack and mask */ |
760 | iowrite32(0, priv->base + SATAINTSTAT_REG); | 767 | iowrite32(0, base + SATAINTSTAT_REG); |
761 | iowrite32(0x7ff, priv->base + SATAINTMASK_REG); | 768 | iowrite32(0x7ff, base + SATAINTMASK_REG); |
762 | /* enable interrupts */ | 769 | /* enable interrupts */ |
763 | iowrite32(ATAPI_INT_ENABLE_SATAINT, priv->base + ATAPI_INT_ENABLE_REG); | 770 | iowrite32(ATAPI_INT_ENABLE_SATAINT, base + ATAPI_INT_ENABLE_REG); |
764 | } | 771 | } |
765 | 772 | ||
766 | static int sata_rcar_probe(struct platform_device *pdev) | 773 | static int sata_rcar_probe(struct platform_device *pdev) |
@@ -825,16 +832,17 @@ cleanup: | |||
825 | 832 | ||
826 | static int sata_rcar_remove(struct platform_device *pdev) | 833 | static int sata_rcar_remove(struct platform_device *pdev) |
827 | { | 834 | { |
828 | struct ata_host *host = dev_get_drvdata(&pdev->dev); | 835 | struct ata_host *host = platform_get_drvdata(pdev); |
829 | struct sata_rcar_priv *priv = host->private_data; | 836 | struct sata_rcar_priv *priv = host->private_data; |
837 | void __iomem *base = priv->base; | ||
830 | 838 | ||
831 | ata_host_detach(host); | 839 | ata_host_detach(host); |
832 | 840 | ||
833 | /* disable interrupts */ | 841 | /* disable interrupts */ |
834 | iowrite32(0, priv->base + ATAPI_INT_ENABLE_REG); | 842 | iowrite32(0, base + ATAPI_INT_ENABLE_REG); |
835 | /* ack and mask */ | 843 | /* ack and mask */ |
836 | iowrite32(0, priv->base + SATAINTSTAT_REG); | 844 | iowrite32(0, base + SATAINTSTAT_REG); |
837 | iowrite32(0x7ff, priv->base + SATAINTMASK_REG); | 845 | iowrite32(0x7ff, base + SATAINTMASK_REG); |
838 | 846 | ||
839 | clk_disable(priv->clk); | 847 | clk_disable(priv->clk); |
840 | 848 | ||
@@ -846,14 +854,15 @@ static int sata_rcar_suspend(struct device *dev) | |||
846 | { | 854 | { |
847 | struct ata_host *host = dev_get_drvdata(dev); | 855 | struct ata_host *host = dev_get_drvdata(dev); |
848 | struct sata_rcar_priv *priv = host->private_data; | 856 | struct sata_rcar_priv *priv = host->private_data; |
857 | void __iomem *base = priv->base; | ||
849 | int ret; | 858 | int ret; |
850 | 859 | ||
851 | ret = ata_host_suspend(host, PMSG_SUSPEND); | 860 | ret = ata_host_suspend(host, PMSG_SUSPEND); |
852 | if (!ret) { | 861 | if (!ret) { |
853 | /* disable interrupts */ | 862 | /* disable interrupts */ |
854 | iowrite32(0, priv->base + ATAPI_INT_ENABLE_REG); | 863 | iowrite32(0, base + ATAPI_INT_ENABLE_REG); |
855 | /* mask */ | 864 | /* mask */ |
856 | iowrite32(0x7ff, priv->base + SATAINTMASK_REG); | 865 | iowrite32(0x7ff, base + SATAINTMASK_REG); |
857 | 866 | ||
858 | clk_disable(priv->clk); | 867 | clk_disable(priv->clk); |
859 | } | 868 | } |
@@ -865,14 +874,15 @@ static int sata_rcar_resume(struct device *dev) | |||
865 | { | 874 | { |
866 | struct ata_host *host = dev_get_drvdata(dev); | 875 | struct ata_host *host = dev_get_drvdata(dev); |
867 | struct sata_rcar_priv *priv = host->private_data; | 876 | struct sata_rcar_priv *priv = host->private_data; |
877 | void __iomem *base = priv->base; | ||
868 | 878 | ||
869 | clk_enable(priv->clk); | 879 | clk_enable(priv->clk); |
870 | 880 | ||
871 | /* ack and mask */ | 881 | /* ack and mask */ |
872 | iowrite32(0, priv->base + SATAINTSTAT_REG); | 882 | iowrite32(0, base + SATAINTSTAT_REG); |
873 | iowrite32(0x7ff, priv->base + SATAINTMASK_REG); | 883 | iowrite32(0x7ff, base + SATAINTMASK_REG); |
874 | /* enable interrupts */ | 884 | /* enable interrupts */ |
875 | iowrite32(ATAPI_INT_ENABLE_SATAINT, priv->base + ATAPI_INT_ENABLE_REG); | 885 | iowrite32(ATAPI_INT_ENABLE_SATAINT, base + ATAPI_INT_ENABLE_REG); |
876 | 886 | ||
877 | ata_host_resume(host); | 887 | ata_host_resume(host); |
878 | 888 | ||
diff --git a/drivers/ata/sata_sil.c b/drivers/ata/sata_sil.c index 0ae3ca4bf5c0..d67fc351343c 100644 --- a/drivers/ata/sata_sil.c +++ b/drivers/ata/sata_sil.c | |||
@@ -805,7 +805,7 @@ static int sil_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
805 | #ifdef CONFIG_PM | 805 | #ifdef CONFIG_PM |
806 | static int sil_pci_device_resume(struct pci_dev *pdev) | 806 | static int sil_pci_device_resume(struct pci_dev *pdev) |
807 | { | 807 | { |
808 | struct ata_host *host = dev_get_drvdata(&pdev->dev); | 808 | struct ata_host *host = pci_get_drvdata(pdev); |
809 | int rc; | 809 | int rc; |
810 | 810 | ||
811 | rc = ata_pci_device_do_resume(pdev); | 811 | rc = ata_pci_device_do_resume(pdev); |
diff --git a/drivers/ata/sata_sil24.c b/drivers/ata/sata_sil24.c index 59f0d630d634..aa1051ba6d13 100644 --- a/drivers/ata/sata_sil24.c +++ b/drivers/ata/sata_sil24.c | |||
@@ -1353,7 +1353,7 @@ static int sil24_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
1353 | #ifdef CONFIG_PM | 1353 | #ifdef CONFIG_PM |
1354 | static int sil24_pci_device_resume(struct pci_dev *pdev) | 1354 | static int sil24_pci_device_resume(struct pci_dev *pdev) |
1355 | { | 1355 | { |
1356 | struct ata_host *host = dev_get_drvdata(&pdev->dev); | 1356 | struct ata_host *host = pci_get_drvdata(pdev); |
1357 | void __iomem *host_base = host->iomap[SIL24_HOST_BAR]; | 1357 | void __iomem *host_base = host->iomap[SIL24_HOST_BAR]; |
1358 | int rc; | 1358 | int rc; |
1359 | 1359 | ||
diff --git a/drivers/scsi/ipr.c b/drivers/scsi/ipr.c index 6c4cedb44c07..168bc7b9f057 100644 --- a/drivers/scsi/ipr.c +++ b/drivers/scsi/ipr.c | |||
@@ -6662,7 +6662,6 @@ static bool ipr_qc_fill_rtf(struct ata_queued_cmd *qc) | |||
6662 | tf->hob_lbal = g->hob_lbal; | 6662 | tf->hob_lbal = g->hob_lbal; |
6663 | tf->hob_lbam = g->hob_lbam; | 6663 | tf->hob_lbam = g->hob_lbam; |
6664 | tf->hob_lbah = g->hob_lbah; | 6664 | tf->hob_lbah = g->hob_lbah; |
6665 | tf->ctl = g->alt_status; | ||
6666 | 6665 | ||
6667 | return true; | 6666 | return true; |
6668 | } | 6667 | } |
diff --git a/include/linux/libata.h b/include/linux/libata.h index eae7a053dc51..4ea55bb45deb 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h | |||
@@ -399,6 +399,7 @@ enum { | |||
399 | ATA_HORKAGE_BROKEN_FPDMA_AA = (1 << 15), /* skip AA */ | 399 | ATA_HORKAGE_BROKEN_FPDMA_AA = (1 << 15), /* skip AA */ |
400 | ATA_HORKAGE_DUMP_ID = (1 << 16), /* dump IDENTIFY data */ | 400 | ATA_HORKAGE_DUMP_ID = (1 << 16), /* dump IDENTIFY data */ |
401 | ATA_HORKAGE_MAX_SEC_LBA48 = (1 << 17), /* Set max sects to 65535 */ | 401 | ATA_HORKAGE_MAX_SEC_LBA48 = (1 << 17), /* Set max sects to 65535 */ |
402 | ATA_HORKAGE_ATAPI_DMADIR = (1 << 18), /* device requires dmadir */ | ||
402 | 403 | ||
403 | /* DMA mask for user DMA control: User visible values; DO NOT | 404 | /* DMA mask for user DMA control: User visible values; DO NOT |
404 | renumber */ | 405 | renumber */ |
@@ -746,6 +747,7 @@ struct ata_port { | |||
746 | /* Flags that change dynamically, protected by ap->lock */ | 747 | /* Flags that change dynamically, protected by ap->lock */ |
747 | unsigned int pflags; /* ATA_PFLAG_xxx */ | 748 | unsigned int pflags; /* ATA_PFLAG_xxx */ |
748 | unsigned int print_id; /* user visible unique port ID */ | 749 | unsigned int print_id; /* user visible unique port ID */ |
750 | unsigned int local_port_no; /* host local port num */ | ||
749 | unsigned int port_no; /* 0 based port no. inside the host */ | 751 | unsigned int port_no; /* 0 based port no. inside the host */ |
750 | 752 | ||
751 | #ifdef CONFIG_ATA_SFF | 753 | #ifdef CONFIG_ATA_SFF |
@@ -908,6 +910,9 @@ struct ata_port_operations { | |||
908 | ssize_t (*sw_activity_show)(struct ata_device *dev, char *buf); | 910 | ssize_t (*sw_activity_show)(struct ata_device *dev, char *buf); |
909 | ssize_t (*sw_activity_store)(struct ata_device *dev, | 911 | ssize_t (*sw_activity_store)(struct ata_device *dev, |
910 | enum sw_activity val); | 912 | enum sw_activity val); |
913 | ssize_t (*transmit_led_message)(struct ata_port *ap, u32 state, | ||
914 | ssize_t size); | ||
915 | |||
911 | /* | 916 | /* |
912 | * Obsolete | 917 | * Obsolete |
913 | */ | 918 | */ |