xref: /linux/drivers/ata/ahci.c (revision dfff0fa65ab15db45acd64b3189787d37ab163cd)
1 /*
2  *  ahci.c - AHCI SATA support
3  *
4  *  Maintained by:  Jeff Garzik <jgarzik@pobox.com>
5  *    		    Please ALWAYS copy linux-ide@vger.kernel.org
6  *		    on emails.
7  *
8  *  Copyright 2004-2005 Red Hat, Inc.
9  *
10  *
11  *  This program is free software; you can redistribute it and/or modify
12  *  it under the terms of the GNU General Public License as published by
13  *  the Free Software Foundation; either version 2, or (at your option)
14  *  any later version.
15  *
16  *  This program is distributed in the hope that it will be useful,
17  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
18  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19  *  GNU General Public License for more details.
20  *
21  *  You should have received a copy of the GNU General Public License
22  *  along with this program; see the file COPYING.  If not, write to
23  *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
24  *
25  *
26  * libata documentation is available via 'make {ps|pdf}docs',
27  * as Documentation/DocBook/libata.*
28  *
29  * AHCI hardware documentation:
30  * http://www.intel.com/technology/serialata/pdf/rev1_0.pdf
31  * http://www.intel.com/technology/serialata/pdf/rev1_1.pdf
32  *
33  */
34 
35 #include <linux/kernel.h>
36 #include <linux/module.h>
37 #include <linux/pci.h>
38 #include <linux/init.h>
39 #include <linux/blkdev.h>
40 #include <linux/delay.h>
41 #include <linux/interrupt.h>
42 #include <linux/dma-mapping.h>
43 #include <linux/device.h>
44 #include <linux/dmi.h>
45 #include <scsi/scsi_host.h>
46 #include <scsi/scsi_cmnd.h>
47 #include <linux/libata.h>
48 
49 #define DRV_NAME	"ahci"
50 #define DRV_VERSION	"3.0"
51 
52 /* Enclosure Management Control */
53 #define EM_CTRL_MSG_TYPE              0x000f0000
54 
55 /* Enclosure Management LED Message Type */
56 #define EM_MSG_LED_HBA_PORT           0x0000000f
57 #define EM_MSG_LED_PMP_SLOT           0x0000ff00
58 #define EM_MSG_LED_VALUE              0xffff0000
59 #define EM_MSG_LED_VALUE_ACTIVITY     0x00070000
60 #define EM_MSG_LED_VALUE_OFF          0xfff80000
61 #define EM_MSG_LED_VALUE_ON           0x00010000
62 
63 static int ahci_skip_host_reset;
64 static int ahci_ignore_sss;
65 
66 module_param_named(skip_host_reset, ahci_skip_host_reset, int, 0444);
67 MODULE_PARM_DESC(skip_host_reset, "skip global host reset (0=don't skip, 1=skip)");
68 
69 module_param_named(ignore_sss, ahci_ignore_sss, int, 0444);
70 MODULE_PARM_DESC(ignore_sss, "Ignore staggered spinup flag (0=don't ignore, 1=ignore)");
71 
72 static int ahci_enable_alpm(struct ata_port *ap,
73 		enum link_pm policy);
74 static void ahci_disable_alpm(struct ata_port *ap);
75 static ssize_t ahci_led_show(struct ata_port *ap, char *buf);
76 static ssize_t ahci_led_store(struct ata_port *ap, const char *buf,
77 			      size_t size);
78 static ssize_t ahci_transmit_led_message(struct ata_port *ap, u32 state,
79 					ssize_t size);
80 
81 enum {
82 	AHCI_PCI_BAR		= 5,
83 	AHCI_MAX_PORTS		= 32,
84 	AHCI_MAX_SG		= 168, /* hardware max is 64K */
85 	AHCI_DMA_BOUNDARY	= 0xffffffff,
86 	AHCI_MAX_CMDS		= 32,
87 	AHCI_CMD_SZ		= 32,
88 	AHCI_CMD_SLOT_SZ	= AHCI_MAX_CMDS * AHCI_CMD_SZ,
89 	AHCI_RX_FIS_SZ		= 256,
90 	AHCI_CMD_TBL_CDB	= 0x40,
91 	AHCI_CMD_TBL_HDR_SZ	= 0x80,
92 	AHCI_CMD_TBL_SZ		= AHCI_CMD_TBL_HDR_SZ + (AHCI_MAX_SG * 16),
93 	AHCI_CMD_TBL_AR_SZ	= AHCI_CMD_TBL_SZ * AHCI_MAX_CMDS,
94 	AHCI_PORT_PRIV_DMA_SZ	= AHCI_CMD_SLOT_SZ + AHCI_CMD_TBL_AR_SZ +
95 				  AHCI_RX_FIS_SZ,
96 	AHCI_IRQ_ON_SG		= (1 << 31),
97 	AHCI_CMD_ATAPI		= (1 << 5),
98 	AHCI_CMD_WRITE		= (1 << 6),
99 	AHCI_CMD_PREFETCH	= (1 << 7),
100 	AHCI_CMD_RESET		= (1 << 8),
101 	AHCI_CMD_CLR_BUSY	= (1 << 10),
102 
103 	RX_FIS_D2H_REG		= 0x40,	/* offset of D2H Register FIS data */
104 	RX_FIS_SDB		= 0x58, /* offset of SDB FIS data */
105 	RX_FIS_UNK		= 0x60, /* offset of Unknown FIS data */
106 
107 	board_ahci		= 0,
108 	board_ahci_vt8251	= 1,
109 	board_ahci_ign_iferr	= 2,
110 	board_ahci_sb600	= 3,
111 	board_ahci_mv		= 4,
112 	board_ahci_sb700	= 5, /* for SB700 and SB800 */
113 	board_ahci_mcp65	= 6,
114 	board_ahci_nopmp	= 7,
115 	board_ahci_yesncq	= 8,
116 
117 	/* global controller registers */
118 	HOST_CAP		= 0x00, /* host capabilities */
119 	HOST_CTL		= 0x04, /* global host control */
120 	HOST_IRQ_STAT		= 0x08, /* interrupt status */
121 	HOST_PORTS_IMPL		= 0x0c, /* bitmap of implemented ports */
122 	HOST_VERSION		= 0x10, /* AHCI spec. version compliancy */
123 	HOST_EM_LOC		= 0x1c, /* Enclosure Management location */
124 	HOST_EM_CTL		= 0x20, /* Enclosure Management Control */
125 
126 	/* HOST_CTL bits */
127 	HOST_RESET		= (1 << 0),  /* reset controller; self-clear */
128 	HOST_IRQ_EN		= (1 << 1),  /* global IRQ enable */
129 	HOST_AHCI_EN		= (1 << 31), /* AHCI enabled */
130 
131 	/* HOST_CAP bits */
132 	HOST_CAP_EMS		= (1 << 6),  /* Enclosure Management support */
133 	HOST_CAP_SSC		= (1 << 14), /* Slumber capable */
134 	HOST_CAP_PMP		= (1 << 17), /* Port Multiplier support */
135 	HOST_CAP_CLO		= (1 << 24), /* Command List Override support */
136 	HOST_CAP_ALPM		= (1 << 26), /* Aggressive Link PM support */
137 	HOST_CAP_SSS		= (1 << 27), /* Staggered Spin-up */
138 	HOST_CAP_SNTF		= (1 << 29), /* SNotification register */
139 	HOST_CAP_NCQ		= (1 << 30), /* Native Command Queueing */
140 	HOST_CAP_64		= (1 << 31), /* PCI DAC (64-bit DMA) support */
141 
142 	/* registers for each SATA port */
143 	PORT_LST_ADDR		= 0x00, /* command list DMA addr */
144 	PORT_LST_ADDR_HI	= 0x04, /* command list DMA addr hi */
145 	PORT_FIS_ADDR		= 0x08, /* FIS rx buf addr */
146 	PORT_FIS_ADDR_HI	= 0x0c, /* FIS rx buf addr hi */
147 	PORT_IRQ_STAT		= 0x10, /* interrupt status */
148 	PORT_IRQ_MASK		= 0x14, /* interrupt enable/disable mask */
149 	PORT_CMD		= 0x18, /* port command */
150 	PORT_TFDATA		= 0x20,	/* taskfile data */
151 	PORT_SIG		= 0x24,	/* device TF signature */
152 	PORT_CMD_ISSUE		= 0x38, /* command issue */
153 	PORT_SCR_STAT		= 0x28, /* SATA phy register: SStatus */
154 	PORT_SCR_CTL		= 0x2c, /* SATA phy register: SControl */
155 	PORT_SCR_ERR		= 0x30, /* SATA phy register: SError */
156 	PORT_SCR_ACT		= 0x34, /* SATA phy register: SActive */
157 	PORT_SCR_NTF		= 0x3c, /* SATA phy register: SNotification */
158 
159 	/* PORT_IRQ_{STAT,MASK} bits */
160 	PORT_IRQ_COLD_PRES	= (1 << 31), /* cold presence detect */
161 	PORT_IRQ_TF_ERR		= (1 << 30), /* task file error */
162 	PORT_IRQ_HBUS_ERR	= (1 << 29), /* host bus fatal error */
163 	PORT_IRQ_HBUS_DATA_ERR	= (1 << 28), /* host bus data error */
164 	PORT_IRQ_IF_ERR		= (1 << 27), /* interface fatal error */
165 	PORT_IRQ_IF_NONFATAL	= (1 << 26), /* interface non-fatal error */
166 	PORT_IRQ_OVERFLOW	= (1 << 24), /* xfer exhausted available S/G */
167 	PORT_IRQ_BAD_PMP	= (1 << 23), /* incorrect port multiplier */
168 
169 	PORT_IRQ_PHYRDY		= (1 << 22), /* PhyRdy changed */
170 	PORT_IRQ_DEV_ILCK	= (1 << 7), /* device interlock */
171 	PORT_IRQ_CONNECT	= (1 << 6), /* port connect change status */
172 	PORT_IRQ_SG_DONE	= (1 << 5), /* descriptor processed */
173 	PORT_IRQ_UNK_FIS	= (1 << 4), /* unknown FIS rx'd */
174 	PORT_IRQ_SDB_FIS	= (1 << 3), /* Set Device Bits FIS rx'd */
175 	PORT_IRQ_DMAS_FIS	= (1 << 2), /* DMA Setup FIS rx'd */
176 	PORT_IRQ_PIOS_FIS	= (1 << 1), /* PIO Setup FIS rx'd */
177 	PORT_IRQ_D2H_REG_FIS	= (1 << 0), /* D2H Register FIS rx'd */
178 
179 	PORT_IRQ_FREEZE		= PORT_IRQ_HBUS_ERR |
180 				  PORT_IRQ_IF_ERR |
181 				  PORT_IRQ_CONNECT |
182 				  PORT_IRQ_PHYRDY |
183 				  PORT_IRQ_UNK_FIS |
184 				  PORT_IRQ_BAD_PMP,
185 	PORT_IRQ_ERROR		= PORT_IRQ_FREEZE |
186 				  PORT_IRQ_TF_ERR |
187 				  PORT_IRQ_HBUS_DATA_ERR,
188 	DEF_PORT_IRQ		= PORT_IRQ_ERROR | PORT_IRQ_SG_DONE |
189 				  PORT_IRQ_SDB_FIS | PORT_IRQ_DMAS_FIS |
190 				  PORT_IRQ_PIOS_FIS | PORT_IRQ_D2H_REG_FIS,
191 
192 	/* PORT_CMD bits */
193 	PORT_CMD_ASP		= (1 << 27), /* Aggressive Slumber/Partial */
194 	PORT_CMD_ALPE		= (1 << 26), /* Aggressive Link PM enable */
195 	PORT_CMD_ATAPI		= (1 << 24), /* Device is ATAPI */
196 	PORT_CMD_PMP		= (1 << 17), /* PMP attached */
197 	PORT_CMD_LIST_ON	= (1 << 15), /* cmd list DMA engine running */
198 	PORT_CMD_FIS_ON		= (1 << 14), /* FIS DMA engine running */
199 	PORT_CMD_FIS_RX		= (1 << 4), /* Enable FIS receive DMA engine */
200 	PORT_CMD_CLO		= (1 << 3), /* Command list override */
201 	PORT_CMD_POWER_ON	= (1 << 2), /* Power up device */
202 	PORT_CMD_SPIN_UP	= (1 << 1), /* Spin up device */
203 	PORT_CMD_START		= (1 << 0), /* Enable port DMA engine */
204 
205 	PORT_CMD_ICC_MASK	= (0xf << 28), /* i/f ICC state mask */
206 	PORT_CMD_ICC_ACTIVE	= (0x1 << 28), /* Put i/f in active state */
207 	PORT_CMD_ICC_PARTIAL	= (0x2 << 28), /* Put i/f in partial state */
208 	PORT_CMD_ICC_SLUMBER	= (0x6 << 28), /* Put i/f in slumber state */
209 
210 	/* hpriv->flags bits */
211 	AHCI_HFLAG_NO_NCQ		= (1 << 0),
212 	AHCI_HFLAG_IGN_IRQ_IF_ERR	= (1 << 1), /* ignore IRQ_IF_ERR */
213 	AHCI_HFLAG_IGN_SERR_INTERNAL	= (1 << 2), /* ignore SERR_INTERNAL */
214 	AHCI_HFLAG_32BIT_ONLY		= (1 << 3), /* force 32bit */
215 	AHCI_HFLAG_MV_PATA		= (1 << 4), /* PATA port */
216 	AHCI_HFLAG_NO_MSI		= (1 << 5), /* no PCI MSI */
217 	AHCI_HFLAG_NO_PMP		= (1 << 6), /* no PMP */
218 	AHCI_HFLAG_NO_HOTPLUG		= (1 << 7), /* ignore PxSERR.DIAG.N */
219 	AHCI_HFLAG_SECT255		= (1 << 8), /* max 255 sectors */
220 	AHCI_HFLAG_YES_NCQ		= (1 << 9), /* force NCQ cap on */
221 	AHCI_HFLAG_NO_SUSPEND		= (1 << 10), /* don't suspend */
222 
223 	/* ap->flags bits */
224 
225 	AHCI_FLAG_COMMON		= ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
226 					  ATA_FLAG_MMIO | ATA_FLAG_PIO_DMA |
227 					  ATA_FLAG_ACPI_SATA | ATA_FLAG_AN |
228 					  ATA_FLAG_IPM,
229 
230 	ICH_MAP				= 0x90, /* ICH MAP register */
231 
232 	/* em constants */
233 	EM_MAX_SLOTS			= 8,
234 	EM_MAX_RETRY			= 5,
235 
236 	/* em_ctl bits */
237 	EM_CTL_RST			= (1 << 9), /* Reset */
238 	EM_CTL_TM			= (1 << 8), /* Transmit Message */
239 	EM_CTL_ALHD			= (1 << 26), /* Activity LED */
240 };
241 
242 struct ahci_cmd_hdr {
243 	__le32			opts;
244 	__le32			status;
245 	__le32			tbl_addr;
246 	__le32			tbl_addr_hi;
247 	__le32			reserved[4];
248 };
249 
250 struct ahci_sg {
251 	__le32			addr;
252 	__le32			addr_hi;
253 	__le32			reserved;
254 	__le32			flags_size;
255 };
256 
257 struct ahci_em_priv {
258 	enum sw_activity blink_policy;
259 	struct timer_list timer;
260 	unsigned long saved_activity;
261 	unsigned long activity;
262 	unsigned long led_state;
263 };
264 
265 struct ahci_host_priv {
266 	unsigned int		flags;		/* AHCI_HFLAG_* */
267 	u32			cap;		/* cap to use */
268 	u32			port_map;	/* port map to use */
269 	u32			saved_cap;	/* saved initial cap */
270 	u32			saved_port_map;	/* saved initial port_map */
271 	u32 			em_loc; /* enclosure management location */
272 };
273 
274 struct ahci_port_priv {
275 	struct ata_link		*active_link;
276 	struct ahci_cmd_hdr	*cmd_slot;
277 	dma_addr_t		cmd_slot_dma;
278 	void			*cmd_tbl;
279 	dma_addr_t		cmd_tbl_dma;
280 	void			*rx_fis;
281 	dma_addr_t		rx_fis_dma;
282 	/* for NCQ spurious interrupt analysis */
283 	unsigned int		ncq_saw_d2h:1;
284 	unsigned int		ncq_saw_dmas:1;
285 	unsigned int		ncq_saw_sdb:1;
286 	u32 			intr_mask;	/* interrupts to enable */
287 	/* enclosure management info per PM slot */
288 	struct ahci_em_priv	em_priv[EM_MAX_SLOTS];
289 };
290 
291 static int ahci_scr_read(struct ata_link *link, unsigned int sc_reg, u32 *val);
292 static int ahci_scr_write(struct ata_link *link, unsigned int sc_reg, u32 val);
293 static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent);
294 static unsigned int ahci_qc_issue(struct ata_queued_cmd *qc);
295 static bool ahci_qc_fill_rtf(struct ata_queued_cmd *qc);
296 static int ahci_port_start(struct ata_port *ap);
297 static void ahci_port_stop(struct ata_port *ap);
298 static void ahci_qc_prep(struct ata_queued_cmd *qc);
299 static void ahci_freeze(struct ata_port *ap);
300 static void ahci_thaw(struct ata_port *ap);
301 static void ahci_pmp_attach(struct ata_port *ap);
302 static void ahci_pmp_detach(struct ata_port *ap);
303 static int ahci_softreset(struct ata_link *link, unsigned int *class,
304 			  unsigned long deadline);
305 static int ahci_sb600_softreset(struct ata_link *link, unsigned int *class,
306 			  unsigned long deadline);
307 static int ahci_hardreset(struct ata_link *link, unsigned int *class,
308 			  unsigned long deadline);
309 static int ahci_vt8251_hardreset(struct ata_link *link, unsigned int *class,
310 				 unsigned long deadline);
311 static int ahci_p5wdh_hardreset(struct ata_link *link, unsigned int *class,
312 				unsigned long deadline);
313 static void ahci_postreset(struct ata_link *link, unsigned int *class);
314 static void ahci_error_handler(struct ata_port *ap);
315 static void ahci_post_internal_cmd(struct ata_queued_cmd *qc);
316 static int ahci_port_resume(struct ata_port *ap);
317 static void ahci_dev_config(struct ata_device *dev);
318 static void ahci_fill_cmd_slot(struct ahci_port_priv *pp, unsigned int tag,
319 			       u32 opts);
320 #ifdef CONFIG_PM
321 static int ahci_port_suspend(struct ata_port *ap, pm_message_t mesg);
322 static int ahci_pci_device_suspend(struct pci_dev *pdev, pm_message_t mesg);
323 static int ahci_pci_device_resume(struct pci_dev *pdev);
324 #endif
325 static ssize_t ahci_activity_show(struct ata_device *dev, char *buf);
326 static ssize_t ahci_activity_store(struct ata_device *dev,
327 				   enum sw_activity val);
328 static void ahci_init_sw_activity(struct ata_link *link);
329 
330 static struct device_attribute *ahci_shost_attrs[] = {
331 	&dev_attr_link_power_management_policy,
332 	&dev_attr_em_message_type,
333 	&dev_attr_em_message,
334 	NULL
335 };
336 
337 static struct device_attribute *ahci_sdev_attrs[] = {
338 	&dev_attr_sw_activity,
339 	&dev_attr_unload_heads,
340 	NULL
341 };
342 
343 static struct scsi_host_template ahci_sht = {
344 	ATA_NCQ_SHT(DRV_NAME),
345 	.can_queue		= AHCI_MAX_CMDS - 1,
346 	.sg_tablesize		= AHCI_MAX_SG,
347 	.dma_boundary		= AHCI_DMA_BOUNDARY,
348 	.shost_attrs		= ahci_shost_attrs,
349 	.sdev_attrs		= ahci_sdev_attrs,
350 };
351 
352 static struct ata_port_operations ahci_ops = {
353 	.inherits		= &sata_pmp_port_ops,
354 
355 	.qc_defer		= sata_pmp_qc_defer_cmd_switch,
356 	.qc_prep		= ahci_qc_prep,
357 	.qc_issue		= ahci_qc_issue,
358 	.qc_fill_rtf		= ahci_qc_fill_rtf,
359 
360 	.freeze			= ahci_freeze,
361 	.thaw			= ahci_thaw,
362 	.softreset		= ahci_softreset,
363 	.hardreset		= ahci_hardreset,
364 	.postreset		= ahci_postreset,
365 	.pmp_softreset		= ahci_softreset,
366 	.error_handler		= ahci_error_handler,
367 	.post_internal_cmd	= ahci_post_internal_cmd,
368 	.dev_config		= ahci_dev_config,
369 
370 	.scr_read		= ahci_scr_read,
371 	.scr_write		= ahci_scr_write,
372 	.pmp_attach		= ahci_pmp_attach,
373 	.pmp_detach		= ahci_pmp_detach,
374 
375 	.enable_pm		= ahci_enable_alpm,
376 	.disable_pm		= ahci_disable_alpm,
377 	.em_show		= ahci_led_show,
378 	.em_store		= ahci_led_store,
379 	.sw_activity_show	= ahci_activity_show,
380 	.sw_activity_store	= ahci_activity_store,
381 #ifdef CONFIG_PM
382 	.port_suspend		= ahci_port_suspend,
383 	.port_resume		= ahci_port_resume,
384 #endif
385 	.port_start		= ahci_port_start,
386 	.port_stop		= ahci_port_stop,
387 };
388 
389 static struct ata_port_operations ahci_vt8251_ops = {
390 	.inherits		= &ahci_ops,
391 	.hardreset		= ahci_vt8251_hardreset,
392 };
393 
394 static struct ata_port_operations ahci_p5wdh_ops = {
395 	.inherits		= &ahci_ops,
396 	.hardreset		= ahci_p5wdh_hardreset,
397 };
398 
399 static struct ata_port_operations ahci_sb600_ops = {
400 	.inherits		= &ahci_ops,
401 	.softreset		= ahci_sb600_softreset,
402 	.pmp_softreset		= ahci_sb600_softreset,
403 };
404 
405 #define AHCI_HFLAGS(flags)	.private_data	= (void *)(flags)
406 
407 static const struct ata_port_info ahci_port_info[] = {
408 	[board_ahci] =
409 	{
410 		.flags		= AHCI_FLAG_COMMON,
411 		.pio_mask	= ATA_PIO4,
412 		.udma_mask	= ATA_UDMA6,
413 		.port_ops	= &ahci_ops,
414 	},
415 	[board_ahci_vt8251] =
416 	{
417 		AHCI_HFLAGS	(AHCI_HFLAG_NO_NCQ | AHCI_HFLAG_NO_PMP),
418 		.flags		= AHCI_FLAG_COMMON,
419 		.pio_mask	= ATA_PIO4,
420 		.udma_mask	= ATA_UDMA6,
421 		.port_ops	= &ahci_vt8251_ops,
422 	},
423 	[board_ahci_ign_iferr] =
424 	{
425 		AHCI_HFLAGS	(AHCI_HFLAG_IGN_IRQ_IF_ERR),
426 		.flags		= AHCI_FLAG_COMMON,
427 		.pio_mask	= ATA_PIO4,
428 		.udma_mask	= ATA_UDMA6,
429 		.port_ops	= &ahci_ops,
430 	},
431 	[board_ahci_sb600] =
432 	{
433 		AHCI_HFLAGS	(AHCI_HFLAG_IGN_SERR_INTERNAL |
434 				 AHCI_HFLAG_NO_MSI | AHCI_HFLAG_SECT255),
435 		.flags		= AHCI_FLAG_COMMON,
436 		.pio_mask	= ATA_PIO4,
437 		.udma_mask	= ATA_UDMA6,
438 		.port_ops	= &ahci_sb600_ops,
439 	},
440 	[board_ahci_mv] =
441 	{
442 		AHCI_HFLAGS	(AHCI_HFLAG_NO_NCQ | AHCI_HFLAG_NO_MSI |
443 				 AHCI_HFLAG_MV_PATA | AHCI_HFLAG_NO_PMP),
444 		.flags		= ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
445 				  ATA_FLAG_MMIO | ATA_FLAG_PIO_DMA,
446 		.pio_mask	= ATA_PIO4,
447 		.udma_mask	= ATA_UDMA6,
448 		.port_ops	= &ahci_ops,
449 	},
450 	[board_ahci_sb700] =	/* for SB700 and SB800 */
451 	{
452 		AHCI_HFLAGS	(AHCI_HFLAG_IGN_SERR_INTERNAL),
453 		.flags		= AHCI_FLAG_COMMON,
454 		.pio_mask	= ATA_PIO4,
455 		.udma_mask	= ATA_UDMA6,
456 		.port_ops	= &ahci_sb600_ops,
457 	},
458 	[board_ahci_mcp65] =
459 	{
460 		AHCI_HFLAGS	(AHCI_HFLAG_YES_NCQ),
461 		.flags		= AHCI_FLAG_COMMON,
462 		.pio_mask	= ATA_PIO4,
463 		.udma_mask	= ATA_UDMA6,
464 		.port_ops	= &ahci_ops,
465 	},
466 	[board_ahci_nopmp] =
467 	{
468 		AHCI_HFLAGS	(AHCI_HFLAG_NO_PMP),
469 		.flags		= AHCI_FLAG_COMMON,
470 		.pio_mask	= ATA_PIO4,
471 		.udma_mask	= ATA_UDMA6,
472 		.port_ops	= &ahci_ops,
473 	},
474 	/* board_ahci_yesncq */
475 	{
476 		AHCI_HFLAGS	(AHCI_HFLAG_YES_NCQ),
477 		.flags		= AHCI_FLAG_COMMON,
478 		.pio_mask	= ATA_PIO4,
479 		.udma_mask	= ATA_UDMA6,
480 		.port_ops	= &ahci_ops,
481 	},
482 };
483 
484 static const struct pci_device_id ahci_pci_tbl[] = {
485 	/* Intel */
486 	{ PCI_VDEVICE(INTEL, 0x2652), board_ahci }, /* ICH6 */
487 	{ PCI_VDEVICE(INTEL, 0x2653), board_ahci }, /* ICH6M */
488 	{ PCI_VDEVICE(INTEL, 0x27c1), board_ahci }, /* ICH7 */
489 	{ PCI_VDEVICE(INTEL, 0x27c5), board_ahci }, /* ICH7M */
490 	{ PCI_VDEVICE(INTEL, 0x27c3), board_ahci }, /* ICH7R */
491 	{ PCI_VDEVICE(AL, 0x5288), board_ahci_ign_iferr }, /* ULi M5288 */
492 	{ PCI_VDEVICE(INTEL, 0x2681), board_ahci }, /* ESB2 */
493 	{ PCI_VDEVICE(INTEL, 0x2682), board_ahci }, /* ESB2 */
494 	{ PCI_VDEVICE(INTEL, 0x2683), board_ahci }, /* ESB2 */
495 	{ PCI_VDEVICE(INTEL, 0x27c6), board_ahci }, /* ICH7-M DH */
496 	{ PCI_VDEVICE(INTEL, 0x2821), board_ahci }, /* ICH8 */
497 	{ PCI_VDEVICE(INTEL, 0x2822), board_ahci }, /* ICH8 */
498 	{ PCI_VDEVICE(INTEL, 0x2824), board_ahci }, /* ICH8 */
499 	{ PCI_VDEVICE(INTEL, 0x2829), board_ahci }, /* ICH8M */
500 	{ PCI_VDEVICE(INTEL, 0x282a), board_ahci }, /* ICH8M */
501 	{ PCI_VDEVICE(INTEL, 0x2922), board_ahci }, /* ICH9 */
502 	{ PCI_VDEVICE(INTEL, 0x2923), board_ahci }, /* ICH9 */
503 	{ PCI_VDEVICE(INTEL, 0x2924), board_ahci }, /* ICH9 */
504 	{ PCI_VDEVICE(INTEL, 0x2925), board_ahci }, /* ICH9 */
505 	{ PCI_VDEVICE(INTEL, 0x2927), board_ahci }, /* ICH9 */
506 	{ PCI_VDEVICE(INTEL, 0x2929), board_ahci }, /* ICH9M */
507 	{ PCI_VDEVICE(INTEL, 0x292a), board_ahci }, /* ICH9M */
508 	{ PCI_VDEVICE(INTEL, 0x292b), board_ahci }, /* ICH9M */
509 	{ PCI_VDEVICE(INTEL, 0x292c), board_ahci }, /* ICH9M */
510 	{ PCI_VDEVICE(INTEL, 0x292f), board_ahci }, /* ICH9M */
511 	{ PCI_VDEVICE(INTEL, 0x294d), board_ahci }, /* ICH9 */
512 	{ PCI_VDEVICE(INTEL, 0x294e), board_ahci }, /* ICH9M */
513 	{ PCI_VDEVICE(INTEL, 0x502a), board_ahci }, /* Tolapai */
514 	{ PCI_VDEVICE(INTEL, 0x502b), board_ahci }, /* Tolapai */
515 	{ PCI_VDEVICE(INTEL, 0x3a05), board_ahci }, /* ICH10 */
516 	{ PCI_VDEVICE(INTEL, 0x3a22), board_ahci }, /* ICH10 */
517 	{ PCI_VDEVICE(INTEL, 0x3a25), board_ahci }, /* ICH10 */
518 	{ PCI_VDEVICE(INTEL, 0x3b24), board_ahci }, /* PCH RAID */
519 	{ PCI_VDEVICE(INTEL, 0x3b25), board_ahci }, /* PCH RAID */
520 	{ PCI_VDEVICE(INTEL, 0x3b2b), board_ahci }, /* PCH RAID */
521 	{ PCI_VDEVICE(INTEL, 0x3b2c), board_ahci }, /* PCH RAID */
522 
523 	/* JMicron 360/1/3/5/6, match class to avoid IDE function */
524 	{ PCI_VENDOR_ID_JMICRON, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
525 	  PCI_CLASS_STORAGE_SATA_AHCI, 0xffffff, board_ahci_ign_iferr },
526 
527 	/* ATI */
528 	{ PCI_VDEVICE(ATI, 0x4380), board_ahci_sb600 }, /* ATI SB600 */
529 	{ PCI_VDEVICE(ATI, 0x4390), board_ahci_sb700 }, /* ATI SB700/800 */
530 	{ PCI_VDEVICE(ATI, 0x4391), board_ahci_sb700 }, /* ATI SB700/800 */
531 	{ PCI_VDEVICE(ATI, 0x4392), board_ahci_sb700 }, /* ATI SB700/800 */
532 	{ PCI_VDEVICE(ATI, 0x4393), board_ahci_sb700 }, /* ATI SB700/800 */
533 	{ PCI_VDEVICE(ATI, 0x4394), board_ahci_sb700 }, /* ATI SB700/800 */
534 	{ PCI_VDEVICE(ATI, 0x4395), board_ahci_sb700 }, /* ATI SB700/800 */
535 
536 	/* VIA */
537 	{ PCI_VDEVICE(VIA, 0x3349), board_ahci_vt8251 }, /* VIA VT8251 */
538 	{ PCI_VDEVICE(VIA, 0x6287), board_ahci_vt8251 }, /* VIA VT8251 */
539 
540 	/* NVIDIA */
541 	{ PCI_VDEVICE(NVIDIA, 0x044c), board_ahci_mcp65 },	/* MCP65 */
542 	{ PCI_VDEVICE(NVIDIA, 0x044d), board_ahci_mcp65 },	/* MCP65 */
543 	{ PCI_VDEVICE(NVIDIA, 0x044e), board_ahci_mcp65 },	/* MCP65 */
544 	{ PCI_VDEVICE(NVIDIA, 0x044f), board_ahci_mcp65 },	/* MCP65 */
545 	{ PCI_VDEVICE(NVIDIA, 0x045c), board_ahci_mcp65 },	/* MCP65 */
546 	{ PCI_VDEVICE(NVIDIA, 0x045d), board_ahci_mcp65 },	/* MCP65 */
547 	{ PCI_VDEVICE(NVIDIA, 0x045e), board_ahci_mcp65 },	/* MCP65 */
548 	{ PCI_VDEVICE(NVIDIA, 0x045f), board_ahci_mcp65 },	/* MCP65 */
549 	{ PCI_VDEVICE(NVIDIA, 0x0550), board_ahci_yesncq },	/* MCP67 */
550 	{ PCI_VDEVICE(NVIDIA, 0x0551), board_ahci_yesncq },	/* MCP67 */
551 	{ PCI_VDEVICE(NVIDIA, 0x0552), board_ahci_yesncq },	/* MCP67 */
552 	{ PCI_VDEVICE(NVIDIA, 0x0553), board_ahci_yesncq },	/* MCP67 */
553 	{ PCI_VDEVICE(NVIDIA, 0x0554), board_ahci_yesncq },	/* MCP67 */
554 	{ PCI_VDEVICE(NVIDIA, 0x0555), board_ahci_yesncq },	/* MCP67 */
555 	{ PCI_VDEVICE(NVIDIA, 0x0556), board_ahci_yesncq },	/* MCP67 */
556 	{ PCI_VDEVICE(NVIDIA, 0x0557), board_ahci_yesncq },	/* MCP67 */
557 	{ PCI_VDEVICE(NVIDIA, 0x0558), board_ahci_yesncq },	/* MCP67 */
558 	{ PCI_VDEVICE(NVIDIA, 0x0559), board_ahci_yesncq },	/* MCP67 */
559 	{ PCI_VDEVICE(NVIDIA, 0x055a), board_ahci_yesncq },	/* MCP67 */
560 	{ PCI_VDEVICE(NVIDIA, 0x055b), board_ahci_yesncq },	/* MCP67 */
561 	{ PCI_VDEVICE(NVIDIA, 0x07f0), board_ahci_yesncq },	/* MCP73 */
562 	{ PCI_VDEVICE(NVIDIA, 0x07f1), board_ahci_yesncq },	/* MCP73 */
563 	{ PCI_VDEVICE(NVIDIA, 0x07f2), board_ahci_yesncq },	/* MCP73 */
564 	{ PCI_VDEVICE(NVIDIA, 0x07f3), board_ahci_yesncq },	/* MCP73 */
565 	{ PCI_VDEVICE(NVIDIA, 0x07f4), board_ahci_yesncq },	/* MCP73 */
566 	{ PCI_VDEVICE(NVIDIA, 0x07f5), board_ahci_yesncq },	/* MCP73 */
567 	{ PCI_VDEVICE(NVIDIA, 0x07f6), board_ahci_yesncq },	/* MCP73 */
568 	{ PCI_VDEVICE(NVIDIA, 0x07f7), board_ahci_yesncq },	/* MCP73 */
569 	{ PCI_VDEVICE(NVIDIA, 0x07f8), board_ahci_yesncq },	/* MCP73 */
570 	{ PCI_VDEVICE(NVIDIA, 0x07f9), board_ahci_yesncq },	/* MCP73 */
571 	{ PCI_VDEVICE(NVIDIA, 0x07fa), board_ahci_yesncq },	/* MCP73 */
572 	{ PCI_VDEVICE(NVIDIA, 0x07fb), board_ahci_yesncq },	/* MCP73 */
573 	{ PCI_VDEVICE(NVIDIA, 0x0ad0), board_ahci },		/* MCP77 */
574 	{ PCI_VDEVICE(NVIDIA, 0x0ad1), board_ahci },		/* MCP77 */
575 	{ PCI_VDEVICE(NVIDIA, 0x0ad2), board_ahci },		/* MCP77 */
576 	{ PCI_VDEVICE(NVIDIA, 0x0ad3), board_ahci },		/* MCP77 */
577 	{ PCI_VDEVICE(NVIDIA, 0x0ad4), board_ahci },		/* MCP77 */
578 	{ PCI_VDEVICE(NVIDIA, 0x0ad5), board_ahci },		/* MCP77 */
579 	{ PCI_VDEVICE(NVIDIA, 0x0ad6), board_ahci },		/* MCP77 */
580 	{ PCI_VDEVICE(NVIDIA, 0x0ad7), board_ahci },		/* MCP77 */
581 	{ PCI_VDEVICE(NVIDIA, 0x0ad8), board_ahci },		/* MCP77 */
582 	{ PCI_VDEVICE(NVIDIA, 0x0ad9), board_ahci },		/* MCP77 */
583 	{ PCI_VDEVICE(NVIDIA, 0x0ada), board_ahci },		/* MCP77 */
584 	{ PCI_VDEVICE(NVIDIA, 0x0adb), board_ahci },		/* MCP77 */
585 	{ PCI_VDEVICE(NVIDIA, 0x0ab4), board_ahci },		/* MCP79 */
586 	{ PCI_VDEVICE(NVIDIA, 0x0ab5), board_ahci },		/* MCP79 */
587 	{ PCI_VDEVICE(NVIDIA, 0x0ab6), board_ahci },		/* MCP79 */
588 	{ PCI_VDEVICE(NVIDIA, 0x0ab7), board_ahci },		/* MCP79 */
589 	{ PCI_VDEVICE(NVIDIA, 0x0ab8), board_ahci },		/* MCP79 */
590 	{ PCI_VDEVICE(NVIDIA, 0x0ab9), board_ahci },		/* MCP79 */
591 	{ PCI_VDEVICE(NVIDIA, 0x0aba), board_ahci },		/* MCP79 */
592 	{ PCI_VDEVICE(NVIDIA, 0x0abb), board_ahci },		/* MCP79 */
593 	{ PCI_VDEVICE(NVIDIA, 0x0abc), board_ahci },		/* MCP79 */
594 	{ PCI_VDEVICE(NVIDIA, 0x0abd), board_ahci },		/* MCP79 */
595 	{ PCI_VDEVICE(NVIDIA, 0x0abe), board_ahci },		/* MCP79 */
596 	{ PCI_VDEVICE(NVIDIA, 0x0abf), board_ahci },		/* MCP79 */
597 	{ PCI_VDEVICE(NVIDIA, 0x0d84), board_ahci },		/* MCP89 */
598 	{ PCI_VDEVICE(NVIDIA, 0x0d85), board_ahci },		/* MCP89 */
599 	{ PCI_VDEVICE(NVIDIA, 0x0d86), board_ahci },		/* MCP89 */
600 	{ PCI_VDEVICE(NVIDIA, 0x0d87), board_ahci },		/* MCP89 */
601 	{ PCI_VDEVICE(NVIDIA, 0x0d88), board_ahci },		/* MCP89 */
602 	{ PCI_VDEVICE(NVIDIA, 0x0d89), board_ahci },		/* MCP89 */
603 	{ PCI_VDEVICE(NVIDIA, 0x0d8a), board_ahci },		/* MCP89 */
604 	{ PCI_VDEVICE(NVIDIA, 0x0d8b), board_ahci },		/* MCP89 */
605 	{ PCI_VDEVICE(NVIDIA, 0x0d8c), board_ahci },		/* MCP89 */
606 	{ PCI_VDEVICE(NVIDIA, 0x0d8d), board_ahci },		/* MCP89 */
607 	{ PCI_VDEVICE(NVIDIA, 0x0d8e), board_ahci },		/* MCP89 */
608 	{ PCI_VDEVICE(NVIDIA, 0x0d8f), board_ahci },		/* MCP89 */
609 
610 	/* SiS */
611 	{ PCI_VDEVICE(SI, 0x1184), board_ahci },		/* SiS 966 */
612 	{ PCI_VDEVICE(SI, 0x1185), board_ahci },		/* SiS 968 */
613 	{ PCI_VDEVICE(SI, 0x0186), board_ahci },		/* SiS 968 */
614 
615 	/* Marvell */
616 	{ PCI_VDEVICE(MARVELL, 0x6145), board_ahci_mv },	/* 6145 */
617 	{ PCI_VDEVICE(MARVELL, 0x6121), board_ahci_mv },	/* 6121 */
618 
619 	/* Promise */
620 	{ PCI_VDEVICE(PROMISE, 0x3f20), board_ahci },	/* PDC42819 */
621 
622 	/* Generic, PCI class code for AHCI */
623 	{ PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
624 	  PCI_CLASS_STORAGE_SATA_AHCI, 0xffffff, board_ahci },
625 
626 	{ }	/* terminate list */
627 };
628 
629 
630 static struct pci_driver ahci_pci_driver = {
631 	.name			= DRV_NAME,
632 	.id_table		= ahci_pci_tbl,
633 	.probe			= ahci_init_one,
634 	.remove			= ata_pci_remove_one,
635 #ifdef CONFIG_PM
636 	.suspend		= ahci_pci_device_suspend,
637 	.resume			= ahci_pci_device_resume,
638 #endif
639 };
640 
641 static int ahci_em_messages = 1;
642 module_param(ahci_em_messages, int, 0444);
643 /* add other LED protocol types when they become supported */
644 MODULE_PARM_DESC(ahci_em_messages,
645 	"Set AHCI Enclosure Management Message type (0 = disabled, 1 = LED");
646 
647 #if defined(CONFIG_PATA_MARVELL) || defined(CONFIG_PATA_MARVELL_MODULE)
648 static int marvell_enable;
649 #else
650 static int marvell_enable = 1;
651 #endif
652 module_param(marvell_enable, int, 0644);
653 MODULE_PARM_DESC(marvell_enable, "Marvell SATA via AHCI (1 = enabled)");
654 
655 
656 static inline int ahci_nr_ports(u32 cap)
657 {
658 	return (cap & 0x1f) + 1;
659 }
660 
661 static inline void __iomem *__ahci_port_base(struct ata_host *host,
662 					     unsigned int port_no)
663 {
664 	void __iomem *mmio = host->iomap[AHCI_PCI_BAR];
665 
666 	return mmio + 0x100 + (port_no * 0x80);
667 }
668 
669 static inline void __iomem *ahci_port_base(struct ata_port *ap)
670 {
671 	return __ahci_port_base(ap->host, ap->port_no);
672 }
673 
674 static void ahci_enable_ahci(void __iomem *mmio)
675 {
676 	int i;
677 	u32 tmp;
678 
679 	/* turn on AHCI_EN */
680 	tmp = readl(mmio + HOST_CTL);
681 	if (tmp & HOST_AHCI_EN)
682 		return;
683 
684 	/* Some controllers need AHCI_EN to be written multiple times.
685 	 * Try a few times before giving up.
686 	 */
687 	for (i = 0; i < 5; i++) {
688 		tmp |= HOST_AHCI_EN;
689 		writel(tmp, mmio + HOST_CTL);
690 		tmp = readl(mmio + HOST_CTL);	/* flush && sanity check */
691 		if (tmp & HOST_AHCI_EN)
692 			return;
693 		msleep(10);
694 	}
695 
696 	WARN_ON(1);
697 }
698 
699 /**
700  *	ahci_save_initial_config - Save and fixup initial config values
701  *	@pdev: target PCI device
702  *	@hpriv: host private area to store config values
703  *
704  *	Some registers containing configuration info might be setup by
705  *	BIOS and might be cleared on reset.  This function saves the
706  *	initial values of those registers into @hpriv such that they
707  *	can be restored after controller reset.
708  *
709  *	If inconsistent, config values are fixed up by this function.
710  *
711  *	LOCKING:
712  *	None.
713  */
714 static void ahci_save_initial_config(struct pci_dev *pdev,
715 				     struct ahci_host_priv *hpriv)
716 {
717 	void __iomem *mmio = pcim_iomap_table(pdev)[AHCI_PCI_BAR];
718 	u32 cap, port_map;
719 	int i;
720 	int mv;
721 
722 	/* make sure AHCI mode is enabled before accessing CAP */
723 	ahci_enable_ahci(mmio);
724 
725 	/* Values prefixed with saved_ are written back to host after
726 	 * reset.  Values without are used for driver operation.
727 	 */
728 	hpriv->saved_cap = cap = readl(mmio + HOST_CAP);
729 	hpriv->saved_port_map = port_map = readl(mmio + HOST_PORTS_IMPL);
730 
731 	/* some chips have errata preventing 64bit use */
732 	if ((cap & HOST_CAP_64) && (hpriv->flags & AHCI_HFLAG_32BIT_ONLY)) {
733 		dev_printk(KERN_INFO, &pdev->dev,
734 			   "controller can't do 64bit DMA, forcing 32bit\n");
735 		cap &= ~HOST_CAP_64;
736 	}
737 
738 	if ((cap & HOST_CAP_NCQ) && (hpriv->flags & AHCI_HFLAG_NO_NCQ)) {
739 		dev_printk(KERN_INFO, &pdev->dev,
740 			   "controller can't do NCQ, turning off CAP_NCQ\n");
741 		cap &= ~HOST_CAP_NCQ;
742 	}
743 
744 	if (!(cap & HOST_CAP_NCQ) && (hpriv->flags & AHCI_HFLAG_YES_NCQ)) {
745 		dev_printk(KERN_INFO, &pdev->dev,
746 			   "controller can do NCQ, turning on CAP_NCQ\n");
747 		cap |= HOST_CAP_NCQ;
748 	}
749 
750 	if ((cap & HOST_CAP_PMP) && (hpriv->flags & AHCI_HFLAG_NO_PMP)) {
751 		dev_printk(KERN_INFO, &pdev->dev,
752 			   "controller can't do PMP, turning off CAP_PMP\n");
753 		cap &= ~HOST_CAP_PMP;
754 	}
755 
756 	if (pdev->vendor == PCI_VENDOR_ID_JMICRON && pdev->device == 0x2361 &&
757 	    port_map != 1) {
758 		dev_printk(KERN_INFO, &pdev->dev,
759 			   "JMB361 has only one port, port_map 0x%x -> 0x%x\n",
760 			   port_map, 1);
761 		port_map = 1;
762 	}
763 
764 	/*
765 	 * Temporary Marvell 6145 hack: PATA port presence
766 	 * is asserted through the standard AHCI port
767 	 * presence register, as bit 4 (counting from 0)
768 	 */
769 	if (hpriv->flags & AHCI_HFLAG_MV_PATA) {
770 		if (pdev->device == 0x6121)
771 			mv = 0x3;
772 		else
773 			mv = 0xf;
774 		dev_printk(KERN_ERR, &pdev->dev,
775 			   "MV_AHCI HACK: port_map %x -> %x\n",
776 			   port_map,
777 			   port_map & mv);
778 		dev_printk(KERN_ERR, &pdev->dev,
779 			  "Disabling your PATA port. Use the boot option 'ahci.marvell_enable=0' to avoid this.\n");
780 
781 		port_map &= mv;
782 	}
783 
784 	/* cross check port_map and cap.n_ports */
785 	if (port_map) {
786 		int map_ports = 0;
787 
788 		for (i = 0; i < AHCI_MAX_PORTS; i++)
789 			if (port_map & (1 << i))
790 				map_ports++;
791 
792 		/* If PI has more ports than n_ports, whine, clear
793 		 * port_map and let it be generated from n_ports.
794 		 */
795 		if (map_ports > ahci_nr_ports(cap)) {
796 			dev_printk(KERN_WARNING, &pdev->dev,
797 				   "implemented port map (0x%x) contains more "
798 				   "ports than nr_ports (%u), using nr_ports\n",
799 				   port_map, ahci_nr_ports(cap));
800 			port_map = 0;
801 		}
802 	}
803 
804 	/* fabricate port_map from cap.nr_ports */
805 	if (!port_map) {
806 		port_map = (1 << ahci_nr_ports(cap)) - 1;
807 		dev_printk(KERN_WARNING, &pdev->dev,
808 			   "forcing PORTS_IMPL to 0x%x\n", port_map);
809 
810 		/* write the fixed up value to the PI register */
811 		hpriv->saved_port_map = port_map;
812 	}
813 
814 	/* record values to use during operation */
815 	hpriv->cap = cap;
816 	hpriv->port_map = port_map;
817 }
818 
819 /**
820  *	ahci_restore_initial_config - Restore initial config
821  *	@host: target ATA host
822  *
823  *	Restore initial config stored by ahci_save_initial_config().
824  *
825  *	LOCKING:
826  *	None.
827  */
828 static void ahci_restore_initial_config(struct ata_host *host)
829 {
830 	struct ahci_host_priv *hpriv = host->private_data;
831 	void __iomem *mmio = host->iomap[AHCI_PCI_BAR];
832 
833 	writel(hpriv->saved_cap, mmio + HOST_CAP);
834 	writel(hpriv->saved_port_map, mmio + HOST_PORTS_IMPL);
835 	(void) readl(mmio + HOST_PORTS_IMPL);	/* flush */
836 }
837 
838 static unsigned ahci_scr_offset(struct ata_port *ap, unsigned int sc_reg)
839 {
840 	static const int offset[] = {
841 		[SCR_STATUS]		= PORT_SCR_STAT,
842 		[SCR_CONTROL]		= PORT_SCR_CTL,
843 		[SCR_ERROR]		= PORT_SCR_ERR,
844 		[SCR_ACTIVE]		= PORT_SCR_ACT,
845 		[SCR_NOTIFICATION]	= PORT_SCR_NTF,
846 	};
847 	struct ahci_host_priv *hpriv = ap->host->private_data;
848 
849 	if (sc_reg < ARRAY_SIZE(offset) &&
850 	    (sc_reg != SCR_NOTIFICATION || (hpriv->cap & HOST_CAP_SNTF)))
851 		return offset[sc_reg];
852 	return 0;
853 }
854 
855 static int ahci_scr_read(struct ata_link *link, unsigned int sc_reg, u32 *val)
856 {
857 	void __iomem *port_mmio = ahci_port_base(link->ap);
858 	int offset = ahci_scr_offset(link->ap, sc_reg);
859 
860 	if (offset) {
861 		*val = readl(port_mmio + offset);
862 		return 0;
863 	}
864 	return -EINVAL;
865 }
866 
867 static int ahci_scr_write(struct ata_link *link, unsigned int sc_reg, u32 val)
868 {
869 	void __iomem *port_mmio = ahci_port_base(link->ap);
870 	int offset = ahci_scr_offset(link->ap, sc_reg);
871 
872 	if (offset) {
873 		writel(val, port_mmio + offset);
874 		return 0;
875 	}
876 	return -EINVAL;
877 }
878 
879 static void ahci_start_engine(struct ata_port *ap)
880 {
881 	void __iomem *port_mmio = ahci_port_base(ap);
882 	u32 tmp;
883 
884 	/* start DMA */
885 	tmp = readl(port_mmio + PORT_CMD);
886 	tmp |= PORT_CMD_START;
887 	writel(tmp, port_mmio + PORT_CMD);
888 	readl(port_mmio + PORT_CMD); /* flush */
889 }
890 
891 static int ahci_stop_engine(struct ata_port *ap)
892 {
893 	void __iomem *port_mmio = ahci_port_base(ap);
894 	u32 tmp;
895 
896 	tmp = readl(port_mmio + PORT_CMD);
897 
898 	/* check if the HBA is idle */
899 	if ((tmp & (PORT_CMD_START | PORT_CMD_LIST_ON)) == 0)
900 		return 0;
901 
902 	/* setting HBA to idle */
903 	tmp &= ~PORT_CMD_START;
904 	writel(tmp, port_mmio + PORT_CMD);
905 
906 	/* wait for engine to stop. This could be as long as 500 msec */
907 	tmp = ata_wait_register(port_mmio + PORT_CMD,
908 				PORT_CMD_LIST_ON, PORT_CMD_LIST_ON, 1, 500);
909 	if (tmp & PORT_CMD_LIST_ON)
910 		return -EIO;
911 
912 	return 0;
913 }
914 
915 static void ahci_start_fis_rx(struct ata_port *ap)
916 {
917 	void __iomem *port_mmio = ahci_port_base(ap);
918 	struct ahci_host_priv *hpriv = ap->host->private_data;
919 	struct ahci_port_priv *pp = ap->private_data;
920 	u32 tmp;
921 
922 	/* set FIS registers */
923 	if (hpriv->cap & HOST_CAP_64)
924 		writel((pp->cmd_slot_dma >> 16) >> 16,
925 		       port_mmio + PORT_LST_ADDR_HI);
926 	writel(pp->cmd_slot_dma & 0xffffffff, port_mmio + PORT_LST_ADDR);
927 
928 	if (hpriv->cap & HOST_CAP_64)
929 		writel((pp->rx_fis_dma >> 16) >> 16,
930 		       port_mmio + PORT_FIS_ADDR_HI);
931 	writel(pp->rx_fis_dma & 0xffffffff, port_mmio + PORT_FIS_ADDR);
932 
933 	/* enable FIS reception */
934 	tmp = readl(port_mmio + PORT_CMD);
935 	tmp |= PORT_CMD_FIS_RX;
936 	writel(tmp, port_mmio + PORT_CMD);
937 
938 	/* flush */
939 	readl(port_mmio + PORT_CMD);
940 }
941 
942 static int ahci_stop_fis_rx(struct ata_port *ap)
943 {
944 	void __iomem *port_mmio = ahci_port_base(ap);
945 	u32 tmp;
946 
947 	/* disable FIS reception */
948 	tmp = readl(port_mmio + PORT_CMD);
949 	tmp &= ~PORT_CMD_FIS_RX;
950 	writel(tmp, port_mmio + PORT_CMD);
951 
952 	/* wait for completion, spec says 500ms, give it 1000 */
953 	tmp = ata_wait_register(port_mmio + PORT_CMD, PORT_CMD_FIS_ON,
954 				PORT_CMD_FIS_ON, 10, 1000);
955 	if (tmp & PORT_CMD_FIS_ON)
956 		return -EBUSY;
957 
958 	return 0;
959 }
960 
961 static void ahci_power_up(struct ata_port *ap)
962 {
963 	struct ahci_host_priv *hpriv = ap->host->private_data;
964 	void __iomem *port_mmio = ahci_port_base(ap);
965 	u32 cmd;
966 
967 	cmd = readl(port_mmio + PORT_CMD) & ~PORT_CMD_ICC_MASK;
968 
969 	/* spin up device */
970 	if (hpriv->cap & HOST_CAP_SSS) {
971 		cmd |= PORT_CMD_SPIN_UP;
972 		writel(cmd, port_mmio + PORT_CMD);
973 	}
974 
975 	/* wake up link */
976 	writel(cmd | PORT_CMD_ICC_ACTIVE, port_mmio + PORT_CMD);
977 }
978 
979 static void ahci_disable_alpm(struct ata_port *ap)
980 {
981 	struct ahci_host_priv *hpriv = ap->host->private_data;
982 	void __iomem *port_mmio = ahci_port_base(ap);
983 	u32 cmd;
984 	struct ahci_port_priv *pp = ap->private_data;
985 
986 	/* IPM bits should be disabled by libata-core */
987 	/* get the existing command bits */
988 	cmd = readl(port_mmio + PORT_CMD);
989 
990 	/* disable ALPM and ASP */
991 	cmd &= ~PORT_CMD_ASP;
992 	cmd &= ~PORT_CMD_ALPE;
993 
994 	/* force the interface back to active */
995 	cmd |= PORT_CMD_ICC_ACTIVE;
996 
997 	/* write out new cmd value */
998 	writel(cmd, port_mmio + PORT_CMD);
999 	cmd = readl(port_mmio + PORT_CMD);
1000 
1001 	/* wait 10ms to be sure we've come out of any low power state */
1002 	msleep(10);
1003 
1004 	/* clear out any PhyRdy stuff from interrupt status */
1005 	writel(PORT_IRQ_PHYRDY, port_mmio + PORT_IRQ_STAT);
1006 
1007 	/* go ahead and clean out PhyRdy Change from Serror too */
1008 	ahci_scr_write(&ap->link, SCR_ERROR, ((1 << 16) | (1 << 18)));
1009 
1010 	/*
1011  	 * Clear flag to indicate that we should ignore all PhyRdy
1012  	 * state changes
1013  	 */
1014 	hpriv->flags &= ~AHCI_HFLAG_NO_HOTPLUG;
1015 
1016 	/*
1017  	 * Enable interrupts on Phy Ready.
1018  	 */
1019 	pp->intr_mask |= PORT_IRQ_PHYRDY;
1020 	writel(pp->intr_mask, port_mmio + PORT_IRQ_MASK);
1021 
1022 	/*
1023  	 * don't change the link pm policy - we can be called
1024  	 * just to turn of link pm temporarily
1025  	 */
1026 }
1027 
1028 static int ahci_enable_alpm(struct ata_port *ap,
1029 	enum link_pm policy)
1030 {
1031 	struct ahci_host_priv *hpriv = ap->host->private_data;
1032 	void __iomem *port_mmio = ahci_port_base(ap);
1033 	u32 cmd;
1034 	struct ahci_port_priv *pp = ap->private_data;
1035 	u32 asp;
1036 
1037 	/* Make sure the host is capable of link power management */
1038 	if (!(hpriv->cap & HOST_CAP_ALPM))
1039 		return -EINVAL;
1040 
1041 	switch (policy) {
1042 	case MAX_PERFORMANCE:
1043 	case NOT_AVAILABLE:
1044 		/*
1045  		 * if we came here with NOT_AVAILABLE,
1046  		 * it just means this is the first time we
1047  		 * have tried to enable - default to max performance,
1048  		 * and let the user go to lower power modes on request.
1049  		 */
1050 		ahci_disable_alpm(ap);
1051 		return 0;
1052 	case MIN_POWER:
1053 		/* configure HBA to enter SLUMBER */
1054 		asp = PORT_CMD_ASP;
1055 		break;
1056 	case MEDIUM_POWER:
1057 		/* configure HBA to enter PARTIAL */
1058 		asp = 0;
1059 		break;
1060 	default:
1061 		return -EINVAL;
1062 	}
1063 
1064 	/*
1065  	 * Disable interrupts on Phy Ready. This keeps us from
1066  	 * getting woken up due to spurious phy ready interrupts
1067 	 * TBD - Hot plug should be done via polling now, is
1068 	 * that even supported?
1069  	 */
1070 	pp->intr_mask &= ~PORT_IRQ_PHYRDY;
1071 	writel(pp->intr_mask, port_mmio + PORT_IRQ_MASK);
1072 
1073 	/*
1074  	 * Set a flag to indicate that we should ignore all PhyRdy
1075  	 * state changes since these can happen now whenever we
1076  	 * change link state
1077  	 */
1078 	hpriv->flags |= AHCI_HFLAG_NO_HOTPLUG;
1079 
1080 	/* get the existing command bits */
1081 	cmd = readl(port_mmio + PORT_CMD);
1082 
1083 	/*
1084  	 * Set ASP based on Policy
1085  	 */
1086 	cmd |= asp;
1087 
1088 	/*
1089  	 * Setting this bit will instruct the HBA to aggressively
1090  	 * enter a lower power link state when it's appropriate and
1091  	 * based on the value set above for ASP
1092  	 */
1093 	cmd |= PORT_CMD_ALPE;
1094 
1095 	/* write out new cmd value */
1096 	writel(cmd, port_mmio + PORT_CMD);
1097 	cmd = readl(port_mmio + PORT_CMD);
1098 
1099 	/* IPM bits should be set by libata-core */
1100 	return 0;
1101 }
1102 
1103 #ifdef CONFIG_PM
1104 static void ahci_power_down(struct ata_port *ap)
1105 {
1106 	struct ahci_host_priv *hpriv = ap->host->private_data;
1107 	void __iomem *port_mmio = ahci_port_base(ap);
1108 	u32 cmd, scontrol;
1109 
1110 	if (!(hpriv->cap & HOST_CAP_SSS))
1111 		return;
1112 
1113 	/* put device into listen mode, first set PxSCTL.DET to 0 */
1114 	scontrol = readl(port_mmio + PORT_SCR_CTL);
1115 	scontrol &= ~0xf;
1116 	writel(scontrol, port_mmio + PORT_SCR_CTL);
1117 
1118 	/* then set PxCMD.SUD to 0 */
1119 	cmd = readl(port_mmio + PORT_CMD) & ~PORT_CMD_ICC_MASK;
1120 	cmd &= ~PORT_CMD_SPIN_UP;
1121 	writel(cmd, port_mmio + PORT_CMD);
1122 }
1123 #endif
1124 
1125 static void ahci_start_port(struct ata_port *ap)
1126 {
1127 	struct ahci_port_priv *pp = ap->private_data;
1128 	struct ata_link *link;
1129 	struct ahci_em_priv *emp;
1130 	ssize_t rc;
1131 	int i;
1132 
1133 	/* enable FIS reception */
1134 	ahci_start_fis_rx(ap);
1135 
1136 	/* enable DMA */
1137 	ahci_start_engine(ap);
1138 
1139 	/* turn on LEDs */
1140 	if (ap->flags & ATA_FLAG_EM) {
1141 		ata_for_each_link(link, ap, EDGE) {
1142 			emp = &pp->em_priv[link->pmp];
1143 
1144 			/* EM Transmit bit maybe busy during init */
1145 			for (i = 0; i < EM_MAX_RETRY; i++) {
1146 				rc = ahci_transmit_led_message(ap,
1147 							       emp->led_state,
1148 							       4);
1149 				if (rc == -EBUSY)
1150 					msleep(1);
1151 				else
1152 					break;
1153 			}
1154 		}
1155 	}
1156 
1157 	if (ap->flags & ATA_FLAG_SW_ACTIVITY)
1158 		ata_for_each_link(link, ap, EDGE)
1159 			ahci_init_sw_activity(link);
1160 
1161 }
1162 
1163 static int ahci_deinit_port(struct ata_port *ap, const char **emsg)
1164 {
1165 	int rc;
1166 
1167 	/* disable DMA */
1168 	rc = ahci_stop_engine(ap);
1169 	if (rc) {
1170 		*emsg = "failed to stop engine";
1171 		return rc;
1172 	}
1173 
1174 	/* disable FIS reception */
1175 	rc = ahci_stop_fis_rx(ap);
1176 	if (rc) {
1177 		*emsg = "failed stop FIS RX";
1178 		return rc;
1179 	}
1180 
1181 	return 0;
1182 }
1183 
1184 static int ahci_reset_controller(struct ata_host *host)
1185 {
1186 	struct pci_dev *pdev = to_pci_dev(host->dev);
1187 	struct ahci_host_priv *hpriv = host->private_data;
1188 	void __iomem *mmio = host->iomap[AHCI_PCI_BAR];
1189 	u32 tmp;
1190 
1191 	/* we must be in AHCI mode, before using anything
1192 	 * AHCI-specific, such as HOST_RESET.
1193 	 */
1194 	ahci_enable_ahci(mmio);
1195 
1196 	/* global controller reset */
1197 	if (!ahci_skip_host_reset) {
1198 		tmp = readl(mmio + HOST_CTL);
1199 		if ((tmp & HOST_RESET) == 0) {
1200 			writel(tmp | HOST_RESET, mmio + HOST_CTL);
1201 			readl(mmio + HOST_CTL); /* flush */
1202 		}
1203 
1204 		/*
1205 		 * to perform host reset, OS should set HOST_RESET
1206 		 * and poll until this bit is read to be "0".
1207 		 * reset must complete within 1 second, or
1208 		 * the hardware should be considered fried.
1209 		 */
1210 		tmp = ata_wait_register(mmio + HOST_CTL, HOST_RESET,
1211 					HOST_RESET, 10, 1000);
1212 
1213 		if (tmp & HOST_RESET) {
1214 			dev_printk(KERN_ERR, host->dev,
1215 				   "controller reset failed (0x%x)\n", tmp);
1216 			return -EIO;
1217 		}
1218 
1219 		/* turn on AHCI mode */
1220 		ahci_enable_ahci(mmio);
1221 
1222 		/* Some registers might be cleared on reset.  Restore
1223 		 * initial values.
1224 		 */
1225 		ahci_restore_initial_config(host);
1226 	} else
1227 		dev_printk(KERN_INFO, host->dev,
1228 			   "skipping global host reset\n");
1229 
1230 	if (pdev->vendor == PCI_VENDOR_ID_INTEL) {
1231 		u16 tmp16;
1232 
1233 		/* configure PCS */
1234 		pci_read_config_word(pdev, 0x92, &tmp16);
1235 		if ((tmp16 & hpriv->port_map) != hpriv->port_map) {
1236 			tmp16 |= hpriv->port_map;
1237 			pci_write_config_word(pdev, 0x92, tmp16);
1238 		}
1239 	}
1240 
1241 	return 0;
1242 }
1243 
1244 static void ahci_sw_activity(struct ata_link *link)
1245 {
1246 	struct ata_port *ap = link->ap;
1247 	struct ahci_port_priv *pp = ap->private_data;
1248 	struct ahci_em_priv *emp = &pp->em_priv[link->pmp];
1249 
1250 	if (!(link->flags & ATA_LFLAG_SW_ACTIVITY))
1251 		return;
1252 
1253 	emp->activity++;
1254 	if (!timer_pending(&emp->timer))
1255 		mod_timer(&emp->timer, jiffies + msecs_to_jiffies(10));
1256 }
1257 
1258 static void ahci_sw_activity_blink(unsigned long arg)
1259 {
1260 	struct ata_link *link = (struct ata_link *)arg;
1261 	struct ata_port *ap = link->ap;
1262 	struct ahci_port_priv *pp = ap->private_data;
1263 	struct ahci_em_priv *emp = &pp->em_priv[link->pmp];
1264 	unsigned long led_message = emp->led_state;
1265 	u32 activity_led_state;
1266 	unsigned long flags;
1267 
1268 	led_message &= EM_MSG_LED_VALUE;
1269 	led_message |= ap->port_no | (link->pmp << 8);
1270 
1271 	/* check to see if we've had activity.  If so,
1272 	 * toggle state of LED and reset timer.  If not,
1273 	 * turn LED to desired idle state.
1274 	 */
1275 	spin_lock_irqsave(ap->lock, flags);
1276 	if (emp->saved_activity != emp->activity) {
1277 		emp->saved_activity = emp->activity;
1278 		/* get the current LED state */
1279 		activity_led_state = led_message & EM_MSG_LED_VALUE_ON;
1280 
1281 		if (activity_led_state)
1282 			activity_led_state = 0;
1283 		else
1284 			activity_led_state = 1;
1285 
1286 		/* clear old state */
1287 		led_message &= ~EM_MSG_LED_VALUE_ACTIVITY;
1288 
1289 		/* toggle state */
1290 		led_message |= (activity_led_state << 16);
1291 		mod_timer(&emp->timer, jiffies + msecs_to_jiffies(100));
1292 	} else {
1293 		/* switch to idle */
1294 		led_message &= ~EM_MSG_LED_VALUE_ACTIVITY;
1295 		if (emp->blink_policy == BLINK_OFF)
1296 			led_message |= (1 << 16);
1297 	}
1298 	spin_unlock_irqrestore(ap->lock, flags);
1299 	ahci_transmit_led_message(ap, led_message, 4);
1300 }
1301 
1302 static void ahci_init_sw_activity(struct ata_link *link)
1303 {
1304 	struct ata_port *ap = link->ap;
1305 	struct ahci_port_priv *pp = ap->private_data;
1306 	struct ahci_em_priv *emp = &pp->em_priv[link->pmp];
1307 
1308 	/* init activity stats, setup timer */
1309 	emp->saved_activity = emp->activity = 0;
1310 	setup_timer(&emp->timer, ahci_sw_activity_blink, (unsigned long)link);
1311 
1312 	/* check our blink policy and set flag for link if it's enabled */
1313 	if (emp->blink_policy)
1314 		link->flags |= ATA_LFLAG_SW_ACTIVITY;
1315 }
1316 
1317 static int ahci_reset_em(struct ata_host *host)
1318 {
1319 	void __iomem *mmio = host->iomap[AHCI_PCI_BAR];
1320 	u32 em_ctl;
1321 
1322 	em_ctl = readl(mmio + HOST_EM_CTL);
1323 	if ((em_ctl & EM_CTL_TM) || (em_ctl & EM_CTL_RST))
1324 		return -EINVAL;
1325 
1326 	writel(em_ctl | EM_CTL_RST, mmio + HOST_EM_CTL);
1327 	return 0;
1328 }
1329 
1330 static ssize_t ahci_transmit_led_message(struct ata_port *ap, u32 state,
1331 					ssize_t size)
1332 {
1333 	struct ahci_host_priv *hpriv = ap->host->private_data;
1334 	struct ahci_port_priv *pp = ap->private_data;
1335 	void __iomem *mmio = ap->host->iomap[AHCI_PCI_BAR];
1336 	u32 em_ctl;
1337 	u32 message[] = {0, 0};
1338 	unsigned long flags;
1339 	int pmp;
1340 	struct ahci_em_priv *emp;
1341 
1342 	/* get the slot number from the message */
1343 	pmp = (state & EM_MSG_LED_PMP_SLOT) >> 8;
1344 	if (pmp < EM_MAX_SLOTS)
1345 		emp = &pp->em_priv[pmp];
1346 	else
1347 		return -EINVAL;
1348 
1349 	spin_lock_irqsave(ap->lock, flags);
1350 
1351 	/*
1352 	 * if we are still busy transmitting a previous message,
1353 	 * do not allow
1354 	 */
1355 	em_ctl = readl(mmio + HOST_EM_CTL);
1356 	if (em_ctl & EM_CTL_TM) {
1357 		spin_unlock_irqrestore(ap->lock, flags);
1358 		return -EBUSY;
1359 	}
1360 
1361 	/*
1362 	 * create message header - this is all zero except for
1363 	 * the message size, which is 4 bytes.
1364 	 */
1365 	message[0] |= (4 << 8);
1366 
1367 	/* ignore 0:4 of byte zero, fill in port info yourself */
1368 	message[1] = ((state & ~EM_MSG_LED_HBA_PORT) | ap->port_no);
1369 
1370 	/* write message to EM_LOC */
1371 	writel(message[0], mmio + hpriv->em_loc);
1372 	writel(message[1], mmio + hpriv->em_loc+4);
1373 
1374 	/* save off new led state for port/slot */
1375 	emp->led_state = state;
1376 
1377 	/*
1378 	 * tell hardware to transmit the message
1379 	 */
1380 	writel(em_ctl | EM_CTL_TM, mmio + HOST_EM_CTL);
1381 
1382 	spin_unlock_irqrestore(ap->lock, flags);
1383 	return size;
1384 }
1385 
1386 static ssize_t ahci_led_show(struct ata_port *ap, char *buf)
1387 {
1388 	struct ahci_port_priv *pp = ap->private_data;
1389 	struct ata_link *link;
1390 	struct ahci_em_priv *emp;
1391 	int rc = 0;
1392 
1393 	ata_for_each_link(link, ap, EDGE) {
1394 		emp = &pp->em_priv[link->pmp];
1395 		rc += sprintf(buf, "%lx\n", emp->led_state);
1396 	}
1397 	return rc;
1398 }
1399 
1400 static ssize_t ahci_led_store(struct ata_port *ap, const char *buf,
1401 				size_t size)
1402 {
1403 	int state;
1404 	int pmp;
1405 	struct ahci_port_priv *pp = ap->private_data;
1406 	struct ahci_em_priv *emp;
1407 
1408 	state = simple_strtoul(buf, NULL, 0);
1409 
1410 	/* get the slot number from the message */
1411 	pmp = (state & EM_MSG_LED_PMP_SLOT) >> 8;
1412 	if (pmp < EM_MAX_SLOTS)
1413 		emp = &pp->em_priv[pmp];
1414 	else
1415 		return -EINVAL;
1416 
1417 	/* mask off the activity bits if we are in sw_activity
1418 	 * mode, user should turn off sw_activity before setting
1419 	 * activity led through em_message
1420 	 */
1421 	if (emp->blink_policy)
1422 		state &= ~EM_MSG_LED_VALUE_ACTIVITY;
1423 
1424 	return ahci_transmit_led_message(ap, state, size);
1425 }
1426 
1427 static ssize_t ahci_activity_store(struct ata_device *dev, enum sw_activity val)
1428 {
1429 	struct ata_link *link = dev->link;
1430 	struct ata_port *ap = link->ap;
1431 	struct ahci_port_priv *pp = ap->private_data;
1432 	struct ahci_em_priv *emp = &pp->em_priv[link->pmp];
1433 	u32 port_led_state = emp->led_state;
1434 
1435 	/* save the desired Activity LED behavior */
1436 	if (val == OFF) {
1437 		/* clear LFLAG */
1438 		link->flags &= ~(ATA_LFLAG_SW_ACTIVITY);
1439 
1440 		/* set the LED to OFF */
1441 		port_led_state &= EM_MSG_LED_VALUE_OFF;
1442 		port_led_state |= (ap->port_no | (link->pmp << 8));
1443 		ahci_transmit_led_message(ap, port_led_state, 4);
1444 	} else {
1445 		link->flags |= ATA_LFLAG_SW_ACTIVITY;
1446 		if (val == BLINK_OFF) {
1447 			/* set LED to ON for idle */
1448 			port_led_state &= EM_MSG_LED_VALUE_OFF;
1449 			port_led_state |= (ap->port_no | (link->pmp << 8));
1450 			port_led_state |= EM_MSG_LED_VALUE_ON; /* check this */
1451 			ahci_transmit_led_message(ap, port_led_state, 4);
1452 		}
1453 	}
1454 	emp->blink_policy = val;
1455 	return 0;
1456 }
1457 
1458 static ssize_t ahci_activity_show(struct ata_device *dev, char *buf)
1459 {
1460 	struct ata_link *link = dev->link;
1461 	struct ata_port *ap = link->ap;
1462 	struct ahci_port_priv *pp = ap->private_data;
1463 	struct ahci_em_priv *emp = &pp->em_priv[link->pmp];
1464 
1465 	/* display the saved value of activity behavior for this
1466 	 * disk.
1467 	 */
1468 	return sprintf(buf, "%d\n", emp->blink_policy);
1469 }
1470 
1471 static void ahci_port_init(struct pci_dev *pdev, struct ata_port *ap,
1472 			   int port_no, void __iomem *mmio,
1473 			   void __iomem *port_mmio)
1474 {
1475 	const char *emsg = NULL;
1476 	int rc;
1477 	u32 tmp;
1478 
1479 	/* make sure port is not active */
1480 	rc = ahci_deinit_port(ap, &emsg);
1481 	if (rc)
1482 		dev_printk(KERN_WARNING, &pdev->dev,
1483 			   "%s (%d)\n", emsg, rc);
1484 
1485 	/* clear SError */
1486 	tmp = readl(port_mmio + PORT_SCR_ERR);
1487 	VPRINTK("PORT_SCR_ERR 0x%x\n", tmp);
1488 	writel(tmp, port_mmio + PORT_SCR_ERR);
1489 
1490 	/* clear port IRQ */
1491 	tmp = readl(port_mmio + PORT_IRQ_STAT);
1492 	VPRINTK("PORT_IRQ_STAT 0x%x\n", tmp);
1493 	if (tmp)
1494 		writel(tmp, port_mmio + PORT_IRQ_STAT);
1495 
1496 	writel(1 << port_no, mmio + HOST_IRQ_STAT);
1497 }
1498 
1499 static void ahci_init_controller(struct ata_host *host)
1500 {
1501 	struct ahci_host_priv *hpriv = host->private_data;
1502 	struct pci_dev *pdev = to_pci_dev(host->dev);
1503 	void __iomem *mmio = host->iomap[AHCI_PCI_BAR];
1504 	int i;
1505 	void __iomem *port_mmio;
1506 	u32 tmp;
1507 	int mv;
1508 
1509 	if (hpriv->flags & AHCI_HFLAG_MV_PATA) {
1510 		if (pdev->device == 0x6121)
1511 			mv = 2;
1512 		else
1513 			mv = 4;
1514 		port_mmio = __ahci_port_base(host, mv);
1515 
1516 		writel(0, port_mmio + PORT_IRQ_MASK);
1517 
1518 		/* clear port IRQ */
1519 		tmp = readl(port_mmio + PORT_IRQ_STAT);
1520 		VPRINTK("PORT_IRQ_STAT 0x%x\n", tmp);
1521 		if (tmp)
1522 			writel(tmp, port_mmio + PORT_IRQ_STAT);
1523 	}
1524 
1525 	for (i = 0; i < host->n_ports; i++) {
1526 		struct ata_port *ap = host->ports[i];
1527 
1528 		port_mmio = ahci_port_base(ap);
1529 		if (ata_port_is_dummy(ap))
1530 			continue;
1531 
1532 		ahci_port_init(pdev, ap, i, mmio, port_mmio);
1533 	}
1534 
1535 	tmp = readl(mmio + HOST_CTL);
1536 	VPRINTK("HOST_CTL 0x%x\n", tmp);
1537 	writel(tmp | HOST_IRQ_EN, mmio + HOST_CTL);
1538 	tmp = readl(mmio + HOST_CTL);
1539 	VPRINTK("HOST_CTL 0x%x\n", tmp);
1540 }
1541 
1542 static void ahci_dev_config(struct ata_device *dev)
1543 {
1544 	struct ahci_host_priv *hpriv = dev->link->ap->host->private_data;
1545 
1546 	if (hpriv->flags & AHCI_HFLAG_SECT255) {
1547 		dev->max_sectors = 255;
1548 		ata_dev_printk(dev, KERN_INFO,
1549 			       "SB600 AHCI: limiting to 255 sectors per cmd\n");
1550 	}
1551 }
1552 
1553 static unsigned int ahci_dev_classify(struct ata_port *ap)
1554 {
1555 	void __iomem *port_mmio = ahci_port_base(ap);
1556 	struct ata_taskfile tf;
1557 	u32 tmp;
1558 
1559 	tmp = readl(port_mmio + PORT_SIG);
1560 	tf.lbah		= (tmp >> 24)	& 0xff;
1561 	tf.lbam		= (tmp >> 16)	& 0xff;
1562 	tf.lbal		= (tmp >> 8)	& 0xff;
1563 	tf.nsect	= (tmp)		& 0xff;
1564 
1565 	return ata_dev_classify(&tf);
1566 }
1567 
1568 static void ahci_fill_cmd_slot(struct ahci_port_priv *pp, unsigned int tag,
1569 			       u32 opts)
1570 {
1571 	dma_addr_t cmd_tbl_dma;
1572 
1573 	cmd_tbl_dma = pp->cmd_tbl_dma + tag * AHCI_CMD_TBL_SZ;
1574 
1575 	pp->cmd_slot[tag].opts = cpu_to_le32(opts);
1576 	pp->cmd_slot[tag].status = 0;
1577 	pp->cmd_slot[tag].tbl_addr = cpu_to_le32(cmd_tbl_dma & 0xffffffff);
1578 	pp->cmd_slot[tag].tbl_addr_hi = cpu_to_le32((cmd_tbl_dma >> 16) >> 16);
1579 }
1580 
1581 static int ahci_kick_engine(struct ata_port *ap, int force_restart)
1582 {
1583 	void __iomem *port_mmio = ahci_port_base(ap);
1584 	struct ahci_host_priv *hpriv = ap->host->private_data;
1585 	u8 status = readl(port_mmio + PORT_TFDATA) & 0xFF;
1586 	u32 tmp;
1587 	int busy, rc;
1588 
1589 	/* do we need to kick the port? */
1590 	busy = status & (ATA_BUSY | ATA_DRQ);
1591 	if (!busy && !force_restart)
1592 		return 0;
1593 
1594 	/* stop engine */
1595 	rc = ahci_stop_engine(ap);
1596 	if (rc)
1597 		goto out_restart;
1598 
1599 	/* need to do CLO? */
1600 	if (!busy) {
1601 		rc = 0;
1602 		goto out_restart;
1603 	}
1604 
1605 	if (!(hpriv->cap & HOST_CAP_CLO)) {
1606 		rc = -EOPNOTSUPP;
1607 		goto out_restart;
1608 	}
1609 
1610 	/* perform CLO */
1611 	tmp = readl(port_mmio + PORT_CMD);
1612 	tmp |= PORT_CMD_CLO;
1613 	writel(tmp, port_mmio + PORT_CMD);
1614 
1615 	rc = 0;
1616 	tmp = ata_wait_register(port_mmio + PORT_CMD,
1617 				PORT_CMD_CLO, PORT_CMD_CLO, 1, 500);
1618 	if (tmp & PORT_CMD_CLO)
1619 		rc = -EIO;
1620 
1621 	/* restart engine */
1622  out_restart:
1623 	ahci_start_engine(ap);
1624 	return rc;
1625 }
1626 
1627 static int ahci_exec_polled_cmd(struct ata_port *ap, int pmp,
1628 				struct ata_taskfile *tf, int is_cmd, u16 flags,
1629 				unsigned long timeout_msec)
1630 {
1631 	const u32 cmd_fis_len = 5; /* five dwords */
1632 	struct ahci_port_priv *pp = ap->private_data;
1633 	void __iomem *port_mmio = ahci_port_base(ap);
1634 	u8 *fis = pp->cmd_tbl;
1635 	u32 tmp;
1636 
1637 	/* prep the command */
1638 	ata_tf_to_fis(tf, pmp, is_cmd, fis);
1639 	ahci_fill_cmd_slot(pp, 0, cmd_fis_len | flags | (pmp << 12));
1640 
1641 	/* issue & wait */
1642 	writel(1, port_mmio + PORT_CMD_ISSUE);
1643 
1644 	if (timeout_msec) {
1645 		tmp = ata_wait_register(port_mmio + PORT_CMD_ISSUE, 0x1, 0x1,
1646 					1, timeout_msec);
1647 		if (tmp & 0x1) {
1648 			ahci_kick_engine(ap, 1);
1649 			return -EBUSY;
1650 		}
1651 	} else
1652 		readl(port_mmio + PORT_CMD_ISSUE);	/* flush */
1653 
1654 	return 0;
1655 }
1656 
1657 static int ahci_do_softreset(struct ata_link *link, unsigned int *class,
1658 			     int pmp, unsigned long deadline,
1659 			     int (*check_ready)(struct ata_link *link))
1660 {
1661 	struct ata_port *ap = link->ap;
1662 	const char *reason = NULL;
1663 	unsigned long now, msecs;
1664 	struct ata_taskfile tf;
1665 	int rc;
1666 
1667 	DPRINTK("ENTER\n");
1668 
1669 	/* prepare for SRST (AHCI-1.1 10.4.1) */
1670 	rc = ahci_kick_engine(ap, 1);
1671 	if (rc && rc != -EOPNOTSUPP)
1672 		ata_link_printk(link, KERN_WARNING,
1673 				"failed to reset engine (errno=%d)\n", rc);
1674 
1675 	ata_tf_init(link->device, &tf);
1676 
1677 	/* issue the first D2H Register FIS */
1678 	msecs = 0;
1679 	now = jiffies;
1680 	if (time_after(now, deadline))
1681 		msecs = jiffies_to_msecs(deadline - now);
1682 
1683 	tf.ctl |= ATA_SRST;
1684 	if (ahci_exec_polled_cmd(ap, pmp, &tf, 0,
1685 				 AHCI_CMD_RESET | AHCI_CMD_CLR_BUSY, msecs)) {
1686 		rc = -EIO;
1687 		reason = "1st FIS failed";
1688 		goto fail;
1689 	}
1690 
1691 	/* spec says at least 5us, but be generous and sleep for 1ms */
1692 	msleep(1);
1693 
1694 	/* issue the second D2H Register FIS */
1695 	tf.ctl &= ~ATA_SRST;
1696 	ahci_exec_polled_cmd(ap, pmp, &tf, 0, 0, 0);
1697 
1698 	/* wait for link to become ready */
1699 	rc = ata_wait_after_reset(link, deadline, check_ready);
1700 	/* link occupied, -ENODEV too is an error */
1701 	if (rc) {
1702 		reason = "device not ready";
1703 		goto fail;
1704 	}
1705 	*class = ahci_dev_classify(ap);
1706 
1707 	DPRINTK("EXIT, class=%u\n", *class);
1708 	return 0;
1709 
1710  fail:
1711 	ata_link_printk(link, KERN_ERR, "softreset failed (%s)\n", reason);
1712 	return rc;
1713 }
1714 
1715 static int ahci_check_ready(struct ata_link *link)
1716 {
1717 	void __iomem *port_mmio = ahci_port_base(link->ap);
1718 	u8 status = readl(port_mmio + PORT_TFDATA) & 0xFF;
1719 
1720 	return ata_check_ready(status);
1721 }
1722 
1723 static int ahci_softreset(struct ata_link *link, unsigned int *class,
1724 			  unsigned long deadline)
1725 {
1726 	int pmp = sata_srst_pmp(link);
1727 
1728 	DPRINTK("ENTER\n");
1729 
1730 	return ahci_do_softreset(link, class, pmp, deadline, ahci_check_ready);
1731 }
1732 
1733 static int ahci_sb600_check_ready(struct ata_link *link)
1734 {
1735 	void __iomem *port_mmio = ahci_port_base(link->ap);
1736 	u8 status = readl(port_mmio + PORT_TFDATA) & 0xFF;
1737 	u32 irq_status = readl(port_mmio + PORT_IRQ_STAT);
1738 
1739 	/*
1740 	 * There is no need to check TFDATA if BAD PMP is found due to HW bug,
1741 	 * which can save timeout delay.
1742 	 */
1743 	if (irq_status & PORT_IRQ_BAD_PMP)
1744 		return -EIO;
1745 
1746 	return ata_check_ready(status);
1747 }
1748 
1749 static int ahci_sb600_softreset(struct ata_link *link, unsigned int *class,
1750 				unsigned long deadline)
1751 {
1752 	struct ata_port *ap = link->ap;
1753 	void __iomem *port_mmio = ahci_port_base(ap);
1754 	int pmp = sata_srst_pmp(link);
1755 	int rc;
1756 	u32 irq_sts;
1757 
1758 	DPRINTK("ENTER\n");
1759 
1760 	rc = ahci_do_softreset(link, class, pmp, deadline,
1761 			       ahci_sb600_check_ready);
1762 
1763 	/*
1764 	 * Soft reset fails on some ATI chips with IPMS set when PMP
1765 	 * is enabled but SATA HDD/ODD is connected to SATA port,
1766 	 * do soft reset again to port 0.
1767 	 */
1768 	if (rc == -EIO) {
1769 		irq_sts = readl(port_mmio + PORT_IRQ_STAT);
1770 		if (irq_sts & PORT_IRQ_BAD_PMP) {
1771 			ata_link_printk(link, KERN_WARNING,
1772 					"failed due to HW bug, retry pmp=0\n");
1773 			rc = ahci_do_softreset(link, class, 0, deadline,
1774 					       ahci_check_ready);
1775 		}
1776 	}
1777 
1778 	return rc;
1779 }
1780 
1781 static int ahci_hardreset(struct ata_link *link, unsigned int *class,
1782 			  unsigned long deadline)
1783 {
1784 	const unsigned long *timing = sata_ehc_deb_timing(&link->eh_context);
1785 	struct ata_port *ap = link->ap;
1786 	struct ahci_port_priv *pp = ap->private_data;
1787 	u8 *d2h_fis = pp->rx_fis + RX_FIS_D2H_REG;
1788 	struct ata_taskfile tf;
1789 	bool online;
1790 	int rc;
1791 
1792 	DPRINTK("ENTER\n");
1793 
1794 	ahci_stop_engine(ap);
1795 
1796 	/* clear D2H reception area to properly wait for D2H FIS */
1797 	ata_tf_init(link->device, &tf);
1798 	tf.command = 0x80;
1799 	ata_tf_to_fis(&tf, 0, 0, d2h_fis);
1800 
1801 	rc = sata_link_hardreset(link, timing, deadline, &online,
1802 				 ahci_check_ready);
1803 
1804 	ahci_start_engine(ap);
1805 
1806 	if (online)
1807 		*class = ahci_dev_classify(ap);
1808 
1809 	DPRINTK("EXIT, rc=%d, class=%u\n", rc, *class);
1810 	return rc;
1811 }
1812 
1813 static int ahci_vt8251_hardreset(struct ata_link *link, unsigned int *class,
1814 				 unsigned long deadline)
1815 {
1816 	struct ata_port *ap = link->ap;
1817 	bool online;
1818 	int rc;
1819 
1820 	DPRINTK("ENTER\n");
1821 
1822 	ahci_stop_engine(ap);
1823 
1824 	rc = sata_link_hardreset(link, sata_ehc_deb_timing(&link->eh_context),
1825 				 deadline, &online, NULL);
1826 
1827 	ahci_start_engine(ap);
1828 
1829 	DPRINTK("EXIT, rc=%d, class=%u\n", rc, *class);
1830 
1831 	/* vt8251 doesn't clear BSY on signature FIS reception,
1832 	 * request follow-up softreset.
1833 	 */
1834 	return online ? -EAGAIN : rc;
1835 }
1836 
1837 static int ahci_p5wdh_hardreset(struct ata_link *link, unsigned int *class,
1838 				unsigned long deadline)
1839 {
1840 	struct ata_port *ap = link->ap;
1841 	struct ahci_port_priv *pp = ap->private_data;
1842 	u8 *d2h_fis = pp->rx_fis + RX_FIS_D2H_REG;
1843 	struct ata_taskfile tf;
1844 	bool online;
1845 	int rc;
1846 
1847 	ahci_stop_engine(ap);
1848 
1849 	/* clear D2H reception area to properly wait for D2H FIS */
1850 	ata_tf_init(link->device, &tf);
1851 	tf.command = 0x80;
1852 	ata_tf_to_fis(&tf, 0, 0, d2h_fis);
1853 
1854 	rc = sata_link_hardreset(link, sata_ehc_deb_timing(&link->eh_context),
1855 				 deadline, &online, NULL);
1856 
1857 	ahci_start_engine(ap);
1858 
1859 	/* The pseudo configuration device on SIMG4726 attached to
1860 	 * ASUS P5W-DH Deluxe doesn't send signature FIS after
1861 	 * hardreset if no device is attached to the first downstream
1862 	 * port && the pseudo device locks up on SRST w/ PMP==0.  To
1863 	 * work around this, wait for !BSY only briefly.  If BSY isn't
1864 	 * cleared, perform CLO and proceed to IDENTIFY (achieved by
1865 	 * ATA_LFLAG_NO_SRST and ATA_LFLAG_ASSUME_ATA).
1866 	 *
1867 	 * Wait for two seconds.  Devices attached to downstream port
1868 	 * which can't process the following IDENTIFY after this will
1869 	 * have to be reset again.  For most cases, this should
1870 	 * suffice while making probing snappish enough.
1871 	 */
1872 	if (online) {
1873 		rc = ata_wait_after_reset(link, jiffies + 2 * HZ,
1874 					  ahci_check_ready);
1875 		if (rc)
1876 			ahci_kick_engine(ap, 0);
1877 	}
1878 	return rc;
1879 }
1880 
1881 static void ahci_postreset(struct ata_link *link, unsigned int *class)
1882 {
1883 	struct ata_port *ap = link->ap;
1884 	void __iomem *port_mmio = ahci_port_base(ap);
1885 	u32 new_tmp, tmp;
1886 
1887 	ata_std_postreset(link, class);
1888 
1889 	/* Make sure port's ATAPI bit is set appropriately */
1890 	new_tmp = tmp = readl(port_mmio + PORT_CMD);
1891 	if (*class == ATA_DEV_ATAPI)
1892 		new_tmp |= PORT_CMD_ATAPI;
1893 	else
1894 		new_tmp &= ~PORT_CMD_ATAPI;
1895 	if (new_tmp != tmp) {
1896 		writel(new_tmp, port_mmio + PORT_CMD);
1897 		readl(port_mmio + PORT_CMD); /* flush */
1898 	}
1899 }
1900 
1901 static unsigned int ahci_fill_sg(struct ata_queued_cmd *qc, void *cmd_tbl)
1902 {
1903 	struct scatterlist *sg;
1904 	struct ahci_sg *ahci_sg = cmd_tbl + AHCI_CMD_TBL_HDR_SZ;
1905 	unsigned int si;
1906 
1907 	VPRINTK("ENTER\n");
1908 
1909 	/*
1910 	 * Next, the S/G list.
1911 	 */
1912 	for_each_sg(qc->sg, sg, qc->n_elem, si) {
1913 		dma_addr_t addr = sg_dma_address(sg);
1914 		u32 sg_len = sg_dma_len(sg);
1915 
1916 		ahci_sg[si].addr = cpu_to_le32(addr & 0xffffffff);
1917 		ahci_sg[si].addr_hi = cpu_to_le32((addr >> 16) >> 16);
1918 		ahci_sg[si].flags_size = cpu_to_le32(sg_len - 1);
1919 	}
1920 
1921 	return si;
1922 }
1923 
1924 static void ahci_qc_prep(struct ata_queued_cmd *qc)
1925 {
1926 	struct ata_port *ap = qc->ap;
1927 	struct ahci_port_priv *pp = ap->private_data;
1928 	int is_atapi = ata_is_atapi(qc->tf.protocol);
1929 	void *cmd_tbl;
1930 	u32 opts;
1931 	const u32 cmd_fis_len = 5; /* five dwords */
1932 	unsigned int n_elem;
1933 
1934 	/*
1935 	 * Fill in command table information.  First, the header,
1936 	 * a SATA Register - Host to Device command FIS.
1937 	 */
1938 	cmd_tbl = pp->cmd_tbl + qc->tag * AHCI_CMD_TBL_SZ;
1939 
1940 	ata_tf_to_fis(&qc->tf, qc->dev->link->pmp, 1, cmd_tbl);
1941 	if (is_atapi) {
1942 		memset(cmd_tbl + AHCI_CMD_TBL_CDB, 0, 32);
1943 		memcpy(cmd_tbl + AHCI_CMD_TBL_CDB, qc->cdb, qc->dev->cdb_len);
1944 	}
1945 
1946 	n_elem = 0;
1947 	if (qc->flags & ATA_QCFLAG_DMAMAP)
1948 		n_elem = ahci_fill_sg(qc, cmd_tbl);
1949 
1950 	/*
1951 	 * Fill in command slot information.
1952 	 */
1953 	opts = cmd_fis_len | n_elem << 16 | (qc->dev->link->pmp << 12);
1954 	if (qc->tf.flags & ATA_TFLAG_WRITE)
1955 		opts |= AHCI_CMD_WRITE;
1956 	if (is_atapi)
1957 		opts |= AHCI_CMD_ATAPI | AHCI_CMD_PREFETCH;
1958 
1959 	ahci_fill_cmd_slot(pp, qc->tag, opts);
1960 }
1961 
1962 static void ahci_error_intr(struct ata_port *ap, u32 irq_stat)
1963 {
1964 	struct ahci_host_priv *hpriv = ap->host->private_data;
1965 	struct ahci_port_priv *pp = ap->private_data;
1966 	struct ata_eh_info *host_ehi = &ap->link.eh_info;
1967 	struct ata_link *link = NULL;
1968 	struct ata_queued_cmd *active_qc;
1969 	struct ata_eh_info *active_ehi;
1970 	u32 serror;
1971 
1972 	/* determine active link */
1973 	ata_for_each_link(link, ap, EDGE)
1974 		if (ata_link_active(link))
1975 			break;
1976 	if (!link)
1977 		link = &ap->link;
1978 
1979 	active_qc = ata_qc_from_tag(ap, link->active_tag);
1980 	active_ehi = &link->eh_info;
1981 
1982 	/* record irq stat */
1983 	ata_ehi_clear_desc(host_ehi);
1984 	ata_ehi_push_desc(host_ehi, "irq_stat 0x%08x", irq_stat);
1985 
1986 	/* AHCI needs SError cleared; otherwise, it might lock up */
1987 	ahci_scr_read(&ap->link, SCR_ERROR, &serror);
1988 	ahci_scr_write(&ap->link, SCR_ERROR, serror);
1989 	host_ehi->serror |= serror;
1990 
1991 	/* some controllers set IRQ_IF_ERR on device errors, ignore it */
1992 	if (hpriv->flags & AHCI_HFLAG_IGN_IRQ_IF_ERR)
1993 		irq_stat &= ~PORT_IRQ_IF_ERR;
1994 
1995 	if (irq_stat & PORT_IRQ_TF_ERR) {
1996 		/* If qc is active, charge it; otherwise, the active
1997 		 * link.  There's no active qc on NCQ errors.  It will
1998 		 * be determined by EH by reading log page 10h.
1999 		 */
2000 		if (active_qc)
2001 			active_qc->err_mask |= AC_ERR_DEV;
2002 		else
2003 			active_ehi->err_mask |= AC_ERR_DEV;
2004 
2005 		if (hpriv->flags & AHCI_HFLAG_IGN_SERR_INTERNAL)
2006 			host_ehi->serror &= ~SERR_INTERNAL;
2007 	}
2008 
2009 	if (irq_stat & PORT_IRQ_UNK_FIS) {
2010 		u32 *unk = (u32 *)(pp->rx_fis + RX_FIS_UNK);
2011 
2012 		active_ehi->err_mask |= AC_ERR_HSM;
2013 		active_ehi->action |= ATA_EH_RESET;
2014 		ata_ehi_push_desc(active_ehi,
2015 				  "unknown FIS %08x %08x %08x %08x" ,
2016 				  unk[0], unk[1], unk[2], unk[3]);
2017 	}
2018 
2019 	if (sata_pmp_attached(ap) && (irq_stat & PORT_IRQ_BAD_PMP)) {
2020 		active_ehi->err_mask |= AC_ERR_HSM;
2021 		active_ehi->action |= ATA_EH_RESET;
2022 		ata_ehi_push_desc(active_ehi, "incorrect PMP");
2023 	}
2024 
2025 	if (irq_stat & (PORT_IRQ_HBUS_ERR | PORT_IRQ_HBUS_DATA_ERR)) {
2026 		host_ehi->err_mask |= AC_ERR_HOST_BUS;
2027 		host_ehi->action |= ATA_EH_RESET;
2028 		ata_ehi_push_desc(host_ehi, "host bus error");
2029 	}
2030 
2031 	if (irq_stat & PORT_IRQ_IF_ERR) {
2032 		host_ehi->err_mask |= AC_ERR_ATA_BUS;
2033 		host_ehi->action |= ATA_EH_RESET;
2034 		ata_ehi_push_desc(host_ehi, "interface fatal error");
2035 	}
2036 
2037 	if (irq_stat & (PORT_IRQ_CONNECT | PORT_IRQ_PHYRDY)) {
2038 		ata_ehi_hotplugged(host_ehi);
2039 		ata_ehi_push_desc(host_ehi, "%s",
2040 			irq_stat & PORT_IRQ_CONNECT ?
2041 			"connection status changed" : "PHY RDY changed");
2042 	}
2043 
2044 	/* okay, let's hand over to EH */
2045 
2046 	if (irq_stat & PORT_IRQ_FREEZE)
2047 		ata_port_freeze(ap);
2048 	else
2049 		ata_port_abort(ap);
2050 }
2051 
2052 static void ahci_port_intr(struct ata_port *ap)
2053 {
2054 	void __iomem *port_mmio = ahci_port_base(ap);
2055 	struct ata_eh_info *ehi = &ap->link.eh_info;
2056 	struct ahci_port_priv *pp = ap->private_data;
2057 	struct ahci_host_priv *hpriv = ap->host->private_data;
2058 	int resetting = !!(ap->pflags & ATA_PFLAG_RESETTING);
2059 	u32 status, qc_active;
2060 	int rc;
2061 
2062 	status = readl(port_mmio + PORT_IRQ_STAT);
2063 	writel(status, port_mmio + PORT_IRQ_STAT);
2064 
2065 	/* ignore BAD_PMP while resetting */
2066 	if (unlikely(resetting))
2067 		status &= ~PORT_IRQ_BAD_PMP;
2068 
2069 	/* If we are getting PhyRdy, this is
2070  	 * just a power state change, we should
2071  	 * clear out this, plus the PhyRdy/Comm
2072  	 * Wake bits from Serror
2073  	 */
2074 	if ((hpriv->flags & AHCI_HFLAG_NO_HOTPLUG) &&
2075 		(status & PORT_IRQ_PHYRDY)) {
2076 		status &= ~PORT_IRQ_PHYRDY;
2077 		ahci_scr_write(&ap->link, SCR_ERROR, ((1 << 16) | (1 << 18)));
2078 	}
2079 
2080 	if (unlikely(status & PORT_IRQ_ERROR)) {
2081 		ahci_error_intr(ap, status);
2082 		return;
2083 	}
2084 
2085 	if (status & PORT_IRQ_SDB_FIS) {
2086 		/* If SNotification is available, leave notification
2087 		 * handling to sata_async_notification().  If not,
2088 		 * emulate it by snooping SDB FIS RX area.
2089 		 *
2090 		 * Snooping FIS RX area is probably cheaper than
2091 		 * poking SNotification but some constrollers which
2092 		 * implement SNotification, ICH9 for example, don't
2093 		 * store AN SDB FIS into receive area.
2094 		 */
2095 		if (hpriv->cap & HOST_CAP_SNTF)
2096 			sata_async_notification(ap);
2097 		else {
2098 			/* If the 'N' bit in word 0 of the FIS is set,
2099 			 * we just received asynchronous notification.
2100 			 * Tell libata about it.
2101 			 */
2102 			const __le32 *f = pp->rx_fis + RX_FIS_SDB;
2103 			u32 f0 = le32_to_cpu(f[0]);
2104 
2105 			if (f0 & (1 << 15))
2106 				sata_async_notification(ap);
2107 		}
2108 	}
2109 
2110 	/* pp->active_link is valid iff any command is in flight */
2111 	if (ap->qc_active && pp->active_link->sactive)
2112 		qc_active = readl(port_mmio + PORT_SCR_ACT);
2113 	else
2114 		qc_active = readl(port_mmio + PORT_CMD_ISSUE);
2115 
2116 	rc = ata_qc_complete_multiple(ap, qc_active);
2117 
2118 	/* while resetting, invalid completions are expected */
2119 	if (unlikely(rc < 0 && !resetting)) {
2120 		ehi->err_mask |= AC_ERR_HSM;
2121 		ehi->action |= ATA_EH_RESET;
2122 		ata_port_freeze(ap);
2123 	}
2124 }
2125 
2126 static irqreturn_t ahci_interrupt(int irq, void *dev_instance)
2127 {
2128 	struct ata_host *host = dev_instance;
2129 	struct ahci_host_priv *hpriv;
2130 	unsigned int i, handled = 0;
2131 	void __iomem *mmio;
2132 	u32 irq_stat, irq_masked;
2133 
2134 	VPRINTK("ENTER\n");
2135 
2136 	hpriv = host->private_data;
2137 	mmio = host->iomap[AHCI_PCI_BAR];
2138 
2139 	/* sigh.  0xffffffff is a valid return from h/w */
2140 	irq_stat = readl(mmio + HOST_IRQ_STAT);
2141 	if (!irq_stat)
2142 		return IRQ_NONE;
2143 
2144 	irq_masked = irq_stat & hpriv->port_map;
2145 
2146 	spin_lock(&host->lock);
2147 
2148 	for (i = 0; i < host->n_ports; i++) {
2149 		struct ata_port *ap;
2150 
2151 		if (!(irq_masked & (1 << i)))
2152 			continue;
2153 
2154 		ap = host->ports[i];
2155 		if (ap) {
2156 			ahci_port_intr(ap);
2157 			VPRINTK("port %u\n", i);
2158 		} else {
2159 			VPRINTK("port %u (no irq)\n", i);
2160 			if (ata_ratelimit())
2161 				dev_printk(KERN_WARNING, host->dev,
2162 					"interrupt on disabled port %u\n", i);
2163 		}
2164 
2165 		handled = 1;
2166 	}
2167 
2168 	/* HOST_IRQ_STAT behaves as level triggered latch meaning that
2169 	 * it should be cleared after all the port events are cleared;
2170 	 * otherwise, it will raise a spurious interrupt after each
2171 	 * valid one.  Please read section 10.6.2 of ahci 1.1 for more
2172 	 * information.
2173 	 *
2174 	 * Also, use the unmasked value to clear interrupt as spurious
2175 	 * pending event on a dummy port might cause screaming IRQ.
2176 	 */
2177 	writel(irq_stat, mmio + HOST_IRQ_STAT);
2178 
2179 	spin_unlock(&host->lock);
2180 
2181 	VPRINTK("EXIT\n");
2182 
2183 	return IRQ_RETVAL(handled);
2184 }
2185 
2186 static unsigned int ahci_qc_issue(struct ata_queued_cmd *qc)
2187 {
2188 	struct ata_port *ap = qc->ap;
2189 	void __iomem *port_mmio = ahci_port_base(ap);
2190 	struct ahci_port_priv *pp = ap->private_data;
2191 
2192 	/* Keep track of the currently active link.  It will be used
2193 	 * in completion path to determine whether NCQ phase is in
2194 	 * progress.
2195 	 */
2196 	pp->active_link = qc->dev->link;
2197 
2198 	if (qc->tf.protocol == ATA_PROT_NCQ)
2199 		writel(1 << qc->tag, port_mmio + PORT_SCR_ACT);
2200 	writel(1 << qc->tag, port_mmio + PORT_CMD_ISSUE);
2201 
2202 	ahci_sw_activity(qc->dev->link);
2203 
2204 	return 0;
2205 }
2206 
2207 static bool ahci_qc_fill_rtf(struct ata_queued_cmd *qc)
2208 {
2209 	struct ahci_port_priv *pp = qc->ap->private_data;
2210 	u8 *d2h_fis = pp->rx_fis + RX_FIS_D2H_REG;
2211 
2212 	ata_tf_from_fis(d2h_fis, &qc->result_tf);
2213 	return true;
2214 }
2215 
2216 static void ahci_freeze(struct ata_port *ap)
2217 {
2218 	void __iomem *port_mmio = ahci_port_base(ap);
2219 
2220 	/* turn IRQ off */
2221 	writel(0, port_mmio + PORT_IRQ_MASK);
2222 }
2223 
2224 static void ahci_thaw(struct ata_port *ap)
2225 {
2226 	void __iomem *mmio = ap->host->iomap[AHCI_PCI_BAR];
2227 	void __iomem *port_mmio = ahci_port_base(ap);
2228 	u32 tmp;
2229 	struct ahci_port_priv *pp = ap->private_data;
2230 
2231 	/* clear IRQ */
2232 	tmp = readl(port_mmio + PORT_IRQ_STAT);
2233 	writel(tmp, port_mmio + PORT_IRQ_STAT);
2234 	writel(1 << ap->port_no, mmio + HOST_IRQ_STAT);
2235 
2236 	/* turn IRQ back on */
2237 	writel(pp->intr_mask, port_mmio + PORT_IRQ_MASK);
2238 }
2239 
2240 static void ahci_error_handler(struct ata_port *ap)
2241 {
2242 	if (!(ap->pflags & ATA_PFLAG_FROZEN)) {
2243 		/* restart engine */
2244 		ahci_stop_engine(ap);
2245 		ahci_start_engine(ap);
2246 	}
2247 
2248 	sata_pmp_error_handler(ap);
2249 }
2250 
2251 static void ahci_post_internal_cmd(struct ata_queued_cmd *qc)
2252 {
2253 	struct ata_port *ap = qc->ap;
2254 
2255 	/* make DMA engine forget about the failed command */
2256 	if (qc->flags & ATA_QCFLAG_FAILED)
2257 		ahci_kick_engine(ap, 1);
2258 }
2259 
2260 static void ahci_pmp_attach(struct ata_port *ap)
2261 {
2262 	void __iomem *port_mmio = ahci_port_base(ap);
2263 	struct ahci_port_priv *pp = ap->private_data;
2264 	u32 cmd;
2265 
2266 	cmd = readl(port_mmio + PORT_CMD);
2267 	cmd |= PORT_CMD_PMP;
2268 	writel(cmd, port_mmio + PORT_CMD);
2269 
2270 	pp->intr_mask |= PORT_IRQ_BAD_PMP;
2271 	writel(pp->intr_mask, port_mmio + PORT_IRQ_MASK);
2272 }
2273 
2274 static void ahci_pmp_detach(struct ata_port *ap)
2275 {
2276 	void __iomem *port_mmio = ahci_port_base(ap);
2277 	struct ahci_port_priv *pp = ap->private_data;
2278 	u32 cmd;
2279 
2280 	cmd = readl(port_mmio + PORT_CMD);
2281 	cmd &= ~PORT_CMD_PMP;
2282 	writel(cmd, port_mmio + PORT_CMD);
2283 
2284 	pp->intr_mask &= ~PORT_IRQ_BAD_PMP;
2285 	writel(pp->intr_mask, port_mmio + PORT_IRQ_MASK);
2286 }
2287 
2288 static int ahci_port_resume(struct ata_port *ap)
2289 {
2290 	ahci_power_up(ap);
2291 	ahci_start_port(ap);
2292 
2293 	if (sata_pmp_attached(ap))
2294 		ahci_pmp_attach(ap);
2295 	else
2296 		ahci_pmp_detach(ap);
2297 
2298 	return 0;
2299 }
2300 
2301 #ifdef CONFIG_PM
2302 static int ahci_port_suspend(struct ata_port *ap, pm_message_t mesg)
2303 {
2304 	const char *emsg = NULL;
2305 	int rc;
2306 
2307 	rc = ahci_deinit_port(ap, &emsg);
2308 	if (rc == 0)
2309 		ahci_power_down(ap);
2310 	else {
2311 		ata_port_printk(ap, KERN_ERR, "%s (%d)\n", emsg, rc);
2312 		ahci_start_port(ap);
2313 	}
2314 
2315 	return rc;
2316 }
2317 
2318 static int ahci_pci_device_suspend(struct pci_dev *pdev, pm_message_t mesg)
2319 {
2320 	struct ata_host *host = dev_get_drvdata(&pdev->dev);
2321 	struct ahci_host_priv *hpriv = host->private_data;
2322 	void __iomem *mmio = host->iomap[AHCI_PCI_BAR];
2323 	u32 ctl;
2324 
2325 	if (mesg.event & PM_EVENT_SUSPEND &&
2326 	    hpriv->flags & AHCI_HFLAG_NO_SUSPEND) {
2327 		dev_printk(KERN_ERR, &pdev->dev,
2328 			   "BIOS update required for suspend/resume\n");
2329 		return -EIO;
2330 	}
2331 
2332 	if (mesg.event & PM_EVENT_SLEEP) {
2333 		/* AHCI spec rev1.1 section 8.3.3:
2334 		 * Software must disable interrupts prior to requesting a
2335 		 * transition of the HBA to D3 state.
2336 		 */
2337 		ctl = readl(mmio + HOST_CTL);
2338 		ctl &= ~HOST_IRQ_EN;
2339 		writel(ctl, mmio + HOST_CTL);
2340 		readl(mmio + HOST_CTL); /* flush */
2341 	}
2342 
2343 	return ata_pci_device_suspend(pdev, mesg);
2344 }
2345 
2346 static int ahci_pci_device_resume(struct pci_dev *pdev)
2347 {
2348 	struct ata_host *host = dev_get_drvdata(&pdev->dev);
2349 	int rc;
2350 
2351 	rc = ata_pci_device_do_resume(pdev);
2352 	if (rc)
2353 		return rc;
2354 
2355 	if (pdev->dev.power.power_state.event == PM_EVENT_SUSPEND) {
2356 		rc = ahci_reset_controller(host);
2357 		if (rc)
2358 			return rc;
2359 
2360 		ahci_init_controller(host);
2361 	}
2362 
2363 	ata_host_resume(host);
2364 
2365 	return 0;
2366 }
2367 #endif
2368 
2369 static int ahci_port_start(struct ata_port *ap)
2370 {
2371 	struct device *dev = ap->host->dev;
2372 	struct ahci_port_priv *pp;
2373 	void *mem;
2374 	dma_addr_t mem_dma;
2375 
2376 	pp = devm_kzalloc(dev, sizeof(*pp), GFP_KERNEL);
2377 	if (!pp)
2378 		return -ENOMEM;
2379 
2380 	mem = dmam_alloc_coherent(dev, AHCI_PORT_PRIV_DMA_SZ, &mem_dma,
2381 				  GFP_KERNEL);
2382 	if (!mem)
2383 		return -ENOMEM;
2384 	memset(mem, 0, AHCI_PORT_PRIV_DMA_SZ);
2385 
2386 	/*
2387 	 * First item in chunk of DMA memory: 32-slot command table,
2388 	 * 32 bytes each in size
2389 	 */
2390 	pp->cmd_slot = mem;
2391 	pp->cmd_slot_dma = mem_dma;
2392 
2393 	mem += AHCI_CMD_SLOT_SZ;
2394 	mem_dma += AHCI_CMD_SLOT_SZ;
2395 
2396 	/*
2397 	 * Second item: Received-FIS area
2398 	 */
2399 	pp->rx_fis = mem;
2400 	pp->rx_fis_dma = mem_dma;
2401 
2402 	mem += AHCI_RX_FIS_SZ;
2403 	mem_dma += AHCI_RX_FIS_SZ;
2404 
2405 	/*
2406 	 * Third item: data area for storing a single command
2407 	 * and its scatter-gather table
2408 	 */
2409 	pp->cmd_tbl = mem;
2410 	pp->cmd_tbl_dma = mem_dma;
2411 
2412 	/*
2413 	 * Save off initial list of interrupts to be enabled.
2414 	 * This could be changed later
2415 	 */
2416 	pp->intr_mask = DEF_PORT_IRQ;
2417 
2418 	ap->private_data = pp;
2419 
2420 	/* engage engines, captain */
2421 	return ahci_port_resume(ap);
2422 }
2423 
2424 static void ahci_port_stop(struct ata_port *ap)
2425 {
2426 	const char *emsg = NULL;
2427 	int rc;
2428 
2429 	/* de-initialize port */
2430 	rc = ahci_deinit_port(ap, &emsg);
2431 	if (rc)
2432 		ata_port_printk(ap, KERN_WARNING, "%s (%d)\n", emsg, rc);
2433 }
2434 
2435 static int ahci_configure_dma_masks(struct pci_dev *pdev, int using_dac)
2436 {
2437 	int rc;
2438 
2439 	if (using_dac &&
2440 	    !pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) {
2441 		rc = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64));
2442 		if (rc) {
2443 			rc = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
2444 			if (rc) {
2445 				dev_printk(KERN_ERR, &pdev->dev,
2446 					   "64-bit DMA enable failed\n");
2447 				return rc;
2448 			}
2449 		}
2450 	} else {
2451 		rc = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
2452 		if (rc) {
2453 			dev_printk(KERN_ERR, &pdev->dev,
2454 				   "32-bit DMA enable failed\n");
2455 			return rc;
2456 		}
2457 		rc = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
2458 		if (rc) {
2459 			dev_printk(KERN_ERR, &pdev->dev,
2460 				   "32-bit consistent DMA enable failed\n");
2461 			return rc;
2462 		}
2463 	}
2464 	return 0;
2465 }
2466 
2467 static void ahci_print_info(struct ata_host *host)
2468 {
2469 	struct ahci_host_priv *hpriv = host->private_data;
2470 	struct pci_dev *pdev = to_pci_dev(host->dev);
2471 	void __iomem *mmio = host->iomap[AHCI_PCI_BAR];
2472 	u32 vers, cap, impl, speed;
2473 	const char *speed_s;
2474 	u16 cc;
2475 	const char *scc_s;
2476 
2477 	vers = readl(mmio + HOST_VERSION);
2478 	cap = hpriv->cap;
2479 	impl = hpriv->port_map;
2480 
2481 	speed = (cap >> 20) & 0xf;
2482 	if (speed == 1)
2483 		speed_s = "1.5";
2484 	else if (speed == 2)
2485 		speed_s = "3";
2486 	else if (speed == 3)
2487 		speed_s = "6";
2488 	else
2489 		speed_s = "?";
2490 
2491 	pci_read_config_word(pdev, 0x0a, &cc);
2492 	if (cc == PCI_CLASS_STORAGE_IDE)
2493 		scc_s = "IDE";
2494 	else if (cc == PCI_CLASS_STORAGE_SATA)
2495 		scc_s = "SATA";
2496 	else if (cc == PCI_CLASS_STORAGE_RAID)
2497 		scc_s = "RAID";
2498 	else
2499 		scc_s = "unknown";
2500 
2501 	dev_printk(KERN_INFO, &pdev->dev,
2502 		"AHCI %02x%02x.%02x%02x "
2503 		"%u slots %u ports %s Gbps 0x%x impl %s mode\n"
2504 		,
2505 
2506 		(vers >> 24) & 0xff,
2507 		(vers >> 16) & 0xff,
2508 		(vers >> 8) & 0xff,
2509 		vers & 0xff,
2510 
2511 		((cap >> 8) & 0x1f) + 1,
2512 		(cap & 0x1f) + 1,
2513 		speed_s,
2514 		impl,
2515 		scc_s);
2516 
2517 	dev_printk(KERN_INFO, &pdev->dev,
2518 		"flags: "
2519 		"%s%s%s%s%s%s%s"
2520 		"%s%s%s%s%s%s%s"
2521 		"%s\n"
2522 		,
2523 
2524 		cap & (1 << 31) ? "64bit " : "",
2525 		cap & (1 << 30) ? "ncq " : "",
2526 		cap & (1 << 29) ? "sntf " : "",
2527 		cap & (1 << 28) ? "ilck " : "",
2528 		cap & (1 << 27) ? "stag " : "",
2529 		cap & (1 << 26) ? "pm " : "",
2530 		cap & (1 << 25) ? "led " : "",
2531 
2532 		cap & (1 << 24) ? "clo " : "",
2533 		cap & (1 << 19) ? "nz " : "",
2534 		cap & (1 << 18) ? "only " : "",
2535 		cap & (1 << 17) ? "pmp " : "",
2536 		cap & (1 << 15) ? "pio " : "",
2537 		cap & (1 << 14) ? "slum " : "",
2538 		cap & (1 << 13) ? "part " : "",
2539 		cap & (1 << 6) ? "ems ": ""
2540 		);
2541 }
2542 
2543 /* On ASUS P5W DH Deluxe, the second port of PCI device 00:1f.2 is
2544  * hardwired to on-board SIMG 4726.  The chipset is ICH8 and doesn't
2545  * support PMP and the 4726 either directly exports the device
2546  * attached to the first downstream port or acts as a hardware storage
2547  * controller and emulate a single ATA device (can be RAID 0/1 or some
2548  * other configuration).
2549  *
2550  * When there's no device attached to the first downstream port of the
2551  * 4726, "Config Disk" appears, which is a pseudo ATA device to
2552  * configure the 4726.  However, ATA emulation of the device is very
2553  * lame.  It doesn't send signature D2H Reg FIS after the initial
2554  * hardreset, pukes on SRST w/ PMP==0 and has bunch of other issues.
2555  *
2556  * The following function works around the problem by always using
2557  * hardreset on the port and not depending on receiving signature FIS
2558  * afterward.  If signature FIS isn't received soon, ATA class is
2559  * assumed without follow-up softreset.
2560  */
2561 static void ahci_p5wdh_workaround(struct ata_host *host)
2562 {
2563 	static struct dmi_system_id sysids[] = {
2564 		{
2565 			.ident = "P5W DH Deluxe",
2566 			.matches = {
2567 				DMI_MATCH(DMI_SYS_VENDOR,
2568 					  "ASUSTEK COMPUTER INC"),
2569 				DMI_MATCH(DMI_PRODUCT_NAME, "P5W DH Deluxe"),
2570 			},
2571 		},
2572 		{ }
2573 	};
2574 	struct pci_dev *pdev = to_pci_dev(host->dev);
2575 
2576 	if (pdev->bus->number == 0 && pdev->devfn == PCI_DEVFN(0x1f, 2) &&
2577 	    dmi_check_system(sysids)) {
2578 		struct ata_port *ap = host->ports[1];
2579 
2580 		dev_printk(KERN_INFO, &pdev->dev, "enabling ASUS P5W DH "
2581 			   "Deluxe on-board SIMG4726 workaround\n");
2582 
2583 		ap->ops = &ahci_p5wdh_ops;
2584 		ap->link.flags |= ATA_LFLAG_NO_SRST | ATA_LFLAG_ASSUME_ATA;
2585 	}
2586 }
2587 
2588 /*
2589  * SB600 ahci controller on ASUS M2A-VM can't do 64bit DMA with older
2590  * BIOS.  The oldest version known to be broken is 0901 and working is
2591  * 1501 which was released on 2007-10-26.  Force 32bit DMA on anything
2592  * older than 1501.  Please read bko#9412 for more info.
2593  */
2594 static bool ahci_asus_m2a_vm_32bit_only(struct pci_dev *pdev)
2595 {
2596 	static const struct dmi_system_id sysids[] = {
2597 		{
2598 			.ident = "ASUS M2A-VM",
2599 			.matches = {
2600 				DMI_MATCH(DMI_BOARD_VENDOR,
2601 					  "ASUSTeK Computer INC."),
2602 				DMI_MATCH(DMI_BOARD_NAME, "M2A-VM"),
2603 			},
2604 		},
2605 		{ }
2606 	};
2607 	const char *cutoff_mmdd = "10/26";
2608 	const char *date;
2609 	int year;
2610 
2611 	if (pdev->bus->number != 0 || pdev->devfn != PCI_DEVFN(0x12, 0) ||
2612 	    !dmi_check_system(sysids))
2613 		return false;
2614 
2615 	/*
2616 	 * Argh.... both version and date are free form strings.
2617 	 * Let's hope they're using the same date format across
2618 	 * different versions.
2619 	 */
2620 	date = dmi_get_system_info(DMI_BIOS_DATE);
2621 	year = dmi_get_year(DMI_BIOS_DATE);
2622 	if (date && strlen(date) >= 10 && date[2] == '/' && date[5] == '/' &&
2623 	    (year > 2007 ||
2624 	     (year == 2007 && strncmp(date, cutoff_mmdd, 5) >= 0)))
2625 		return false;
2626 
2627 	dev_printk(KERN_WARNING, &pdev->dev, "ASUS M2A-VM: BIOS too old, "
2628 		   "forcing 32bit DMA, update BIOS\n");
2629 
2630 	return true;
2631 }
2632 
2633 static bool ahci_broken_system_poweroff(struct pci_dev *pdev)
2634 {
2635 	static const struct dmi_system_id broken_systems[] = {
2636 		{
2637 			.ident = "HP Compaq nx6310",
2638 			.matches = {
2639 				DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
2640 				DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq nx6310"),
2641 			},
2642 			/* PCI slot number of the controller */
2643 			.driver_data = (void *)0x1FUL,
2644 		},
2645 		{
2646 			.ident = "HP Compaq 6720s",
2647 			.matches = {
2648 				DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
2649 				DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq 6720s"),
2650 			},
2651 			/* PCI slot number of the controller */
2652 			.driver_data = (void *)0x1FUL,
2653 		},
2654 
2655 		{ }	/* terminate list */
2656 	};
2657 	const struct dmi_system_id *dmi = dmi_first_match(broken_systems);
2658 
2659 	if (dmi) {
2660 		unsigned long slot = (unsigned long)dmi->driver_data;
2661 		/* apply the quirk only to on-board controllers */
2662 		return slot == PCI_SLOT(pdev->devfn);
2663 	}
2664 
2665 	return false;
2666 }
2667 
2668 static bool ahci_broken_suspend(struct pci_dev *pdev)
2669 {
2670 	static const struct dmi_system_id sysids[] = {
2671 		/*
2672 		 * On HP dv[4-6] and HDX18 with earlier BIOSen, link
2673 		 * to the harddisk doesn't become online after
2674 		 * resuming from STR.  Warn and fail suspend.
2675 		 */
2676 		{
2677 			.ident = "dv4",
2678 			.matches = {
2679 				DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
2680 				DMI_MATCH(DMI_PRODUCT_NAME,
2681 					  "HP Pavilion dv4 Notebook PC"),
2682 			},
2683 			.driver_data = "F.30", /* cutoff BIOS version */
2684 		},
2685 		{
2686 			.ident = "dv5",
2687 			.matches = {
2688 				DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
2689 				DMI_MATCH(DMI_PRODUCT_NAME,
2690 					  "HP Pavilion dv5 Notebook PC"),
2691 			},
2692 			.driver_data = "F.16", /* cutoff BIOS version */
2693 		},
2694 		{
2695 			.ident = "dv6",
2696 			.matches = {
2697 				DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
2698 				DMI_MATCH(DMI_PRODUCT_NAME,
2699 					  "HP Pavilion dv6 Notebook PC"),
2700 			},
2701 			.driver_data = "F.21",	/* cutoff BIOS version */
2702 		},
2703 		{
2704 			.ident = "HDX18",
2705 			.matches = {
2706 				DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
2707 				DMI_MATCH(DMI_PRODUCT_NAME,
2708 					  "HP HDX18 Notebook PC"),
2709 			},
2710 			.driver_data = "F.23",	/* cutoff BIOS version */
2711 		},
2712 		{ }	/* terminate list */
2713 	};
2714 	const struct dmi_system_id *dmi = dmi_first_match(sysids);
2715 	const char *ver;
2716 
2717 	if (!dmi || pdev->bus->number || pdev->devfn != PCI_DEVFN(0x1f, 2))
2718 		return false;
2719 
2720 	ver = dmi_get_system_info(DMI_BIOS_VERSION);
2721 
2722 	return !ver || strcmp(ver, dmi->driver_data) < 0;
2723 }
2724 
2725 static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
2726 {
2727 	static int printed_version;
2728 	unsigned int board_id = ent->driver_data;
2729 	struct ata_port_info pi = ahci_port_info[board_id];
2730 	const struct ata_port_info *ppi[] = { &pi, NULL };
2731 	struct device *dev = &pdev->dev;
2732 	struct ahci_host_priv *hpriv;
2733 	struct ata_host *host;
2734 	int n_ports, i, rc;
2735 
2736 	VPRINTK("ENTER\n");
2737 
2738 	WARN_ON(ATA_MAX_QUEUE > AHCI_MAX_CMDS);
2739 
2740 	if (!printed_version++)
2741 		dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n");
2742 
2743 	/* The AHCI driver can only drive the SATA ports, the PATA driver
2744 	   can drive them all so if both drivers are selected make sure
2745 	   AHCI stays out of the way */
2746 	if (pdev->vendor == PCI_VENDOR_ID_MARVELL && !marvell_enable)
2747 		return -ENODEV;
2748 
2749 	/* acquire resources */
2750 	rc = pcim_enable_device(pdev);
2751 	if (rc)
2752 		return rc;
2753 
2754 	/* AHCI controllers often implement SFF compatible interface.
2755 	 * Grab all PCI BARs just in case.
2756 	 */
2757 	rc = pcim_iomap_regions_request_all(pdev, 1 << AHCI_PCI_BAR, DRV_NAME);
2758 	if (rc == -EBUSY)
2759 		pcim_pin_device(pdev);
2760 	if (rc)
2761 		return rc;
2762 
2763 	if (pdev->vendor == PCI_VENDOR_ID_INTEL &&
2764 	    (pdev->device == 0x2652 || pdev->device == 0x2653)) {
2765 		u8 map;
2766 
2767 		/* ICH6s share the same PCI ID for both piix and ahci
2768 		 * modes.  Enabling ahci mode while MAP indicates
2769 		 * combined mode is a bad idea.  Yield to ata_piix.
2770 		 */
2771 		pci_read_config_byte(pdev, ICH_MAP, &map);
2772 		if (map & 0x3) {
2773 			dev_printk(KERN_INFO, &pdev->dev, "controller is in "
2774 				   "combined mode, can't enable AHCI mode\n");
2775 			return -ENODEV;
2776 		}
2777 	}
2778 
2779 	hpriv = devm_kzalloc(dev, sizeof(*hpriv), GFP_KERNEL);
2780 	if (!hpriv)
2781 		return -ENOMEM;
2782 	hpriv->flags |= (unsigned long)pi.private_data;
2783 
2784 	/* MCP65 revision A1 and A2 can't do MSI */
2785 	if (board_id == board_ahci_mcp65 &&
2786 	    (pdev->revision == 0xa1 || pdev->revision == 0xa2))
2787 		hpriv->flags |= AHCI_HFLAG_NO_MSI;
2788 
2789 	/* SB800 does NOT need the workaround to ignore SERR_INTERNAL */
2790 	if (board_id == board_ahci_sb700 && pdev->revision >= 0x40)
2791 		hpriv->flags &= ~AHCI_HFLAG_IGN_SERR_INTERNAL;
2792 
2793 	/* apply ASUS M2A_VM quirk */
2794 	if (ahci_asus_m2a_vm_32bit_only(pdev))
2795 		hpriv->flags |= AHCI_HFLAG_32BIT_ONLY;
2796 
2797 	if (!(hpriv->flags & AHCI_HFLAG_NO_MSI))
2798 		pci_enable_msi(pdev);
2799 
2800 	/* save initial config */
2801 	ahci_save_initial_config(pdev, hpriv);
2802 
2803 	/* prepare host */
2804 	if (hpriv->cap & HOST_CAP_NCQ)
2805 		pi.flags |= ATA_FLAG_NCQ;
2806 
2807 	if (hpriv->cap & HOST_CAP_PMP)
2808 		pi.flags |= ATA_FLAG_PMP;
2809 
2810 	if (ahci_em_messages && (hpriv->cap & HOST_CAP_EMS)) {
2811 		u8 messages;
2812 		void __iomem *mmio = pcim_iomap_table(pdev)[AHCI_PCI_BAR];
2813 		u32 em_loc = readl(mmio + HOST_EM_LOC);
2814 		u32 em_ctl = readl(mmio + HOST_EM_CTL);
2815 
2816 		messages = (em_ctl & EM_CTRL_MSG_TYPE) >> 16;
2817 
2818 		/* we only support LED message type right now */
2819 		if ((messages & 0x01) && (ahci_em_messages == 1)) {
2820 			/* store em_loc */
2821 			hpriv->em_loc = ((em_loc >> 16) * 4);
2822 			pi.flags |= ATA_FLAG_EM;
2823 			if (!(em_ctl & EM_CTL_ALHD))
2824 				pi.flags |= ATA_FLAG_SW_ACTIVITY;
2825 		}
2826 	}
2827 
2828 	if (ahci_broken_system_poweroff(pdev)) {
2829 		pi.flags |= ATA_FLAG_NO_POWEROFF_SPINDOWN;
2830 		dev_info(&pdev->dev,
2831 			"quirky BIOS, skipping spindown on poweroff\n");
2832 	}
2833 
2834 	if (ahci_broken_suspend(pdev)) {
2835 		hpriv->flags |= AHCI_HFLAG_NO_SUSPEND;
2836 		dev_printk(KERN_WARNING, &pdev->dev,
2837 			   "BIOS update required for suspend/resume\n");
2838 	}
2839 
2840 	/* CAP.NP sometimes indicate the index of the last enabled
2841 	 * port, at other times, that of the last possible port, so
2842 	 * determining the maximum port number requires looking at
2843 	 * both CAP.NP and port_map.
2844 	 */
2845 	n_ports = max(ahci_nr_ports(hpriv->cap), fls(hpriv->port_map));
2846 
2847 	host = ata_host_alloc_pinfo(&pdev->dev, ppi, n_ports);
2848 	if (!host)
2849 		return -ENOMEM;
2850 	host->iomap = pcim_iomap_table(pdev);
2851 	host->private_data = hpriv;
2852 
2853 	if (!(hpriv->cap & HOST_CAP_SSS) || ahci_ignore_sss)
2854 		host->flags |= ATA_HOST_PARALLEL_SCAN;
2855 	else
2856 		printk(KERN_INFO "ahci: SSS flag set, parallel bus scan disabled\n");
2857 
2858 	if (pi.flags & ATA_FLAG_EM)
2859 		ahci_reset_em(host);
2860 
2861 	for (i = 0; i < host->n_ports; i++) {
2862 		struct ata_port *ap = host->ports[i];
2863 
2864 		ata_port_pbar_desc(ap, AHCI_PCI_BAR, -1, "abar");
2865 		ata_port_pbar_desc(ap, AHCI_PCI_BAR,
2866 				   0x100 + ap->port_no * 0x80, "port");
2867 
2868 		/* set initial link pm policy */
2869 		ap->pm_policy = NOT_AVAILABLE;
2870 
2871 		/* set enclosure management message type */
2872 		if (ap->flags & ATA_FLAG_EM)
2873 			ap->em_message_type = ahci_em_messages;
2874 
2875 
2876 		/* disabled/not-implemented port */
2877 		if (!(hpriv->port_map & (1 << i)))
2878 			ap->ops = &ata_dummy_port_ops;
2879 	}
2880 
2881 	/* apply workaround for ASUS P5W DH Deluxe mainboard */
2882 	ahci_p5wdh_workaround(host);
2883 
2884 	/* initialize adapter */
2885 	rc = ahci_configure_dma_masks(pdev, hpriv->cap & HOST_CAP_64);
2886 	if (rc)
2887 		return rc;
2888 
2889 	rc = ahci_reset_controller(host);
2890 	if (rc)
2891 		return rc;
2892 
2893 	ahci_init_controller(host);
2894 	ahci_print_info(host);
2895 
2896 	pci_set_master(pdev);
2897 	return ata_host_activate(host, pdev->irq, ahci_interrupt, IRQF_SHARED,
2898 				 &ahci_sht);
2899 }
2900 
2901 static int __init ahci_init(void)
2902 {
2903 	return pci_register_driver(&ahci_pci_driver);
2904 }
2905 
2906 static void __exit ahci_exit(void)
2907 {
2908 	pci_unregister_driver(&ahci_pci_driver);
2909 }
2910 
2911 
2912 MODULE_AUTHOR("Jeff Garzik");
2913 MODULE_DESCRIPTION("AHCI SATA low-level driver");
2914 MODULE_LICENSE("GPL");
2915 MODULE_DEVICE_TABLE(pci, ahci_pci_tbl);
2916 MODULE_VERSION(DRV_VERSION);
2917 
2918 module_init(ahci_init);
2919 module_exit(ahci_exit);
2920