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