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