ahci: implement AHCI_HFLAG_NO_PMP
[linux-2.6] / drivers / ata / ahci.c
1 /*
2  *  ahci.c - AHCI SATA support
3  *
4  *  Maintained by:  Jeff Garzik <jgarzik@pobox.com>
5  *                  Please ALWAYS copy linux-ide@vger.kernel.org
6  *                  on emails.
7  *
8  *  Copyright 2004-2005 Red Hat, Inc.
9  *
10  *
11  *  This program is free software; you can redistribute it and/or modify
12  *  it under the terms of the GNU General Public License as published by
13  *  the Free Software Foundation; either version 2, or (at your option)
14  *  any later version.
15  *
16  *  This program is distributed in the hope that it will be useful,
17  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
18  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19  *  GNU General Public License for more details.
20  *
21  *  You should have received a copy of the GNU General Public License
22  *  along with this program; see the file COPYING.  If not, write to
23  *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
24  *
25  *
26  * libata documentation is available via 'make {ps|pdf}docs',
27  * as Documentation/DocBook/libata.*
28  *
29  * AHCI hardware documentation:
30  * http://www.intel.com/technology/serialata/pdf/rev1_0.pdf
31  * http://www.intel.com/technology/serialata/pdf/rev1_1.pdf
32  *
33  */
34
35 #include <linux/kernel.h>
36 #include <linux/module.h>
37 #include <linux/pci.h>
38 #include <linux/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 <scsi/scsi_host.h>
45 #include <scsi/scsi_cmnd.h>
46 #include <linux/libata.h>
47
48 #define DRV_NAME        "ahci"
49 #define DRV_VERSION     "3.0"
50
51
52 enum {
53         AHCI_PCI_BAR            = 5,
54         AHCI_MAX_PORTS          = 32,
55         AHCI_MAX_SG             = 168, /* hardware max is 64K */
56         AHCI_DMA_BOUNDARY       = 0xffffffff,
57         AHCI_USE_CLUSTERING     = 1,
58         AHCI_MAX_CMDS           = 32,
59         AHCI_CMD_SZ             = 32,
60         AHCI_CMD_SLOT_SZ        = AHCI_MAX_CMDS * AHCI_CMD_SZ,
61         AHCI_RX_FIS_SZ          = 256,
62         AHCI_CMD_TBL_CDB        = 0x40,
63         AHCI_CMD_TBL_HDR_SZ     = 0x80,
64         AHCI_CMD_TBL_SZ         = AHCI_CMD_TBL_HDR_SZ + (AHCI_MAX_SG * 16),
65         AHCI_CMD_TBL_AR_SZ      = AHCI_CMD_TBL_SZ * AHCI_MAX_CMDS,
66         AHCI_PORT_PRIV_DMA_SZ   = AHCI_CMD_SLOT_SZ + AHCI_CMD_TBL_AR_SZ +
67                                   AHCI_RX_FIS_SZ,
68         AHCI_IRQ_ON_SG          = (1 << 31),
69         AHCI_CMD_ATAPI          = (1 << 5),
70         AHCI_CMD_WRITE          = (1 << 6),
71         AHCI_CMD_PREFETCH       = (1 << 7),
72         AHCI_CMD_RESET          = (1 << 8),
73         AHCI_CMD_CLR_BUSY       = (1 << 10),
74
75         RX_FIS_D2H_REG          = 0x40, /* offset of D2H Register FIS data */
76         RX_FIS_SDB              = 0x58, /* offset of SDB FIS data */
77         RX_FIS_UNK              = 0x60, /* offset of Unknown FIS data */
78
79         board_ahci              = 0,
80         board_ahci_vt8251       = 1,
81         board_ahci_ign_iferr    = 2,
82         board_ahci_sb600        = 3,
83         board_ahci_mv           = 4,
84
85         /* global controller registers */
86         HOST_CAP                = 0x00, /* host capabilities */
87         HOST_CTL                = 0x04, /* global host control */
88         HOST_IRQ_STAT           = 0x08, /* interrupt status */
89         HOST_PORTS_IMPL         = 0x0c, /* bitmap of implemented ports */
90         HOST_VERSION            = 0x10, /* AHCI spec. version compliancy */
91
92         /* HOST_CTL bits */
93         HOST_RESET              = (1 << 0),  /* reset controller; self-clear */
94         HOST_IRQ_EN             = (1 << 1),  /* global IRQ enable */
95         HOST_AHCI_EN            = (1 << 31), /* AHCI enabled */
96
97         /* HOST_CAP bits */
98         HOST_CAP_SSC            = (1 << 14), /* Slumber capable */
99         HOST_CAP_PMP            = (1 << 17), /* Port Multiplier support */
100         HOST_CAP_CLO            = (1 << 24), /* Command List Override support */
101         HOST_CAP_SSS            = (1 << 27), /* Staggered Spin-up */
102         HOST_CAP_SNTF           = (1 << 29), /* SNotification register */
103         HOST_CAP_NCQ            = (1 << 30), /* Native Command Queueing */
104         HOST_CAP_64             = (1 << 31), /* PCI DAC (64-bit DMA) support */
105
106         /* registers for each SATA port */
107         PORT_LST_ADDR           = 0x00, /* command list DMA addr */
108         PORT_LST_ADDR_HI        = 0x04, /* command list DMA addr hi */
109         PORT_FIS_ADDR           = 0x08, /* FIS rx buf addr */
110         PORT_FIS_ADDR_HI        = 0x0c, /* FIS rx buf addr hi */
111         PORT_IRQ_STAT           = 0x10, /* interrupt status */
112         PORT_IRQ_MASK           = 0x14, /* interrupt enable/disable mask */
113         PORT_CMD                = 0x18, /* port command */
114         PORT_TFDATA             = 0x20, /* taskfile data */
115         PORT_SIG                = 0x24, /* device TF signature */
116         PORT_CMD_ISSUE          = 0x38, /* command issue */
117         PORT_SCR_STAT           = 0x28, /* SATA phy register: SStatus */
118         PORT_SCR_CTL            = 0x2c, /* SATA phy register: SControl */
119         PORT_SCR_ERR            = 0x30, /* SATA phy register: SError */
120         PORT_SCR_ACT            = 0x34, /* SATA phy register: SActive */
121         PORT_SCR_NTF            = 0x3c, /* SATA phy register: SNotification */
122
123         /* PORT_IRQ_{STAT,MASK} bits */
124         PORT_IRQ_COLD_PRES      = (1 << 31), /* cold presence detect */
125         PORT_IRQ_TF_ERR         = (1 << 30), /* task file error */
126         PORT_IRQ_HBUS_ERR       = (1 << 29), /* host bus fatal error */
127         PORT_IRQ_HBUS_DATA_ERR  = (1 << 28), /* host bus data error */
128         PORT_IRQ_IF_ERR         = (1 << 27), /* interface fatal error */
129         PORT_IRQ_IF_NONFATAL    = (1 << 26), /* interface non-fatal error */
130         PORT_IRQ_OVERFLOW       = (1 << 24), /* xfer exhausted available S/G */
131         PORT_IRQ_BAD_PMP        = (1 << 23), /* incorrect port multiplier */
132
133         PORT_IRQ_PHYRDY         = (1 << 22), /* PhyRdy changed */
134         PORT_IRQ_DEV_ILCK       = (1 << 7), /* device interlock */
135         PORT_IRQ_CONNECT        = (1 << 6), /* port connect change status */
136         PORT_IRQ_SG_DONE        = (1 << 5), /* descriptor processed */
137         PORT_IRQ_UNK_FIS        = (1 << 4), /* unknown FIS rx'd */
138         PORT_IRQ_SDB_FIS        = (1 << 3), /* Set Device Bits FIS rx'd */
139         PORT_IRQ_DMAS_FIS       = (1 << 2), /* DMA Setup FIS rx'd */
140         PORT_IRQ_PIOS_FIS       = (1 << 1), /* PIO Setup FIS rx'd */
141         PORT_IRQ_D2H_REG_FIS    = (1 << 0), /* D2H Register FIS rx'd */
142
143         PORT_IRQ_FREEZE         = PORT_IRQ_HBUS_ERR |
144                                   PORT_IRQ_IF_ERR |
145                                   PORT_IRQ_CONNECT |
146                                   PORT_IRQ_PHYRDY |
147                                   PORT_IRQ_UNK_FIS |
148                                   PORT_IRQ_BAD_PMP,
149         PORT_IRQ_ERROR          = PORT_IRQ_FREEZE |
150                                   PORT_IRQ_TF_ERR |
151                                   PORT_IRQ_HBUS_DATA_ERR,
152         DEF_PORT_IRQ            = PORT_IRQ_ERROR | PORT_IRQ_SG_DONE |
153                                   PORT_IRQ_SDB_FIS | PORT_IRQ_DMAS_FIS |
154                                   PORT_IRQ_PIOS_FIS | PORT_IRQ_D2H_REG_FIS,
155
156         /* PORT_CMD bits */
157         PORT_CMD_ATAPI          = (1 << 24), /* Device is ATAPI */
158         PORT_CMD_PMP            = (1 << 17), /* PMP attached */
159         PORT_CMD_LIST_ON        = (1 << 15), /* cmd list DMA engine running */
160         PORT_CMD_FIS_ON         = (1 << 14), /* FIS DMA engine running */
161         PORT_CMD_FIS_RX         = (1 << 4), /* Enable FIS receive DMA engine */
162         PORT_CMD_CLO            = (1 << 3), /* Command list override */
163         PORT_CMD_POWER_ON       = (1 << 2), /* Power up device */
164         PORT_CMD_SPIN_UP        = (1 << 1), /* Spin up device */
165         PORT_CMD_START          = (1 << 0), /* Enable port DMA engine */
166
167         PORT_CMD_ICC_MASK       = (0xf << 28), /* i/f ICC state mask */
168         PORT_CMD_ICC_ACTIVE     = (0x1 << 28), /* Put i/f in active state */
169         PORT_CMD_ICC_PARTIAL    = (0x2 << 28), /* Put i/f in partial state */
170         PORT_CMD_ICC_SLUMBER    = (0x6 << 28), /* Put i/f in slumber state */
171
172         /* hpriv->flags bits */
173         AHCI_HFLAG_NO_NCQ               = (1 << 0),
174         AHCI_HFLAG_IGN_IRQ_IF_ERR       = (1 << 1), /* ignore IRQ_IF_ERR */
175         AHCI_HFLAG_IGN_SERR_INTERNAL    = (1 << 2), /* ignore SERR_INTERNAL */
176         AHCI_HFLAG_32BIT_ONLY           = (1 << 3), /* force 32bit */
177         AHCI_HFLAG_MV_PATA              = (1 << 4), /* PATA port */
178         AHCI_HFLAG_NO_MSI               = (1 << 5), /* no PCI MSI */
179         AHCI_HFLAG_NO_PMP               = (1 << 6), /* no PMP */
180
181         /* ap->flags bits */
182         AHCI_FLAG_NO_HOTPLUG            = (1 << 24), /* ignore PxSERR.DIAG.N */
183
184         AHCI_FLAG_COMMON                = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
185                                           ATA_FLAG_MMIO | ATA_FLAG_PIO_DMA |
186                                           ATA_FLAG_ACPI_SATA | ATA_FLAG_AN,
187         AHCI_LFLAG_COMMON               = ATA_LFLAG_SKIP_D2H_BSY,
188 };
189
190 struct ahci_cmd_hdr {
191         u32                     opts;
192         u32                     status;
193         u32                     tbl_addr;
194         u32                     tbl_addr_hi;
195         u32                     reserved[4];
196 };
197
198 struct ahci_sg {
199         u32                     addr;
200         u32                     addr_hi;
201         u32                     reserved;
202         u32                     flags_size;
203 };
204
205 struct ahci_host_priv {
206         unsigned int            flags;          /* AHCI_HFLAG_* */
207         u32                     cap;            /* cap to use */
208         u32                     port_map;       /* port map to use */
209         u32                     saved_cap;      /* saved initial cap */
210         u32                     saved_port_map; /* saved initial port_map */
211 };
212
213 struct ahci_port_priv {
214         struct ata_link         *active_link;
215         struct ahci_cmd_hdr     *cmd_slot;
216         dma_addr_t              cmd_slot_dma;
217         void                    *cmd_tbl;
218         dma_addr_t              cmd_tbl_dma;
219         void                    *rx_fis;
220         dma_addr_t              rx_fis_dma;
221         /* for NCQ spurious interrupt analysis */
222         unsigned int            ncq_saw_d2h:1;
223         unsigned int            ncq_saw_dmas:1;
224         unsigned int            ncq_saw_sdb:1;
225         u32                     intr_mask;      /* interrupts to enable */
226 };
227
228 static int ahci_scr_read(struct ata_port *ap, unsigned int sc_reg, u32 *val);
229 static int ahci_scr_write(struct ata_port *ap, unsigned int sc_reg, u32 val);
230 static int ahci_init_one (struct pci_dev *pdev, const struct pci_device_id *ent);
231 static unsigned int ahci_qc_issue(struct ata_queued_cmd *qc);
232 static void ahci_irq_clear(struct ata_port *ap);
233 static int ahci_port_start(struct ata_port *ap);
234 static void ahci_port_stop(struct ata_port *ap);
235 static void ahci_tf_read(struct ata_port *ap, struct ata_taskfile *tf);
236 static void ahci_qc_prep(struct ata_queued_cmd *qc);
237 static u8 ahci_check_status(struct ata_port *ap);
238 static void ahci_freeze(struct ata_port *ap);
239 static void ahci_thaw(struct ata_port *ap);
240 static void ahci_pmp_attach(struct ata_port *ap);
241 static void ahci_pmp_detach(struct ata_port *ap);
242 static int ahci_pmp_read(struct ata_device *dev, int pmp, int reg, u32 *r_val);
243 static int ahci_pmp_write(struct ata_device *dev, int pmp, int reg, u32 val);
244 static void ahci_error_handler(struct ata_port *ap);
245 static void ahci_vt8251_error_handler(struct ata_port *ap);
246 static void ahci_post_internal_cmd(struct ata_queued_cmd *qc);
247 static int ahci_port_resume(struct ata_port *ap);
248 static unsigned int ahci_fill_sg(struct ata_queued_cmd *qc, void *cmd_tbl);
249 static void ahci_fill_cmd_slot(struct ahci_port_priv *pp, unsigned int tag,
250                                u32 opts);
251 #ifdef CONFIG_PM
252 static int ahci_port_suspend(struct ata_port *ap, pm_message_t mesg);
253 static int ahci_pci_device_suspend(struct pci_dev *pdev, pm_message_t mesg);
254 static int ahci_pci_device_resume(struct pci_dev *pdev);
255 #endif
256
257 static struct scsi_host_template ahci_sht = {
258         .module                 = THIS_MODULE,
259         .name                   = DRV_NAME,
260         .ioctl                  = ata_scsi_ioctl,
261         .queuecommand           = ata_scsi_queuecmd,
262         .change_queue_depth     = ata_scsi_change_queue_depth,
263         .can_queue              = AHCI_MAX_CMDS - 1,
264         .this_id                = ATA_SHT_THIS_ID,
265         .sg_tablesize           = AHCI_MAX_SG,
266         .cmd_per_lun            = ATA_SHT_CMD_PER_LUN,
267         .emulated               = ATA_SHT_EMULATED,
268         .use_clustering         = AHCI_USE_CLUSTERING,
269         .proc_name              = DRV_NAME,
270         .dma_boundary           = AHCI_DMA_BOUNDARY,
271         .slave_configure        = ata_scsi_slave_config,
272         .slave_destroy          = ata_scsi_slave_destroy,
273         .bios_param             = ata_std_bios_param,
274 };
275
276 static const struct ata_port_operations ahci_ops = {
277         .check_status           = ahci_check_status,
278         .check_altstatus        = ahci_check_status,
279         .dev_select             = ata_noop_dev_select,
280
281         .tf_read                = ahci_tf_read,
282
283         .qc_defer               = sata_pmp_qc_defer_cmd_switch,
284         .qc_prep                = ahci_qc_prep,
285         .qc_issue               = ahci_qc_issue,
286
287         .irq_clear              = ahci_irq_clear,
288
289         .scr_read               = ahci_scr_read,
290         .scr_write              = ahci_scr_write,
291
292         .freeze                 = ahci_freeze,
293         .thaw                   = ahci_thaw,
294
295         .error_handler          = ahci_error_handler,
296         .post_internal_cmd      = ahci_post_internal_cmd,
297
298         .pmp_attach             = ahci_pmp_attach,
299         .pmp_detach             = ahci_pmp_detach,
300         .pmp_read               = ahci_pmp_read,
301         .pmp_write              = ahci_pmp_write,
302
303 #ifdef CONFIG_PM
304         .port_suspend           = ahci_port_suspend,
305         .port_resume            = ahci_port_resume,
306 #endif
307
308         .port_start             = ahci_port_start,
309         .port_stop              = ahci_port_stop,
310 };
311
312 static const struct ata_port_operations ahci_vt8251_ops = {
313         .check_status           = ahci_check_status,
314         .check_altstatus        = ahci_check_status,
315         .dev_select             = ata_noop_dev_select,
316
317         .tf_read                = ahci_tf_read,
318
319         .qc_defer               = sata_pmp_qc_defer_cmd_switch,
320         .qc_prep                = ahci_qc_prep,
321         .qc_issue               = ahci_qc_issue,
322
323         .irq_clear              = ahci_irq_clear,
324
325         .scr_read               = ahci_scr_read,
326         .scr_write              = ahci_scr_write,
327
328         .freeze                 = ahci_freeze,
329         .thaw                   = ahci_thaw,
330
331         .error_handler          = ahci_vt8251_error_handler,
332         .post_internal_cmd      = ahci_post_internal_cmd,
333
334         .pmp_attach             = ahci_pmp_attach,
335         .pmp_detach             = ahci_pmp_detach,
336         .pmp_read               = ahci_pmp_read,
337         .pmp_write              = ahci_pmp_write,
338
339 #ifdef CONFIG_PM
340         .port_suspend           = ahci_port_suspend,
341         .port_resume            = ahci_port_resume,
342 #endif
343
344         .port_start             = ahci_port_start,
345         .port_stop              = ahci_port_stop,
346 };
347
348 #define AHCI_HFLAGS(flags)      .private_data   = (void *)(flags)
349
350 static const struct ata_port_info ahci_port_info[] = {
351         /* board_ahci */
352         {
353                 .flags          = AHCI_FLAG_COMMON,
354                 .link_flags     = AHCI_LFLAG_COMMON,
355                 .pio_mask       = 0x1f, /* pio0-4 */
356                 .udma_mask      = ATA_UDMA6,
357                 .port_ops       = &ahci_ops,
358         },
359         /* board_ahci_vt8251 */
360         {
361                 AHCI_HFLAGS     (AHCI_HFLAG_NO_NCQ | AHCI_HFLAG_NO_PMP),
362                 .flags          = AHCI_FLAG_COMMON,
363                 .link_flags     = AHCI_LFLAG_COMMON | ATA_LFLAG_HRST_TO_RESUME,
364                 .pio_mask       = 0x1f, /* pio0-4 */
365                 .udma_mask      = ATA_UDMA6,
366                 .port_ops       = &ahci_vt8251_ops,
367         },
368         /* board_ahci_ign_iferr */
369         {
370                 AHCI_HFLAGS     (AHCI_HFLAG_IGN_IRQ_IF_ERR),
371                 .flags          = AHCI_FLAG_COMMON,
372                 .link_flags     = AHCI_LFLAG_COMMON,
373                 .pio_mask       = 0x1f, /* pio0-4 */
374                 .udma_mask      = ATA_UDMA6,
375                 .port_ops       = &ahci_ops,
376         },
377         /* board_ahci_sb600 */
378         {
379                 AHCI_HFLAGS     (AHCI_HFLAG_IGN_SERR_INTERNAL |
380                                  AHCI_HFLAG_32BIT_ONLY | AHCI_HFLAG_NO_PMP),
381                 .flags          = AHCI_FLAG_COMMON,
382                 .link_flags     = AHCI_LFLAG_COMMON,
383                 .pio_mask       = 0x1f, /* pio0-4 */
384                 .udma_mask      = ATA_UDMA6,
385                 .port_ops       = &ahci_ops,
386         },
387         /* board_ahci_mv */
388         {
389                 AHCI_HFLAGS     (AHCI_HFLAG_NO_NCQ | AHCI_HFLAG_NO_MSI |
390                                  AHCI_HFLAG_MV_PATA),
391                 .flags          = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
392                                   ATA_FLAG_MMIO | ATA_FLAG_PIO_DMA,
393                 .link_flags     = AHCI_LFLAG_COMMON,
394                 .pio_mask       = 0x1f, /* pio0-4 */
395                 .udma_mask      = ATA_UDMA6,
396                 .port_ops       = &ahci_ops,
397         },
398 };
399
400 static const struct pci_device_id ahci_pci_tbl[] = {
401         /* Intel */
402         { PCI_VDEVICE(INTEL, 0x2652), board_ahci }, /* ICH6 */
403         { PCI_VDEVICE(INTEL, 0x2653), board_ahci }, /* ICH6M */
404         { PCI_VDEVICE(INTEL, 0x27c1), board_ahci }, /* ICH7 */
405         { PCI_VDEVICE(INTEL, 0x27c5), board_ahci }, /* ICH7M */
406         { PCI_VDEVICE(INTEL, 0x27c3), board_ahci }, /* ICH7R */
407         { PCI_VDEVICE(AL, 0x5288), board_ahci_ign_iferr }, /* ULi M5288 */
408         { PCI_VDEVICE(INTEL, 0x2681), board_ahci }, /* ESB2 */
409         { PCI_VDEVICE(INTEL, 0x2682), board_ahci }, /* ESB2 */
410         { PCI_VDEVICE(INTEL, 0x2683), board_ahci }, /* ESB2 */
411         { PCI_VDEVICE(INTEL, 0x27c6), board_ahci }, /* ICH7-M DH */
412         { PCI_VDEVICE(INTEL, 0x2821), board_ahci }, /* ICH8 */
413         { PCI_VDEVICE(INTEL, 0x2822), board_ahci }, /* ICH8 */
414         { PCI_VDEVICE(INTEL, 0x2824), board_ahci }, /* ICH8 */
415         { PCI_VDEVICE(INTEL, 0x2829), board_ahci }, /* ICH8M */
416         { PCI_VDEVICE(INTEL, 0x282a), board_ahci }, /* ICH8M */
417         { PCI_VDEVICE(INTEL, 0x2922), board_ahci }, /* ICH9 */
418         { PCI_VDEVICE(INTEL, 0x2923), board_ahci }, /* ICH9 */
419         { PCI_VDEVICE(INTEL, 0x2924), board_ahci }, /* ICH9 */
420         { PCI_VDEVICE(INTEL, 0x2925), board_ahci }, /* ICH9 */
421         { PCI_VDEVICE(INTEL, 0x2927), board_ahci }, /* ICH9 */
422         { PCI_VDEVICE(INTEL, 0x2929), board_ahci }, /* ICH9M */
423         { PCI_VDEVICE(INTEL, 0x292a), board_ahci }, /* ICH9M */
424         { PCI_VDEVICE(INTEL, 0x292b), board_ahci }, /* ICH9M */
425         { PCI_VDEVICE(INTEL, 0x292c), board_ahci }, /* ICH9M */
426         { PCI_VDEVICE(INTEL, 0x292f), board_ahci }, /* ICH9M */
427         { PCI_VDEVICE(INTEL, 0x294d), board_ahci }, /* ICH9 */
428         { PCI_VDEVICE(INTEL, 0x294e), board_ahci }, /* ICH9M */
429         { PCI_VDEVICE(INTEL, 0x502a), board_ahci }, /* Tolapai */
430         { PCI_VDEVICE(INTEL, 0x502b), board_ahci }, /* Tolapai */
431
432         /* JMicron 360/1/3/5/6, match class to avoid IDE function */
433         { PCI_VENDOR_ID_JMICRON, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
434           PCI_CLASS_STORAGE_SATA_AHCI, 0xffffff, board_ahci_ign_iferr },
435
436         /* ATI */
437         { PCI_VDEVICE(ATI, 0x4380), board_ahci_sb600 }, /* ATI SB600 */
438         { PCI_VDEVICE(ATI, 0x4390), board_ahci_sb600 }, /* ATI SB700/800 */
439         { PCI_VDEVICE(ATI, 0x4391), board_ahci_sb600 }, /* ATI SB700/800 */
440         { PCI_VDEVICE(ATI, 0x4392), board_ahci_sb600 }, /* ATI SB700/800 */
441         { PCI_VDEVICE(ATI, 0x4393), board_ahci_sb600 }, /* ATI SB700/800 */
442         { PCI_VDEVICE(ATI, 0x4394), board_ahci_sb600 }, /* ATI SB700/800 */
443         { PCI_VDEVICE(ATI, 0x4395), board_ahci_sb600 }, /* ATI SB700/800 */
444
445         /* VIA */
446         { PCI_VDEVICE(VIA, 0x3349), board_ahci_vt8251 }, /* VIA VT8251 */
447         { PCI_VDEVICE(VIA, 0x6287), board_ahci_vt8251 }, /* VIA VT8251 */
448
449         /* NVIDIA */
450         { PCI_VDEVICE(NVIDIA, 0x044c), board_ahci },            /* MCP65 */
451         { PCI_VDEVICE(NVIDIA, 0x044d), board_ahci },            /* MCP65 */
452         { PCI_VDEVICE(NVIDIA, 0x044e), board_ahci },            /* MCP65 */
453         { PCI_VDEVICE(NVIDIA, 0x044f), board_ahci },            /* MCP65 */
454         { PCI_VDEVICE(NVIDIA, 0x045c), board_ahci },            /* MCP65 */
455         { PCI_VDEVICE(NVIDIA, 0x045d), board_ahci },            /* MCP65 */
456         { PCI_VDEVICE(NVIDIA, 0x045e), board_ahci },            /* MCP65 */
457         { PCI_VDEVICE(NVIDIA, 0x045f), board_ahci },            /* MCP65 */
458         { PCI_VDEVICE(NVIDIA, 0x0550), board_ahci },            /* MCP67 */
459         { PCI_VDEVICE(NVIDIA, 0x0551), board_ahci },            /* MCP67 */
460         { PCI_VDEVICE(NVIDIA, 0x0552), board_ahci },            /* MCP67 */
461         { PCI_VDEVICE(NVIDIA, 0x0553), board_ahci },            /* MCP67 */
462         { PCI_VDEVICE(NVIDIA, 0x0554), board_ahci },            /* MCP67 */
463         { PCI_VDEVICE(NVIDIA, 0x0555), board_ahci },            /* MCP67 */
464         { PCI_VDEVICE(NVIDIA, 0x0556), board_ahci },            /* MCP67 */
465         { PCI_VDEVICE(NVIDIA, 0x0557), board_ahci },            /* MCP67 */
466         { PCI_VDEVICE(NVIDIA, 0x0558), board_ahci },            /* MCP67 */
467         { PCI_VDEVICE(NVIDIA, 0x0559), board_ahci },            /* MCP67 */
468         { PCI_VDEVICE(NVIDIA, 0x055a), board_ahci },            /* MCP67 */
469         { PCI_VDEVICE(NVIDIA, 0x055b), board_ahci },            /* MCP67 */
470         { PCI_VDEVICE(NVIDIA, 0x07f0), board_ahci },            /* MCP73 */
471         { PCI_VDEVICE(NVIDIA, 0x07f1), board_ahci },            /* MCP73 */
472         { PCI_VDEVICE(NVIDIA, 0x07f2), board_ahci },            /* MCP73 */
473         { PCI_VDEVICE(NVIDIA, 0x07f3), board_ahci },            /* MCP73 */
474         { PCI_VDEVICE(NVIDIA, 0x07f4), board_ahci },            /* MCP73 */
475         { PCI_VDEVICE(NVIDIA, 0x07f5), board_ahci },            /* MCP73 */
476         { PCI_VDEVICE(NVIDIA, 0x07f6), board_ahci },            /* MCP73 */
477         { PCI_VDEVICE(NVIDIA, 0x07f7), board_ahci },            /* MCP73 */
478         { PCI_VDEVICE(NVIDIA, 0x07f8), board_ahci },            /* MCP73 */
479         { PCI_VDEVICE(NVIDIA, 0x07f9), board_ahci },            /* MCP73 */
480         { PCI_VDEVICE(NVIDIA, 0x07fa), board_ahci },            /* MCP73 */
481         { PCI_VDEVICE(NVIDIA, 0x07fb), board_ahci },            /* MCP73 */
482         { PCI_VDEVICE(NVIDIA, 0x0ad0), board_ahci },            /* MCP77 */
483         { PCI_VDEVICE(NVIDIA, 0x0ad1), board_ahci },            /* MCP77 */
484         { PCI_VDEVICE(NVIDIA, 0x0ad2), board_ahci },            /* MCP77 */
485         { PCI_VDEVICE(NVIDIA, 0x0ad3), board_ahci },            /* MCP77 */
486         { PCI_VDEVICE(NVIDIA, 0x0ad4), board_ahci },            /* MCP77 */
487         { PCI_VDEVICE(NVIDIA, 0x0ad5), board_ahci },            /* MCP77 */
488         { PCI_VDEVICE(NVIDIA, 0x0ad6), board_ahci },            /* MCP77 */
489         { PCI_VDEVICE(NVIDIA, 0x0ad7), board_ahci },            /* MCP77 */
490         { PCI_VDEVICE(NVIDIA, 0x0ad8), board_ahci },            /* MCP77 */
491         { PCI_VDEVICE(NVIDIA, 0x0ad9), board_ahci },            /* MCP77 */
492         { PCI_VDEVICE(NVIDIA, 0x0ada), board_ahci },            /* MCP77 */
493         { PCI_VDEVICE(NVIDIA, 0x0adb), board_ahci },            /* MCP77 */
494
495         /* SiS */
496         { PCI_VDEVICE(SI, 0x1184), board_ahci }, /* SiS 966 */
497         { PCI_VDEVICE(SI, 0x1185), board_ahci }, /* SiS 966 */
498         { PCI_VDEVICE(SI, 0x0186), board_ahci }, /* SiS 968 */
499
500         /* Marvell */
501         { PCI_VDEVICE(MARVELL, 0x6145), board_ahci_mv },        /* 6145 */
502
503         /* Generic, PCI class code for AHCI */
504         { PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
505           PCI_CLASS_STORAGE_SATA_AHCI, 0xffffff, board_ahci },
506
507         { }     /* terminate list */
508 };
509
510
511 static struct pci_driver ahci_pci_driver = {
512         .name                   = DRV_NAME,
513         .id_table               = ahci_pci_tbl,
514         .probe                  = ahci_init_one,
515         .remove                 = ata_pci_remove_one,
516 #ifdef CONFIG_PM
517         .suspend                = ahci_pci_device_suspend,
518         .resume                 = ahci_pci_device_resume,
519 #endif
520 };
521
522
523 static inline int ahci_nr_ports(u32 cap)
524 {
525         return (cap & 0x1f) + 1;
526 }
527
528 static inline void __iomem *__ahci_port_base(struct ata_host *host,
529                                              unsigned int port_no)
530 {
531         void __iomem *mmio = host->iomap[AHCI_PCI_BAR];
532
533         return mmio + 0x100 + (port_no * 0x80);
534 }
535
536 static inline void __iomem *ahci_port_base(struct ata_port *ap)
537 {
538         return __ahci_port_base(ap->host, ap->port_no);
539 }
540
541 /**
542  *      ahci_save_initial_config - Save and fixup initial config values
543  *      @pdev: target PCI device
544  *      @hpriv: host private area to store config values
545  *
546  *      Some registers containing configuration info might be setup by
547  *      BIOS and might be cleared on reset.  This function saves the
548  *      initial values of those registers into @hpriv such that they
549  *      can be restored after controller reset.
550  *
551  *      If inconsistent, config values are fixed up by this function.
552  *
553  *      LOCKING:
554  *      None.
555  */
556 static void ahci_save_initial_config(struct pci_dev *pdev,
557                                      struct ahci_host_priv *hpriv)
558 {
559         void __iomem *mmio = pcim_iomap_table(pdev)[AHCI_PCI_BAR];
560         u32 cap, port_map;
561         int i;
562
563         /* Values prefixed with saved_ are written back to host after
564          * reset.  Values without are used for driver operation.
565          */
566         hpriv->saved_cap = cap = readl(mmio + HOST_CAP);
567         hpriv->saved_port_map = port_map = readl(mmio + HOST_PORTS_IMPL);
568
569         /* some chips have errata preventing 64bit use */
570         if ((cap & HOST_CAP_64) && (hpriv->flags & AHCI_HFLAG_32BIT_ONLY)) {
571                 dev_printk(KERN_INFO, &pdev->dev,
572                            "controller can't do 64bit DMA, forcing 32bit\n");
573                 cap &= ~HOST_CAP_64;
574         }
575
576         if ((cap & HOST_CAP_NCQ) && (hpriv->flags & AHCI_HFLAG_NO_NCQ)) {
577                 dev_printk(KERN_INFO, &pdev->dev,
578                            "controller can't do NCQ, turning off CAP_NCQ\n");
579                 cap &= ~HOST_CAP_NCQ;
580         }
581
582         if ((cap && HOST_CAP_PMP) && (hpriv->flags & AHCI_HFLAG_NO_PMP)) {
583                 dev_printk(KERN_INFO, &pdev->dev,
584                            "controller can't do PMP, turning off CAP_PMP\n");
585                 cap &= ~HOST_CAP_PMP;
586         }
587
588         /*
589          * Temporary Marvell 6145 hack: PATA port presence
590          * is asserted through the standard AHCI port
591          * presence register, as bit 4 (counting from 0)
592          */
593         if (hpriv->flags & AHCI_HFLAG_MV_PATA) {
594                 dev_printk(KERN_ERR, &pdev->dev,
595                            "MV_AHCI HACK: port_map %x -> %x\n",
596                            hpriv->port_map,
597                            hpriv->port_map & 0xf);
598
599                 port_map &= 0xf;
600         }
601
602         /* cross check port_map and cap.n_ports */
603         if (port_map) {
604                 u32 tmp_port_map = port_map;
605                 int n_ports = ahci_nr_ports(cap);
606
607                 for (i = 0; i < AHCI_MAX_PORTS && n_ports; i++) {
608                         if (tmp_port_map & (1 << i)) {
609                                 n_ports--;
610                                 tmp_port_map &= ~(1 << i);
611                         }
612                 }
613
614                 /* If n_ports and port_map are inconsistent, whine and
615                  * clear port_map and let it be generated from n_ports.
616                  */
617                 if (n_ports || tmp_port_map) {
618                         dev_printk(KERN_WARNING, &pdev->dev,
619                                    "nr_ports (%u) and implemented port map "
620                                    "(0x%x) don't match, using nr_ports\n",
621                                    ahci_nr_ports(cap), port_map);
622                         port_map = 0;
623                 }
624         }
625
626         /* fabricate port_map from cap.nr_ports */
627         if (!port_map) {
628                 port_map = (1 << ahci_nr_ports(cap)) - 1;
629                 dev_printk(KERN_WARNING, &pdev->dev,
630                            "forcing PORTS_IMPL to 0x%x\n", port_map);
631
632                 /* write the fixed up value to the PI register */
633                 hpriv->saved_port_map = port_map;
634         }
635
636         /* record values to use during operation */
637         hpriv->cap = cap;
638         hpriv->port_map = port_map;
639 }
640
641 /**
642  *      ahci_restore_initial_config - Restore initial config
643  *      @host: target ATA host
644  *
645  *      Restore initial config stored by ahci_save_initial_config().
646  *
647  *      LOCKING:
648  *      None.
649  */
650 static void ahci_restore_initial_config(struct ata_host *host)
651 {
652         struct ahci_host_priv *hpriv = host->private_data;
653         void __iomem *mmio = host->iomap[AHCI_PCI_BAR];
654
655         writel(hpriv->saved_cap, mmio + HOST_CAP);
656         writel(hpriv->saved_port_map, mmio + HOST_PORTS_IMPL);
657         (void) readl(mmio + HOST_PORTS_IMPL);   /* flush */
658 }
659
660 static unsigned ahci_scr_offset(struct ata_port *ap, unsigned int sc_reg)
661 {
662         static const int offset[] = {
663                 [SCR_STATUS]            = PORT_SCR_STAT,
664                 [SCR_CONTROL]           = PORT_SCR_CTL,
665                 [SCR_ERROR]             = PORT_SCR_ERR,
666                 [SCR_ACTIVE]            = PORT_SCR_ACT,
667                 [SCR_NOTIFICATION]      = PORT_SCR_NTF,
668         };
669         struct ahci_host_priv *hpriv = ap->host->private_data;
670
671         if (sc_reg < ARRAY_SIZE(offset) &&
672             (sc_reg != SCR_NOTIFICATION || (hpriv->cap & HOST_CAP_SNTF)))
673                 return offset[sc_reg];
674         return 0;
675 }
676
677 static int ahci_scr_read(struct ata_port *ap, unsigned int sc_reg, u32 *val)
678 {
679         void __iomem *port_mmio = ahci_port_base(ap);
680         int offset = ahci_scr_offset(ap, sc_reg);
681
682         if (offset) {
683                 *val = readl(port_mmio + offset);
684                 return 0;
685         }
686         return -EINVAL;
687 }
688
689 static int ahci_scr_write(struct ata_port *ap, unsigned int sc_reg, u32 val)
690 {
691         void __iomem *port_mmio = ahci_port_base(ap);
692         int offset = ahci_scr_offset(ap, sc_reg);
693
694         if (offset) {
695                 writel(val, port_mmio + offset);
696                 return 0;
697         }
698         return -EINVAL;
699 }
700
701 static void ahci_start_engine(struct ata_port *ap)
702 {
703         void __iomem *port_mmio = ahci_port_base(ap);
704         u32 tmp;
705
706         /* start DMA */
707         tmp = readl(port_mmio + PORT_CMD);
708         tmp |= PORT_CMD_START;
709         writel(tmp, port_mmio + PORT_CMD);
710         readl(port_mmio + PORT_CMD); /* flush */
711 }
712
713 static int ahci_stop_engine(struct ata_port *ap)
714 {
715         void __iomem *port_mmio = ahci_port_base(ap);
716         u32 tmp;
717
718         tmp = readl(port_mmio + PORT_CMD);
719
720         /* check if the HBA is idle */
721         if ((tmp & (PORT_CMD_START | PORT_CMD_LIST_ON)) == 0)
722                 return 0;
723
724         /* setting HBA to idle */
725         tmp &= ~PORT_CMD_START;
726         writel(tmp, port_mmio + PORT_CMD);
727
728         /* wait for engine to stop. This could be as long as 500 msec */
729         tmp = ata_wait_register(port_mmio + PORT_CMD,
730                                 PORT_CMD_LIST_ON, PORT_CMD_LIST_ON, 1, 500);
731         if (tmp & PORT_CMD_LIST_ON)
732                 return -EIO;
733
734         return 0;
735 }
736
737 static void ahci_start_fis_rx(struct ata_port *ap)
738 {
739         void __iomem *port_mmio = ahci_port_base(ap);
740         struct ahci_host_priv *hpriv = ap->host->private_data;
741         struct ahci_port_priv *pp = ap->private_data;
742         u32 tmp;
743
744         /* set FIS registers */
745         if (hpriv->cap & HOST_CAP_64)
746                 writel((pp->cmd_slot_dma >> 16) >> 16,
747                        port_mmio + PORT_LST_ADDR_HI);
748         writel(pp->cmd_slot_dma & 0xffffffff, port_mmio + PORT_LST_ADDR);
749
750         if (hpriv->cap & HOST_CAP_64)
751                 writel((pp->rx_fis_dma >> 16) >> 16,
752                        port_mmio + PORT_FIS_ADDR_HI);
753         writel(pp->rx_fis_dma & 0xffffffff, port_mmio + PORT_FIS_ADDR);
754
755         /* enable FIS reception */
756         tmp = readl(port_mmio + PORT_CMD);
757         tmp |= PORT_CMD_FIS_RX;
758         writel(tmp, port_mmio + PORT_CMD);
759
760         /* flush */
761         readl(port_mmio + PORT_CMD);
762 }
763
764 static int ahci_stop_fis_rx(struct ata_port *ap)
765 {
766         void __iomem *port_mmio = ahci_port_base(ap);
767         u32 tmp;
768
769         /* disable FIS reception */
770         tmp = readl(port_mmio + PORT_CMD);
771         tmp &= ~PORT_CMD_FIS_RX;
772         writel(tmp, port_mmio + PORT_CMD);
773
774         /* wait for completion, spec says 500ms, give it 1000 */
775         tmp = ata_wait_register(port_mmio + PORT_CMD, PORT_CMD_FIS_ON,
776                                 PORT_CMD_FIS_ON, 10, 1000);
777         if (tmp & PORT_CMD_FIS_ON)
778                 return -EBUSY;
779
780         return 0;
781 }
782
783 static void ahci_power_up(struct ata_port *ap)
784 {
785         struct ahci_host_priv *hpriv = ap->host->private_data;
786         void __iomem *port_mmio = ahci_port_base(ap);
787         u32 cmd;
788
789         cmd = readl(port_mmio + PORT_CMD) & ~PORT_CMD_ICC_MASK;
790
791         /* spin up device */
792         if (hpriv->cap & HOST_CAP_SSS) {
793                 cmd |= PORT_CMD_SPIN_UP;
794                 writel(cmd, port_mmio + PORT_CMD);
795         }
796
797         /* wake up link */
798         writel(cmd | PORT_CMD_ICC_ACTIVE, port_mmio + PORT_CMD);
799 }
800
801 #ifdef CONFIG_PM
802 static void ahci_power_down(struct ata_port *ap)
803 {
804         struct ahci_host_priv *hpriv = ap->host->private_data;
805         void __iomem *port_mmio = ahci_port_base(ap);
806         u32 cmd, scontrol;
807
808         if (!(hpriv->cap & HOST_CAP_SSS))
809                 return;
810
811         /* put device into listen mode, first set PxSCTL.DET to 0 */
812         scontrol = readl(port_mmio + PORT_SCR_CTL);
813         scontrol &= ~0xf;
814         writel(scontrol, port_mmio + PORT_SCR_CTL);
815
816         /* then set PxCMD.SUD to 0 */
817         cmd = readl(port_mmio + PORT_CMD) & ~PORT_CMD_ICC_MASK;
818         cmd &= ~PORT_CMD_SPIN_UP;
819         writel(cmd, port_mmio + PORT_CMD);
820 }
821 #endif
822
823 static void ahci_start_port(struct ata_port *ap)
824 {
825         /* enable FIS reception */
826         ahci_start_fis_rx(ap);
827
828         /* enable DMA */
829         ahci_start_engine(ap);
830 }
831
832 static int ahci_deinit_port(struct ata_port *ap, const char **emsg)
833 {
834         int rc;
835
836         /* disable DMA */
837         rc = ahci_stop_engine(ap);
838         if (rc) {
839                 *emsg = "failed to stop engine";
840                 return rc;
841         }
842
843         /* disable FIS reception */
844         rc = ahci_stop_fis_rx(ap);
845         if (rc) {
846                 *emsg = "failed stop FIS RX";
847                 return rc;
848         }
849
850         return 0;
851 }
852
853 static int ahci_reset_controller(struct ata_host *host)
854 {
855         struct pci_dev *pdev = to_pci_dev(host->dev);
856         void __iomem *mmio = host->iomap[AHCI_PCI_BAR];
857         u32 tmp;
858
859         /* we must be in AHCI mode, before using anything
860          * AHCI-specific, such as HOST_RESET.
861          */
862         tmp = readl(mmio + HOST_CTL);
863         if (!(tmp & HOST_AHCI_EN))
864                 writel(tmp | HOST_AHCI_EN, mmio + HOST_CTL);
865
866         /* global controller reset */
867         if ((tmp & HOST_RESET) == 0) {
868                 writel(tmp | HOST_RESET, mmio + HOST_CTL);
869                 readl(mmio + HOST_CTL); /* flush */
870         }
871
872         /* reset must complete within 1 second, or
873          * the hardware should be considered fried.
874          */
875         ssleep(1);
876
877         tmp = readl(mmio + HOST_CTL);
878         if (tmp & HOST_RESET) {
879                 dev_printk(KERN_ERR, host->dev,
880                            "controller reset failed (0x%x)\n", tmp);
881                 return -EIO;
882         }
883
884         /* turn on AHCI mode */
885         writel(HOST_AHCI_EN, mmio + HOST_CTL);
886         (void) readl(mmio + HOST_CTL);  /* flush */
887
888         /* some registers might be cleared on reset.  restore initial values */
889         ahci_restore_initial_config(host);
890
891         if (pdev->vendor == PCI_VENDOR_ID_INTEL) {
892                 u16 tmp16;
893
894                 /* configure PCS */
895                 pci_read_config_word(pdev, 0x92, &tmp16);
896                 tmp16 |= 0xf;
897                 pci_write_config_word(pdev, 0x92, tmp16);
898         }
899
900         return 0;
901 }
902
903 static void ahci_port_init(struct pci_dev *pdev, struct ata_port *ap,
904                            int port_no, void __iomem *mmio,
905                            void __iomem *port_mmio)
906 {
907         const char *emsg = NULL;
908         int rc;
909         u32 tmp;
910
911         /* make sure port is not active */
912         rc = ahci_deinit_port(ap, &emsg);
913         if (rc)
914                 dev_printk(KERN_WARNING, &pdev->dev,
915                            "%s (%d)\n", emsg, rc);
916
917         /* clear SError */
918         tmp = readl(port_mmio + PORT_SCR_ERR);
919         VPRINTK("PORT_SCR_ERR 0x%x\n", tmp);
920         writel(tmp, port_mmio + PORT_SCR_ERR);
921
922         /* clear port IRQ */
923         tmp = readl(port_mmio + PORT_IRQ_STAT);
924         VPRINTK("PORT_IRQ_STAT 0x%x\n", tmp);
925         if (tmp)
926                 writel(tmp, port_mmio + PORT_IRQ_STAT);
927
928         writel(1 << port_no, mmio + HOST_IRQ_STAT);
929 }
930
931 static void ahci_init_controller(struct ata_host *host)
932 {
933         struct ahci_host_priv *hpriv = host->private_data;
934         struct pci_dev *pdev = to_pci_dev(host->dev);
935         void __iomem *mmio = host->iomap[AHCI_PCI_BAR];
936         int i;
937         void __iomem *port_mmio;
938         u32 tmp;
939
940         if (hpriv->flags & AHCI_HFLAG_MV_PATA) {
941                 port_mmio = __ahci_port_base(host, 4);
942
943                 writel(0, port_mmio + PORT_IRQ_MASK);
944
945                 /* clear port IRQ */
946                 tmp = readl(port_mmio + PORT_IRQ_STAT);
947                 VPRINTK("PORT_IRQ_STAT 0x%x\n", tmp);
948                 if (tmp)
949                         writel(tmp, port_mmio + PORT_IRQ_STAT);
950         }
951
952         for (i = 0; i < host->n_ports; i++) {
953                 struct ata_port *ap = host->ports[i];
954
955                 port_mmio = ahci_port_base(ap);
956                 if (ata_port_is_dummy(ap))
957                         continue;
958
959                 ahci_port_init(pdev, ap, i, mmio, port_mmio);
960         }
961
962         tmp = readl(mmio + HOST_CTL);
963         VPRINTK("HOST_CTL 0x%x\n", tmp);
964         writel(tmp | HOST_IRQ_EN, mmio + HOST_CTL);
965         tmp = readl(mmio + HOST_CTL);
966         VPRINTK("HOST_CTL 0x%x\n", tmp);
967 }
968
969 static unsigned int ahci_dev_classify(struct ata_port *ap)
970 {
971         void __iomem *port_mmio = ahci_port_base(ap);
972         struct ata_taskfile tf;
973         u32 tmp;
974
975         tmp = readl(port_mmio + PORT_SIG);
976         tf.lbah         = (tmp >> 24)   & 0xff;
977         tf.lbam         = (tmp >> 16)   & 0xff;
978         tf.lbal         = (tmp >> 8)    & 0xff;
979         tf.nsect        = (tmp)         & 0xff;
980
981         return ata_dev_classify(&tf);
982 }
983
984 static void ahci_fill_cmd_slot(struct ahci_port_priv *pp, unsigned int tag,
985                                u32 opts)
986 {
987         dma_addr_t cmd_tbl_dma;
988
989         cmd_tbl_dma = pp->cmd_tbl_dma + tag * AHCI_CMD_TBL_SZ;
990
991         pp->cmd_slot[tag].opts = cpu_to_le32(opts);
992         pp->cmd_slot[tag].status = 0;
993         pp->cmd_slot[tag].tbl_addr = cpu_to_le32(cmd_tbl_dma & 0xffffffff);
994         pp->cmd_slot[tag].tbl_addr_hi = cpu_to_le32((cmd_tbl_dma >> 16) >> 16);
995 }
996
997 static int ahci_kick_engine(struct ata_port *ap, int force_restart)
998 {
999         void __iomem *port_mmio = ap->ioaddr.cmd_addr;
1000         struct ahci_host_priv *hpriv = ap->host->private_data;
1001         u32 tmp;
1002         int busy, rc;
1003
1004         /* do we need to kick the port? */
1005         busy = ahci_check_status(ap) & (ATA_BUSY | ATA_DRQ);
1006         if (!busy && !force_restart)
1007                 return 0;
1008
1009         /* stop engine */
1010         rc = ahci_stop_engine(ap);
1011         if (rc)
1012                 goto out_restart;
1013
1014         /* need to do CLO? */
1015         if (!busy) {
1016                 rc = 0;
1017                 goto out_restart;
1018         }
1019
1020         if (!(hpriv->cap & HOST_CAP_CLO)) {
1021                 rc = -EOPNOTSUPP;
1022                 goto out_restart;
1023         }
1024
1025         /* perform CLO */
1026         tmp = readl(port_mmio + PORT_CMD);
1027         tmp |= PORT_CMD_CLO;
1028         writel(tmp, port_mmio + PORT_CMD);
1029
1030         rc = 0;
1031         tmp = ata_wait_register(port_mmio + PORT_CMD,
1032                                 PORT_CMD_CLO, PORT_CMD_CLO, 1, 500);
1033         if (tmp & PORT_CMD_CLO)
1034                 rc = -EIO;
1035
1036         /* restart engine */
1037  out_restart:
1038         ahci_start_engine(ap);
1039         return rc;
1040 }
1041
1042 static int ahci_exec_polled_cmd(struct ata_port *ap, int pmp,
1043                                 struct ata_taskfile *tf, int is_cmd, u16 flags,
1044                                 unsigned long timeout_msec)
1045 {
1046         const u32 cmd_fis_len = 5; /* five dwords */
1047         struct ahci_port_priv *pp = ap->private_data;
1048         void __iomem *port_mmio = ahci_port_base(ap);
1049         u8 *fis = pp->cmd_tbl;
1050         u32 tmp;
1051
1052         /* prep the command */
1053         ata_tf_to_fis(tf, pmp, is_cmd, fis);
1054         ahci_fill_cmd_slot(pp, 0, cmd_fis_len | flags | (pmp << 12));
1055
1056         /* issue & wait */
1057         writel(1, port_mmio + PORT_CMD_ISSUE);
1058
1059         if (timeout_msec) {
1060                 tmp = ata_wait_register(port_mmio + PORT_CMD_ISSUE, 0x1, 0x1,
1061                                         1, timeout_msec);
1062                 if (tmp & 0x1) {
1063                         ahci_kick_engine(ap, 1);
1064                         return -EBUSY;
1065                 }
1066         } else
1067                 readl(port_mmio + PORT_CMD_ISSUE);      /* flush */
1068
1069         return 0;
1070 }
1071
1072 static int ahci_do_softreset(struct ata_link *link, unsigned int *class,
1073                              int pmp, unsigned long deadline)
1074 {
1075         struct ata_port *ap = link->ap;
1076         const char *reason = NULL;
1077         unsigned long now, msecs;
1078         struct ata_taskfile tf;
1079         int rc;
1080
1081         DPRINTK("ENTER\n");
1082
1083         if (ata_link_offline(link)) {
1084                 DPRINTK("PHY reports no device\n");
1085                 *class = ATA_DEV_NONE;
1086                 return 0;
1087         }
1088
1089         /* prepare for SRST (AHCI-1.1 10.4.1) */
1090         rc = ahci_kick_engine(ap, 1);
1091         if (rc)
1092                 ata_link_printk(link, KERN_WARNING,
1093                                 "failed to reset engine (errno=%d)", rc);
1094
1095         ata_tf_init(link->device, &tf);
1096
1097         /* issue the first D2H Register FIS */
1098         msecs = 0;
1099         now = jiffies;
1100         if (time_after(now, deadline))
1101                 msecs = jiffies_to_msecs(deadline - now);
1102
1103         tf.ctl |= ATA_SRST;
1104         if (ahci_exec_polled_cmd(ap, pmp, &tf, 0,
1105                                  AHCI_CMD_RESET | AHCI_CMD_CLR_BUSY, msecs)) {
1106                 rc = -EIO;
1107                 reason = "1st FIS failed";
1108                 goto fail;
1109         }
1110
1111         /* spec says at least 5us, but be generous and sleep for 1ms */
1112         msleep(1);
1113
1114         /* issue the second D2H Register FIS */
1115         tf.ctl &= ~ATA_SRST;
1116         ahci_exec_polled_cmd(ap, pmp, &tf, 0, 0, 0);
1117
1118         /* spec mandates ">= 2ms" before checking status.
1119          * We wait 150ms, because that was the magic delay used for
1120          * ATAPI devices in Hale Landis's ATADRVR, for the period of time
1121          * between when the ATA command register is written, and then
1122          * status is checked.  Because waiting for "a while" before
1123          * checking status is fine, post SRST, we perform this magic
1124          * delay here as well.
1125          */
1126         msleep(150);
1127
1128         rc = ata_wait_ready(ap, deadline);
1129         /* link occupied, -ENODEV too is an error */
1130         if (rc) {
1131                 reason = "device not ready";
1132                 goto fail;
1133         }
1134         *class = ahci_dev_classify(ap);
1135
1136         DPRINTK("EXIT, class=%u\n", *class);
1137         return 0;
1138
1139  fail:
1140         ata_link_printk(link, KERN_ERR, "softreset failed (%s)\n", reason);
1141         return rc;
1142 }
1143
1144 static int ahci_softreset(struct ata_link *link, unsigned int *class,
1145                           unsigned long deadline)
1146 {
1147         int pmp = 0;
1148
1149         if (link->ap->flags & ATA_FLAG_PMP)
1150                 pmp = SATA_PMP_CTRL_PORT;
1151
1152         return ahci_do_softreset(link, class, pmp, deadline);
1153 }
1154
1155 static int ahci_hardreset(struct ata_link *link, unsigned int *class,
1156                           unsigned long deadline)
1157 {
1158         struct ata_port *ap = link->ap;
1159         struct ahci_port_priv *pp = ap->private_data;
1160         u8 *d2h_fis = pp->rx_fis + RX_FIS_D2H_REG;
1161         struct ata_taskfile tf;
1162         int rc;
1163
1164         DPRINTK("ENTER\n");
1165
1166         ahci_stop_engine(ap);
1167
1168         /* clear D2H reception area to properly wait for D2H FIS */
1169         ata_tf_init(link->device, &tf);
1170         tf.command = 0x80;
1171         ata_tf_to_fis(&tf, 0, 0, d2h_fis);
1172
1173         rc = sata_std_hardreset(link, class, deadline);
1174
1175         ahci_start_engine(ap);
1176
1177         if (rc == 0 && ata_link_online(link))
1178                 *class = ahci_dev_classify(ap);
1179         if (rc != -EAGAIN && *class == ATA_DEV_UNKNOWN)
1180                 *class = ATA_DEV_NONE;
1181
1182         DPRINTK("EXIT, rc=%d, class=%u\n", rc, *class);
1183         return rc;
1184 }
1185
1186 static int ahci_vt8251_hardreset(struct ata_link *link, unsigned int *class,
1187                                  unsigned long deadline)
1188 {
1189         struct ata_port *ap = link->ap;
1190         u32 serror;
1191         int rc;
1192
1193         DPRINTK("ENTER\n");
1194
1195         ahci_stop_engine(ap);
1196
1197         rc = sata_link_hardreset(link, sata_ehc_deb_timing(&link->eh_context),
1198                                  deadline);
1199
1200         /* vt8251 needs SError cleared for the port to operate */
1201         ahci_scr_read(ap, SCR_ERROR, &serror);
1202         ahci_scr_write(ap, SCR_ERROR, serror);
1203
1204         ahci_start_engine(ap);
1205
1206         DPRINTK("EXIT, rc=%d, class=%u\n", rc, *class);
1207
1208         /* vt8251 doesn't clear BSY on signature FIS reception,
1209          * request follow-up softreset.
1210          */
1211         return rc ?: -EAGAIN;
1212 }
1213
1214 static void ahci_postreset(struct ata_link *link, unsigned int *class)
1215 {
1216         struct ata_port *ap = link->ap;
1217         void __iomem *port_mmio = ahci_port_base(ap);
1218         u32 new_tmp, tmp;
1219
1220         ata_std_postreset(link, class);
1221
1222         /* Make sure port's ATAPI bit is set appropriately */
1223         new_tmp = tmp = readl(port_mmio + PORT_CMD);
1224         if (*class == ATA_DEV_ATAPI)
1225                 new_tmp |= PORT_CMD_ATAPI;
1226         else
1227                 new_tmp &= ~PORT_CMD_ATAPI;
1228         if (new_tmp != tmp) {
1229                 writel(new_tmp, port_mmio + PORT_CMD);
1230                 readl(port_mmio + PORT_CMD); /* flush */
1231         }
1232 }
1233
1234 static int ahci_pmp_softreset(struct ata_link *link, unsigned int *class,
1235                               unsigned long deadline)
1236 {
1237         return ahci_do_softreset(link, class, link->pmp, deadline);
1238 }
1239
1240 static u8 ahci_check_status(struct ata_port *ap)
1241 {
1242         void __iomem *mmio = ap->ioaddr.cmd_addr;
1243
1244         return readl(mmio + PORT_TFDATA) & 0xFF;
1245 }
1246
1247 static void ahci_tf_read(struct ata_port *ap, struct ata_taskfile *tf)
1248 {
1249         struct ahci_port_priv *pp = ap->private_data;
1250         u8 *d2h_fis = pp->rx_fis + RX_FIS_D2H_REG;
1251
1252         ata_tf_from_fis(d2h_fis, tf);
1253 }
1254
1255 static unsigned int ahci_fill_sg(struct ata_queued_cmd *qc, void *cmd_tbl)
1256 {
1257         struct scatterlist *sg;
1258         struct ahci_sg *ahci_sg;
1259         unsigned int n_sg = 0;
1260
1261         VPRINTK("ENTER\n");
1262
1263         /*
1264          * Next, the S/G list.
1265          */
1266         ahci_sg = cmd_tbl + AHCI_CMD_TBL_HDR_SZ;
1267         ata_for_each_sg(sg, qc) {
1268                 dma_addr_t addr = sg_dma_address(sg);
1269                 u32 sg_len = sg_dma_len(sg);
1270
1271                 ahci_sg->addr = cpu_to_le32(addr & 0xffffffff);
1272                 ahci_sg->addr_hi = cpu_to_le32((addr >> 16) >> 16);
1273                 ahci_sg->flags_size = cpu_to_le32(sg_len - 1);
1274
1275                 ahci_sg++;
1276                 n_sg++;
1277         }
1278
1279         return n_sg;
1280 }
1281
1282 static void ahci_qc_prep(struct ata_queued_cmd *qc)
1283 {
1284         struct ata_port *ap = qc->ap;
1285         struct ahci_port_priv *pp = ap->private_data;
1286         int is_atapi = is_atapi_taskfile(&qc->tf);
1287         void *cmd_tbl;
1288         u32 opts;
1289         const u32 cmd_fis_len = 5; /* five dwords */
1290         unsigned int n_elem;
1291
1292         /*
1293          * Fill in command table information.  First, the header,
1294          * a SATA Register - Host to Device command FIS.
1295          */
1296         cmd_tbl = pp->cmd_tbl + qc->tag * AHCI_CMD_TBL_SZ;
1297
1298         ata_tf_to_fis(&qc->tf, qc->dev->link->pmp, 1, cmd_tbl);
1299         if (is_atapi) {
1300                 memset(cmd_tbl + AHCI_CMD_TBL_CDB, 0, 32);
1301                 memcpy(cmd_tbl + AHCI_CMD_TBL_CDB, qc->cdb, qc->dev->cdb_len);
1302         }
1303
1304         n_elem = 0;
1305         if (qc->flags & ATA_QCFLAG_DMAMAP)
1306                 n_elem = ahci_fill_sg(qc, cmd_tbl);
1307
1308         /*
1309          * Fill in command slot information.
1310          */
1311         opts = cmd_fis_len | n_elem << 16 | (qc->dev->link->pmp << 12);
1312         if (qc->tf.flags & ATA_TFLAG_WRITE)
1313                 opts |= AHCI_CMD_WRITE;
1314         if (is_atapi)
1315                 opts |= AHCI_CMD_ATAPI | AHCI_CMD_PREFETCH;
1316
1317         ahci_fill_cmd_slot(pp, qc->tag, opts);
1318 }
1319
1320 static void ahci_error_intr(struct ata_port *ap, u32 irq_stat)
1321 {
1322         struct ahci_host_priv *hpriv = ap->host->private_data;
1323         struct ahci_port_priv *pp = ap->private_data;
1324         struct ata_eh_info *host_ehi = &ap->link.eh_info;
1325         struct ata_link *link = NULL;
1326         struct ata_queued_cmd *active_qc;
1327         struct ata_eh_info *active_ehi;
1328         u32 serror;
1329
1330         /* determine active link */
1331         ata_port_for_each_link(link, ap)
1332                 if (ata_link_active(link))
1333                         break;
1334         if (!link)
1335                 link = &ap->link;
1336
1337         active_qc = ata_qc_from_tag(ap, link->active_tag);
1338         active_ehi = &link->eh_info;
1339
1340         /* record irq stat */
1341         ata_ehi_clear_desc(host_ehi);
1342         ata_ehi_push_desc(host_ehi, "irq_stat 0x%08x", irq_stat);
1343
1344         /* AHCI needs SError cleared; otherwise, it might lock up */
1345         ahci_scr_read(ap, SCR_ERROR, &serror);
1346         ahci_scr_write(ap, SCR_ERROR, serror);
1347         host_ehi->serror |= serror;
1348
1349         /* some controllers set IRQ_IF_ERR on device errors, ignore it */
1350         if (hpriv->flags & AHCI_HFLAG_IGN_IRQ_IF_ERR)
1351                 irq_stat &= ~PORT_IRQ_IF_ERR;
1352
1353         if (irq_stat & PORT_IRQ_TF_ERR) {
1354                 /* If qc is active, charge it; otherwise, the active
1355                  * link.  There's no active qc on NCQ errors.  It will
1356                  * be determined by EH by reading log page 10h.
1357                  */
1358                 if (active_qc)
1359                         active_qc->err_mask |= AC_ERR_DEV;
1360                 else
1361                         active_ehi->err_mask |= AC_ERR_DEV;
1362
1363                 if (hpriv->flags & AHCI_HFLAG_IGN_SERR_INTERNAL)
1364                         host_ehi->serror &= ~SERR_INTERNAL;
1365         }
1366
1367         if (irq_stat & PORT_IRQ_UNK_FIS) {
1368                 u32 *unk = (u32 *)(pp->rx_fis + RX_FIS_UNK);
1369
1370                 active_ehi->err_mask |= AC_ERR_HSM;
1371                 active_ehi->action |= ATA_EH_SOFTRESET;
1372                 ata_ehi_push_desc(active_ehi,
1373                                   "unknown FIS %08x %08x %08x %08x" ,
1374                                   unk[0], unk[1], unk[2], unk[3]);
1375         }
1376
1377         if (ap->nr_pmp_links && (irq_stat & PORT_IRQ_BAD_PMP)) {
1378                 active_ehi->err_mask |= AC_ERR_HSM;
1379                 active_ehi->action |= ATA_EH_SOFTRESET;
1380                 ata_ehi_push_desc(active_ehi, "incorrect PMP");
1381         }
1382
1383         if (irq_stat & (PORT_IRQ_HBUS_ERR | PORT_IRQ_HBUS_DATA_ERR)) {
1384                 host_ehi->err_mask |= AC_ERR_HOST_BUS;
1385                 host_ehi->action |= ATA_EH_SOFTRESET;
1386                 ata_ehi_push_desc(host_ehi, "host bus error");
1387         }
1388
1389         if (irq_stat & PORT_IRQ_IF_ERR) {
1390                 host_ehi->err_mask |= AC_ERR_ATA_BUS;
1391                 host_ehi->action |= ATA_EH_SOFTRESET;
1392                 ata_ehi_push_desc(host_ehi, "interface fatal error");
1393         }
1394
1395         if (irq_stat & (PORT_IRQ_CONNECT | PORT_IRQ_PHYRDY)) {
1396                 ata_ehi_hotplugged(host_ehi);
1397                 ata_ehi_push_desc(host_ehi, "%s",
1398                         irq_stat & PORT_IRQ_CONNECT ?
1399                         "connection status changed" : "PHY RDY changed");
1400         }
1401
1402         /* okay, let's hand over to EH */
1403
1404         if (irq_stat & PORT_IRQ_FREEZE)
1405                 ata_port_freeze(ap);
1406         else
1407                 ata_port_abort(ap);
1408 }
1409
1410 static void ahci_port_intr(struct ata_port *ap)
1411 {
1412         void __iomem *port_mmio = ap->ioaddr.cmd_addr;
1413         struct ata_eh_info *ehi = &ap->link.eh_info;
1414         struct ahci_port_priv *pp = ap->private_data;
1415         u32 status, qc_active;
1416         int rc, known_irq = 0;
1417
1418         status = readl(port_mmio + PORT_IRQ_STAT);
1419         writel(status, port_mmio + PORT_IRQ_STAT);
1420
1421         if (unlikely(status & PORT_IRQ_ERROR)) {
1422                 ahci_error_intr(ap, status);
1423                 return;
1424         }
1425
1426         if (status & PORT_IRQ_SDB_FIS) {
1427                 /* If the 'N' bit in word 0 of the FIS is set, we just
1428                  * received asynchronous notification.  Tell libata
1429                  * about it.  Note that as the SDB FIS itself is
1430                  * accessible, SNotification can be emulated by the
1431                  * driver but don't bother for the time being.
1432                  */
1433                 const __le32 *f = pp->rx_fis + RX_FIS_SDB;
1434                 u32 f0 = le32_to_cpu(f[0]);
1435
1436                 if (f0 & (1 << 15))
1437                         sata_async_notification(ap);
1438         }
1439
1440         /* pp->active_link is valid iff any command is in flight */
1441         if (ap->qc_active && pp->active_link->sactive)
1442                 qc_active = readl(port_mmio + PORT_SCR_ACT);
1443         else
1444                 qc_active = readl(port_mmio + PORT_CMD_ISSUE);
1445
1446         rc = ata_qc_complete_multiple(ap, qc_active, NULL);
1447         if (rc > 0)
1448                 return;
1449         if (rc < 0) {
1450                 ehi->err_mask |= AC_ERR_HSM;
1451                 ehi->action |= ATA_EH_SOFTRESET;
1452                 ata_port_freeze(ap);
1453                 return;
1454         }
1455
1456         /* hmmm... a spurious interupt */
1457
1458         /* if !NCQ, ignore.  No modern ATA device has broken HSM
1459          * implementation for non-NCQ commands.
1460          */
1461         if (!ap->link.sactive)
1462                 return;
1463
1464         if (status & PORT_IRQ_D2H_REG_FIS) {
1465                 if (!pp->ncq_saw_d2h)
1466                         ata_port_printk(ap, KERN_INFO,
1467                                 "D2H reg with I during NCQ, "
1468                                 "this message won't be printed again\n");
1469                 pp->ncq_saw_d2h = 1;
1470                 known_irq = 1;
1471         }
1472
1473         if (status & PORT_IRQ_DMAS_FIS) {
1474                 if (!pp->ncq_saw_dmas)
1475                         ata_port_printk(ap, KERN_INFO,
1476                                 "DMAS FIS during NCQ, "
1477                                 "this message won't be printed again\n");
1478                 pp->ncq_saw_dmas = 1;
1479                 known_irq = 1;
1480         }
1481
1482         if (status & PORT_IRQ_SDB_FIS) {
1483                 const __le32 *f = pp->rx_fis + RX_FIS_SDB;
1484
1485                 if (le32_to_cpu(f[1])) {
1486                         /* SDB FIS containing spurious completions
1487                          * might be dangerous, whine and fail commands
1488                          * with HSM violation.  EH will turn off NCQ
1489                          * after several such failures.
1490                          */
1491                         ata_ehi_push_desc(ehi,
1492                                 "spurious completions during NCQ "
1493                                 "issue=0x%x SAct=0x%x FIS=%08x:%08x",
1494                                 readl(port_mmio + PORT_CMD_ISSUE),
1495                                 readl(port_mmio + PORT_SCR_ACT),
1496                                 le32_to_cpu(f[0]), le32_to_cpu(f[1]));
1497                         ehi->err_mask |= AC_ERR_HSM;
1498                         ehi->action |= ATA_EH_SOFTRESET;
1499                         ata_port_freeze(ap);
1500                 } else {
1501                         if (!pp->ncq_saw_sdb)
1502                                 ata_port_printk(ap, KERN_INFO,
1503                                         "spurious SDB FIS %08x:%08x during NCQ, "
1504                                         "this message won't be printed again\n",
1505                                         le32_to_cpu(f[0]), le32_to_cpu(f[1]));
1506                         pp->ncq_saw_sdb = 1;
1507                 }
1508                 known_irq = 1;
1509         }
1510
1511         if (!known_irq)
1512                 ata_port_printk(ap, KERN_INFO, "spurious interrupt "
1513                                 "(irq_stat 0x%x active_tag 0x%x sactive 0x%x)\n",
1514                                 status, ap->link.active_tag, ap->link.sactive);
1515 }
1516
1517 static void ahci_irq_clear(struct ata_port *ap)
1518 {
1519         /* TODO */
1520 }
1521
1522 static irqreturn_t ahci_interrupt(int irq, void *dev_instance)
1523 {
1524         struct ata_host *host = dev_instance;
1525         struct ahci_host_priv *hpriv;
1526         unsigned int i, handled = 0;
1527         void __iomem *mmio;
1528         u32 irq_stat, irq_ack = 0;
1529
1530         VPRINTK("ENTER\n");
1531
1532         hpriv = host->private_data;
1533         mmio = host->iomap[AHCI_PCI_BAR];
1534
1535         /* sigh.  0xffffffff is a valid return from h/w */
1536         irq_stat = readl(mmio + HOST_IRQ_STAT);
1537         irq_stat &= hpriv->port_map;
1538         if (!irq_stat)
1539                 return IRQ_NONE;
1540
1541         spin_lock(&host->lock);
1542
1543         for (i = 0; i < host->n_ports; i++) {
1544                 struct ata_port *ap;
1545
1546                 if (!(irq_stat & (1 << i)))
1547                         continue;
1548
1549                 ap = host->ports[i];
1550                 if (ap) {
1551                         ahci_port_intr(ap);
1552                         VPRINTK("port %u\n", i);
1553                 } else {
1554                         VPRINTK("port %u (no irq)\n", i);
1555                         if (ata_ratelimit())
1556                                 dev_printk(KERN_WARNING, host->dev,
1557                                         "interrupt on disabled port %u\n", i);
1558                 }
1559
1560                 irq_ack |= (1 << i);
1561         }
1562
1563         if (irq_ack) {
1564                 writel(irq_ack, mmio + HOST_IRQ_STAT);
1565                 handled = 1;
1566         }
1567
1568         spin_unlock(&host->lock);
1569
1570         VPRINTK("EXIT\n");
1571
1572         return IRQ_RETVAL(handled);
1573 }
1574
1575 static unsigned int ahci_qc_issue(struct ata_queued_cmd *qc)
1576 {
1577         struct ata_port *ap = qc->ap;
1578         void __iomem *port_mmio = ahci_port_base(ap);
1579         struct ahci_port_priv *pp = ap->private_data;
1580
1581         /* Keep track of the currently active link.  It will be used
1582          * in completion path to determine whether NCQ phase is in
1583          * progress.
1584          */
1585         pp->active_link = qc->dev->link;
1586
1587         if (qc->tf.protocol == ATA_PROT_NCQ)
1588                 writel(1 << qc->tag, port_mmio + PORT_SCR_ACT);
1589         writel(1 << qc->tag, port_mmio + PORT_CMD_ISSUE);
1590         readl(port_mmio + PORT_CMD_ISSUE);      /* flush */
1591
1592         return 0;
1593 }
1594
1595 static void ahci_freeze(struct ata_port *ap)
1596 {
1597         void __iomem *port_mmio = ahci_port_base(ap);
1598
1599         /* turn IRQ off */
1600         writel(0, port_mmio + PORT_IRQ_MASK);
1601 }
1602
1603 static void ahci_thaw(struct ata_port *ap)
1604 {
1605         void __iomem *mmio = ap->host->iomap[AHCI_PCI_BAR];
1606         void __iomem *port_mmio = ahci_port_base(ap);
1607         u32 tmp;
1608         struct ahci_port_priv *pp = ap->private_data;
1609
1610         /* clear IRQ */
1611         tmp = readl(port_mmio + PORT_IRQ_STAT);
1612         writel(tmp, port_mmio + PORT_IRQ_STAT);
1613         writel(1 << ap->port_no, mmio + HOST_IRQ_STAT);
1614
1615         /* turn IRQ back on, ignore BAD_PMP if PMP isn't attached */
1616         tmp = pp->intr_mask;
1617         if (!ap->nr_pmp_links)
1618                 tmp &= ~PORT_IRQ_BAD_PMP;
1619         writel(tmp, port_mmio + PORT_IRQ_MASK);
1620 }
1621
1622 static void ahci_error_handler(struct ata_port *ap)
1623 {
1624         if (!(ap->pflags & ATA_PFLAG_FROZEN)) {
1625                 /* restart engine */
1626                 ahci_stop_engine(ap);
1627                 ahci_start_engine(ap);
1628         }
1629
1630         /* perform recovery */
1631         sata_pmp_do_eh(ap, ata_std_prereset, ahci_softreset,
1632                        ahci_hardreset, ahci_postreset,
1633                        sata_pmp_std_prereset, ahci_pmp_softreset,
1634                        sata_pmp_std_hardreset, sata_pmp_std_postreset);
1635 }
1636
1637 static void ahci_vt8251_error_handler(struct ata_port *ap)
1638 {
1639         if (!(ap->pflags & ATA_PFLAG_FROZEN)) {
1640                 /* restart engine */
1641                 ahci_stop_engine(ap);
1642                 ahci_start_engine(ap);
1643         }
1644
1645         /* perform recovery */
1646         ata_do_eh(ap, ata_std_prereset, ahci_softreset, ahci_vt8251_hardreset,
1647                   ahci_postreset);
1648 }
1649
1650 static void ahci_post_internal_cmd(struct ata_queued_cmd *qc)
1651 {
1652         struct ata_port *ap = qc->ap;
1653
1654         /* make DMA engine forget about the failed command */
1655         if (qc->flags & ATA_QCFLAG_FAILED)
1656                 ahci_kick_engine(ap, 1);
1657 }
1658
1659 static void ahci_pmp_attach(struct ata_port *ap)
1660 {
1661         void __iomem *port_mmio = ahci_port_base(ap);
1662         u32 cmd;
1663
1664         cmd = readl(port_mmio + PORT_CMD);
1665         cmd |= PORT_CMD_PMP;
1666         writel(cmd, port_mmio + PORT_CMD);
1667 }
1668
1669 static void ahci_pmp_detach(struct ata_port *ap)
1670 {
1671         void __iomem *port_mmio = ahci_port_base(ap);
1672         struct ahci_host_priv *hpriv = ap->host->private_data;
1673         unsigned long flags;
1674         u32 cmd;
1675
1676         cmd = readl(port_mmio + PORT_CMD);
1677         cmd &= ~PORT_CMD_PMP;
1678         writel(cmd, port_mmio + PORT_CMD);
1679
1680         if (hpriv->cap & HOST_CAP_NCQ) {
1681                 spin_lock_irqsave(ap->lock, flags);
1682                 ap->flags |= ATA_FLAG_NCQ;
1683                 spin_unlock_irqrestore(ap->lock, flags);
1684         }
1685 }
1686
1687 static int ahci_pmp_read(struct ata_device *dev, int pmp, int reg, u32 *r_val)
1688 {
1689         struct ata_port *ap = dev->link->ap;
1690         struct ata_taskfile tf;
1691         int rc;
1692
1693         ahci_kick_engine(ap, 0);
1694
1695         sata_pmp_read_init_tf(&tf, dev, pmp, reg);
1696         rc = ahci_exec_polled_cmd(ap, SATA_PMP_CTRL_PORT, &tf, 1, 0,
1697                                   SATA_PMP_SCR_TIMEOUT);
1698         if (rc == 0) {
1699                 ahci_tf_read(ap, &tf);
1700                 *r_val = sata_pmp_read_val(&tf);
1701         }
1702         return rc;
1703 }
1704
1705 static int ahci_pmp_write(struct ata_device *dev, int pmp, int reg, u32 val)
1706 {
1707         struct ata_port *ap = dev->link->ap;
1708         struct ata_taskfile tf;
1709
1710         ahci_kick_engine(ap, 0);
1711
1712         sata_pmp_write_init_tf(&tf, dev, pmp, reg, val);
1713         return ahci_exec_polled_cmd(ap, SATA_PMP_CTRL_PORT, &tf, 1, 0,
1714                                     SATA_PMP_SCR_TIMEOUT);
1715 }
1716
1717 static int ahci_port_resume(struct ata_port *ap)
1718 {
1719         ahci_power_up(ap);
1720         ahci_start_port(ap);
1721
1722         if (ap->nr_pmp_links)
1723                 ahci_pmp_attach(ap);
1724         else
1725                 ahci_pmp_detach(ap);
1726
1727         return 0;
1728 }
1729
1730 #ifdef CONFIG_PM
1731 static int ahci_port_suspend(struct ata_port *ap, pm_message_t mesg)
1732 {
1733         const char *emsg = NULL;
1734         int rc;
1735
1736         rc = ahci_deinit_port(ap, &emsg);
1737         if (rc == 0)
1738                 ahci_power_down(ap);
1739         else {
1740                 ata_port_printk(ap, KERN_ERR, "%s (%d)\n", emsg, rc);
1741                 ahci_start_port(ap);
1742         }
1743
1744         return rc;
1745 }
1746
1747 static int ahci_pci_device_suspend(struct pci_dev *pdev, pm_message_t mesg)
1748 {
1749         struct ata_host *host = dev_get_drvdata(&pdev->dev);
1750         void __iomem *mmio = host->iomap[AHCI_PCI_BAR];
1751         u32 ctl;
1752
1753         if (mesg.event == PM_EVENT_SUSPEND) {
1754                 /* AHCI spec rev1.1 section 8.3.3:
1755                  * Software must disable interrupts prior to requesting a
1756                  * transition of the HBA to D3 state.
1757                  */
1758                 ctl = readl(mmio + HOST_CTL);
1759                 ctl &= ~HOST_IRQ_EN;
1760                 writel(ctl, mmio + HOST_CTL);
1761                 readl(mmio + HOST_CTL); /* flush */
1762         }
1763
1764         return ata_pci_device_suspend(pdev, mesg);
1765 }
1766
1767 static int ahci_pci_device_resume(struct pci_dev *pdev)
1768 {
1769         struct ata_host *host = dev_get_drvdata(&pdev->dev);
1770         int rc;
1771
1772         rc = ata_pci_device_do_resume(pdev);
1773         if (rc)
1774                 return rc;
1775
1776         if (pdev->dev.power.power_state.event == PM_EVENT_SUSPEND) {
1777                 rc = ahci_reset_controller(host);
1778                 if (rc)
1779                         return rc;
1780
1781                 ahci_init_controller(host);
1782         }
1783
1784         ata_host_resume(host);
1785
1786         return 0;
1787 }
1788 #endif
1789
1790 static int ahci_port_start(struct ata_port *ap)
1791 {
1792         struct device *dev = ap->host->dev;
1793         struct ahci_port_priv *pp;
1794         void *mem;
1795         dma_addr_t mem_dma;
1796         int rc;
1797
1798         pp = devm_kzalloc(dev, sizeof(*pp), GFP_KERNEL);
1799         if (!pp)
1800                 return -ENOMEM;
1801
1802         rc = ata_pad_alloc(ap, dev);
1803         if (rc)
1804                 return rc;
1805
1806         mem = dmam_alloc_coherent(dev, AHCI_PORT_PRIV_DMA_SZ, &mem_dma,
1807                                   GFP_KERNEL);
1808         if (!mem)
1809                 return -ENOMEM;
1810         memset(mem, 0, AHCI_PORT_PRIV_DMA_SZ);
1811
1812         /*
1813          * First item in chunk of DMA memory: 32-slot command table,
1814          * 32 bytes each in size
1815          */
1816         pp->cmd_slot = mem;
1817         pp->cmd_slot_dma = mem_dma;
1818
1819         mem += AHCI_CMD_SLOT_SZ;
1820         mem_dma += AHCI_CMD_SLOT_SZ;
1821
1822         /*
1823          * Second item: Received-FIS area
1824          */
1825         pp->rx_fis = mem;
1826         pp->rx_fis_dma = mem_dma;
1827
1828         mem += AHCI_RX_FIS_SZ;
1829         mem_dma += AHCI_RX_FIS_SZ;
1830
1831         /*
1832          * Third item: data area for storing a single command
1833          * and its scatter-gather table
1834          */
1835         pp->cmd_tbl = mem;
1836         pp->cmd_tbl_dma = mem_dma;
1837
1838         /*
1839          * Save off initial list of interrupts to be enabled.
1840          * This could be changed later
1841          */
1842         pp->intr_mask = DEF_PORT_IRQ;
1843
1844         ap->private_data = pp;
1845
1846         /* engage engines, captain */
1847         return ahci_port_resume(ap);
1848 }
1849
1850 static void ahci_port_stop(struct ata_port *ap)
1851 {
1852         const char *emsg = NULL;
1853         int rc;
1854
1855         /* de-initialize port */
1856         rc = ahci_deinit_port(ap, &emsg);
1857         if (rc)
1858                 ata_port_printk(ap, KERN_WARNING, "%s (%d)\n", emsg, rc);
1859 }
1860
1861 static int ahci_configure_dma_masks(struct pci_dev *pdev, int using_dac)
1862 {
1863         int rc;
1864
1865         if (using_dac &&
1866             !pci_set_dma_mask(pdev, DMA_64BIT_MASK)) {
1867                 rc = pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK);
1868                 if (rc) {
1869                         rc = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK);
1870                         if (rc) {
1871                                 dev_printk(KERN_ERR, &pdev->dev,
1872                                            "64-bit DMA enable failed\n");
1873                                 return rc;
1874                         }
1875                 }
1876         } else {
1877                 rc = pci_set_dma_mask(pdev, DMA_32BIT_MASK);
1878                 if (rc) {
1879                         dev_printk(KERN_ERR, &pdev->dev,
1880                                    "32-bit DMA enable failed\n");
1881                         return rc;
1882                 }
1883                 rc = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK);
1884                 if (rc) {
1885                         dev_printk(KERN_ERR, &pdev->dev,
1886                                    "32-bit consistent DMA enable failed\n");
1887                         return rc;
1888                 }
1889         }
1890         return 0;
1891 }
1892
1893 static void ahci_print_info(struct ata_host *host)
1894 {
1895         struct ahci_host_priv *hpriv = host->private_data;
1896         struct pci_dev *pdev = to_pci_dev(host->dev);
1897         void __iomem *mmio = host->iomap[AHCI_PCI_BAR];
1898         u32 vers, cap, impl, speed;
1899         const char *speed_s;
1900         u16 cc;
1901         const char *scc_s;
1902
1903         vers = readl(mmio + HOST_VERSION);
1904         cap = hpriv->cap;
1905         impl = hpriv->port_map;
1906
1907         speed = (cap >> 20) & 0xf;
1908         if (speed == 1)
1909                 speed_s = "1.5";
1910         else if (speed == 2)
1911                 speed_s = "3";
1912         else
1913                 speed_s = "?";
1914
1915         pci_read_config_word(pdev, 0x0a, &cc);
1916         if (cc == PCI_CLASS_STORAGE_IDE)
1917                 scc_s = "IDE";
1918         else if (cc == PCI_CLASS_STORAGE_SATA)
1919                 scc_s = "SATA";
1920         else if (cc == PCI_CLASS_STORAGE_RAID)
1921                 scc_s = "RAID";
1922         else
1923                 scc_s = "unknown";
1924
1925         dev_printk(KERN_INFO, &pdev->dev,
1926                 "AHCI %02x%02x.%02x%02x "
1927                 "%u slots %u ports %s Gbps 0x%x impl %s mode\n"
1928                 ,
1929
1930                 (vers >> 24) & 0xff,
1931                 (vers >> 16) & 0xff,
1932                 (vers >> 8) & 0xff,
1933                 vers & 0xff,
1934
1935                 ((cap >> 8) & 0x1f) + 1,
1936                 (cap & 0x1f) + 1,
1937                 speed_s,
1938                 impl,
1939                 scc_s);
1940
1941         dev_printk(KERN_INFO, &pdev->dev,
1942                 "flags: "
1943                 "%s%s%s%s%s%s%s"
1944                 "%s%s%s%s%s%s%s\n"
1945                 ,
1946
1947                 cap & (1 << 31) ? "64bit " : "",
1948                 cap & (1 << 30) ? "ncq " : "",
1949                 cap & (1 << 29) ? "sntf " : "",
1950                 cap & (1 << 28) ? "ilck " : "",
1951                 cap & (1 << 27) ? "stag " : "",
1952                 cap & (1 << 26) ? "pm " : "",
1953                 cap & (1 << 25) ? "led " : "",
1954
1955                 cap & (1 << 24) ? "clo " : "",
1956                 cap & (1 << 19) ? "nz " : "",
1957                 cap & (1 << 18) ? "only " : "",
1958                 cap & (1 << 17) ? "pmp " : "",
1959                 cap & (1 << 15) ? "pio " : "",
1960                 cap & (1 << 14) ? "slum " : "",
1961                 cap & (1 << 13) ? "part " : ""
1962                 );
1963 }
1964
1965 static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
1966 {
1967         static int printed_version;
1968         struct ata_port_info pi = ahci_port_info[ent->driver_data];
1969         const struct ata_port_info *ppi[] = { &pi, NULL };
1970         struct device *dev = &pdev->dev;
1971         struct ahci_host_priv *hpriv;
1972         struct ata_host *host;
1973         int i, rc;
1974
1975         VPRINTK("ENTER\n");
1976
1977         WARN_ON(ATA_MAX_QUEUE > AHCI_MAX_CMDS);
1978
1979         if (!printed_version++)
1980                 dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n");
1981
1982         /* acquire resources */
1983         rc = pcim_enable_device(pdev);
1984         if (rc)
1985                 return rc;
1986
1987         rc = pcim_iomap_regions(pdev, 1 << AHCI_PCI_BAR, DRV_NAME);
1988         if (rc == -EBUSY)
1989                 pcim_pin_device(pdev);
1990         if (rc)
1991                 return rc;
1992
1993         hpriv = devm_kzalloc(dev, sizeof(*hpriv), GFP_KERNEL);
1994         if (!hpriv)
1995                 return -ENOMEM;
1996         hpriv->flags |= (unsigned long)pi.private_data;
1997
1998         if ((hpriv->flags & AHCI_HFLAG_NO_MSI) || pci_enable_msi(pdev))
1999                 pci_intx(pdev, 1);
2000
2001         /* save initial config */
2002         ahci_save_initial_config(pdev, hpriv);
2003
2004         /* prepare host */
2005         if (hpriv->cap & HOST_CAP_NCQ)
2006                 pi.flags |= ATA_FLAG_NCQ;
2007
2008         if (hpriv->cap & HOST_CAP_PMP)
2009                 pi.flags |= ATA_FLAG_PMP;
2010
2011         host = ata_host_alloc_pinfo(&pdev->dev, ppi, fls(hpriv->port_map));
2012         if (!host)
2013                 return -ENOMEM;
2014         host->iomap = pcim_iomap_table(pdev);
2015         host->private_data = hpriv;
2016
2017         for (i = 0; i < host->n_ports; i++) {
2018                 struct ata_port *ap = host->ports[i];
2019                 void __iomem *port_mmio = ahci_port_base(ap);
2020
2021                 ata_port_pbar_desc(ap, AHCI_PCI_BAR, -1, "abar");
2022                 ata_port_pbar_desc(ap, AHCI_PCI_BAR,
2023                                    0x100 + ap->port_no * 0x80, "port");
2024
2025                 /* standard SATA port setup */
2026                 if (hpriv->port_map & (1 << i))
2027                         ap->ioaddr.cmd_addr = port_mmio;
2028
2029                 /* disabled/not-implemented port */
2030                 else
2031                         ap->ops = &ata_dummy_port_ops;
2032         }
2033
2034         /* initialize adapter */
2035         rc = ahci_configure_dma_masks(pdev, hpriv->cap & HOST_CAP_64);
2036         if (rc)
2037                 return rc;
2038
2039         rc = ahci_reset_controller(host);
2040         if (rc)
2041                 return rc;
2042
2043         ahci_init_controller(host);
2044         ahci_print_info(host);
2045
2046         pci_set_master(pdev);
2047         return ata_host_activate(host, pdev->irq, ahci_interrupt, IRQF_SHARED,
2048                                  &ahci_sht);
2049 }
2050
2051 static int __init ahci_init(void)
2052 {
2053         return pci_register_driver(&ahci_pci_driver);
2054 }
2055
2056 static void __exit ahci_exit(void)
2057 {
2058         pci_unregister_driver(&ahci_pci_driver);
2059 }
2060
2061
2062 MODULE_AUTHOR("Jeff Garzik");
2063 MODULE_DESCRIPTION("AHCI SATA low-level driver");
2064 MODULE_LICENSE("GPL");
2065 MODULE_DEVICE_TABLE(pci, ahci_pci_tbl);
2066 MODULE_VERSION(DRV_VERSION);
2067
2068 module_init(ahci_init);
2069 module_exit(ahci_exit);