Merge tag 'armsoc-dt' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
[sfrench/cifs-2.6.git] / drivers / ata / ahci.c
1 /*
2  *  ahci.c - AHCI SATA support
3  *
4  *  Maintained by:  Tejun Heo <tj@kernel.org>
5  *                  Please ALWAYS copy linux-ide@vger.kernel.org
6  *                  on emails.
7  *
8  *  Copyright 2004-2005 Red Hat, Inc.
9  *
10  *
11  *  This program is free software; you can redistribute it and/or modify
12  *  it under the terms of the GNU General Public License as published by
13  *  the Free Software Foundation; either version 2, or (at your option)
14  *  any later version.
15  *
16  *  This program is distributed in the hope that it will be useful,
17  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
18  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19  *  GNU General Public License for more details.
20  *
21  *  You should have received a copy of the GNU General Public License
22  *  along with this program; see the file COPYING.  If not, write to
23  *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
24  *
25  *
26  * libata documentation is available via 'make {ps|pdf}docs',
27  * as Documentation/driver-api/libata.rst
28  *
29  * AHCI hardware documentation:
30  * http://www.intel.com/technology/serialata/pdf/rev1_0.pdf
31  * http://www.intel.com/technology/serialata/pdf/rev1_1.pdf
32  *
33  */
34
35 #include <linux/kernel.h>
36 #include <linux/module.h>
37 #include <linux/pci.h>
38 #include <linux/blkdev.h>
39 #include <linux/delay.h>
40 #include <linux/interrupt.h>
41 #include <linux/dma-mapping.h>
42 #include <linux/device.h>
43 #include <linux/dmi.h>
44 #include <linux/gfp.h>
45 #include <linux/msi.h>
46 #include <scsi/scsi_host.h>
47 #include <scsi/scsi_cmnd.h>
48 #include <linux/libata.h>
49 #include <linux/ahci-remap.h>
50 #include <linux/io-64-nonatomic-lo-hi.h>
51 #include "ahci.h"
52
53 #define DRV_NAME        "ahci"
54 #define DRV_VERSION     "3.0"
55
56 enum {
57         AHCI_PCI_BAR_STA2X11    = 0,
58         AHCI_PCI_BAR_CAVIUM     = 0,
59         AHCI_PCI_BAR_ENMOTUS    = 2,
60         AHCI_PCI_BAR_CAVIUM_GEN5        = 4,
61         AHCI_PCI_BAR_STANDARD   = 5,
62 };
63
64 enum board_ids {
65         /* board IDs by feature in alphabetical order */
66         board_ahci,
67         board_ahci_ign_iferr,
68         board_ahci_mobile,
69         board_ahci_nomsi,
70         board_ahci_noncq,
71         board_ahci_nosntf,
72         board_ahci_yes_fbs,
73
74         /* board IDs for specific chipsets in alphabetical order */
75         board_ahci_avn,
76         board_ahci_mcp65,
77         board_ahci_mcp77,
78         board_ahci_mcp89,
79         board_ahci_mv,
80         board_ahci_sb600,
81         board_ahci_sb700,       /* for SB700 and SB800 */
82         board_ahci_vt8251,
83
84         /* aliases */
85         board_ahci_mcp_linux    = board_ahci_mcp65,
86         board_ahci_mcp67        = board_ahci_mcp65,
87         board_ahci_mcp73        = board_ahci_mcp65,
88         board_ahci_mcp79        = board_ahci_mcp77,
89 };
90
91 static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent);
92 static void ahci_remove_one(struct pci_dev *dev);
93 static int ahci_vt8251_hardreset(struct ata_link *link, unsigned int *class,
94                                  unsigned long deadline);
95 static int ahci_avn_hardreset(struct ata_link *link, unsigned int *class,
96                               unsigned long deadline);
97 static void ahci_mcp89_apple_enable(struct pci_dev *pdev);
98 static bool is_mcp89_apple(struct pci_dev *pdev);
99 static int ahci_p5wdh_hardreset(struct ata_link *link, unsigned int *class,
100                                 unsigned long deadline);
101 #ifdef CONFIG_PM
102 static int ahci_pci_device_runtime_suspend(struct device *dev);
103 static int ahci_pci_device_runtime_resume(struct device *dev);
104 #ifdef CONFIG_PM_SLEEP
105 static int ahci_pci_device_suspend(struct device *dev);
106 static int ahci_pci_device_resume(struct device *dev);
107 #endif
108 #endif /* CONFIG_PM */
109
110 static struct scsi_host_template ahci_sht = {
111         AHCI_SHT("ahci"),
112 };
113
114 static struct ata_port_operations ahci_vt8251_ops = {
115         .inherits               = &ahci_ops,
116         .hardreset              = ahci_vt8251_hardreset,
117 };
118
119 static struct ata_port_operations ahci_p5wdh_ops = {
120         .inherits               = &ahci_ops,
121         .hardreset              = ahci_p5wdh_hardreset,
122 };
123
124 static struct ata_port_operations ahci_avn_ops = {
125         .inherits               = &ahci_ops,
126         .hardreset              = ahci_avn_hardreset,
127 };
128
129 static const struct ata_port_info ahci_port_info[] = {
130         /* by features */
131         [board_ahci] = {
132                 .flags          = AHCI_FLAG_COMMON,
133                 .pio_mask       = ATA_PIO4,
134                 .udma_mask      = ATA_UDMA6,
135                 .port_ops       = &ahci_ops,
136         },
137         [board_ahci_ign_iferr] = {
138                 AHCI_HFLAGS     (AHCI_HFLAG_IGN_IRQ_IF_ERR),
139                 .flags          = AHCI_FLAG_COMMON,
140                 .pio_mask       = ATA_PIO4,
141                 .udma_mask      = ATA_UDMA6,
142                 .port_ops       = &ahci_ops,
143         },
144         [board_ahci_mobile] = {
145                 AHCI_HFLAGS     (AHCI_HFLAG_IS_MOBILE),
146                 .flags          = AHCI_FLAG_COMMON,
147                 .pio_mask       = ATA_PIO4,
148                 .udma_mask      = ATA_UDMA6,
149                 .port_ops       = &ahci_ops,
150         },
151         [board_ahci_nomsi] = {
152                 AHCI_HFLAGS     (AHCI_HFLAG_NO_MSI),
153                 .flags          = AHCI_FLAG_COMMON,
154                 .pio_mask       = ATA_PIO4,
155                 .udma_mask      = ATA_UDMA6,
156                 .port_ops       = &ahci_ops,
157         },
158         [board_ahci_noncq] = {
159                 AHCI_HFLAGS     (AHCI_HFLAG_NO_NCQ),
160                 .flags          = AHCI_FLAG_COMMON,
161                 .pio_mask       = ATA_PIO4,
162                 .udma_mask      = ATA_UDMA6,
163                 .port_ops       = &ahci_ops,
164         },
165         [board_ahci_nosntf] = {
166                 AHCI_HFLAGS     (AHCI_HFLAG_NO_SNTF),
167                 .flags          = AHCI_FLAG_COMMON,
168                 .pio_mask       = ATA_PIO4,
169                 .udma_mask      = ATA_UDMA6,
170                 .port_ops       = &ahci_ops,
171         },
172         [board_ahci_yes_fbs] = {
173                 AHCI_HFLAGS     (AHCI_HFLAG_YES_FBS),
174                 .flags          = AHCI_FLAG_COMMON,
175                 .pio_mask       = ATA_PIO4,
176                 .udma_mask      = ATA_UDMA6,
177                 .port_ops       = &ahci_ops,
178         },
179         /* by chipsets */
180         [board_ahci_avn] = {
181                 .flags          = AHCI_FLAG_COMMON,
182                 .pio_mask       = ATA_PIO4,
183                 .udma_mask      = ATA_UDMA6,
184                 .port_ops       = &ahci_avn_ops,
185         },
186         [board_ahci_mcp65] = {
187                 AHCI_HFLAGS     (AHCI_HFLAG_NO_FPDMA_AA | AHCI_HFLAG_NO_PMP |
188                                  AHCI_HFLAG_YES_NCQ),
189                 .flags          = AHCI_FLAG_COMMON | ATA_FLAG_NO_DIPM,
190                 .pio_mask       = ATA_PIO4,
191                 .udma_mask      = ATA_UDMA6,
192                 .port_ops       = &ahci_ops,
193         },
194         [board_ahci_mcp77] = {
195                 AHCI_HFLAGS     (AHCI_HFLAG_NO_FPDMA_AA | AHCI_HFLAG_NO_PMP),
196                 .flags          = AHCI_FLAG_COMMON,
197                 .pio_mask       = ATA_PIO4,
198                 .udma_mask      = ATA_UDMA6,
199                 .port_ops       = &ahci_ops,
200         },
201         [board_ahci_mcp89] = {
202                 AHCI_HFLAGS     (AHCI_HFLAG_NO_FPDMA_AA),
203                 .flags          = AHCI_FLAG_COMMON,
204                 .pio_mask       = ATA_PIO4,
205                 .udma_mask      = ATA_UDMA6,
206                 .port_ops       = &ahci_ops,
207         },
208         [board_ahci_mv] = {
209                 AHCI_HFLAGS     (AHCI_HFLAG_NO_NCQ | AHCI_HFLAG_NO_MSI |
210                                  AHCI_HFLAG_MV_PATA | AHCI_HFLAG_NO_PMP),
211                 .flags          = ATA_FLAG_SATA | ATA_FLAG_PIO_DMA,
212                 .pio_mask       = ATA_PIO4,
213                 .udma_mask      = ATA_UDMA6,
214                 .port_ops       = &ahci_ops,
215         },
216         [board_ahci_sb600] = {
217                 AHCI_HFLAGS     (AHCI_HFLAG_IGN_SERR_INTERNAL |
218                                  AHCI_HFLAG_NO_MSI | AHCI_HFLAG_SECT255 |
219                                  AHCI_HFLAG_32BIT_ONLY),
220                 .flags          = AHCI_FLAG_COMMON,
221                 .pio_mask       = ATA_PIO4,
222                 .udma_mask      = ATA_UDMA6,
223                 .port_ops       = &ahci_pmp_retry_srst_ops,
224         },
225         [board_ahci_sb700] = {  /* for SB700 and SB800 */
226                 AHCI_HFLAGS     (AHCI_HFLAG_IGN_SERR_INTERNAL),
227                 .flags          = AHCI_FLAG_COMMON,
228                 .pio_mask       = ATA_PIO4,
229                 .udma_mask      = ATA_UDMA6,
230                 .port_ops       = &ahci_pmp_retry_srst_ops,
231         },
232         [board_ahci_vt8251] = {
233                 AHCI_HFLAGS     (AHCI_HFLAG_NO_NCQ | AHCI_HFLAG_NO_PMP),
234                 .flags          = AHCI_FLAG_COMMON,
235                 .pio_mask       = ATA_PIO4,
236                 .udma_mask      = ATA_UDMA6,
237                 .port_ops       = &ahci_vt8251_ops,
238         },
239 };
240
241 static const struct pci_device_id ahci_pci_tbl[] = {
242         /* Intel */
243         { PCI_VDEVICE(INTEL, 0x2652), board_ahci }, /* ICH6 */
244         { PCI_VDEVICE(INTEL, 0x2653), board_ahci }, /* ICH6M */
245         { PCI_VDEVICE(INTEL, 0x27c1), board_ahci }, /* ICH7 */
246         { PCI_VDEVICE(INTEL, 0x27c5), board_ahci }, /* ICH7M */
247         { PCI_VDEVICE(INTEL, 0x27c3), board_ahci }, /* ICH7R */
248         { PCI_VDEVICE(AL, 0x5288), board_ahci_ign_iferr }, /* ULi M5288 */
249         { PCI_VDEVICE(INTEL, 0x2681), board_ahci }, /* ESB2 */
250         { PCI_VDEVICE(INTEL, 0x2682), board_ahci }, /* ESB2 */
251         { PCI_VDEVICE(INTEL, 0x2683), board_ahci }, /* ESB2 */
252         { PCI_VDEVICE(INTEL, 0x27c6), board_ahci }, /* ICH7-M DH */
253         { PCI_VDEVICE(INTEL, 0x2821), board_ahci }, /* ICH8 */
254         { PCI_VDEVICE(INTEL, 0x2822), board_ahci_nosntf }, /* ICH8 */
255         { PCI_VDEVICE(INTEL, 0x2824), board_ahci }, /* ICH8 */
256         { PCI_VDEVICE(INTEL, 0x2829), board_ahci }, /* ICH8M */
257         { PCI_VDEVICE(INTEL, 0x282a), board_ahci }, /* ICH8M */
258         { PCI_VDEVICE(INTEL, 0x2922), board_ahci }, /* ICH9 */
259         { PCI_VDEVICE(INTEL, 0x2923), board_ahci }, /* ICH9 */
260         { PCI_VDEVICE(INTEL, 0x2924), board_ahci }, /* ICH9 */
261         { PCI_VDEVICE(INTEL, 0x2925), board_ahci }, /* ICH9 */
262         { PCI_VDEVICE(INTEL, 0x2927), board_ahci }, /* ICH9 */
263         { PCI_VDEVICE(INTEL, 0x2929), board_ahci_mobile }, /* ICH9M */
264         { PCI_VDEVICE(INTEL, 0x292a), board_ahci_mobile }, /* ICH9M */
265         { PCI_VDEVICE(INTEL, 0x292b), board_ahci_mobile }, /* ICH9M */
266         { PCI_VDEVICE(INTEL, 0x292c), board_ahci_mobile }, /* ICH9M */
267         { PCI_VDEVICE(INTEL, 0x292f), board_ahci_mobile }, /* ICH9M */
268         { PCI_VDEVICE(INTEL, 0x294d), board_ahci }, /* ICH9 */
269         { PCI_VDEVICE(INTEL, 0x294e), board_ahci_mobile }, /* ICH9M */
270         { PCI_VDEVICE(INTEL, 0x502a), board_ahci }, /* Tolapai */
271         { PCI_VDEVICE(INTEL, 0x502b), board_ahci }, /* Tolapai */
272         { PCI_VDEVICE(INTEL, 0x3a05), board_ahci }, /* ICH10 */
273         { PCI_VDEVICE(INTEL, 0x3a22), board_ahci }, /* ICH10 */
274         { PCI_VDEVICE(INTEL, 0x3a25), board_ahci }, /* ICH10 */
275         { PCI_VDEVICE(INTEL, 0x3b22), board_ahci }, /* PCH AHCI */
276         { PCI_VDEVICE(INTEL, 0x3b23), board_ahci }, /* PCH AHCI */
277         { PCI_VDEVICE(INTEL, 0x3b24), board_ahci }, /* PCH RAID */
278         { PCI_VDEVICE(INTEL, 0x3b25), board_ahci }, /* PCH RAID */
279         { PCI_VDEVICE(INTEL, 0x3b29), board_ahci_mobile }, /* PCH M AHCI */
280         { PCI_VDEVICE(INTEL, 0x3b2b), board_ahci }, /* PCH RAID */
281         { PCI_VDEVICE(INTEL, 0x3b2c), board_ahci_mobile }, /* PCH M RAID */
282         { PCI_VDEVICE(INTEL, 0x3b2f), board_ahci }, /* PCH AHCI */
283         { PCI_VDEVICE(INTEL, 0x19b0), board_ahci }, /* DNV AHCI */
284         { PCI_VDEVICE(INTEL, 0x19b1), board_ahci }, /* DNV AHCI */
285         { PCI_VDEVICE(INTEL, 0x19b2), board_ahci }, /* DNV AHCI */
286         { PCI_VDEVICE(INTEL, 0x19b3), board_ahci }, /* DNV AHCI */
287         { PCI_VDEVICE(INTEL, 0x19b4), board_ahci }, /* DNV AHCI */
288         { PCI_VDEVICE(INTEL, 0x19b5), board_ahci }, /* DNV AHCI */
289         { PCI_VDEVICE(INTEL, 0x19b6), board_ahci }, /* DNV AHCI */
290         { PCI_VDEVICE(INTEL, 0x19b7), board_ahci }, /* DNV AHCI */
291         { PCI_VDEVICE(INTEL, 0x19bE), board_ahci }, /* DNV AHCI */
292         { PCI_VDEVICE(INTEL, 0x19bF), board_ahci }, /* DNV AHCI */
293         { PCI_VDEVICE(INTEL, 0x19c0), board_ahci }, /* DNV AHCI */
294         { PCI_VDEVICE(INTEL, 0x19c1), board_ahci }, /* DNV AHCI */
295         { PCI_VDEVICE(INTEL, 0x19c2), board_ahci }, /* DNV AHCI */
296         { PCI_VDEVICE(INTEL, 0x19c3), board_ahci }, /* DNV AHCI */
297         { PCI_VDEVICE(INTEL, 0x19c4), board_ahci }, /* DNV AHCI */
298         { PCI_VDEVICE(INTEL, 0x19c5), board_ahci }, /* DNV AHCI */
299         { PCI_VDEVICE(INTEL, 0x19c6), board_ahci }, /* DNV AHCI */
300         { PCI_VDEVICE(INTEL, 0x19c7), board_ahci }, /* DNV AHCI */
301         { PCI_VDEVICE(INTEL, 0x19cE), board_ahci }, /* DNV AHCI */
302         { PCI_VDEVICE(INTEL, 0x19cF), board_ahci }, /* DNV AHCI */
303         { PCI_VDEVICE(INTEL, 0x1c02), board_ahci }, /* CPT AHCI */
304         { PCI_VDEVICE(INTEL, 0x1c03), board_ahci_mobile }, /* CPT M AHCI */
305         { PCI_VDEVICE(INTEL, 0x1c04), board_ahci }, /* CPT RAID */
306         { PCI_VDEVICE(INTEL, 0x1c05), board_ahci_mobile }, /* CPT M RAID */
307         { PCI_VDEVICE(INTEL, 0x1c06), board_ahci }, /* CPT RAID */
308         { PCI_VDEVICE(INTEL, 0x1c07), board_ahci }, /* CPT RAID */
309         { PCI_VDEVICE(INTEL, 0x1d02), board_ahci }, /* PBG AHCI */
310         { PCI_VDEVICE(INTEL, 0x1d04), board_ahci }, /* PBG RAID */
311         { PCI_VDEVICE(INTEL, 0x1d06), board_ahci }, /* PBG RAID */
312         { PCI_VDEVICE(INTEL, 0x2826), board_ahci }, /* PBG RAID */
313         { PCI_VDEVICE(INTEL, 0x2323), board_ahci }, /* DH89xxCC AHCI */
314         { PCI_VDEVICE(INTEL, 0x1e02), board_ahci }, /* Panther Point AHCI */
315         { PCI_VDEVICE(INTEL, 0x1e03), board_ahci_mobile }, /* Panther M AHCI */
316         { PCI_VDEVICE(INTEL, 0x1e04), board_ahci }, /* Panther Point RAID */
317         { PCI_VDEVICE(INTEL, 0x1e05), board_ahci }, /* Panther Point RAID */
318         { PCI_VDEVICE(INTEL, 0x1e06), board_ahci }, /* Panther Point RAID */
319         { PCI_VDEVICE(INTEL, 0x1e07), board_ahci_mobile }, /* Panther M RAID */
320         { PCI_VDEVICE(INTEL, 0x1e0e), board_ahci }, /* Panther Point RAID */
321         { PCI_VDEVICE(INTEL, 0x8c02), board_ahci }, /* Lynx Point AHCI */
322         { PCI_VDEVICE(INTEL, 0x8c03), board_ahci_mobile }, /* Lynx M AHCI */
323         { PCI_VDEVICE(INTEL, 0x8c04), board_ahci }, /* Lynx Point RAID */
324         { PCI_VDEVICE(INTEL, 0x8c05), board_ahci_mobile }, /* Lynx M RAID */
325         { PCI_VDEVICE(INTEL, 0x8c06), board_ahci }, /* Lynx Point RAID */
326         { PCI_VDEVICE(INTEL, 0x8c07), board_ahci_mobile }, /* Lynx M RAID */
327         { PCI_VDEVICE(INTEL, 0x8c0e), board_ahci }, /* Lynx Point RAID */
328         { PCI_VDEVICE(INTEL, 0x8c0f), board_ahci_mobile }, /* Lynx M RAID */
329         { PCI_VDEVICE(INTEL, 0x9c02), board_ahci_mobile }, /* Lynx LP AHCI */
330         { PCI_VDEVICE(INTEL, 0x9c03), board_ahci_mobile }, /* Lynx LP AHCI */
331         { PCI_VDEVICE(INTEL, 0x9c04), board_ahci_mobile }, /* Lynx LP RAID */
332         { PCI_VDEVICE(INTEL, 0x9c05), board_ahci_mobile }, /* Lynx LP RAID */
333         { PCI_VDEVICE(INTEL, 0x9c06), board_ahci_mobile }, /* Lynx LP RAID */
334         { PCI_VDEVICE(INTEL, 0x9c07), board_ahci_mobile }, /* Lynx LP RAID */
335         { PCI_VDEVICE(INTEL, 0x9c0e), board_ahci_mobile }, /* Lynx LP RAID */
336         { PCI_VDEVICE(INTEL, 0x9c0f), board_ahci_mobile }, /* Lynx LP RAID */
337         { PCI_VDEVICE(INTEL, 0x9dd3), board_ahci_mobile }, /* Cannon Lake PCH-LP AHCI */
338         { PCI_VDEVICE(INTEL, 0x1f22), board_ahci }, /* Avoton AHCI */
339         { PCI_VDEVICE(INTEL, 0x1f23), board_ahci }, /* Avoton AHCI */
340         { PCI_VDEVICE(INTEL, 0x1f24), board_ahci }, /* Avoton RAID */
341         { PCI_VDEVICE(INTEL, 0x1f25), board_ahci }, /* Avoton RAID */
342         { PCI_VDEVICE(INTEL, 0x1f26), board_ahci }, /* Avoton RAID */
343         { PCI_VDEVICE(INTEL, 0x1f27), board_ahci }, /* Avoton RAID */
344         { PCI_VDEVICE(INTEL, 0x1f2e), board_ahci }, /* Avoton RAID */
345         { PCI_VDEVICE(INTEL, 0x1f2f), board_ahci }, /* Avoton RAID */
346         { PCI_VDEVICE(INTEL, 0x1f32), board_ahci_avn }, /* Avoton AHCI */
347         { PCI_VDEVICE(INTEL, 0x1f33), board_ahci_avn }, /* Avoton AHCI */
348         { PCI_VDEVICE(INTEL, 0x1f34), board_ahci_avn }, /* Avoton RAID */
349         { PCI_VDEVICE(INTEL, 0x1f35), board_ahci_avn }, /* Avoton RAID */
350         { PCI_VDEVICE(INTEL, 0x1f36), board_ahci_avn }, /* Avoton RAID */
351         { PCI_VDEVICE(INTEL, 0x1f37), board_ahci_avn }, /* Avoton RAID */
352         { PCI_VDEVICE(INTEL, 0x1f3e), board_ahci_avn }, /* Avoton RAID */
353         { PCI_VDEVICE(INTEL, 0x1f3f), board_ahci_avn }, /* Avoton RAID */
354         { PCI_VDEVICE(INTEL, 0x2823), board_ahci }, /* Wellsburg RAID */
355         { PCI_VDEVICE(INTEL, 0x2827), board_ahci }, /* Wellsburg RAID */
356         { PCI_VDEVICE(INTEL, 0x8d02), board_ahci }, /* Wellsburg AHCI */
357         { PCI_VDEVICE(INTEL, 0x8d04), board_ahci }, /* Wellsburg RAID */
358         { PCI_VDEVICE(INTEL, 0x8d06), board_ahci }, /* Wellsburg RAID */
359         { PCI_VDEVICE(INTEL, 0x8d0e), board_ahci }, /* Wellsburg RAID */
360         { PCI_VDEVICE(INTEL, 0x8d62), board_ahci }, /* Wellsburg AHCI */
361         { PCI_VDEVICE(INTEL, 0x8d64), board_ahci }, /* Wellsburg RAID */
362         { PCI_VDEVICE(INTEL, 0x8d66), board_ahci }, /* Wellsburg RAID */
363         { PCI_VDEVICE(INTEL, 0x8d6e), board_ahci }, /* Wellsburg RAID */
364         { PCI_VDEVICE(INTEL, 0x23a3), board_ahci }, /* Coleto Creek AHCI */
365         { PCI_VDEVICE(INTEL, 0x9c83), board_ahci_mobile }, /* Wildcat LP AHCI */
366         { PCI_VDEVICE(INTEL, 0x9c85), board_ahci_mobile }, /* Wildcat LP RAID */
367         { PCI_VDEVICE(INTEL, 0x9c87), board_ahci_mobile }, /* Wildcat LP RAID */
368         { PCI_VDEVICE(INTEL, 0x9c8f), board_ahci_mobile }, /* Wildcat LP RAID */
369         { PCI_VDEVICE(INTEL, 0x8c82), board_ahci }, /* 9 Series AHCI */
370         { PCI_VDEVICE(INTEL, 0x8c83), board_ahci_mobile }, /* 9 Series M AHCI */
371         { PCI_VDEVICE(INTEL, 0x8c84), board_ahci }, /* 9 Series RAID */
372         { PCI_VDEVICE(INTEL, 0x8c85), board_ahci_mobile }, /* 9 Series M RAID */
373         { PCI_VDEVICE(INTEL, 0x8c86), board_ahci }, /* 9 Series RAID */
374         { PCI_VDEVICE(INTEL, 0x8c87), board_ahci_mobile }, /* 9 Series M RAID */
375         { PCI_VDEVICE(INTEL, 0x8c8e), board_ahci }, /* 9 Series RAID */
376         { PCI_VDEVICE(INTEL, 0x8c8f), board_ahci_mobile }, /* 9 Series M RAID */
377         { PCI_VDEVICE(INTEL, 0x9d03), board_ahci_mobile }, /* Sunrise LP AHCI */
378         { PCI_VDEVICE(INTEL, 0x9d05), board_ahci_mobile }, /* Sunrise LP RAID */
379         { PCI_VDEVICE(INTEL, 0x9d07), board_ahci_mobile }, /* Sunrise LP RAID */
380         { PCI_VDEVICE(INTEL, 0xa102), board_ahci }, /* Sunrise Point-H AHCI */
381         { PCI_VDEVICE(INTEL, 0xa103), board_ahci_mobile }, /* Sunrise M AHCI */
382         { PCI_VDEVICE(INTEL, 0xa105), board_ahci }, /* Sunrise Point-H RAID */
383         { PCI_VDEVICE(INTEL, 0xa106), board_ahci }, /* Sunrise Point-H RAID */
384         { PCI_VDEVICE(INTEL, 0xa107), board_ahci_mobile }, /* Sunrise M RAID */
385         { PCI_VDEVICE(INTEL, 0xa10f), board_ahci }, /* Sunrise Point-H RAID */
386         { PCI_VDEVICE(INTEL, 0x2822), board_ahci }, /* Lewisburg RAID*/
387         { PCI_VDEVICE(INTEL, 0x2823), board_ahci }, /* Lewisburg AHCI*/
388         { PCI_VDEVICE(INTEL, 0x2826), board_ahci }, /* Lewisburg RAID*/
389         { PCI_VDEVICE(INTEL, 0x2827), board_ahci }, /* Lewisburg RAID*/
390         { PCI_VDEVICE(INTEL, 0xa182), board_ahci }, /* Lewisburg AHCI*/
391         { PCI_VDEVICE(INTEL, 0xa186), board_ahci }, /* Lewisburg RAID*/
392         { PCI_VDEVICE(INTEL, 0xa1d2), board_ahci }, /* Lewisburg RAID*/
393         { PCI_VDEVICE(INTEL, 0xa1d6), board_ahci }, /* Lewisburg RAID*/
394         { PCI_VDEVICE(INTEL, 0xa202), board_ahci }, /* Lewisburg AHCI*/
395         { PCI_VDEVICE(INTEL, 0xa206), board_ahci }, /* Lewisburg RAID*/
396         { PCI_VDEVICE(INTEL, 0xa252), board_ahci }, /* Lewisburg RAID*/
397         { PCI_VDEVICE(INTEL, 0xa256), board_ahci }, /* Lewisburg RAID*/
398         { PCI_VDEVICE(INTEL, 0xa356), board_ahci }, /* Cannon Lake PCH-H RAID */
399         { PCI_VDEVICE(INTEL, 0x0f22), board_ahci_mobile }, /* Bay Trail AHCI */
400         { PCI_VDEVICE(INTEL, 0x0f23), board_ahci_mobile }, /* Bay Trail AHCI */
401         { PCI_VDEVICE(INTEL, 0x22a3), board_ahci_mobile }, /* Cherry Tr. AHCI */
402         { PCI_VDEVICE(INTEL, 0x5ae3), board_ahci_mobile }, /* ApolloLake AHCI */
403
404         /* JMicron 360/1/3/5/6, match class to avoid IDE function */
405         { PCI_VENDOR_ID_JMICRON, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
406           PCI_CLASS_STORAGE_SATA_AHCI, 0xffffff, board_ahci_ign_iferr },
407         /* JMicron 362B and 362C have an AHCI function with IDE class code */
408         { PCI_VDEVICE(JMICRON, 0x2362), board_ahci_ign_iferr },
409         { PCI_VDEVICE(JMICRON, 0x236f), board_ahci_ign_iferr },
410         /* May need to update quirk_jmicron_async_suspend() for additions */
411
412         /* ATI */
413         { PCI_VDEVICE(ATI, 0x4380), board_ahci_sb600 }, /* ATI SB600 */
414         { PCI_VDEVICE(ATI, 0x4390), board_ahci_sb700 }, /* ATI SB700/800 */
415         { PCI_VDEVICE(ATI, 0x4391), board_ahci_sb700 }, /* ATI SB700/800 */
416         { PCI_VDEVICE(ATI, 0x4392), board_ahci_sb700 }, /* ATI SB700/800 */
417         { PCI_VDEVICE(ATI, 0x4393), board_ahci_sb700 }, /* ATI SB700/800 */
418         { PCI_VDEVICE(ATI, 0x4394), board_ahci_sb700 }, /* ATI SB700/800 */
419         { PCI_VDEVICE(ATI, 0x4395), board_ahci_sb700 }, /* ATI SB700/800 */
420
421         /* AMD */
422         { PCI_VDEVICE(AMD, 0x7800), board_ahci }, /* AMD Hudson-2 */
423         { PCI_VDEVICE(AMD, 0x7900), board_ahci }, /* AMD CZ */
424         /* AMD is using RAID class only for ahci controllers */
425         { PCI_VENDOR_ID_AMD, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
426           PCI_CLASS_STORAGE_RAID << 8, 0xffffff, board_ahci },
427
428         /* VIA */
429         { PCI_VDEVICE(VIA, 0x3349), board_ahci_vt8251 }, /* VIA VT8251 */
430         { PCI_VDEVICE(VIA, 0x6287), board_ahci_vt8251 }, /* VIA VT8251 */
431
432         /* NVIDIA */
433         { PCI_VDEVICE(NVIDIA, 0x044c), board_ahci_mcp65 },      /* MCP65 */
434         { PCI_VDEVICE(NVIDIA, 0x044d), board_ahci_mcp65 },      /* MCP65 */
435         { PCI_VDEVICE(NVIDIA, 0x044e), board_ahci_mcp65 },      /* MCP65 */
436         { PCI_VDEVICE(NVIDIA, 0x044f), board_ahci_mcp65 },      /* MCP65 */
437         { PCI_VDEVICE(NVIDIA, 0x045c), board_ahci_mcp65 },      /* MCP65 */
438         { PCI_VDEVICE(NVIDIA, 0x045d), board_ahci_mcp65 },      /* MCP65 */
439         { PCI_VDEVICE(NVIDIA, 0x045e), board_ahci_mcp65 },      /* MCP65 */
440         { PCI_VDEVICE(NVIDIA, 0x045f), board_ahci_mcp65 },      /* MCP65 */
441         { PCI_VDEVICE(NVIDIA, 0x0550), board_ahci_mcp67 },      /* MCP67 */
442         { PCI_VDEVICE(NVIDIA, 0x0551), board_ahci_mcp67 },      /* MCP67 */
443         { PCI_VDEVICE(NVIDIA, 0x0552), board_ahci_mcp67 },      /* MCP67 */
444         { PCI_VDEVICE(NVIDIA, 0x0553), board_ahci_mcp67 },      /* MCP67 */
445         { PCI_VDEVICE(NVIDIA, 0x0554), board_ahci_mcp67 },      /* MCP67 */
446         { PCI_VDEVICE(NVIDIA, 0x0555), board_ahci_mcp67 },      /* MCP67 */
447         { PCI_VDEVICE(NVIDIA, 0x0556), board_ahci_mcp67 },      /* MCP67 */
448         { PCI_VDEVICE(NVIDIA, 0x0557), board_ahci_mcp67 },      /* MCP67 */
449         { PCI_VDEVICE(NVIDIA, 0x0558), board_ahci_mcp67 },      /* MCP67 */
450         { PCI_VDEVICE(NVIDIA, 0x0559), board_ahci_mcp67 },      /* MCP67 */
451         { PCI_VDEVICE(NVIDIA, 0x055a), board_ahci_mcp67 },      /* MCP67 */
452         { PCI_VDEVICE(NVIDIA, 0x055b), board_ahci_mcp67 },      /* MCP67 */
453         { PCI_VDEVICE(NVIDIA, 0x0580), board_ahci_mcp_linux },  /* Linux ID */
454         { PCI_VDEVICE(NVIDIA, 0x0581), board_ahci_mcp_linux },  /* Linux ID */
455         { PCI_VDEVICE(NVIDIA, 0x0582), board_ahci_mcp_linux },  /* Linux ID */
456         { PCI_VDEVICE(NVIDIA, 0x0583), board_ahci_mcp_linux },  /* Linux ID */
457         { PCI_VDEVICE(NVIDIA, 0x0584), board_ahci_mcp_linux },  /* Linux ID */
458         { PCI_VDEVICE(NVIDIA, 0x0585), board_ahci_mcp_linux },  /* Linux ID */
459         { PCI_VDEVICE(NVIDIA, 0x0586), board_ahci_mcp_linux },  /* Linux ID */
460         { PCI_VDEVICE(NVIDIA, 0x0587), board_ahci_mcp_linux },  /* Linux ID */
461         { PCI_VDEVICE(NVIDIA, 0x0588), board_ahci_mcp_linux },  /* Linux ID */
462         { PCI_VDEVICE(NVIDIA, 0x0589), board_ahci_mcp_linux },  /* Linux ID */
463         { PCI_VDEVICE(NVIDIA, 0x058a), board_ahci_mcp_linux },  /* Linux ID */
464         { PCI_VDEVICE(NVIDIA, 0x058b), board_ahci_mcp_linux },  /* Linux ID */
465         { PCI_VDEVICE(NVIDIA, 0x058c), board_ahci_mcp_linux },  /* Linux ID */
466         { PCI_VDEVICE(NVIDIA, 0x058d), board_ahci_mcp_linux },  /* Linux ID */
467         { PCI_VDEVICE(NVIDIA, 0x058e), board_ahci_mcp_linux },  /* Linux ID */
468         { PCI_VDEVICE(NVIDIA, 0x058f), board_ahci_mcp_linux },  /* Linux ID */
469         { PCI_VDEVICE(NVIDIA, 0x07f0), board_ahci_mcp73 },      /* MCP73 */
470         { PCI_VDEVICE(NVIDIA, 0x07f1), board_ahci_mcp73 },      /* MCP73 */
471         { PCI_VDEVICE(NVIDIA, 0x07f2), board_ahci_mcp73 },      /* MCP73 */
472         { PCI_VDEVICE(NVIDIA, 0x07f3), board_ahci_mcp73 },      /* MCP73 */
473         { PCI_VDEVICE(NVIDIA, 0x07f4), board_ahci_mcp73 },      /* MCP73 */
474         { PCI_VDEVICE(NVIDIA, 0x07f5), board_ahci_mcp73 },      /* MCP73 */
475         { PCI_VDEVICE(NVIDIA, 0x07f6), board_ahci_mcp73 },      /* MCP73 */
476         { PCI_VDEVICE(NVIDIA, 0x07f7), board_ahci_mcp73 },      /* MCP73 */
477         { PCI_VDEVICE(NVIDIA, 0x07f8), board_ahci_mcp73 },      /* MCP73 */
478         { PCI_VDEVICE(NVIDIA, 0x07f9), board_ahci_mcp73 },      /* MCP73 */
479         { PCI_VDEVICE(NVIDIA, 0x07fa), board_ahci_mcp73 },      /* MCP73 */
480         { PCI_VDEVICE(NVIDIA, 0x07fb), board_ahci_mcp73 },      /* MCP73 */
481         { PCI_VDEVICE(NVIDIA, 0x0ad0), board_ahci_mcp77 },      /* MCP77 */
482         { PCI_VDEVICE(NVIDIA, 0x0ad1), board_ahci_mcp77 },      /* MCP77 */
483         { PCI_VDEVICE(NVIDIA, 0x0ad2), board_ahci_mcp77 },      /* MCP77 */
484         { PCI_VDEVICE(NVIDIA, 0x0ad3), board_ahci_mcp77 },      /* MCP77 */
485         { PCI_VDEVICE(NVIDIA, 0x0ad4), board_ahci_mcp77 },      /* MCP77 */
486         { PCI_VDEVICE(NVIDIA, 0x0ad5), board_ahci_mcp77 },      /* MCP77 */
487         { PCI_VDEVICE(NVIDIA, 0x0ad6), board_ahci_mcp77 },      /* MCP77 */
488         { PCI_VDEVICE(NVIDIA, 0x0ad7), board_ahci_mcp77 },      /* MCP77 */
489         { PCI_VDEVICE(NVIDIA, 0x0ad8), board_ahci_mcp77 },      /* MCP77 */
490         { PCI_VDEVICE(NVIDIA, 0x0ad9), board_ahci_mcp77 },      /* MCP77 */
491         { PCI_VDEVICE(NVIDIA, 0x0ada), board_ahci_mcp77 },      /* MCP77 */
492         { PCI_VDEVICE(NVIDIA, 0x0adb), board_ahci_mcp77 },      /* MCP77 */
493         { PCI_VDEVICE(NVIDIA, 0x0ab4), board_ahci_mcp79 },      /* MCP79 */
494         { PCI_VDEVICE(NVIDIA, 0x0ab5), board_ahci_mcp79 },      /* MCP79 */
495         { PCI_VDEVICE(NVIDIA, 0x0ab6), board_ahci_mcp79 },      /* MCP79 */
496         { PCI_VDEVICE(NVIDIA, 0x0ab7), board_ahci_mcp79 },      /* MCP79 */
497         { PCI_VDEVICE(NVIDIA, 0x0ab8), board_ahci_mcp79 },      /* MCP79 */
498         { PCI_VDEVICE(NVIDIA, 0x0ab9), board_ahci_mcp79 },      /* MCP79 */
499         { PCI_VDEVICE(NVIDIA, 0x0aba), board_ahci_mcp79 },      /* MCP79 */
500         { PCI_VDEVICE(NVIDIA, 0x0abb), board_ahci_mcp79 },      /* MCP79 */
501         { PCI_VDEVICE(NVIDIA, 0x0abc), board_ahci_mcp79 },      /* MCP79 */
502         { PCI_VDEVICE(NVIDIA, 0x0abd), board_ahci_mcp79 },      /* MCP79 */
503         { PCI_VDEVICE(NVIDIA, 0x0abe), board_ahci_mcp79 },      /* MCP79 */
504         { PCI_VDEVICE(NVIDIA, 0x0abf), board_ahci_mcp79 },      /* MCP79 */
505         { PCI_VDEVICE(NVIDIA, 0x0d84), board_ahci_mcp89 },      /* MCP89 */
506         { PCI_VDEVICE(NVIDIA, 0x0d85), board_ahci_mcp89 },      /* MCP89 */
507         { PCI_VDEVICE(NVIDIA, 0x0d86), board_ahci_mcp89 },      /* MCP89 */
508         { PCI_VDEVICE(NVIDIA, 0x0d87), board_ahci_mcp89 },      /* MCP89 */
509         { PCI_VDEVICE(NVIDIA, 0x0d88), board_ahci_mcp89 },      /* MCP89 */
510         { PCI_VDEVICE(NVIDIA, 0x0d89), board_ahci_mcp89 },      /* MCP89 */
511         { PCI_VDEVICE(NVIDIA, 0x0d8a), board_ahci_mcp89 },      /* MCP89 */
512         { PCI_VDEVICE(NVIDIA, 0x0d8b), board_ahci_mcp89 },      /* MCP89 */
513         { PCI_VDEVICE(NVIDIA, 0x0d8c), board_ahci_mcp89 },      /* MCP89 */
514         { PCI_VDEVICE(NVIDIA, 0x0d8d), board_ahci_mcp89 },      /* MCP89 */
515         { PCI_VDEVICE(NVIDIA, 0x0d8e), board_ahci_mcp89 },      /* MCP89 */
516         { PCI_VDEVICE(NVIDIA, 0x0d8f), board_ahci_mcp89 },      /* MCP89 */
517
518         /* SiS */
519         { PCI_VDEVICE(SI, 0x1184), board_ahci },                /* SiS 966 */
520         { PCI_VDEVICE(SI, 0x1185), board_ahci },                /* SiS 968 */
521         { PCI_VDEVICE(SI, 0x0186), board_ahci },                /* SiS 968 */
522
523         /* ST Microelectronics */
524         { PCI_VDEVICE(STMICRO, 0xCC06), board_ahci },           /* ST ConneXt */
525
526         /* Marvell */
527         { PCI_VDEVICE(MARVELL, 0x6145), board_ahci_mv },        /* 6145 */
528         { PCI_VDEVICE(MARVELL, 0x6121), board_ahci_mv },        /* 6121 */
529         { PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x9123),
530           .class = PCI_CLASS_STORAGE_SATA_AHCI,
531           .class_mask = 0xffffff,
532           .driver_data = board_ahci_yes_fbs },                  /* 88se9128 */
533         { PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x9125),
534           .driver_data = board_ahci_yes_fbs },                  /* 88se9125 */
535         { PCI_DEVICE_SUB(PCI_VENDOR_ID_MARVELL_EXT, 0x9178,
536                          PCI_VENDOR_ID_MARVELL_EXT, 0x9170),
537           .driver_data = board_ahci_yes_fbs },                  /* 88se9170 */
538         { PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x917a),
539           .driver_data = board_ahci_yes_fbs },                  /* 88se9172 */
540         { PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x9172),
541           .driver_data = board_ahci_yes_fbs },                  /* 88se9182 */
542         { PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x9182),
543           .driver_data = board_ahci_yes_fbs },                  /* 88se9172 */
544         { PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x9192),
545           .driver_data = board_ahci_yes_fbs },                  /* 88se9172 on some Gigabyte */
546         { PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x91a0),
547           .driver_data = board_ahci_yes_fbs },
548         { PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x91a2),        /* 88se91a2 */
549           .driver_data = board_ahci_yes_fbs },
550         { PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x91a3),
551           .driver_data = board_ahci_yes_fbs },
552         { PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x9230),
553           .driver_data = board_ahci_yes_fbs },
554         { PCI_DEVICE(PCI_VENDOR_ID_TTI, 0x0642), /* highpoint rocketraid 642L */
555           .driver_data = board_ahci_yes_fbs },
556         { PCI_DEVICE(PCI_VENDOR_ID_TTI, 0x0645), /* highpoint rocketraid 644L */
557           .driver_data = board_ahci_yes_fbs },
558
559         /* Promise */
560         { PCI_VDEVICE(PROMISE, 0x3f20), board_ahci },   /* PDC42819 */
561         { PCI_VDEVICE(PROMISE, 0x3781), board_ahci },   /* FastTrak TX8660 ahci-mode */
562
563         /* Asmedia */
564         { PCI_VDEVICE(ASMEDIA, 0x0601), board_ahci },   /* ASM1060 */
565         { PCI_VDEVICE(ASMEDIA, 0x0602), board_ahci },   /* ASM1060 */
566         { PCI_VDEVICE(ASMEDIA, 0x0611), board_ahci },   /* ASM1061 */
567         { PCI_VDEVICE(ASMEDIA, 0x0612), board_ahci },   /* ASM1062 */
568         { PCI_VDEVICE(ASMEDIA, 0x0621), board_ahci },   /* ASM1061R */
569         { PCI_VDEVICE(ASMEDIA, 0x0622), board_ahci },   /* ASM1062R */
570
571         /*
572          * Samsung SSDs found on some macbooks.  NCQ times out if MSI is
573          * enabled.  https://bugzilla.kernel.org/show_bug.cgi?id=60731
574          */
575         { PCI_VDEVICE(SAMSUNG, 0x1600), board_ahci_nomsi },
576         { PCI_VDEVICE(SAMSUNG, 0xa800), board_ahci_nomsi },
577
578         /* Enmotus */
579         { PCI_DEVICE(0x1c44, 0x8000), board_ahci },
580
581         /* Generic, PCI class code for AHCI */
582         { PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
583           PCI_CLASS_STORAGE_SATA_AHCI, 0xffffff, board_ahci },
584
585         { }     /* terminate list */
586 };
587
588 static const struct dev_pm_ops ahci_pci_pm_ops = {
589         SET_SYSTEM_SLEEP_PM_OPS(ahci_pci_device_suspend, ahci_pci_device_resume)
590         SET_RUNTIME_PM_OPS(ahci_pci_device_runtime_suspend,
591                            ahci_pci_device_runtime_resume, NULL)
592 };
593
594 static struct pci_driver ahci_pci_driver = {
595         .name                   = DRV_NAME,
596         .id_table               = ahci_pci_tbl,
597         .probe                  = ahci_init_one,
598         .remove                 = ahci_remove_one,
599         .driver = {
600                 .pm             = &ahci_pci_pm_ops,
601         },
602 };
603
604 #if IS_ENABLED(CONFIG_PATA_MARVELL)
605 static int marvell_enable;
606 #else
607 static int marvell_enable = 1;
608 #endif
609 module_param(marvell_enable, int, 0644);
610 MODULE_PARM_DESC(marvell_enable, "Marvell SATA via AHCI (1 = enabled)");
611
612 static int mobile_lpm_policy = CONFIG_SATA_MOBILE_LPM_POLICY;
613 module_param(mobile_lpm_policy, int, 0644);
614 MODULE_PARM_DESC(mobile_lpm_policy, "Default LPM policy for mobile chipsets");
615
616 static void ahci_pci_save_initial_config(struct pci_dev *pdev,
617                                          struct ahci_host_priv *hpriv)
618 {
619         if (pdev->vendor == PCI_VENDOR_ID_JMICRON && pdev->device == 0x2361) {
620                 dev_info(&pdev->dev, "JMB361 has only one port\n");
621                 hpriv->force_port_map = 1;
622         }
623
624         /*
625          * Temporary Marvell 6145 hack: PATA port presence
626          * is asserted through the standard AHCI port
627          * presence register, as bit 4 (counting from 0)
628          */
629         if (hpriv->flags & AHCI_HFLAG_MV_PATA) {
630                 if (pdev->device == 0x6121)
631                         hpriv->mask_port_map = 0x3;
632                 else
633                         hpriv->mask_port_map = 0xf;
634                 dev_info(&pdev->dev,
635                           "Disabling your PATA port. Use the boot option 'ahci.marvell_enable=0' to avoid this.\n");
636         }
637
638         ahci_save_initial_config(&pdev->dev, hpriv);
639 }
640
641 static int ahci_pci_reset_controller(struct ata_host *host)
642 {
643         struct pci_dev *pdev = to_pci_dev(host->dev);
644         int rc;
645
646         rc = ahci_reset_controller(host);
647         if (rc)
648                 return rc;
649
650         if (pdev->vendor == PCI_VENDOR_ID_INTEL) {
651                 struct ahci_host_priv *hpriv = host->private_data;
652                 u16 tmp16;
653
654                 /* configure PCS */
655                 pci_read_config_word(pdev, 0x92, &tmp16);
656                 if ((tmp16 & hpriv->port_map) != hpriv->port_map) {
657                         tmp16 |= hpriv->port_map;
658                         pci_write_config_word(pdev, 0x92, tmp16);
659                 }
660         }
661
662         return 0;
663 }
664
665 static void ahci_pci_init_controller(struct ata_host *host)
666 {
667         struct ahci_host_priv *hpriv = host->private_data;
668         struct pci_dev *pdev = to_pci_dev(host->dev);
669         void __iomem *port_mmio;
670         u32 tmp;
671         int mv;
672
673         if (hpriv->flags & AHCI_HFLAG_MV_PATA) {
674                 if (pdev->device == 0x6121)
675                         mv = 2;
676                 else
677                         mv = 4;
678                 port_mmio = __ahci_port_base(host, mv);
679
680                 writel(0, port_mmio + PORT_IRQ_MASK);
681
682                 /* clear port IRQ */
683                 tmp = readl(port_mmio + PORT_IRQ_STAT);
684                 VPRINTK("PORT_IRQ_STAT 0x%x\n", tmp);
685                 if (tmp)
686                         writel(tmp, port_mmio + PORT_IRQ_STAT);
687         }
688
689         ahci_init_controller(host);
690 }
691
692 static int ahci_vt8251_hardreset(struct ata_link *link, unsigned int *class,
693                                  unsigned long deadline)
694 {
695         struct ata_port *ap = link->ap;
696         struct ahci_host_priv *hpriv = ap->host->private_data;
697         bool online;
698         int rc;
699
700         DPRINTK("ENTER\n");
701
702         hpriv->stop_engine(ap);
703
704         rc = sata_link_hardreset(link, sata_ehc_deb_timing(&link->eh_context),
705                                  deadline, &online, NULL);
706
707         hpriv->start_engine(ap);
708
709         DPRINTK("EXIT, rc=%d, class=%u\n", rc, *class);
710
711         /* vt8251 doesn't clear BSY on signature FIS reception,
712          * request follow-up softreset.
713          */
714         return online ? -EAGAIN : rc;
715 }
716
717 static int ahci_p5wdh_hardreset(struct ata_link *link, unsigned int *class,
718                                 unsigned long deadline)
719 {
720         struct ata_port *ap = link->ap;
721         struct ahci_port_priv *pp = ap->private_data;
722         struct ahci_host_priv *hpriv = ap->host->private_data;
723         u8 *d2h_fis = pp->rx_fis + RX_FIS_D2H_REG;
724         struct ata_taskfile tf;
725         bool online;
726         int rc;
727
728         hpriv->stop_engine(ap);
729
730         /* clear D2H reception area to properly wait for D2H FIS */
731         ata_tf_init(link->device, &tf);
732         tf.command = ATA_BUSY;
733         ata_tf_to_fis(&tf, 0, 0, d2h_fis);
734
735         rc = sata_link_hardreset(link, sata_ehc_deb_timing(&link->eh_context),
736                                  deadline, &online, NULL);
737
738         hpriv->start_engine(ap);
739
740         /* The pseudo configuration device on SIMG4726 attached to
741          * ASUS P5W-DH Deluxe doesn't send signature FIS after
742          * hardreset if no device is attached to the first downstream
743          * port && the pseudo device locks up on SRST w/ PMP==0.  To
744          * work around this, wait for !BSY only briefly.  If BSY isn't
745          * cleared, perform CLO and proceed to IDENTIFY (achieved by
746          * ATA_LFLAG_NO_SRST and ATA_LFLAG_ASSUME_ATA).
747          *
748          * Wait for two seconds.  Devices attached to downstream port
749          * which can't process the following IDENTIFY after this will
750          * have to be reset again.  For most cases, this should
751          * suffice while making probing snappish enough.
752          */
753         if (online) {
754                 rc = ata_wait_after_reset(link, jiffies + 2 * HZ,
755                                           ahci_check_ready);
756                 if (rc)
757                         ahci_kick_engine(ap);
758         }
759         return rc;
760 }
761
762 /*
763  * ahci_avn_hardreset - attempt more aggressive recovery of Avoton ports.
764  *
765  * It has been observed with some SSDs that the timing of events in the
766  * link synchronization phase can leave the port in a state that can not
767  * be recovered by a SATA-hard-reset alone.  The failing signature is
768  * SStatus.DET stuck at 1 ("Device presence detected but Phy
769  * communication not established").  It was found that unloading and
770  * reloading the driver when this problem occurs allows the drive
771  * connection to be recovered (DET advanced to 0x3).  The critical
772  * component of reloading the driver is that the port state machines are
773  * reset by bouncing "port enable" in the AHCI PCS configuration
774  * register.  So, reproduce that effect by bouncing a port whenever we
775  * see DET==1 after a reset.
776  */
777 static int ahci_avn_hardreset(struct ata_link *link, unsigned int *class,
778                               unsigned long deadline)
779 {
780         const unsigned long *timing = sata_ehc_deb_timing(&link->eh_context);
781         struct ata_port *ap = link->ap;
782         struct ahci_port_priv *pp = ap->private_data;
783         struct ahci_host_priv *hpriv = ap->host->private_data;
784         u8 *d2h_fis = pp->rx_fis + RX_FIS_D2H_REG;
785         unsigned long tmo = deadline - jiffies;
786         struct ata_taskfile tf;
787         bool online;
788         int rc, i;
789
790         DPRINTK("ENTER\n");
791
792         hpriv->stop_engine(ap);
793
794         for (i = 0; i < 2; i++) {
795                 u16 val;
796                 u32 sstatus;
797                 int port = ap->port_no;
798                 struct ata_host *host = ap->host;
799                 struct pci_dev *pdev = to_pci_dev(host->dev);
800
801                 /* clear D2H reception area to properly wait for D2H FIS */
802                 ata_tf_init(link->device, &tf);
803                 tf.command = ATA_BUSY;
804                 ata_tf_to_fis(&tf, 0, 0, d2h_fis);
805
806                 rc = sata_link_hardreset(link, timing, deadline, &online,
807                                 ahci_check_ready);
808
809                 if (sata_scr_read(link, SCR_STATUS, &sstatus) != 0 ||
810                                 (sstatus & 0xf) != 1)
811                         break;
812
813                 ata_link_printk(link, KERN_INFO, "avn bounce port%d\n",
814                                 port);
815
816                 pci_read_config_word(pdev, 0x92, &val);
817                 val &= ~(1 << port);
818                 pci_write_config_word(pdev, 0x92, val);
819                 ata_msleep(ap, 1000);
820                 val |= 1 << port;
821                 pci_write_config_word(pdev, 0x92, val);
822                 deadline += tmo;
823         }
824
825         hpriv->start_engine(ap);
826
827         if (online)
828                 *class = ahci_dev_classify(ap);
829
830         DPRINTK("EXIT, rc=%d, class=%u\n", rc, *class);
831         return rc;
832 }
833
834
835 #ifdef CONFIG_PM
836 static void ahci_pci_disable_interrupts(struct ata_host *host)
837 {
838         struct ahci_host_priv *hpriv = host->private_data;
839         void __iomem *mmio = hpriv->mmio;
840         u32 ctl;
841
842         /* AHCI spec rev1.1 section 8.3.3:
843          * Software must disable interrupts prior to requesting a
844          * transition of the HBA to D3 state.
845          */
846         ctl = readl(mmio + HOST_CTL);
847         ctl &= ~HOST_IRQ_EN;
848         writel(ctl, mmio + HOST_CTL);
849         readl(mmio + HOST_CTL); /* flush */
850 }
851
852 static int ahci_pci_device_runtime_suspend(struct device *dev)
853 {
854         struct pci_dev *pdev = to_pci_dev(dev);
855         struct ata_host *host = pci_get_drvdata(pdev);
856
857         ahci_pci_disable_interrupts(host);
858         return 0;
859 }
860
861 static int ahci_pci_device_runtime_resume(struct device *dev)
862 {
863         struct pci_dev *pdev = to_pci_dev(dev);
864         struct ata_host *host = pci_get_drvdata(pdev);
865         int rc;
866
867         rc = ahci_pci_reset_controller(host);
868         if (rc)
869                 return rc;
870         ahci_pci_init_controller(host);
871         return 0;
872 }
873
874 #ifdef CONFIG_PM_SLEEP
875 static int ahci_pci_device_suspend(struct device *dev)
876 {
877         struct pci_dev *pdev = to_pci_dev(dev);
878         struct ata_host *host = pci_get_drvdata(pdev);
879         struct ahci_host_priv *hpriv = host->private_data;
880
881         if (hpriv->flags & AHCI_HFLAG_NO_SUSPEND) {
882                 dev_err(&pdev->dev,
883                         "BIOS update required for suspend/resume\n");
884                 return -EIO;
885         }
886
887         ahci_pci_disable_interrupts(host);
888         return ata_host_suspend(host, PMSG_SUSPEND);
889 }
890
891 static int ahci_pci_device_resume(struct device *dev)
892 {
893         struct pci_dev *pdev = to_pci_dev(dev);
894         struct ata_host *host = pci_get_drvdata(pdev);
895         int rc;
896
897         /* Apple BIOS helpfully mangles the registers on resume */
898         if (is_mcp89_apple(pdev))
899                 ahci_mcp89_apple_enable(pdev);
900
901         if (pdev->dev.power.power_state.event == PM_EVENT_SUSPEND) {
902                 rc = ahci_pci_reset_controller(host);
903                 if (rc)
904                         return rc;
905
906                 ahci_pci_init_controller(host);
907         }
908
909         ata_host_resume(host);
910
911         return 0;
912 }
913 #endif
914
915 #endif /* CONFIG_PM */
916
917 static int ahci_configure_dma_masks(struct pci_dev *pdev, int using_dac)
918 {
919         int rc;
920
921         /*
922          * If the device fixup already set the dma_mask to some non-standard
923          * value, don't extend it here. This happens on STA2X11, for example.
924          */
925         if (pdev->dma_mask && pdev->dma_mask < DMA_BIT_MASK(32))
926                 return 0;
927
928         if (using_dac &&
929             !dma_set_mask(&pdev->dev, DMA_BIT_MASK(64))) {
930                 rc = dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(64));
931                 if (rc) {
932                         rc = dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(32));
933                         if (rc) {
934                                 dev_err(&pdev->dev,
935                                         "64-bit DMA enable failed\n");
936                                 return rc;
937                         }
938                 }
939         } else {
940                 rc = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32));
941                 if (rc) {
942                         dev_err(&pdev->dev, "32-bit DMA enable failed\n");
943                         return rc;
944                 }
945                 rc = dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(32));
946                 if (rc) {
947                         dev_err(&pdev->dev,
948                                 "32-bit consistent DMA enable failed\n");
949                         return rc;
950                 }
951         }
952         return 0;
953 }
954
955 static void ahci_pci_print_info(struct ata_host *host)
956 {
957         struct pci_dev *pdev = to_pci_dev(host->dev);
958         u16 cc;
959         const char *scc_s;
960
961         pci_read_config_word(pdev, 0x0a, &cc);
962         if (cc == PCI_CLASS_STORAGE_IDE)
963                 scc_s = "IDE";
964         else if (cc == PCI_CLASS_STORAGE_SATA)
965                 scc_s = "SATA";
966         else if (cc == PCI_CLASS_STORAGE_RAID)
967                 scc_s = "RAID";
968         else
969                 scc_s = "unknown";
970
971         ahci_print_info(host, scc_s);
972 }
973
974 /* On ASUS P5W DH Deluxe, the second port of PCI device 00:1f.2 is
975  * hardwired to on-board SIMG 4726.  The chipset is ICH8 and doesn't
976  * support PMP and the 4726 either directly exports the device
977  * attached to the first downstream port or acts as a hardware storage
978  * controller and emulate a single ATA device (can be RAID 0/1 or some
979  * other configuration).
980  *
981  * When there's no device attached to the first downstream port of the
982  * 4726, "Config Disk" appears, which is a pseudo ATA device to
983  * configure the 4726.  However, ATA emulation of the device is very
984  * lame.  It doesn't send signature D2H Reg FIS after the initial
985  * hardreset, pukes on SRST w/ PMP==0 and has bunch of other issues.
986  *
987  * The following function works around the problem by always using
988  * hardreset on the port and not depending on receiving signature FIS
989  * afterward.  If signature FIS isn't received soon, ATA class is
990  * assumed without follow-up softreset.
991  */
992 static void ahci_p5wdh_workaround(struct ata_host *host)
993 {
994         static const struct dmi_system_id sysids[] = {
995                 {
996                         .ident = "P5W DH Deluxe",
997                         .matches = {
998                                 DMI_MATCH(DMI_SYS_VENDOR,
999                                           "ASUSTEK COMPUTER INC"),
1000                                 DMI_MATCH(DMI_PRODUCT_NAME, "P5W DH Deluxe"),
1001                         },
1002                 },
1003                 { }
1004         };
1005         struct pci_dev *pdev = to_pci_dev(host->dev);
1006
1007         if (pdev->bus->number == 0 && pdev->devfn == PCI_DEVFN(0x1f, 2) &&
1008             dmi_check_system(sysids)) {
1009                 struct ata_port *ap = host->ports[1];
1010
1011                 dev_info(&pdev->dev,
1012                          "enabling ASUS P5W DH Deluxe on-board SIMG4726 workaround\n");
1013
1014                 ap->ops = &ahci_p5wdh_ops;
1015                 ap->link.flags |= ATA_LFLAG_NO_SRST | ATA_LFLAG_ASSUME_ATA;
1016         }
1017 }
1018
1019 /*
1020  * Macbook7,1 firmware forcibly disables MCP89 AHCI and changes PCI ID when
1021  * booting in BIOS compatibility mode.  We restore the registers but not ID.
1022  */
1023 static void ahci_mcp89_apple_enable(struct pci_dev *pdev)
1024 {
1025         u32 val;
1026
1027         printk(KERN_INFO "ahci: enabling MCP89 AHCI mode\n");
1028
1029         pci_read_config_dword(pdev, 0xf8, &val);
1030         val |= 1 << 0x1b;
1031         /* the following changes the device ID, but appears not to affect function */
1032         /* val = (val & ~0xf0000000) | 0x80000000; */
1033         pci_write_config_dword(pdev, 0xf8, val);
1034
1035         pci_read_config_dword(pdev, 0x54c, &val);
1036         val |= 1 << 0xc;
1037         pci_write_config_dword(pdev, 0x54c, val);
1038
1039         pci_read_config_dword(pdev, 0x4a4, &val);
1040         val &= 0xff;
1041         val |= 0x01060100;
1042         pci_write_config_dword(pdev, 0x4a4, val);
1043
1044         pci_read_config_dword(pdev, 0x54c, &val);
1045         val &= ~(1 << 0xc);
1046         pci_write_config_dword(pdev, 0x54c, val);
1047
1048         pci_read_config_dword(pdev, 0xf8, &val);
1049         val &= ~(1 << 0x1b);
1050         pci_write_config_dword(pdev, 0xf8, val);
1051 }
1052
1053 static bool is_mcp89_apple(struct pci_dev *pdev)
1054 {
1055         return pdev->vendor == PCI_VENDOR_ID_NVIDIA &&
1056                 pdev->device == PCI_DEVICE_ID_NVIDIA_NFORCE_MCP89_SATA &&
1057                 pdev->subsystem_vendor == PCI_VENDOR_ID_APPLE &&
1058                 pdev->subsystem_device == 0xcb89;
1059 }
1060
1061 /* only some SB600 ahci controllers can do 64bit DMA */
1062 static bool ahci_sb600_enable_64bit(struct pci_dev *pdev)
1063 {
1064         static const struct dmi_system_id sysids[] = {
1065                 /*
1066                  * The oldest version known to be broken is 0901 and
1067                  * working is 1501 which was released on 2007-10-26.
1068                  * Enable 64bit DMA on 1501 and anything newer.
1069                  *
1070                  * Please read bko#9412 for more info.
1071                  */
1072                 {
1073                         .ident = "ASUS M2A-VM",
1074                         .matches = {
1075                                 DMI_MATCH(DMI_BOARD_VENDOR,
1076                                           "ASUSTeK Computer INC."),
1077                                 DMI_MATCH(DMI_BOARD_NAME, "M2A-VM"),
1078                         },
1079                         .driver_data = "20071026",      /* yyyymmdd */
1080                 },
1081                 /*
1082                  * All BIOS versions for the MSI K9A2 Platinum (MS-7376)
1083                  * support 64bit DMA.
1084                  *
1085                  * BIOS versions earlier than 1.5 had the Manufacturer DMI
1086                  * fields as "MICRO-STAR INTERANTIONAL CO.,LTD".
1087                  * This spelling mistake was fixed in BIOS version 1.5, so
1088                  * 1.5 and later have the Manufacturer as
1089                  * "MICRO-STAR INTERNATIONAL CO.,LTD".
1090                  * So try to match on DMI_BOARD_VENDOR of "MICRO-STAR INTER".
1091                  *
1092                  * BIOS versions earlier than 1.9 had a Board Product Name
1093                  * DMI field of "MS-7376". This was changed to be
1094                  * "K9A2 Platinum (MS-7376)" in version 1.9, but we can still
1095                  * match on DMI_BOARD_NAME of "MS-7376".
1096                  */
1097                 {
1098                         .ident = "MSI K9A2 Platinum",
1099                         .matches = {
1100                                 DMI_MATCH(DMI_BOARD_VENDOR,
1101                                           "MICRO-STAR INTER"),
1102                                 DMI_MATCH(DMI_BOARD_NAME, "MS-7376"),
1103                         },
1104                 },
1105                 /*
1106                  * All BIOS versions for the MSI K9AGM2 (MS-7327) support
1107                  * 64bit DMA.
1108                  *
1109                  * This board also had the typo mentioned above in the
1110                  * Manufacturer DMI field (fixed in BIOS version 1.5), so
1111                  * match on DMI_BOARD_VENDOR of "MICRO-STAR INTER" again.
1112                  */
1113                 {
1114                         .ident = "MSI K9AGM2",
1115                         .matches = {
1116                                 DMI_MATCH(DMI_BOARD_VENDOR,
1117                                           "MICRO-STAR INTER"),
1118                                 DMI_MATCH(DMI_BOARD_NAME, "MS-7327"),
1119                         },
1120                 },
1121                 /*
1122                  * All BIOS versions for the Asus M3A support 64bit DMA.
1123                  * (all release versions from 0301 to 1206 were tested)
1124                  */
1125                 {
1126                         .ident = "ASUS M3A",
1127                         .matches = {
1128                                 DMI_MATCH(DMI_BOARD_VENDOR,
1129                                           "ASUSTeK Computer INC."),
1130                                 DMI_MATCH(DMI_BOARD_NAME, "M3A"),
1131                         },
1132                 },
1133                 { }
1134         };
1135         const struct dmi_system_id *match;
1136         int year, month, date;
1137         char buf[9];
1138
1139         match = dmi_first_match(sysids);
1140         if (pdev->bus->number != 0 || pdev->devfn != PCI_DEVFN(0x12, 0) ||
1141             !match)
1142                 return false;
1143
1144         if (!match->driver_data)
1145                 goto enable_64bit;
1146
1147         dmi_get_date(DMI_BIOS_DATE, &year, &month, &date);
1148         snprintf(buf, sizeof(buf), "%04d%02d%02d", year, month, date);
1149
1150         if (strcmp(buf, match->driver_data) >= 0)
1151                 goto enable_64bit;
1152         else {
1153                 dev_warn(&pdev->dev,
1154                          "%s: BIOS too old, forcing 32bit DMA, update BIOS\n",
1155                          match->ident);
1156                 return false;
1157         }
1158
1159 enable_64bit:
1160         dev_warn(&pdev->dev, "%s: enabling 64bit DMA\n", match->ident);
1161         return true;
1162 }
1163
1164 static bool ahci_broken_system_poweroff(struct pci_dev *pdev)
1165 {
1166         static const struct dmi_system_id broken_systems[] = {
1167                 {
1168                         .ident = "HP Compaq nx6310",
1169                         .matches = {
1170                                 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
1171                                 DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq nx6310"),
1172                         },
1173                         /* PCI slot number of the controller */
1174                         .driver_data = (void *)0x1FUL,
1175                 },
1176                 {
1177                         .ident = "HP Compaq 6720s",
1178                         .matches = {
1179                                 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
1180                                 DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq 6720s"),
1181                         },
1182                         /* PCI slot number of the controller */
1183                         .driver_data = (void *)0x1FUL,
1184                 },
1185
1186                 { }     /* terminate list */
1187         };
1188         const struct dmi_system_id *dmi = dmi_first_match(broken_systems);
1189
1190         if (dmi) {
1191                 unsigned long slot = (unsigned long)dmi->driver_data;
1192                 /* apply the quirk only to on-board controllers */
1193                 return slot == PCI_SLOT(pdev->devfn);
1194         }
1195
1196         return false;
1197 }
1198
1199 static bool ahci_broken_suspend(struct pci_dev *pdev)
1200 {
1201         static const struct dmi_system_id sysids[] = {
1202                 /*
1203                  * On HP dv[4-6] and HDX18 with earlier BIOSen, link
1204                  * to the harddisk doesn't become online after
1205                  * resuming from STR.  Warn and fail suspend.
1206                  *
1207                  * http://bugzilla.kernel.org/show_bug.cgi?id=12276
1208                  *
1209                  * Use dates instead of versions to match as HP is
1210                  * apparently recycling both product and version
1211                  * strings.
1212                  *
1213                  * http://bugzilla.kernel.org/show_bug.cgi?id=15462
1214                  */
1215                 {
1216                         .ident = "dv4",
1217                         .matches = {
1218                                 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
1219                                 DMI_MATCH(DMI_PRODUCT_NAME,
1220                                           "HP Pavilion dv4 Notebook PC"),
1221                         },
1222                         .driver_data = "20090105",      /* F.30 */
1223                 },
1224                 {
1225                         .ident = "dv5",
1226                         .matches = {
1227                                 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
1228                                 DMI_MATCH(DMI_PRODUCT_NAME,
1229                                           "HP Pavilion dv5 Notebook PC"),
1230                         },
1231                         .driver_data = "20090506",      /* F.16 */
1232                 },
1233                 {
1234                         .ident = "dv6",
1235                         .matches = {
1236                                 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
1237                                 DMI_MATCH(DMI_PRODUCT_NAME,
1238                                           "HP Pavilion dv6 Notebook PC"),
1239                         },
1240                         .driver_data = "20090423",      /* F.21 */
1241                 },
1242                 {
1243                         .ident = "HDX18",
1244                         .matches = {
1245                                 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
1246                                 DMI_MATCH(DMI_PRODUCT_NAME,
1247                                           "HP HDX18 Notebook PC"),
1248                         },
1249                         .driver_data = "20090430",      /* F.23 */
1250                 },
1251                 /*
1252                  * Acer eMachines G725 has the same problem.  BIOS
1253                  * V1.03 is known to be broken.  V3.04 is known to
1254                  * work.  Between, there are V1.06, V2.06 and V3.03
1255                  * that we don't have much idea about.  For now,
1256                  * blacklist anything older than V3.04.
1257                  *
1258                  * http://bugzilla.kernel.org/show_bug.cgi?id=15104
1259                  */
1260                 {
1261                         .ident = "G725",
1262                         .matches = {
1263                                 DMI_MATCH(DMI_SYS_VENDOR, "eMachines"),
1264                                 DMI_MATCH(DMI_PRODUCT_NAME, "eMachines G725"),
1265                         },
1266                         .driver_data = "20091216",      /* V3.04 */
1267                 },
1268                 { }     /* terminate list */
1269         };
1270         const struct dmi_system_id *dmi = dmi_first_match(sysids);
1271         int year, month, date;
1272         char buf[9];
1273
1274         if (!dmi || pdev->bus->number || pdev->devfn != PCI_DEVFN(0x1f, 2))
1275                 return false;
1276
1277         dmi_get_date(DMI_BIOS_DATE, &year, &month, &date);
1278         snprintf(buf, sizeof(buf), "%04d%02d%02d", year, month, date);
1279
1280         return strcmp(buf, dmi->driver_data) < 0;
1281 }
1282
1283 static bool ahci_broken_online(struct pci_dev *pdev)
1284 {
1285 #define ENCODE_BUSDEVFN(bus, slot, func)                        \
1286         (void *)(unsigned long)(((bus) << 8) | PCI_DEVFN((slot), (func)))
1287         static const struct dmi_system_id sysids[] = {
1288                 /*
1289                  * There are several gigabyte boards which use
1290                  * SIMG5723s configured as hardware RAID.  Certain
1291                  * 5723 firmware revisions shipped there keep the link
1292                  * online but fail to answer properly to SRST or
1293                  * IDENTIFY when no device is attached downstream
1294                  * causing libata to retry quite a few times leading
1295                  * to excessive detection delay.
1296                  *
1297                  * As these firmwares respond to the second reset try
1298                  * with invalid device signature, considering unknown
1299                  * sig as offline works around the problem acceptably.
1300                  */
1301                 {
1302                         .ident = "EP45-DQ6",
1303                         .matches = {
1304                                 DMI_MATCH(DMI_BOARD_VENDOR,
1305                                           "Gigabyte Technology Co., Ltd."),
1306                                 DMI_MATCH(DMI_BOARD_NAME, "EP45-DQ6"),
1307                         },
1308                         .driver_data = ENCODE_BUSDEVFN(0x0a, 0x00, 0),
1309                 },
1310                 {
1311                         .ident = "EP45-DS5",
1312                         .matches = {
1313                                 DMI_MATCH(DMI_BOARD_VENDOR,
1314                                           "Gigabyte Technology Co., Ltd."),
1315                                 DMI_MATCH(DMI_BOARD_NAME, "EP45-DS5"),
1316                         },
1317                         .driver_data = ENCODE_BUSDEVFN(0x03, 0x00, 0),
1318                 },
1319                 { }     /* terminate list */
1320         };
1321 #undef ENCODE_BUSDEVFN
1322         const struct dmi_system_id *dmi = dmi_first_match(sysids);
1323         unsigned int val;
1324
1325         if (!dmi)
1326                 return false;
1327
1328         val = (unsigned long)dmi->driver_data;
1329
1330         return pdev->bus->number == (val >> 8) && pdev->devfn == (val & 0xff);
1331 }
1332
1333 static bool ahci_broken_devslp(struct pci_dev *pdev)
1334 {
1335         /* device with broken DEVSLP but still showing SDS capability */
1336         static const struct pci_device_id ids[] = {
1337                 { PCI_VDEVICE(INTEL, 0x0f23)}, /* Valleyview SoC */
1338                 {}
1339         };
1340
1341         return pci_match_id(ids, pdev);
1342 }
1343
1344 #ifdef CONFIG_ATA_ACPI
1345 static void ahci_gtf_filter_workaround(struct ata_host *host)
1346 {
1347         static const struct dmi_system_id sysids[] = {
1348                 /*
1349                  * Aspire 3810T issues a bunch of SATA enable commands
1350                  * via _GTF including an invalid one and one which is
1351                  * rejected by the device.  Among the successful ones
1352                  * is FPDMA non-zero offset enable which when enabled
1353                  * only on the drive side leads to NCQ command
1354                  * failures.  Filter it out.
1355                  */
1356                 {
1357                         .ident = "Aspire 3810T",
1358                         .matches = {
1359                                 DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
1360                                 DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 3810T"),
1361                         },
1362                         .driver_data = (void *)ATA_ACPI_FILTER_FPDMA_OFFSET,
1363                 },
1364                 { }
1365         };
1366         const struct dmi_system_id *dmi = dmi_first_match(sysids);
1367         unsigned int filter;
1368         int i;
1369
1370         if (!dmi)
1371                 return;
1372
1373         filter = (unsigned long)dmi->driver_data;
1374         dev_info(host->dev, "applying extra ACPI _GTF filter 0x%x for %s\n",
1375                  filter, dmi->ident);
1376
1377         for (i = 0; i < host->n_ports; i++) {
1378                 struct ata_port *ap = host->ports[i];
1379                 struct ata_link *link;
1380                 struct ata_device *dev;
1381
1382                 ata_for_each_link(link, ap, EDGE)
1383                         ata_for_each_dev(dev, link, ALL)
1384                                 dev->gtf_filter |= filter;
1385         }
1386 }
1387 #else
1388 static inline void ahci_gtf_filter_workaround(struct ata_host *host)
1389 {}
1390 #endif
1391
1392 /*
1393  * On the Acer Aspire Switch Alpha 12, sometimes all SATA ports are detected
1394  * as DUMMY, or detected but eventually get a "link down" and never get up
1395  * again. When this happens, CAP.NP may hold a value of 0x00 or 0x01, and the
1396  * port_map may hold a value of 0x00.
1397  *
1398  * Overriding CAP.NP to 0x02 and the port_map to 0x7 will reveal all 3 ports
1399  * and can significantly reduce the occurrence of the problem.
1400  *
1401  * https://bugzilla.kernel.org/show_bug.cgi?id=189471
1402  */
1403 static void acer_sa5_271_workaround(struct ahci_host_priv *hpriv,
1404                                     struct pci_dev *pdev)
1405 {
1406         static const struct dmi_system_id sysids[] = {
1407                 {
1408                         .ident = "Acer Switch Alpha 12",
1409                         .matches = {
1410                                 DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
1411                                 DMI_MATCH(DMI_PRODUCT_NAME, "Switch SA5-271")
1412                         },
1413                 },
1414                 { }
1415         };
1416
1417         if (dmi_check_system(sysids)) {
1418                 dev_info(&pdev->dev, "enabling Acer Switch Alpha 12 workaround\n");
1419                 if ((hpriv->saved_cap & 0xC734FF00) == 0xC734FF00) {
1420                         hpriv->port_map = 0x7;
1421                         hpriv->cap = 0xC734FF02;
1422                 }
1423         }
1424 }
1425
1426 #ifdef CONFIG_ARM64
1427 /*
1428  * Due to ERRATA#22536, ThunderX needs to handle HOST_IRQ_STAT differently.
1429  * Workaround is to make sure all pending IRQs are served before leaving
1430  * handler.
1431  */
1432 static irqreturn_t ahci_thunderx_irq_handler(int irq, void *dev_instance)
1433 {
1434         struct ata_host *host = dev_instance;
1435         struct ahci_host_priv *hpriv;
1436         unsigned int rc = 0;
1437         void __iomem *mmio;
1438         u32 irq_stat, irq_masked;
1439         unsigned int handled = 1;
1440
1441         VPRINTK("ENTER\n");
1442         hpriv = host->private_data;
1443         mmio = hpriv->mmio;
1444         irq_stat = readl(mmio + HOST_IRQ_STAT);
1445         if (!irq_stat)
1446                 return IRQ_NONE;
1447
1448         do {
1449                 irq_masked = irq_stat & hpriv->port_map;
1450                 spin_lock(&host->lock);
1451                 rc = ahci_handle_port_intr(host, irq_masked);
1452                 if (!rc)
1453                         handled = 0;
1454                 writel(irq_stat, mmio + HOST_IRQ_STAT);
1455                 irq_stat = readl(mmio + HOST_IRQ_STAT);
1456                 spin_unlock(&host->lock);
1457         } while (irq_stat);
1458         VPRINTK("EXIT\n");
1459
1460         return IRQ_RETVAL(handled);
1461 }
1462 #endif
1463
1464 static void ahci_remap_check(struct pci_dev *pdev, int bar,
1465                 struct ahci_host_priv *hpriv)
1466 {
1467         int i, count = 0;
1468         u32 cap;
1469
1470         /*
1471          * Check if this device might have remapped nvme devices.
1472          */
1473         if (pdev->vendor != PCI_VENDOR_ID_INTEL ||
1474             pci_resource_len(pdev, bar) < SZ_512K ||
1475             bar != AHCI_PCI_BAR_STANDARD ||
1476             !(readl(hpriv->mmio + AHCI_VSCAP) & 1))
1477                 return;
1478
1479         cap = readq(hpriv->mmio + AHCI_REMAP_CAP);
1480         for (i = 0; i < AHCI_MAX_REMAP; i++) {
1481                 if ((cap & (1 << i)) == 0)
1482                         continue;
1483                 if (readl(hpriv->mmio + ahci_remap_dcc(i))
1484                                 != PCI_CLASS_STORAGE_EXPRESS)
1485                         continue;
1486
1487                 /* We've found a remapped device */
1488                 count++;
1489         }
1490
1491         if (!count)
1492                 return;
1493
1494         dev_warn(&pdev->dev, "Found %d remapped NVMe devices.\n", count);
1495         dev_warn(&pdev->dev,
1496                  "Switch your BIOS from RAID to AHCI mode to use them.\n");
1497
1498         /*
1499          * Don't rely on the msi-x capability in the remap case,
1500          * share the legacy interrupt across ahci and remapped devices.
1501          */
1502         hpriv->flags |= AHCI_HFLAG_NO_MSI;
1503 }
1504
1505 static int ahci_get_irq_vector(struct ata_host *host, int port)
1506 {
1507         return pci_irq_vector(to_pci_dev(host->dev), port);
1508 }
1509
1510 static int ahci_init_msi(struct pci_dev *pdev, unsigned int n_ports,
1511                         struct ahci_host_priv *hpriv)
1512 {
1513         int nvec;
1514
1515         if (hpriv->flags & AHCI_HFLAG_NO_MSI)
1516                 return -ENODEV;
1517
1518         /*
1519          * If number of MSIs is less than number of ports then Sharing Last
1520          * Message mode could be enforced. In this case assume that advantage
1521          * of multipe MSIs is negated and use single MSI mode instead.
1522          */
1523         if (n_ports > 1) {
1524                 nvec = pci_alloc_irq_vectors(pdev, n_ports, INT_MAX,
1525                                 PCI_IRQ_MSIX | PCI_IRQ_MSI);
1526                 if (nvec > 0) {
1527                         if (!(readl(hpriv->mmio + HOST_CTL) & HOST_MRSM)) {
1528                                 hpriv->get_irq_vector = ahci_get_irq_vector;
1529                                 hpriv->flags |= AHCI_HFLAG_MULTI_MSI;
1530                                 return nvec;
1531                         }
1532
1533                         /*
1534                          * Fallback to single MSI mode if the controller
1535                          * enforced MRSM mode.
1536                          */
1537                         printk(KERN_INFO
1538                                 "ahci: MRSM is on, fallback to single MSI\n");
1539                         pci_free_irq_vectors(pdev);
1540                 }
1541         }
1542
1543         /*
1544          * If the host is not capable of supporting per-port vectors, fall
1545          * back to single MSI before finally attempting single MSI-X.
1546          */
1547         nvec = pci_alloc_irq_vectors(pdev, 1, 1, PCI_IRQ_MSI);
1548         if (nvec == 1)
1549                 return nvec;
1550         return pci_alloc_irq_vectors(pdev, 1, 1, PCI_IRQ_MSIX);
1551 }
1552
1553 static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
1554 {
1555         unsigned int board_id = ent->driver_data;
1556         struct ata_port_info pi = ahci_port_info[board_id];
1557         const struct ata_port_info *ppi[] = { &pi, NULL };
1558         struct device *dev = &pdev->dev;
1559         struct ahci_host_priv *hpriv;
1560         struct ata_host *host;
1561         int n_ports, i, rc;
1562         int ahci_pci_bar = AHCI_PCI_BAR_STANDARD;
1563
1564         VPRINTK("ENTER\n");
1565
1566         WARN_ON((int)ATA_MAX_QUEUE > AHCI_MAX_CMDS);
1567
1568         ata_print_version_once(&pdev->dev, DRV_VERSION);
1569
1570         /* The AHCI driver can only drive the SATA ports, the PATA driver
1571            can drive them all so if both drivers are selected make sure
1572            AHCI stays out of the way */
1573         if (pdev->vendor == PCI_VENDOR_ID_MARVELL && !marvell_enable)
1574                 return -ENODEV;
1575
1576         /* Apple BIOS on MCP89 prevents us using AHCI */
1577         if (is_mcp89_apple(pdev))
1578                 ahci_mcp89_apple_enable(pdev);
1579
1580         /* Promise's PDC42819 is a SAS/SATA controller that has an AHCI mode.
1581          * At the moment, we can only use the AHCI mode. Let the users know
1582          * that for SAS drives they're out of luck.
1583          */
1584         if (pdev->vendor == PCI_VENDOR_ID_PROMISE)
1585                 dev_info(&pdev->dev,
1586                          "PDC42819 can only drive SATA devices with this driver\n");
1587
1588         /* Some devices use non-standard BARs */
1589         if (pdev->vendor == PCI_VENDOR_ID_STMICRO && pdev->device == 0xCC06)
1590                 ahci_pci_bar = AHCI_PCI_BAR_STA2X11;
1591         else if (pdev->vendor == 0x1c44 && pdev->device == 0x8000)
1592                 ahci_pci_bar = AHCI_PCI_BAR_ENMOTUS;
1593         else if (pdev->vendor == PCI_VENDOR_ID_CAVIUM) {
1594                 if (pdev->device == 0xa01c)
1595                         ahci_pci_bar = AHCI_PCI_BAR_CAVIUM;
1596                 if (pdev->device == 0xa084)
1597                         ahci_pci_bar = AHCI_PCI_BAR_CAVIUM_GEN5;
1598         }
1599
1600         /* acquire resources */
1601         rc = pcim_enable_device(pdev);
1602         if (rc)
1603                 return rc;
1604
1605         if (pdev->vendor == PCI_VENDOR_ID_INTEL &&
1606             (pdev->device == 0x2652 || pdev->device == 0x2653)) {
1607                 u8 map;
1608
1609                 /* ICH6s share the same PCI ID for both piix and ahci
1610                  * modes.  Enabling ahci mode while MAP indicates
1611                  * combined mode is a bad idea.  Yield to ata_piix.
1612                  */
1613                 pci_read_config_byte(pdev, ICH_MAP, &map);
1614                 if (map & 0x3) {
1615                         dev_info(&pdev->dev,
1616                                  "controller is in combined mode, can't enable AHCI mode\n");
1617                         return -ENODEV;
1618                 }
1619         }
1620
1621         /* AHCI controllers often implement SFF compatible interface.
1622          * Grab all PCI BARs just in case.
1623          */
1624         rc = pcim_iomap_regions_request_all(pdev, 1 << ahci_pci_bar, DRV_NAME);
1625         if (rc == -EBUSY)
1626                 pcim_pin_device(pdev);
1627         if (rc)
1628                 return rc;
1629
1630         hpriv = devm_kzalloc(dev, sizeof(*hpriv), GFP_KERNEL);
1631         if (!hpriv)
1632                 return -ENOMEM;
1633         hpriv->flags |= (unsigned long)pi.private_data;
1634
1635         /* MCP65 revision A1 and A2 can't do MSI */
1636         if (board_id == board_ahci_mcp65 &&
1637             (pdev->revision == 0xa1 || pdev->revision == 0xa2))
1638                 hpriv->flags |= AHCI_HFLAG_NO_MSI;
1639
1640         /* SB800 does NOT need the workaround to ignore SERR_INTERNAL */
1641         if (board_id == board_ahci_sb700 && pdev->revision >= 0x40)
1642                 hpriv->flags &= ~AHCI_HFLAG_IGN_SERR_INTERNAL;
1643
1644         /* only some SB600s can do 64bit DMA */
1645         if (ahci_sb600_enable_64bit(pdev))
1646                 hpriv->flags &= ~AHCI_HFLAG_32BIT_ONLY;
1647
1648         hpriv->mmio = pcim_iomap_table(pdev)[ahci_pci_bar];
1649
1650         /* detect remapped nvme devices */
1651         ahci_remap_check(pdev, ahci_pci_bar, hpriv);
1652
1653         /* must set flag prior to save config in order to take effect */
1654         if (ahci_broken_devslp(pdev))
1655                 hpriv->flags |= AHCI_HFLAG_NO_DEVSLP;
1656
1657 #ifdef CONFIG_ARM64
1658         if (pdev->vendor == 0x177d && pdev->device == 0xa01c)
1659                 hpriv->irq_handler = ahci_thunderx_irq_handler;
1660 #endif
1661
1662         /* save initial config */
1663         ahci_pci_save_initial_config(pdev, hpriv);
1664
1665         /* prepare host */
1666         if (hpriv->cap & HOST_CAP_NCQ) {
1667                 pi.flags |= ATA_FLAG_NCQ;
1668                 /*
1669                  * Auto-activate optimization is supposed to be
1670                  * supported on all AHCI controllers indicating NCQ
1671                  * capability, but it seems to be broken on some
1672                  * chipsets including NVIDIAs.
1673                  */
1674                 if (!(hpriv->flags & AHCI_HFLAG_NO_FPDMA_AA))
1675                         pi.flags |= ATA_FLAG_FPDMA_AA;
1676
1677                 /*
1678                  * All AHCI controllers should be forward-compatible
1679                  * with the new auxiliary field. This code should be
1680                  * conditionalized if any buggy AHCI controllers are
1681                  * encountered.
1682                  */
1683                 pi.flags |= ATA_FLAG_FPDMA_AUX;
1684         }
1685
1686         if (hpriv->cap & HOST_CAP_PMP)
1687                 pi.flags |= ATA_FLAG_PMP;
1688
1689         ahci_set_em_messages(hpriv, &pi);
1690
1691         if (ahci_broken_system_poweroff(pdev)) {
1692                 pi.flags |= ATA_FLAG_NO_POWEROFF_SPINDOWN;
1693                 dev_info(&pdev->dev,
1694                         "quirky BIOS, skipping spindown on poweroff\n");
1695         }
1696
1697         if (ahci_broken_suspend(pdev)) {
1698                 hpriv->flags |= AHCI_HFLAG_NO_SUSPEND;
1699                 dev_warn(&pdev->dev,
1700                          "BIOS update required for suspend/resume\n");
1701         }
1702
1703         if (ahci_broken_online(pdev)) {
1704                 hpriv->flags |= AHCI_HFLAG_SRST_TOUT_IS_OFFLINE;
1705                 dev_info(&pdev->dev,
1706                          "online status unreliable, applying workaround\n");
1707         }
1708
1709
1710         /* Acer SA5-271 workaround modifies private_data */
1711         acer_sa5_271_workaround(hpriv, pdev);
1712
1713         /* CAP.NP sometimes indicate the index of the last enabled
1714          * port, at other times, that of the last possible port, so
1715          * determining the maximum port number requires looking at
1716          * both CAP.NP and port_map.
1717          */
1718         n_ports = max(ahci_nr_ports(hpriv->cap), fls(hpriv->port_map));
1719
1720         host = ata_host_alloc_pinfo(&pdev->dev, ppi, n_ports);
1721         if (!host)
1722                 return -ENOMEM;
1723         host->private_data = hpriv;
1724
1725         if (ahci_init_msi(pdev, n_ports, hpriv) < 0) {
1726                 /* legacy intx interrupts */
1727                 pci_intx(pdev, 1);
1728         }
1729         hpriv->irq = pci_irq_vector(pdev, 0);
1730
1731         if (!(hpriv->cap & HOST_CAP_SSS) || ahci_ignore_sss)
1732                 host->flags |= ATA_HOST_PARALLEL_SCAN;
1733         else
1734                 dev_info(&pdev->dev, "SSS flag set, parallel bus scan disabled\n");
1735
1736         if (pi.flags & ATA_FLAG_EM)
1737                 ahci_reset_em(host);
1738
1739         for (i = 0; i < host->n_ports; i++) {
1740                 struct ata_port *ap = host->ports[i];
1741
1742                 ata_port_pbar_desc(ap, ahci_pci_bar, -1, "abar");
1743                 ata_port_pbar_desc(ap, ahci_pci_bar,
1744                                    0x100 + ap->port_no * 0x80, "port");
1745
1746                 /* set enclosure management message type */
1747                 if (ap->flags & ATA_FLAG_EM)
1748                         ap->em_message_type = hpriv->em_msg_type;
1749
1750                 if ((hpriv->flags & AHCI_HFLAG_IS_MOBILE) &&
1751                     mobile_lpm_policy >= ATA_LPM_UNKNOWN &&
1752                     mobile_lpm_policy <= ATA_LPM_MIN_POWER)
1753                         ap->target_lpm_policy = mobile_lpm_policy;
1754
1755                 /* disabled/not-implemented port */
1756                 if (!(hpriv->port_map & (1 << i)))
1757                         ap->ops = &ata_dummy_port_ops;
1758         }
1759
1760         /* apply workaround for ASUS P5W DH Deluxe mainboard */
1761         ahci_p5wdh_workaround(host);
1762
1763         /* apply gtf filter quirk */
1764         ahci_gtf_filter_workaround(host);
1765
1766         /* initialize adapter */
1767         rc = ahci_configure_dma_masks(pdev, hpriv->cap & HOST_CAP_64);
1768         if (rc)
1769                 return rc;
1770
1771         rc = ahci_pci_reset_controller(host);
1772         if (rc)
1773                 return rc;
1774
1775         ahci_pci_init_controller(host);
1776         ahci_pci_print_info(host);
1777
1778         pci_set_master(pdev);
1779
1780         rc = ahci_host_activate(host, &ahci_sht);
1781         if (rc)
1782                 return rc;
1783
1784         pm_runtime_put_noidle(&pdev->dev);
1785         return 0;
1786 }
1787
1788 static void ahci_remove_one(struct pci_dev *pdev)
1789 {
1790         pm_runtime_get_noresume(&pdev->dev);
1791         ata_pci_remove_one(pdev);
1792 }
1793
1794 module_pci_driver(ahci_pci_driver);
1795
1796 MODULE_AUTHOR("Jeff Garzik");
1797 MODULE_DESCRIPTION("AHCI SATA low-level driver");
1798 MODULE_LICENSE("GPL");
1799 MODULE_DEVICE_TABLE(pci, ahci_pci_tbl);
1800 MODULE_VERSION(DRV_VERSION);