sata_dwc.h 10 KB

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