1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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 <scsi/scsi_host.h>
46#include <scsi/scsi_cmnd.h>
47#include <linux/libata.h>
48
49#define DRV_NAME "ahci"
50#define DRV_VERSION "3.0"
51
52
53#define EM_CTRL_MSG_TYPE 0x000f0000
54
55
56#define EM_MSG_LED_HBA_PORT 0x0000000f
57#define EM_MSG_LED_PMP_SLOT 0x0000ff00
58#define EM_MSG_LED_VALUE 0xffff0000
59#define EM_MSG_LED_VALUE_ACTIVITY 0x00070000
60#define EM_MSG_LED_VALUE_OFF 0xfff80000
61#define EM_MSG_LED_VALUE_ON 0x00010000
62
63static int ahci_skip_host_reset;
64static int ahci_ignore_sss;
65
66module_param_named(skip_host_reset, ahci_skip_host_reset, int, 0444);
67MODULE_PARM_DESC(skip_host_reset, "skip global host reset (0=don't skip, 1=skip)");
68
69module_param_named(ignore_sss, ahci_ignore_sss, int, 0444);
70MODULE_PARM_DESC(ignore_sss, "Ignore staggered spinup flag (0=don't ignore, 1=ignore)");
71
72static int ahci_enable_alpm(struct ata_port *ap,
73 enum link_pm policy);
74static void ahci_disable_alpm(struct ata_port *ap);
75static ssize_t ahci_led_show(struct ata_port *ap, char *buf);
76static ssize_t ahci_led_store(struct ata_port *ap, const char *buf,
77 size_t size);
78static ssize_t ahci_transmit_led_message(struct ata_port *ap, u32 state,
79 ssize_t size);
80
81enum {
82 AHCI_PCI_BAR = 5,
83 AHCI_MAX_PORTS = 32,
84 AHCI_MAX_SG = 168,
85 AHCI_DMA_BOUNDARY = 0xffffffff,
86 AHCI_MAX_CMDS = 32,
87 AHCI_CMD_SZ = 32,
88 AHCI_CMD_SLOT_SZ = AHCI_MAX_CMDS * AHCI_CMD_SZ,
89 AHCI_RX_FIS_SZ = 256,
90 AHCI_CMD_TBL_CDB = 0x40,
91 AHCI_CMD_TBL_HDR_SZ = 0x80,
92 AHCI_CMD_TBL_SZ = AHCI_CMD_TBL_HDR_SZ + (AHCI_MAX_SG * 16),
93 AHCI_CMD_TBL_AR_SZ = AHCI_CMD_TBL_SZ * AHCI_MAX_CMDS,
94 AHCI_PORT_PRIV_DMA_SZ = AHCI_CMD_SLOT_SZ + AHCI_CMD_TBL_AR_SZ +
95 AHCI_RX_FIS_SZ,
96 AHCI_IRQ_ON_SG = (1 << 31),
97 AHCI_CMD_ATAPI = (1 << 5),
98 AHCI_CMD_WRITE = (1 << 6),
99 AHCI_CMD_PREFETCH = (1 << 7),
100 AHCI_CMD_RESET = (1 << 8),
101 AHCI_CMD_CLR_BUSY = (1 << 10),
102
103 RX_FIS_D2H_REG = 0x40,
104 RX_FIS_SDB = 0x58,
105 RX_FIS_UNK = 0x60,
106
107 board_ahci = 0,
108 board_ahci_vt8251 = 1,
109 board_ahci_ign_iferr = 2,
110 board_ahci_sb600 = 3,
111 board_ahci_mv = 4,
112 board_ahci_sb700 = 5,
113 board_ahci_mcp65 = 6,
114 board_ahci_nopmp = 7,
115 board_ahci_yesncq = 8,
116
117
118 HOST_CAP = 0x00,
119 HOST_CTL = 0x04,
120 HOST_IRQ_STAT = 0x08,
121 HOST_PORTS_IMPL = 0x0c,
122 HOST_VERSION = 0x10,
123 HOST_EM_LOC = 0x1c,
124 HOST_EM_CTL = 0x20,
125 HOST_CAP2 = 0x24,
126
127
128 HOST_RESET = (1 << 0),
129 HOST_IRQ_EN = (1 << 1),
130 HOST_AHCI_EN = (1 << 31),
131
132
133 HOST_CAP_SXS = (1 << 5),
134 HOST_CAP_EMS = (1 << 6),
135 HOST_CAP_CCC = (1 << 7),
136 HOST_CAP_PART = (1 << 13),
137 HOST_CAP_SSC = (1 << 14),
138 HOST_CAP_PIO_MULTI = (1 << 15),
139 HOST_CAP_FBS = (1 << 16),
140 HOST_CAP_PMP = (1 << 17),
141 HOST_CAP_ONLY = (1 << 18),
142 HOST_CAP_CLO = (1 << 24),
143 HOST_CAP_LED = (1 << 25),
144 HOST_CAP_ALPM = (1 << 26),
145 HOST_CAP_SSS = (1 << 27),
146 HOST_CAP_MPS = (1 << 28),
147 HOST_CAP_SNTF = (1 << 29),
148 HOST_CAP_NCQ = (1 << 30),
149 HOST_CAP_64 = (1 << 31),
150
151
152 HOST_CAP2_BOH = (1 << 0),
153 HOST_CAP2_NVMHCI = (1 << 1),
154 HOST_CAP2_APST = (1 << 2),
155
156
157 PORT_LST_ADDR = 0x00,
158 PORT_LST_ADDR_HI = 0x04,
159 PORT_FIS_ADDR = 0x08,
160 PORT_FIS_ADDR_HI = 0x0c,
161 PORT_IRQ_STAT = 0x10,
162 PORT_IRQ_MASK = 0x14,
163 PORT_CMD = 0x18,
164 PORT_TFDATA = 0x20,
165 PORT_SIG = 0x24,
166 PORT_CMD_ISSUE = 0x38,
167 PORT_SCR_STAT = 0x28,
168 PORT_SCR_CTL = 0x2c,
169 PORT_SCR_ERR = 0x30,
170 PORT_SCR_ACT = 0x34,
171 PORT_SCR_NTF = 0x3c,
172
173
174 PORT_IRQ_COLD_PRES = (1 << 31),
175 PORT_IRQ_TF_ERR = (1 << 30),
176 PORT_IRQ_HBUS_ERR = (1 << 29),
177 PORT_IRQ_HBUS_DATA_ERR = (1 << 28),
178 PORT_IRQ_IF_ERR = (1 << 27),
179 PORT_IRQ_IF_NONFATAL = (1 << 26),
180 PORT_IRQ_OVERFLOW = (1 << 24),
181 PORT_IRQ_BAD_PMP = (1 << 23),
182
183 PORT_IRQ_PHYRDY = (1 << 22),
184 PORT_IRQ_DEV_ILCK = (1 << 7),
185 PORT_IRQ_CONNECT = (1 << 6),
186 PORT_IRQ_SG_DONE = (1 << 5),
187 PORT_IRQ_UNK_FIS = (1 << 4),
188 PORT_IRQ_SDB_FIS = (1 << 3),
189 PORT_IRQ_DMAS_FIS = (1 << 2),
190 PORT_IRQ_PIOS_FIS = (1 << 1),
191 PORT_IRQ_D2H_REG_FIS = (1 << 0),
192
193 PORT_IRQ_FREEZE = PORT_IRQ_HBUS_ERR |
194 PORT_IRQ_IF_ERR |
195 PORT_IRQ_CONNECT |
196 PORT_IRQ_PHYRDY |
197 PORT_IRQ_UNK_FIS |
198 PORT_IRQ_BAD_PMP,
199 PORT_IRQ_ERROR = PORT_IRQ_FREEZE |
200 PORT_IRQ_TF_ERR |
201 PORT_IRQ_HBUS_DATA_ERR,
202 DEF_PORT_IRQ = PORT_IRQ_ERROR | PORT_IRQ_SG_DONE |
203 PORT_IRQ_SDB_FIS | PORT_IRQ_DMAS_FIS |
204 PORT_IRQ_PIOS_FIS | PORT_IRQ_D2H_REG_FIS,
205
206
207 PORT_CMD_ASP = (1 << 27),
208 PORT_CMD_ALPE = (1 << 26),
209 PORT_CMD_ATAPI = (1 << 24),
210 PORT_CMD_PMP = (1 << 17),
211 PORT_CMD_LIST_ON = (1 << 15),
212 PORT_CMD_FIS_ON = (1 << 14),
213 PORT_CMD_FIS_RX = (1 << 4),
214 PORT_CMD_CLO = (1 << 3),
215 PORT_CMD_POWER_ON = (1 << 2),
216 PORT_CMD_SPIN_UP = (1 << 1),
217 PORT_CMD_START = (1 << 0),
218
219 PORT_CMD_ICC_MASK = (0xf << 28),
220 PORT_CMD_ICC_ACTIVE = (0x1 << 28),
221 PORT_CMD_ICC_PARTIAL = (0x2 << 28),
222 PORT_CMD_ICC_SLUMBER = (0x6 << 28),
223
224
225 AHCI_HFLAG_NO_NCQ = (1 << 0),
226 AHCI_HFLAG_IGN_IRQ_IF_ERR = (1 << 1),
227 AHCI_HFLAG_IGN_SERR_INTERNAL = (1 << 2),
228 AHCI_HFLAG_32BIT_ONLY = (1 << 3),
229 AHCI_HFLAG_MV_PATA = (1 << 4),
230 AHCI_HFLAG_NO_MSI = (1 << 5),
231 AHCI_HFLAG_NO_PMP = (1 << 6),
232 AHCI_HFLAG_NO_HOTPLUG = (1 << 7),
233 AHCI_HFLAG_SECT255 = (1 << 8),
234 AHCI_HFLAG_YES_NCQ = (1 << 9),
235 AHCI_HFLAG_NO_SUSPEND = (1 << 10),
236 AHCI_HFLAG_SRST_TOUT_IS_OFFLINE = (1 << 11),
237
238
239
240
241 AHCI_FLAG_COMMON = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
242 ATA_FLAG_MMIO | ATA_FLAG_PIO_DMA |
243 ATA_FLAG_ACPI_SATA | ATA_FLAG_AN |
244 ATA_FLAG_IPM,
245
246 ICH_MAP = 0x90,
247
248
249 EM_MAX_SLOTS = 8,
250 EM_MAX_RETRY = 5,
251
252
253 EM_CTL_RST = (1 << 9),
254 EM_CTL_TM = (1 << 8),
255 EM_CTL_ALHD = (1 << 26),
256};
257
258struct ahci_cmd_hdr {
259 __le32 opts;
260 __le32 status;
261 __le32 tbl_addr;
262 __le32 tbl_addr_hi;
263 __le32 reserved[4];
264};
265
266struct ahci_sg {
267 __le32 addr;
268 __le32 addr_hi;
269 __le32 reserved;
270 __le32 flags_size;
271};
272
273struct ahci_em_priv {
274 enum sw_activity blink_policy;
275 struct timer_list timer;
276 unsigned long saved_activity;
277 unsigned long activity;
278 unsigned long led_state;
279};
280
281struct ahci_host_priv {
282 unsigned int flags;
283 u32 cap;
284 u32 cap2;
285 u32 port_map;
286 u32 saved_cap;
287 u32 saved_cap2;
288 u32 saved_port_map;
289 u32 em_loc;
290};
291
292struct ahci_port_priv {
293 struct ata_link *active_link;
294 struct ahci_cmd_hdr *cmd_slot;
295 dma_addr_t cmd_slot_dma;
296 void *cmd_tbl;
297 dma_addr_t cmd_tbl_dma;
298 void *rx_fis;
299 dma_addr_t rx_fis_dma;
300
301 unsigned int ncq_saw_d2h:1;
302 unsigned int ncq_saw_dmas:1;
303 unsigned int ncq_saw_sdb:1;
304 u32 intr_mask;
305
306 struct ahci_em_priv em_priv[EM_MAX_SLOTS];
307};
308
309static int ahci_scr_read(struct ata_link *link, unsigned int sc_reg, u32 *val);
310static int ahci_scr_write(struct ata_link *link, unsigned int sc_reg, u32 val);
311static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent);
312static unsigned int ahci_qc_issue(struct ata_queued_cmd *qc);
313static bool ahci_qc_fill_rtf(struct ata_queued_cmd *qc);
314static int ahci_port_start(struct ata_port *ap);
315static void ahci_port_stop(struct ata_port *ap);
316static void ahci_qc_prep(struct ata_queued_cmd *qc);
317static void ahci_freeze(struct ata_port *ap);
318static void ahci_thaw(struct ata_port *ap);
319static void ahci_pmp_attach(struct ata_port *ap);
320static void ahci_pmp_detach(struct ata_port *ap);
321static int ahci_softreset(struct ata_link *link, unsigned int *class,
322 unsigned long deadline);
323static int ahci_sb600_softreset(struct ata_link *link, unsigned int *class,
324 unsigned long deadline);
325static int ahci_hardreset(struct ata_link *link, unsigned int *class,
326 unsigned long deadline);
327static int ahci_vt8251_hardreset(struct ata_link *link, unsigned int *class,
328 unsigned long deadline);
329static int ahci_p5wdh_hardreset(struct ata_link *link, unsigned int *class,
330 unsigned long deadline);
331static void ahci_postreset(struct ata_link *link, unsigned int *class);
332static void ahci_error_handler(struct ata_port *ap);
333static void ahci_post_internal_cmd(struct ata_queued_cmd *qc);
334static int ahci_port_resume(struct ata_port *ap);
335static void ahci_dev_config(struct ata_device *dev);
336static void ahci_fill_cmd_slot(struct ahci_port_priv *pp, unsigned int tag,
337 u32 opts);
338#ifdef CONFIG_PM
339static int ahci_port_suspend(struct ata_port *ap, pm_message_t mesg);
340static int ahci_pci_device_suspend(struct pci_dev *pdev, pm_message_t mesg);
341static int ahci_pci_device_resume(struct pci_dev *pdev);
342#endif
343static ssize_t ahci_activity_show(struct ata_device *dev, char *buf);
344static ssize_t ahci_activity_store(struct ata_device *dev,
345 enum sw_activity val);
346static void ahci_init_sw_activity(struct ata_link *link);
347
348static ssize_t ahci_show_host_caps(struct device *dev,
349 struct device_attribute *attr, char *buf);
350static ssize_t ahci_show_host_cap2(struct device *dev,
351 struct device_attribute *attr, char *buf);
352static ssize_t ahci_show_host_version(struct device *dev,
353 struct device_attribute *attr, char *buf);
354static ssize_t ahci_show_port_cmd(struct device *dev,
355 struct device_attribute *attr, char *buf);
356
357DEVICE_ATTR(ahci_host_caps, S_IRUGO, ahci_show_host_caps, NULL);
358DEVICE_ATTR(ahci_host_cap2, S_IRUGO, ahci_show_host_cap2, NULL);
359DEVICE_ATTR(ahci_host_version, S_IRUGO, ahci_show_host_version, NULL);
360DEVICE_ATTR(ahci_port_cmd, S_IRUGO, ahci_show_port_cmd, NULL);
361
362static struct device_attribute *ahci_shost_attrs[] = {
363 &dev_attr_link_power_management_policy,
364 &dev_attr_em_message_type,
365 &dev_attr_em_message,
366 &dev_attr_ahci_host_caps,
367 &dev_attr_ahci_host_cap2,
368 &dev_attr_ahci_host_version,
369 &dev_attr_ahci_port_cmd,
370 NULL
371};
372
373static struct device_attribute *ahci_sdev_attrs[] = {
374 &dev_attr_sw_activity,
375 &dev_attr_unload_heads,
376 NULL
377};
378
379static struct scsi_host_template ahci_sht = {
380 ATA_NCQ_SHT(DRV_NAME),
381 .can_queue = AHCI_MAX_CMDS - 1,
382 .sg_tablesize = AHCI_MAX_SG,
383 .dma_boundary = AHCI_DMA_BOUNDARY,
384 .shost_attrs = ahci_shost_attrs,
385 .sdev_attrs = ahci_sdev_attrs,
386};
387
388static struct ata_port_operations ahci_ops = {
389 .inherits = &sata_pmp_port_ops,
390
391 .qc_defer = sata_pmp_qc_defer_cmd_switch,
392 .qc_prep = ahci_qc_prep,
393 .qc_issue = ahci_qc_issue,
394 .qc_fill_rtf = ahci_qc_fill_rtf,
395
396 .freeze = ahci_freeze,
397 .thaw = ahci_thaw,
398 .softreset = ahci_softreset,
399 .hardreset = ahci_hardreset,
400 .postreset = ahci_postreset,
401 .pmp_softreset = ahci_softreset,
402 .error_handler = ahci_error_handler,
403 .post_internal_cmd = ahci_post_internal_cmd,
404 .dev_config = ahci_dev_config,
405
406 .scr_read = ahci_scr_read,
407 .scr_write = ahci_scr_write,
408 .pmp_attach = ahci_pmp_attach,
409 .pmp_detach = ahci_pmp_detach,
410
411 .enable_pm = ahci_enable_alpm,
412 .disable_pm = ahci_disable_alpm,
413 .em_show = ahci_led_show,
414 .em_store = ahci_led_store,
415 .sw_activity_show = ahci_activity_show,
416 .sw_activity_store = ahci_activity_store,
417#ifdef CONFIG_PM
418 .port_suspend = ahci_port_suspend,
419 .port_resume = ahci_port_resume,
420#endif
421 .port_start = ahci_port_start,
422 .port_stop = ahci_port_stop,
423};
424
425static struct ata_port_operations ahci_vt8251_ops = {
426 .inherits = &ahci_ops,
427 .hardreset = ahci_vt8251_hardreset,
428};
429
430static struct ata_port_operations ahci_p5wdh_ops = {
431 .inherits = &ahci_ops,
432 .hardreset = ahci_p5wdh_hardreset,
433};
434
435static struct ata_port_operations ahci_sb600_ops = {
436 .inherits = &ahci_ops,
437 .softreset = ahci_sb600_softreset,
438 .pmp_softreset = ahci_sb600_softreset,
439};
440
441#define AHCI_HFLAGS(flags) .private_data = (void *)(flags)
442
443static const struct ata_port_info ahci_port_info[] = {
444 [board_ahci] =
445 {
446 .flags = AHCI_FLAG_COMMON,
447 .pio_mask = ATA_PIO4,
448 .udma_mask = ATA_UDMA6,
449 .port_ops = &ahci_ops,
450 },
451 [board_ahci_vt8251] =
452 {
453 AHCI_HFLAGS (AHCI_HFLAG_NO_NCQ | AHCI_HFLAG_NO_PMP),
454 .flags = AHCI_FLAG_COMMON,
455 .pio_mask = ATA_PIO4,
456 .udma_mask = ATA_UDMA6,
457 .port_ops = &ahci_vt8251_ops,
458 },
459 [board_ahci_ign_iferr] =
460 {
461 AHCI_HFLAGS (AHCI_HFLAG_IGN_IRQ_IF_ERR),
462 .flags = AHCI_FLAG_COMMON,
463 .pio_mask = ATA_PIO4,
464 .udma_mask = ATA_UDMA6,
465 .port_ops = &ahci_ops,
466 },
467 [board_ahci_sb600] =
468 {
469 AHCI_HFLAGS (AHCI_HFLAG_IGN_SERR_INTERNAL |
470 AHCI_HFLAG_NO_MSI | AHCI_HFLAG_SECT255 |
471 AHCI_HFLAG_32BIT_ONLY),
472 .flags = AHCI_FLAG_COMMON,
473 .pio_mask = ATA_PIO4,
474 .udma_mask = ATA_UDMA6,
475 .port_ops = &ahci_sb600_ops,
476 },
477 [board_ahci_mv] =
478 {
479 AHCI_HFLAGS (AHCI_HFLAG_NO_NCQ | AHCI_HFLAG_NO_MSI |
480 AHCI_HFLAG_MV_PATA | AHCI_HFLAG_NO_PMP),
481 .flags = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
482 ATA_FLAG_MMIO | ATA_FLAG_PIO_DMA,
483 .pio_mask = ATA_PIO4,
484 .udma_mask = ATA_UDMA6,
485 .port_ops = &ahci_ops,
486 },
487 [board_ahci_sb700] =
488 {
489 AHCI_HFLAGS (AHCI_HFLAG_IGN_SERR_INTERNAL),
490 .flags = AHCI_FLAG_COMMON,
491 .pio_mask = ATA_PIO4,
492 .udma_mask = ATA_UDMA6,
493 .port_ops = &ahci_sb600_ops,
494 },
495 [board_ahci_mcp65] =
496 {
497 AHCI_HFLAGS (AHCI_HFLAG_YES_NCQ),
498 .flags = AHCI_FLAG_COMMON,
499 .pio_mask = ATA_PIO4,
500 .udma_mask = ATA_UDMA6,
501 .port_ops = &ahci_ops,
502 },
503 [board_ahci_nopmp] =
504 {
505 AHCI_HFLAGS (AHCI_HFLAG_NO_PMP),
506 .flags = AHCI_FLAG_COMMON,
507 .pio_mask = ATA_PIO4,
508 .udma_mask = ATA_UDMA6,
509 .port_ops = &ahci_ops,
510 },
511
512 {
513 AHCI_HFLAGS (AHCI_HFLAG_YES_NCQ),
514 .flags = AHCI_FLAG_COMMON,
515 .pio_mask = ATA_PIO4,
516 .udma_mask = ATA_UDMA6,
517 .port_ops = &ahci_ops,
518 },
519};
520
521static const struct pci_device_id ahci_pci_tbl[] = {
522
523 { PCI_VDEVICE(INTEL, 0x2652), board_ahci },
524 { PCI_VDEVICE(INTEL, 0x2653), board_ahci },
525 { PCI_VDEVICE(INTEL, 0x27c1), board_ahci },
526 { PCI_VDEVICE(INTEL, 0x27c5), board_ahci },
527 { PCI_VDEVICE(INTEL, 0x27c3), board_ahci },
528 { PCI_VDEVICE(AL, 0x5288), board_ahci_ign_iferr },
529 { PCI_VDEVICE(INTEL, 0x2681), board_ahci },
530 { PCI_VDEVICE(INTEL, 0x2682), board_ahci },
531 { PCI_VDEVICE(INTEL, 0x2683), board_ahci },
532 { PCI_VDEVICE(INTEL, 0x27c6), board_ahci },
533 { PCI_VDEVICE(INTEL, 0x2821), board_ahci },
534 { PCI_VDEVICE(INTEL, 0x2822), board_ahci },
535 { PCI_VDEVICE(INTEL, 0x2824), board_ahci },
536 { PCI_VDEVICE(INTEL, 0x2829), board_ahci },
537 { PCI_VDEVICE(INTEL, 0x282a), board_ahci },
538 { PCI_VDEVICE(INTEL, 0x2922), board_ahci },
539 { PCI_VDEVICE(INTEL, 0x2923), board_ahci },
540 { PCI_VDEVICE(INTEL, 0x2924), board_ahci },
541 { PCI_VDEVICE(INTEL, 0x2925), board_ahci },
542 { PCI_VDEVICE(INTEL, 0x2927), board_ahci },
543 { PCI_VDEVICE(INTEL, 0x2929), board_ahci },
544 { PCI_VDEVICE(INTEL, 0x292a), board_ahci },
545 { PCI_VDEVICE(INTEL, 0x292b), board_ahci },
546 { PCI_VDEVICE(INTEL, 0x292c), board_ahci },
547 { PCI_VDEVICE(INTEL, 0x292f), board_ahci },
548 { PCI_VDEVICE(INTEL, 0x294d), board_ahci },
549 { PCI_VDEVICE(INTEL, 0x294e), board_ahci },
550 { PCI_VDEVICE(INTEL, 0x502a), board_ahci },
551 { PCI_VDEVICE(INTEL, 0x502b), board_ahci },
552 { PCI_VDEVICE(INTEL, 0x3a05), board_ahci },
553 { PCI_VDEVICE(INTEL, 0x3a22), board_ahci },
554 { PCI_VDEVICE(INTEL, 0x3a25), board_ahci },
555 { PCI_VDEVICE(INTEL, 0x3b22), board_ahci },
556 { PCI_VDEVICE(INTEL, 0x3b23), board_ahci },
557 { PCI_VDEVICE(INTEL, 0x3b24), board_ahci },
558 { PCI_VDEVICE(INTEL, 0x3b25), board_ahci },
559 { PCI_VDEVICE(INTEL, 0x3b29), board_ahci },
560 { PCI_VDEVICE(INTEL, 0x3b2b), board_ahci },
561 { PCI_VDEVICE(INTEL, 0x3b2c), board_ahci },
562 { PCI_VDEVICE(INTEL, 0x3b2f), board_ahci },
563
564
565 { PCI_VENDOR_ID_JMICRON, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
566 PCI_CLASS_STORAGE_SATA_AHCI, 0xffffff, board_ahci_ign_iferr },
567
568
569 { PCI_VDEVICE(ATI, 0x4380), board_ahci_sb600 },
570 { PCI_VDEVICE(ATI, 0x4390), board_ahci_sb700 },
571 { PCI_VDEVICE(ATI, 0x4391), board_ahci_sb700 },
572 { PCI_VDEVICE(ATI, 0x4392), board_ahci_sb700 },
573 { PCI_VDEVICE(ATI, 0x4393), board_ahci_sb700 },
574 { PCI_VDEVICE(ATI, 0x4394), board_ahci_sb700 },
575 { PCI_VDEVICE(ATI, 0x4395), board_ahci_sb700 },
576
577
578 { PCI_VDEVICE(AMD, 0x7800), board_ahci },
579
580 { PCI_VENDOR_ID_AMD, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
581 PCI_CLASS_STORAGE_RAID << 8, 0xffffff, board_ahci },
582
583
584 { PCI_VDEVICE(VIA, 0x3349), board_ahci_vt8251 },
585 { PCI_VDEVICE(VIA, 0x6287), board_ahci_vt8251 },
586
587
588 { PCI_VDEVICE(NVIDIA, 0x044c), board_ahci_mcp65 },
589 { PCI_VDEVICE(NVIDIA, 0x044d), board_ahci_mcp65 },
590 { PCI_VDEVICE(NVIDIA, 0x044e), board_ahci_mcp65 },
591 { PCI_VDEVICE(NVIDIA, 0x044f), board_ahci_mcp65 },
592 { PCI_VDEVICE(NVIDIA, 0x045c), board_ahci_mcp65 },
593 { PCI_VDEVICE(NVIDIA, 0x045d), board_ahci_mcp65 },
594 { PCI_VDEVICE(NVIDIA, 0x045e), board_ahci_mcp65 },
595 { PCI_VDEVICE(NVIDIA, 0x045f), board_ahci_mcp65 },
596 { PCI_VDEVICE(NVIDIA, 0x0550), board_ahci_yesncq },
597 { PCI_VDEVICE(NVIDIA, 0x0551), board_ahci_yesncq },
598 { PCI_VDEVICE(NVIDIA, 0x0552), board_ahci_yesncq },
599 { PCI_VDEVICE(NVIDIA, 0x0553), board_ahci_yesncq },
600 { PCI_VDEVICE(NVIDIA, 0x0554), board_ahci_yesncq },
601 { PCI_VDEVICE(NVIDIA, 0x0555), board_ahci_yesncq },
602 { PCI_VDEVICE(NVIDIA, 0x0556), board_ahci_yesncq },
603 { PCI_VDEVICE(NVIDIA, 0x0557), board_ahci_yesncq },
604 { PCI_VDEVICE(NVIDIA, 0x0558), board_ahci_yesncq },
605 { PCI_VDEVICE(NVIDIA, 0x0559), board_ahci_yesncq },
606 { PCI_VDEVICE(NVIDIA, 0x055a), board_ahci_yesncq },
607 { PCI_VDEVICE(NVIDIA, 0x055b), board_ahci_yesncq },
608 { PCI_VDEVICE(NVIDIA, 0x0580), board_ahci_yesncq },
609 { PCI_VDEVICE(NVIDIA, 0x07f0), board_ahci_yesncq },
610 { PCI_VDEVICE(NVIDIA, 0x07f1), board_ahci_yesncq },
611 { PCI_VDEVICE(NVIDIA, 0x07f2), board_ahci_yesncq },
612 { PCI_VDEVICE(NVIDIA, 0x07f3), board_ahci_yesncq },
613 { PCI_VDEVICE(NVIDIA, 0x07f4), board_ahci_yesncq },
614 { PCI_VDEVICE(NVIDIA, 0x07f5), board_ahci_yesncq },
615 { PCI_VDEVICE(NVIDIA, 0x07f6), board_ahci_yesncq },
616 { PCI_VDEVICE(NVIDIA, 0x07f7), board_ahci_yesncq },
617 { PCI_VDEVICE(NVIDIA, 0x07f8), board_ahci_yesncq },
618 { PCI_VDEVICE(NVIDIA, 0x07f9), board_ahci_yesncq },
619 { PCI_VDEVICE(NVIDIA, 0x07fa), board_ahci_yesncq },
620 { PCI_VDEVICE(NVIDIA, 0x07fb), board_ahci_yesncq },
621 { PCI_VDEVICE(NVIDIA, 0x0ad0), board_ahci },
622 { PCI_VDEVICE(NVIDIA, 0x0ad1), board_ahci },
623 { PCI_VDEVICE(NVIDIA, 0x0ad2), board_ahci },
624 { PCI_VDEVICE(NVIDIA, 0x0ad3), board_ahci },
625 { PCI_VDEVICE(NVIDIA, 0x0ad4), board_ahci },
626 { PCI_VDEVICE(NVIDIA, 0x0ad5), board_ahci },
627 { PCI_VDEVICE(NVIDIA, 0x0ad6), board_ahci },
628 { PCI_VDEVICE(NVIDIA, 0x0ad7), board_ahci },
629 { PCI_VDEVICE(NVIDIA, 0x0ad8), board_ahci },
630 { PCI_VDEVICE(NVIDIA, 0x0ad9), board_ahci },
631 { PCI_VDEVICE(NVIDIA, 0x0ada), board_ahci },
632 { PCI_VDEVICE(NVIDIA, 0x0adb), board_ahci },
633 { PCI_VDEVICE(NVIDIA, 0x0ab4), board_ahci },
634 { PCI_VDEVICE(NVIDIA, 0x0ab5), board_ahci },
635 { PCI_VDEVICE(NVIDIA, 0x0ab6), board_ahci },
636 { PCI_VDEVICE(NVIDIA, 0x0ab7), board_ahci },
637 { PCI_VDEVICE(NVIDIA, 0x0ab8), board_ahci },
638 { PCI_VDEVICE(NVIDIA, 0x0ab9), board_ahci },
639 { PCI_VDEVICE(NVIDIA, 0x0aba), board_ahci },
640 { PCI_VDEVICE(NVIDIA, 0x0abb), board_ahci },
641 { PCI_VDEVICE(NVIDIA, 0x0abc), board_ahci },
642 { PCI_VDEVICE(NVIDIA, 0x0abd), board_ahci },
643 { PCI_VDEVICE(NVIDIA, 0x0abe), board_ahci },
644 { PCI_VDEVICE(NVIDIA, 0x0abf), board_ahci },
645 { PCI_VDEVICE(NVIDIA, 0x0d84), board_ahci },
646 { PCI_VDEVICE(NVIDIA, 0x0d85), board_ahci },
647 { PCI_VDEVICE(NVIDIA, 0x0d86), board_ahci },
648 { PCI_VDEVICE(NVIDIA, 0x0d87), board_ahci },
649 { PCI_VDEVICE(NVIDIA, 0x0d88), board_ahci },
650 { PCI_VDEVICE(NVIDIA, 0x0d89), board_ahci },
651 { PCI_VDEVICE(NVIDIA, 0x0d8a), board_ahci },
652 { PCI_VDEVICE(NVIDIA, 0x0d8b), board_ahci },
653 { PCI_VDEVICE(NVIDIA, 0x0d8c), board_ahci },
654 { PCI_VDEVICE(NVIDIA, 0x0d8d), board_ahci },
655 { PCI_VDEVICE(NVIDIA, 0x0d8e), board_ahci },
656 { PCI_VDEVICE(NVIDIA, 0x0d8f), board_ahci },
657
658
659 { PCI_VDEVICE(SI, 0x1184), board_ahci },
660 { PCI_VDEVICE(SI, 0x1185), board_ahci },
661 { PCI_VDEVICE(SI, 0x0186), board_ahci },
662
663
664 { PCI_VDEVICE(MARVELL, 0x6145), board_ahci_mv },
665 { PCI_VDEVICE(MARVELL, 0x6121), board_ahci_mv },
666
667
668 { PCI_VDEVICE(PROMISE, 0x3f20), board_ahci },
669
670
671 { PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
672 PCI_CLASS_STORAGE_SATA_AHCI, 0xffffff, board_ahci },
673
674 { }
675};
676
677
678static struct pci_driver ahci_pci_driver = {
679 .name = DRV_NAME,
680 .id_table = ahci_pci_tbl,
681 .probe = ahci_init_one,
682 .remove = ata_pci_remove_one,
683#ifdef CONFIG_PM
684 .suspend = ahci_pci_device_suspend,
685 .resume = ahci_pci_device_resume,
686#endif
687};
688
689static int ahci_em_messages = 1;
690module_param(ahci_em_messages, int, 0444);
691
692MODULE_PARM_DESC(ahci_em_messages,
693 "Set AHCI Enclosure Management Message type (0 = disabled, 1 = LED");
694
695#if defined(CONFIG_PATA_MARVELL) || defined(CONFIG_PATA_MARVELL_MODULE)
696static int marvell_enable;
697#else
698static int marvell_enable = 1;
699#endif
700module_param(marvell_enable, int, 0644);
701MODULE_PARM_DESC(marvell_enable, "Marvell SATA via AHCI (1 = enabled)");
702
703
704static inline int ahci_nr_ports(u32 cap)
705{
706 return (cap & 0x1f) + 1;
707}
708
709static inline void __iomem *__ahci_port_base(struct ata_host *host,
710 unsigned int port_no)
711{
712 void __iomem *mmio = host->iomap[AHCI_PCI_BAR];
713
714 return mmio + 0x100 + (port_no * 0x80);
715}
716
717static inline void __iomem *ahci_port_base(struct ata_port *ap)
718{
719 return __ahci_port_base(ap->host, ap->port_no);
720}
721
722static void ahci_enable_ahci(void __iomem *mmio)
723{
724 int i;
725 u32 tmp;
726
727
728 tmp = readl(mmio + HOST_CTL);
729 if (tmp & HOST_AHCI_EN)
730 return;
731
732
733
734
735 for (i = 0; i < 5; i++) {
736 tmp |= HOST_AHCI_EN;
737 writel(tmp, mmio + HOST_CTL);
738 tmp = readl(mmio + HOST_CTL);
739 if (tmp & HOST_AHCI_EN)
740 return;
741 msleep(10);
742 }
743
744 WARN_ON(1);
745}
746
747static ssize_t ahci_show_host_caps(struct device *dev,
748 struct device_attribute *attr, char *buf)
749{
750 struct Scsi_Host *shost = class_to_shost(dev);
751 struct ata_port *ap = ata_shost_to_port(shost);
752 struct ahci_host_priv *hpriv = ap->host->private_data;
753
754 return sprintf(buf, "%x\n", hpriv->cap);
755}
756
757static ssize_t ahci_show_host_cap2(struct device *dev,
758 struct device_attribute *attr, char *buf)
759{
760 struct Scsi_Host *shost = class_to_shost(dev);
761 struct ata_port *ap = ata_shost_to_port(shost);
762 struct ahci_host_priv *hpriv = ap->host->private_data;
763
764 return sprintf(buf, "%x\n", hpriv->cap2);
765}
766
767static ssize_t ahci_show_host_version(struct device *dev,
768 struct device_attribute *attr, char *buf)
769{
770 struct Scsi_Host *shost = class_to_shost(dev);
771 struct ata_port *ap = ata_shost_to_port(shost);
772 void __iomem *mmio = ap->host->iomap[AHCI_PCI_BAR];
773
774 return sprintf(buf, "%x\n", readl(mmio + HOST_VERSION));
775}
776
777static ssize_t ahci_show_port_cmd(struct device *dev,
778 struct device_attribute *attr, char *buf)
779{
780 struct Scsi_Host *shost = class_to_shost(dev);
781 struct ata_port *ap = ata_shost_to_port(shost);
782 void __iomem *port_mmio = ahci_port_base(ap);
783
784 return sprintf(buf, "%x\n", readl(port_mmio + PORT_CMD));
785}
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802static void ahci_save_initial_config(struct pci_dev *pdev,
803 struct ahci_host_priv *hpriv)
804{
805 void __iomem *mmio = pcim_iomap_table(pdev)[AHCI_PCI_BAR];
806 u32 cap, cap2, vers, port_map;
807 int i;
808 int mv;
809
810
811 ahci_enable_ahci(mmio);
812
813
814
815
816 hpriv->saved_cap = cap = readl(mmio + HOST_CAP);
817 hpriv->saved_port_map = port_map = readl(mmio + HOST_PORTS_IMPL);
818
819
820 vers = readl(mmio + HOST_VERSION);
821 if ((vers >> 16) > 1 ||
822 ((vers >> 16) == 1 && (vers & 0xFFFF) >= 0x200))
823 hpriv->saved_cap2 = cap2 = readl(mmio + HOST_CAP2);
824 else
825 hpriv->saved_cap2 = cap2 = 0;
826
827
828 if ((cap & HOST_CAP_64) && (hpriv->flags & AHCI_HFLAG_32BIT_ONLY)) {
829 dev_printk(KERN_INFO, &pdev->dev,
830 "controller can't do 64bit DMA, forcing 32bit\n");
831 cap &= ~HOST_CAP_64;
832 }
833
834 if ((cap & HOST_CAP_NCQ) && (hpriv->flags & AHCI_HFLAG_NO_NCQ)) {
835 dev_printk(KERN_INFO, &pdev->dev,
836 "controller can't do NCQ, turning off CAP_NCQ\n");
837 cap &= ~HOST_CAP_NCQ;
838 }
839
840 if (!(cap & HOST_CAP_NCQ) && (hpriv->flags & AHCI_HFLAG_YES_NCQ)) {
841 dev_printk(KERN_INFO, &pdev->dev,
842 "controller can do NCQ, turning on CAP_NCQ\n");
843 cap |= HOST_CAP_NCQ;
844 }
845
846 if ((cap & HOST_CAP_PMP) && (hpriv->flags & AHCI_HFLAG_NO_PMP)) {
847 dev_printk(KERN_INFO, &pdev->dev,
848 "controller can't do PMP, turning off CAP_PMP\n");
849 cap &= ~HOST_CAP_PMP;
850 }
851
852 if (pdev->vendor == PCI_VENDOR_ID_JMICRON && pdev->device == 0x2361 &&
853 port_map != 1) {
854 dev_printk(KERN_INFO, &pdev->dev,
855 "JMB361 has only one port, port_map 0x%x -> 0x%x\n",
856 port_map, 1);
857 port_map = 1;
858 }
859
860
861
862
863
864
865 if (hpriv->flags & AHCI_HFLAG_MV_PATA) {
866 if (pdev->device == 0x6121)
867 mv = 0x3;
868 else
869 mv = 0xf;
870 dev_printk(KERN_ERR, &pdev->dev,
871 "MV_AHCI HACK: port_map %x -> %x\n",
872 port_map,
873 port_map & mv);
874 dev_printk(KERN_ERR, &pdev->dev,
875 "Disabling your PATA port. Use the boot option 'ahci.marvell_enable=0' to avoid this.\n");
876
877 port_map &= mv;
878 }
879
880
881 if (port_map) {
882 int map_ports = 0;
883
884 for (i = 0; i < AHCI_MAX_PORTS; i++)
885 if (port_map & (1 << i))
886 map_ports++;
887
888
889
890
891 if (map_ports > ahci_nr_ports(cap)) {
892 dev_printk(KERN_WARNING, &pdev->dev,
893 "implemented port map (0x%x) contains more "
894 "ports than nr_ports (%u), using nr_ports\n",
895 port_map, ahci_nr_ports(cap));
896 port_map = 0;
897 }
898 }
899
900
901 if (!port_map) {
902 port_map = (1 << ahci_nr_ports(cap)) - 1;
903 dev_printk(KERN_WARNING, &pdev->dev,
904 "forcing PORTS_IMPL to 0x%x\n", port_map);
905
906
907 hpriv->saved_port_map = port_map;
908 }
909
910
911 hpriv->cap = cap;
912 hpriv->cap2 = cap2;
913 hpriv->port_map = port_map;
914}
915
916
917
918
919
920
921
922
923
924
925static void ahci_restore_initial_config(struct ata_host *host)
926{
927 struct ahci_host_priv *hpriv = host->private_data;
928 void __iomem *mmio = host->iomap[AHCI_PCI_BAR];
929
930 writel(hpriv->saved_cap, mmio + HOST_CAP);
931 if (hpriv->saved_cap2)
932 writel(hpriv->saved_cap2, mmio + HOST_CAP2);
933 writel(hpriv->saved_port_map, mmio + HOST_PORTS_IMPL);
934 (void) readl(mmio + HOST_PORTS_IMPL);
935}
936
937static unsigned ahci_scr_offset(struct ata_port *ap, unsigned int sc_reg)
938{
939 static const int offset[] = {
940 [SCR_STATUS] = PORT_SCR_STAT,
941 [SCR_CONTROL] = PORT_SCR_CTL,
942 [SCR_ERROR] = PORT_SCR_ERR,
943 [SCR_ACTIVE] = PORT_SCR_ACT,
944 [SCR_NOTIFICATION] = PORT_SCR_NTF,
945 };
946 struct ahci_host_priv *hpriv = ap->host->private_data;
947
948 if (sc_reg < ARRAY_SIZE(offset) &&
949 (sc_reg != SCR_NOTIFICATION || (hpriv->cap & HOST_CAP_SNTF)))
950 return offset[sc_reg];
951 return 0;
952}
953
954static int ahci_scr_read(struct ata_link *link, unsigned int sc_reg, u32 *val)
955{
956 void __iomem *port_mmio = ahci_port_base(link->ap);
957 int offset = ahci_scr_offset(link->ap, sc_reg);
958
959 if (offset) {
960 *val = readl(port_mmio + offset);
961 return 0;
962 }
963 return -EINVAL;
964}
965
966static int ahci_scr_write(struct ata_link *link, unsigned int sc_reg, u32 val)
967{
968 void __iomem *port_mmio = ahci_port_base(link->ap);
969 int offset = ahci_scr_offset(link->ap, sc_reg);
970
971 if (offset) {
972 writel(val, port_mmio + offset);
973 return 0;
974 }
975 return -EINVAL;
976}
977
978static void ahci_start_engine(struct ata_port *ap)
979{
980 void __iomem *port_mmio = ahci_port_base(ap);
981 u32 tmp;
982
983
984 tmp = readl(port_mmio + PORT_CMD);
985 tmp |= PORT_CMD_START;
986 writel(tmp, port_mmio + PORT_CMD);
987 readl(port_mmio + PORT_CMD);
988}
989
990static int ahci_stop_engine(struct ata_port *ap)
991{
992 void __iomem *port_mmio = ahci_port_base(ap);
993 u32 tmp;
994
995 tmp = readl(port_mmio + PORT_CMD);
996
997
998 if ((tmp & (PORT_CMD_START | PORT_CMD_LIST_ON)) == 0)
999 return 0;
1000
1001
1002 tmp &= ~PORT_CMD_START;
1003 writel(tmp, port_mmio + PORT_CMD);
1004
1005
1006 tmp = ata_wait_register(port_mmio + PORT_CMD,
1007 PORT_CMD_LIST_ON, PORT_CMD_LIST_ON, 1, 500);
1008 if (tmp & PORT_CMD_LIST_ON)
1009 return -EIO;
1010
1011 return 0;
1012}
1013
1014static void ahci_start_fis_rx(struct ata_port *ap)
1015{
1016 void __iomem *port_mmio = ahci_port_base(ap);
1017 struct ahci_host_priv *hpriv = ap->host->private_data;
1018 struct ahci_port_priv *pp = ap->private_data;
1019 u32 tmp;
1020
1021
1022 if (hpriv->cap & HOST_CAP_64)
1023 writel((pp->cmd_slot_dma >> 16) >> 16,
1024 port_mmio + PORT_LST_ADDR_HI);
1025 writel(pp->cmd_slot_dma & 0xffffffff, port_mmio + PORT_LST_ADDR);
1026
1027 if (hpriv->cap & HOST_CAP_64)
1028 writel((pp->rx_fis_dma >> 16) >> 16,
1029 port_mmio + PORT_FIS_ADDR_HI);
1030 writel(pp->rx_fis_dma & 0xffffffff, port_mmio + PORT_FIS_ADDR);
1031
1032
1033 tmp = readl(port_mmio + PORT_CMD);
1034 tmp |= PORT_CMD_FIS_RX;
1035 writel(tmp, port_mmio + PORT_CMD);
1036
1037
1038 readl(port_mmio + PORT_CMD);
1039}
1040
1041static int ahci_stop_fis_rx(struct ata_port *ap)
1042{
1043 void __iomem *port_mmio = ahci_port_base(ap);
1044 u32 tmp;
1045
1046
1047 tmp = readl(port_mmio + PORT_CMD);
1048 tmp &= ~PORT_CMD_FIS_RX;
1049 writel(tmp, port_mmio + PORT_CMD);
1050
1051
1052 tmp = ata_wait_register(port_mmio + PORT_CMD, PORT_CMD_FIS_ON,
1053 PORT_CMD_FIS_ON, 10, 1000);
1054 if (tmp & PORT_CMD_FIS_ON)
1055 return -EBUSY;
1056
1057 return 0;
1058}
1059
1060static void ahci_power_up(struct ata_port *ap)
1061{
1062 struct ahci_host_priv *hpriv = ap->host->private_data;
1063 void __iomem *port_mmio = ahci_port_base(ap);
1064 u32 cmd;
1065
1066 cmd = readl(port_mmio + PORT_CMD) & ~PORT_CMD_ICC_MASK;
1067
1068
1069 if (hpriv->cap & HOST_CAP_SSS) {
1070 cmd |= PORT_CMD_SPIN_UP;
1071 writel(cmd, port_mmio + PORT_CMD);
1072 }
1073
1074
1075 writel(cmd | PORT_CMD_ICC_ACTIVE, port_mmio + PORT_CMD);
1076}
1077
1078static void ahci_disable_alpm(struct ata_port *ap)
1079{
1080 struct ahci_host_priv *hpriv = ap->host->private_data;
1081 void __iomem *port_mmio = ahci_port_base(ap);
1082 u32 cmd;
1083 struct ahci_port_priv *pp = ap->private_data;
1084
1085
1086
1087 cmd = readl(port_mmio + PORT_CMD);
1088
1089
1090 cmd &= ~PORT_CMD_ASP;
1091 cmd &= ~PORT_CMD_ALPE;
1092
1093
1094 cmd |= PORT_CMD_ICC_ACTIVE;
1095
1096
1097 writel(cmd, port_mmio + PORT_CMD);
1098 cmd = readl(port_mmio + PORT_CMD);
1099
1100
1101 msleep(10);
1102
1103
1104 writel(PORT_IRQ_PHYRDY, port_mmio + PORT_IRQ_STAT);
1105
1106
1107 ahci_scr_write(&ap->link, SCR_ERROR, ((1 << 16) | (1 << 18)));
1108
1109
1110
1111
1112
1113 hpriv->flags &= ~AHCI_HFLAG_NO_HOTPLUG;
1114
1115
1116
1117
1118 pp->intr_mask |= PORT_IRQ_PHYRDY;
1119 writel(pp->intr_mask, port_mmio + PORT_IRQ_MASK);
1120
1121
1122
1123
1124
1125}
1126
1127static int ahci_enable_alpm(struct ata_port *ap,
1128 enum link_pm policy)
1129{
1130 struct ahci_host_priv *hpriv = ap->host->private_data;
1131 void __iomem *port_mmio = ahci_port_base(ap);
1132 u32 cmd;
1133 struct ahci_port_priv *pp = ap->private_data;
1134 u32 asp;
1135
1136
1137 if (!(hpriv->cap & HOST_CAP_ALPM))
1138 return -EINVAL;
1139
1140 switch (policy) {
1141 case MAX_PERFORMANCE:
1142 case NOT_AVAILABLE:
1143
1144
1145
1146
1147
1148
1149 ahci_disable_alpm(ap);
1150 return 0;
1151 case MIN_POWER:
1152
1153 asp = PORT_CMD_ASP;
1154 break;
1155 case MEDIUM_POWER:
1156
1157 asp = 0;
1158 break;
1159 default:
1160 return -EINVAL;
1161 }
1162
1163
1164
1165
1166
1167
1168
1169 pp->intr_mask &= ~PORT_IRQ_PHYRDY;
1170 writel(pp->intr_mask, port_mmio + PORT_IRQ_MASK);
1171
1172
1173
1174
1175
1176
1177 hpriv->flags |= AHCI_HFLAG_NO_HOTPLUG;
1178
1179
1180 cmd = readl(port_mmio + PORT_CMD);
1181
1182
1183
1184
1185 cmd |= asp;
1186
1187
1188
1189
1190
1191
1192 cmd |= PORT_CMD_ALPE;
1193
1194
1195 writel(cmd, port_mmio + PORT_CMD);
1196 cmd = readl(port_mmio + PORT_CMD);
1197
1198
1199 return 0;
1200}
1201
1202#ifdef CONFIG_PM
1203static void ahci_power_down(struct ata_port *ap)
1204{
1205 struct ahci_host_priv *hpriv = ap->host->private_data;
1206 void __iomem *port_mmio = ahci_port_base(ap);
1207 u32 cmd, scontrol;
1208
1209 if (!(hpriv->cap & HOST_CAP_SSS))
1210 return;
1211
1212
1213 scontrol = readl(port_mmio + PORT_SCR_CTL);
1214 scontrol &= ~0xf;
1215 writel(scontrol, port_mmio + PORT_SCR_CTL);
1216
1217
1218 cmd = readl(port_mmio + PORT_CMD) & ~PORT_CMD_ICC_MASK;
1219 cmd &= ~PORT_CMD_SPIN_UP;
1220 writel(cmd, port_mmio + PORT_CMD);
1221}
1222#endif
1223
1224static void ahci_start_port(struct ata_port *ap)
1225{
1226 struct ahci_port_priv *pp = ap->private_data;
1227 struct ata_link *link;
1228 struct ahci_em_priv *emp;
1229 ssize_t rc;
1230 int i;
1231
1232
1233 ahci_start_fis_rx(ap);
1234
1235
1236 ahci_start_engine(ap);
1237
1238
1239 if (ap->flags & ATA_FLAG_EM) {
1240 ata_for_each_link(link, ap, EDGE) {
1241 emp = &pp->em_priv[link->pmp];
1242
1243
1244 for (i = 0; i < EM_MAX_RETRY; i++) {
1245 rc = ahci_transmit_led_message(ap,
1246 emp->led_state,
1247 4);
1248 if (rc == -EBUSY)
1249 msleep(1);
1250 else
1251 break;
1252 }
1253 }
1254 }
1255
1256 if (ap->flags & ATA_FLAG_SW_ACTIVITY)
1257 ata_for_each_link(link, ap, EDGE)
1258 ahci_init_sw_activity(link);
1259
1260}
1261
1262static int ahci_deinit_port(struct ata_port *ap, const char **emsg)
1263{
1264 int rc;
1265
1266
1267 rc = ahci_stop_engine(ap);
1268 if (rc) {
1269 *emsg = "failed to stop engine";
1270 return rc;
1271 }
1272
1273
1274 rc = ahci_stop_fis_rx(ap);
1275 if (rc) {
1276 *emsg = "failed stop FIS RX";
1277 return rc;
1278 }
1279
1280 return 0;
1281}
1282
1283static int ahci_reset_controller(struct ata_host *host)
1284{
1285 struct pci_dev *pdev = to_pci_dev(host->dev);
1286 struct ahci_host_priv *hpriv = host->private_data;
1287 void __iomem *mmio = host->iomap[AHCI_PCI_BAR];
1288 u32 tmp;
1289
1290
1291
1292
1293 ahci_enable_ahci(mmio);
1294
1295
1296 if (!ahci_skip_host_reset) {
1297 tmp = readl(mmio + HOST_CTL);
1298 if ((tmp & HOST_RESET) == 0) {
1299 writel(tmp | HOST_RESET, mmio + HOST_CTL);
1300 readl(mmio + HOST_CTL);
1301 }
1302
1303
1304
1305
1306
1307
1308
1309 tmp = ata_wait_register(mmio + HOST_CTL, HOST_RESET,
1310 HOST_RESET, 10, 1000);
1311
1312 if (tmp & HOST_RESET) {
1313 dev_printk(KERN_ERR, host->dev,
1314 "controller reset failed (0x%x)\n", tmp);
1315 return -EIO;
1316 }
1317
1318
1319 ahci_enable_ahci(mmio);
1320
1321
1322
1323
1324 ahci_restore_initial_config(host);
1325 } else
1326 dev_printk(KERN_INFO, host->dev,
1327 "skipping global host reset\n");
1328
1329 if (pdev->vendor == PCI_VENDOR_ID_INTEL) {
1330 u16 tmp16;
1331
1332
1333 pci_read_config_word(pdev, 0x92, &tmp16);
1334 if ((tmp16 & hpriv->port_map) != hpriv->port_map) {
1335 tmp16 |= hpriv->port_map;
1336 pci_write_config_word(pdev, 0x92, tmp16);
1337 }
1338 }
1339
1340 return 0;
1341}
1342
1343static void ahci_sw_activity(struct ata_link *link)
1344{
1345 struct ata_port *ap = link->ap;
1346 struct ahci_port_priv *pp = ap->private_data;
1347 struct ahci_em_priv *emp = &pp->em_priv[link->pmp];
1348
1349 if (!(link->flags & ATA_LFLAG_SW_ACTIVITY))
1350 return;
1351
1352 emp->activity++;
1353 if (!timer_pending(&emp->timer))
1354 mod_timer(&emp->timer, jiffies + msecs_to_jiffies(10));
1355}
1356
1357static void ahci_sw_activity_blink(unsigned long arg)
1358{
1359 struct ata_link *link = (struct ata_link *)arg;
1360 struct ata_port *ap = link->ap;
1361 struct ahci_port_priv *pp = ap->private_data;
1362 struct ahci_em_priv *emp = &pp->em_priv[link->pmp];
1363 unsigned long led_message = emp->led_state;
1364 u32 activity_led_state;
1365 unsigned long flags;
1366
1367 led_message &= EM_MSG_LED_VALUE;
1368 led_message |= ap->port_no | (link->pmp << 8);
1369
1370
1371
1372
1373
1374 spin_lock_irqsave(ap->lock, flags);
1375 if (emp->saved_activity != emp->activity) {
1376 emp->saved_activity = emp->activity;
1377
1378 activity_led_state = led_message & EM_MSG_LED_VALUE_ON;
1379
1380 if (activity_led_state)
1381 activity_led_state = 0;
1382 else
1383 activity_led_state = 1;
1384
1385
1386 led_message &= ~EM_MSG_LED_VALUE_ACTIVITY;
1387
1388
1389 led_message |= (activity_led_state << 16);
1390 mod_timer(&emp->timer, jiffies + msecs_to_jiffies(100));
1391 } else {
1392
1393 led_message &= ~EM_MSG_LED_VALUE_ACTIVITY;
1394 if (emp->blink_policy == BLINK_OFF)
1395 led_message |= (1 << 16);
1396 }
1397 spin_unlock_irqrestore(ap->lock, flags);
1398 ahci_transmit_led_message(ap, led_message, 4);
1399}
1400
1401static void ahci_init_sw_activity(struct ata_link *link)
1402{
1403 struct ata_port *ap = link->ap;
1404 struct ahci_port_priv *pp = ap->private_data;
1405 struct ahci_em_priv *emp = &pp->em_priv[link->pmp];
1406
1407
1408 emp->saved_activity = emp->activity = 0;
1409 setup_timer(&emp->timer, ahci_sw_activity_blink, (unsigned long)link);
1410
1411
1412 if (emp->blink_policy)
1413 link->flags |= ATA_LFLAG_SW_ACTIVITY;
1414}
1415
1416static int ahci_reset_em(struct ata_host *host)
1417{
1418 void __iomem *mmio = host->iomap[AHCI_PCI_BAR];
1419 u32 em_ctl;
1420
1421 em_ctl = readl(mmio + HOST_EM_CTL);
1422 if ((em_ctl & EM_CTL_TM) || (em_ctl & EM_CTL_RST))
1423 return -EINVAL;
1424
1425 writel(em_ctl | EM_CTL_RST, mmio + HOST_EM_CTL);
1426 return 0;
1427}
1428
1429static ssize_t ahci_transmit_led_message(struct ata_port *ap, u32 state,
1430 ssize_t size)
1431{
1432 struct ahci_host_priv *hpriv = ap->host->private_data;
1433 struct ahci_port_priv *pp = ap->private_data;
1434 void __iomem *mmio = ap->host->iomap[AHCI_PCI_BAR];
1435 u32 em_ctl;
1436 u32 message[] = {0, 0};
1437 unsigned long flags;
1438 int pmp;
1439 struct ahci_em_priv *emp;
1440
1441
1442 pmp = (state & EM_MSG_LED_PMP_SLOT) >> 8;
1443 if (pmp < EM_MAX_SLOTS)
1444 emp = &pp->em_priv[pmp];
1445 else
1446 return -EINVAL;
1447
1448 spin_lock_irqsave(ap->lock, flags);
1449
1450
1451
1452
1453
1454 em_ctl = readl(mmio + HOST_EM_CTL);
1455 if (em_ctl & EM_CTL_TM) {
1456 spin_unlock_irqrestore(ap->lock, flags);
1457 return -EBUSY;
1458 }
1459
1460
1461
1462
1463
1464 message[0] |= (4 << 8);
1465
1466
1467 message[1] = ((state & ~EM_MSG_LED_HBA_PORT) | ap->port_no);
1468
1469
1470 writel(message[0], mmio + hpriv->em_loc);
1471 writel(message[1], mmio + hpriv->em_loc+4);
1472
1473
1474 emp->led_state = state;
1475
1476
1477
1478
1479 writel(em_ctl | EM_CTL_TM, mmio + HOST_EM_CTL);
1480
1481 spin_unlock_irqrestore(ap->lock, flags);
1482 return size;
1483}
1484
1485static ssize_t ahci_led_show(struct ata_port *ap, char *buf)
1486{
1487 struct ahci_port_priv *pp = ap->private_data;
1488 struct ata_link *link;
1489 struct ahci_em_priv *emp;
1490 int rc = 0;
1491
1492 ata_for_each_link(link, ap, EDGE) {
1493 emp = &pp->em_priv[link->pmp];
1494 rc += sprintf(buf, "%lx\n", emp->led_state);
1495 }
1496 return rc;
1497}
1498
1499static ssize_t ahci_led_store(struct ata_port *ap, const char *buf,
1500 size_t size)
1501{
1502 int state;
1503 int pmp;
1504 struct ahci_port_priv *pp = ap->private_data;
1505 struct ahci_em_priv *emp;
1506
1507 state = simple_strtoul(buf, NULL, 0);
1508
1509
1510 pmp = (state & EM_MSG_LED_PMP_SLOT) >> 8;
1511 if (pmp < EM_MAX_SLOTS)
1512 emp = &pp->em_priv[pmp];
1513 else
1514 return -EINVAL;
1515
1516
1517
1518
1519
1520 if (emp->blink_policy)
1521 state &= ~EM_MSG_LED_VALUE_ACTIVITY;
1522
1523 return ahci_transmit_led_message(ap, state, size);
1524}
1525
1526static ssize_t ahci_activity_store(struct ata_device *dev, enum sw_activity val)
1527{
1528 struct ata_link *link = dev->link;
1529 struct ata_port *ap = link->ap;
1530 struct ahci_port_priv *pp = ap->private_data;
1531 struct ahci_em_priv *emp = &pp->em_priv[link->pmp];
1532 u32 port_led_state = emp->led_state;
1533
1534
1535 if (val == OFF) {
1536
1537 link->flags &= ~(ATA_LFLAG_SW_ACTIVITY);
1538
1539
1540 port_led_state &= EM_MSG_LED_VALUE_OFF;
1541 port_led_state |= (ap->port_no | (link->pmp << 8));
1542 ahci_transmit_led_message(ap, port_led_state, 4);
1543 } else {
1544 link->flags |= ATA_LFLAG_SW_ACTIVITY;
1545 if (val == BLINK_OFF) {
1546
1547 port_led_state &= EM_MSG_LED_VALUE_OFF;
1548 port_led_state |= (ap->port_no | (link->pmp << 8));
1549 port_led_state |= EM_MSG_LED_VALUE_ON;
1550 ahci_transmit_led_message(ap, port_led_state, 4);
1551 }
1552 }
1553 emp->blink_policy = val;
1554 return 0;
1555}
1556
1557static ssize_t ahci_activity_show(struct ata_device *dev, char *buf)
1558{
1559 struct ata_link *link = dev->link;
1560 struct ata_port *ap = link->ap;
1561 struct ahci_port_priv *pp = ap->private_data;
1562 struct ahci_em_priv *emp = &pp->em_priv[link->pmp];
1563
1564
1565
1566
1567 return sprintf(buf, "%d\n", emp->blink_policy);
1568}
1569
1570static void ahci_port_init(struct pci_dev *pdev, struct ata_port *ap,
1571 int port_no, void __iomem *mmio,
1572 void __iomem *port_mmio)
1573{
1574 const char *emsg = NULL;
1575 int rc;
1576 u32 tmp;
1577
1578
1579 rc = ahci_deinit_port(ap, &emsg);
1580 if (rc)
1581 dev_printk(KERN_WARNING, &pdev->dev,
1582 "%s (%d)\n", emsg, rc);
1583
1584
1585 tmp = readl(port_mmio + PORT_SCR_ERR);
1586 VPRINTK("PORT_SCR_ERR 0x%x\n", tmp);
1587 writel(tmp, port_mmio + PORT_SCR_ERR);
1588
1589
1590 tmp = readl(port_mmio + PORT_IRQ_STAT);
1591 VPRINTK("PORT_IRQ_STAT 0x%x\n", tmp);
1592 if (tmp)
1593 writel(tmp, port_mmio + PORT_IRQ_STAT);
1594
1595 writel(1 << port_no, mmio + HOST_IRQ_STAT);
1596}
1597
1598static void ahci_init_controller(struct ata_host *host)
1599{
1600 struct ahci_host_priv *hpriv = host->private_data;
1601 struct pci_dev *pdev = to_pci_dev(host->dev);
1602 void __iomem *mmio = host->iomap[AHCI_PCI_BAR];
1603 int i;
1604 void __iomem *port_mmio;
1605 u32 tmp;
1606 int mv;
1607
1608 if (hpriv->flags & AHCI_HFLAG_MV_PATA) {
1609 if (pdev->device == 0x6121)
1610 mv = 2;
1611 else
1612 mv = 4;
1613 port_mmio = __ahci_port_base(host, mv);
1614
1615 writel(0, port_mmio + PORT_IRQ_MASK);
1616
1617
1618 tmp = readl(port_mmio + PORT_IRQ_STAT);
1619 VPRINTK("PORT_IRQ_STAT 0x%x\n", tmp);
1620 if (tmp)
1621 writel(tmp, port_mmio + PORT_IRQ_STAT);
1622 }
1623
1624 for (i = 0; i < host->n_ports; i++) {
1625 struct ata_port *ap = host->ports[i];
1626
1627 port_mmio = ahci_port_base(ap);
1628 if (ata_port_is_dummy(ap))
1629 continue;
1630
1631 ahci_port_init(pdev, ap, i, mmio, port_mmio);
1632 }
1633
1634 tmp = readl(mmio + HOST_CTL);
1635 VPRINTK("HOST_CTL 0x%x\n", tmp);
1636 writel(tmp | HOST_IRQ_EN, mmio + HOST_CTL);
1637 tmp = readl(mmio + HOST_CTL);
1638 VPRINTK("HOST_CTL 0x%x\n", tmp);
1639}
1640
1641static void ahci_dev_config(struct ata_device *dev)
1642{
1643 struct ahci_host_priv *hpriv = dev->link->ap->host->private_data;
1644
1645 if (hpriv->flags & AHCI_HFLAG_SECT255) {
1646 dev->max_sectors = 255;
1647 ata_dev_printk(dev, KERN_INFO,
1648 "SB600 AHCI: limiting to 255 sectors per cmd\n");
1649 }
1650}
1651
1652static unsigned int ahci_dev_classify(struct ata_port *ap)
1653{
1654 void __iomem *port_mmio = ahci_port_base(ap);
1655 struct ata_taskfile tf;
1656 u32 tmp;
1657
1658 tmp = readl(port_mmio + PORT_SIG);
1659 tf.lbah = (tmp >> 24) & 0xff;
1660 tf.lbam = (tmp >> 16) & 0xff;
1661 tf.lbal = (tmp >> 8) & 0xff;
1662 tf.nsect = (tmp) & 0xff;
1663
1664 return ata_dev_classify(&tf);
1665}
1666
1667static void ahci_fill_cmd_slot(struct ahci_port_priv *pp, unsigned int tag,
1668 u32 opts)
1669{
1670 dma_addr_t cmd_tbl_dma;
1671
1672 cmd_tbl_dma = pp->cmd_tbl_dma + tag * AHCI_CMD_TBL_SZ;
1673
1674 pp->cmd_slot[tag].opts = cpu_to_le32(opts);
1675 pp->cmd_slot[tag].status = 0;
1676 pp->cmd_slot[tag].tbl_addr = cpu_to_le32(cmd_tbl_dma & 0xffffffff);
1677 pp->cmd_slot[tag].tbl_addr_hi = cpu_to_le32((cmd_tbl_dma >> 16) >> 16);
1678}
1679
1680static int ahci_kick_engine(struct ata_port *ap)
1681{
1682 void __iomem *port_mmio = ahci_port_base(ap);
1683 struct ahci_host_priv *hpriv = ap->host->private_data;
1684 u8 status = readl(port_mmio + PORT_TFDATA) & 0xFF;
1685 u32 tmp;
1686 int busy, rc;
1687
1688
1689 rc = ahci_stop_engine(ap);
1690 if (rc)
1691 goto out_restart;
1692
1693
1694
1695
1696 busy = status & (ATA_BUSY | ATA_DRQ);
1697 if (!busy && !sata_pmp_attached(ap)) {
1698 rc = 0;
1699 goto out_restart;
1700 }
1701
1702 if (!(hpriv->cap & HOST_CAP_CLO)) {
1703 rc = -EOPNOTSUPP;
1704 goto out_restart;
1705 }
1706
1707
1708 tmp = readl(port_mmio + PORT_CMD);
1709 tmp |= PORT_CMD_CLO;
1710 writel(tmp, port_mmio + PORT_CMD);
1711
1712 rc = 0;
1713 tmp = ata_wait_register(port_mmio + PORT_CMD,
1714 PORT_CMD_CLO, PORT_CMD_CLO, 1, 500);
1715 if (tmp & PORT_CMD_CLO)
1716 rc = -EIO;
1717
1718
1719 out_restart:
1720 ahci_start_engine(ap);
1721 return rc;
1722}
1723
1724static int ahci_exec_polled_cmd(struct ata_port *ap, int pmp,
1725 struct ata_taskfile *tf, int is_cmd, u16 flags,
1726 unsigned long timeout_msec)
1727{
1728 const u32 cmd_fis_len = 5;
1729 struct ahci_port_priv *pp = ap->private_data;
1730 void __iomem *port_mmio = ahci_port_base(ap);
1731 u8 *fis = pp->cmd_tbl;
1732 u32 tmp;
1733
1734
1735 ata_tf_to_fis(tf, pmp, is_cmd, fis);
1736 ahci_fill_cmd_slot(pp, 0, cmd_fis_len | flags | (pmp << 12));
1737
1738
1739 writel(1, port_mmio + PORT_CMD_ISSUE);
1740
1741 if (timeout_msec) {
1742 tmp = ata_wait_register(port_mmio + PORT_CMD_ISSUE, 0x1, 0x1,
1743 1, timeout_msec);
1744 if (tmp & 0x1) {
1745 ahci_kick_engine(ap);
1746 return -EBUSY;
1747 }
1748 } else
1749 readl(port_mmio + PORT_CMD_ISSUE);
1750
1751 return 0;
1752}
1753
1754static int ahci_do_softreset(struct ata_link *link, unsigned int *class,
1755 int pmp, unsigned long deadline,
1756 int (*check_ready)(struct ata_link *link))
1757{
1758 struct ata_port *ap = link->ap;
1759 struct ahci_host_priv *hpriv = ap->host->private_data;
1760 const char *reason = NULL;
1761 unsigned long now, msecs;
1762 struct ata_taskfile tf;
1763 int rc;
1764
1765 DPRINTK("ENTER\n");
1766
1767
1768 rc = ahci_kick_engine(ap);
1769 if (rc && rc != -EOPNOTSUPP)
1770 ata_link_printk(link, KERN_WARNING,
1771 "failed to reset engine (errno=%d)\n", rc);
1772
1773 ata_tf_init(link->device, &tf);
1774
1775
1776 msecs = 0;
1777 now = jiffies;
1778 if (time_after(now, deadline))
1779 msecs = jiffies_to_msecs(deadline - now);
1780
1781 tf.ctl |= ATA_SRST;
1782 if (ahci_exec_polled_cmd(ap, pmp, &tf, 0,
1783 AHCI_CMD_RESET | AHCI_CMD_CLR_BUSY, msecs)) {
1784 rc = -EIO;
1785 reason = "1st FIS failed";
1786 goto fail;
1787 }
1788
1789
1790 msleep(1);
1791
1792
1793 tf.ctl &= ~ATA_SRST;
1794 ahci_exec_polled_cmd(ap, pmp, &tf, 0, 0, 0);
1795
1796
1797 rc = ata_wait_after_reset(link, deadline, check_ready);
1798 if (rc == -EBUSY && hpriv->flags & AHCI_HFLAG_SRST_TOUT_IS_OFFLINE) {
1799
1800
1801
1802
1803
1804 ata_link_printk(link, KERN_INFO,
1805 "device not ready, treating as offline\n");
1806 *class = ATA_DEV_NONE;
1807 } else if (rc) {
1808
1809 reason = "device not ready";
1810 goto fail;
1811 } else
1812 *class = ahci_dev_classify(ap);
1813
1814 DPRINTK("EXIT, class=%u\n", *class);
1815 return 0;
1816
1817 fail:
1818 ata_link_printk(link, KERN_ERR, "softreset failed (%s)\n", reason);
1819 return rc;
1820}
1821
1822static int ahci_check_ready(struct ata_link *link)
1823{
1824 void __iomem *port_mmio = ahci_port_base(link->ap);
1825 u8 status = readl(port_mmio + PORT_TFDATA) & 0xFF;
1826
1827 return ata_check_ready(status);
1828}
1829
1830static int ahci_softreset(struct ata_link *link, unsigned int *class,
1831 unsigned long deadline)
1832{
1833 int pmp = sata_srst_pmp(link);
1834
1835 DPRINTK("ENTER\n");
1836
1837 return ahci_do_softreset(link, class, pmp, deadline, ahci_check_ready);
1838}
1839
1840static int ahci_sb600_check_ready(struct ata_link *link)
1841{
1842 void __iomem *port_mmio = ahci_port_base(link->ap);
1843 u8 status = readl(port_mmio + PORT_TFDATA) & 0xFF;
1844 u32 irq_status = readl(port_mmio + PORT_IRQ_STAT);
1845
1846
1847
1848
1849
1850 if (irq_status & PORT_IRQ_BAD_PMP)
1851 return -EIO;
1852
1853 return ata_check_ready(status);
1854}
1855
1856static int ahci_sb600_softreset(struct ata_link *link, unsigned int *class,
1857 unsigned long deadline)
1858{
1859 struct ata_port *ap = link->ap;
1860 void __iomem *port_mmio = ahci_port_base(ap);
1861 int pmp = sata_srst_pmp(link);
1862 int rc;
1863 u32 irq_sts;
1864
1865 DPRINTK("ENTER\n");
1866
1867 rc = ahci_do_softreset(link, class, pmp, deadline,
1868 ahci_sb600_check_ready);
1869
1870
1871
1872
1873
1874
1875 if (rc == -EIO) {
1876 irq_sts = readl(port_mmio + PORT_IRQ_STAT);
1877 if (irq_sts & PORT_IRQ_BAD_PMP) {
1878 ata_link_printk(link, KERN_WARNING,
1879 "applying SB600 PMP SRST workaround "
1880 "and retrying\n");
1881 rc = ahci_do_softreset(link, class, 0, deadline,
1882 ahci_check_ready);
1883 }
1884 }
1885
1886 return rc;
1887}
1888
1889static int ahci_hardreset(struct ata_link *link, unsigned int *class,
1890 unsigned long deadline)
1891{
1892 const unsigned long *timing = sata_ehc_deb_timing(&link->eh_context);
1893 struct ata_port *ap = link->ap;
1894 struct ahci_port_priv *pp = ap->private_data;
1895 u8 *d2h_fis = pp->rx_fis + RX_FIS_D2H_REG;
1896 struct ata_taskfile tf;
1897 bool online;
1898 int rc;
1899
1900 DPRINTK("ENTER\n");
1901
1902 ahci_stop_engine(ap);
1903
1904
1905 ata_tf_init(link->device, &tf);
1906 tf.command = 0x80;
1907 ata_tf_to_fis(&tf, 0, 0, d2h_fis);
1908
1909 rc = sata_link_hardreset(link, timing, deadline, &online,
1910 ahci_check_ready);
1911
1912 ahci_start_engine(ap);
1913
1914 if (online)
1915 *class = ahci_dev_classify(ap);
1916
1917 DPRINTK("EXIT, rc=%d, class=%u\n", rc, *class);
1918 return rc;
1919}
1920
1921static int ahci_vt8251_hardreset(struct ata_link *link, unsigned int *class,
1922 unsigned long deadline)
1923{
1924 struct ata_port *ap = link->ap;
1925 bool online;
1926 int rc;
1927
1928 DPRINTK("ENTER\n");
1929
1930 ahci_stop_engine(ap);
1931
1932 rc = sata_link_hardreset(link, sata_ehc_deb_timing(&link->eh_context),
1933 deadline, &online, NULL);
1934
1935 ahci_start_engine(ap);
1936
1937 DPRINTK("EXIT, rc=%d, class=%u\n", rc, *class);
1938
1939
1940
1941
1942 return online ? -EAGAIN : rc;
1943}
1944
1945static int ahci_p5wdh_hardreset(struct ata_link *link, unsigned int *class,
1946 unsigned long deadline)
1947{
1948 struct ata_port *ap = link->ap;
1949 struct ahci_port_priv *pp = ap->private_data;
1950 u8 *d2h_fis = pp->rx_fis + RX_FIS_D2H_REG;
1951 struct ata_taskfile tf;
1952 bool online;
1953 int rc;
1954
1955 ahci_stop_engine(ap);
1956
1957
1958 ata_tf_init(link->device, &tf);
1959 tf.command = 0x80;
1960 ata_tf_to_fis(&tf, 0, 0, d2h_fis);
1961
1962 rc = sata_link_hardreset(link, sata_ehc_deb_timing(&link->eh_context),
1963 deadline, &online, NULL);
1964
1965 ahci_start_engine(ap);
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980 if (online) {
1981 rc = ata_wait_after_reset(link, jiffies + 2 * HZ,
1982 ahci_check_ready);
1983 if (rc)
1984 ahci_kick_engine(ap);
1985 }
1986 return rc;
1987}
1988
1989static void ahci_postreset(struct ata_link *link, unsigned int *class)
1990{
1991 struct ata_port *ap = link->ap;
1992 void __iomem *port_mmio = ahci_port_base(ap);
1993 u32 new_tmp, tmp;
1994
1995 ata_std_postreset(link, class);
1996
1997
1998 new_tmp = tmp = readl(port_mmio + PORT_CMD);
1999 if (*class == ATA_DEV_ATAPI)
2000 new_tmp |= PORT_CMD_ATAPI;
2001 else
2002 new_tmp &= ~PORT_CMD_ATAPI;
2003 if (new_tmp != tmp) {
2004 writel(new_tmp, port_mmio + PORT_CMD);
2005 readl(port_mmio + PORT_CMD);
2006 }
2007}
2008
2009static unsigned int ahci_fill_sg(struct ata_queued_cmd *qc, void *cmd_tbl)
2010{
2011 struct scatterlist *sg;
2012 struct ahci_sg *ahci_sg = cmd_tbl + AHCI_CMD_TBL_HDR_SZ;
2013 unsigned int si;
2014
2015 VPRINTK("ENTER\n");
2016
2017
2018
2019
2020 for_each_sg(qc->sg, sg, qc->n_elem, si) {
2021 dma_addr_t addr = sg_dma_address(sg);
2022 u32 sg_len = sg_dma_len(sg);
2023
2024 ahci_sg[si].addr = cpu_to_le32(addr & 0xffffffff);
2025 ahci_sg[si].addr_hi = cpu_to_le32((addr >> 16) >> 16);
2026 ahci_sg[si].flags_size = cpu_to_le32(sg_len - 1);
2027 }
2028
2029 return si;
2030}
2031
2032static void ahci_qc_prep(struct ata_queued_cmd *qc)
2033{
2034 struct ata_port *ap = qc->ap;
2035 struct ahci_port_priv *pp = ap->private_data;
2036 int is_atapi = ata_is_atapi(qc->tf.protocol);
2037 void *cmd_tbl;
2038 u32 opts;
2039 const u32 cmd_fis_len = 5;
2040 unsigned int n_elem;
2041
2042
2043
2044
2045
2046 cmd_tbl = pp->cmd_tbl + qc->tag * AHCI_CMD_TBL_SZ;
2047
2048 ata_tf_to_fis(&qc->tf, qc->dev->link->pmp, 1, cmd_tbl);
2049 if (is_atapi) {
2050 memset(cmd_tbl + AHCI_CMD_TBL_CDB, 0, 32);
2051 memcpy(cmd_tbl + AHCI_CMD_TBL_CDB, qc->cdb, qc->dev->cdb_len);
2052 }
2053
2054 n_elem = 0;
2055 if (qc->flags & ATA_QCFLAG_DMAMAP)
2056 n_elem = ahci_fill_sg(qc, cmd_tbl);
2057
2058
2059
2060
2061 opts = cmd_fis_len | n_elem << 16 | (qc->dev->link->pmp << 12);
2062 if (qc->tf.flags & ATA_TFLAG_WRITE)
2063 opts |= AHCI_CMD_WRITE;
2064 if (is_atapi)
2065 opts |= AHCI_CMD_ATAPI | AHCI_CMD_PREFETCH;
2066
2067 ahci_fill_cmd_slot(pp, qc->tag, opts);
2068}
2069
2070static void ahci_error_intr(struct ata_port *ap, u32 irq_stat)
2071{
2072 struct ahci_host_priv *hpriv = ap->host->private_data;
2073 struct ahci_port_priv *pp = ap->private_data;
2074 struct ata_eh_info *host_ehi = &ap->link.eh_info;
2075 struct ata_link *link = NULL;
2076 struct ata_queued_cmd *active_qc;
2077 struct ata_eh_info *active_ehi;
2078 u32 serror;
2079
2080
2081 ata_for_each_link(link, ap, EDGE)
2082 if (ata_link_active(link))
2083 break;
2084 if (!link)
2085 link = &ap->link;
2086
2087 active_qc = ata_qc_from_tag(ap, link->active_tag);
2088 active_ehi = &link->eh_info;
2089
2090
2091 ata_ehi_clear_desc(host_ehi);
2092 ata_ehi_push_desc(host_ehi, "irq_stat 0x%08x", irq_stat);
2093
2094
2095 ahci_scr_read(&ap->link, SCR_ERROR, &serror);
2096 ahci_scr_write(&ap->link, SCR_ERROR, serror);
2097 host_ehi->serror |= serror;
2098
2099
2100 if (hpriv->flags & AHCI_HFLAG_IGN_IRQ_IF_ERR)
2101 irq_stat &= ~PORT_IRQ_IF_ERR;
2102
2103 if (irq_stat & PORT_IRQ_TF_ERR) {
2104
2105
2106
2107
2108 if (active_qc)
2109 active_qc->err_mask |= AC_ERR_DEV;
2110 else
2111 active_ehi->err_mask |= AC_ERR_DEV;
2112
2113 if (hpriv->flags & AHCI_HFLAG_IGN_SERR_INTERNAL)
2114 host_ehi->serror &= ~SERR_INTERNAL;
2115 }
2116
2117 if (irq_stat & PORT_IRQ_UNK_FIS) {
2118 u32 *unk = (u32 *)(pp->rx_fis + RX_FIS_UNK);
2119
2120 active_ehi->err_mask |= AC_ERR_HSM;
2121 active_ehi->action |= ATA_EH_RESET;
2122 ata_ehi_push_desc(active_ehi,
2123 "unknown FIS %08x %08x %08x %08x" ,
2124 unk[0], unk[1], unk[2], unk[3]);
2125 }
2126
2127 if (sata_pmp_attached(ap) && (irq_stat & PORT_IRQ_BAD_PMP)) {
2128 active_ehi->err_mask |= AC_ERR_HSM;
2129 active_ehi->action |= ATA_EH_RESET;
2130 ata_ehi_push_desc(active_ehi, "incorrect PMP");
2131 }
2132
2133 if (irq_stat & (PORT_IRQ_HBUS_ERR | PORT_IRQ_HBUS_DATA_ERR)) {
2134 host_ehi->err_mask |= AC_ERR_HOST_BUS;
2135 host_ehi->action |= ATA_EH_RESET;
2136 ata_ehi_push_desc(host_ehi, "host bus error");
2137 }
2138
2139 if (irq_stat & PORT_IRQ_IF_ERR) {
2140 host_ehi->err_mask |= AC_ERR_ATA_BUS;
2141 host_ehi->action |= ATA_EH_RESET;
2142 ata_ehi_push_desc(host_ehi, "interface fatal error");
2143 }
2144
2145 if (irq_stat & (PORT_IRQ_CONNECT | PORT_IRQ_PHYRDY)) {
2146 ata_ehi_hotplugged(host_ehi);
2147 ata_ehi_push_desc(host_ehi, "%s",
2148 irq_stat & PORT_IRQ_CONNECT ?
2149 "connection status changed" : "PHY RDY changed");
2150 }
2151
2152
2153
2154 if (irq_stat & PORT_IRQ_FREEZE)
2155 ata_port_freeze(ap);
2156 else
2157 ata_port_abort(ap);
2158}
2159
2160static void ahci_port_intr(struct ata_port *ap)
2161{
2162 void __iomem *port_mmio = ahci_port_base(ap);
2163 struct ata_eh_info *ehi = &ap->link.eh_info;
2164 struct ahci_port_priv *pp = ap->private_data;
2165 struct ahci_host_priv *hpriv = ap->host->private_data;
2166 int resetting = !!(ap->pflags & ATA_PFLAG_RESETTING);
2167 u32 status, qc_active;
2168 int rc;
2169
2170 status = readl(port_mmio + PORT_IRQ_STAT);
2171 writel(status, port_mmio + PORT_IRQ_STAT);
2172
2173
2174 if (unlikely(resetting))
2175 status &= ~PORT_IRQ_BAD_PMP;
2176
2177
2178
2179
2180
2181
2182 if ((hpriv->flags & AHCI_HFLAG_NO_HOTPLUG) &&
2183 (status & PORT_IRQ_PHYRDY)) {
2184 status &= ~PORT_IRQ_PHYRDY;
2185 ahci_scr_write(&ap->link, SCR_ERROR, ((1 << 16) | (1 << 18)));
2186 }
2187
2188 if (unlikely(status & PORT_IRQ_ERROR)) {
2189 ahci_error_intr(ap, status);
2190 return;
2191 }
2192
2193 if (status & PORT_IRQ_SDB_FIS) {
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203 if (hpriv->cap & HOST_CAP_SNTF)
2204 sata_async_notification(ap);
2205 else {
2206
2207
2208
2209
2210 const __le32 *f = pp->rx_fis + RX_FIS_SDB;
2211 u32 f0 = le32_to_cpu(f[0]);
2212
2213 if (f0 & (1 << 15))
2214 sata_async_notification(ap);
2215 }
2216 }
2217
2218
2219 if (ap->qc_active && pp->active_link->sactive)
2220 qc_active = readl(port_mmio + PORT_SCR_ACT);
2221 else
2222 qc_active = readl(port_mmio + PORT_CMD_ISSUE);
2223
2224 rc = ata_qc_complete_multiple(ap, qc_active);
2225
2226
2227 if (unlikely(rc < 0 && !resetting)) {
2228 ehi->err_mask |= AC_ERR_HSM;
2229 ehi->action |= ATA_EH_RESET;
2230 ata_port_freeze(ap);
2231 }
2232}
2233
2234static irqreturn_t ahci_interrupt(int irq, void *dev_instance)
2235{
2236 struct ata_host *host = dev_instance;
2237 struct ahci_host_priv *hpriv;
2238 unsigned int i, handled = 0;
2239 void __iomem *mmio;
2240 u32 irq_stat, irq_masked;
2241
2242 VPRINTK("ENTER\n");
2243
2244 hpriv = host->private_data;
2245 mmio = host->iomap[AHCI_PCI_BAR];
2246
2247
2248 irq_stat = readl(mmio + HOST_IRQ_STAT);
2249 if (!irq_stat)
2250 return IRQ_NONE;
2251
2252 irq_masked = irq_stat & hpriv->port_map;
2253
2254 spin_lock(&host->lock);
2255
2256 for (i = 0; i < host->n_ports; i++) {
2257 struct ata_port *ap;
2258
2259 if (!(irq_masked & (1 << i)))
2260 continue;
2261
2262 ap = host->ports[i];
2263 if (ap) {
2264 ahci_port_intr(ap);
2265 VPRINTK("port %u\n", i);
2266 } else {
2267 VPRINTK("port %u (no irq)\n", i);
2268 if (ata_ratelimit())
2269 dev_printk(KERN_WARNING, host->dev,
2270 "interrupt on disabled port %u\n", i);
2271 }
2272
2273 handled = 1;
2274 }
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285 writel(irq_stat, mmio + HOST_IRQ_STAT);
2286
2287 spin_unlock(&host->lock);
2288
2289 VPRINTK("EXIT\n");
2290
2291 return IRQ_RETVAL(handled);
2292}
2293
2294static unsigned int ahci_qc_issue(struct ata_queued_cmd *qc)
2295{
2296 struct ata_port *ap = qc->ap;
2297 void __iomem *port_mmio = ahci_port_base(ap);
2298 struct ahci_port_priv *pp = ap->private_data;
2299
2300
2301
2302
2303
2304 pp->active_link = qc->dev->link;
2305
2306 if (qc->tf.protocol == ATA_PROT_NCQ)
2307 writel(1 << qc->tag, port_mmio + PORT_SCR_ACT);
2308 writel(1 << qc->tag, port_mmio + PORT_CMD_ISSUE);
2309
2310 ahci_sw_activity(qc->dev->link);
2311
2312 return 0;
2313}
2314
2315static bool ahci_qc_fill_rtf(struct ata_queued_cmd *qc)
2316{
2317 struct ahci_port_priv *pp = qc->ap->private_data;
2318 u8 *d2h_fis = pp->rx_fis + RX_FIS_D2H_REG;
2319
2320 ata_tf_from_fis(d2h_fis, &qc->result_tf);
2321 return true;
2322}
2323
2324static void ahci_freeze(struct ata_port *ap)
2325{
2326 void __iomem *port_mmio = ahci_port_base(ap);
2327
2328
2329 writel(0, port_mmio + PORT_IRQ_MASK);
2330}
2331
2332static void ahci_thaw(struct ata_port *ap)
2333{
2334 void __iomem *mmio = ap->host->iomap[AHCI_PCI_BAR];
2335 void __iomem *port_mmio = ahci_port_base(ap);
2336 u32 tmp;
2337 struct ahci_port_priv *pp = ap->private_data;
2338
2339
2340 tmp = readl(port_mmio + PORT_IRQ_STAT);
2341 writel(tmp, port_mmio + PORT_IRQ_STAT);
2342 writel(1 << ap->port_no, mmio + HOST_IRQ_STAT);
2343
2344
2345 writel(pp->intr_mask, port_mmio + PORT_IRQ_MASK);
2346}
2347
2348static void ahci_error_handler(struct ata_port *ap)
2349{
2350 if (!(ap->pflags & ATA_PFLAG_FROZEN)) {
2351
2352 ahci_stop_engine(ap);
2353 ahci_start_engine(ap);
2354 }
2355
2356 sata_pmp_error_handler(ap);
2357}
2358
2359static void ahci_post_internal_cmd(struct ata_queued_cmd *qc)
2360{
2361 struct ata_port *ap = qc->ap;
2362
2363
2364 if (qc->flags & ATA_QCFLAG_FAILED)
2365 ahci_kick_engine(ap);
2366}
2367
2368static void ahci_pmp_attach(struct ata_port *ap)
2369{
2370 void __iomem *port_mmio = ahci_port_base(ap);
2371 struct ahci_port_priv *pp = ap->private_data;
2372 u32 cmd;
2373
2374 cmd = readl(port_mmio + PORT_CMD);
2375 cmd |= PORT_CMD_PMP;
2376 writel(cmd, port_mmio + PORT_CMD);
2377
2378 pp->intr_mask |= PORT_IRQ_BAD_PMP;
2379 writel(pp->intr_mask, port_mmio + PORT_IRQ_MASK);
2380}
2381
2382static void ahci_pmp_detach(struct ata_port *ap)
2383{
2384 void __iomem *port_mmio = ahci_port_base(ap);
2385 struct ahci_port_priv *pp = ap->private_data;
2386 u32 cmd;
2387
2388 cmd = readl(port_mmio + PORT_CMD);
2389 cmd &= ~PORT_CMD_PMP;
2390 writel(cmd, port_mmio + PORT_CMD);
2391
2392 pp->intr_mask &= ~PORT_IRQ_BAD_PMP;
2393 writel(pp->intr_mask, port_mmio + PORT_IRQ_MASK);
2394}
2395
2396static int ahci_port_resume(struct ata_port *ap)
2397{
2398 ahci_power_up(ap);
2399 ahci_start_port(ap);
2400
2401 if (sata_pmp_attached(ap))
2402 ahci_pmp_attach(ap);
2403 else
2404 ahci_pmp_detach(ap);
2405
2406 return 0;
2407}
2408
2409#ifdef CONFIG_PM
2410static int ahci_port_suspend(struct ata_port *ap, pm_message_t mesg)
2411{
2412 const char *emsg = NULL;
2413 int rc;
2414
2415 rc = ahci_deinit_port(ap, &emsg);
2416 if (rc == 0)
2417 ahci_power_down(ap);
2418 else {
2419 ata_port_printk(ap, KERN_ERR, "%s (%d)\n", emsg, rc);
2420 ahci_start_port(ap);
2421 }
2422
2423 return rc;
2424}
2425
2426static int ahci_pci_device_suspend(struct pci_dev *pdev, pm_message_t mesg)
2427{
2428 struct ata_host *host = dev_get_drvdata(&pdev->dev);
2429 struct ahci_host_priv *hpriv = host->private_data;
2430 void __iomem *mmio = host->iomap[AHCI_PCI_BAR];
2431 u32 ctl;
2432
2433 if (mesg.event & PM_EVENT_SUSPEND &&
2434 hpriv->flags & AHCI_HFLAG_NO_SUSPEND) {
2435 dev_printk(KERN_ERR, &pdev->dev,
2436 "BIOS update required for suspend/resume\n");
2437 return -EIO;
2438 }
2439
2440 if (mesg.event & PM_EVENT_SLEEP) {
2441
2442
2443
2444
2445 ctl = readl(mmio + HOST_CTL);
2446 ctl &= ~HOST_IRQ_EN;
2447 writel(ctl, mmio + HOST_CTL);
2448 readl(mmio + HOST_CTL);
2449 }
2450
2451 return ata_pci_device_suspend(pdev, mesg);
2452}
2453
2454static int ahci_pci_device_resume(struct pci_dev *pdev)
2455{
2456 struct ata_host *host = dev_get_drvdata(&pdev->dev);
2457 int rc;
2458
2459 rc = ata_pci_device_do_resume(pdev);
2460 if (rc)
2461 return rc;
2462
2463 if (pdev->dev.power.power_state.event == PM_EVENT_SUSPEND) {
2464 rc = ahci_reset_controller(host);
2465 if (rc)
2466 return rc;
2467
2468 ahci_init_controller(host);
2469 }
2470
2471 ata_host_resume(host);
2472
2473 return 0;
2474}
2475#endif
2476
2477static int ahci_port_start(struct ata_port *ap)
2478{
2479 struct device *dev = ap->host->dev;
2480 struct ahci_port_priv *pp;
2481 void *mem;
2482 dma_addr_t mem_dma;
2483
2484 pp = devm_kzalloc(dev, sizeof(*pp), GFP_KERNEL);
2485 if (!pp)
2486 return -ENOMEM;
2487
2488 mem = dmam_alloc_coherent(dev, AHCI_PORT_PRIV_DMA_SZ, &mem_dma,
2489 GFP_KERNEL);
2490 if (!mem)
2491 return -ENOMEM;
2492 memset(mem, 0, AHCI_PORT_PRIV_DMA_SZ);
2493
2494
2495
2496
2497
2498 pp->cmd_slot = mem;
2499 pp->cmd_slot_dma = mem_dma;
2500
2501 mem += AHCI_CMD_SLOT_SZ;
2502 mem_dma += AHCI_CMD_SLOT_SZ;
2503
2504
2505
2506
2507 pp->rx_fis = mem;
2508 pp->rx_fis_dma = mem_dma;
2509
2510 mem += AHCI_RX_FIS_SZ;
2511 mem_dma += AHCI_RX_FIS_SZ;
2512
2513
2514
2515
2516
2517 pp->cmd_tbl = mem;
2518 pp->cmd_tbl_dma = mem_dma;
2519
2520
2521
2522
2523
2524 pp->intr_mask = DEF_PORT_IRQ;
2525
2526 ap->private_data = pp;
2527
2528
2529 return ahci_port_resume(ap);
2530}
2531
2532static void ahci_port_stop(struct ata_port *ap)
2533{
2534 const char *emsg = NULL;
2535 int rc;
2536
2537
2538 rc = ahci_deinit_port(ap, &emsg);
2539 if (rc)
2540 ata_port_printk(ap, KERN_WARNING, "%s (%d)\n", emsg, rc);
2541}
2542
2543static int ahci_configure_dma_masks(struct pci_dev *pdev, int using_dac)
2544{
2545 int rc;
2546
2547 if (using_dac &&
2548 !pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) {
2549 rc = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64));
2550 if (rc) {
2551 rc = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
2552 if (rc) {
2553 dev_printk(KERN_ERR, &pdev->dev,
2554 "64-bit DMA enable failed\n");
2555 return rc;
2556 }
2557 }
2558 } else {
2559 rc = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
2560 if (rc) {
2561 dev_printk(KERN_ERR, &pdev->dev,
2562 "32-bit DMA enable failed\n");
2563 return rc;
2564 }
2565 rc = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
2566 if (rc) {
2567 dev_printk(KERN_ERR, &pdev->dev,
2568 "32-bit consistent DMA enable failed\n");
2569 return rc;
2570 }
2571 }
2572 return 0;
2573}
2574
2575static void ahci_print_info(struct ata_host *host)
2576{
2577 struct ahci_host_priv *hpriv = host->private_data;
2578 struct pci_dev *pdev = to_pci_dev(host->dev);
2579 void __iomem *mmio = host->iomap[AHCI_PCI_BAR];
2580 u32 vers, cap, cap2, impl, speed;
2581 const char *speed_s;
2582 u16 cc;
2583 const char *scc_s;
2584
2585 vers = readl(mmio + HOST_VERSION);
2586 cap = hpriv->cap;
2587 cap2 = hpriv->cap2;
2588 impl = hpriv->port_map;
2589
2590 speed = (cap >> 20) & 0xf;
2591 if (speed == 1)
2592 speed_s = "1.5";
2593 else if (speed == 2)
2594 speed_s = "3";
2595 else if (speed == 3)
2596 speed_s = "6";
2597 else
2598 speed_s = "?";
2599
2600 pci_read_config_word(pdev, 0x0a, &cc);
2601 if (cc == PCI_CLASS_STORAGE_IDE)
2602 scc_s = "IDE";
2603 else if (cc == PCI_CLASS_STORAGE_SATA)
2604 scc_s = "SATA";
2605 else if (cc == PCI_CLASS_STORAGE_RAID)
2606 scc_s = "RAID";
2607 else
2608 scc_s = "unknown";
2609
2610 dev_printk(KERN_INFO, &pdev->dev,
2611 "AHCI %02x%02x.%02x%02x "
2612 "%u slots %u ports %s Gbps 0x%x impl %s mode\n"
2613 ,
2614
2615 (vers >> 24) & 0xff,
2616 (vers >> 16) & 0xff,
2617 (vers >> 8) & 0xff,
2618 vers & 0xff,
2619
2620 ((cap >> 8) & 0x1f) + 1,
2621 (cap & 0x1f) + 1,
2622 speed_s,
2623 impl,
2624 scc_s);
2625
2626 dev_printk(KERN_INFO, &pdev->dev,
2627 "flags: "
2628 "%s%s%s%s%s%s%s"
2629 "%s%s%s%s%s%s%s"
2630 "%s%s%s%s%s%s\n"
2631 ,
2632
2633 cap & HOST_CAP_64 ? "64bit " : "",
2634 cap & HOST_CAP_NCQ ? "ncq " : "",
2635 cap & HOST_CAP_SNTF ? "sntf " : "",
2636 cap & HOST_CAP_MPS ? "ilck " : "",
2637 cap & HOST_CAP_SSS ? "stag " : "",
2638 cap & HOST_CAP_ALPM ? "pm " : "",
2639 cap & HOST_CAP_LED ? "led " : "",
2640 cap & HOST_CAP_CLO ? "clo " : "",
2641 cap & HOST_CAP_ONLY ? "only " : "",
2642 cap & HOST_CAP_PMP ? "pmp " : "",
2643 cap & HOST_CAP_FBS ? "fbs " : "",
2644 cap & HOST_CAP_PIO_MULTI ? "pio " : "",
2645 cap & HOST_CAP_SSC ? "slum " : "",
2646 cap & HOST_CAP_PART ? "part " : "",
2647 cap & HOST_CAP_CCC ? "ccc " : "",
2648 cap & HOST_CAP_EMS ? "ems " : "",
2649 cap & HOST_CAP_SXS ? "sxs " : "",
2650 cap2 & HOST_CAP2_APST ? "apst " : "",
2651 cap2 & HOST_CAP2_NVMHCI ? "nvmp " : "",
2652 cap2 & HOST_CAP2_BOH ? "boh " : ""
2653 );
2654}
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674static void ahci_p5wdh_workaround(struct ata_host *host)
2675{
2676 static struct dmi_system_id sysids[] = {
2677 {
2678 .ident = "P5W DH Deluxe",
2679 .matches = {
2680 DMI_MATCH(DMI_SYS_VENDOR,
2681 "ASUSTEK COMPUTER INC"),
2682 DMI_MATCH(DMI_PRODUCT_NAME, "P5W DH Deluxe"),
2683 },
2684 },
2685 { }
2686 };
2687 struct pci_dev *pdev = to_pci_dev(host->dev);
2688
2689 if (pdev->bus->number == 0 && pdev->devfn == PCI_DEVFN(0x1f, 2) &&
2690 dmi_check_system(sysids)) {
2691 struct ata_port *ap = host->ports[1];
2692
2693 dev_printk(KERN_INFO, &pdev->dev, "enabling ASUS P5W DH "
2694 "Deluxe on-board SIMG4726 workaround\n");
2695
2696 ap->ops = &ahci_p5wdh_ops;
2697 ap->link.flags |= ATA_LFLAG_NO_SRST | ATA_LFLAG_ASSUME_ATA;
2698 }
2699}
2700
2701
2702static bool ahci_sb600_enable_64bit(struct pci_dev *pdev)
2703{
2704 static const struct dmi_system_id sysids[] = {
2705
2706
2707
2708
2709
2710
2711
2712 {
2713 .ident = "ASUS M2A-VM",
2714 .matches = {
2715 DMI_MATCH(DMI_BOARD_VENDOR,
2716 "ASUSTeK Computer INC."),
2717 DMI_MATCH(DMI_BOARD_NAME, "M2A-VM"),
2718 },
2719 .driver_data = "20071026",
2720 },
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737 {
2738 .ident = "MSI K9A2 Platinum",
2739 .matches = {
2740 DMI_MATCH(DMI_BOARD_VENDOR,
2741 "MICRO-STAR INTER"),
2742 DMI_MATCH(DMI_BOARD_NAME, "MS-7376"),
2743 },
2744 },
2745 { }
2746 };
2747 const struct dmi_system_id *match;
2748 int year, month, date;
2749 char buf[9];
2750
2751 match = dmi_first_match(sysids);
2752 if (pdev->bus->number != 0 || pdev->devfn != PCI_DEVFN(0x12, 0) ||
2753 !match)
2754 return false;
2755
2756 if (!match->driver_data)
2757 goto enable_64bit;
2758
2759 dmi_get_date(DMI_BIOS_DATE, &year, &month, &date);
2760 snprintf(buf, sizeof(buf), "%04d%02d%02d", year, month, date);
2761
2762 if (strcmp(buf, match->driver_data) >= 0)
2763 goto enable_64bit;
2764 else {
2765 dev_printk(KERN_WARNING, &pdev->dev, "%s: BIOS too old, "
2766 "forcing 32bit DMA, update BIOS\n", match->ident);
2767 return false;
2768 }
2769
2770enable_64bit:
2771 dev_printk(KERN_WARNING, &pdev->dev, "%s: enabling 64bit DMA\n",
2772 match->ident);
2773 return true;
2774}
2775
2776static bool ahci_broken_system_poweroff(struct pci_dev *pdev)
2777{
2778 static const struct dmi_system_id broken_systems[] = {
2779 {
2780 .ident = "HP Compaq nx6310",
2781 .matches = {
2782 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
2783 DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq nx6310"),
2784 },
2785
2786 .driver_data = (void *)0x1FUL,
2787 },
2788 {
2789 .ident = "HP Compaq 6720s",
2790 .matches = {
2791 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
2792 DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq 6720s"),
2793 },
2794
2795 .driver_data = (void *)0x1FUL,
2796 },
2797
2798 { }
2799 };
2800 const struct dmi_system_id *dmi = dmi_first_match(broken_systems);
2801
2802 if (dmi) {
2803 unsigned long slot = (unsigned long)dmi->driver_data;
2804
2805 return slot == PCI_SLOT(pdev->devfn);
2806 }
2807
2808 return false;
2809}
2810
2811static bool ahci_broken_suspend(struct pci_dev *pdev)
2812{
2813 static const struct dmi_system_id sysids[] = {
2814
2815
2816
2817
2818
2819 {
2820 .ident = "dv4",
2821 .matches = {
2822 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
2823 DMI_MATCH(DMI_PRODUCT_NAME,
2824 "HP Pavilion dv4 Notebook PC"),
2825 },
2826 .driver_data = "F.30",
2827 },
2828 {
2829 .ident = "dv5",
2830 .matches = {
2831 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
2832 DMI_MATCH(DMI_PRODUCT_NAME,
2833 "HP Pavilion dv5 Notebook PC"),
2834 },
2835 .driver_data = "F.16",
2836 },
2837 {
2838 .ident = "dv6",
2839 .matches = {
2840 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
2841 DMI_MATCH(DMI_PRODUCT_NAME,
2842 "HP Pavilion dv6 Notebook PC"),
2843 },
2844 .driver_data = "F.21",
2845 },
2846 {
2847 .ident = "HDX18",
2848 .matches = {
2849 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
2850 DMI_MATCH(DMI_PRODUCT_NAME,
2851 "HP HDX18 Notebook PC"),
2852 },
2853 .driver_data = "F.23",
2854 },
2855 { }
2856 };
2857 const struct dmi_system_id *dmi = dmi_first_match(sysids);
2858 const char *ver;
2859
2860 if (!dmi || pdev->bus->number || pdev->devfn != PCI_DEVFN(0x1f, 2))
2861 return false;
2862
2863 ver = dmi_get_system_info(DMI_BIOS_VERSION);
2864
2865 return !ver || strcmp(ver, dmi->driver_data) < 0;
2866}
2867
2868static bool ahci_broken_online(struct pci_dev *pdev)
2869{
2870#define ENCODE_BUSDEVFN(bus, slot, func) \
2871 (void *)(unsigned long)(((bus) << 8) | PCI_DEVFN((slot), (func)))
2872 static const struct dmi_system_id sysids[] = {
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886 {
2887 .ident = "EP45-DQ6",
2888 .matches = {
2889 DMI_MATCH(DMI_BOARD_VENDOR,
2890 "Gigabyte Technology Co., Ltd."),
2891 DMI_MATCH(DMI_BOARD_NAME, "EP45-DQ6"),
2892 },
2893 .driver_data = ENCODE_BUSDEVFN(0x0a, 0x00, 0),
2894 },
2895 {
2896 .ident = "EP45-DS5",
2897 .matches = {
2898 DMI_MATCH(DMI_BOARD_VENDOR,
2899 "Gigabyte Technology Co., Ltd."),
2900 DMI_MATCH(DMI_BOARD_NAME, "EP45-DS5"),
2901 },
2902 .driver_data = ENCODE_BUSDEVFN(0x03, 0x00, 0),
2903 },
2904 { }
2905 };
2906#undef ENCODE_BUSDEVFN
2907 const struct dmi_system_id *dmi = dmi_first_match(sysids);
2908 unsigned int val;
2909
2910 if (!dmi)
2911 return false;
2912
2913 val = (unsigned long)dmi->driver_data;
2914
2915 return pdev->bus->number == (val >> 8) && pdev->devfn == (val & 0xff);
2916}
2917
2918#ifdef CONFIG_ATA_ACPI
2919static void ahci_gtf_filter_workaround(struct ata_host *host)
2920{
2921 static const struct dmi_system_id sysids[] = {
2922
2923
2924
2925
2926
2927
2928
2929
2930 {
2931 .ident = "Aspire 3810T",
2932 .matches = {
2933 DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
2934 DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 3810T"),
2935 },
2936 .driver_data = (void *)ATA_ACPI_FILTER_FPDMA_OFFSET,
2937 },
2938 { }
2939 };
2940 const struct dmi_system_id *dmi = dmi_first_match(sysids);
2941 unsigned int filter;
2942 int i;
2943
2944 if (!dmi)
2945 return;
2946
2947 filter = (unsigned long)dmi->driver_data;
2948 dev_printk(KERN_INFO, host->dev,
2949 "applying extra ACPI _GTF filter 0x%x for %s\n",
2950 filter, dmi->ident);
2951
2952 for (i = 0; i < host->n_ports; i++) {
2953 struct ata_port *ap = host->ports[i];
2954 struct ata_link *link;
2955 struct ata_device *dev;
2956
2957 ata_for_each_link(link, ap, EDGE)
2958 ata_for_each_dev(dev, link, ALL)
2959 dev->gtf_filter |= filter;
2960 }
2961}
2962#else
2963static inline void ahci_gtf_filter_workaround(struct ata_host *host)
2964{}
2965#endif
2966
2967static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
2968{
2969 static int printed_version;
2970 unsigned int board_id = ent->driver_data;
2971 struct ata_port_info pi = ahci_port_info[board_id];
2972 const struct ata_port_info *ppi[] = { &pi, NULL };
2973 struct device *dev = &pdev->dev;
2974 struct ahci_host_priv *hpriv;
2975 struct ata_host *host;
2976 int n_ports, i, rc;
2977
2978 VPRINTK("ENTER\n");
2979
2980 WARN_ON(ATA_MAX_QUEUE > AHCI_MAX_CMDS);
2981
2982 if (!printed_version++)
2983 dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n");
2984
2985
2986
2987
2988 if (pdev->vendor == PCI_VENDOR_ID_MARVELL && !marvell_enable)
2989 return -ENODEV;
2990
2991
2992 rc = pcim_enable_device(pdev);
2993 if (rc)
2994 return rc;
2995
2996
2997
2998
2999 rc = pcim_iomap_regions_request_all(pdev, 1 << AHCI_PCI_BAR, DRV_NAME);
3000 if (rc == -EBUSY)
3001 pcim_pin_device(pdev);
3002 if (rc)
3003 return rc;
3004
3005 if (pdev->vendor == PCI_VENDOR_ID_INTEL &&
3006 (pdev->device == 0x2652 || pdev->device == 0x2653)) {
3007 u8 map;
3008
3009
3010
3011
3012
3013 pci_read_config_byte(pdev, ICH_MAP, &map);
3014 if (map & 0x3) {
3015 dev_printk(KERN_INFO, &pdev->dev, "controller is in "
3016 "combined mode, can't enable AHCI mode\n");
3017 return -ENODEV;
3018 }
3019 }
3020
3021 hpriv = devm_kzalloc(dev, sizeof(*hpriv), GFP_KERNEL);
3022 if (!hpriv)
3023 return -ENOMEM;
3024 hpriv->flags |= (unsigned long)pi.private_data;
3025
3026
3027 if (board_id == board_ahci_mcp65 &&
3028 (pdev->revision == 0xa1 || pdev->revision == 0xa2))
3029 hpriv->flags |= AHCI_HFLAG_NO_MSI;
3030
3031
3032 if (board_id == board_ahci_sb700 && pdev->revision >= 0x40)
3033 hpriv->flags &= ~AHCI_HFLAG_IGN_SERR_INTERNAL;
3034
3035
3036 if (ahci_sb600_enable_64bit(pdev))
3037 hpriv->flags &= ~AHCI_HFLAG_32BIT_ONLY;
3038
3039 if ((hpriv->flags & AHCI_HFLAG_NO_MSI) || pci_enable_msi(pdev))
3040 pci_intx(pdev, 1);
3041
3042
3043 ahci_save_initial_config(pdev, hpriv);
3044
3045
3046 if (hpriv->cap & HOST_CAP_NCQ)
3047 pi.flags |= ATA_FLAG_NCQ | ATA_FLAG_FPDMA_AA;
3048
3049 if (hpriv->cap & HOST_CAP_PMP)
3050 pi.flags |= ATA_FLAG_PMP;
3051
3052 if (ahci_em_messages && (hpriv->cap & HOST_CAP_EMS)) {
3053 u8 messages;
3054 void __iomem *mmio = pcim_iomap_table(pdev)[AHCI_PCI_BAR];
3055 u32 em_loc = readl(mmio + HOST_EM_LOC);
3056 u32 em_ctl = readl(mmio + HOST_EM_CTL);
3057
3058 messages = (em_ctl & EM_CTRL_MSG_TYPE) >> 16;
3059
3060
3061 if ((messages & 0x01) && (ahci_em_messages == 1)) {
3062
3063 hpriv->em_loc = ((em_loc >> 16) * 4);
3064 pi.flags |= ATA_FLAG_EM;
3065 if (!(em_ctl & EM_CTL_ALHD))
3066 pi.flags |= ATA_FLAG_SW_ACTIVITY;
3067 }
3068 }
3069
3070 if (ahci_broken_system_poweroff(pdev)) {
3071 pi.flags |= ATA_FLAG_NO_POWEROFF_SPINDOWN;
3072 dev_info(&pdev->dev,
3073 "quirky BIOS, skipping spindown on poweroff\n");
3074 }
3075
3076 if (ahci_broken_suspend(pdev)) {
3077 hpriv->flags |= AHCI_HFLAG_NO_SUSPEND;
3078 dev_printk(KERN_WARNING, &pdev->dev,
3079 "BIOS update required for suspend/resume\n");
3080 }
3081
3082 if (ahci_broken_online(pdev)) {
3083 hpriv->flags |= AHCI_HFLAG_SRST_TOUT_IS_OFFLINE;
3084 dev_info(&pdev->dev,
3085 "online status unreliable, applying workaround\n");
3086 }
3087
3088
3089
3090
3091
3092
3093 n_ports = max(ahci_nr_ports(hpriv->cap), fls(hpriv->port_map));
3094
3095 host = ata_host_alloc_pinfo(&pdev->dev, ppi, n_ports);
3096 if (!host)
3097 return -ENOMEM;
3098 host->iomap = pcim_iomap_table(pdev);
3099 host->private_data = hpriv;
3100
3101 if (!(hpriv->cap & HOST_CAP_SSS) || ahci_ignore_sss)
3102 host->flags |= ATA_HOST_PARALLEL_SCAN;
3103 else
3104 printk(KERN_INFO "ahci: SSS flag set, parallel bus scan disabled\n");
3105
3106 if (pi.flags & ATA_FLAG_EM)
3107 ahci_reset_em(host);
3108
3109 for (i = 0; i < host->n_ports; i++) {
3110 struct ata_port *ap = host->ports[i];
3111
3112 ata_port_pbar_desc(ap, AHCI_PCI_BAR, -1, "abar");
3113 ata_port_pbar_desc(ap, AHCI_PCI_BAR,
3114 0x100 + ap->port_no * 0x80, "port");
3115
3116
3117 ap->pm_policy = NOT_AVAILABLE;
3118
3119
3120 if (ap->flags & ATA_FLAG_EM)
3121 ap->em_message_type = ahci_em_messages;
3122
3123
3124
3125 if (!(hpriv->port_map & (1 << i)))
3126 ap->ops = &ata_dummy_port_ops;
3127 }
3128
3129
3130 ahci_p5wdh_workaround(host);
3131
3132
3133 ahci_gtf_filter_workaround(host);
3134
3135
3136 rc = ahci_configure_dma_masks(pdev, hpriv->cap & HOST_CAP_64);
3137 if (rc)
3138 return rc;
3139
3140 rc = ahci_reset_controller(host);
3141 if (rc)
3142 return rc;
3143
3144 ahci_init_controller(host);
3145 ahci_print_info(host);
3146
3147 pci_set_master(pdev);
3148 return ata_host_activate(host, pdev->irq, ahci_interrupt, IRQF_SHARED,
3149 &ahci_sht);
3150}
3151
3152static int __init ahci_init(void)
3153{
3154 return pci_register_driver(&ahci_pci_driver);
3155}
3156
3157static void __exit ahci_exit(void)
3158{
3159 pci_unregister_driver(&ahci_pci_driver);
3160}
3161
3162
3163MODULE_AUTHOR("Jeff Garzik");
3164MODULE_DESCRIPTION("AHCI SATA low-level driver");
3165MODULE_LICENSE("GPL");
3166MODULE_DEVICE_TABLE(pci, ahci_pci_tbl);
3167MODULE_VERSION(DRV_VERSION);
3168
3169module_init(ahci_init);
3170module_exit(ahci_exit);
3171