ahci: Add Device IDs for Intel 9 Series PCH
[pandora-kernel.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/DocBook/libata.*
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 <scsi/scsi_host.h>
46 #include <scsi/scsi_cmnd.h>
47 #include <linux/libata.h>
48 #include "ahci.h"
49
50 #define DRV_NAME        "ahci"
51 #define DRV_VERSION     "3.0"
52
53 enum {
54         AHCI_PCI_BAR_STA2X11    = 0,
55         AHCI_PCI_BAR_ENMOTUS    = 2,
56         AHCI_PCI_BAR_STANDARD   = 5,
57 };
58
59 enum board_ids {
60         /* board IDs by feature in alphabetical order */
61         board_ahci,
62         board_ahci_ign_iferr,
63         board_ahci_noncq,
64         board_ahci_nosntf,
65         board_ahci_yes_fbs,
66
67         /* board IDs for specific chipsets in alphabetical order */
68         board_ahci_mcp65,
69         board_ahci_mcp77,
70         board_ahci_mcp89,
71         board_ahci_mv,
72         board_ahci_sb600,
73         board_ahci_sb700,       /* for SB700 and SB800 */
74         board_ahci_vt8251,
75
76         /* aliases */
77         board_ahci_mcp_linux    = board_ahci_mcp65,
78         board_ahci_mcp67        = board_ahci_mcp65,
79         board_ahci_mcp73        = board_ahci_mcp65,
80         board_ahci_mcp79        = board_ahci_mcp77,
81 };
82
83 static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent);
84 static int ahci_vt8251_hardreset(struct ata_link *link, unsigned int *class,
85                                  unsigned long deadline);
86 static void ahci_mcp89_apple_enable(struct pci_dev *pdev);
87 static bool is_mcp89_apple(struct pci_dev *pdev);
88 static int ahci_p5wdh_hardreset(struct ata_link *link, unsigned int *class,
89                                 unsigned long deadline);
90 #ifdef CONFIG_PM
91 static int ahci_pci_device_suspend(struct pci_dev *pdev, pm_message_t mesg);
92 static int ahci_pci_device_resume(struct pci_dev *pdev);
93 #endif
94
95 static struct scsi_host_template ahci_sht = {
96         AHCI_SHT("ahci"),
97 };
98
99 static struct ata_port_operations ahci_vt8251_ops = {
100         .inherits               = &ahci_ops,
101         .hardreset              = ahci_vt8251_hardreset,
102 };
103
104 static struct ata_port_operations ahci_p5wdh_ops = {
105         .inherits               = &ahci_ops,
106         .hardreset              = ahci_p5wdh_hardreset,
107 };
108
109 static const struct ata_port_info ahci_port_info[] = {
110         /* by features */
111         [board_ahci] = {
112                 .flags          = AHCI_FLAG_COMMON,
113                 .pio_mask       = ATA_PIO4,
114                 .udma_mask      = ATA_UDMA6,
115                 .port_ops       = &ahci_ops,
116         },
117         [board_ahci_ign_iferr] = {
118                 AHCI_HFLAGS     (AHCI_HFLAG_IGN_IRQ_IF_ERR),
119                 .flags          = AHCI_FLAG_COMMON,
120                 .pio_mask       = ATA_PIO4,
121                 .udma_mask      = ATA_UDMA6,
122                 .port_ops       = &ahci_ops,
123         },
124         [board_ahci_noncq] = {
125                 AHCI_HFLAGS     (AHCI_HFLAG_NO_NCQ),
126                 .flags          = AHCI_FLAG_COMMON,
127                 .pio_mask       = ATA_PIO4,
128                 .udma_mask      = ATA_UDMA6,
129                 .port_ops       = &ahci_ops,
130         },
131         [board_ahci_nosntf] = {
132                 AHCI_HFLAGS     (AHCI_HFLAG_NO_SNTF),
133                 .flags          = AHCI_FLAG_COMMON,
134                 .pio_mask       = ATA_PIO4,
135                 .udma_mask      = ATA_UDMA6,
136                 .port_ops       = &ahci_ops,
137         },
138         [board_ahci_yes_fbs] = {
139                 AHCI_HFLAGS     (AHCI_HFLAG_YES_FBS),
140                 .flags          = AHCI_FLAG_COMMON,
141                 .pio_mask       = ATA_PIO4,
142                 .udma_mask      = ATA_UDMA6,
143                 .port_ops       = &ahci_ops,
144         },
145         /* by chipsets */
146         [board_ahci_mcp65] = {
147                 AHCI_HFLAGS     (AHCI_HFLAG_NO_FPDMA_AA | AHCI_HFLAG_NO_PMP |
148                                  AHCI_HFLAG_YES_NCQ),
149                 .flags          = AHCI_FLAG_COMMON | ATA_FLAG_NO_DIPM,
150                 .pio_mask       = ATA_PIO4,
151                 .udma_mask      = ATA_UDMA6,
152                 .port_ops       = &ahci_ops,
153         },
154         [board_ahci_mcp77] = {
155                 AHCI_HFLAGS     (AHCI_HFLAG_NO_FPDMA_AA | AHCI_HFLAG_NO_PMP),
156                 .flags          = AHCI_FLAG_COMMON,
157                 .pio_mask       = ATA_PIO4,
158                 .udma_mask      = ATA_UDMA6,
159                 .port_ops       = &ahci_ops,
160         },
161         [board_ahci_mcp89] = {
162                 AHCI_HFLAGS     (AHCI_HFLAG_NO_FPDMA_AA),
163                 .flags          = AHCI_FLAG_COMMON,
164                 .pio_mask       = ATA_PIO4,
165                 .udma_mask      = ATA_UDMA6,
166                 .port_ops       = &ahci_ops,
167         },
168         [board_ahci_mv] = {
169                 AHCI_HFLAGS     (AHCI_HFLAG_NO_NCQ | AHCI_HFLAG_NO_MSI |
170                                  AHCI_HFLAG_MV_PATA | AHCI_HFLAG_NO_PMP),
171                 .flags          = ATA_FLAG_SATA | ATA_FLAG_PIO_DMA,
172                 .pio_mask       = ATA_PIO4,
173                 .udma_mask      = ATA_UDMA6,
174                 .port_ops       = &ahci_ops,
175         },
176         [board_ahci_sb600] = {
177                 AHCI_HFLAGS     (AHCI_HFLAG_IGN_SERR_INTERNAL |
178                                  AHCI_HFLAG_NO_MSI | AHCI_HFLAG_SECT255 |
179                                  AHCI_HFLAG_32BIT_ONLY),
180                 .flags          = AHCI_FLAG_COMMON,
181                 .pio_mask       = ATA_PIO4,
182                 .udma_mask      = ATA_UDMA6,
183                 .port_ops       = &ahci_pmp_retry_srst_ops,
184         },
185         [board_ahci_sb700] = {  /* for SB700 and SB800 */
186                 AHCI_HFLAGS     (AHCI_HFLAG_IGN_SERR_INTERNAL),
187                 .flags          = AHCI_FLAG_COMMON,
188                 .pio_mask       = ATA_PIO4,
189                 .udma_mask      = ATA_UDMA6,
190                 .port_ops       = &ahci_pmp_retry_srst_ops,
191         },
192         [board_ahci_vt8251] = {
193                 AHCI_HFLAGS     (AHCI_HFLAG_NO_NCQ | AHCI_HFLAG_NO_PMP),
194                 .flags          = AHCI_FLAG_COMMON,
195                 .pio_mask       = ATA_PIO4,
196                 .udma_mask      = ATA_UDMA6,
197                 .port_ops       = &ahci_vt8251_ops,
198         },
199 };
200
201 static const struct pci_device_id ahci_pci_tbl[] = {
202         /* Intel */
203         { PCI_VDEVICE(INTEL, 0x2652), board_ahci }, /* ICH6 */
204         { PCI_VDEVICE(INTEL, 0x2653), board_ahci }, /* ICH6M */
205         { PCI_VDEVICE(INTEL, 0x27c1), board_ahci }, /* ICH7 */
206         { PCI_VDEVICE(INTEL, 0x27c5), board_ahci }, /* ICH7M */
207         { PCI_VDEVICE(INTEL, 0x27c3), board_ahci }, /* ICH7R */
208         { PCI_VDEVICE(AL, 0x5288), board_ahci_ign_iferr }, /* ULi M5288 */
209         { PCI_VDEVICE(INTEL, 0x2681), board_ahci }, /* ESB2 */
210         { PCI_VDEVICE(INTEL, 0x2682), board_ahci }, /* ESB2 */
211         { PCI_VDEVICE(INTEL, 0x2683), board_ahci }, /* ESB2 */
212         { PCI_VDEVICE(INTEL, 0x27c6), board_ahci }, /* ICH7-M DH */
213         { PCI_VDEVICE(INTEL, 0x2821), board_ahci }, /* ICH8 */
214         { PCI_VDEVICE(INTEL, 0x2822), board_ahci_nosntf }, /* ICH8 */
215         { PCI_VDEVICE(INTEL, 0x2824), board_ahci }, /* ICH8 */
216         { PCI_VDEVICE(INTEL, 0x2829), board_ahci }, /* ICH8M */
217         { PCI_VDEVICE(INTEL, 0x282a), board_ahci }, /* ICH8M */
218         { PCI_VDEVICE(INTEL, 0x2922), board_ahci }, /* ICH9 */
219         { PCI_VDEVICE(INTEL, 0x2923), board_ahci }, /* ICH9 */
220         { PCI_VDEVICE(INTEL, 0x2924), board_ahci }, /* ICH9 */
221         { PCI_VDEVICE(INTEL, 0x2925), board_ahci }, /* ICH9 */
222         { PCI_VDEVICE(INTEL, 0x2927), board_ahci }, /* ICH9 */
223         { PCI_VDEVICE(INTEL, 0x2929), board_ahci }, /* ICH9M */
224         { PCI_VDEVICE(INTEL, 0x292a), board_ahci }, /* ICH9M */
225         { PCI_VDEVICE(INTEL, 0x292b), board_ahci }, /* ICH9M */
226         { PCI_VDEVICE(INTEL, 0x292c), board_ahci }, /* ICH9M */
227         { PCI_VDEVICE(INTEL, 0x292f), board_ahci }, /* ICH9M */
228         { PCI_VDEVICE(INTEL, 0x294d), board_ahci }, /* ICH9 */
229         { PCI_VDEVICE(INTEL, 0x294e), board_ahci }, /* ICH9M */
230         { PCI_VDEVICE(INTEL, 0x502a), board_ahci }, /* Tolapai */
231         { PCI_VDEVICE(INTEL, 0x502b), board_ahci }, /* Tolapai */
232         { PCI_VDEVICE(INTEL, 0x3a05), board_ahci }, /* ICH10 */
233         { PCI_VDEVICE(INTEL, 0x3a22), board_ahci }, /* ICH10 */
234         { PCI_VDEVICE(INTEL, 0x3a25), board_ahci }, /* ICH10 */
235         { PCI_VDEVICE(INTEL, 0x3b22), board_ahci }, /* PCH AHCI */
236         { PCI_VDEVICE(INTEL, 0x3b23), board_ahci }, /* PCH AHCI */
237         { PCI_VDEVICE(INTEL, 0x3b24), board_ahci }, /* PCH RAID */
238         { PCI_VDEVICE(INTEL, 0x3b25), board_ahci }, /* PCH RAID */
239         { PCI_VDEVICE(INTEL, 0x3b29), board_ahci }, /* PCH AHCI */
240         { PCI_VDEVICE(INTEL, 0x3b2b), board_ahci }, /* PCH RAID */
241         { PCI_VDEVICE(INTEL, 0x3b2c), board_ahci }, /* PCH RAID */
242         { PCI_VDEVICE(INTEL, 0x3b2f), board_ahci }, /* PCH AHCI */
243         { PCI_VDEVICE(INTEL, 0x1c02), board_ahci }, /* CPT AHCI */
244         { PCI_VDEVICE(INTEL, 0x1c03), board_ahci }, /* CPT AHCI */
245         { PCI_VDEVICE(INTEL, 0x1c04), board_ahci }, /* CPT RAID */
246         { PCI_VDEVICE(INTEL, 0x1c05), board_ahci }, /* CPT RAID */
247         { PCI_VDEVICE(INTEL, 0x1c06), board_ahci }, /* CPT RAID */
248         { PCI_VDEVICE(INTEL, 0x1c07), board_ahci }, /* CPT RAID */
249         { PCI_VDEVICE(INTEL, 0x1d02), board_ahci }, /* PBG AHCI */
250         { PCI_VDEVICE(INTEL, 0x1d04), board_ahci }, /* PBG RAID */
251         { PCI_VDEVICE(INTEL, 0x1d06), board_ahci }, /* PBG RAID */
252         { PCI_VDEVICE(INTEL, 0x2826), board_ahci }, /* PBG RAID */
253         { PCI_VDEVICE(INTEL, 0x2323), board_ahci }, /* DH89xxCC AHCI */
254         { PCI_VDEVICE(INTEL, 0x1e02), board_ahci }, /* Panther Point AHCI */
255         { PCI_VDEVICE(INTEL, 0x1e03), board_ahci }, /* Panther Point AHCI */
256         { PCI_VDEVICE(INTEL, 0x1e04), board_ahci }, /* Panther Point RAID */
257         { PCI_VDEVICE(INTEL, 0x1e05), board_ahci }, /* Panther Point RAID */
258         { PCI_VDEVICE(INTEL, 0x1e06), board_ahci }, /* Panther Point RAID */
259         { PCI_VDEVICE(INTEL, 0x1e07), board_ahci }, /* Panther Point RAID */
260         { PCI_VDEVICE(INTEL, 0x1e0e), board_ahci }, /* Panther Point RAID */
261         { PCI_VDEVICE(INTEL, 0x8c02), board_ahci }, /* Lynx Point AHCI */
262         { PCI_VDEVICE(INTEL, 0x8c03), board_ahci }, /* Lynx Point AHCI */
263         { PCI_VDEVICE(INTEL, 0x8c04), board_ahci }, /* Lynx Point RAID */
264         { PCI_VDEVICE(INTEL, 0x8c05), board_ahci }, /* Lynx Point RAID */
265         { PCI_VDEVICE(INTEL, 0x8c06), board_ahci }, /* Lynx Point RAID */
266         { PCI_VDEVICE(INTEL, 0x8c07), board_ahci }, /* Lynx Point RAID */
267         { PCI_VDEVICE(INTEL, 0x8c0e), board_ahci }, /* Lynx Point RAID */
268         { PCI_VDEVICE(INTEL, 0x8c0f), board_ahci }, /* Lynx Point RAID */
269         { PCI_VDEVICE(INTEL, 0x9c02), board_ahci }, /* Lynx Point-LP AHCI */
270         { PCI_VDEVICE(INTEL, 0x9c03), board_ahci }, /* Lynx Point-LP AHCI */
271         { PCI_VDEVICE(INTEL, 0x9c04), board_ahci }, /* Lynx Point-LP RAID */
272         { PCI_VDEVICE(INTEL, 0x9c05), board_ahci }, /* Lynx Point-LP RAID */
273         { PCI_VDEVICE(INTEL, 0x9c06), board_ahci }, /* Lynx Point-LP RAID */
274         { PCI_VDEVICE(INTEL, 0x9c07), board_ahci }, /* Lynx Point-LP RAID */
275         { PCI_VDEVICE(INTEL, 0x9c0e), board_ahci }, /* Lynx Point-LP RAID */
276         { PCI_VDEVICE(INTEL, 0x9c0f), board_ahci }, /* Lynx Point-LP RAID */
277         { PCI_VDEVICE(INTEL, 0x1f22), board_ahci }, /* Avoton AHCI */
278         { PCI_VDEVICE(INTEL, 0x1f23), board_ahci }, /* Avoton AHCI */
279         { PCI_VDEVICE(INTEL, 0x1f24), board_ahci }, /* Avoton RAID */
280         { PCI_VDEVICE(INTEL, 0x1f25), board_ahci }, /* Avoton RAID */
281         { PCI_VDEVICE(INTEL, 0x1f26), board_ahci }, /* Avoton RAID */
282         { PCI_VDEVICE(INTEL, 0x1f27), board_ahci }, /* Avoton RAID */
283         { PCI_VDEVICE(INTEL, 0x1f2e), board_ahci }, /* Avoton RAID */
284         { PCI_VDEVICE(INTEL, 0x1f2f), board_ahci }, /* Avoton RAID */
285         { PCI_VDEVICE(INTEL, 0x1f32), board_ahci }, /* Avoton AHCI */
286         { PCI_VDEVICE(INTEL, 0x1f33), board_ahci }, /* Avoton AHCI */
287         { PCI_VDEVICE(INTEL, 0x1f34), board_ahci }, /* Avoton RAID */
288         { PCI_VDEVICE(INTEL, 0x1f35), board_ahci }, /* Avoton RAID */
289         { PCI_VDEVICE(INTEL, 0x1f36), board_ahci }, /* Avoton RAID */
290         { PCI_VDEVICE(INTEL, 0x1f37), board_ahci }, /* Avoton RAID */
291         { PCI_VDEVICE(INTEL, 0x1f3e), board_ahci }, /* Avoton RAID */
292         { PCI_VDEVICE(INTEL, 0x1f3f), board_ahci }, /* Avoton RAID */
293         { PCI_VDEVICE(INTEL, 0x2823), board_ahci }, /* Wellsburg RAID */
294         { PCI_VDEVICE(INTEL, 0x2827), board_ahci }, /* Wellsburg RAID */
295         { PCI_VDEVICE(INTEL, 0x8d02), board_ahci }, /* Wellsburg AHCI */
296         { PCI_VDEVICE(INTEL, 0x8d04), board_ahci }, /* Wellsburg RAID */
297         { PCI_VDEVICE(INTEL, 0x8d06), board_ahci }, /* Wellsburg RAID */
298         { PCI_VDEVICE(INTEL, 0x8d0e), board_ahci }, /* Wellsburg RAID */
299         { PCI_VDEVICE(INTEL, 0x8d62), board_ahci }, /* Wellsburg AHCI */
300         { PCI_VDEVICE(INTEL, 0x8d64), board_ahci }, /* Wellsburg RAID */
301         { PCI_VDEVICE(INTEL, 0x8d66), board_ahci }, /* Wellsburg RAID */
302         { PCI_VDEVICE(INTEL, 0x8d6e), board_ahci }, /* Wellsburg RAID */
303         { PCI_VDEVICE(INTEL, 0x23a3), board_ahci }, /* Coleto Creek AHCI */
304         { PCI_VDEVICE(INTEL, 0x9c83), board_ahci }, /* Wildcat Point-LP AHCI */
305         { PCI_VDEVICE(INTEL, 0x9c85), board_ahci }, /* Wildcat Point-LP RAID */
306         { PCI_VDEVICE(INTEL, 0x9c87), board_ahci }, /* Wildcat Point-LP RAID */
307         { PCI_VDEVICE(INTEL, 0x9c8f), board_ahci }, /* Wildcat Point-LP RAID */
308         { PCI_VDEVICE(INTEL, 0x8c82), board_ahci }, /* 9 Series AHCI */
309         { PCI_VDEVICE(INTEL, 0x8c83), board_ahci }, /* 9 Series AHCI */
310         { PCI_VDEVICE(INTEL, 0x8c84), board_ahci }, /* 9 Series RAID */
311         { PCI_VDEVICE(INTEL, 0x8c85), board_ahci }, /* 9 Series RAID */
312         { PCI_VDEVICE(INTEL, 0x8c86), board_ahci }, /* 9 Series RAID */
313         { PCI_VDEVICE(INTEL, 0x8c87), board_ahci }, /* 9 Series RAID */
314         { PCI_VDEVICE(INTEL, 0x8c8e), board_ahci }, /* 9 Series RAID */
315         { PCI_VDEVICE(INTEL, 0x8c8f), board_ahci }, /* 9 Series RAID */
316
317         /* JMicron 360/1/3/5/6, match class to avoid IDE function */
318         { PCI_VENDOR_ID_JMICRON, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
319           PCI_CLASS_STORAGE_SATA_AHCI, 0xffffff, board_ahci_ign_iferr },
320         /* JMicron 362B and 362C have an AHCI function with IDE class code */
321         { PCI_VDEVICE(JMICRON, 0x2362), board_ahci_ign_iferr },
322         { PCI_VDEVICE(JMICRON, 0x236f), board_ahci_ign_iferr },
323
324         /* ATI */
325         { PCI_VDEVICE(ATI, 0x4380), board_ahci_sb600 }, /* ATI SB600 */
326         { PCI_VDEVICE(ATI, 0x4390), board_ahci_sb700 }, /* ATI SB700/800 */
327         { PCI_VDEVICE(ATI, 0x4391), board_ahci_sb700 }, /* ATI SB700/800 */
328         { PCI_VDEVICE(ATI, 0x4392), board_ahci_sb700 }, /* ATI SB700/800 */
329         { PCI_VDEVICE(ATI, 0x4393), board_ahci_sb700 }, /* ATI SB700/800 */
330         { PCI_VDEVICE(ATI, 0x4394), board_ahci_sb700 }, /* ATI SB700/800 */
331         { PCI_VDEVICE(ATI, 0x4395), board_ahci_sb700 }, /* ATI SB700/800 */
332
333         /* AMD */
334         { PCI_VDEVICE(AMD, 0x7800), board_ahci }, /* AMD Hudson-2 */
335         { PCI_VDEVICE(AMD, 0x7900), board_ahci }, /* AMD CZ */
336         /* AMD is using RAID class only for ahci controllers */
337         { PCI_VENDOR_ID_AMD, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
338           PCI_CLASS_STORAGE_RAID << 8, 0xffffff, board_ahci },
339
340         /* VIA */
341         { PCI_VDEVICE(VIA, 0x3349), board_ahci_vt8251 }, /* VIA VT8251 */
342         { PCI_VDEVICE(VIA, 0x6287), board_ahci_vt8251 }, /* VIA VT8251 */
343
344         /* NVIDIA */
345         { PCI_VDEVICE(NVIDIA, 0x044c), board_ahci_mcp65 },      /* MCP65 */
346         { PCI_VDEVICE(NVIDIA, 0x044d), board_ahci_mcp65 },      /* MCP65 */
347         { PCI_VDEVICE(NVIDIA, 0x044e), board_ahci_mcp65 },      /* MCP65 */
348         { PCI_VDEVICE(NVIDIA, 0x044f), board_ahci_mcp65 },      /* MCP65 */
349         { PCI_VDEVICE(NVIDIA, 0x045c), board_ahci_mcp65 },      /* MCP65 */
350         { PCI_VDEVICE(NVIDIA, 0x045d), board_ahci_mcp65 },      /* MCP65 */
351         { PCI_VDEVICE(NVIDIA, 0x045e), board_ahci_mcp65 },      /* MCP65 */
352         { PCI_VDEVICE(NVIDIA, 0x045f), board_ahci_mcp65 },      /* MCP65 */
353         { PCI_VDEVICE(NVIDIA, 0x0550), board_ahci_mcp67 },      /* MCP67 */
354         { PCI_VDEVICE(NVIDIA, 0x0551), board_ahci_mcp67 },      /* MCP67 */
355         { PCI_VDEVICE(NVIDIA, 0x0552), board_ahci_mcp67 },      /* MCP67 */
356         { PCI_VDEVICE(NVIDIA, 0x0553), board_ahci_mcp67 },      /* MCP67 */
357         { PCI_VDEVICE(NVIDIA, 0x0554), board_ahci_mcp67 },      /* MCP67 */
358         { PCI_VDEVICE(NVIDIA, 0x0555), board_ahci_mcp67 },      /* MCP67 */
359         { PCI_VDEVICE(NVIDIA, 0x0556), board_ahci_mcp67 },      /* MCP67 */
360         { PCI_VDEVICE(NVIDIA, 0x0557), board_ahci_mcp67 },      /* MCP67 */
361         { PCI_VDEVICE(NVIDIA, 0x0558), board_ahci_mcp67 },      /* MCP67 */
362         { PCI_VDEVICE(NVIDIA, 0x0559), board_ahci_mcp67 },      /* MCP67 */
363         { PCI_VDEVICE(NVIDIA, 0x055a), board_ahci_mcp67 },      /* MCP67 */
364         { PCI_VDEVICE(NVIDIA, 0x055b), board_ahci_mcp67 },      /* MCP67 */
365         { PCI_VDEVICE(NVIDIA, 0x0580), board_ahci_mcp_linux },  /* Linux ID */
366         { PCI_VDEVICE(NVIDIA, 0x0581), board_ahci_mcp_linux },  /* Linux ID */
367         { PCI_VDEVICE(NVIDIA, 0x0582), board_ahci_mcp_linux },  /* Linux ID */
368         { PCI_VDEVICE(NVIDIA, 0x0583), board_ahci_mcp_linux },  /* Linux ID */
369         { PCI_VDEVICE(NVIDIA, 0x0584), board_ahci_mcp_linux },  /* Linux ID */
370         { PCI_VDEVICE(NVIDIA, 0x0585), board_ahci_mcp_linux },  /* Linux ID */
371         { PCI_VDEVICE(NVIDIA, 0x0586), board_ahci_mcp_linux },  /* Linux ID */
372         { PCI_VDEVICE(NVIDIA, 0x0587), board_ahci_mcp_linux },  /* Linux ID */
373         { PCI_VDEVICE(NVIDIA, 0x0588), board_ahci_mcp_linux },  /* Linux ID */
374         { PCI_VDEVICE(NVIDIA, 0x0589), board_ahci_mcp_linux },  /* Linux ID */
375         { PCI_VDEVICE(NVIDIA, 0x058a), board_ahci_mcp_linux },  /* Linux ID */
376         { PCI_VDEVICE(NVIDIA, 0x058b), board_ahci_mcp_linux },  /* Linux ID */
377         { PCI_VDEVICE(NVIDIA, 0x058c), board_ahci_mcp_linux },  /* Linux ID */
378         { PCI_VDEVICE(NVIDIA, 0x058d), board_ahci_mcp_linux },  /* Linux ID */
379         { PCI_VDEVICE(NVIDIA, 0x058e), board_ahci_mcp_linux },  /* Linux ID */
380         { PCI_VDEVICE(NVIDIA, 0x058f), board_ahci_mcp_linux },  /* Linux ID */
381         { PCI_VDEVICE(NVIDIA, 0x07f0), board_ahci_mcp73 },      /* MCP73 */
382         { PCI_VDEVICE(NVIDIA, 0x07f1), board_ahci_mcp73 },      /* MCP73 */
383         { PCI_VDEVICE(NVIDIA, 0x07f2), board_ahci_mcp73 },      /* MCP73 */
384         { PCI_VDEVICE(NVIDIA, 0x07f3), board_ahci_mcp73 },      /* MCP73 */
385         { PCI_VDEVICE(NVIDIA, 0x07f4), board_ahci_mcp73 },      /* MCP73 */
386         { PCI_VDEVICE(NVIDIA, 0x07f5), board_ahci_mcp73 },      /* MCP73 */
387         { PCI_VDEVICE(NVIDIA, 0x07f6), board_ahci_mcp73 },      /* MCP73 */
388         { PCI_VDEVICE(NVIDIA, 0x07f7), board_ahci_mcp73 },      /* MCP73 */
389         { PCI_VDEVICE(NVIDIA, 0x07f8), board_ahci_mcp73 },      /* MCP73 */
390         { PCI_VDEVICE(NVIDIA, 0x07f9), board_ahci_mcp73 },      /* MCP73 */
391         { PCI_VDEVICE(NVIDIA, 0x07fa), board_ahci_mcp73 },      /* MCP73 */
392         { PCI_VDEVICE(NVIDIA, 0x07fb), board_ahci_mcp73 },      /* MCP73 */
393         { PCI_VDEVICE(NVIDIA, 0x0ad0), board_ahci_mcp77 },      /* MCP77 */
394         { PCI_VDEVICE(NVIDIA, 0x0ad1), board_ahci_mcp77 },      /* MCP77 */
395         { PCI_VDEVICE(NVIDIA, 0x0ad2), board_ahci_mcp77 },      /* MCP77 */
396         { PCI_VDEVICE(NVIDIA, 0x0ad3), board_ahci_mcp77 },      /* MCP77 */
397         { PCI_VDEVICE(NVIDIA, 0x0ad4), board_ahci_mcp77 },      /* MCP77 */
398         { PCI_VDEVICE(NVIDIA, 0x0ad5), board_ahci_mcp77 },      /* MCP77 */
399         { PCI_VDEVICE(NVIDIA, 0x0ad6), board_ahci_mcp77 },      /* MCP77 */
400         { PCI_VDEVICE(NVIDIA, 0x0ad7), board_ahci_mcp77 },      /* MCP77 */
401         { PCI_VDEVICE(NVIDIA, 0x0ad8), board_ahci_mcp77 },      /* MCP77 */
402         { PCI_VDEVICE(NVIDIA, 0x0ad9), board_ahci_mcp77 },      /* MCP77 */
403         { PCI_VDEVICE(NVIDIA, 0x0ada), board_ahci_mcp77 },      /* MCP77 */
404         { PCI_VDEVICE(NVIDIA, 0x0adb), board_ahci_mcp77 },      /* MCP77 */
405         { PCI_VDEVICE(NVIDIA, 0x0ab4), board_ahci_mcp79 },      /* MCP79 */
406         { PCI_VDEVICE(NVIDIA, 0x0ab5), board_ahci_mcp79 },      /* MCP79 */
407         { PCI_VDEVICE(NVIDIA, 0x0ab6), board_ahci_mcp79 },      /* MCP79 */
408         { PCI_VDEVICE(NVIDIA, 0x0ab7), board_ahci_mcp79 },      /* MCP79 */
409         { PCI_VDEVICE(NVIDIA, 0x0ab8), board_ahci_mcp79 },      /* MCP79 */
410         { PCI_VDEVICE(NVIDIA, 0x0ab9), board_ahci_mcp79 },      /* MCP79 */
411         { PCI_VDEVICE(NVIDIA, 0x0aba), board_ahci_mcp79 },      /* MCP79 */
412         { PCI_VDEVICE(NVIDIA, 0x0abb), board_ahci_mcp79 },      /* MCP79 */
413         { PCI_VDEVICE(NVIDIA, 0x0abc), board_ahci_mcp79 },      /* MCP79 */
414         { PCI_VDEVICE(NVIDIA, 0x0abd), board_ahci_mcp79 },      /* MCP79 */
415         { PCI_VDEVICE(NVIDIA, 0x0abe), board_ahci_mcp79 },      /* MCP79 */
416         { PCI_VDEVICE(NVIDIA, 0x0abf), board_ahci_mcp79 },      /* MCP79 */
417         { PCI_VDEVICE(NVIDIA, 0x0d84), board_ahci_mcp89 },      /* MCP89 */
418         { PCI_VDEVICE(NVIDIA, 0x0d85), board_ahci_mcp89 },      /* MCP89 */
419         { PCI_VDEVICE(NVIDIA, 0x0d86), board_ahci_mcp89 },      /* MCP89 */
420         { PCI_VDEVICE(NVIDIA, 0x0d87), board_ahci_mcp89 },      /* MCP89 */
421         { PCI_VDEVICE(NVIDIA, 0x0d88), board_ahci_mcp89 },      /* MCP89 */
422         { PCI_VDEVICE(NVIDIA, 0x0d89), board_ahci_mcp89 },      /* MCP89 */
423         { PCI_VDEVICE(NVIDIA, 0x0d8a), board_ahci_mcp89 },      /* MCP89 */
424         { PCI_VDEVICE(NVIDIA, 0x0d8b), board_ahci_mcp89 },      /* MCP89 */
425         { PCI_VDEVICE(NVIDIA, 0x0d8c), board_ahci_mcp89 },      /* MCP89 */
426         { PCI_VDEVICE(NVIDIA, 0x0d8d), board_ahci_mcp89 },      /* MCP89 */
427         { PCI_VDEVICE(NVIDIA, 0x0d8e), board_ahci_mcp89 },      /* MCP89 */
428         { PCI_VDEVICE(NVIDIA, 0x0d8f), board_ahci_mcp89 },      /* MCP89 */
429
430         /* SiS */
431         { PCI_VDEVICE(SI, 0x1184), board_ahci },                /* SiS 966 */
432         { PCI_VDEVICE(SI, 0x1185), board_ahci },                /* SiS 968 */
433         { PCI_VDEVICE(SI, 0x0186), board_ahci },                /* SiS 968 */
434
435         /* ST Microelectronics */
436         { PCI_VDEVICE(STMICRO, 0xCC06), board_ahci },           /* ST ConneXt */
437
438         /* Marvell */
439         { PCI_VDEVICE(MARVELL, 0x6145), board_ahci_mv },        /* 6145 */
440         { PCI_VDEVICE(MARVELL, 0x6121), board_ahci_mv },        /* 6121 */
441         { PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x9123),
442           .class = PCI_CLASS_STORAGE_SATA_AHCI,
443           .class_mask = 0xffffff,
444           .driver_data = board_ahci_yes_fbs },                  /* 88se9128 */
445         { PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x9125),
446           .driver_data = board_ahci_yes_fbs },                  /* 88se9125 */
447         { PCI_DEVICE_SUB(PCI_VENDOR_ID_MARVELL_EXT, 0x9178,
448                          PCI_VENDOR_ID_MARVELL_EXT, 0x9170),
449           .driver_data = board_ahci_yes_fbs },                  /* 88se9170 */
450         { PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x917a),
451           .driver_data = board_ahci_yes_fbs },                  /* 88se9172 */
452         { PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x9172),
453           .driver_data = board_ahci_yes_fbs },                  /* 88se9172 */
454         { PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x9192),
455           .driver_data = board_ahci_yes_fbs },                  /* 88se9172 on some Gigabyte */
456         { PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x91a0),
457           .driver_data = board_ahci_yes_fbs },
458         { PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x91a3),
459           .driver_data = board_ahci_yes_fbs },
460         { PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x9230),
461           .driver_data = board_ahci_yes_fbs },
462         { PCI_DEVICE(PCI_VENDOR_ID_TTI, 0x0642),
463           .driver_data = board_ahci_yes_fbs },
464
465         /* Promise */
466         { PCI_VDEVICE(PROMISE, 0x3f20), board_ahci },   /* PDC42819 */
467         { PCI_VDEVICE(PROMISE, 0x3781), board_ahci },   /* FastTrak TX8660 ahci-mode */
468
469         /* Asmedia */
470         { PCI_VDEVICE(ASMEDIA, 0x0601), board_ahci },   /* ASM1060 */
471         { PCI_VDEVICE(ASMEDIA, 0x0602), board_ahci },   /* ASM1060 */
472         { PCI_VDEVICE(ASMEDIA, 0x0611), board_ahci },   /* ASM1061 */
473         { PCI_VDEVICE(ASMEDIA, 0x0612), board_ahci },   /* ASM1062 */
474
475         /*
476          * Samsung SSDs found on some macbooks.  NCQ times out.
477          * https://bugzilla.kernel.org/show_bug.cgi?id=60731
478          */
479         { PCI_VDEVICE(SAMSUNG, 0x1600), board_ahci_noncq },
480
481         /* Enmotus */
482         { PCI_DEVICE(0x1c44, 0x8000), board_ahci },
483
484         /* Generic, PCI class code for AHCI */
485         { PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
486           PCI_CLASS_STORAGE_SATA_AHCI, 0xffffff, board_ahci },
487
488         { }     /* terminate list */
489 };
490
491
492 static struct pci_driver ahci_pci_driver = {
493         .name                   = DRV_NAME,
494         .id_table               = ahci_pci_tbl,
495         .probe                  = ahci_init_one,
496         .remove                 = ata_pci_remove_one,
497 #ifdef CONFIG_PM
498         .suspend                = ahci_pci_device_suspend,
499         .resume                 = ahci_pci_device_resume,
500 #endif
501 };
502
503 #if defined(CONFIG_PATA_MARVELL) || defined(CONFIG_PATA_MARVELL_MODULE)
504 static int marvell_enable;
505 #else
506 static int marvell_enable = 1;
507 #endif
508 module_param(marvell_enable, int, 0644);
509 MODULE_PARM_DESC(marvell_enable, "Marvell SATA via AHCI (1 = enabled)");
510
511
512 static void ahci_pci_save_initial_config(struct pci_dev *pdev,
513                                          struct ahci_host_priv *hpriv)
514 {
515         unsigned int force_port_map = 0;
516         unsigned int mask_port_map = 0;
517
518         if (pdev->vendor == PCI_VENDOR_ID_JMICRON && pdev->device == 0x2361) {
519                 dev_info(&pdev->dev, "JMB361 has only one port\n");
520                 force_port_map = 1;
521         }
522
523         /*
524          * Temporary Marvell 6145 hack: PATA port presence
525          * is asserted through the standard AHCI port
526          * presence register, as bit 4 (counting from 0)
527          */
528         if (hpriv->flags & AHCI_HFLAG_MV_PATA) {
529                 if (pdev->device == 0x6121)
530                         mask_port_map = 0x3;
531                 else
532                         mask_port_map = 0xf;
533                 dev_info(&pdev->dev,
534                           "Disabling your PATA port. Use the boot option 'ahci.marvell_enable=0' to avoid this.\n");
535         }
536
537         ahci_save_initial_config(&pdev->dev, hpriv);
538 }
539
540 static int ahci_pci_reset_controller(struct ata_host *host)
541 {
542         struct pci_dev *pdev = to_pci_dev(host->dev);
543
544         ahci_reset_controller(host);
545
546         if (pdev->vendor == PCI_VENDOR_ID_INTEL) {
547                 struct ahci_host_priv *hpriv = host->private_data;
548                 u16 tmp16;
549
550                 /* configure PCS */
551                 pci_read_config_word(pdev, 0x92, &tmp16);
552                 if ((tmp16 & hpriv->port_map) != hpriv->port_map) {
553                         tmp16 |= hpriv->port_map;
554                         pci_write_config_word(pdev, 0x92, tmp16);
555                 }
556         }
557
558         return 0;
559 }
560
561 static void ahci_pci_init_controller(struct ata_host *host)
562 {
563         struct ahci_host_priv *hpriv = host->private_data;
564         struct pci_dev *pdev = to_pci_dev(host->dev);
565         void __iomem *port_mmio;
566         u32 tmp;
567         int mv;
568
569         if (hpriv->flags & AHCI_HFLAG_MV_PATA) {
570                 if (pdev->device == 0x6121)
571                         mv = 2;
572                 else
573                         mv = 4;
574                 port_mmio = __ahci_port_base(host, mv);
575
576                 writel(0, port_mmio + PORT_IRQ_MASK);
577
578                 /* clear port IRQ */
579                 tmp = readl(port_mmio + PORT_IRQ_STAT);
580                 VPRINTK("PORT_IRQ_STAT 0x%x\n", tmp);
581                 if (tmp)
582                         writel(tmp, port_mmio + PORT_IRQ_STAT);
583         }
584
585         ahci_init_controller(host);
586 }
587
588 static int ahci_vt8251_hardreset(struct ata_link *link, unsigned int *class,
589                                  unsigned long deadline)
590 {
591         struct ata_port *ap = link->ap;
592         struct ahci_host_priv *hpriv = ap->host->private_data;
593         bool online;
594         int rc;
595
596         DPRINTK("ENTER\n");
597
598         ahci_stop_engine(ap);
599
600         rc = sata_link_hardreset(link, sata_ehc_deb_timing(&link->eh_context),
601                                  deadline, &online, NULL);
602
603         hpriv->start_engine(ap);
604
605         DPRINTK("EXIT, rc=%d, class=%u\n", rc, *class);
606
607         /* vt8251 doesn't clear BSY on signature FIS reception,
608          * request follow-up softreset.
609          */
610         return online ? -EAGAIN : rc;
611 }
612
613 static int ahci_p5wdh_hardreset(struct ata_link *link, unsigned int *class,
614                                 unsigned long deadline)
615 {
616         struct ata_port *ap = link->ap;
617         struct ahci_port_priv *pp = ap->private_data;
618         struct ahci_host_priv *hpriv = ap->host->private_data;
619         u8 *d2h_fis = pp->rx_fis + RX_FIS_D2H_REG;
620         struct ata_taskfile tf;
621         bool online;
622         int rc;
623
624         ahci_stop_engine(ap);
625
626         /* clear D2H reception area to properly wait for D2H FIS */
627         ata_tf_init(link->device, &tf);
628         tf.command = ATA_BUSY;
629         ata_tf_to_fis(&tf, 0, 0, d2h_fis);
630
631         rc = sata_link_hardreset(link, sata_ehc_deb_timing(&link->eh_context),
632                                  deadline, &online, NULL);
633
634         hpriv->start_engine(ap);
635
636         /* The pseudo configuration device on SIMG4726 attached to
637          * ASUS P5W-DH Deluxe doesn't send signature FIS after
638          * hardreset if no device is attached to the first downstream
639          * port && the pseudo device locks up on SRST w/ PMP==0.  To
640          * work around this, wait for !BSY only briefly.  If BSY isn't
641          * cleared, perform CLO and proceed to IDENTIFY (achieved by
642          * ATA_LFLAG_NO_SRST and ATA_LFLAG_ASSUME_ATA).
643          *
644          * Wait for two seconds.  Devices attached to downstream port
645          * which can't process the following IDENTIFY after this will
646          * have to be reset again.  For most cases, this should
647          * suffice while making probing snappish enough.
648          */
649         if (online) {
650                 rc = ata_wait_after_reset(link, jiffies + 2 * HZ,
651                                           ahci_check_ready);
652                 if (rc)
653                         ahci_kick_engine(ap);
654         }
655         return rc;
656 }
657
658 #ifdef CONFIG_PM
659 static int ahci_pci_device_suspend(struct pci_dev *pdev, pm_message_t mesg)
660 {
661         struct ata_host *host = pci_get_drvdata(pdev);
662         struct ahci_host_priv *hpriv = host->private_data;
663         void __iomem *mmio = hpriv->mmio;
664         u32 ctl;
665
666         if (mesg.event & PM_EVENT_SUSPEND &&
667             hpriv->flags & AHCI_HFLAG_NO_SUSPEND) {
668                 dev_err(&pdev->dev,
669                         "BIOS update required for suspend/resume\n");
670                 return -EIO;
671         }
672
673         if (mesg.event & PM_EVENT_SLEEP) {
674                 /* AHCI spec rev1.1 section 8.3.3:
675                  * Software must disable interrupts prior to requesting a
676                  * transition of the HBA to D3 state.
677                  */
678                 ctl = readl(mmio + HOST_CTL);
679                 ctl &= ~HOST_IRQ_EN;
680                 writel(ctl, mmio + HOST_CTL);
681                 readl(mmio + HOST_CTL); /* flush */
682         }
683
684         return ata_pci_device_suspend(pdev, mesg);
685 }
686
687 static int ahci_pci_device_resume(struct pci_dev *pdev)
688 {
689         struct ata_host *host = pci_get_drvdata(pdev);
690         int rc;
691
692         rc = ata_pci_device_do_resume(pdev);
693         if (rc)
694                 return rc;
695
696         /* Apple BIOS helpfully mangles the registers on resume */
697         if (is_mcp89_apple(pdev))
698                 ahci_mcp89_apple_enable(pdev);
699
700         if (pdev->dev.power.power_state.event == PM_EVENT_SUSPEND) {
701                 rc = ahci_pci_reset_controller(host);
702                 if (rc)
703                         return rc;
704
705                 ahci_pci_init_controller(host);
706         }
707
708         ata_host_resume(host);
709
710         return 0;
711 }
712 #endif
713
714 static int ahci_configure_dma_masks(struct pci_dev *pdev, int using_dac)
715 {
716         int rc;
717
718         /*
719          * If the device fixup already set the dma_mask to some non-standard
720          * value, don't extend it here. This happens on STA2X11, for example.
721          */
722         if (pdev->dma_mask && pdev->dma_mask < DMA_BIT_MASK(32))
723                 return 0;
724
725         if (using_dac &&
726             !pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) {
727                 rc = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64));
728                 if (rc) {
729                         rc = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
730                         if (rc) {
731                                 dev_err(&pdev->dev,
732                                         "64-bit DMA enable failed\n");
733                                 return rc;
734                         }
735                 }
736         } else {
737                 rc = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
738                 if (rc) {
739                         dev_err(&pdev->dev, "32-bit DMA enable failed\n");
740                         return rc;
741                 }
742                 rc = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
743                 if (rc) {
744                         dev_err(&pdev->dev,
745                                 "32-bit consistent DMA enable failed\n");
746                         return rc;
747                 }
748         }
749         return 0;
750 }
751
752 static void ahci_pci_print_info(struct ata_host *host)
753 {
754         struct pci_dev *pdev = to_pci_dev(host->dev);
755         u16 cc;
756         const char *scc_s;
757
758         pci_read_config_word(pdev, 0x0a, &cc);
759         if (cc == PCI_CLASS_STORAGE_IDE)
760                 scc_s = "IDE";
761         else if (cc == PCI_CLASS_STORAGE_SATA)
762                 scc_s = "SATA";
763         else if (cc == PCI_CLASS_STORAGE_RAID)
764                 scc_s = "RAID";
765         else
766                 scc_s = "unknown";
767
768         ahci_print_info(host, scc_s);
769 }
770
771 /* On ASUS P5W DH Deluxe, the second port of PCI device 00:1f.2 is
772  * hardwired to on-board SIMG 4726.  The chipset is ICH8 and doesn't
773  * support PMP and the 4726 either directly exports the device
774  * attached to the first downstream port or acts as a hardware storage
775  * controller and emulate a single ATA device (can be RAID 0/1 or some
776  * other configuration).
777  *
778  * When there's no device attached to the first downstream port of the
779  * 4726, "Config Disk" appears, which is a pseudo ATA device to
780  * configure the 4726.  However, ATA emulation of the device is very
781  * lame.  It doesn't send signature D2H Reg FIS after the initial
782  * hardreset, pukes on SRST w/ PMP==0 and has bunch of other issues.
783  *
784  * The following function works around the problem by always using
785  * hardreset on the port and not depending on receiving signature FIS
786  * afterward.  If signature FIS isn't received soon, ATA class is
787  * assumed without follow-up softreset.
788  */
789 static void ahci_p5wdh_workaround(struct ata_host *host)
790 {
791         static struct dmi_system_id sysids[] = {
792                 {
793                         .ident = "P5W DH Deluxe",
794                         .matches = {
795                                 DMI_MATCH(DMI_SYS_VENDOR,
796                                           "ASUSTEK COMPUTER INC"),
797                                 DMI_MATCH(DMI_PRODUCT_NAME, "P5W DH Deluxe"),
798                         },
799                 },
800                 { }
801         };
802         struct pci_dev *pdev = to_pci_dev(host->dev);
803
804         if (pdev->bus->number == 0 && pdev->devfn == PCI_DEVFN(0x1f, 2) &&
805             dmi_check_system(sysids)) {
806                 struct ata_port *ap = host->ports[1];
807
808                 dev_info(&pdev->dev,
809                          "enabling ASUS P5W DH Deluxe on-board SIMG4726 workaround\n");
810
811                 ap->ops = &ahci_p5wdh_ops;
812                 ap->link.flags |= ATA_LFLAG_NO_SRST | ATA_LFLAG_ASSUME_ATA;
813         }
814 }
815
816 /*
817  * Macbook7,1 firmware forcibly disables MCP89 AHCI and changes PCI ID when
818  * booting in BIOS compatibility mode.  We restore the registers but not ID.
819  */
820 static void ahci_mcp89_apple_enable(struct pci_dev *pdev)
821 {
822         u32 val;
823
824         printk(KERN_INFO "ahci: enabling MCP89 AHCI mode\n");
825
826         pci_read_config_dword(pdev, 0xf8, &val);
827         val |= 1 << 0x1b;
828         /* the following changes the device ID, but appears not to affect function */
829         /* val = (val & ~0xf0000000) | 0x80000000; */
830         pci_write_config_dword(pdev, 0xf8, val);
831
832         pci_read_config_dword(pdev, 0x54c, &val);
833         val |= 1 << 0xc;
834         pci_write_config_dword(pdev, 0x54c, val);
835
836         pci_read_config_dword(pdev, 0x4a4, &val);
837         val &= 0xff;
838         val |= 0x01060100;
839         pci_write_config_dword(pdev, 0x4a4, val);
840
841         pci_read_config_dword(pdev, 0x54c, &val);
842         val &= ~(1 << 0xc);
843         pci_write_config_dword(pdev, 0x54c, val);
844
845         pci_read_config_dword(pdev, 0xf8, &val);
846         val &= ~(1 << 0x1b);
847         pci_write_config_dword(pdev, 0xf8, val);
848 }
849
850 static bool is_mcp89_apple(struct pci_dev *pdev)
851 {
852         return pdev->vendor == PCI_VENDOR_ID_NVIDIA &&
853                 pdev->device == PCI_DEVICE_ID_NVIDIA_NFORCE_MCP89_SATA &&
854                 pdev->subsystem_vendor == PCI_VENDOR_ID_APPLE &&
855                 pdev->subsystem_device == 0xcb89;
856 }
857
858 /* only some SB600 ahci controllers can do 64bit DMA */
859 static bool ahci_sb600_enable_64bit(struct pci_dev *pdev)
860 {
861         static const struct dmi_system_id sysids[] = {
862                 /*
863                  * The oldest version known to be broken is 0901 and
864                  * working is 1501 which was released on 2007-10-26.
865                  * Enable 64bit DMA on 1501 and anything newer.
866                  *
867                  * Please read bko#9412 for more info.
868                  */
869                 {
870                         .ident = "ASUS M2A-VM",
871                         .matches = {
872                                 DMI_MATCH(DMI_BOARD_VENDOR,
873                                           "ASUSTeK Computer INC."),
874                                 DMI_MATCH(DMI_BOARD_NAME, "M2A-VM"),
875                         },
876                         .driver_data = "20071026",      /* yyyymmdd */
877                 },
878                 /*
879                  * All BIOS versions for the MSI K9A2 Platinum (MS-7376)
880                  * support 64bit DMA.
881                  *
882                  * BIOS versions earlier than 1.5 had the Manufacturer DMI
883                  * fields as "MICRO-STAR INTERANTIONAL CO.,LTD".
884                  * This spelling mistake was fixed in BIOS version 1.5, so
885                  * 1.5 and later have the Manufacturer as
886                  * "MICRO-STAR INTERNATIONAL CO.,LTD".
887                  * So try to match on DMI_BOARD_VENDOR of "MICRO-STAR INTER".
888                  *
889                  * BIOS versions earlier than 1.9 had a Board Product Name
890                  * DMI field of "MS-7376". This was changed to be
891                  * "K9A2 Platinum (MS-7376)" in version 1.9, but we can still
892                  * match on DMI_BOARD_NAME of "MS-7376".
893                  */
894                 {
895                         .ident = "MSI K9A2 Platinum",
896                         .matches = {
897                                 DMI_MATCH(DMI_BOARD_VENDOR,
898                                           "MICRO-STAR INTER"),
899                                 DMI_MATCH(DMI_BOARD_NAME, "MS-7376"),
900                         },
901                 },
902                 /*
903                  * All BIOS versions for the MSI K9AGM2 (MS-7327) support
904                  * 64bit DMA.
905                  *
906                  * This board also had the typo mentioned above in the
907                  * Manufacturer DMI field (fixed in BIOS version 1.5), so
908                  * match on DMI_BOARD_VENDOR of "MICRO-STAR INTER" again.
909                  */
910                 {
911                         .ident = "MSI K9AGM2",
912                         .matches = {
913                                 DMI_MATCH(DMI_BOARD_VENDOR,
914                                           "MICRO-STAR INTER"),
915                                 DMI_MATCH(DMI_BOARD_NAME, "MS-7327"),
916                         },
917                 },
918                 /*
919                  * All BIOS versions for the Asus M3A support 64bit DMA.
920                  * (all release versions from 0301 to 1206 were tested)
921                  */
922                 {
923                         .ident = "ASUS M3A",
924                         .matches = {
925                                 DMI_MATCH(DMI_BOARD_VENDOR,
926                                           "ASUSTeK Computer INC."),
927                                 DMI_MATCH(DMI_BOARD_NAME, "M3A"),
928                         },
929                 },
930                 { }
931         };
932         const struct dmi_system_id *match;
933         int year, month, date;
934         char buf[9];
935
936         match = dmi_first_match(sysids);
937         if (pdev->bus->number != 0 || pdev->devfn != PCI_DEVFN(0x12, 0) ||
938             !match)
939                 return false;
940
941         if (!match->driver_data)
942                 goto enable_64bit;
943
944         dmi_get_date(DMI_BIOS_DATE, &year, &month, &date);
945         snprintf(buf, sizeof(buf), "%04d%02d%02d", year, month, date);
946
947         if (strcmp(buf, match->driver_data) >= 0)
948                 goto enable_64bit;
949         else {
950                 dev_warn(&pdev->dev,
951                          "%s: BIOS too old, forcing 32bit DMA, update BIOS\n",
952                          match->ident);
953                 return false;
954         }
955
956 enable_64bit:
957         dev_warn(&pdev->dev, "%s: enabling 64bit DMA\n", match->ident);
958         return true;
959 }
960
961 static bool ahci_broken_system_poweroff(struct pci_dev *pdev)
962 {
963         static const struct dmi_system_id broken_systems[] = {
964                 {
965                         .ident = "HP Compaq nx6310",
966                         .matches = {
967                                 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
968                                 DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq nx6310"),
969                         },
970                         /* PCI slot number of the controller */
971                         .driver_data = (void *)0x1FUL,
972                 },
973                 {
974                         .ident = "HP Compaq 6720s",
975                         .matches = {
976                                 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
977                                 DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq 6720s"),
978                         },
979                         /* PCI slot number of the controller */
980                         .driver_data = (void *)0x1FUL,
981                 },
982
983                 { }     /* terminate list */
984         };
985         const struct dmi_system_id *dmi = dmi_first_match(broken_systems);
986
987         if (dmi) {
988                 unsigned long slot = (unsigned long)dmi->driver_data;
989                 /* apply the quirk only to on-board controllers */
990                 return slot == PCI_SLOT(pdev->devfn);
991         }
992
993         return false;
994 }
995
996 static bool ahci_broken_suspend(struct pci_dev *pdev)
997 {
998         static const struct dmi_system_id sysids[] = {
999                 /*
1000                  * On HP dv[4-6] and HDX18 with earlier BIOSen, link
1001                  * to the harddisk doesn't become online after
1002                  * resuming from STR.  Warn and fail suspend.
1003                  *
1004                  * http://bugzilla.kernel.org/show_bug.cgi?id=12276
1005                  *
1006                  * Use dates instead of versions to match as HP is
1007                  * apparently recycling both product and version
1008                  * strings.
1009                  *
1010                  * http://bugzilla.kernel.org/show_bug.cgi?id=15462
1011                  */
1012                 {
1013                         .ident = "dv4",
1014                         .matches = {
1015                                 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
1016                                 DMI_MATCH(DMI_PRODUCT_NAME,
1017                                           "HP Pavilion dv4 Notebook PC"),
1018                         },
1019                         .driver_data = "20090105",      /* F.30 */
1020                 },
1021                 {
1022                         .ident = "dv5",
1023                         .matches = {
1024                                 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
1025                                 DMI_MATCH(DMI_PRODUCT_NAME,
1026                                           "HP Pavilion dv5 Notebook PC"),
1027                         },
1028                         .driver_data = "20090506",      /* F.16 */
1029                 },
1030                 {
1031                         .ident = "dv6",
1032                         .matches = {
1033                                 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
1034                                 DMI_MATCH(DMI_PRODUCT_NAME,
1035                                           "HP Pavilion dv6 Notebook PC"),
1036                         },
1037                         .driver_data = "20090423",      /* F.21 */
1038                 },
1039                 {
1040                         .ident = "HDX18",
1041                         .matches = {
1042                                 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
1043                                 DMI_MATCH(DMI_PRODUCT_NAME,
1044                                           "HP HDX18 Notebook PC"),
1045                         },
1046                         .driver_data = "20090430",      /* F.23 */
1047                 },
1048                 /*
1049                  * Acer eMachines G725 has the same problem.  BIOS
1050                  * V1.03 is known to be broken.  V3.04 is known to
1051                  * work.  Between, there are V1.06, V2.06 and V3.03
1052                  * that we don't have much idea about.  For now,
1053                  * blacklist anything older than V3.04.
1054                  *
1055                  * http://bugzilla.kernel.org/show_bug.cgi?id=15104
1056                  */
1057                 {
1058                         .ident = "G725",
1059                         .matches = {
1060                                 DMI_MATCH(DMI_SYS_VENDOR, "eMachines"),
1061                                 DMI_MATCH(DMI_PRODUCT_NAME, "eMachines G725"),
1062                         },
1063                         .driver_data = "20091216",      /* V3.04 */
1064                 },
1065                 { }     /* terminate list */
1066         };
1067         const struct dmi_system_id *dmi = dmi_first_match(sysids);
1068         int year, month, date;
1069         char buf[9];
1070
1071         if (!dmi || pdev->bus->number || pdev->devfn != PCI_DEVFN(0x1f, 2))
1072                 return false;
1073
1074         dmi_get_date(DMI_BIOS_DATE, &year, &month, &date);
1075         snprintf(buf, sizeof(buf), "%04d%02d%02d", year, month, date);
1076
1077         return strcmp(buf, dmi->driver_data) < 0;
1078 }
1079
1080 static bool ahci_broken_online(struct pci_dev *pdev)
1081 {
1082 #define ENCODE_BUSDEVFN(bus, slot, func)                        \
1083         (void *)(unsigned long)(((bus) << 8) | PCI_DEVFN((slot), (func)))
1084         static const struct dmi_system_id sysids[] = {
1085                 /*
1086                  * There are several gigabyte boards which use
1087                  * SIMG5723s configured as hardware RAID.  Certain
1088                  * 5723 firmware revisions shipped there keep the link
1089                  * online but fail to answer properly to SRST or
1090                  * IDENTIFY when no device is attached downstream
1091                  * causing libata to retry quite a few times leading
1092                  * to excessive detection delay.
1093                  *
1094                  * As these firmwares respond to the second reset try
1095                  * with invalid device signature, considering unknown
1096                  * sig as offline works around the problem acceptably.
1097                  */
1098                 {
1099                         .ident = "EP45-DQ6",
1100                         .matches = {
1101                                 DMI_MATCH(DMI_BOARD_VENDOR,
1102                                           "Gigabyte Technology Co., Ltd."),
1103                                 DMI_MATCH(DMI_BOARD_NAME, "EP45-DQ6"),
1104                         },
1105                         .driver_data = ENCODE_BUSDEVFN(0x0a, 0x00, 0),
1106                 },
1107                 {
1108                         .ident = "EP45-DS5",
1109                         .matches = {
1110                                 DMI_MATCH(DMI_BOARD_VENDOR,
1111                                           "Gigabyte Technology Co., Ltd."),
1112                                 DMI_MATCH(DMI_BOARD_NAME, "EP45-DS5"),
1113                         },
1114                         .driver_data = ENCODE_BUSDEVFN(0x03, 0x00, 0),
1115                 },
1116                 { }     /* terminate list */
1117         };
1118 #undef ENCODE_BUSDEVFN
1119         const struct dmi_system_id *dmi = dmi_first_match(sysids);
1120         unsigned int val;
1121
1122         if (!dmi)
1123                 return false;
1124
1125         val = (unsigned long)dmi->driver_data;
1126
1127         return pdev->bus->number == (val >> 8) && pdev->devfn == (val & 0xff);
1128 }
1129
1130 static bool ahci_broken_devslp(struct pci_dev *pdev)
1131 {
1132         /* device with broken DEVSLP but still showing SDS capability */
1133         static const struct pci_device_id ids[] = {
1134                 { PCI_VDEVICE(INTEL, 0x0f23)}, /* Valleyview SoC */
1135                 {}
1136         };
1137
1138         return pci_match_id(ids, pdev);
1139 }
1140
1141 #ifdef CONFIG_ATA_ACPI
1142 static void ahci_gtf_filter_workaround(struct ata_host *host)
1143 {
1144         static const struct dmi_system_id sysids[] = {
1145                 /*
1146                  * Aspire 3810T issues a bunch of SATA enable commands
1147                  * via _GTF including an invalid one and one which is
1148                  * rejected by the device.  Among the successful ones
1149                  * is FPDMA non-zero offset enable which when enabled
1150                  * only on the drive side leads to NCQ command
1151                  * failures.  Filter it out.
1152                  */
1153                 {
1154                         .ident = "Aspire 3810T",
1155                         .matches = {
1156                                 DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
1157                                 DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 3810T"),
1158                         },
1159                         .driver_data = (void *)ATA_ACPI_FILTER_FPDMA_OFFSET,
1160                 },
1161                 { }
1162         };
1163         const struct dmi_system_id *dmi = dmi_first_match(sysids);
1164         unsigned int filter;
1165         int i;
1166
1167         if (!dmi)
1168                 return;
1169
1170         filter = (unsigned long)dmi->driver_data;
1171         dev_info(host->dev, "applying extra ACPI _GTF filter 0x%x for %s\n",
1172                  filter, dmi->ident);
1173
1174         for (i = 0; i < host->n_ports; i++) {
1175                 struct ata_port *ap = host->ports[i];
1176                 struct ata_link *link;
1177                 struct ata_device *dev;
1178
1179                 ata_for_each_link(link, ap, EDGE)
1180                         ata_for_each_dev(dev, link, ALL)
1181                                 dev->gtf_filter |= filter;
1182         }
1183 }
1184 #else
1185 static inline void ahci_gtf_filter_workaround(struct ata_host *host)
1186 {}
1187 #endif
1188
1189 static int ahci_init_interrupts(struct pci_dev *pdev, unsigned int n_ports,
1190                                 struct ahci_host_priv *hpriv)
1191 {
1192         int rc, nvec;
1193
1194         if (hpriv->flags & AHCI_HFLAG_NO_MSI)
1195                 goto intx;
1196
1197         nvec = pci_msi_vec_count(pdev);
1198         if (nvec < 0)
1199                 goto intx;
1200
1201         /*
1202          * If number of MSIs is less than number of ports then Sharing Last
1203          * Message mode could be enforced. In this case assume that advantage
1204          * of multipe MSIs is negated and use single MSI mode instead.
1205          */
1206         if (nvec < n_ports)
1207                 goto single_msi;
1208
1209         rc = pci_enable_msi_exact(pdev, nvec);
1210         if (rc == -ENOSPC)
1211                 goto single_msi;
1212         else if (rc < 0)
1213                 goto intx;
1214
1215         /* fallback to single MSI mode if the controller enforced MRSM mode */
1216         if (readl(hpriv->mmio + HOST_CTL) & HOST_MRSM) {
1217                 pci_disable_msi(pdev);
1218                 printk(KERN_INFO "ahci: MRSM is on, fallback to single MSI\n");
1219                 goto single_msi;
1220         }
1221
1222         return nvec;
1223
1224 single_msi:
1225         if (pci_enable_msi(pdev))
1226                 goto intx;
1227         return 1;
1228
1229 intx:
1230         pci_intx(pdev, 1);
1231         return 0;
1232 }
1233
1234 /**
1235  *      ahci_host_activate - start AHCI host, request IRQs and register it
1236  *      @host: target ATA host
1237  *      @irq: base IRQ number to request
1238  *      @n_msis: number of MSIs allocated for this host
1239  *      @irq_handler: irq_handler used when requesting IRQs
1240  *      @irq_flags: irq_flags used when requesting IRQs
1241  *
1242  *      Similar to ata_host_activate, but requests IRQs according to AHCI-1.1
1243  *      when multiple MSIs were allocated. That is one MSI per port, starting
1244  *      from @irq.
1245  *
1246  *      LOCKING:
1247  *      Inherited from calling layer (may sleep).
1248  *
1249  *      RETURNS:
1250  *      0 on success, -errno otherwise.
1251  */
1252 int ahci_host_activate(struct ata_host *host, int irq, unsigned int n_msis)
1253 {
1254         int i, rc;
1255
1256         /* Sharing Last Message among several ports is not supported */
1257         if (n_msis < host->n_ports)
1258                 return -EINVAL;
1259
1260         rc = ata_host_start(host);
1261         if (rc)
1262                 return rc;
1263
1264         for (i = 0; i < host->n_ports; i++) {
1265                 struct ahci_port_priv *pp = host->ports[i]->private_data;
1266
1267                 /* Do not receive interrupts sent by dummy ports */
1268                 if (!pp) {
1269                         disable_irq(irq + i);
1270                         continue;
1271                 }
1272
1273                 rc = devm_request_threaded_irq(host->dev, irq + i,
1274                                                ahci_hw_interrupt,
1275                                                ahci_thread_fn, IRQF_SHARED,
1276                                                pp->irq_desc, host->ports[i]);
1277                 if (rc)
1278                         goto out_free_irqs;
1279         }
1280
1281         for (i = 0; i < host->n_ports; i++)
1282                 ata_port_desc(host->ports[i], "irq %d", irq + i);
1283
1284         rc = ata_host_register(host, &ahci_sht);
1285         if (rc)
1286                 goto out_free_all_irqs;
1287
1288         return 0;
1289
1290 out_free_all_irqs:
1291         i = host->n_ports;
1292 out_free_irqs:
1293         for (i--; i >= 0; i--)
1294                 devm_free_irq(host->dev, irq + i, host->ports[i]);
1295
1296         return rc;
1297 }
1298
1299 static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
1300 {
1301         unsigned int board_id = ent->driver_data;
1302         struct ata_port_info pi = ahci_port_info[board_id];
1303         const struct ata_port_info *ppi[] = { &pi, NULL };
1304         struct device *dev = &pdev->dev;
1305         struct ahci_host_priv *hpriv;
1306         struct ata_host *host;
1307         int n_ports, n_msis, i, rc;
1308         int ahci_pci_bar = AHCI_PCI_BAR_STANDARD;
1309
1310         VPRINTK("ENTER\n");
1311
1312         WARN_ON((int)ATA_MAX_QUEUE > AHCI_MAX_CMDS);
1313
1314         ata_print_version_once(&pdev->dev, DRV_VERSION);
1315
1316         /* The AHCI driver can only drive the SATA ports, the PATA driver
1317            can drive them all so if both drivers are selected make sure
1318            AHCI stays out of the way */
1319         if (pdev->vendor == PCI_VENDOR_ID_MARVELL && !marvell_enable)
1320                 return -ENODEV;
1321
1322         /* Apple BIOS on MCP89 prevents us using AHCI */
1323         if (is_mcp89_apple(pdev))
1324                 ahci_mcp89_apple_enable(pdev);
1325
1326         /* Promise's PDC42819 is a SAS/SATA controller that has an AHCI mode.
1327          * At the moment, we can only use the AHCI mode. Let the users know
1328          * that for SAS drives they're out of luck.
1329          */
1330         if (pdev->vendor == PCI_VENDOR_ID_PROMISE)
1331                 dev_info(&pdev->dev,
1332                          "PDC42819 can only drive SATA devices with this driver\n");
1333
1334         /* Both Connext and Enmotus devices use non-standard BARs */
1335         if (pdev->vendor == PCI_VENDOR_ID_STMICRO && pdev->device == 0xCC06)
1336                 ahci_pci_bar = AHCI_PCI_BAR_STA2X11;
1337         else if (pdev->vendor == 0x1c44 && pdev->device == 0x8000)
1338                 ahci_pci_bar = AHCI_PCI_BAR_ENMOTUS;
1339
1340         /* acquire resources */
1341         rc = pcim_enable_device(pdev);
1342         if (rc)
1343                 return rc;
1344
1345         if (pdev->vendor == PCI_VENDOR_ID_INTEL &&
1346             (pdev->device == 0x2652 || pdev->device == 0x2653)) {
1347                 u8 map;
1348
1349                 /* ICH6s share the same PCI ID for both piix and ahci
1350                  * modes.  Enabling ahci mode while MAP indicates
1351                  * combined mode is a bad idea.  Yield to ata_piix.
1352                  */
1353                 pci_read_config_byte(pdev, ICH_MAP, &map);
1354                 if (map & 0x3) {
1355                         dev_info(&pdev->dev,
1356                                  "controller is in combined mode, can't enable AHCI mode\n");
1357                         return -ENODEV;
1358                 }
1359         }
1360
1361         /* AHCI controllers often implement SFF compatible interface.
1362          * Grab all PCI BARs just in case.
1363          */
1364         rc = pcim_iomap_regions_request_all(pdev, 1 << ahci_pci_bar, DRV_NAME);
1365         if (rc == -EBUSY)
1366                 pcim_pin_device(pdev);
1367         if (rc)
1368                 return rc;
1369
1370         hpriv = devm_kzalloc(dev, sizeof(*hpriv), GFP_KERNEL);
1371         if (!hpriv)
1372                 return -ENOMEM;
1373         hpriv->flags |= (unsigned long)pi.private_data;
1374
1375         /* MCP65 revision A1 and A2 can't do MSI */
1376         if (board_id == board_ahci_mcp65 &&
1377             (pdev->revision == 0xa1 || pdev->revision == 0xa2))
1378                 hpriv->flags |= AHCI_HFLAG_NO_MSI;
1379
1380         /* SB800 does NOT need the workaround to ignore SERR_INTERNAL */
1381         if (board_id == board_ahci_sb700 && pdev->revision >= 0x40)
1382                 hpriv->flags &= ~AHCI_HFLAG_IGN_SERR_INTERNAL;
1383
1384         /* only some SB600s can do 64bit DMA */
1385         if (ahci_sb600_enable_64bit(pdev))
1386                 hpriv->flags &= ~AHCI_HFLAG_32BIT_ONLY;
1387
1388         hpriv->mmio = pcim_iomap_table(pdev)[ahci_pci_bar];
1389
1390         /* must set flag prior to save config in order to take effect */
1391         if (ahci_broken_devslp(pdev))
1392                 hpriv->flags |= AHCI_HFLAG_NO_DEVSLP;
1393
1394         /* save initial config */
1395         ahci_pci_save_initial_config(pdev, hpriv);
1396
1397         /* prepare host */
1398         if (hpriv->cap & HOST_CAP_NCQ) {
1399                 pi.flags |= ATA_FLAG_NCQ;
1400                 /*
1401                  * Auto-activate optimization is supposed to be
1402                  * supported on all AHCI controllers indicating NCQ
1403                  * capability, but it seems to be broken on some
1404                  * chipsets including NVIDIAs.
1405                  */
1406                 if (!(hpriv->flags & AHCI_HFLAG_NO_FPDMA_AA))
1407                         pi.flags |= ATA_FLAG_FPDMA_AA;
1408
1409                 /*
1410                  * All AHCI controllers should be forward-compatible
1411                  * with the new auxiliary field. This code should be
1412                  * conditionalized if any buggy AHCI controllers are
1413                  * encountered.
1414                  */
1415                 pi.flags |= ATA_FLAG_FPDMA_AUX;
1416         }
1417
1418         if (hpriv->cap & HOST_CAP_PMP)
1419                 pi.flags |= ATA_FLAG_PMP;
1420
1421         ahci_set_em_messages(hpriv, &pi);
1422
1423         if (ahci_broken_system_poweroff(pdev)) {
1424                 pi.flags |= ATA_FLAG_NO_POWEROFF_SPINDOWN;
1425                 dev_info(&pdev->dev,
1426                         "quirky BIOS, skipping spindown on poweroff\n");
1427         }
1428
1429         if (ahci_broken_suspend(pdev)) {
1430                 hpriv->flags |= AHCI_HFLAG_NO_SUSPEND;
1431                 dev_warn(&pdev->dev,
1432                          "BIOS update required for suspend/resume\n");
1433         }
1434
1435         if (ahci_broken_online(pdev)) {
1436                 hpriv->flags |= AHCI_HFLAG_SRST_TOUT_IS_OFFLINE;
1437                 dev_info(&pdev->dev,
1438                          "online status unreliable, applying workaround\n");
1439         }
1440
1441         /* CAP.NP sometimes indicate the index of the last enabled
1442          * port, at other times, that of the last possible port, so
1443          * determining the maximum port number requires looking at
1444          * both CAP.NP and port_map.
1445          */
1446         n_ports = max(ahci_nr_ports(hpriv->cap), fls(hpriv->port_map));
1447
1448         n_msis = ahci_init_interrupts(pdev, n_ports, hpriv);
1449         if (n_msis > 1)
1450                 hpriv->flags |= AHCI_HFLAG_MULTI_MSI;
1451
1452         host = ata_host_alloc_pinfo(&pdev->dev, ppi, n_ports);
1453         if (!host)
1454                 return -ENOMEM;
1455         host->private_data = hpriv;
1456
1457         if (!(hpriv->cap & HOST_CAP_SSS) || ahci_ignore_sss)
1458                 host->flags |= ATA_HOST_PARALLEL_SCAN;
1459         else
1460                 dev_info(&pdev->dev, "SSS flag set, parallel bus scan disabled\n");
1461
1462         if (pi.flags & ATA_FLAG_EM)
1463                 ahci_reset_em(host);
1464
1465         for (i = 0; i < host->n_ports; i++) {
1466                 struct ata_port *ap = host->ports[i];
1467
1468                 ata_port_pbar_desc(ap, ahci_pci_bar, -1, "abar");
1469                 ata_port_pbar_desc(ap, ahci_pci_bar,
1470                                    0x100 + ap->port_no * 0x80, "port");
1471
1472                 /* set enclosure management message type */
1473                 if (ap->flags & ATA_FLAG_EM)
1474                         ap->em_message_type = hpriv->em_msg_type;
1475
1476
1477                 /* disabled/not-implemented port */
1478                 if (!(hpriv->port_map & (1 << i)))
1479                         ap->ops = &ata_dummy_port_ops;
1480         }
1481
1482         /* apply workaround for ASUS P5W DH Deluxe mainboard */
1483         ahci_p5wdh_workaround(host);
1484
1485         /* apply gtf filter quirk */
1486         ahci_gtf_filter_workaround(host);
1487
1488         /* initialize adapter */
1489         rc = ahci_configure_dma_masks(pdev, hpriv->cap & HOST_CAP_64);
1490         if (rc)
1491                 return rc;
1492
1493         rc = ahci_pci_reset_controller(host);
1494         if (rc)
1495                 return rc;
1496
1497         ahci_pci_init_controller(host);
1498         ahci_pci_print_info(host);
1499
1500         pci_set_master(pdev);
1501
1502         if (hpriv->flags & AHCI_HFLAG_MULTI_MSI)
1503                 return ahci_host_activate(host, pdev->irq, n_msis);
1504
1505         return ata_host_activate(host, pdev->irq, ahci_interrupt, IRQF_SHARED,
1506                                  &ahci_sht);
1507 }
1508
1509 module_pci_driver(ahci_pci_driver);
1510
1511 MODULE_AUTHOR("Jeff Garzik");
1512 MODULE_DESCRIPTION("AHCI SATA low-level driver");
1513 MODULE_LICENSE("GPL");
1514 MODULE_DEVICE_TABLE(pci, ahci_pci_tbl);
1515 MODULE_VERSION(DRV_VERSION);