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