fixup.c 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386
  1. /*
  2. * Exceptions for specific devices. Usually work-arounds for fatal design flaws.
  3. */
  4. #include <linux/pci.h>
  5. #include <linux/init.h>
  6. #include "pci.h"
  7. static void __devinit pci_fixup_i450nx(struct pci_dev *d)
  8. {
  9. /*
  10. * i450NX -- Find and scan all secondary buses on all PXB's.
  11. */
  12. int pxb, reg;
  13. u8 busno, suba, subb;
  14. printk(KERN_WARNING "PCI: Searching for i450NX host bridges on %s\n", pci_name(d));
  15. reg = 0xd0;
  16. for(pxb=0; pxb<2; pxb++) {
  17. pci_read_config_byte(d, reg++, &busno);
  18. pci_read_config_byte(d, reg++, &suba);
  19. pci_read_config_byte(d, reg++, &subb);
  20. DBG("i450NX PXB %d: %02x/%02x/%02x\n", pxb, busno, suba, subb);
  21. if (busno)
  22. pci_scan_bus(busno, &pci_root_ops, NULL); /* Bus A */
  23. if (suba < subb)
  24. pci_scan_bus(suba+1, &pci_root_ops, NULL); /* Bus B */
  25. }
  26. pcibios_last_bus = -1;
  27. }
  28. DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82451NX, pci_fixup_i450nx);
  29. static void __devinit pci_fixup_i450gx(struct pci_dev *d)
  30. {
  31. /*
  32. * i450GX and i450KX -- Find and scan all secondary buses.
  33. * (called separately for each PCI bridge found)
  34. */
  35. u8 busno;
  36. pci_read_config_byte(d, 0x4a, &busno);
  37. printk(KERN_INFO "PCI: i440KX/GX host bridge %s: secondary bus %02x\n", pci_name(d), busno);
  38. pci_scan_bus(busno, &pci_root_ops, NULL);
  39. pcibios_last_bus = -1;
  40. }
  41. DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82454GX, pci_fixup_i450gx);
  42. static void __devinit pci_fixup_umc_ide(struct pci_dev *d)
  43. {
  44. /*
  45. * UM8886BF IDE controller sets region type bits incorrectly,
  46. * therefore they look like memory despite of them being I/O.
  47. */
  48. int i;
  49. printk(KERN_WARNING "PCI: Fixing base address flags for device %s\n", pci_name(d));
  50. for(i=0; i<4; i++)
  51. d->resource[i].flags |= PCI_BASE_ADDRESS_SPACE_IO;
  52. }
  53. DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_UMC, PCI_DEVICE_ID_UMC_UM8886BF, pci_fixup_umc_ide);
  54. static void __devinit pci_fixup_ncr53c810(struct pci_dev *d)
  55. {
  56. /*
  57. * NCR 53C810 returns class code 0 (at least on some systems).
  58. * Fix class to be PCI_CLASS_STORAGE_SCSI
  59. */
  60. if (!d->class) {
  61. printk(KERN_WARNING "PCI: fixing NCR 53C810 class code for %s\n", pci_name(d));
  62. d->class = PCI_CLASS_STORAGE_SCSI << 8;
  63. }
  64. }
  65. DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_NCR, PCI_DEVICE_ID_NCR_53C810, pci_fixup_ncr53c810);
  66. static void __devinit pci_fixup_ide_bases(struct pci_dev *d)
  67. {
  68. int i;
  69. /*
  70. * PCI IDE controllers use non-standard I/O port decoding, respect it.
  71. */
  72. if ((d->class >> 8) != PCI_CLASS_STORAGE_IDE)
  73. return;
  74. DBG("PCI: IDE base address fixup for %s\n", pci_name(d));
  75. for(i=0; i<4; i++) {
  76. struct resource *r = &d->resource[i];
  77. if ((r->start & ~0x80) == 0x374) {
  78. r->start |= 2;
  79. r->end = r->start;
  80. }
  81. }
  82. }
  83. DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, pci_fixup_ide_bases);
  84. static void __devinit pci_fixup_ide_trash(struct pci_dev *d)
  85. {
  86. int i;
  87. /*
  88. * Runs the fixup only for the first IDE controller
  89. * (Shai Fultheim - shai@ftcon.com)
  90. */
  91. static int called = 0;
  92. if (called)
  93. return;
  94. called = 1;
  95. /*
  96. * There exist PCI IDE controllers which have utter garbage
  97. * in first four base registers. Ignore that.
  98. */
  99. DBG("PCI: IDE base address trash cleared for %s\n", pci_name(d));
  100. for(i=0; i<4; i++)
  101. d->resource[i].start = d->resource[i].end = d->resource[i].flags = 0;
  102. }
  103. DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_5513, pci_fixup_ide_trash);
  104. DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_10, pci_fixup_ide_trash);
  105. DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_11, pci_fixup_ide_trash);
  106. DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_9, pci_fixup_ide_trash);
  107. static void __devinit pci_fixup_latency(struct pci_dev *d)
  108. {
  109. /*
  110. * SiS 5597 and 5598 chipsets require latency timer set to
  111. * at most 32 to avoid lockups.
  112. */
  113. DBG("PCI: Setting max latency to 32\n");
  114. pcibios_max_latency = 32;
  115. }
  116. DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_5597, pci_fixup_latency);
  117. DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_5598, pci_fixup_latency);
  118. static void __devinit pci_fixup_piix4_acpi(struct pci_dev *d)
  119. {
  120. /*
  121. * PIIX4 ACPI device: hardwired IRQ9
  122. */
  123. d->irq = 9;
  124. }
  125. DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371AB_3, pci_fixup_piix4_acpi);
  126. /*
  127. * Addresses issues with problems in the memory write queue timer in
  128. * certain VIA Northbridges. This bugfix is per VIA's specifications,
  129. * except for the KL133/KM133: clearing bit 5 on those Northbridges seems
  130. * to trigger a bug in its integrated ProSavage video card, which
  131. * causes screen corruption. We only clear bits 6 and 7 for that chipset,
  132. * until VIA can provide us with definitive information on why screen
  133. * corruption occurs, and what exactly those bits do.
  134. *
  135. * VIA 8363,8622,8361 Northbridges:
  136. * - bits 5, 6, 7 at offset 0x55 need to be turned off
  137. * VIA 8367 (KT266x) Northbridges:
  138. * - bits 5, 6, 7 at offset 0x95 need to be turned off
  139. * VIA 8363 rev 0x81/0x84 (KL133/KM133) Northbridges:
  140. * - bits 6, 7 at offset 0x55 need to be turned off
  141. */
  142. #define VIA_8363_KL133_REVISION_ID 0x81
  143. #define VIA_8363_KM133_REVISION_ID 0x84
  144. static void __devinit pci_fixup_via_northbridge_bug(struct pci_dev *d)
  145. {
  146. u8 v;
  147. u8 revision;
  148. int where = 0x55;
  149. int mask = 0x1f; /* clear bits 5, 6, 7 by default */
  150. pci_read_config_byte(d, PCI_REVISION_ID, &revision);
  151. if (d->device == PCI_DEVICE_ID_VIA_8367_0) {
  152. /* fix pci bus latency issues resulted by NB bios error
  153. it appears on bug free^Wreduced kt266x's bios forces
  154. NB latency to zero */
  155. pci_write_config_byte(d, PCI_LATENCY_TIMER, 0);
  156. where = 0x95; /* the memory write queue timer register is
  157. different for the KT266x's: 0x95 not 0x55 */
  158. } else if (d->device == PCI_DEVICE_ID_VIA_8363_0 &&
  159. (revision == VIA_8363_KL133_REVISION_ID ||
  160. revision == VIA_8363_KM133_REVISION_ID)) {
  161. mask = 0x3f; /* clear only bits 6 and 7; clearing bit 5
  162. causes screen corruption on the KL133/KM133 */
  163. }
  164. pci_read_config_byte(d, where, &v);
  165. if (v & ~mask) {
  166. printk(KERN_WARNING "Disabling VIA memory write queue (PCI ID %04x, rev %02x): [%02x] %02x & %02x -> %02x\n", \
  167. d->device, revision, where, v, mask, v & mask);
  168. v &= mask;
  169. pci_write_config_byte(d, where, v);
  170. }
  171. }
  172. DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8363_0, pci_fixup_via_northbridge_bug);
  173. DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8622, pci_fixup_via_northbridge_bug);
  174. DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8361, pci_fixup_via_northbridge_bug);
  175. DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8367_0, pci_fixup_via_northbridge_bug);
  176. /*
  177. * For some reasons Intel decided that certain parts of their
  178. * 815, 845 and some other chipsets must look like PCI-to-PCI bridges
  179. * while they are obviously not. The 82801 family (AA, AB, BAM/CAM,
  180. * BA/CA/DB and E) PCI bridges are actually HUB-to-PCI ones, according
  181. * to Intel terminology. These devices do forward all addresses from
  182. * system to PCI bus no matter what are their window settings, so they are
  183. * "transparent" (or subtractive decoding) from programmers point of view.
  184. */
  185. static void __devinit pci_fixup_transparent_bridge(struct pci_dev *dev)
  186. {
  187. if ((dev->class >> 8) == PCI_CLASS_BRIDGE_PCI &&
  188. (dev->device & 0xff00) == 0x2400)
  189. dev->transparent = 1;
  190. }
  191. DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_ANY_ID, pci_fixup_transparent_bridge);
  192. /*
  193. * Fixup for C1 Halt Disconnect problem on nForce2 systems.
  194. *
  195. * From information provided by "Allen Martin" <AMartin@nvidia.com>:
  196. *
  197. * A hang is caused when the CPU generates a very fast CONNECT/HALT cycle
  198. * sequence. Workaround is to set the SYSTEM_IDLE_TIMEOUT to 80 ns.
  199. * This allows the state-machine and timer to return to a proper state within
  200. * 80 ns of the CONNECT and probe appearing together. Since the CPU will not
  201. * issue another HALT within 80 ns of the initial HALT, the failure condition
  202. * is avoided.
  203. */
  204. static void __init pci_fixup_nforce2(struct pci_dev *dev)
  205. {
  206. u32 val;
  207. /*
  208. * Chip Old value New value
  209. * C17 0x1F0FFF01 0x1F01FF01
  210. * C18D 0x9F0FFF01 0x9F01FF01
  211. *
  212. * Northbridge chip version may be determined by
  213. * reading the PCI revision ID (0xC1 or greater is C18D).
  214. */
  215. pci_read_config_dword(dev, 0x6c, &val);
  216. /*
  217. * Apply fixup if needed, but don't touch disconnect state
  218. */
  219. if ((val & 0x00FF0000) != 0x00010000) {
  220. printk(KERN_WARNING "PCI: nForce2 C1 Halt Disconnect fixup\n");
  221. pci_write_config_dword(dev, 0x6c, (val & 0xFF00FFFF) | 0x00010000);
  222. }
  223. }
  224. DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE2, pci_fixup_nforce2);
  225. /* Max PCI Express root ports */
  226. #define MAX_PCIEROOT 6
  227. static int quirk_aspm_offset[MAX_PCIEROOT << 3];
  228. #define GET_INDEX(a, b) ((((a) - PCI_DEVICE_ID_INTEL_MCH_PA) << 3) + ((b) & 7))
  229. static int quirk_pcie_aspm_read(struct pci_bus *bus, unsigned int devfn, int where, int size, u32 *value)
  230. {
  231. return raw_pci_ops->read(0, bus->number, devfn, where, size, value);
  232. }
  233. /*
  234. * Replace the original pci bus ops for write with a new one that will filter
  235. * the request to insure ASPM cannot be enabled.
  236. */
  237. static int quirk_pcie_aspm_write(struct pci_bus *bus, unsigned int devfn, int where, int size, u32 value)
  238. {
  239. u8 offset;
  240. offset = quirk_aspm_offset[GET_INDEX(bus->self->device, devfn)];
  241. if ((offset) && (where == offset))
  242. value = value & 0xfffffffc;
  243. return raw_pci_ops->write(0, bus->number, devfn, where, size, value);
  244. }
  245. static struct pci_ops quirk_pcie_aspm_ops = {
  246. .read = quirk_pcie_aspm_read,
  247. .write = quirk_pcie_aspm_write,
  248. };
  249. /*
  250. * Prevents PCI Express ASPM (Active State Power Management) being enabled.
  251. *
  252. * Save the register offset, where the ASPM control bits are located,
  253. * for each PCI Express device that is in the device list of
  254. * the root port in an array for fast indexing. Replace the bus ops
  255. * with the modified one.
  256. */
  257. static void pcie_rootport_aspm_quirk(struct pci_dev *pdev)
  258. {
  259. int cap_base, i;
  260. struct pci_bus *pbus;
  261. struct pci_dev *dev;
  262. if ((pbus = pdev->subordinate) == NULL)
  263. return;
  264. /*
  265. * Check if the DID of pdev matches one of the six root ports. This
  266. * check is needed in the case this function is called directly by the
  267. * hot-plug driver.
  268. */
  269. if ((pdev->device < PCI_DEVICE_ID_INTEL_MCH_PA) ||
  270. (pdev->device > PCI_DEVICE_ID_INTEL_MCH_PC1))
  271. return;
  272. if (list_empty(&pbus->devices)) {
  273. /*
  274. * If no device is attached to the root port at power-up or
  275. * after hot-remove, the pbus->devices is empty and this code
  276. * will set the offsets to zero and the bus ops to parent's bus
  277. * ops, which is unmodified.
  278. */
  279. for (i= GET_INDEX(pdev->device, 0); i <= GET_INDEX(pdev->device, 7); ++i)
  280. quirk_aspm_offset[i] = 0;
  281. pbus->ops = pbus->parent->ops;
  282. } else {
  283. /*
  284. * If devices are attached to the root port at power-up or
  285. * after hot-add, the code loops through the device list of
  286. * each root port to save the register offsets and replace the
  287. * bus ops.
  288. */
  289. list_for_each_entry(dev, &pbus->devices, bus_list) {
  290. /* There are 0 to 8 devices attached to this bus */
  291. cap_base = pci_find_capability(dev, PCI_CAP_ID_EXP);
  292. quirk_aspm_offset[GET_INDEX(pdev->device, dev->devfn)]= cap_base + 0x10;
  293. }
  294. pbus->ops = &quirk_pcie_aspm_ops;
  295. }
  296. }
  297. DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_MCH_PA, pcie_rootport_aspm_quirk );
  298. DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_MCH_PA1, pcie_rootport_aspm_quirk );
  299. DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_MCH_PB, pcie_rootport_aspm_quirk );
  300. DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_MCH_PB1, pcie_rootport_aspm_quirk );
  301. DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_MCH_PC, pcie_rootport_aspm_quirk );
  302. DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_MCH_PC1, pcie_rootport_aspm_quirk );
  303. /*
  304. * Fixup to mark boot BIOS video selected by BIOS before it changes
  305. *
  306. * From information provided by "Jon Smirl" <jonsmirl@gmail.com>
  307. *
  308. * The standard boot ROM sequence for an x86 machine uses the BIOS
  309. * to select an initial video card for boot display. This boot video
  310. * card will have it's BIOS copied to C0000 in system RAM.
  311. * IORESOURCE_ROM_SHADOW is used to associate the boot video
  312. * card with this copy. On laptops this copy has to be used since
  313. * the main ROM may be compressed or combined with another image.
  314. * See pci_map_rom() for use of this flag. IORESOURCE_ROM_SHADOW
  315. * is marked here since the boot video device will be the only enabled
  316. * video device at this point.
  317. */
  318. static void __devinit pci_fixup_video(struct pci_dev *pdev)
  319. {
  320. struct pci_dev *bridge;
  321. struct pci_bus *bus;
  322. u16 config;
  323. if ((pdev->class >> 8) != PCI_CLASS_DISPLAY_VGA)
  324. return;
  325. /* Is VGA routed to us? */
  326. bus = pdev->bus;
  327. while (bus) {
  328. bridge = bus->self;
  329. if (bridge) {
  330. pci_read_config_word(bridge, PCI_BRIDGE_CONTROL,
  331. &config);
  332. if (!(config & PCI_BRIDGE_CTL_VGA))
  333. return;
  334. }
  335. bus = bus->parent;
  336. }
  337. pci_read_config_word(pdev, PCI_COMMAND, &config);
  338. if (config & (PCI_COMMAND_IO | PCI_COMMAND_MEMORY)) {
  339. pdev->resource[PCI_ROM_RESOURCE].flags |= IORESOURCE_ROM_SHADOW;
  340. printk(KERN_DEBUG "Boot video device is %s\n", pci_name(pdev));
  341. }
  342. }
  343. DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, pci_fixup_video);