ata_piix.c 28 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040
  1. /*
  2. * ata_piix.c - Intel PATA/SATA controllers
  3. *
  4. * Maintained by: Jeff Garzik <jgarzik@pobox.com>
  5. * Please ALWAYS copy linux-ide@vger.kernel.org
  6. * on emails.
  7. *
  8. *
  9. * Copyright 2003-2005 Red Hat Inc
  10. * Copyright 2003-2005 Jeff Garzik
  11. *
  12. *
  13. * Copyright header from piix.c:
  14. *
  15. * Copyright (C) 1998-1999 Andrzej Krzysztofowicz, Author and Maintainer
  16. * Copyright (C) 1998-2000 Andre Hedrick <andre@linux-ide.org>
  17. * Copyright (C) 2003 Red Hat Inc <alan@redhat.com>
  18. *
  19. *
  20. * This program is free software; you can redistribute it and/or modify
  21. * it under the terms of the GNU General Public License as published by
  22. * the Free Software Foundation; either version 2, or (at your option)
  23. * any later version.
  24. *
  25. * This program is distributed in the hope that it will be useful,
  26. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  27. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  28. * GNU General Public License for more details.
  29. *
  30. * You should have received a copy of the GNU General Public License
  31. * along with this program; see the file COPYING. If not, write to
  32. * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  33. *
  34. *
  35. * libata documentation is available via 'make {ps|pdf}docs',
  36. * as Documentation/DocBook/libata.*
  37. *
  38. * Hardware documentation available at http://developer.intel.com/
  39. *
  40. * Documentation
  41. * Publically available from Intel web site. Errata documentation
  42. * is also publically available. As an aide to anyone hacking on this
  43. * driver the list of errata that are relevant is below.going back to
  44. * PIIX4. Older device documentation is now a bit tricky to find.
  45. *
  46. * The chipsets all follow very much the same design. The orginal Triton
  47. * series chipsets do _not_ support independant device timings, but this
  48. * is fixed in Triton II. With the odd mobile exception the chips then
  49. * change little except in gaining more modes until SATA arrives. This
  50. * driver supports only the chips with independant timing (that is those
  51. * with SITRE and the 0x44 timing register). See pata_oldpiix and pata_mpiix
  52. * for the early chip drivers.
  53. *
  54. * Errata of note:
  55. *
  56. * Unfixable
  57. * PIIX4 errata #9 - Only on ultra obscure hw
  58. * ICH3 errata #13 - Not observed to affect real hw
  59. * by Intel
  60. *
  61. * Things we must deal with
  62. * PIIX4 errata #10 - BM IDE hang with non UDMA
  63. * (must stop/start dma to recover)
  64. * 440MX errata #15 - As PIIX4 errata #10
  65. * PIIX4 errata #15 - Must not read control registers
  66. * during a PIO transfer
  67. * 440MX errata #13 - As PIIX4 errata #15
  68. * ICH2 errata #21 - DMA mode 0 doesn't work right
  69. * ICH0/1 errata #55 - As ICH2 errata #21
  70. * ICH2 spec c #9 - Extra operations needed to handle
  71. * drive hotswap [NOT YET SUPPORTED]
  72. * ICH2 spec c #20 - IDE PRD must not cross a 64K boundary
  73. * and must be dword aligned
  74. * ICH2 spec c #24 - UDMA mode 4,5 t85/86 should be 6ns not 3.3
  75. *
  76. * Should have been BIOS fixed:
  77. * 450NX: errata #19 - DMA hangs on old 450NX
  78. * 450NX: errata #20 - DMA hangs on old 450NX
  79. * 450NX: errata #25 - Corruption with DMA on old 450NX
  80. * ICH3 errata #15 - IDE deadlock under high load
  81. * (BIOS must set dev 31 fn 0 bit 23)
  82. * ICH3 errata #18 - Don't use native mode
  83. */
  84. #include <linux/kernel.h>
  85. #include <linux/module.h>
  86. #include <linux/pci.h>
  87. #include <linux/init.h>
  88. #include <linux/blkdev.h>
  89. #include <linux/delay.h>
  90. #include <linux/device.h>
  91. #include <scsi/scsi_host.h>
  92. #include <linux/libata.h>
  93. #define DRV_NAME "ata_piix"
  94. #define DRV_VERSION "2.00"
  95. enum {
  96. PIIX_IOCFG = 0x54, /* IDE I/O configuration register */
  97. ICH5_PMR = 0x90, /* port mapping register */
  98. ICH5_PCS = 0x92, /* port control and status */
  99. PIIX_SCC = 0x0A, /* sub-class code register */
  100. PIIX_FLAG_IGNORE_PCS = (1 << 25), /* ignore PCS present bits */
  101. PIIX_FLAG_SCR = (1 << 26), /* SCR available */
  102. PIIX_FLAG_AHCI = (1 << 27), /* AHCI possible */
  103. PIIX_FLAG_CHECKINTR = (1 << 28), /* make sure PCI INTx enabled */
  104. /* combined mode. if set, PATA is channel 0.
  105. * if clear, PATA is channel 1.
  106. */
  107. PIIX_PORT_ENABLED = (1 << 0),
  108. PIIX_PORT_PRESENT = (1 << 4),
  109. PIIX_80C_PRI = (1 << 5) | (1 << 4),
  110. PIIX_80C_SEC = (1 << 7) | (1 << 6),
  111. /* controller IDs */
  112. piix4_pata = 0,
  113. ich5_pata = 1,
  114. ich5_sata = 2,
  115. esb_sata = 3,
  116. ich6_sata = 4,
  117. ich6_sata_ahci = 5,
  118. ich6m_sata_ahci = 6,
  119. ich7m_sata_ahci = 7,
  120. ich8_sata_ahci = 8,
  121. /* constants for mapping table */
  122. P0 = 0, /* port 0 */
  123. P1 = 1, /* port 1 */
  124. P2 = 2, /* port 2 */
  125. P3 = 3, /* port 3 */
  126. IDE = -1, /* IDE */
  127. NA = -2, /* not avaliable */
  128. RV = -3, /* reserved */
  129. PIIX_AHCI_DEVICE = 6,
  130. };
  131. struct piix_map_db {
  132. const u32 mask;
  133. const u16 port_enable;
  134. const int present_shift;
  135. const int map[][4];
  136. };
  137. struct piix_host_priv {
  138. const int *map;
  139. const struct piix_map_db *map_db;
  140. };
  141. static int piix_init_one (struct pci_dev *pdev,
  142. const struct pci_device_id *ent);
  143. static void piix_host_stop(struct ata_host_set *host_set);
  144. static void piix_set_piomode (struct ata_port *ap, struct ata_device *adev);
  145. static void piix_set_dmamode (struct ata_port *ap, struct ata_device *adev);
  146. static void piix_pata_error_handler(struct ata_port *ap);
  147. static void piix_sata_error_handler(struct ata_port *ap);
  148. static unsigned int in_module_init = 1;
  149. static const struct pci_device_id piix_pci_tbl[] = {
  150. #ifdef ATA_ENABLE_PATA
  151. { 0x8086, 0x7111, PCI_ANY_ID, PCI_ANY_ID, 0, 0, piix4_pata },
  152. { 0x8086, 0x24db, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich5_pata },
  153. { 0x8086, 0x25a2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich5_pata },
  154. { 0x8086, 0x27df, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich5_pata },
  155. #endif
  156. /* NOTE: The following PCI ids must be kept in sync with the
  157. * list in drivers/pci/quirks.c.
  158. */
  159. /* 82801EB (ICH5) */
  160. { 0x8086, 0x24d1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich5_sata },
  161. /* 82801EB (ICH5) */
  162. { 0x8086, 0x24df, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich5_sata },
  163. /* 6300ESB (ICH5 variant with broken PCS present bits) */
  164. { 0x8086, 0x25a3, PCI_ANY_ID, PCI_ANY_ID, 0, 0, esb_sata },
  165. /* 6300ESB pretending RAID */
  166. { 0x8086, 0x25b0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, esb_sata },
  167. /* 82801FB/FW (ICH6/ICH6W) */
  168. { 0x8086, 0x2651, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich6_sata },
  169. /* 82801FR/FRW (ICH6R/ICH6RW) */
  170. { 0x8086, 0x2652, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich6_sata_ahci },
  171. /* 82801FBM ICH6M (ICH6R with only port 0 and 2 implemented) */
  172. { 0x8086, 0x2653, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich6m_sata_ahci },
  173. /* 82801GB/GR/GH (ICH7, identical to ICH6) */
  174. { 0x8086, 0x27c0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich6_sata_ahci },
  175. /* 2801GBM/GHM (ICH7M, identical to ICH6M) */
  176. { 0x8086, 0x27c4, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich7m_sata_ahci },
  177. /* Enterprise Southbridge 2 (where's the datasheet?) */
  178. { 0x8086, 0x2680, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich6_sata_ahci },
  179. /* SATA Controller 1 IDE (ICH8, no datasheet yet) */
  180. { 0x8086, 0x2820, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_ahci },
  181. /* SATA Controller 2 IDE (ICH8, ditto) */
  182. { 0x8086, 0x2825, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_ahci },
  183. /* Mobile SATA Controller IDE (ICH8M, ditto) */
  184. { 0x8086, 0x2828, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_ahci },
  185. { } /* terminate list */
  186. };
  187. static struct pci_driver piix_pci_driver = {
  188. .name = DRV_NAME,
  189. .id_table = piix_pci_tbl,
  190. .probe = piix_init_one,
  191. .remove = ata_pci_remove_one,
  192. .suspend = ata_pci_device_suspend,
  193. .resume = ata_pci_device_resume,
  194. };
  195. static struct scsi_host_template piix_sht = {
  196. .module = THIS_MODULE,
  197. .name = DRV_NAME,
  198. .ioctl = ata_scsi_ioctl,
  199. .queuecommand = ata_scsi_queuecmd,
  200. .can_queue = ATA_DEF_QUEUE,
  201. .this_id = ATA_SHT_THIS_ID,
  202. .sg_tablesize = LIBATA_MAX_PRD,
  203. .cmd_per_lun = ATA_SHT_CMD_PER_LUN,
  204. .emulated = ATA_SHT_EMULATED,
  205. .use_clustering = ATA_SHT_USE_CLUSTERING,
  206. .proc_name = DRV_NAME,
  207. .dma_boundary = ATA_DMA_BOUNDARY,
  208. .slave_configure = ata_scsi_slave_config,
  209. .slave_destroy = ata_scsi_slave_destroy,
  210. .bios_param = ata_std_bios_param,
  211. .resume = ata_scsi_device_resume,
  212. .suspend = ata_scsi_device_suspend,
  213. };
  214. static const struct ata_port_operations piix_pata_ops = {
  215. .port_disable = ata_port_disable,
  216. .set_piomode = piix_set_piomode,
  217. .set_dmamode = piix_set_dmamode,
  218. .mode_filter = ata_pci_default_filter,
  219. .tf_load = ata_tf_load,
  220. .tf_read = ata_tf_read,
  221. .check_status = ata_check_status,
  222. .exec_command = ata_exec_command,
  223. .dev_select = ata_std_dev_select,
  224. .bmdma_setup = ata_bmdma_setup,
  225. .bmdma_start = ata_bmdma_start,
  226. .bmdma_stop = ata_bmdma_stop,
  227. .bmdma_status = ata_bmdma_status,
  228. .qc_prep = ata_qc_prep,
  229. .qc_issue = ata_qc_issue_prot,
  230. .data_xfer = ata_pio_data_xfer,
  231. .freeze = ata_bmdma_freeze,
  232. .thaw = ata_bmdma_thaw,
  233. .error_handler = piix_pata_error_handler,
  234. .post_internal_cmd = ata_bmdma_post_internal_cmd,
  235. .irq_handler = ata_interrupt,
  236. .irq_clear = ata_bmdma_irq_clear,
  237. .port_start = ata_port_start,
  238. .port_stop = ata_port_stop,
  239. .host_stop = piix_host_stop,
  240. };
  241. static const struct ata_port_operations piix_sata_ops = {
  242. .port_disable = ata_port_disable,
  243. .tf_load = ata_tf_load,
  244. .tf_read = ata_tf_read,
  245. .check_status = ata_check_status,
  246. .exec_command = ata_exec_command,
  247. .dev_select = ata_std_dev_select,
  248. .bmdma_setup = ata_bmdma_setup,
  249. .bmdma_start = ata_bmdma_start,
  250. .bmdma_stop = ata_bmdma_stop,
  251. .bmdma_status = ata_bmdma_status,
  252. .qc_prep = ata_qc_prep,
  253. .qc_issue = ata_qc_issue_prot,
  254. .data_xfer = ata_pio_data_xfer,
  255. .freeze = ata_bmdma_freeze,
  256. .thaw = ata_bmdma_thaw,
  257. .error_handler = piix_sata_error_handler,
  258. .post_internal_cmd = ata_bmdma_post_internal_cmd,
  259. .irq_handler = ata_interrupt,
  260. .irq_clear = ata_bmdma_irq_clear,
  261. .port_start = ata_port_start,
  262. .port_stop = ata_port_stop,
  263. .host_stop = piix_host_stop,
  264. };
  265. static const struct piix_map_db ich5_map_db = {
  266. .mask = 0x7,
  267. .port_enable = 0x3,
  268. .present_shift = 4,
  269. .map = {
  270. /* PM PS SM SS MAP */
  271. { P0, NA, P1, NA }, /* 000b */
  272. { P1, NA, P0, NA }, /* 001b */
  273. { RV, RV, RV, RV },
  274. { RV, RV, RV, RV },
  275. { P0, P1, IDE, IDE }, /* 100b */
  276. { P1, P0, IDE, IDE }, /* 101b */
  277. { IDE, IDE, P0, P1 }, /* 110b */
  278. { IDE, IDE, P1, P0 }, /* 111b */
  279. },
  280. };
  281. static const struct piix_map_db ich6_map_db = {
  282. .mask = 0x3,
  283. .port_enable = 0xf,
  284. .present_shift = 4,
  285. .map = {
  286. /* PM PS SM SS MAP */
  287. { P0, P2, P1, P3 }, /* 00b */
  288. { IDE, IDE, P1, P3 }, /* 01b */
  289. { P0, P2, IDE, IDE }, /* 10b */
  290. { RV, RV, RV, RV },
  291. },
  292. };
  293. static const struct piix_map_db ich6m_map_db = {
  294. .mask = 0x3,
  295. .port_enable = 0x5,
  296. .present_shift = 4,
  297. .map = {
  298. /* PM PS SM SS MAP */
  299. { P0, P2, RV, RV }, /* 00b */
  300. { RV, RV, RV, RV },
  301. { P0, P2, IDE, IDE }, /* 10b */
  302. { RV, RV, RV, RV },
  303. },
  304. };
  305. static const struct piix_map_db ich7m_map_db = {
  306. .mask = 0x3,
  307. .port_enable = 0x5,
  308. .present_shift = 4,
  309. /* Map 01b isn't specified in the doc but some notebooks use
  310. * it anyway. ATM, the only case spotted carries subsystem ID
  311. * 1025:0107. This is the only difference from ich6m.
  312. */
  313. .map = {
  314. /* PM PS SM SS MAP */
  315. { P0, P2, RV, RV }, /* 00b */
  316. { IDE, IDE, P1, P3 }, /* 01b */
  317. { P0, P2, IDE, IDE }, /* 10b */
  318. { RV, RV, RV, RV },
  319. },
  320. };
  321. static const struct piix_map_db ich8_map_db = {
  322. .mask = 0x3,
  323. .port_enable = 0x3,
  324. .present_shift = 8,
  325. .map = {
  326. /* PM PS SM SS MAP */
  327. { P0, NA, P1, NA }, /* 00b (hardwired) */
  328. { RV, RV, RV, RV },
  329. { RV, RV, RV, RV }, /* 10b (never) */
  330. { RV, RV, RV, RV },
  331. },
  332. };
  333. static const struct piix_map_db *piix_map_db_table[] = {
  334. [ich5_sata] = &ich5_map_db,
  335. [esb_sata] = &ich5_map_db,
  336. [ich6_sata] = &ich6_map_db,
  337. [ich6_sata_ahci] = &ich6_map_db,
  338. [ich6m_sata_ahci] = &ich6m_map_db,
  339. [ich7m_sata_ahci] = &ich7m_map_db,
  340. [ich8_sata_ahci] = &ich8_map_db,
  341. };
  342. static struct ata_port_info piix_port_info[] = {
  343. /* piix4_pata */
  344. {
  345. .sht = &piix_sht,
  346. .host_flags = ATA_FLAG_SLAVE_POSS,
  347. .pio_mask = 0x1f, /* pio0-4 */
  348. #if 0
  349. .mwdma_mask = 0x06, /* mwdma1-2 */
  350. #else
  351. .mwdma_mask = 0x00, /* mwdma broken */
  352. #endif
  353. .udma_mask = ATA_UDMA_MASK_40C,
  354. .port_ops = &piix_pata_ops,
  355. },
  356. /* ich5_pata */
  357. {
  358. .sht = &piix_sht,
  359. .host_flags = ATA_FLAG_SLAVE_POSS | PIIX_FLAG_CHECKINTR,
  360. .pio_mask = 0x1f, /* pio0-4 */
  361. #if 0
  362. .mwdma_mask = 0x06, /* mwdma1-2 */
  363. #else
  364. .mwdma_mask = 0x00, /* mwdma broken */
  365. #endif
  366. .udma_mask = 0x3f, /* udma0-5 */
  367. .port_ops = &piix_pata_ops,
  368. },
  369. /* ich5_sata */
  370. {
  371. .sht = &piix_sht,
  372. .host_flags = ATA_FLAG_SATA | PIIX_FLAG_CHECKINTR |
  373. PIIX_FLAG_IGNORE_PCS,
  374. .pio_mask = 0x1f, /* pio0-4 */
  375. .mwdma_mask = 0x07, /* mwdma0-2 */
  376. .udma_mask = 0x7f, /* udma0-6 */
  377. .port_ops = &piix_sata_ops,
  378. },
  379. /* i6300esb_sata */
  380. {
  381. .sht = &piix_sht,
  382. .host_flags = ATA_FLAG_SATA |
  383. PIIX_FLAG_CHECKINTR | PIIX_FLAG_IGNORE_PCS,
  384. .pio_mask = 0x1f, /* pio0-4 */
  385. .mwdma_mask = 0x07, /* mwdma0-2 */
  386. .udma_mask = 0x7f, /* udma0-6 */
  387. .port_ops = &piix_sata_ops,
  388. },
  389. /* ich6_sata */
  390. {
  391. .sht = &piix_sht,
  392. .host_flags = ATA_FLAG_SATA |
  393. PIIX_FLAG_CHECKINTR | PIIX_FLAG_SCR,
  394. .pio_mask = 0x1f, /* pio0-4 */
  395. .mwdma_mask = 0x07, /* mwdma0-2 */
  396. .udma_mask = 0x7f, /* udma0-6 */
  397. .port_ops = &piix_sata_ops,
  398. },
  399. /* ich6_sata_ahci */
  400. {
  401. .sht = &piix_sht,
  402. .host_flags = ATA_FLAG_SATA |
  403. PIIX_FLAG_CHECKINTR | PIIX_FLAG_SCR |
  404. PIIX_FLAG_AHCI,
  405. .pio_mask = 0x1f, /* pio0-4 */
  406. .mwdma_mask = 0x07, /* mwdma0-2 */
  407. .udma_mask = 0x7f, /* udma0-6 */
  408. .port_ops = &piix_sata_ops,
  409. },
  410. /* ich6m_sata_ahci */
  411. {
  412. .sht = &piix_sht,
  413. .host_flags = ATA_FLAG_SATA |
  414. PIIX_FLAG_CHECKINTR | PIIX_FLAG_SCR |
  415. PIIX_FLAG_AHCI,
  416. .pio_mask = 0x1f, /* pio0-4 */
  417. .mwdma_mask = 0x07, /* mwdma0-2 */
  418. .udma_mask = 0x7f, /* udma0-6 */
  419. .port_ops = &piix_sata_ops,
  420. },
  421. /* ich7m_sata_ahci */
  422. {
  423. .sht = &piix_sht,
  424. .host_flags = ATA_FLAG_SATA |
  425. PIIX_FLAG_CHECKINTR | PIIX_FLAG_SCR |
  426. PIIX_FLAG_AHCI,
  427. .pio_mask = 0x1f, /* pio0-4 */
  428. .mwdma_mask = 0x07, /* mwdma0-2 */
  429. .udma_mask = 0x7f, /* udma0-6 */
  430. .port_ops = &piix_sata_ops,
  431. },
  432. /* ich8_sata_ahci */
  433. {
  434. .sht = &piix_sht,
  435. .host_flags = ATA_FLAG_SATA |
  436. PIIX_FLAG_CHECKINTR | PIIX_FLAG_SCR |
  437. PIIX_FLAG_AHCI,
  438. .pio_mask = 0x1f, /* pio0-4 */
  439. .mwdma_mask = 0x07, /* mwdma0-2 */
  440. .udma_mask = 0x7f, /* udma0-6 */
  441. .port_ops = &piix_sata_ops,
  442. },
  443. };
  444. static struct pci_bits piix_enable_bits[] = {
  445. { 0x41U, 1U, 0x80UL, 0x80UL }, /* port 0 */
  446. { 0x43U, 1U, 0x80UL, 0x80UL }, /* port 1 */
  447. };
  448. MODULE_AUTHOR("Andre Hedrick, Alan Cox, Andrzej Krzysztofowicz, Jeff Garzik");
  449. MODULE_DESCRIPTION("SCSI low-level driver for Intel PIIX/ICH ATA controllers");
  450. MODULE_LICENSE("GPL");
  451. MODULE_DEVICE_TABLE(pci, piix_pci_tbl);
  452. MODULE_VERSION(DRV_VERSION);
  453. static int force_pcs = 0;
  454. module_param(force_pcs, int, 0444);
  455. MODULE_PARM_DESC(force_pcs, "force honoring or ignoring PCS to work around "
  456. "device mis-detection (0=default, 1=ignore PCS, 2=honor PCS)");
  457. /**
  458. * piix_pata_cbl_detect - Probe host controller cable detect info
  459. * @ap: Port for which cable detect info is desired
  460. *
  461. * Read 80c cable indicator from ATA PCI device's PCI config
  462. * register. This register is normally set by firmware (BIOS).
  463. *
  464. * LOCKING:
  465. * None (inherited from caller).
  466. */
  467. static void piix_pata_cbl_detect(struct ata_port *ap)
  468. {
  469. struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
  470. u8 tmp, mask;
  471. /* no 80c support in host controller? */
  472. if ((ap->udma_mask & ~ATA_UDMA_MASK_40C) == 0)
  473. goto cbl40;
  474. /* check BIOS cable detect results */
  475. mask = ap->hard_port_no == 0 ? PIIX_80C_PRI : PIIX_80C_SEC;
  476. pci_read_config_byte(pdev, PIIX_IOCFG, &tmp);
  477. if ((tmp & mask) == 0)
  478. goto cbl40;
  479. ap->cbl = ATA_CBL_PATA80;
  480. return;
  481. cbl40:
  482. ap->cbl = ATA_CBL_PATA40;
  483. ap->udma_mask &= ATA_UDMA_MASK_40C;
  484. }
  485. /**
  486. * piix_pata_prereset - prereset for PATA host controller
  487. * @ap: Target port
  488. *
  489. * Prereset including cable detection.
  490. *
  491. * LOCKING:
  492. * None (inherited from caller).
  493. */
  494. static int piix_pata_prereset(struct ata_port *ap)
  495. {
  496. struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
  497. if (!pci_test_config_bits(pdev, &piix_enable_bits[ap->hard_port_no])) {
  498. ata_port_printk(ap, KERN_INFO, "port disabled. ignoring.\n");
  499. ap->eh_context.i.action &= ~ATA_EH_RESET_MASK;
  500. return 0;
  501. }
  502. piix_pata_cbl_detect(ap);
  503. return ata_std_prereset(ap);
  504. }
  505. static void piix_pata_error_handler(struct ata_port *ap)
  506. {
  507. ata_bmdma_drive_eh(ap, piix_pata_prereset, ata_std_softreset, NULL,
  508. ata_std_postreset);
  509. }
  510. /**
  511. * piix_sata_present_mask - determine present mask for SATA host controller
  512. * @ap: Target port
  513. *
  514. * Reads SATA PCI device's PCI config register Port Configuration
  515. * and Status (PCS) to determine port and device availability.
  516. *
  517. * LOCKING:
  518. * None (inherited from caller).
  519. *
  520. * RETURNS:
  521. * determined present_mask
  522. */
  523. static unsigned int piix_sata_present_mask(struct ata_port *ap)
  524. {
  525. struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
  526. struct piix_host_priv *hpriv = ap->host_set->private_data;
  527. const unsigned int *map = hpriv->map;
  528. int base = 2 * ap->hard_port_no;
  529. unsigned int present_mask = 0;
  530. int port, i;
  531. u16 pcs;
  532. pci_read_config_word(pdev, ICH5_PCS, &pcs);
  533. DPRINTK("ata%u: ENTER, pcs=0x%x base=%d\n", ap->id, pcs, base);
  534. for (i = 0; i < 2; i++) {
  535. port = map[base + i];
  536. if (port < 0)
  537. continue;
  538. if ((ap->flags & PIIX_FLAG_IGNORE_PCS) ||
  539. (pcs & 1 << (hpriv->map_db->present_shift + port)))
  540. present_mask |= 1 << i;
  541. }
  542. DPRINTK("ata%u: LEAVE, pcs=0x%x present_mask=0x%x\n",
  543. ap->id, pcs, present_mask);
  544. return present_mask;
  545. }
  546. /**
  547. * piix_sata_softreset - reset SATA host port via ATA SRST
  548. * @ap: port to reset
  549. * @classes: resulting classes of attached devices
  550. *
  551. * Reset SATA host port via ATA SRST. On controllers with
  552. * reliable PCS present bits, the bits are used to determine
  553. * device presence.
  554. *
  555. * LOCKING:
  556. * Kernel thread context (may sleep)
  557. *
  558. * RETURNS:
  559. * 0 on success, -errno otherwise.
  560. */
  561. static int piix_sata_softreset(struct ata_port *ap, unsigned int *classes)
  562. {
  563. unsigned int present_mask;
  564. int i, rc;
  565. present_mask = piix_sata_present_mask(ap);
  566. rc = ata_std_softreset(ap, classes);
  567. if (rc)
  568. return rc;
  569. for (i = 0; i < ATA_MAX_DEVICES; i++) {
  570. if (!(present_mask & (1 << i)))
  571. classes[i] = ATA_DEV_NONE;
  572. }
  573. return 0;
  574. }
  575. static void piix_sata_error_handler(struct ata_port *ap)
  576. {
  577. ata_bmdma_drive_eh(ap, ata_std_prereset, piix_sata_softreset, NULL,
  578. ata_std_postreset);
  579. }
  580. /**
  581. * piix_set_piomode - Initialize host controller PATA PIO timings
  582. * @ap: Port whose timings we are configuring
  583. * @adev: um
  584. *
  585. * Set PIO mode for device, in host controller PCI config space.
  586. *
  587. * LOCKING:
  588. * None (inherited from caller).
  589. */
  590. static void piix_set_piomode (struct ata_port *ap, struct ata_device *adev)
  591. {
  592. unsigned int pio = adev->pio_mode - XFER_PIO_0;
  593. struct pci_dev *dev = to_pci_dev(ap->host_set->dev);
  594. unsigned int is_slave = (adev->devno != 0);
  595. unsigned int master_port= ap->hard_port_no ? 0x42 : 0x40;
  596. unsigned int slave_port = 0x44;
  597. u16 master_data;
  598. u8 slave_data;
  599. static const /* ISP RTC */
  600. u8 timings[][2] = { { 0, 0 },
  601. { 0, 0 },
  602. { 1, 0 },
  603. { 2, 1 },
  604. { 2, 3 }, };
  605. pci_read_config_word(dev, master_port, &master_data);
  606. if (is_slave) {
  607. master_data |= 0x4000;
  608. /* enable PPE, IE and TIME */
  609. master_data |= 0x0070;
  610. pci_read_config_byte(dev, slave_port, &slave_data);
  611. slave_data &= (ap->hard_port_no ? 0x0f : 0xf0);
  612. slave_data |=
  613. (timings[pio][0] << 2) |
  614. (timings[pio][1] << (ap->hard_port_no ? 4 : 0));
  615. } else {
  616. master_data &= 0xccf8;
  617. /* enable PPE, IE and TIME */
  618. master_data |= 0x0007;
  619. master_data |=
  620. (timings[pio][0] << 12) |
  621. (timings[pio][1] << 8);
  622. }
  623. pci_write_config_word(dev, master_port, master_data);
  624. if (is_slave)
  625. pci_write_config_byte(dev, slave_port, slave_data);
  626. }
  627. /**
  628. * piix_set_dmamode - Initialize host controller PATA PIO timings
  629. * @ap: Port whose timings we are configuring
  630. * @adev: um
  631. * @udma: udma mode, 0 - 6
  632. *
  633. * Set UDMA mode for device, in host controller PCI config space.
  634. *
  635. * LOCKING:
  636. * None (inherited from caller).
  637. */
  638. static void piix_set_dmamode (struct ata_port *ap, struct ata_device *adev)
  639. {
  640. unsigned int udma = adev->dma_mode; /* FIXME: MWDMA too */
  641. struct pci_dev *dev = to_pci_dev(ap->host_set->dev);
  642. u8 maslave = ap->hard_port_no ? 0x42 : 0x40;
  643. u8 speed = udma;
  644. unsigned int drive_dn = (ap->hard_port_no ? 2 : 0) + adev->devno;
  645. int a_speed = 3 << (drive_dn * 4);
  646. int u_flag = 1 << drive_dn;
  647. int v_flag = 0x01 << drive_dn;
  648. int w_flag = 0x10 << drive_dn;
  649. int u_speed = 0;
  650. int sitre;
  651. u16 reg4042, reg4a;
  652. u8 reg48, reg54, reg55;
  653. pci_read_config_word(dev, maslave, &reg4042);
  654. DPRINTK("reg4042 = 0x%04x\n", reg4042);
  655. sitre = (reg4042 & 0x4000) ? 1 : 0;
  656. pci_read_config_byte(dev, 0x48, &reg48);
  657. pci_read_config_word(dev, 0x4a, &reg4a);
  658. pci_read_config_byte(dev, 0x54, &reg54);
  659. pci_read_config_byte(dev, 0x55, &reg55);
  660. switch(speed) {
  661. case XFER_UDMA_4:
  662. case XFER_UDMA_2: u_speed = 2 << (drive_dn * 4); break;
  663. case XFER_UDMA_6:
  664. case XFER_UDMA_5:
  665. case XFER_UDMA_3:
  666. case XFER_UDMA_1: u_speed = 1 << (drive_dn * 4); break;
  667. case XFER_UDMA_0: u_speed = 0 << (drive_dn * 4); break;
  668. case XFER_MW_DMA_2:
  669. case XFER_MW_DMA_1: break;
  670. default:
  671. BUG();
  672. return;
  673. }
  674. if (speed >= XFER_UDMA_0) {
  675. if (!(reg48 & u_flag))
  676. pci_write_config_byte(dev, 0x48, reg48 | u_flag);
  677. if (speed == XFER_UDMA_5) {
  678. pci_write_config_byte(dev, 0x55, (u8) reg55|w_flag);
  679. } else {
  680. pci_write_config_byte(dev, 0x55, (u8) reg55 & ~w_flag);
  681. }
  682. if ((reg4a & a_speed) != u_speed)
  683. pci_write_config_word(dev, 0x4a, (reg4a & ~a_speed) | u_speed);
  684. if (speed > XFER_UDMA_2) {
  685. if (!(reg54 & v_flag))
  686. pci_write_config_byte(dev, 0x54, reg54 | v_flag);
  687. } else
  688. pci_write_config_byte(dev, 0x54, reg54 & ~v_flag);
  689. } else {
  690. if (reg48 & u_flag)
  691. pci_write_config_byte(dev, 0x48, reg48 & ~u_flag);
  692. if (reg4a & a_speed)
  693. pci_write_config_word(dev, 0x4a, reg4a & ~a_speed);
  694. if (reg54 & v_flag)
  695. pci_write_config_byte(dev, 0x54, reg54 & ~v_flag);
  696. if (reg55 & w_flag)
  697. pci_write_config_byte(dev, 0x55, (u8) reg55 & ~w_flag);
  698. }
  699. }
  700. #define AHCI_PCI_BAR 5
  701. #define AHCI_GLOBAL_CTL 0x04
  702. #define AHCI_ENABLE (1 << 31)
  703. static int piix_disable_ahci(struct pci_dev *pdev)
  704. {
  705. void __iomem *mmio;
  706. u32 tmp;
  707. int rc = 0;
  708. /* BUG: pci_enable_device has not yet been called. This
  709. * works because this device is usually set up by BIOS.
  710. */
  711. if (!pci_resource_start(pdev, AHCI_PCI_BAR) ||
  712. !pci_resource_len(pdev, AHCI_PCI_BAR))
  713. return 0;
  714. mmio = pci_iomap(pdev, AHCI_PCI_BAR, 64);
  715. if (!mmio)
  716. return -ENOMEM;
  717. tmp = readl(mmio + AHCI_GLOBAL_CTL);
  718. if (tmp & AHCI_ENABLE) {
  719. tmp &= ~AHCI_ENABLE;
  720. writel(tmp, mmio + AHCI_GLOBAL_CTL);
  721. tmp = readl(mmio + AHCI_GLOBAL_CTL);
  722. if (tmp & AHCI_ENABLE)
  723. rc = -EIO;
  724. }
  725. pci_iounmap(pdev, mmio);
  726. return rc;
  727. }
  728. /**
  729. * piix_check_450nx_errata - Check for problem 450NX setup
  730. * @ata_dev: the PCI device to check
  731. *
  732. * Check for the present of 450NX errata #19 and errata #25. If
  733. * they are found return an error code so we can turn off DMA
  734. */
  735. static int __devinit piix_check_450nx_errata(struct pci_dev *ata_dev)
  736. {
  737. struct pci_dev *pdev = NULL;
  738. u16 cfg;
  739. u8 rev;
  740. int no_piix_dma = 0;
  741. while((pdev = pci_get_device(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82454NX, pdev)) != NULL)
  742. {
  743. /* Look for 450NX PXB. Check for problem configurations
  744. A PCI quirk checks bit 6 already */
  745. pci_read_config_byte(pdev, PCI_REVISION_ID, &rev);
  746. pci_read_config_word(pdev, 0x41, &cfg);
  747. /* Only on the original revision: IDE DMA can hang */
  748. if (rev == 0x00)
  749. no_piix_dma = 1;
  750. /* On all revisions below 5 PXB bus lock must be disabled for IDE */
  751. else if (cfg & (1<<14) && rev < 5)
  752. no_piix_dma = 2;
  753. }
  754. if (no_piix_dma)
  755. dev_printk(KERN_WARNING, &ata_dev->dev, "450NX errata present, disabling IDE DMA.\n");
  756. if (no_piix_dma == 2)
  757. dev_printk(KERN_WARNING, &ata_dev->dev, "A BIOS update may resolve this.\n");
  758. return no_piix_dma;
  759. }
  760. static void __devinit piix_init_pcs(struct pci_dev *pdev,
  761. struct ata_port_info *pinfo,
  762. const struct piix_map_db *map_db)
  763. {
  764. u16 pcs, new_pcs;
  765. pci_read_config_word(pdev, ICH5_PCS, &pcs);
  766. new_pcs = pcs | map_db->port_enable;
  767. if (new_pcs != pcs) {
  768. DPRINTK("updating PCS from 0x%x to 0x%x\n", pcs, new_pcs);
  769. pci_write_config_word(pdev, ICH5_PCS, new_pcs);
  770. msleep(150);
  771. }
  772. if (force_pcs == 1) {
  773. dev_printk(KERN_INFO, &pdev->dev,
  774. "force ignoring PCS (0x%x)\n", new_pcs);
  775. pinfo[0].host_flags |= PIIX_FLAG_IGNORE_PCS;
  776. pinfo[1].host_flags |= PIIX_FLAG_IGNORE_PCS;
  777. } else if (force_pcs == 2) {
  778. dev_printk(KERN_INFO, &pdev->dev,
  779. "force honoring PCS (0x%x)\n", new_pcs);
  780. pinfo[0].host_flags &= ~PIIX_FLAG_IGNORE_PCS;
  781. pinfo[1].host_flags &= ~PIIX_FLAG_IGNORE_PCS;
  782. }
  783. }
  784. static void __devinit piix_init_sata_map(struct pci_dev *pdev,
  785. struct ata_port_info *pinfo,
  786. const struct piix_map_db *map_db)
  787. {
  788. struct piix_host_priv *hpriv = pinfo[0].private_data;
  789. const unsigned int *map;
  790. int i, invalid_map = 0;
  791. u8 map_value;
  792. pci_read_config_byte(pdev, ICH5_PMR, &map_value);
  793. map = map_db->map[map_value & map_db->mask];
  794. dev_printk(KERN_INFO, &pdev->dev, "MAP [");
  795. for (i = 0; i < 4; i++) {
  796. switch (map[i]) {
  797. case RV:
  798. invalid_map = 1;
  799. printk(" XX");
  800. break;
  801. case NA:
  802. printk(" --");
  803. break;
  804. case IDE:
  805. WARN_ON((i & 1) || map[i + 1] != IDE);
  806. pinfo[i / 2] = piix_port_info[ich5_pata];
  807. pinfo[i / 2].private_data = hpriv;
  808. i++;
  809. printk(" IDE IDE");
  810. break;
  811. default:
  812. printk(" P%d", map[i]);
  813. if (i & 1)
  814. pinfo[i / 2].host_flags |= ATA_FLAG_SLAVE_POSS;
  815. break;
  816. }
  817. }
  818. printk(" ]\n");
  819. if (invalid_map)
  820. dev_printk(KERN_ERR, &pdev->dev,
  821. "invalid MAP value %u\n", map_value);
  822. hpriv->map = map;
  823. hpriv->map_db = map_db;
  824. }
  825. /**
  826. * piix_init_one - Register PIIX ATA PCI device with kernel services
  827. * @pdev: PCI device to register
  828. * @ent: Entry in piix_pci_tbl matching with @pdev
  829. *
  830. * Called from kernel PCI layer. We probe for combined mode (sigh),
  831. * and then hand over control to libata, for it to do the rest.
  832. *
  833. * LOCKING:
  834. * Inherited from PCI layer (may sleep).
  835. *
  836. * RETURNS:
  837. * Zero on success, or -ERRNO value.
  838. */
  839. static int piix_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
  840. {
  841. static int printed_version;
  842. struct ata_port_info port_info[2];
  843. struct ata_port_info *ppinfo[2] = { &port_info[0], &port_info[1] };
  844. struct piix_host_priv *hpriv;
  845. unsigned long host_flags;
  846. if (!printed_version++)
  847. dev_printk(KERN_DEBUG, &pdev->dev,
  848. "version " DRV_VERSION "\n");
  849. /* no hotplugging support (FIXME) */
  850. if (!in_module_init)
  851. return -ENODEV;
  852. hpriv = kzalloc(sizeof(*hpriv), GFP_KERNEL);
  853. if (!hpriv)
  854. return -ENOMEM;
  855. port_info[0] = piix_port_info[ent->driver_data];
  856. port_info[1] = piix_port_info[ent->driver_data];
  857. port_info[0].private_data = hpriv;
  858. port_info[1].private_data = hpriv;
  859. host_flags = port_info[0].host_flags;
  860. if (host_flags & PIIX_FLAG_AHCI) {
  861. u8 tmp;
  862. pci_read_config_byte(pdev, PIIX_SCC, &tmp);
  863. if (tmp == PIIX_AHCI_DEVICE) {
  864. int rc = piix_disable_ahci(pdev);
  865. if (rc)
  866. return rc;
  867. }
  868. }
  869. /* Initialize SATA map */
  870. if (host_flags & ATA_FLAG_SATA) {
  871. piix_init_sata_map(pdev, port_info,
  872. piix_map_db_table[ent->driver_data]);
  873. piix_init_pcs(pdev, port_info,
  874. piix_map_db_table[ent->driver_data]);
  875. }
  876. /* On ICH5, some BIOSen disable the interrupt using the
  877. * PCI_COMMAND_INTX_DISABLE bit added in PCI 2.3.
  878. * On ICH6, this bit has the same effect, but only when
  879. * MSI is disabled (and it is disabled, as we don't use
  880. * message-signalled interrupts currently).
  881. */
  882. if (host_flags & PIIX_FLAG_CHECKINTR)
  883. pci_intx(pdev, 1);
  884. if (piix_check_450nx_errata(pdev)) {
  885. /* This writes into the master table but it does not
  886. really matter for this errata as we will apply it to
  887. all the PIIX devices on the board */
  888. port_info[0].mwdma_mask = 0;
  889. port_info[0].udma_mask = 0;
  890. port_info[1].mwdma_mask = 0;
  891. port_info[1].udma_mask = 0;
  892. }
  893. return ata_pci_init_one(pdev, ppinfo, 2);
  894. }
  895. static void piix_host_stop(struct ata_host_set *host_set)
  896. {
  897. if (host_set->next == NULL)
  898. kfree(host_set->private_data);
  899. ata_host_stop(host_set);
  900. }
  901. static int __init piix_init(void)
  902. {
  903. int rc;
  904. DPRINTK("pci_module_init\n");
  905. rc = pci_module_init(&piix_pci_driver);
  906. if (rc)
  907. return rc;
  908. in_module_init = 0;
  909. DPRINTK("done\n");
  910. return 0;
  911. }
  912. static void __exit piix_exit(void)
  913. {
  914. pci_unregister_driver(&piix_pci_driver);
  915. }
  916. module_init(piix_init);
  917. module_exit(piix_exit);