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