Merge commit 'v2.6.34-rc1' into perf/urgent
[pandora-kernel.git] / drivers / ata / sata_nv.c
1 /*
2  *  sata_nv.c - NVIDIA nForce SATA
3  *
4  *  Copyright 2004 NVIDIA Corp.  All rights reserved.
5  *  Copyright 2004 Andrew Chew
6  *
7  *
8  *  This program is free software; you can redistribute it and/or modify
9  *  it under the terms of the GNU General Public License as published by
10  *  the Free Software Foundation; either version 2, or (at your option)
11  *  any later version.
12  *
13  *  This program is distributed in the hope that it will be useful,
14  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  *  GNU General Public License for more details.
17  *
18  *  You should have received a copy of the GNU General Public License
19  *  along with this program; see the file COPYING.  If not, write to
20  *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
21  *
22  *
23  *  libata documentation is available via 'make {ps|pdf}docs',
24  *  as Documentation/DocBook/libata.*
25  *
26  *  No hardware documentation available outside of NVIDIA.
27  *  This driver programs the NVIDIA SATA controller in a similar
28  *  fashion as with other PCI IDE BMDMA controllers, with a few
29  *  NV-specific details such as register offsets, SATA phy location,
30  *  hotplug info, etc.
31  *
32  *  CK804/MCP04 controllers support an alternate programming interface
33  *  similar to the ADMA specification (with some modifications).
34  *  This allows the use of NCQ. Non-DMA-mapped ATA commands are still
35  *  sent through the legacy interface.
36  *
37  */
38
39 #include <linux/kernel.h>
40 #include <linux/module.h>
41 #include <linux/pci.h>
42 #include <linux/init.h>
43 #include <linux/blkdev.h>
44 #include <linux/delay.h>
45 #include <linux/interrupt.h>
46 #include <linux/device.h>
47 #include <scsi/scsi_host.h>
48 #include <scsi/scsi_device.h>
49 #include <linux/libata.h>
50
51 #define DRV_NAME                        "sata_nv"
52 #define DRV_VERSION                     "3.5"
53
54 #define NV_ADMA_DMA_BOUNDARY            0xffffffffUL
55
56 enum {
57         NV_MMIO_BAR                     = 5,
58
59         NV_PORTS                        = 2,
60         NV_PIO_MASK                     = ATA_PIO4,
61         NV_MWDMA_MASK                   = ATA_MWDMA2,
62         NV_UDMA_MASK                    = ATA_UDMA6,
63         NV_PORT0_SCR_REG_OFFSET         = 0x00,
64         NV_PORT1_SCR_REG_OFFSET         = 0x40,
65
66         /* INT_STATUS/ENABLE */
67         NV_INT_STATUS                   = 0x10,
68         NV_INT_ENABLE                   = 0x11,
69         NV_INT_STATUS_CK804             = 0x440,
70         NV_INT_ENABLE_CK804             = 0x441,
71
72         /* INT_STATUS/ENABLE bits */
73         NV_INT_DEV                      = 0x01,
74         NV_INT_PM                       = 0x02,
75         NV_INT_ADDED                    = 0x04,
76         NV_INT_REMOVED                  = 0x08,
77
78         NV_INT_PORT_SHIFT               = 4,    /* each port occupies 4 bits */
79
80         NV_INT_ALL                      = 0x0f,
81         NV_INT_MASK                     = NV_INT_DEV |
82                                           NV_INT_ADDED | NV_INT_REMOVED,
83
84         /* INT_CONFIG */
85         NV_INT_CONFIG                   = 0x12,
86         NV_INT_CONFIG_METHD             = 0x01, // 0 = INT, 1 = SMI
87
88         // For PCI config register 20
89         NV_MCP_SATA_CFG_20              = 0x50,
90         NV_MCP_SATA_CFG_20_SATA_SPACE_EN = 0x04,
91         NV_MCP_SATA_CFG_20_PORT0_EN     = (1 << 17),
92         NV_MCP_SATA_CFG_20_PORT1_EN     = (1 << 16),
93         NV_MCP_SATA_CFG_20_PORT0_PWB_EN = (1 << 14),
94         NV_MCP_SATA_CFG_20_PORT1_PWB_EN = (1 << 12),
95
96         NV_ADMA_MAX_CPBS                = 32,
97         NV_ADMA_CPB_SZ                  = 128,
98         NV_ADMA_APRD_SZ                 = 16,
99         NV_ADMA_SGTBL_LEN               = (1024 - NV_ADMA_CPB_SZ) /
100                                            NV_ADMA_APRD_SZ,
101         NV_ADMA_SGTBL_TOTAL_LEN         = NV_ADMA_SGTBL_LEN + 5,
102         NV_ADMA_SGTBL_SZ                = NV_ADMA_SGTBL_LEN * NV_ADMA_APRD_SZ,
103         NV_ADMA_PORT_PRIV_DMA_SZ        = NV_ADMA_MAX_CPBS *
104                                            (NV_ADMA_CPB_SZ + NV_ADMA_SGTBL_SZ),
105
106         /* BAR5 offset to ADMA general registers */
107         NV_ADMA_GEN                     = 0x400,
108         NV_ADMA_GEN_CTL                 = 0x00,
109         NV_ADMA_NOTIFIER_CLEAR          = 0x30,
110
111         /* BAR5 offset to ADMA ports */
112         NV_ADMA_PORT                    = 0x480,
113
114         /* size of ADMA port register space  */
115         NV_ADMA_PORT_SIZE               = 0x100,
116
117         /* ADMA port registers */
118         NV_ADMA_CTL                     = 0x40,
119         NV_ADMA_CPB_COUNT               = 0x42,
120         NV_ADMA_NEXT_CPB_IDX            = 0x43,
121         NV_ADMA_STAT                    = 0x44,
122         NV_ADMA_CPB_BASE_LOW            = 0x48,
123         NV_ADMA_CPB_BASE_HIGH           = 0x4C,
124         NV_ADMA_APPEND                  = 0x50,
125         NV_ADMA_NOTIFIER                = 0x68,
126         NV_ADMA_NOTIFIER_ERROR          = 0x6C,
127
128         /* NV_ADMA_CTL register bits */
129         NV_ADMA_CTL_HOTPLUG_IEN         = (1 << 0),
130         NV_ADMA_CTL_CHANNEL_RESET       = (1 << 5),
131         NV_ADMA_CTL_GO                  = (1 << 7),
132         NV_ADMA_CTL_AIEN                = (1 << 8),
133         NV_ADMA_CTL_READ_NON_COHERENT   = (1 << 11),
134         NV_ADMA_CTL_WRITE_NON_COHERENT  = (1 << 12),
135
136         /* CPB response flag bits */
137         NV_CPB_RESP_DONE                = (1 << 0),
138         NV_CPB_RESP_ATA_ERR             = (1 << 3),
139         NV_CPB_RESP_CMD_ERR             = (1 << 4),
140         NV_CPB_RESP_CPB_ERR             = (1 << 7),
141
142         /* CPB control flag bits */
143         NV_CPB_CTL_CPB_VALID            = (1 << 0),
144         NV_CPB_CTL_QUEUE                = (1 << 1),
145         NV_CPB_CTL_APRD_VALID           = (1 << 2),
146         NV_CPB_CTL_IEN                  = (1 << 3),
147         NV_CPB_CTL_FPDMA                = (1 << 4),
148
149         /* APRD flags */
150         NV_APRD_WRITE                   = (1 << 1),
151         NV_APRD_END                     = (1 << 2),
152         NV_APRD_CONT                    = (1 << 3),
153
154         /* NV_ADMA_STAT flags */
155         NV_ADMA_STAT_TIMEOUT            = (1 << 0),
156         NV_ADMA_STAT_HOTUNPLUG          = (1 << 1),
157         NV_ADMA_STAT_HOTPLUG            = (1 << 2),
158         NV_ADMA_STAT_CPBERR             = (1 << 4),
159         NV_ADMA_STAT_SERROR             = (1 << 5),
160         NV_ADMA_STAT_CMD_COMPLETE       = (1 << 6),
161         NV_ADMA_STAT_IDLE               = (1 << 8),
162         NV_ADMA_STAT_LEGACY             = (1 << 9),
163         NV_ADMA_STAT_STOPPED            = (1 << 10),
164         NV_ADMA_STAT_DONE               = (1 << 12),
165         NV_ADMA_STAT_ERR                = NV_ADMA_STAT_CPBERR |
166                                           NV_ADMA_STAT_TIMEOUT,
167
168         /* port flags */
169         NV_ADMA_PORT_REGISTER_MODE      = (1 << 0),
170         NV_ADMA_ATAPI_SETUP_COMPLETE    = (1 << 1),
171
172         /* MCP55 reg offset */
173         NV_CTL_MCP55                    = 0x400,
174         NV_INT_STATUS_MCP55             = 0x440,
175         NV_INT_ENABLE_MCP55             = 0x444,
176         NV_NCQ_REG_MCP55                = 0x448,
177
178         /* MCP55 */
179         NV_INT_ALL_MCP55                = 0xffff,
180         NV_INT_PORT_SHIFT_MCP55         = 16,   /* each port occupies 16 bits */
181         NV_INT_MASK_MCP55               = NV_INT_ALL_MCP55 & 0xfffd,
182
183         /* SWNCQ ENABLE BITS*/
184         NV_CTL_PRI_SWNCQ                = 0x02,
185         NV_CTL_SEC_SWNCQ                = 0x04,
186
187         /* SW NCQ status bits*/
188         NV_SWNCQ_IRQ_DEV                = (1 << 0),
189         NV_SWNCQ_IRQ_PM                 = (1 << 1),
190         NV_SWNCQ_IRQ_ADDED              = (1 << 2),
191         NV_SWNCQ_IRQ_REMOVED            = (1 << 3),
192
193         NV_SWNCQ_IRQ_BACKOUT            = (1 << 4),
194         NV_SWNCQ_IRQ_SDBFIS             = (1 << 5),
195         NV_SWNCQ_IRQ_DHREGFIS           = (1 << 6),
196         NV_SWNCQ_IRQ_DMASETUP           = (1 << 7),
197
198         NV_SWNCQ_IRQ_HOTPLUG            = NV_SWNCQ_IRQ_ADDED |
199                                           NV_SWNCQ_IRQ_REMOVED,
200
201 };
202
203 /* ADMA Physical Region Descriptor - one SG segment */
204 struct nv_adma_prd {
205         __le64                  addr;
206         __le32                  len;
207         u8                      flags;
208         u8                      packet_len;
209         __le16                  reserved;
210 };
211
212 enum nv_adma_regbits {
213         CMDEND  = (1 << 15),            /* end of command list */
214         WNB     = (1 << 14),            /* wait-not-BSY */
215         IGN     = (1 << 13),            /* ignore this entry */
216         CS1n    = (1 << (4 + 8)),       /* std. PATA signals follow... */
217         DA2     = (1 << (2 + 8)),
218         DA1     = (1 << (1 + 8)),
219         DA0     = (1 << (0 + 8)),
220 };
221
222 /* ADMA Command Parameter Block
223    The first 5 SG segments are stored inside the Command Parameter Block itself.
224    If there are more than 5 segments the remainder are stored in a separate
225    memory area indicated by next_aprd. */
226 struct nv_adma_cpb {
227         u8                      resp_flags;    /* 0 */
228         u8                      reserved1;     /* 1 */
229         u8                      ctl_flags;     /* 2 */
230         /* len is length of taskfile in 64 bit words */
231         u8                      len;            /* 3  */
232         u8                      tag;           /* 4 */
233         u8                      next_cpb_idx;  /* 5 */
234         __le16                  reserved2;     /* 6-7 */
235         __le16                  tf[12];        /* 8-31 */
236         struct nv_adma_prd      aprd[5];       /* 32-111 */
237         __le64                  next_aprd;     /* 112-119 */
238         __le64                  reserved3;     /* 120-127 */
239 };
240
241
242 struct nv_adma_port_priv {
243         struct nv_adma_cpb      *cpb;
244         dma_addr_t              cpb_dma;
245         struct nv_adma_prd      *aprd;
246         dma_addr_t              aprd_dma;
247         void __iomem            *ctl_block;
248         void __iomem            *gen_block;
249         void __iomem            *notifier_clear_block;
250         u64                     adma_dma_mask;
251         u8                      flags;
252         int                     last_issue_ncq;
253 };
254
255 struct nv_host_priv {
256         unsigned long           type;
257 };
258
259 struct defer_queue {
260         u32             defer_bits;
261         unsigned int    head;
262         unsigned int    tail;
263         unsigned int    tag[ATA_MAX_QUEUE];
264 };
265
266 enum ncq_saw_flag_list {
267         ncq_saw_d2h     = (1U << 0),
268         ncq_saw_dmas    = (1U << 1),
269         ncq_saw_sdb     = (1U << 2),
270         ncq_saw_backout = (1U << 3),
271 };
272
273 struct nv_swncq_port_priv {
274         struct ata_prd  *prd;    /* our SG list */
275         dma_addr_t      prd_dma; /* and its DMA mapping */
276         void __iomem    *sactive_block;
277         void __iomem    *irq_block;
278         void __iomem    *tag_block;
279         u32             qc_active;
280
281         unsigned int    last_issue_tag;
282
283         /* fifo circular queue to store deferral command */
284         struct defer_queue defer_queue;
285
286         /* for NCQ interrupt analysis */
287         u32             dhfis_bits;
288         u32             dmafis_bits;
289         u32             sdbfis_bits;
290
291         unsigned int    ncq_flags;
292 };
293
294
295 #define NV_ADMA_CHECK_INTR(GCTL, PORT) ((GCTL) & (1 << (19 + (12 * (PORT)))))
296
297 static int nv_init_one(struct pci_dev *pdev, const struct pci_device_id *ent);
298 #ifdef CONFIG_PM
299 static int nv_pci_device_resume(struct pci_dev *pdev);
300 #endif
301 static void nv_ck804_host_stop(struct ata_host *host);
302 static irqreturn_t nv_generic_interrupt(int irq, void *dev_instance);
303 static irqreturn_t nv_nf2_interrupt(int irq, void *dev_instance);
304 static irqreturn_t nv_ck804_interrupt(int irq, void *dev_instance);
305 static int nv_scr_read(struct ata_link *link, unsigned int sc_reg, u32 *val);
306 static int nv_scr_write(struct ata_link *link, unsigned int sc_reg, u32 val);
307
308 static int nv_hardreset(struct ata_link *link, unsigned int *class,
309                         unsigned long deadline);
310 static void nv_nf2_freeze(struct ata_port *ap);
311 static void nv_nf2_thaw(struct ata_port *ap);
312 static void nv_ck804_freeze(struct ata_port *ap);
313 static void nv_ck804_thaw(struct ata_port *ap);
314 static int nv_adma_slave_config(struct scsi_device *sdev);
315 static int nv_adma_check_atapi_dma(struct ata_queued_cmd *qc);
316 static void nv_adma_qc_prep(struct ata_queued_cmd *qc);
317 static unsigned int nv_adma_qc_issue(struct ata_queued_cmd *qc);
318 static irqreturn_t nv_adma_interrupt(int irq, void *dev_instance);
319 static void nv_adma_irq_clear(struct ata_port *ap);
320 static int nv_adma_port_start(struct ata_port *ap);
321 static void nv_adma_port_stop(struct ata_port *ap);
322 #ifdef CONFIG_PM
323 static int nv_adma_port_suspend(struct ata_port *ap, pm_message_t mesg);
324 static int nv_adma_port_resume(struct ata_port *ap);
325 #endif
326 static void nv_adma_freeze(struct ata_port *ap);
327 static void nv_adma_thaw(struct ata_port *ap);
328 static void nv_adma_error_handler(struct ata_port *ap);
329 static void nv_adma_host_stop(struct ata_host *host);
330 static void nv_adma_post_internal_cmd(struct ata_queued_cmd *qc);
331 static void nv_adma_tf_read(struct ata_port *ap, struct ata_taskfile *tf);
332
333 static void nv_mcp55_thaw(struct ata_port *ap);
334 static void nv_mcp55_freeze(struct ata_port *ap);
335 static void nv_swncq_error_handler(struct ata_port *ap);
336 static int nv_swncq_slave_config(struct scsi_device *sdev);
337 static int nv_swncq_port_start(struct ata_port *ap);
338 static void nv_swncq_qc_prep(struct ata_queued_cmd *qc);
339 static void nv_swncq_fill_sg(struct ata_queued_cmd *qc);
340 static unsigned int nv_swncq_qc_issue(struct ata_queued_cmd *qc);
341 static void nv_swncq_irq_clear(struct ata_port *ap, u16 fis);
342 static irqreturn_t nv_swncq_interrupt(int irq, void *dev_instance);
343 #ifdef CONFIG_PM
344 static int nv_swncq_port_suspend(struct ata_port *ap, pm_message_t mesg);
345 static int nv_swncq_port_resume(struct ata_port *ap);
346 #endif
347
348 enum nv_host_type
349 {
350         GENERIC,
351         NFORCE2,
352         NFORCE3 = NFORCE2,      /* NF2 == NF3 as far as sata_nv is concerned */
353         CK804,
354         ADMA,
355         MCP5x,
356         SWNCQ,
357 };
358
359 static const struct pci_device_id nv_pci_tbl[] = {
360         { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE2S_SATA), NFORCE2 },
361         { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA), NFORCE3 },
362         { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA2), NFORCE3 },
363         { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_SATA), CK804 },
364         { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_SATA2), CK804 },
365         { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA), CK804 },
366         { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA2), CK804 },
367         { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_SATA), MCP5x },
368         { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_SATA2), MCP5x },
369         { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_SATA), MCP5x },
370         { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_SATA2), MCP5x },
371         { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SATA), GENERIC },
372         { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SATA2), GENERIC },
373         { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SATA3), GENERIC },
374
375         { } /* terminate list */
376 };
377
378 static struct pci_driver nv_pci_driver = {
379         .name                   = DRV_NAME,
380         .id_table               = nv_pci_tbl,
381         .probe                  = nv_init_one,
382 #ifdef CONFIG_PM
383         .suspend                = ata_pci_device_suspend,
384         .resume                 = nv_pci_device_resume,
385 #endif
386         .remove                 = ata_pci_remove_one,
387 };
388
389 static struct scsi_host_template nv_sht = {
390         ATA_BMDMA_SHT(DRV_NAME),
391 };
392
393 static struct scsi_host_template nv_adma_sht = {
394         ATA_NCQ_SHT(DRV_NAME),
395         .can_queue              = NV_ADMA_MAX_CPBS,
396         .sg_tablesize           = NV_ADMA_SGTBL_TOTAL_LEN,
397         .dma_boundary           = NV_ADMA_DMA_BOUNDARY,
398         .slave_configure        = nv_adma_slave_config,
399 };
400
401 static struct scsi_host_template nv_swncq_sht = {
402         ATA_NCQ_SHT(DRV_NAME),
403         .can_queue              = ATA_MAX_QUEUE,
404         .sg_tablesize           = LIBATA_MAX_PRD,
405         .dma_boundary           = ATA_DMA_BOUNDARY,
406         .slave_configure        = nv_swncq_slave_config,
407 };
408
409 /*
410  * NV SATA controllers have various different problems with hardreset
411  * protocol depending on the specific controller and device.
412  *
413  * GENERIC:
414  *
415  *  bko11195 reports that link doesn't come online after hardreset on
416  *  generic nv's and there have been several other similar reports on
417  *  linux-ide.
418  *
419  *  bko12351#c23 reports that warmplug on MCP61 doesn't work with
420  *  softreset.
421  *
422  * NF2/3:
423  *
424  *  bko3352 reports nf2/3 controllers can't determine device signature
425  *  reliably after hardreset.  The following thread reports detection
426  *  failure on cold boot with the standard debouncing timing.
427  *
428  *  http://thread.gmane.org/gmane.linux.ide/34098
429  *
430  *  bko12176 reports that hardreset fails to bring up the link during
431  *  boot on nf2.
432  *
433  * CK804:
434  *
435  *  For initial probing after boot and hot plugging, hardreset mostly
436  *  works fine on CK804 but curiously, reprobing on the initial port
437  *  by rescanning or rmmod/insmod fails to acquire the initial D2H Reg
438  *  FIS in somewhat undeterministic way.
439  *
440  * SWNCQ:
441  *
442  *  bko12351 reports that when SWNCQ is enabled, for hotplug to work,
443  *  hardreset should be used and hardreset can't report proper
444  *  signature, which suggests that mcp5x is closer to nf2 as long as
445  *  reset quirkiness is concerned.
446  *
447  *  bko12703 reports that boot probing fails for intel SSD with
448  *  hardreset.  Link fails to come online.  Softreset works fine.
449  *
450  * The failures are varied but the following patterns seem true for
451  * all flavors.
452  *
453  * - Softreset during boot always works.
454  *
455  * - Hardreset during boot sometimes fails to bring up the link on
456  *   certain comibnations and device signature acquisition is
457  *   unreliable.
458  *
459  * - Hardreset is often necessary after hotplug.
460  *
461  * So, preferring softreset for boot probing and error handling (as
462  * hardreset might bring down the link) but using hardreset for
463  * post-boot probing should work around the above issues in most
464  * cases.  Define nv_hardreset() which only kicks in for post-boot
465  * probing and use it for all variants.
466  */
467 static struct ata_port_operations nv_generic_ops = {
468         .inherits               = &ata_bmdma_port_ops,
469         .lost_interrupt         = ATA_OP_NULL,
470         .scr_read               = nv_scr_read,
471         .scr_write              = nv_scr_write,
472         .hardreset              = nv_hardreset,
473 };
474
475 static struct ata_port_operations nv_nf2_ops = {
476         .inherits               = &nv_generic_ops,
477         .freeze                 = nv_nf2_freeze,
478         .thaw                   = nv_nf2_thaw,
479 };
480
481 static struct ata_port_operations nv_ck804_ops = {
482         .inherits               = &nv_generic_ops,
483         .freeze                 = nv_ck804_freeze,
484         .thaw                   = nv_ck804_thaw,
485         .host_stop              = nv_ck804_host_stop,
486 };
487
488 static struct ata_port_operations nv_adma_ops = {
489         .inherits               = &nv_ck804_ops,
490
491         .check_atapi_dma        = nv_adma_check_atapi_dma,
492         .sff_tf_read            = nv_adma_tf_read,
493         .qc_defer               = ata_std_qc_defer,
494         .qc_prep                = nv_adma_qc_prep,
495         .qc_issue               = nv_adma_qc_issue,
496         .sff_irq_clear          = nv_adma_irq_clear,
497
498         .freeze                 = nv_adma_freeze,
499         .thaw                   = nv_adma_thaw,
500         .error_handler          = nv_adma_error_handler,
501         .post_internal_cmd      = nv_adma_post_internal_cmd,
502
503         .port_start             = nv_adma_port_start,
504         .port_stop              = nv_adma_port_stop,
505 #ifdef CONFIG_PM
506         .port_suspend           = nv_adma_port_suspend,
507         .port_resume            = nv_adma_port_resume,
508 #endif
509         .host_stop              = nv_adma_host_stop,
510 };
511
512 static struct ata_port_operations nv_swncq_ops = {
513         .inherits               = &nv_generic_ops,
514
515         .qc_defer               = ata_std_qc_defer,
516         .qc_prep                = nv_swncq_qc_prep,
517         .qc_issue               = nv_swncq_qc_issue,
518
519         .freeze                 = nv_mcp55_freeze,
520         .thaw                   = nv_mcp55_thaw,
521         .error_handler          = nv_swncq_error_handler,
522
523 #ifdef CONFIG_PM
524         .port_suspend           = nv_swncq_port_suspend,
525         .port_resume            = nv_swncq_port_resume,
526 #endif
527         .port_start             = nv_swncq_port_start,
528 };
529
530 struct nv_pi_priv {
531         irq_handler_t                   irq_handler;
532         struct scsi_host_template       *sht;
533 };
534
535 #define NV_PI_PRIV(_irq_handler, _sht) \
536         &(struct nv_pi_priv){ .irq_handler = _irq_handler, .sht = _sht }
537
538 static const struct ata_port_info nv_port_info[] = {
539         /* generic */
540         {
541                 .flags          = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY,
542                 .pio_mask       = NV_PIO_MASK,
543                 .mwdma_mask     = NV_MWDMA_MASK,
544                 .udma_mask      = NV_UDMA_MASK,
545                 .port_ops       = &nv_generic_ops,
546                 .private_data   = NV_PI_PRIV(nv_generic_interrupt, &nv_sht),
547         },
548         /* nforce2/3 */
549         {
550                 .flags          = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY,
551                 .pio_mask       = NV_PIO_MASK,
552                 .mwdma_mask     = NV_MWDMA_MASK,
553                 .udma_mask      = NV_UDMA_MASK,
554                 .port_ops       = &nv_nf2_ops,
555                 .private_data   = NV_PI_PRIV(nv_nf2_interrupt, &nv_sht),
556         },
557         /* ck804 */
558         {
559                 .flags          = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY,
560                 .pio_mask       = NV_PIO_MASK,
561                 .mwdma_mask     = NV_MWDMA_MASK,
562                 .udma_mask      = NV_UDMA_MASK,
563                 .port_ops       = &nv_ck804_ops,
564                 .private_data   = NV_PI_PRIV(nv_ck804_interrupt, &nv_sht),
565         },
566         /* ADMA */
567         {
568                 .flags          = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
569                                   ATA_FLAG_MMIO | ATA_FLAG_NCQ,
570                 .pio_mask       = NV_PIO_MASK,
571                 .mwdma_mask     = NV_MWDMA_MASK,
572                 .udma_mask      = NV_UDMA_MASK,
573                 .port_ops       = &nv_adma_ops,
574                 .private_data   = NV_PI_PRIV(nv_adma_interrupt, &nv_adma_sht),
575         },
576         /* MCP5x */
577         {
578                 .flags          = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY,
579                 .pio_mask       = NV_PIO_MASK,
580                 .mwdma_mask     = NV_MWDMA_MASK,
581                 .udma_mask      = NV_UDMA_MASK,
582                 .port_ops       = &nv_generic_ops,
583                 .private_data   = NV_PI_PRIV(nv_generic_interrupt, &nv_sht),
584         },
585         /* SWNCQ */
586         {
587                 .flags          = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
588                                   ATA_FLAG_NCQ,
589                 .pio_mask       = NV_PIO_MASK,
590                 .mwdma_mask     = NV_MWDMA_MASK,
591                 .udma_mask      = NV_UDMA_MASK,
592                 .port_ops       = &nv_swncq_ops,
593                 .private_data   = NV_PI_PRIV(nv_swncq_interrupt, &nv_swncq_sht),
594         },
595 };
596
597 MODULE_AUTHOR("NVIDIA");
598 MODULE_DESCRIPTION("low-level driver for NVIDIA nForce SATA controller");
599 MODULE_LICENSE("GPL");
600 MODULE_DEVICE_TABLE(pci, nv_pci_tbl);
601 MODULE_VERSION(DRV_VERSION);
602
603 static int adma_enabled;
604 static int swncq_enabled = 1;
605 static int msi_enabled;
606
607 static void nv_adma_register_mode(struct ata_port *ap)
608 {
609         struct nv_adma_port_priv *pp = ap->private_data;
610         void __iomem *mmio = pp->ctl_block;
611         u16 tmp, status;
612         int count = 0;
613
614         if (pp->flags & NV_ADMA_PORT_REGISTER_MODE)
615                 return;
616
617         status = readw(mmio + NV_ADMA_STAT);
618         while (!(status & NV_ADMA_STAT_IDLE) && count < 20) {
619                 ndelay(50);
620                 status = readw(mmio + NV_ADMA_STAT);
621                 count++;
622         }
623         if (count == 20)
624                 ata_port_printk(ap, KERN_WARNING,
625                         "timeout waiting for ADMA IDLE, stat=0x%hx\n",
626                         status);
627
628         tmp = readw(mmio + NV_ADMA_CTL);
629         writew(tmp & ~NV_ADMA_CTL_GO, mmio + NV_ADMA_CTL);
630
631         count = 0;
632         status = readw(mmio + NV_ADMA_STAT);
633         while (!(status & NV_ADMA_STAT_LEGACY) && count < 20) {
634                 ndelay(50);
635                 status = readw(mmio + NV_ADMA_STAT);
636                 count++;
637         }
638         if (count == 20)
639                 ata_port_printk(ap, KERN_WARNING,
640                          "timeout waiting for ADMA LEGACY, stat=0x%hx\n",
641                          status);
642
643         pp->flags |= NV_ADMA_PORT_REGISTER_MODE;
644 }
645
646 static void nv_adma_mode(struct ata_port *ap)
647 {
648         struct nv_adma_port_priv *pp = ap->private_data;
649         void __iomem *mmio = pp->ctl_block;
650         u16 tmp, status;
651         int count = 0;
652
653         if (!(pp->flags & NV_ADMA_PORT_REGISTER_MODE))
654                 return;
655
656         WARN_ON(pp->flags & NV_ADMA_ATAPI_SETUP_COMPLETE);
657
658         tmp = readw(mmio + NV_ADMA_CTL);
659         writew(tmp | NV_ADMA_CTL_GO, mmio + NV_ADMA_CTL);
660
661         status = readw(mmio + NV_ADMA_STAT);
662         while (((status & NV_ADMA_STAT_LEGACY) ||
663               !(status & NV_ADMA_STAT_IDLE)) && count < 20) {
664                 ndelay(50);
665                 status = readw(mmio + NV_ADMA_STAT);
666                 count++;
667         }
668         if (count == 20)
669                 ata_port_printk(ap, KERN_WARNING,
670                         "timeout waiting for ADMA LEGACY clear and IDLE, stat=0x%hx\n",
671                         status);
672
673         pp->flags &= ~NV_ADMA_PORT_REGISTER_MODE;
674 }
675
676 static int nv_adma_slave_config(struct scsi_device *sdev)
677 {
678         struct ata_port *ap = ata_shost_to_port(sdev->host);
679         struct nv_adma_port_priv *pp = ap->private_data;
680         struct nv_adma_port_priv *port0, *port1;
681         struct scsi_device *sdev0, *sdev1;
682         struct pci_dev *pdev = to_pci_dev(ap->host->dev);
683         unsigned long segment_boundary, flags;
684         unsigned short sg_tablesize;
685         int rc;
686         int adma_enable;
687         u32 current_reg, new_reg, config_mask;
688
689         rc = ata_scsi_slave_config(sdev);
690
691         if (sdev->id >= ATA_MAX_DEVICES || sdev->channel || sdev->lun)
692                 /* Not a proper libata device, ignore */
693                 return rc;
694
695         spin_lock_irqsave(ap->lock, flags);
696
697         if (ap->link.device[sdev->id].class == ATA_DEV_ATAPI) {
698                 /*
699                  * NVIDIA reports that ADMA mode does not support ATAPI commands.
700                  * Therefore ATAPI commands are sent through the legacy interface.
701                  * However, the legacy interface only supports 32-bit DMA.
702                  * Restrict DMA parameters as required by the legacy interface
703                  * when an ATAPI device is connected.
704                  */
705                 segment_boundary = ATA_DMA_BOUNDARY;
706                 /* Subtract 1 since an extra entry may be needed for padding, see
707                    libata-scsi.c */
708                 sg_tablesize = LIBATA_MAX_PRD - 1;
709
710                 /* Since the legacy DMA engine is in use, we need to disable ADMA
711                    on the port. */
712                 adma_enable = 0;
713                 nv_adma_register_mode(ap);
714         } else {
715                 segment_boundary = NV_ADMA_DMA_BOUNDARY;
716                 sg_tablesize = NV_ADMA_SGTBL_TOTAL_LEN;
717                 adma_enable = 1;
718         }
719
720         pci_read_config_dword(pdev, NV_MCP_SATA_CFG_20, &current_reg);
721
722         if (ap->port_no == 1)
723                 config_mask = NV_MCP_SATA_CFG_20_PORT1_EN |
724                               NV_MCP_SATA_CFG_20_PORT1_PWB_EN;
725         else
726                 config_mask = NV_MCP_SATA_CFG_20_PORT0_EN |
727                               NV_MCP_SATA_CFG_20_PORT0_PWB_EN;
728
729         if (adma_enable) {
730                 new_reg = current_reg | config_mask;
731                 pp->flags &= ~NV_ADMA_ATAPI_SETUP_COMPLETE;
732         } else {
733                 new_reg = current_reg & ~config_mask;
734                 pp->flags |= NV_ADMA_ATAPI_SETUP_COMPLETE;
735         }
736
737         if (current_reg != new_reg)
738                 pci_write_config_dword(pdev, NV_MCP_SATA_CFG_20, new_reg);
739
740         port0 = ap->host->ports[0]->private_data;
741         port1 = ap->host->ports[1]->private_data;
742         sdev0 = ap->host->ports[0]->link.device[0].sdev;
743         sdev1 = ap->host->ports[1]->link.device[0].sdev;
744         if ((port0->flags & NV_ADMA_ATAPI_SETUP_COMPLETE) ||
745             (port1->flags & NV_ADMA_ATAPI_SETUP_COMPLETE)) {
746                 /** We have to set the DMA mask to 32-bit if either port is in
747                     ATAPI mode, since they are on the same PCI device which is
748                     used for DMA mapping. If we set the mask we also need to set
749                     the bounce limit on both ports to ensure that the block
750                     layer doesn't feed addresses that cause DMA mapping to
751                     choke. If either SCSI device is not allocated yet, it's OK
752                     since that port will discover its correct setting when it
753                     does get allocated.
754                     Note: Setting 32-bit mask should not fail. */
755                 if (sdev0)
756                         blk_queue_bounce_limit(sdev0->request_queue,
757                                                ATA_DMA_MASK);
758                 if (sdev1)
759                         blk_queue_bounce_limit(sdev1->request_queue,
760                                                ATA_DMA_MASK);
761
762                 pci_set_dma_mask(pdev, ATA_DMA_MASK);
763         } else {
764                 /** This shouldn't fail as it was set to this value before */
765                 pci_set_dma_mask(pdev, pp->adma_dma_mask);
766                 if (sdev0)
767                         blk_queue_bounce_limit(sdev0->request_queue,
768                                                pp->adma_dma_mask);
769                 if (sdev1)
770                         blk_queue_bounce_limit(sdev1->request_queue,
771                                                pp->adma_dma_mask);
772         }
773
774         blk_queue_segment_boundary(sdev->request_queue, segment_boundary);
775         blk_queue_max_segments(sdev->request_queue, sg_tablesize);
776         ata_port_printk(ap, KERN_INFO,
777                 "DMA mask 0x%llX, segment boundary 0x%lX, hw segs %hu\n",
778                 (unsigned long long)*ap->host->dev->dma_mask,
779                 segment_boundary, sg_tablesize);
780
781         spin_unlock_irqrestore(ap->lock, flags);
782
783         return rc;
784 }
785
786 static int nv_adma_check_atapi_dma(struct ata_queued_cmd *qc)
787 {
788         struct nv_adma_port_priv *pp = qc->ap->private_data;
789         return !(pp->flags & NV_ADMA_ATAPI_SETUP_COMPLETE);
790 }
791
792 static void nv_adma_tf_read(struct ata_port *ap, struct ata_taskfile *tf)
793 {
794         /* Other than when internal or pass-through commands are executed,
795            the only time this function will be called in ADMA mode will be
796            if a command fails. In the failure case we don't care about going
797            into register mode with ADMA commands pending, as the commands will
798            all shortly be aborted anyway. We assume that NCQ commands are not
799            issued via passthrough, which is the only way that switching into
800            ADMA mode could abort outstanding commands. */
801         nv_adma_register_mode(ap);
802
803         ata_sff_tf_read(ap, tf);
804 }
805
806 static unsigned int nv_adma_tf_to_cpb(struct ata_taskfile *tf, __le16 *cpb)
807 {
808         unsigned int idx = 0;
809
810         if (tf->flags & ATA_TFLAG_ISADDR) {
811                 if (tf->flags & ATA_TFLAG_LBA48) {
812                         cpb[idx++] = cpu_to_le16((ATA_REG_ERR   << 8) | tf->hob_feature | WNB);
813                         cpb[idx++] = cpu_to_le16((ATA_REG_NSECT << 8) | tf->hob_nsect);
814                         cpb[idx++] = cpu_to_le16((ATA_REG_LBAL  << 8) | tf->hob_lbal);
815                         cpb[idx++] = cpu_to_le16((ATA_REG_LBAM  << 8) | tf->hob_lbam);
816                         cpb[idx++] = cpu_to_le16((ATA_REG_LBAH  << 8) | tf->hob_lbah);
817                         cpb[idx++] = cpu_to_le16((ATA_REG_ERR    << 8) | tf->feature);
818                 } else
819                         cpb[idx++] = cpu_to_le16((ATA_REG_ERR    << 8) | tf->feature | WNB);
820
821                 cpb[idx++] = cpu_to_le16((ATA_REG_NSECT  << 8) | tf->nsect);
822                 cpb[idx++] = cpu_to_le16((ATA_REG_LBAL   << 8) | tf->lbal);
823                 cpb[idx++] = cpu_to_le16((ATA_REG_LBAM   << 8) | tf->lbam);
824                 cpb[idx++] = cpu_to_le16((ATA_REG_LBAH   << 8) | tf->lbah);
825         }
826
827         if (tf->flags & ATA_TFLAG_DEVICE)
828                 cpb[idx++] = cpu_to_le16((ATA_REG_DEVICE << 8) | tf->device);
829
830         cpb[idx++] = cpu_to_le16((ATA_REG_CMD    << 8) | tf->command | CMDEND);
831
832         while (idx < 12)
833                 cpb[idx++] = cpu_to_le16(IGN);
834
835         return idx;
836 }
837
838 static int nv_adma_check_cpb(struct ata_port *ap, int cpb_num, int force_err)
839 {
840         struct nv_adma_port_priv *pp = ap->private_data;
841         u8 flags = pp->cpb[cpb_num].resp_flags;
842
843         VPRINTK("CPB %d, flags=0x%x\n", cpb_num, flags);
844
845         if (unlikely((force_err ||
846                      flags & (NV_CPB_RESP_ATA_ERR |
847                               NV_CPB_RESP_CMD_ERR |
848                               NV_CPB_RESP_CPB_ERR)))) {
849                 struct ata_eh_info *ehi = &ap->link.eh_info;
850                 int freeze = 0;
851
852                 ata_ehi_clear_desc(ehi);
853                 __ata_ehi_push_desc(ehi, "CPB resp_flags 0x%x: ", flags);
854                 if (flags & NV_CPB_RESP_ATA_ERR) {
855                         ata_ehi_push_desc(ehi, "ATA error");
856                         ehi->err_mask |= AC_ERR_DEV;
857                 } else if (flags & NV_CPB_RESP_CMD_ERR) {
858                         ata_ehi_push_desc(ehi, "CMD error");
859                         ehi->err_mask |= AC_ERR_DEV;
860                 } else if (flags & NV_CPB_RESP_CPB_ERR) {
861                         ata_ehi_push_desc(ehi, "CPB error");
862                         ehi->err_mask |= AC_ERR_SYSTEM;
863                         freeze = 1;
864                 } else {
865                         /* notifier error, but no error in CPB flags? */
866                         ata_ehi_push_desc(ehi, "unknown");
867                         ehi->err_mask |= AC_ERR_OTHER;
868                         freeze = 1;
869                 }
870                 /* Kill all commands. EH will determine what actually failed. */
871                 if (freeze)
872                         ata_port_freeze(ap);
873                 else
874                         ata_port_abort(ap);
875                 return 1;
876         }
877
878         if (likely(flags & NV_CPB_RESP_DONE)) {
879                 struct ata_queued_cmd *qc = ata_qc_from_tag(ap, cpb_num);
880                 VPRINTK("CPB flags done, flags=0x%x\n", flags);
881                 if (likely(qc)) {
882                         DPRINTK("Completing qc from tag %d\n", cpb_num);
883                         ata_qc_complete(qc);
884                 } else {
885                         struct ata_eh_info *ehi = &ap->link.eh_info;
886                         /* Notifier bits set without a command may indicate the drive
887                            is misbehaving. Raise host state machine violation on this
888                            condition. */
889                         ata_port_printk(ap, KERN_ERR,
890                                         "notifier for tag %d with no cmd?\n",
891                                         cpb_num);
892                         ehi->err_mask |= AC_ERR_HSM;
893                         ehi->action |= ATA_EH_RESET;
894                         ata_port_freeze(ap);
895                         return 1;
896                 }
897         }
898         return 0;
899 }
900
901 static int nv_host_intr(struct ata_port *ap, u8 irq_stat)
902 {
903         struct ata_queued_cmd *qc = ata_qc_from_tag(ap, ap->link.active_tag);
904
905         /* freeze if hotplugged */
906         if (unlikely(irq_stat & (NV_INT_ADDED | NV_INT_REMOVED))) {
907                 ata_port_freeze(ap);
908                 return 1;
909         }
910
911         /* bail out if not our interrupt */
912         if (!(irq_stat & NV_INT_DEV))
913                 return 0;
914
915         /* DEV interrupt w/ no active qc? */
916         if (unlikely(!qc || (qc->tf.flags & ATA_TFLAG_POLLING))) {
917                 ata_sff_check_status(ap);
918                 return 1;
919         }
920
921         /* handle interrupt */
922         return ata_sff_host_intr(ap, qc);
923 }
924
925 static irqreturn_t nv_adma_interrupt(int irq, void *dev_instance)
926 {
927         struct ata_host *host = dev_instance;
928         int i, handled = 0;
929         u32 notifier_clears[2];
930
931         spin_lock(&host->lock);
932
933         for (i = 0; i < host->n_ports; i++) {
934                 struct ata_port *ap = host->ports[i];
935                 notifier_clears[i] = 0;
936
937                 if (ap && !(ap->flags & ATA_FLAG_DISABLED)) {
938                         struct nv_adma_port_priv *pp = ap->private_data;
939                         void __iomem *mmio = pp->ctl_block;
940                         u16 status;
941                         u32 gen_ctl;
942                         u32 notifier, notifier_error;
943
944                         /* if ADMA is disabled, use standard ata interrupt handler */
945                         if (pp->flags & NV_ADMA_ATAPI_SETUP_COMPLETE) {
946                                 u8 irq_stat = readb(host->iomap[NV_MMIO_BAR] + NV_INT_STATUS_CK804)
947                                         >> (NV_INT_PORT_SHIFT * i);
948                                 handled += nv_host_intr(ap, irq_stat);
949                                 continue;
950                         }
951
952                         /* if in ATA register mode, check for standard interrupts */
953                         if (pp->flags & NV_ADMA_PORT_REGISTER_MODE) {
954                                 u8 irq_stat = readb(host->iomap[NV_MMIO_BAR] + NV_INT_STATUS_CK804)
955                                         >> (NV_INT_PORT_SHIFT * i);
956                                 if (ata_tag_valid(ap->link.active_tag))
957                                         /** NV_INT_DEV indication seems unreliable at times
958                                             at least in ADMA mode. Force it on always when a
959                                             command is active, to prevent losing interrupts. */
960                                         irq_stat |= NV_INT_DEV;
961                                 handled += nv_host_intr(ap, irq_stat);
962                         }
963
964                         notifier = readl(mmio + NV_ADMA_NOTIFIER);
965                         notifier_error = readl(mmio + NV_ADMA_NOTIFIER_ERROR);
966                         notifier_clears[i] = notifier | notifier_error;
967
968                         gen_ctl = readl(pp->gen_block + NV_ADMA_GEN_CTL);
969
970                         if (!NV_ADMA_CHECK_INTR(gen_ctl, ap->port_no) && !notifier &&
971                             !notifier_error)
972                                 /* Nothing to do */
973                                 continue;
974
975                         status = readw(mmio + NV_ADMA_STAT);
976
977                         /* Clear status. Ensure the controller sees the clearing before we start
978                            looking at any of the CPB statuses, so that any CPB completions after
979                            this point in the handler will raise another interrupt. */
980                         writew(status, mmio + NV_ADMA_STAT);
981                         readw(mmio + NV_ADMA_STAT); /* flush posted write */
982                         rmb();
983
984                         handled++; /* irq handled if we got here */
985
986                         /* freeze if hotplugged or controller error */
987                         if (unlikely(status & (NV_ADMA_STAT_HOTPLUG |
988                                                NV_ADMA_STAT_HOTUNPLUG |
989                                                NV_ADMA_STAT_TIMEOUT |
990                                                NV_ADMA_STAT_SERROR))) {
991                                 struct ata_eh_info *ehi = &ap->link.eh_info;
992
993                                 ata_ehi_clear_desc(ehi);
994                                 __ata_ehi_push_desc(ehi, "ADMA status 0x%08x: ", status);
995                                 if (status & NV_ADMA_STAT_TIMEOUT) {
996                                         ehi->err_mask |= AC_ERR_SYSTEM;
997                                         ata_ehi_push_desc(ehi, "timeout");
998                                 } else if (status & NV_ADMA_STAT_HOTPLUG) {
999                                         ata_ehi_hotplugged(ehi);
1000                                         ata_ehi_push_desc(ehi, "hotplug");
1001                                 } else if (status & NV_ADMA_STAT_HOTUNPLUG) {
1002                                         ata_ehi_hotplugged(ehi);
1003                                         ata_ehi_push_desc(ehi, "hot unplug");
1004                                 } else if (status & NV_ADMA_STAT_SERROR) {
1005                                         /* let libata analyze SError and figure out the cause */
1006                                         ata_ehi_push_desc(ehi, "SError");
1007                                 } else
1008                                         ata_ehi_push_desc(ehi, "unknown");
1009                                 ata_port_freeze(ap);
1010                                 continue;
1011                         }
1012
1013                         if (status & (NV_ADMA_STAT_DONE |
1014                                       NV_ADMA_STAT_CPBERR |
1015                                       NV_ADMA_STAT_CMD_COMPLETE)) {
1016                                 u32 check_commands = notifier_clears[i];
1017                                 int pos, error = 0;
1018
1019                                 if (status & NV_ADMA_STAT_CPBERR) {
1020                                         /* Check all active commands */
1021                                         if (ata_tag_valid(ap->link.active_tag))
1022                                                 check_commands = 1 <<
1023                                                         ap->link.active_tag;
1024                                         else
1025                                                 check_commands = ap->
1026                                                         link.sactive;
1027                                 }
1028
1029                                 /** Check CPBs for completed commands */
1030                                 while ((pos = ffs(check_commands)) && !error) {
1031                                         pos--;
1032                                         error = nv_adma_check_cpb(ap, pos,
1033                                                 notifier_error & (1 << pos));
1034                                         check_commands &= ~(1 << pos);
1035                                 }
1036                         }
1037                 }
1038         }
1039
1040         if (notifier_clears[0] || notifier_clears[1]) {
1041                 /* Note: Both notifier clear registers must be written
1042                    if either is set, even if one is zero, according to NVIDIA. */
1043                 struct nv_adma_port_priv *pp = host->ports[0]->private_data;
1044                 writel(notifier_clears[0], pp->notifier_clear_block);
1045                 pp = host->ports[1]->private_data;
1046                 writel(notifier_clears[1], pp->notifier_clear_block);
1047         }
1048
1049         spin_unlock(&host->lock);
1050
1051         return IRQ_RETVAL(handled);
1052 }
1053
1054 static void nv_adma_freeze(struct ata_port *ap)
1055 {
1056         struct nv_adma_port_priv *pp = ap->private_data;
1057         void __iomem *mmio = pp->ctl_block;
1058         u16 tmp;
1059
1060         nv_ck804_freeze(ap);
1061
1062         if (pp->flags & NV_ADMA_ATAPI_SETUP_COMPLETE)
1063                 return;
1064
1065         /* clear any outstanding CK804 notifications */
1066         writeb(NV_INT_ALL << (ap->port_no * NV_INT_PORT_SHIFT),
1067                 ap->host->iomap[NV_MMIO_BAR] + NV_INT_STATUS_CK804);
1068
1069         /* Disable interrupt */
1070         tmp = readw(mmio + NV_ADMA_CTL);
1071         writew(tmp & ~(NV_ADMA_CTL_AIEN | NV_ADMA_CTL_HOTPLUG_IEN),
1072                 mmio + NV_ADMA_CTL);
1073         readw(mmio + NV_ADMA_CTL);      /* flush posted write */
1074 }
1075
1076 static void nv_adma_thaw(struct ata_port *ap)
1077 {
1078         struct nv_adma_port_priv *pp = ap->private_data;
1079         void __iomem *mmio = pp->ctl_block;
1080         u16 tmp;
1081
1082         nv_ck804_thaw(ap);
1083
1084         if (pp->flags & NV_ADMA_ATAPI_SETUP_COMPLETE)
1085                 return;
1086
1087         /* Enable interrupt */
1088         tmp = readw(mmio + NV_ADMA_CTL);
1089         writew(tmp | (NV_ADMA_CTL_AIEN | NV_ADMA_CTL_HOTPLUG_IEN),
1090                 mmio + NV_ADMA_CTL);
1091         readw(mmio + NV_ADMA_CTL);      /* flush posted write */
1092 }
1093
1094 static void nv_adma_irq_clear(struct ata_port *ap)
1095 {
1096         struct nv_adma_port_priv *pp = ap->private_data;
1097         void __iomem *mmio = pp->ctl_block;
1098         u32 notifier_clears[2];
1099
1100         if (pp->flags & NV_ADMA_ATAPI_SETUP_COMPLETE) {
1101                 ata_sff_irq_clear(ap);
1102                 return;
1103         }
1104
1105         /* clear any outstanding CK804 notifications */
1106         writeb(NV_INT_ALL << (ap->port_no * NV_INT_PORT_SHIFT),
1107                 ap->host->iomap[NV_MMIO_BAR] + NV_INT_STATUS_CK804);
1108
1109         /* clear ADMA status */
1110         writew(0xffff, mmio + NV_ADMA_STAT);
1111
1112         /* clear notifiers - note both ports need to be written with
1113            something even though we are only clearing on one */
1114         if (ap->port_no == 0) {
1115                 notifier_clears[0] = 0xFFFFFFFF;
1116                 notifier_clears[1] = 0;
1117         } else {
1118                 notifier_clears[0] = 0;
1119                 notifier_clears[1] = 0xFFFFFFFF;
1120         }
1121         pp = ap->host->ports[0]->private_data;
1122         writel(notifier_clears[0], pp->notifier_clear_block);
1123         pp = ap->host->ports[1]->private_data;
1124         writel(notifier_clears[1], pp->notifier_clear_block);
1125 }
1126
1127 static void nv_adma_post_internal_cmd(struct ata_queued_cmd *qc)
1128 {
1129         struct nv_adma_port_priv *pp = qc->ap->private_data;
1130
1131         if (pp->flags & NV_ADMA_PORT_REGISTER_MODE)
1132                 ata_sff_post_internal_cmd(qc);
1133 }
1134
1135 static int nv_adma_port_start(struct ata_port *ap)
1136 {
1137         struct device *dev = ap->host->dev;
1138         struct nv_adma_port_priv *pp;
1139         int rc;
1140         void *mem;
1141         dma_addr_t mem_dma;
1142         void __iomem *mmio;
1143         struct pci_dev *pdev = to_pci_dev(dev);
1144         u16 tmp;
1145
1146         VPRINTK("ENTER\n");
1147
1148         /* Ensure DMA mask is set to 32-bit before allocating legacy PRD and
1149            pad buffers */
1150         rc = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
1151         if (rc)
1152                 return rc;
1153         rc = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
1154         if (rc)
1155                 return rc;
1156
1157         rc = ata_port_start(ap);
1158         if (rc)
1159                 return rc;
1160
1161         pp = devm_kzalloc(dev, sizeof(*pp), GFP_KERNEL);
1162         if (!pp)
1163                 return -ENOMEM;
1164
1165         mmio = ap->host->iomap[NV_MMIO_BAR] + NV_ADMA_PORT +
1166                ap->port_no * NV_ADMA_PORT_SIZE;
1167         pp->ctl_block = mmio;
1168         pp->gen_block = ap->host->iomap[NV_MMIO_BAR] + NV_ADMA_GEN;
1169         pp->notifier_clear_block = pp->gen_block +
1170                NV_ADMA_NOTIFIER_CLEAR + (4 * ap->port_no);
1171
1172         /* Now that the legacy PRD and padding buffer are allocated we can
1173            safely raise the DMA mask to allocate the CPB/APRD table.
1174            These are allowed to fail since we store the value that ends up
1175            being used to set as the bounce limit in slave_config later if
1176            needed. */
1177         pci_set_dma_mask(pdev, DMA_BIT_MASK(64));
1178         pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64));
1179         pp->adma_dma_mask = *dev->dma_mask;
1180
1181         mem = dmam_alloc_coherent(dev, NV_ADMA_PORT_PRIV_DMA_SZ,
1182                                   &mem_dma, GFP_KERNEL);
1183         if (!mem)
1184                 return -ENOMEM;
1185         memset(mem, 0, NV_ADMA_PORT_PRIV_DMA_SZ);
1186
1187         /*
1188          * First item in chunk of DMA memory:
1189          * 128-byte command parameter block (CPB)
1190          * one for each command tag
1191          */
1192         pp->cpb     = mem;
1193         pp->cpb_dma = mem_dma;
1194
1195         writel(mem_dma & 0xFFFFFFFF,    mmio + NV_ADMA_CPB_BASE_LOW);
1196         writel((mem_dma >> 16) >> 16,   mmio + NV_ADMA_CPB_BASE_HIGH);
1197
1198         mem     += NV_ADMA_MAX_CPBS * NV_ADMA_CPB_SZ;
1199         mem_dma += NV_ADMA_MAX_CPBS * NV_ADMA_CPB_SZ;
1200
1201         /*
1202          * Second item: block of ADMA_SGTBL_LEN s/g entries
1203          */
1204         pp->aprd = mem;
1205         pp->aprd_dma = mem_dma;
1206
1207         ap->private_data = pp;
1208
1209         /* clear any outstanding interrupt conditions */
1210         writew(0xffff, mmio + NV_ADMA_STAT);
1211
1212         /* initialize port variables */
1213         pp->flags = NV_ADMA_PORT_REGISTER_MODE;
1214
1215         /* clear CPB fetch count */
1216         writew(0, mmio + NV_ADMA_CPB_COUNT);
1217
1218         /* clear GO for register mode, enable interrupt */
1219         tmp = readw(mmio + NV_ADMA_CTL);
1220         writew((tmp & ~NV_ADMA_CTL_GO) | NV_ADMA_CTL_AIEN |
1221                 NV_ADMA_CTL_HOTPLUG_IEN, mmio + NV_ADMA_CTL);
1222
1223         tmp = readw(mmio + NV_ADMA_CTL);
1224         writew(tmp | NV_ADMA_CTL_CHANNEL_RESET, mmio + NV_ADMA_CTL);
1225         readw(mmio + NV_ADMA_CTL);      /* flush posted write */
1226         udelay(1);
1227         writew(tmp & ~NV_ADMA_CTL_CHANNEL_RESET, mmio + NV_ADMA_CTL);
1228         readw(mmio + NV_ADMA_CTL);      /* flush posted write */
1229
1230         return 0;
1231 }
1232
1233 static void nv_adma_port_stop(struct ata_port *ap)
1234 {
1235         struct nv_adma_port_priv *pp = ap->private_data;
1236         void __iomem *mmio = pp->ctl_block;
1237
1238         VPRINTK("ENTER\n");
1239         writew(0, mmio + NV_ADMA_CTL);
1240 }
1241
1242 #ifdef CONFIG_PM
1243 static int nv_adma_port_suspend(struct ata_port *ap, pm_message_t mesg)
1244 {
1245         struct nv_adma_port_priv *pp = ap->private_data;
1246         void __iomem *mmio = pp->ctl_block;
1247
1248         /* Go to register mode - clears GO */
1249         nv_adma_register_mode(ap);
1250
1251         /* clear CPB fetch count */
1252         writew(0, mmio + NV_ADMA_CPB_COUNT);
1253
1254         /* disable interrupt, shut down port */
1255         writew(0, mmio + NV_ADMA_CTL);
1256
1257         return 0;
1258 }
1259
1260 static int nv_adma_port_resume(struct ata_port *ap)
1261 {
1262         struct nv_adma_port_priv *pp = ap->private_data;
1263         void __iomem *mmio = pp->ctl_block;
1264         u16 tmp;
1265
1266         /* set CPB block location */
1267         writel(pp->cpb_dma & 0xFFFFFFFF,        mmio + NV_ADMA_CPB_BASE_LOW);
1268         writel((pp->cpb_dma >> 16) >> 16,       mmio + NV_ADMA_CPB_BASE_HIGH);
1269
1270         /* clear any outstanding interrupt conditions */
1271         writew(0xffff, mmio + NV_ADMA_STAT);
1272
1273         /* initialize port variables */
1274         pp->flags |= NV_ADMA_PORT_REGISTER_MODE;
1275
1276         /* clear CPB fetch count */
1277         writew(0, mmio + NV_ADMA_CPB_COUNT);
1278
1279         /* clear GO for register mode, enable interrupt */
1280         tmp = readw(mmio + NV_ADMA_CTL);
1281         writew((tmp & ~NV_ADMA_CTL_GO) | NV_ADMA_CTL_AIEN |
1282                 NV_ADMA_CTL_HOTPLUG_IEN, mmio + NV_ADMA_CTL);
1283
1284         tmp = readw(mmio + NV_ADMA_CTL);
1285         writew(tmp | NV_ADMA_CTL_CHANNEL_RESET, mmio + NV_ADMA_CTL);
1286         readw(mmio + NV_ADMA_CTL);      /* flush posted write */
1287         udelay(1);
1288         writew(tmp & ~NV_ADMA_CTL_CHANNEL_RESET, mmio + NV_ADMA_CTL);
1289         readw(mmio + NV_ADMA_CTL);      /* flush posted write */
1290
1291         return 0;
1292 }
1293 #endif
1294
1295 static void nv_adma_setup_port(struct ata_port *ap)
1296 {
1297         void __iomem *mmio = ap->host->iomap[NV_MMIO_BAR];
1298         struct ata_ioports *ioport = &ap->ioaddr;
1299
1300         VPRINTK("ENTER\n");
1301
1302         mmio += NV_ADMA_PORT + ap->port_no * NV_ADMA_PORT_SIZE;
1303
1304         ioport->cmd_addr        = mmio;
1305         ioport->data_addr       = mmio + (ATA_REG_DATA * 4);
1306         ioport->error_addr      =
1307         ioport->feature_addr    = mmio + (ATA_REG_ERR * 4);
1308         ioport->nsect_addr      = mmio + (ATA_REG_NSECT * 4);
1309         ioport->lbal_addr       = mmio + (ATA_REG_LBAL * 4);
1310         ioport->lbam_addr       = mmio + (ATA_REG_LBAM * 4);
1311         ioport->lbah_addr       = mmio + (ATA_REG_LBAH * 4);
1312         ioport->device_addr     = mmio + (ATA_REG_DEVICE * 4);
1313         ioport->status_addr     =
1314         ioport->command_addr    = mmio + (ATA_REG_STATUS * 4);
1315         ioport->altstatus_addr  =
1316         ioport->ctl_addr        = mmio + 0x20;
1317 }
1318
1319 static int nv_adma_host_init(struct ata_host *host)
1320 {
1321         struct pci_dev *pdev = to_pci_dev(host->dev);
1322         unsigned int i;
1323         u32 tmp32;
1324
1325         VPRINTK("ENTER\n");
1326
1327         /* enable ADMA on the ports */
1328         pci_read_config_dword(pdev, NV_MCP_SATA_CFG_20, &tmp32);
1329         tmp32 |= NV_MCP_SATA_CFG_20_PORT0_EN |
1330                  NV_MCP_SATA_CFG_20_PORT0_PWB_EN |
1331                  NV_MCP_SATA_CFG_20_PORT1_EN |
1332                  NV_MCP_SATA_CFG_20_PORT1_PWB_EN;
1333
1334         pci_write_config_dword(pdev, NV_MCP_SATA_CFG_20, tmp32);
1335
1336         for (i = 0; i < host->n_ports; i++)
1337                 nv_adma_setup_port(host->ports[i]);
1338
1339         return 0;
1340 }
1341
1342 static void nv_adma_fill_aprd(struct ata_queued_cmd *qc,
1343                               struct scatterlist *sg,
1344                               int idx,
1345                               struct nv_adma_prd *aprd)
1346 {
1347         u8 flags = 0;
1348         if (qc->tf.flags & ATA_TFLAG_WRITE)
1349                 flags |= NV_APRD_WRITE;
1350         if (idx == qc->n_elem - 1)
1351                 flags |= NV_APRD_END;
1352         else if (idx != 4)
1353                 flags |= NV_APRD_CONT;
1354
1355         aprd->addr  = cpu_to_le64(((u64)sg_dma_address(sg)));
1356         aprd->len   = cpu_to_le32(((u32)sg_dma_len(sg))); /* len in bytes */
1357         aprd->flags = flags;
1358         aprd->packet_len = 0;
1359 }
1360
1361 static void nv_adma_fill_sg(struct ata_queued_cmd *qc, struct nv_adma_cpb *cpb)
1362 {
1363         struct nv_adma_port_priv *pp = qc->ap->private_data;
1364         struct nv_adma_prd *aprd;
1365         struct scatterlist *sg;
1366         unsigned int si;
1367
1368         VPRINTK("ENTER\n");
1369
1370         for_each_sg(qc->sg, sg, qc->n_elem, si) {
1371                 aprd = (si < 5) ? &cpb->aprd[si] :
1372                                &pp->aprd[NV_ADMA_SGTBL_LEN * qc->tag + (si-5)];
1373                 nv_adma_fill_aprd(qc, sg, si, aprd);
1374         }
1375         if (si > 5)
1376                 cpb->next_aprd = cpu_to_le64(((u64)(pp->aprd_dma + NV_ADMA_SGTBL_SZ * qc->tag)));
1377         else
1378                 cpb->next_aprd = cpu_to_le64(0);
1379 }
1380
1381 static int nv_adma_use_reg_mode(struct ata_queued_cmd *qc)
1382 {
1383         struct nv_adma_port_priv *pp = qc->ap->private_data;
1384
1385         /* ADMA engine can only be used for non-ATAPI DMA commands,
1386            or interrupt-driven no-data commands. */
1387         if ((pp->flags & NV_ADMA_ATAPI_SETUP_COMPLETE) ||
1388            (qc->tf.flags & ATA_TFLAG_POLLING))
1389                 return 1;
1390
1391         if ((qc->flags & ATA_QCFLAG_DMAMAP) ||
1392            (qc->tf.protocol == ATA_PROT_NODATA))
1393                 return 0;
1394
1395         return 1;
1396 }
1397
1398 static void nv_adma_qc_prep(struct ata_queued_cmd *qc)
1399 {
1400         struct nv_adma_port_priv *pp = qc->ap->private_data;
1401         struct nv_adma_cpb *cpb = &pp->cpb[qc->tag];
1402         u8 ctl_flags = NV_CPB_CTL_CPB_VALID |
1403                        NV_CPB_CTL_IEN;
1404
1405         if (nv_adma_use_reg_mode(qc)) {
1406                 BUG_ON(!(pp->flags & NV_ADMA_ATAPI_SETUP_COMPLETE) &&
1407                         (qc->flags & ATA_QCFLAG_DMAMAP));
1408                 nv_adma_register_mode(qc->ap);
1409                 ata_sff_qc_prep(qc);
1410                 return;
1411         }
1412
1413         cpb->resp_flags = NV_CPB_RESP_DONE;
1414         wmb();
1415         cpb->ctl_flags = 0;
1416         wmb();
1417
1418         cpb->len                = 3;
1419         cpb->tag                = qc->tag;
1420         cpb->next_cpb_idx       = 0;
1421
1422         /* turn on NCQ flags for NCQ commands */
1423         if (qc->tf.protocol == ATA_PROT_NCQ)
1424                 ctl_flags |= NV_CPB_CTL_QUEUE | NV_CPB_CTL_FPDMA;
1425
1426         VPRINTK("qc->flags = 0x%lx\n", qc->flags);
1427
1428         nv_adma_tf_to_cpb(&qc->tf, cpb->tf);
1429
1430         if (qc->flags & ATA_QCFLAG_DMAMAP) {
1431                 nv_adma_fill_sg(qc, cpb);
1432                 ctl_flags |= NV_CPB_CTL_APRD_VALID;
1433         } else
1434                 memset(&cpb->aprd[0], 0, sizeof(struct nv_adma_prd) * 5);
1435
1436         /* Be paranoid and don't let the device see NV_CPB_CTL_CPB_VALID
1437            until we are finished filling in all of the contents */
1438         wmb();
1439         cpb->ctl_flags = ctl_flags;
1440         wmb();
1441         cpb->resp_flags = 0;
1442 }
1443
1444 static unsigned int nv_adma_qc_issue(struct ata_queued_cmd *qc)
1445 {
1446         struct nv_adma_port_priv *pp = qc->ap->private_data;
1447         void __iomem *mmio = pp->ctl_block;
1448         int curr_ncq = (qc->tf.protocol == ATA_PROT_NCQ);
1449
1450         VPRINTK("ENTER\n");
1451
1452         /* We can't handle result taskfile with NCQ commands, since
1453            retrieving the taskfile switches us out of ADMA mode and would abort
1454            existing commands. */
1455         if (unlikely(qc->tf.protocol == ATA_PROT_NCQ &&
1456                      (qc->flags & ATA_QCFLAG_RESULT_TF))) {
1457                 ata_dev_printk(qc->dev, KERN_ERR,
1458                         "NCQ w/ RESULT_TF not allowed\n");
1459                 return AC_ERR_SYSTEM;
1460         }
1461
1462         if (nv_adma_use_reg_mode(qc)) {
1463                 /* use ATA register mode */
1464                 VPRINTK("using ATA register mode: 0x%lx\n", qc->flags);
1465                 BUG_ON(!(pp->flags & NV_ADMA_ATAPI_SETUP_COMPLETE) &&
1466                         (qc->flags & ATA_QCFLAG_DMAMAP));
1467                 nv_adma_register_mode(qc->ap);
1468                 return ata_sff_qc_issue(qc);
1469         } else
1470                 nv_adma_mode(qc->ap);
1471
1472         /* write append register, command tag in lower 8 bits
1473            and (number of cpbs to append -1) in top 8 bits */
1474         wmb();
1475
1476         if (curr_ncq != pp->last_issue_ncq) {
1477                 /* Seems to need some delay before switching between NCQ and
1478                    non-NCQ commands, else we get command timeouts and such. */
1479                 udelay(20);
1480                 pp->last_issue_ncq = curr_ncq;
1481         }
1482
1483         writew(qc->tag, mmio + NV_ADMA_APPEND);
1484
1485         DPRINTK("Issued tag %u\n", qc->tag);
1486
1487         return 0;
1488 }
1489
1490 static irqreturn_t nv_generic_interrupt(int irq, void *dev_instance)
1491 {
1492         struct ata_host *host = dev_instance;
1493         unsigned int i;
1494         unsigned int handled = 0;
1495         unsigned long flags;
1496
1497         spin_lock_irqsave(&host->lock, flags);
1498
1499         for (i = 0; i < host->n_ports; i++) {
1500                 struct ata_port *ap;
1501
1502                 ap = host->ports[i];
1503                 if (ap &&
1504                     !(ap->flags & ATA_FLAG_DISABLED)) {
1505                         struct ata_queued_cmd *qc;
1506
1507                         qc = ata_qc_from_tag(ap, ap->link.active_tag);
1508                         if (qc && (!(qc->tf.flags & ATA_TFLAG_POLLING)))
1509                                 handled += ata_sff_host_intr(ap, qc);
1510                         else
1511                                 // No request pending?  Clear interrupt status
1512                                 // anyway, in case there's one pending.
1513                                 ap->ops->sff_check_status(ap);
1514                 }
1515
1516         }
1517
1518         spin_unlock_irqrestore(&host->lock, flags);
1519
1520         return IRQ_RETVAL(handled);
1521 }
1522
1523 static irqreturn_t nv_do_interrupt(struct ata_host *host, u8 irq_stat)
1524 {
1525         int i, handled = 0;
1526
1527         for (i = 0; i < host->n_ports; i++) {
1528                 struct ata_port *ap = host->ports[i];
1529
1530                 if (ap && !(ap->flags & ATA_FLAG_DISABLED))
1531                         handled += nv_host_intr(ap, irq_stat);
1532
1533                 irq_stat >>= NV_INT_PORT_SHIFT;
1534         }
1535
1536         return IRQ_RETVAL(handled);
1537 }
1538
1539 static irqreturn_t nv_nf2_interrupt(int irq, void *dev_instance)
1540 {
1541         struct ata_host *host = dev_instance;
1542         u8 irq_stat;
1543         irqreturn_t ret;
1544
1545         spin_lock(&host->lock);
1546         irq_stat = ioread8(host->ports[0]->ioaddr.scr_addr + NV_INT_STATUS);
1547         ret = nv_do_interrupt(host, irq_stat);
1548         spin_unlock(&host->lock);
1549
1550         return ret;
1551 }
1552
1553 static irqreturn_t nv_ck804_interrupt(int irq, void *dev_instance)
1554 {
1555         struct ata_host *host = dev_instance;
1556         u8 irq_stat;
1557         irqreturn_t ret;
1558
1559         spin_lock(&host->lock);
1560         irq_stat = readb(host->iomap[NV_MMIO_BAR] + NV_INT_STATUS_CK804);
1561         ret = nv_do_interrupt(host, irq_stat);
1562         spin_unlock(&host->lock);
1563
1564         return ret;
1565 }
1566
1567 static int nv_scr_read(struct ata_link *link, unsigned int sc_reg, u32 *val)
1568 {
1569         if (sc_reg > SCR_CONTROL)
1570                 return -EINVAL;
1571
1572         *val = ioread32(link->ap->ioaddr.scr_addr + (sc_reg * 4));
1573         return 0;
1574 }
1575
1576 static int nv_scr_write(struct ata_link *link, unsigned int sc_reg, u32 val)
1577 {
1578         if (sc_reg > SCR_CONTROL)
1579                 return -EINVAL;
1580
1581         iowrite32(val, link->ap->ioaddr.scr_addr + (sc_reg * 4));
1582         return 0;
1583 }
1584
1585 static int nv_hardreset(struct ata_link *link, unsigned int *class,
1586                         unsigned long deadline)
1587 {
1588         struct ata_eh_context *ehc = &link->eh_context;
1589
1590         /* Do hardreset iff it's post-boot probing, please read the
1591          * comment above port ops for details.
1592          */
1593         if (!(link->ap->pflags & ATA_PFLAG_LOADING) &&
1594             !ata_dev_enabled(link->device))
1595                 sata_link_hardreset(link, sata_deb_timing_hotplug, deadline,
1596                                     NULL, NULL);
1597         else {
1598                 const unsigned long *timing = sata_ehc_deb_timing(ehc);
1599                 int rc;
1600
1601                 if (!(ehc->i.flags & ATA_EHI_QUIET))
1602                         ata_link_printk(link, KERN_INFO, "nv: skipping "
1603                                         "hardreset on occupied port\n");
1604
1605                 /* make sure the link is online */
1606                 rc = sata_link_resume(link, timing, deadline);
1607                 /* whine about phy resume failure but proceed */
1608                 if (rc && rc != -EOPNOTSUPP)
1609                         ata_link_printk(link, KERN_WARNING, "failed to resume "
1610                                         "link (errno=%d)\n", rc);
1611         }
1612
1613         /* device signature acquisition is unreliable */
1614         return -EAGAIN;
1615 }
1616
1617 static void nv_nf2_freeze(struct ata_port *ap)
1618 {
1619         void __iomem *scr_addr = ap->host->ports[0]->ioaddr.scr_addr;
1620         int shift = ap->port_no * NV_INT_PORT_SHIFT;
1621         u8 mask;
1622
1623         mask = ioread8(scr_addr + NV_INT_ENABLE);
1624         mask &= ~(NV_INT_ALL << shift);
1625         iowrite8(mask, scr_addr + NV_INT_ENABLE);
1626 }
1627
1628 static void nv_nf2_thaw(struct ata_port *ap)
1629 {
1630         void __iomem *scr_addr = ap->host->ports[0]->ioaddr.scr_addr;
1631         int shift = ap->port_no * NV_INT_PORT_SHIFT;
1632         u8 mask;
1633
1634         iowrite8(NV_INT_ALL << shift, scr_addr + NV_INT_STATUS);
1635
1636         mask = ioread8(scr_addr + NV_INT_ENABLE);
1637         mask |= (NV_INT_MASK << shift);
1638         iowrite8(mask, scr_addr + NV_INT_ENABLE);
1639 }
1640
1641 static void nv_ck804_freeze(struct ata_port *ap)
1642 {
1643         void __iomem *mmio_base = ap->host->iomap[NV_MMIO_BAR];
1644         int shift = ap->port_no * NV_INT_PORT_SHIFT;
1645         u8 mask;
1646
1647         mask = readb(mmio_base + NV_INT_ENABLE_CK804);
1648         mask &= ~(NV_INT_ALL << shift);
1649         writeb(mask, mmio_base + NV_INT_ENABLE_CK804);
1650 }
1651
1652 static void nv_ck804_thaw(struct ata_port *ap)
1653 {
1654         void __iomem *mmio_base = ap->host->iomap[NV_MMIO_BAR];
1655         int shift = ap->port_no * NV_INT_PORT_SHIFT;
1656         u8 mask;
1657
1658         writeb(NV_INT_ALL << shift, mmio_base + NV_INT_STATUS_CK804);
1659
1660         mask = readb(mmio_base + NV_INT_ENABLE_CK804);
1661         mask |= (NV_INT_MASK << shift);
1662         writeb(mask, mmio_base + NV_INT_ENABLE_CK804);
1663 }
1664
1665 static void nv_mcp55_freeze(struct ata_port *ap)
1666 {
1667         void __iomem *mmio_base = ap->host->iomap[NV_MMIO_BAR];
1668         int shift = ap->port_no * NV_INT_PORT_SHIFT_MCP55;
1669         u32 mask;
1670
1671         writel(NV_INT_ALL_MCP55 << shift, mmio_base + NV_INT_STATUS_MCP55);
1672
1673         mask = readl(mmio_base + NV_INT_ENABLE_MCP55);
1674         mask &= ~(NV_INT_ALL_MCP55 << shift);
1675         writel(mask, mmio_base + NV_INT_ENABLE_MCP55);
1676         ata_sff_freeze(ap);
1677 }
1678
1679 static void nv_mcp55_thaw(struct ata_port *ap)
1680 {
1681         void __iomem *mmio_base = ap->host->iomap[NV_MMIO_BAR];
1682         int shift = ap->port_no * NV_INT_PORT_SHIFT_MCP55;
1683         u32 mask;
1684
1685         writel(NV_INT_ALL_MCP55 << shift, mmio_base + NV_INT_STATUS_MCP55);
1686
1687         mask = readl(mmio_base + NV_INT_ENABLE_MCP55);
1688         mask |= (NV_INT_MASK_MCP55 << shift);
1689         writel(mask, mmio_base + NV_INT_ENABLE_MCP55);
1690         ata_sff_thaw(ap);
1691 }
1692
1693 static void nv_adma_error_handler(struct ata_port *ap)
1694 {
1695         struct nv_adma_port_priv *pp = ap->private_data;
1696         if (!(pp->flags & NV_ADMA_PORT_REGISTER_MODE)) {
1697                 void __iomem *mmio = pp->ctl_block;
1698                 int i;
1699                 u16 tmp;
1700
1701                 if (ata_tag_valid(ap->link.active_tag) || ap->link.sactive) {
1702                         u32 notifier = readl(mmio + NV_ADMA_NOTIFIER);
1703                         u32 notifier_error = readl(mmio + NV_ADMA_NOTIFIER_ERROR);
1704                         u32 gen_ctl = readl(pp->gen_block + NV_ADMA_GEN_CTL);
1705                         u32 status = readw(mmio + NV_ADMA_STAT);
1706                         u8 cpb_count = readb(mmio + NV_ADMA_CPB_COUNT);
1707                         u8 next_cpb_idx = readb(mmio + NV_ADMA_NEXT_CPB_IDX);
1708
1709                         ata_port_printk(ap, KERN_ERR,
1710                                 "EH in ADMA mode, notifier 0x%X "
1711                                 "notifier_error 0x%X gen_ctl 0x%X status 0x%X "
1712                                 "next cpb count 0x%X next cpb idx 0x%x\n",
1713                                 notifier, notifier_error, gen_ctl, status,
1714                                 cpb_count, next_cpb_idx);
1715
1716                         for (i = 0; i < NV_ADMA_MAX_CPBS; i++) {
1717                                 struct nv_adma_cpb *cpb = &pp->cpb[i];
1718                                 if ((ata_tag_valid(ap->link.active_tag) && i == ap->link.active_tag) ||
1719                                     ap->link.sactive & (1 << i))
1720                                         ata_port_printk(ap, KERN_ERR,
1721                                                 "CPB %d: ctl_flags 0x%x, resp_flags 0x%x\n",
1722                                                 i, cpb->ctl_flags, cpb->resp_flags);
1723                         }
1724                 }
1725
1726                 /* Push us back into port register mode for error handling. */
1727                 nv_adma_register_mode(ap);
1728
1729                 /* Mark all of the CPBs as invalid to prevent them from
1730                    being executed */
1731                 for (i = 0; i < NV_ADMA_MAX_CPBS; i++)
1732                         pp->cpb[i].ctl_flags &= ~NV_CPB_CTL_CPB_VALID;
1733
1734                 /* clear CPB fetch count */
1735                 writew(0, mmio + NV_ADMA_CPB_COUNT);
1736
1737                 /* Reset channel */
1738                 tmp = readw(mmio + NV_ADMA_CTL);
1739                 writew(tmp | NV_ADMA_CTL_CHANNEL_RESET, mmio + NV_ADMA_CTL);
1740                 readw(mmio + NV_ADMA_CTL);      /* flush posted write */
1741                 udelay(1);
1742                 writew(tmp & ~NV_ADMA_CTL_CHANNEL_RESET, mmio + NV_ADMA_CTL);
1743                 readw(mmio + NV_ADMA_CTL);      /* flush posted write */
1744         }
1745
1746         ata_sff_error_handler(ap);
1747 }
1748
1749 static void nv_swncq_qc_to_dq(struct ata_port *ap, struct ata_queued_cmd *qc)
1750 {
1751         struct nv_swncq_port_priv *pp = ap->private_data;
1752         struct defer_queue *dq = &pp->defer_queue;
1753
1754         /* queue is full */
1755         WARN_ON(dq->tail - dq->head == ATA_MAX_QUEUE);
1756         dq->defer_bits |= (1 << qc->tag);
1757         dq->tag[dq->tail++ & (ATA_MAX_QUEUE - 1)] = qc->tag;
1758 }
1759
1760 static struct ata_queued_cmd *nv_swncq_qc_from_dq(struct ata_port *ap)
1761 {
1762         struct nv_swncq_port_priv *pp = ap->private_data;
1763         struct defer_queue *dq = &pp->defer_queue;
1764         unsigned int tag;
1765
1766         if (dq->head == dq->tail)       /* null queue */
1767                 return NULL;
1768
1769         tag = dq->tag[dq->head & (ATA_MAX_QUEUE - 1)];
1770         dq->tag[dq->head++ & (ATA_MAX_QUEUE - 1)] = ATA_TAG_POISON;
1771         WARN_ON(!(dq->defer_bits & (1 << tag)));
1772         dq->defer_bits &= ~(1 << tag);
1773
1774         return ata_qc_from_tag(ap, tag);
1775 }
1776
1777 static void nv_swncq_fis_reinit(struct ata_port *ap)
1778 {
1779         struct nv_swncq_port_priv *pp = ap->private_data;
1780
1781         pp->dhfis_bits = 0;
1782         pp->dmafis_bits = 0;
1783         pp->sdbfis_bits = 0;
1784         pp->ncq_flags = 0;
1785 }
1786
1787 static void nv_swncq_pp_reinit(struct ata_port *ap)
1788 {
1789         struct nv_swncq_port_priv *pp = ap->private_data;
1790         struct defer_queue *dq = &pp->defer_queue;
1791
1792         dq->head = 0;
1793         dq->tail = 0;
1794         dq->defer_bits = 0;
1795         pp->qc_active = 0;
1796         pp->last_issue_tag = ATA_TAG_POISON;
1797         nv_swncq_fis_reinit(ap);
1798 }
1799
1800 static void nv_swncq_irq_clear(struct ata_port *ap, u16 fis)
1801 {
1802         struct nv_swncq_port_priv *pp = ap->private_data;
1803
1804         writew(fis, pp->irq_block);
1805 }
1806
1807 static void __ata_bmdma_stop(struct ata_port *ap)
1808 {
1809         struct ata_queued_cmd qc;
1810
1811         qc.ap = ap;
1812         ata_bmdma_stop(&qc);
1813 }
1814
1815 static void nv_swncq_ncq_stop(struct ata_port *ap)
1816 {
1817         struct nv_swncq_port_priv *pp = ap->private_data;
1818         unsigned int i;
1819         u32 sactive;
1820         u32 done_mask;
1821
1822         ata_port_printk(ap, KERN_ERR,
1823                         "EH in SWNCQ mode,QC:qc_active 0x%X sactive 0x%X\n",
1824                         ap->qc_active, ap->link.sactive);
1825         ata_port_printk(ap, KERN_ERR,
1826                 "SWNCQ:qc_active 0x%X defer_bits 0x%X last_issue_tag 0x%x\n  "
1827                 "dhfis 0x%X dmafis 0x%X sdbfis 0x%X\n",
1828                 pp->qc_active, pp->defer_queue.defer_bits, pp->last_issue_tag,
1829                 pp->dhfis_bits, pp->dmafis_bits, pp->sdbfis_bits);
1830
1831         ata_port_printk(ap, KERN_ERR, "ATA_REG 0x%X ERR_REG 0x%X\n",
1832                         ap->ops->sff_check_status(ap),
1833                         ioread8(ap->ioaddr.error_addr));
1834
1835         sactive = readl(pp->sactive_block);
1836         done_mask = pp->qc_active ^ sactive;
1837
1838         ata_port_printk(ap, KERN_ERR, "tag : dhfis dmafis sdbfis sacitve\n");
1839         for (i = 0; i < ATA_MAX_QUEUE; i++) {
1840                 u8 err = 0;
1841                 if (pp->qc_active & (1 << i))
1842                         err = 0;
1843                 else if (done_mask & (1 << i))
1844                         err = 1;
1845                 else
1846                         continue;
1847
1848                 ata_port_printk(ap, KERN_ERR,
1849                                 "tag 0x%x: %01x %01x %01x %01x %s\n", i,
1850                                 (pp->dhfis_bits >> i) & 0x1,
1851                                 (pp->dmafis_bits >> i) & 0x1,
1852                                 (pp->sdbfis_bits >> i) & 0x1,
1853                                 (sactive >> i) & 0x1,
1854                                 (err ? "error! tag doesn't exit" : " "));
1855         }
1856
1857         nv_swncq_pp_reinit(ap);
1858         ap->ops->sff_irq_clear(ap);
1859         __ata_bmdma_stop(ap);
1860         nv_swncq_irq_clear(ap, 0xffff);
1861 }
1862
1863 static void nv_swncq_error_handler(struct ata_port *ap)
1864 {
1865         struct ata_eh_context *ehc = &ap->link.eh_context;
1866
1867         if (ap->link.sactive) {
1868                 nv_swncq_ncq_stop(ap);
1869                 ehc->i.action |= ATA_EH_RESET;
1870         }
1871
1872         ata_sff_error_handler(ap);
1873 }
1874
1875 #ifdef CONFIG_PM
1876 static int nv_swncq_port_suspend(struct ata_port *ap, pm_message_t mesg)
1877 {
1878         void __iomem *mmio = ap->host->iomap[NV_MMIO_BAR];
1879         u32 tmp;
1880
1881         /* clear irq */
1882         writel(~0, mmio + NV_INT_STATUS_MCP55);
1883
1884         /* disable irq */
1885         writel(0, mmio + NV_INT_ENABLE_MCP55);
1886
1887         /* disable swncq */
1888         tmp = readl(mmio + NV_CTL_MCP55);
1889         tmp &= ~(NV_CTL_PRI_SWNCQ | NV_CTL_SEC_SWNCQ);
1890         writel(tmp, mmio + NV_CTL_MCP55);
1891
1892         return 0;
1893 }
1894
1895 static int nv_swncq_port_resume(struct ata_port *ap)
1896 {
1897         void __iomem *mmio = ap->host->iomap[NV_MMIO_BAR];
1898         u32 tmp;
1899
1900         /* clear irq */
1901         writel(~0, mmio + NV_INT_STATUS_MCP55);
1902
1903         /* enable irq */
1904         writel(0x00fd00fd, mmio + NV_INT_ENABLE_MCP55);
1905
1906         /* enable swncq */
1907         tmp = readl(mmio + NV_CTL_MCP55);
1908         writel(tmp | NV_CTL_PRI_SWNCQ | NV_CTL_SEC_SWNCQ, mmio + NV_CTL_MCP55);
1909
1910         return 0;
1911 }
1912 #endif
1913
1914 static void nv_swncq_host_init(struct ata_host *host)
1915 {
1916         u32 tmp;
1917         void __iomem *mmio = host->iomap[NV_MMIO_BAR];
1918         struct pci_dev *pdev = to_pci_dev(host->dev);
1919         u8 regval;
1920
1921         /* disable  ECO 398 */
1922         pci_read_config_byte(pdev, 0x7f, &regval);
1923         regval &= ~(1 << 7);
1924         pci_write_config_byte(pdev, 0x7f, regval);
1925
1926         /* enable swncq */
1927         tmp = readl(mmio + NV_CTL_MCP55);
1928         VPRINTK("HOST_CTL:0x%X\n", tmp);
1929         writel(tmp | NV_CTL_PRI_SWNCQ | NV_CTL_SEC_SWNCQ, mmio + NV_CTL_MCP55);
1930
1931         /* enable irq intr */
1932         tmp = readl(mmio + NV_INT_ENABLE_MCP55);
1933         VPRINTK("HOST_ENABLE:0x%X\n", tmp);
1934         writel(tmp | 0x00fd00fd, mmio + NV_INT_ENABLE_MCP55);
1935
1936         /*  clear port irq */
1937         writel(~0x0, mmio + NV_INT_STATUS_MCP55);
1938 }
1939
1940 static int nv_swncq_slave_config(struct scsi_device *sdev)
1941 {
1942         struct ata_port *ap = ata_shost_to_port(sdev->host);
1943         struct pci_dev *pdev = to_pci_dev(ap->host->dev);
1944         struct ata_device *dev;
1945         int rc;
1946         u8 rev;
1947         u8 check_maxtor = 0;
1948         unsigned char model_num[ATA_ID_PROD_LEN + 1];
1949
1950         rc = ata_scsi_slave_config(sdev);
1951         if (sdev->id >= ATA_MAX_DEVICES || sdev->channel || sdev->lun)
1952                 /* Not a proper libata device, ignore */
1953                 return rc;
1954
1955         dev = &ap->link.device[sdev->id];
1956         if (!(ap->flags & ATA_FLAG_NCQ) || dev->class == ATA_DEV_ATAPI)
1957                 return rc;
1958
1959         /* if MCP51 and Maxtor, then disable ncq */
1960         if (pdev->device == PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_SATA ||
1961                 pdev->device == PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_SATA2)
1962                 check_maxtor = 1;
1963
1964         /* if MCP55 and rev <= a2 and Maxtor, then disable ncq */
1965         if (pdev->device == PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_SATA ||
1966                 pdev->device == PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_SATA2) {
1967                 pci_read_config_byte(pdev, 0x8, &rev);
1968                 if (rev <= 0xa2)
1969                         check_maxtor = 1;
1970         }
1971
1972         if (!check_maxtor)
1973                 return rc;
1974
1975         ata_id_c_string(dev->id, model_num, ATA_ID_PROD, sizeof(model_num));
1976
1977         if (strncmp(model_num, "Maxtor", 6) == 0) {
1978                 ata_scsi_change_queue_depth(sdev, 1, SCSI_QDEPTH_DEFAULT);
1979                 ata_dev_printk(dev, KERN_NOTICE,
1980                         "Disabling SWNCQ mode (depth %x)\n", sdev->queue_depth);
1981         }
1982
1983         return rc;
1984 }
1985
1986 static int nv_swncq_port_start(struct ata_port *ap)
1987 {
1988         struct device *dev = ap->host->dev;
1989         void __iomem *mmio = ap->host->iomap[NV_MMIO_BAR];
1990         struct nv_swncq_port_priv *pp;
1991         int rc;
1992
1993         rc = ata_port_start(ap);
1994         if (rc)
1995                 return rc;
1996
1997         pp = devm_kzalloc(dev, sizeof(*pp), GFP_KERNEL);
1998         if (!pp)
1999                 return -ENOMEM;
2000
2001         pp->prd = dmam_alloc_coherent(dev, ATA_PRD_TBL_SZ * ATA_MAX_QUEUE,
2002                                       &pp->prd_dma, GFP_KERNEL);
2003         if (!pp->prd)
2004                 return -ENOMEM;
2005         memset(pp->prd, 0, ATA_PRD_TBL_SZ * ATA_MAX_QUEUE);
2006
2007         ap->private_data = pp;
2008         pp->sactive_block = ap->ioaddr.scr_addr + 4 * SCR_ACTIVE;
2009         pp->irq_block = mmio + NV_INT_STATUS_MCP55 + ap->port_no * 2;
2010         pp->tag_block = mmio + NV_NCQ_REG_MCP55 + ap->port_no * 2;
2011
2012         return 0;
2013 }
2014
2015 static void nv_swncq_qc_prep(struct ata_queued_cmd *qc)
2016 {
2017         if (qc->tf.protocol != ATA_PROT_NCQ) {
2018                 ata_sff_qc_prep(qc);
2019                 return;
2020         }
2021
2022         if (!(qc->flags & ATA_QCFLAG_DMAMAP))
2023                 return;
2024
2025         nv_swncq_fill_sg(qc);
2026 }
2027
2028 static void nv_swncq_fill_sg(struct ata_queued_cmd *qc)
2029 {
2030         struct ata_port *ap = qc->ap;
2031         struct scatterlist *sg;
2032         struct nv_swncq_port_priv *pp = ap->private_data;
2033         struct ata_prd *prd;
2034         unsigned int si, idx;
2035
2036         prd = pp->prd + ATA_MAX_PRD * qc->tag;
2037
2038         idx = 0;
2039         for_each_sg(qc->sg, sg, qc->n_elem, si) {
2040                 u32 addr, offset;
2041                 u32 sg_len, len;
2042
2043                 addr = (u32)sg_dma_address(sg);
2044                 sg_len = sg_dma_len(sg);
2045
2046                 while (sg_len) {
2047                         offset = addr & 0xffff;
2048                         len = sg_len;
2049                         if ((offset + sg_len) > 0x10000)
2050                                 len = 0x10000 - offset;
2051
2052                         prd[idx].addr = cpu_to_le32(addr);
2053                         prd[idx].flags_len = cpu_to_le32(len & 0xffff);
2054
2055                         idx++;
2056                         sg_len -= len;
2057                         addr += len;
2058                 }
2059         }
2060
2061         prd[idx - 1].flags_len |= cpu_to_le32(ATA_PRD_EOT);
2062 }
2063
2064 static unsigned int nv_swncq_issue_atacmd(struct ata_port *ap,
2065                                           struct ata_queued_cmd *qc)
2066 {
2067         struct nv_swncq_port_priv *pp = ap->private_data;
2068
2069         if (qc == NULL)
2070                 return 0;
2071
2072         DPRINTK("Enter\n");
2073
2074         writel((1 << qc->tag), pp->sactive_block);
2075         pp->last_issue_tag = qc->tag;
2076         pp->dhfis_bits &= ~(1 << qc->tag);
2077         pp->dmafis_bits &= ~(1 << qc->tag);
2078         pp->qc_active |= (0x1 << qc->tag);
2079
2080         ap->ops->sff_tf_load(ap, &qc->tf);       /* load tf registers */
2081         ap->ops->sff_exec_command(ap, &qc->tf);
2082
2083         DPRINTK("Issued tag %u\n", qc->tag);
2084
2085         return 0;
2086 }
2087
2088 static unsigned int nv_swncq_qc_issue(struct ata_queued_cmd *qc)
2089 {
2090         struct ata_port *ap = qc->ap;
2091         struct nv_swncq_port_priv *pp = ap->private_data;
2092
2093         if (qc->tf.protocol != ATA_PROT_NCQ)
2094                 return ata_sff_qc_issue(qc);
2095
2096         DPRINTK("Enter\n");
2097
2098         if (!pp->qc_active)
2099                 nv_swncq_issue_atacmd(ap, qc);
2100         else
2101                 nv_swncq_qc_to_dq(ap, qc);      /* add qc to defer queue */
2102
2103         return 0;
2104 }
2105
2106 static void nv_swncq_hotplug(struct ata_port *ap, u32 fis)
2107 {
2108         u32 serror;
2109         struct ata_eh_info *ehi = &ap->link.eh_info;
2110
2111         ata_ehi_clear_desc(ehi);
2112
2113         /* AHCI needs SError cleared; otherwise, it might lock up */
2114         sata_scr_read(&ap->link, SCR_ERROR, &serror);
2115         sata_scr_write(&ap->link, SCR_ERROR, serror);
2116
2117         /* analyze @irq_stat */
2118         if (fis & NV_SWNCQ_IRQ_ADDED)
2119                 ata_ehi_push_desc(ehi, "hot plug");
2120         else if (fis & NV_SWNCQ_IRQ_REMOVED)
2121                 ata_ehi_push_desc(ehi, "hot unplug");
2122
2123         ata_ehi_hotplugged(ehi);
2124
2125         /* okay, let's hand over to EH */
2126         ehi->serror |= serror;
2127
2128         ata_port_freeze(ap);
2129 }
2130
2131 static int nv_swncq_sdbfis(struct ata_port *ap)
2132 {
2133         struct ata_queued_cmd *qc;
2134         struct nv_swncq_port_priv *pp = ap->private_data;
2135         struct ata_eh_info *ehi = &ap->link.eh_info;
2136         u32 sactive;
2137         int nr_done = 0;
2138         u32 done_mask;
2139         int i;
2140         u8 host_stat;
2141         u8 lack_dhfis = 0;
2142
2143         host_stat = ap->ops->bmdma_status(ap);
2144         if (unlikely(host_stat & ATA_DMA_ERR)) {
2145                 /* error when transfering data to/from memory */
2146                 ata_ehi_clear_desc(ehi);
2147                 ata_ehi_push_desc(ehi, "BMDMA stat 0x%x", host_stat);
2148                 ehi->err_mask |= AC_ERR_HOST_BUS;
2149                 ehi->action |= ATA_EH_RESET;
2150                 return -EINVAL;
2151         }
2152
2153         ap->ops->sff_irq_clear(ap);
2154         __ata_bmdma_stop(ap);
2155
2156         sactive = readl(pp->sactive_block);
2157         done_mask = pp->qc_active ^ sactive;
2158
2159         if (unlikely(done_mask & sactive)) {
2160                 ata_ehi_clear_desc(ehi);
2161                 ata_ehi_push_desc(ehi, "illegal SWNCQ:qc_active transition"
2162                                   "(%08x->%08x)", pp->qc_active, sactive);
2163                 ehi->err_mask |= AC_ERR_HSM;
2164                 ehi->action |= ATA_EH_RESET;
2165                 return -EINVAL;
2166         }
2167         for (i = 0; i < ATA_MAX_QUEUE; i++) {
2168                 if (!(done_mask & (1 << i)))
2169                         continue;
2170
2171                 qc = ata_qc_from_tag(ap, i);
2172                 if (qc) {
2173                         ata_qc_complete(qc);
2174                         pp->qc_active &= ~(1 << i);
2175                         pp->dhfis_bits &= ~(1 << i);
2176                         pp->dmafis_bits &= ~(1 << i);
2177                         pp->sdbfis_bits |= (1 << i);
2178                         nr_done++;
2179                 }
2180         }
2181
2182         if (!ap->qc_active) {
2183                 DPRINTK("over\n");
2184                 nv_swncq_pp_reinit(ap);
2185                 return nr_done;
2186         }
2187
2188         if (pp->qc_active & pp->dhfis_bits)
2189                 return nr_done;
2190
2191         if ((pp->ncq_flags & ncq_saw_backout) ||
2192             (pp->qc_active ^ pp->dhfis_bits))
2193                 /* if the controller cann't get a device to host register FIS,
2194                  * The driver needs to reissue the new command.
2195                  */
2196                 lack_dhfis = 1;
2197
2198         DPRINTK("id 0x%x QC: qc_active 0x%x,"
2199                 "SWNCQ:qc_active 0x%X defer_bits %X "
2200                 "dhfis 0x%X dmafis 0x%X last_issue_tag %x\n",
2201                 ap->print_id, ap->qc_active, pp->qc_active,
2202                 pp->defer_queue.defer_bits, pp->dhfis_bits,
2203                 pp->dmafis_bits, pp->last_issue_tag);
2204
2205         nv_swncq_fis_reinit(ap);
2206
2207         if (lack_dhfis) {
2208                 qc = ata_qc_from_tag(ap, pp->last_issue_tag);
2209                 nv_swncq_issue_atacmd(ap, qc);
2210                 return nr_done;
2211         }
2212
2213         if (pp->defer_queue.defer_bits) {
2214                 /* send deferral queue command */
2215                 qc = nv_swncq_qc_from_dq(ap);
2216                 WARN_ON(qc == NULL);
2217                 nv_swncq_issue_atacmd(ap, qc);
2218         }
2219
2220         return nr_done;
2221 }
2222
2223 static inline u32 nv_swncq_tag(struct ata_port *ap)
2224 {
2225         struct nv_swncq_port_priv *pp = ap->private_data;
2226         u32 tag;
2227
2228         tag = readb(pp->tag_block) >> 2;
2229         return (tag & 0x1f);
2230 }
2231
2232 static int nv_swncq_dmafis(struct ata_port *ap)
2233 {
2234         struct ata_queued_cmd *qc;
2235         unsigned int rw;
2236         u8 dmactl;
2237         u32 tag;
2238         struct nv_swncq_port_priv *pp = ap->private_data;
2239
2240         __ata_bmdma_stop(ap);
2241         tag = nv_swncq_tag(ap);
2242
2243         DPRINTK("dma setup tag 0x%x\n", tag);
2244         qc = ata_qc_from_tag(ap, tag);
2245
2246         if (unlikely(!qc))
2247                 return 0;
2248
2249         rw = qc->tf.flags & ATA_TFLAG_WRITE;
2250
2251         /* load PRD table addr. */
2252         iowrite32(pp->prd_dma + ATA_PRD_TBL_SZ * qc->tag,
2253                   ap->ioaddr.bmdma_addr + ATA_DMA_TABLE_OFS);
2254
2255         /* specify data direction, triple-check start bit is clear */
2256         dmactl = ioread8(ap->ioaddr.bmdma_addr + ATA_DMA_CMD);
2257         dmactl &= ~ATA_DMA_WR;
2258         if (!rw)
2259                 dmactl |= ATA_DMA_WR;
2260
2261         iowrite8(dmactl | ATA_DMA_START, ap->ioaddr.bmdma_addr + ATA_DMA_CMD);
2262
2263         return 1;
2264 }
2265
2266 static void nv_swncq_host_interrupt(struct ata_port *ap, u16 fis)
2267 {
2268         struct nv_swncq_port_priv *pp = ap->private_data;
2269         struct ata_queued_cmd *qc;
2270         struct ata_eh_info *ehi = &ap->link.eh_info;
2271         u32 serror;
2272         u8 ata_stat;
2273         int rc = 0;
2274
2275         ata_stat = ap->ops->sff_check_status(ap);
2276         nv_swncq_irq_clear(ap, fis);
2277         if (!fis)
2278                 return;
2279
2280         if (ap->pflags & ATA_PFLAG_FROZEN)
2281                 return;
2282
2283         if (fis & NV_SWNCQ_IRQ_HOTPLUG) {
2284                 nv_swncq_hotplug(ap, fis);
2285                 return;
2286         }
2287
2288         if (!pp->qc_active)
2289                 return;
2290
2291         if (ap->ops->scr_read(&ap->link, SCR_ERROR, &serror))
2292                 return;
2293         ap->ops->scr_write(&ap->link, SCR_ERROR, serror);
2294
2295         if (ata_stat & ATA_ERR) {
2296                 ata_ehi_clear_desc(ehi);
2297                 ata_ehi_push_desc(ehi, "Ata error. fis:0x%X", fis);
2298                 ehi->err_mask |= AC_ERR_DEV;
2299                 ehi->serror |= serror;
2300                 ehi->action |= ATA_EH_RESET;
2301                 ata_port_freeze(ap);
2302                 return;
2303         }
2304
2305         if (fis & NV_SWNCQ_IRQ_BACKOUT) {
2306                 /* If the IRQ is backout, driver must issue
2307                  * the new command again some time later.
2308                  */
2309                 pp->ncq_flags |= ncq_saw_backout;
2310         }
2311
2312         if (fis & NV_SWNCQ_IRQ_SDBFIS) {
2313                 pp->ncq_flags |= ncq_saw_sdb;
2314                 DPRINTK("id 0x%x SWNCQ: qc_active 0x%X "
2315                         "dhfis 0x%X dmafis 0x%X sactive 0x%X\n",
2316                         ap->print_id, pp->qc_active, pp->dhfis_bits,
2317                         pp->dmafis_bits, readl(pp->sactive_block));
2318                 rc = nv_swncq_sdbfis(ap);
2319                 if (rc < 0)
2320                         goto irq_error;
2321         }
2322
2323         if (fis & NV_SWNCQ_IRQ_DHREGFIS) {
2324                 /* The interrupt indicates the new command
2325                  * was transmitted correctly to the drive.
2326                  */
2327                 pp->dhfis_bits |= (0x1 << pp->last_issue_tag);
2328                 pp->ncq_flags |= ncq_saw_d2h;
2329                 if (pp->ncq_flags & (ncq_saw_sdb | ncq_saw_backout)) {
2330                         ata_ehi_push_desc(ehi, "illegal fis transaction");
2331                         ehi->err_mask |= AC_ERR_HSM;
2332                         ehi->action |= ATA_EH_RESET;
2333                         goto irq_error;
2334                 }
2335
2336                 if (!(fis & NV_SWNCQ_IRQ_DMASETUP) &&
2337                     !(pp->ncq_flags & ncq_saw_dmas)) {
2338                         ata_stat = ap->ops->sff_check_status(ap);
2339                         if (ata_stat & ATA_BUSY)
2340                                 goto irq_exit;
2341
2342                         if (pp->defer_queue.defer_bits) {
2343                                 DPRINTK("send next command\n");
2344                                 qc = nv_swncq_qc_from_dq(ap);
2345                                 nv_swncq_issue_atacmd(ap, qc);
2346                         }
2347                 }
2348         }
2349
2350         if (fis & NV_SWNCQ_IRQ_DMASETUP) {
2351                 /* program the dma controller with appropriate PRD buffers
2352                  * and start the DMA transfer for requested command.
2353                  */
2354                 pp->dmafis_bits |= (0x1 << nv_swncq_tag(ap));
2355                 pp->ncq_flags |= ncq_saw_dmas;
2356                 rc = nv_swncq_dmafis(ap);
2357         }
2358
2359 irq_exit:
2360         return;
2361 irq_error:
2362         ata_ehi_push_desc(ehi, "fis:0x%x", fis);
2363         ata_port_freeze(ap);
2364         return;
2365 }
2366
2367 static irqreturn_t nv_swncq_interrupt(int irq, void *dev_instance)
2368 {
2369         struct ata_host *host = dev_instance;
2370         unsigned int i;
2371         unsigned int handled = 0;
2372         unsigned long flags;
2373         u32 irq_stat;
2374
2375         spin_lock_irqsave(&host->lock, flags);
2376
2377         irq_stat = readl(host->iomap[NV_MMIO_BAR] + NV_INT_STATUS_MCP55);
2378
2379         for (i = 0; i < host->n_ports; i++) {
2380                 struct ata_port *ap = host->ports[i];
2381
2382                 if (ap && !(ap->flags & ATA_FLAG_DISABLED)) {
2383                         if (ap->link.sactive) {
2384                                 nv_swncq_host_interrupt(ap, (u16)irq_stat);
2385                                 handled = 1;
2386                         } else {
2387                                 if (irq_stat)   /* reserve Hotplug */
2388                                         nv_swncq_irq_clear(ap, 0xfff0);
2389
2390                                 handled += nv_host_intr(ap, (u8)irq_stat);
2391                         }
2392                 }
2393                 irq_stat >>= NV_INT_PORT_SHIFT_MCP55;
2394         }
2395
2396         spin_unlock_irqrestore(&host->lock, flags);
2397
2398         return IRQ_RETVAL(handled);
2399 }
2400
2401 static int nv_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
2402 {
2403         static int printed_version;
2404         const struct ata_port_info *ppi[] = { NULL, NULL };
2405         struct nv_pi_priv *ipriv;
2406         struct ata_host *host;
2407         struct nv_host_priv *hpriv;
2408         int rc;
2409         u32 bar;
2410         void __iomem *base;
2411         unsigned long type = ent->driver_data;
2412
2413         // Make sure this is a SATA controller by counting the number of bars
2414         // (NVIDIA SATA controllers will always have six bars).  Otherwise,
2415         // it's an IDE controller and we ignore it.
2416         for (bar = 0; bar < 6; bar++)
2417                 if (pci_resource_start(pdev, bar) == 0)
2418                         return -ENODEV;
2419
2420         if (!printed_version++)
2421                 dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n");
2422
2423         rc = pcim_enable_device(pdev);
2424         if (rc)
2425                 return rc;
2426
2427         /* determine type and allocate host */
2428         if (type == CK804 && adma_enabled) {
2429                 dev_printk(KERN_NOTICE, &pdev->dev, "Using ADMA mode\n");
2430                 type = ADMA;
2431         } else if (type == MCP5x && swncq_enabled) {
2432                 dev_printk(KERN_NOTICE, &pdev->dev, "Using SWNCQ mode\n");
2433                 type = SWNCQ;
2434         }
2435
2436         ppi[0] = &nv_port_info[type];
2437         ipriv = ppi[0]->private_data;
2438         rc = ata_pci_sff_prepare_host(pdev, ppi, &host);
2439         if (rc)
2440                 return rc;
2441
2442         hpriv = devm_kzalloc(&pdev->dev, sizeof(*hpriv), GFP_KERNEL);
2443         if (!hpriv)
2444                 return -ENOMEM;
2445         hpriv->type = type;
2446         host->private_data = hpriv;
2447
2448         /* request and iomap NV_MMIO_BAR */
2449         rc = pcim_iomap_regions(pdev, 1 << NV_MMIO_BAR, DRV_NAME);
2450         if (rc)
2451                 return rc;
2452
2453         /* configure SCR access */
2454         base = host->iomap[NV_MMIO_BAR];
2455         host->ports[0]->ioaddr.scr_addr = base + NV_PORT0_SCR_REG_OFFSET;
2456         host->ports[1]->ioaddr.scr_addr = base + NV_PORT1_SCR_REG_OFFSET;
2457
2458         /* enable SATA space for CK804 */
2459         if (type >= CK804) {
2460                 u8 regval;
2461
2462                 pci_read_config_byte(pdev, NV_MCP_SATA_CFG_20, &regval);
2463                 regval |= NV_MCP_SATA_CFG_20_SATA_SPACE_EN;
2464                 pci_write_config_byte(pdev, NV_MCP_SATA_CFG_20, regval);
2465         }
2466
2467         /* init ADMA */
2468         if (type == ADMA) {
2469                 rc = nv_adma_host_init(host);
2470                 if (rc)
2471                         return rc;
2472         } else if (type == SWNCQ)
2473                 nv_swncq_host_init(host);
2474
2475         if (msi_enabled) {
2476                 dev_printk(KERN_NOTICE, &pdev->dev, "Using MSI\n");
2477                 pci_enable_msi(pdev);
2478         }
2479
2480         pci_set_master(pdev);
2481         return ata_host_activate(host, pdev->irq, ipriv->irq_handler,
2482                                  IRQF_SHARED, ipriv->sht);
2483 }
2484
2485 #ifdef CONFIG_PM
2486 static int nv_pci_device_resume(struct pci_dev *pdev)
2487 {
2488         struct ata_host *host = dev_get_drvdata(&pdev->dev);
2489         struct nv_host_priv *hpriv = host->private_data;
2490         int rc;
2491
2492         rc = ata_pci_device_do_resume(pdev);
2493         if (rc)
2494                 return rc;
2495
2496         if (pdev->dev.power.power_state.event == PM_EVENT_SUSPEND) {
2497                 if (hpriv->type >= CK804) {
2498                         u8 regval;
2499
2500                         pci_read_config_byte(pdev, NV_MCP_SATA_CFG_20, &regval);
2501                         regval |= NV_MCP_SATA_CFG_20_SATA_SPACE_EN;
2502                         pci_write_config_byte(pdev, NV_MCP_SATA_CFG_20, regval);
2503                 }
2504                 if (hpriv->type == ADMA) {
2505                         u32 tmp32;
2506                         struct nv_adma_port_priv *pp;
2507                         /* enable/disable ADMA on the ports appropriately */
2508                         pci_read_config_dword(pdev, NV_MCP_SATA_CFG_20, &tmp32);
2509
2510                         pp = host->ports[0]->private_data;
2511                         if (pp->flags & NV_ADMA_ATAPI_SETUP_COMPLETE)
2512                                 tmp32 &= ~(NV_MCP_SATA_CFG_20_PORT0_EN |
2513                                            NV_MCP_SATA_CFG_20_PORT0_PWB_EN);
2514                         else
2515                                 tmp32 |=  (NV_MCP_SATA_CFG_20_PORT0_EN |
2516                                            NV_MCP_SATA_CFG_20_PORT0_PWB_EN);
2517                         pp = host->ports[1]->private_data;
2518                         if (pp->flags & NV_ADMA_ATAPI_SETUP_COMPLETE)
2519                                 tmp32 &= ~(NV_MCP_SATA_CFG_20_PORT1_EN |
2520                                            NV_MCP_SATA_CFG_20_PORT1_PWB_EN);
2521                         else
2522                                 tmp32 |=  (NV_MCP_SATA_CFG_20_PORT1_EN |
2523                                            NV_MCP_SATA_CFG_20_PORT1_PWB_EN);
2524
2525                         pci_write_config_dword(pdev, NV_MCP_SATA_CFG_20, tmp32);
2526                 }
2527         }
2528
2529         ata_host_resume(host);
2530
2531         return 0;
2532 }
2533 #endif
2534
2535 static void nv_ck804_host_stop(struct ata_host *host)
2536 {
2537         struct pci_dev *pdev = to_pci_dev(host->dev);
2538         u8 regval;
2539
2540         /* disable SATA space for CK804 */
2541         pci_read_config_byte(pdev, NV_MCP_SATA_CFG_20, &regval);
2542         regval &= ~NV_MCP_SATA_CFG_20_SATA_SPACE_EN;
2543         pci_write_config_byte(pdev, NV_MCP_SATA_CFG_20, regval);
2544 }
2545
2546 static void nv_adma_host_stop(struct ata_host *host)
2547 {
2548         struct pci_dev *pdev = to_pci_dev(host->dev);
2549         u32 tmp32;
2550
2551         /* disable ADMA on the ports */
2552         pci_read_config_dword(pdev, NV_MCP_SATA_CFG_20, &tmp32);
2553         tmp32 &= ~(NV_MCP_SATA_CFG_20_PORT0_EN |
2554                    NV_MCP_SATA_CFG_20_PORT0_PWB_EN |
2555                    NV_MCP_SATA_CFG_20_PORT1_EN |
2556                    NV_MCP_SATA_CFG_20_PORT1_PWB_EN);
2557
2558         pci_write_config_dword(pdev, NV_MCP_SATA_CFG_20, tmp32);
2559
2560         nv_ck804_host_stop(host);
2561 }
2562
2563 static int __init nv_init(void)
2564 {
2565         return pci_register_driver(&nv_pci_driver);
2566 }
2567
2568 static void __exit nv_exit(void)
2569 {
2570         pci_unregister_driver(&nv_pci_driver);
2571 }
2572
2573 module_init(nv_init);
2574 module_exit(nv_exit);
2575 module_param_named(adma, adma_enabled, bool, 0444);
2576 MODULE_PARM_DESC(adma, "Enable use of ADMA (Default: false)");
2577 module_param_named(swncq, swncq_enabled, bool, 0444);
2578 MODULE_PARM_DESC(swncq, "Enable use of SWNCQ (Default: true)");
2579 module_param_named(msi, msi_enabled, bool, 0444);
2580 MODULE_PARM_DESC(msi, "Enable use of MSI (Default: false)");
2581