1 /*
2  * sata_dwc.h
3  *
4  * Synopsys DesignWare Cores (DWC) SATA host driver
5  *
6  * Author: Mark Miesfeld <mmiesfeld@amcc.com>
7  *
8  * Ported from 2.6.19.2 to 2.6.25/26 by Stefan Roese <sr@denx.de>
9  * Copyright 2008 DENX Software Engineering
10  *
11  * Based on versions provided by AMCC and Synopsys which are:
12  *          Copyright 2006 Applied Micro Circuits Corporation
13  *          COPYRIGHT (C) 2005  SYNOPSYS, INC.  ALL RIGHTS RESERVED
14  *
15  * This program is free software; you can redistribute
16  * it and/or modify it under  the terms of  the GNU
17  * General  Public License as published by the
18  * Free Software Foundation;  either version 2 of the  License,
19  * or (at your option) any later version.
20  *
21  */
22 /*
23  * SATA support based on the chip canyonlands.
24  *
25  * 04-17-2009
26  *		The local version of this driver for the canyonlands board
27  *		does not use interrupts but polls the chip instead.
28  */
29 
30 
31 #ifndef _SATA_DWC_H_
32 #define _SATA_DWC_H_
33 
34 #define __U_BOOT__
35 
36 #define HZ 100
37 #define READ 0
38 #define WRITE 1
39 
40 enum {
41 	ATA_READID_POSTRESET	= (1 << 0),
42 
43 	ATA_DNXFER_PIO		= 0,
44 	ATA_DNXFER_DMA		= 1,
45 	ATA_DNXFER_40C		= 2,
46 	ATA_DNXFER_FORCE_PIO	= 3,
47 	ATA_DNXFER_FORCE_PIO0	= 4,
48 
49 	ATA_DNXFER_QUIET	= (1 << 31),
50 };
51 
52 enum hsm_task_states {
53 	HSM_ST_IDLE,
54 	HSM_ST_FIRST,
55 	HSM_ST,
56 	HSM_ST_LAST,
57 	HSM_ST_ERR,
58 };
59 
60 #define	ATA_SHORT_PAUSE		((HZ >> 6) + 1)
61 
62 struct ata_queued_cmd {
63 	struct ata_port		*ap;
64 	struct ata_device	*dev;
65 
66 	struct ata_taskfile	tf;
67 	u8			cdb[ATAPI_CDB_LEN];
68 	unsigned long		flags;
69 	unsigned int		tag;
70 	unsigned int		n_elem;
71 
72 	int			dma_dir;
73 	unsigned int		sect_size;
74 
75 	unsigned int		nbytes;
76 	unsigned int		extrabytes;
77 	unsigned int		curbytes;
78 
79 	unsigned int		err_mask;
80 	struct ata_taskfile	result_tf;
81 
82 	void			*private_data;
83 #ifndef __U_BOOT__
84 	void			*lldd_task;
85 #endif
86 	unsigned char		*pdata;
87 };
88 
89 typedef void (*ata_qc_cb_t) (struct ata_queued_cmd *qc);
90 
91 #define ATA_TAG_POISON	0xfafbfcfdU
92 
93 enum {
94 	LIBATA_MAX_PRD		= ATA_MAX_PRD / 2,
95 	LIBATA_DUMB_MAX_PRD	= ATA_MAX_PRD / 4,
96 	ATA_MAX_PORTS		= 8,
97 	ATA_DEF_QUEUE		= 1,
98 	ATA_MAX_QUEUE		= 32,
99 	ATA_TAG_INTERNAL	= ATA_MAX_QUEUE - 1,
100 	ATA_MAX_BUS		= 2,
101 	ATA_DEF_BUSY_WAIT	= 10000,
102 
103 	ATAPI_MAX_DRAIN		= 16 << 10,
104 
105 	ATA_SHT_EMULATED	= 1,
106 	ATA_SHT_CMD_PER_LUN	= 1,
107 	ATA_SHT_THIS_ID		= -1,
108 	ATA_SHT_USE_CLUSTERING	= 1,
109 
110 	ATA_DFLAG_LBA		= (1 << 0),
111 	ATA_DFLAG_LBA48		= (1 << 1),
112 	ATA_DFLAG_CDB_INTR	= (1 << 2),
113 	ATA_DFLAG_NCQ		= (1 << 3),
114 	ATA_DFLAG_FLUSH_EXT	= (1 << 4),
115 	ATA_DFLAG_ACPI_PENDING 	= (1 << 5),
116 	ATA_DFLAG_ACPI_FAILED	= (1 << 6),
117 	ATA_DFLAG_AN		= (1 << 7),
118 	ATA_DFLAG_HIPM		= (1 << 8),
119 	ATA_DFLAG_DIPM		= (1 << 9),
120 	ATA_DFLAG_DMADIR	= (1 << 10),
121 	ATA_DFLAG_CFG_MASK	= (1 << 12) - 1,
122 
123 	ATA_DFLAG_PIO		= (1 << 12),
124 	ATA_DFLAG_NCQ_OFF	= (1 << 13),
125 	ATA_DFLAG_SPUNDOWN	= (1 << 14),
126 	ATA_DFLAG_SLEEPING	= (1 << 15),
127 	ATA_DFLAG_DUBIOUS_XFER	= (1 << 16),
128 	ATA_DFLAG_INIT_MASK	= (1 << 24) - 1,
129 
130 	ATA_DFLAG_DETACH	= (1 << 24),
131 	ATA_DFLAG_DETACHED	= (1 << 25),
132 
133 	ATA_LFLAG_HRST_TO_RESUME	= (1 << 0),
134 	ATA_LFLAG_SKIP_D2H_BSY		= (1 << 1),
135 	ATA_LFLAG_NO_SRST		= (1 << 2),
136 	ATA_LFLAG_ASSUME_ATA		= (1 << 3),
137 	ATA_LFLAG_ASSUME_SEMB		= (1 << 4),
138 	ATA_LFLAG_ASSUME_CLASS = ATA_LFLAG_ASSUME_ATA | ATA_LFLAG_ASSUME_SEMB,
139 	ATA_LFLAG_NO_RETRY		= (1 << 5),
140 	ATA_LFLAG_DISABLED		= (1 << 6),
141 
142 	ATA_FLAG_SLAVE_POSS	= (1 << 0),
143 	ATA_FLAG_SATA		= (1 << 1),
144 	ATA_FLAG_NO_LEGACY	= (1 << 2),
145 	ATA_FLAG_MMIO		= (1 << 3),
146 	ATA_FLAG_SRST		= (1 << 4),
147 	ATA_FLAG_SATA_RESET	= (1 << 5),
148 	ATA_FLAG_NO_ATAPI	= (1 << 6),
149 	ATA_FLAG_PIO_DMA	= (1 << 7),
150 	ATA_FLAG_PIO_LBA48	= (1 << 8),
151 	ATA_FLAG_PIO_POLLING	= (1 << 9),
152 	ATA_FLAG_NCQ		= (1 << 10),
153 	ATA_FLAG_DEBUGMSG	= (1 << 13),
154 	ATA_FLAG_IGN_SIMPLEX	= (1 << 15),
155 	ATA_FLAG_NO_IORDY	= (1 << 16),
156 	ATA_FLAG_ACPI_SATA	= (1 << 17),
157 	ATA_FLAG_AN		= (1 << 18),
158 	ATA_FLAG_PMP		= (1 << 19),
159 	ATA_FLAG_IPM		= (1 << 20),
160 
161 	ATA_FLAG_DISABLED	= (1 << 23),
162 
163 	ATA_PFLAG_EH_PENDING		= (1 << 0),
164 	ATA_PFLAG_EH_IN_PROGRESS	= (1 << 1),
165 	ATA_PFLAG_FROZEN		= (1 << 2),
166 	ATA_PFLAG_RECOVERED		= (1 << 3),
167 	ATA_PFLAG_LOADING		= (1 << 4),
168 	ATA_PFLAG_UNLOADING		= (1 << 5),
169 	ATA_PFLAG_SCSI_HOTPLUG		= (1 << 6),
170 	ATA_PFLAG_INITIALIZING		= (1 << 7),
171 	ATA_PFLAG_RESETTING		= (1 << 8),
172 	ATA_PFLAG_SUSPENDED		= (1 << 17),
173 	ATA_PFLAG_PM_PENDING		= (1 << 18),
174 
175 	ATA_QCFLAG_ACTIVE	= (1 << 0),
176 	ATA_QCFLAG_DMAMAP	= (1 << 1),
177 	ATA_QCFLAG_IO		= (1 << 3),
178 	ATA_QCFLAG_RESULT_TF	= (1 << 4),
179 	ATA_QCFLAG_CLEAR_EXCL	= (1 << 5),
180 	ATA_QCFLAG_QUIET	= (1 << 6),
181 
182 	ATA_QCFLAG_FAILED	= (1 << 16),
183 	ATA_QCFLAG_SENSE_VALID	= (1 << 17),
184 	ATA_QCFLAG_EH_SCHEDULED	= (1 << 18),
185 
186 	ATA_HOST_SIMPLEX	= (1 << 0),
187 	ATA_HOST_STARTED	= (1 << 1),
188 
189 	ATA_TMOUT_BOOT			= 30 * 100,
190 	ATA_TMOUT_BOOT_QUICK		= 7 * 100,
191 	ATA_TMOUT_INTERNAL		= 30 * 100,
192 	ATA_TMOUT_INTERNAL_QUICK	= 5 * 100,
193 
194 	/* FIXME: GoVault needs 2s but we can't afford that without
195 	 * parallel probing.  800ms is enough for iVDR disk
196 	 * HHD424020F7SV00.  Increase to 2secs when parallel probing
197 	 * is in place.
198 	 */
199 	ATA_TMOUT_FF_WAIT	= 4 * 100 / 5,
200 
201 	BUS_UNKNOWN		= 0,
202 	BUS_DMA			= 1,
203 	BUS_IDLE		= 2,
204 	BUS_NOINTR		= 3,
205 	BUS_NODATA		= 4,
206 	BUS_TIMER		= 5,
207 	BUS_PIO			= 6,
208 	BUS_EDD			= 7,
209 	BUS_IDENTIFY		= 8,
210 	BUS_PACKET		= 9,
211 
212 	PORT_UNKNOWN		= 0,
213 	PORT_ENABLED		= 1,
214 	PORT_DISABLED		= 2,
215 
216 	/* encoding various smaller bitmaps into a single
217 	 * unsigned long bitmap
218 	 */
219 	ATA_NR_PIO_MODES	= 7,
220 	ATA_NR_MWDMA_MODES	= 5,
221 	ATA_NR_UDMA_MODES	= 8,
222 
223 	ATA_SHIFT_PIO		= 0,
224 	ATA_SHIFT_MWDMA		= ATA_SHIFT_PIO + ATA_NR_PIO_MODES,
225 	ATA_SHIFT_UDMA		= ATA_SHIFT_MWDMA + ATA_NR_MWDMA_MODES,
226 
227 	ATA_DMA_PAD_SZ		= 4,
228 
229 	ATA_ERING_SIZE		= 32,
230 
231 	ATA_DEFER_LINK		= 1,
232 	ATA_DEFER_PORT		= 2,
233 
234 	ATA_EH_DESC_LEN		= 80,
235 
236 	ATA_EH_REVALIDATE	= (1 << 0),
237 	ATA_EH_SOFTRESET	= (1 << 1),
238 	ATA_EH_HARDRESET	= (1 << 2),
239 	ATA_EH_ENABLE_LINK	= (1 << 3),
240 	ATA_EH_LPM		= (1 << 4),
241 
242 	ATA_EH_RESET_MASK	= ATA_EH_SOFTRESET | ATA_EH_HARDRESET,
243 	ATA_EH_PERDEV_MASK	= ATA_EH_REVALIDATE,
244 
245 	ATA_EHI_HOTPLUGGED	= (1 << 0),
246 	ATA_EHI_RESUME_LINK	= (1 << 1),
247 	ATA_EHI_NO_AUTOPSY	= (1 << 2),
248 	ATA_EHI_QUIET		= (1 << 3),
249 
250 	ATA_EHI_DID_SOFTRESET	= (1 << 16),
251 	ATA_EHI_DID_HARDRESET	= (1 << 17),
252 	ATA_EHI_PRINTINFO	= (1 << 18),
253 	ATA_EHI_SETMODE		= (1 << 19),
254 	ATA_EHI_POST_SETMODE	= (1 << 20),
255 
256 	ATA_EHI_DID_RESET = ATA_EHI_DID_SOFTRESET | ATA_EHI_DID_HARDRESET,
257 	ATA_EHI_RESET_MODIFIER_MASK = ATA_EHI_RESUME_LINK,
258 
259 	ATA_EH_MAX_TRIES	= 5,
260 
261 	ATA_PROBE_MAX_TRIES	= 3,
262 	ATA_EH_DEV_TRIES	= 3,
263 	ATA_EH_PMP_TRIES	= 5,
264 	ATA_EH_PMP_LINK_TRIES	= 3,
265 
266 	SATA_PMP_SCR_TIMEOUT	= 250,
267 
268 	/* Horkage types. May be set by libata or controller on drives
269 	(some horkage may be drive/controller pair dependant */
270 
271 	ATA_HORKAGE_DIAGNOSTIC	= (1 << 0),
272 	ATA_HORKAGE_NODMA	= (1 << 1),
273 	ATA_HORKAGE_NONCQ	= (1 << 2),
274 	ATA_HORKAGE_MAX_SEC_128	= (1 << 3),
275 	ATA_HORKAGE_BROKEN_HPA	= (1 << 4),
276 	ATA_HORKAGE_SKIP_PM	= (1 << 5),
277 	ATA_HORKAGE_HPA_SIZE	= (1 << 6),
278 	ATA_HORKAGE_IPM		= (1 << 7),
279 	ATA_HORKAGE_IVB		= (1 << 8),
280 	ATA_HORKAGE_STUCK_ERR	= (1 << 9),
281 
282 	ATA_DMA_MASK_ATA	= (1 << 0),
283 	ATA_DMA_MASK_ATAPI	= (1 << 1),
284 	ATA_DMA_MASK_CFA	= (1 << 2),
285 
286 	ATAPI_READ		= 0,
287 	ATAPI_WRITE		= 1,
288 	ATAPI_READ_CD		= 2,
289 	ATAPI_PASS_THRU		= 3,
290 	ATAPI_MISC		= 4,
291 };
292 
293 enum ata_completion_errors {
294 	AC_ERR_DEV		= (1 << 0),
295 	AC_ERR_HSM		= (1 << 1),
296 	AC_ERR_TIMEOUT		= (1 << 2),
297 	AC_ERR_MEDIA		= (1 << 3),
298 	AC_ERR_ATA_BUS		= (1 << 4),
299 	AC_ERR_HOST_BUS		= (1 << 5),
300 	AC_ERR_SYSTEM		= (1 << 6),
301 	AC_ERR_INVALID		= (1 << 7),
302 	AC_ERR_OTHER		= (1 << 8),
303 	AC_ERR_NODEV_HINT	= (1 << 9),
304 	AC_ERR_NCQ		= (1 << 10),
305 };
306 
307 enum ata_xfer_mask {
308 	ATA_MASK_PIO	= ((1LU << ATA_NR_PIO_MODES) - 1) << ATA_SHIFT_PIO,
309 	ATA_MASK_MWDMA	= ((1LU << ATA_NR_MWDMA_MODES) - 1) << ATA_SHIFT_MWDMA,
310 	ATA_MASK_UDMA	= ((1LU << ATA_NR_UDMA_MODES) - 1) << ATA_SHIFT_UDMA,
311 };
312 
313 struct ata_port_info {
314 #ifndef __U_BOOT__
315 	struct scsi_host_template	*sht;
316 #endif
317 	unsigned long			flags;
318 	unsigned long			link_flags;
319 	unsigned long			pio_mask;
320 	unsigned long			mwdma_mask;
321 	unsigned long			udma_mask;
322 #ifndef __U_BOOT__
323 	const struct ata_port_operations *port_ops;
324 	void				*private_data;
325 #endif
326 };
327 
328 struct ata_ioports {
329 	void __iomem		*cmd_addr;
330 	void __iomem		*data_addr;
331 	void __iomem		*error_addr;
332 	void __iomem		*feature_addr;
333 	void __iomem		*nsect_addr;
334 	void __iomem		*lbal_addr;
335 	void __iomem		*lbam_addr;
336 	void __iomem		*lbah_addr;
337 	void __iomem		*device_addr;
338 	void __iomem		*status_addr;
339 	void __iomem		*command_addr;
340 	void __iomem		*altstatus_addr;
341 	void __iomem		*ctl_addr;
342 #ifndef __U_BOOT__
343 	void __iomem		*bmdma_addr;
344 #endif
345 	void __iomem		*scr_addr;
346 };
347 
348 struct ata_host {
349 #ifndef __U_BOOT__
350 	void __iomem * const	*iomap;
351 	void			*private_data;
352 	const struct ata_port_operations *ops;
353 	unsigned long		flags;
354 	struct ata_port		*simplex_claimed;
355 #endif
356 	unsigned int		n_ports;
357 	struct ata_port		*ports[0];
358 };
359 
360 #ifndef __U_BOOT__
361 struct ata_port_stats {
362 	unsigned long		unhandled_irq;
363 	unsigned long		idle_irq;
364 	unsigned long		rw_reqbuf;
365 };
366 #endif
367 
368 struct ata_device {
369 	struct ata_link		*link;
370 	unsigned int		devno;
371 	unsigned long		flags;
372 	unsigned int		horkage;
373 #ifndef __U_BOOT__
374 	struct scsi_device	*sdev;
375 #ifdef CONFIG_ATA_ACPI
376 	acpi_handle		acpi_handle;
377 	union acpi_object	*gtf_cache;
378 #endif
379 #endif
380 	u64			n_sectors;
381 	unsigned int		class;
382 
383 	union {
384 		u16		id[ATA_ID_WORDS];
385 		u32		gscr[SATA_PMP_GSCR_DWORDS];
386 	};
387 #ifndef __U_BOOT__
388 	u8			pio_mode;
389 	u8			dma_mode;
390 	u8			xfer_mode;
391 	unsigned int		xfer_shift;
392 #endif
393 	unsigned int		multi_count;
394 	unsigned int		max_sectors;
395 	unsigned int		cdb_len;
396 #ifndef __U_BOOT__
397 	unsigned long		pio_mask;
398 	unsigned long		mwdma_mask;
399 #endif
400 	unsigned long		udma_mask;
401 	u16			cylinders;
402 	u16			heads;
403 	u16			sectors;
404 #ifndef __U_BOOT__
405 	int			spdn_cnt;
406 #endif
407 };
408 
409 enum dma_data_direction {
410 	DMA_BIDIRECTIONAL = 0,
411 	DMA_TO_DEVICE = 1,
412 	DMA_FROM_DEVICE = 2,
413 	DMA_NONE = 3,
414 };
415 
416 struct ata_link {
417 	struct ata_port		*ap;
418 	int			pmp;
419 	unsigned int		active_tag;
420 	u32			sactive;
421 	unsigned int		flags;
422 	unsigned int		hw_sata_spd_limit;
423 #ifndef __U_BOOT__
424 	unsigned int		sata_spd_limit;
425 	unsigned int		sata_spd;
426 	struct ata_device	device[2];
427 #endif
428 };
429 
430 struct ata_port {
431 	unsigned long		flags;
432 	unsigned int		pflags;
433 	unsigned int		print_id;
434 	unsigned int		port_no;
435 
436 	struct ata_ioports	ioaddr;
437 
438 	u8			ctl;
439 	u8			last_ctl;
440 	unsigned int		pio_mask;
441 	unsigned int		mwdma_mask;
442 	unsigned int		udma_mask;
443 	unsigned int		cbl;
444 
445 	struct ata_queued_cmd	qcmd[ATA_MAX_QUEUE];
446 	unsigned long		qc_allocated;
447 	unsigned int		qc_active;
448 	int			nr_active_links;
449 
450 	struct ata_link		link;
451 #ifndef __U_BOOT__
452 	int			nr_pmp_links;
453 	struct ata_link		*pmp_link;
454 #endif
455 	struct ata_link		*excl_link;
456 	int			nr_pmp_links;
457 #ifndef __U_BOOT__
458 	struct ata_port_stats	stats;
459 	struct device		*dev;
460 	u32			msg_enable;
461 #endif
462 	struct ata_host		*host;
463 	void			*port_task_data;
464 
465 	unsigned int		hsm_task_state;
466 	void			*private_data;
467 	unsigned char		*pdata;
468 };
469 
470 #ifndef TRUE
471 #define TRUE 1
472 #endif
473 #ifndef FALSE
474 #define FALSE 0
475 #endif
476 
477 #endif
478