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