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