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