1
2
3
4
5
6
7
8
9
10
11
12
13
14#include <linux/types.h>
15#include <linux/kernel.h>
16#include <linux/export.h>
17#include <linux/pci.h>
18#include <linux/init.h>
19#include <linux/delay.h>
20#include <linux/acpi.h>
21#include <linux/kallsyms.h>
22#include <linux/dmi.h>
23#include <linux/pci-aspm.h>
24#include <linux/ioport.h>
25#include <linux/sched.h>
26#include <linux/ktime.h>
27#include <linux/mm.h>
28#include <asm/dma.h>
29#include "pci.h"
30
31
32
33
34
35
36
37static void quirk_mmio_always_on(struct pci_dev *dev)
38{
39 dev->mmio_always_on = 1;
40}
41DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_ANY_ID, PCI_ANY_ID,
42 PCI_CLASS_BRIDGE_HOST, 8, quirk_mmio_always_on);
43
44
45
46
47
48static void quirk_mellanox_tavor(struct pci_dev *dev)
49{
50 dev->broken_parity_status = 1;
51}
52DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_MELLANOX, PCI_DEVICE_ID_MELLANOX_TAVOR, quirk_mellanox_tavor);
53DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_MELLANOX, PCI_DEVICE_ID_MELLANOX_TAVOR_BRIDGE, quirk_mellanox_tavor);
54
55
56
57static void quirk_passive_release(struct pci_dev *dev)
58{
59 struct pci_dev *d = NULL;
60 unsigned char dlc;
61
62
63
64 while ((d = pci_get_device(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371SB_0, d))) {
65 pci_read_config_byte(d, 0x82, &dlc);
66 if (!(dlc & 1<<1)) {
67 dev_info(&d->dev, "PIIX3: Enabling Passive Release\n");
68 dlc |= 1<<1;
69 pci_write_config_byte(d, 0x82, dlc);
70 }
71 }
72}
73DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82441, quirk_passive_release);
74DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82441, quirk_passive_release);
75
76
77
78
79
80
81
82
83static void quirk_isa_dma_hangs(struct pci_dev *dev)
84{
85 if (!isa_dma_bridge_buggy) {
86 isa_dma_bridge_buggy = 1;
87 dev_info(&dev->dev, "Activating ISA DMA hang workarounds\n");
88 }
89}
90
91
92
93
94DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_0, quirk_isa_dma_hangs);
95DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C596, quirk_isa_dma_hangs);
96DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371SB_0, quirk_isa_dma_hangs);
97DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M1533, quirk_isa_dma_hangs);
98DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NEC, PCI_DEVICE_ID_NEC_CBUS_1, quirk_isa_dma_hangs);
99DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NEC, PCI_DEVICE_ID_NEC_CBUS_2, quirk_isa_dma_hangs);
100DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NEC, PCI_DEVICE_ID_NEC_CBUS_3, quirk_isa_dma_hangs);
101
102
103
104
105
106static void quirk_tigerpoint_bm_sts(struct pci_dev *dev)
107{
108 u32 pmbase;
109 u16 pm1a;
110
111 pci_read_config_dword(dev, 0x40, &pmbase);
112 pmbase = pmbase & 0xff80;
113 pm1a = inw(pmbase);
114
115 if (pm1a & 0x10) {
116 dev_info(&dev->dev, FW_BUG "TigerPoint LPC.BM_STS cleared\n");
117 outw(0x10, pmbase);
118 }
119}
120DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_TGP_LPC, quirk_tigerpoint_bm_sts);
121
122
123
124
125static void quirk_nopcipci(struct pci_dev *dev)
126{
127 if ((pci_pci_problems & PCIPCI_FAIL) == 0) {
128 dev_info(&dev->dev, "Disabling direct PCI/PCI transfers\n");
129 pci_pci_problems |= PCIPCI_FAIL;
130 }
131}
132DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_5597, quirk_nopcipci);
133DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_496, quirk_nopcipci);
134
135static void quirk_nopciamd(struct pci_dev *dev)
136{
137 u8 rev;
138 pci_read_config_byte(dev, 0x08, &rev);
139 if (rev == 0x13) {
140
141 dev_info(&dev->dev, "Chipset erratum: Disabling direct PCI/AGP transfers\n");
142 pci_pci_problems |= PCIAGP_FAIL;
143 }
144}
145DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8151_0, quirk_nopciamd);
146
147
148
149
150static void quirk_triton(struct pci_dev *dev)
151{
152 if ((pci_pci_problems&PCIPCI_TRITON) == 0) {
153 dev_info(&dev->dev, "Limiting direct PCI/PCI transfers\n");
154 pci_pci_problems |= PCIPCI_TRITON;
155 }
156}
157DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82437, quirk_triton);
158DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82437VX, quirk_triton);
159DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82439, quirk_triton);
160DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82439TX, quirk_triton);
161
162
163
164
165
166
167
168
169
170
171
172static void quirk_vialatency(struct pci_dev *dev)
173{
174 struct pci_dev *p;
175 u8 busarb;
176
177
178
179 p = pci_get_device(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686, NULL);
180 if (p != NULL) {
181
182
183 if (p->revision < 0x40 || p->revision > 0x42)
184 goto exit;
185 } else {
186 p = pci_get_device(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8231, NULL);
187 if (p == NULL)
188 goto exit;
189
190 if (p->revision < 0x10 || p->revision > 0x12)
191 goto exit;
192 }
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207 pci_read_config_byte(dev, 0x76, &busarb);
208
209
210 busarb &= ~(1<<5);
211 busarb |= (1<<4);
212 pci_write_config_byte(dev, 0x76, busarb);
213 dev_info(&dev->dev, "Applying VIA southbridge workaround\n");
214exit:
215 pci_dev_put(p);
216}
217DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8363_0, quirk_vialatency);
218DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8371_1, quirk_vialatency);
219DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8361, quirk_vialatency);
220
221DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8363_0, quirk_vialatency);
222DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8371_1, quirk_vialatency);
223DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8361, quirk_vialatency);
224
225
226
227
228static void quirk_viaetbf(struct pci_dev *dev)
229{
230 if ((pci_pci_problems&PCIPCI_VIAETBF) == 0) {
231 dev_info(&dev->dev, "Limiting direct PCI/PCI transfers\n");
232 pci_pci_problems |= PCIPCI_VIAETBF;
233 }
234}
235DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C597_0, quirk_viaetbf);
236
237static void quirk_vsfx(struct pci_dev *dev)
238{
239 if ((pci_pci_problems&PCIPCI_VSFX) == 0) {
240 dev_info(&dev->dev, "Limiting direct PCI/PCI transfers\n");
241 pci_pci_problems |= PCIPCI_VSFX;
242 }
243}
244DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C576, quirk_vsfx);
245
246
247
248
249
250
251
252static void quirk_alimagik(struct pci_dev *dev)
253{
254 if ((pci_pci_problems&PCIPCI_ALIMAGIK) == 0) {
255 dev_info(&dev->dev, "Limiting direct PCI/PCI transfers\n");
256 pci_pci_problems |= PCIPCI_ALIMAGIK|PCIPCI_TRITON;
257 }
258}
259DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M1647, quirk_alimagik);
260DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M1651, quirk_alimagik);
261
262
263
264
265
266static void quirk_natoma(struct pci_dev *dev)
267{
268 if ((pci_pci_problems&PCIPCI_NATOMA) == 0) {
269 dev_info(&dev->dev, "Limiting direct PCI/PCI transfers\n");
270 pci_pci_problems |= PCIPCI_NATOMA;
271 }
272}
273DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82441, quirk_natoma);
274DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443LX_0, quirk_natoma);
275DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443LX_1, quirk_natoma);
276DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443BX_0, quirk_natoma);
277DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443BX_1, quirk_natoma);
278DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443BX_2, quirk_natoma);
279
280
281
282
283
284static void quirk_citrine(struct pci_dev *dev)
285{
286 dev->cfg_size = 0xA0;
287}
288DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_CITRINE, quirk_citrine);
289
290
291
292
293
294static void quirk_nfp6000(struct pci_dev *dev)
295{
296 dev->cfg_size = 0x600;
297}
298DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_NETRONOME, PCI_DEVICE_ID_NETRONOME_NFP4000, quirk_nfp6000);
299DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_NETRONOME, PCI_DEVICE_ID_NETRONOME_NFP6000, quirk_nfp6000);
300DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_NETRONOME, PCI_DEVICE_ID_NETRONOME_NFP6000_VF, quirk_nfp6000);
301
302
303static void quirk_extend_bar_to_page(struct pci_dev *dev)
304{
305 int i;
306
307 for (i = 0; i < PCI_STD_RESOURCE_END; i++) {
308 struct resource *r = &dev->resource[i];
309
310 if (r->flags & IORESOURCE_MEM && resource_size(r) < PAGE_SIZE) {
311 r->end = PAGE_SIZE - 1;
312 r->start = 0;
313 r->flags |= IORESOURCE_UNSET;
314 dev_info(&dev->dev, "expanded BAR %d to page size: %pR\n",
315 i, r);
316 }
317 }
318}
319DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_IBM, 0x034a, quirk_extend_bar_to_page);
320
321
322
323
324
325static void quirk_s3_64M(struct pci_dev *dev)
326{
327 struct resource *r = &dev->resource[0];
328
329 if ((r->start & 0x3ffffff) || r->end != r->start + 0x3ffffff) {
330 r->flags |= IORESOURCE_UNSET;
331 r->start = 0;
332 r->end = 0x3ffffff;
333 }
334}
335DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_S3, PCI_DEVICE_ID_S3_868, quirk_s3_64M);
336DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_S3, PCI_DEVICE_ID_S3_968, quirk_s3_64M);
337
338static void quirk_io(struct pci_dev *dev, int pos, unsigned size,
339 const char *name)
340{
341 u32 region;
342 struct pci_bus_region bus_region;
343 struct resource *res = dev->resource + pos;
344
345 pci_read_config_dword(dev, PCI_BASE_ADDRESS_0 + (pos << 2), ®ion);
346
347 if (!region)
348 return;
349
350 res->name = pci_name(dev);
351 res->flags = region & ~PCI_BASE_ADDRESS_IO_MASK;
352 res->flags |=
353 (IORESOURCE_IO | IORESOURCE_PCI_FIXED | IORESOURCE_SIZEALIGN);
354 region &= ~(size - 1);
355
356
357 bus_region.start = region;
358 bus_region.end = region + size - 1;
359 pcibios_bus_to_resource(dev->bus, res, &bus_region);
360
361 dev_info(&dev->dev, FW_BUG "%s quirk: reg 0x%x: %pR\n",
362 name, PCI_BASE_ADDRESS_0 + (pos << 2), res);
363}
364
365
366
367
368
369
370
371
372
373
374static void quirk_cs5536_vsa(struct pci_dev *dev)
375{
376 static char *name = "CS5536 ISA bridge";
377
378 if (pci_resource_len(dev, 0) != 8) {
379 quirk_io(dev, 0, 8, name);
380 quirk_io(dev, 1, 256, name);
381 quirk_io(dev, 2, 64, name);
382 dev_info(&dev->dev, "%s bug detected (incorrect header); workaround applied\n",
383 name);
384 }
385}
386DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_CS5536_ISA, quirk_cs5536_vsa);
387
388static void quirk_io_region(struct pci_dev *dev, int port,
389 unsigned size, int nr, const char *name)
390{
391 u16 region;
392 struct pci_bus_region bus_region;
393 struct resource *res = dev->resource + nr;
394
395 pci_read_config_word(dev, port, ®ion);
396 region &= ~(size - 1);
397
398 if (!region)
399 return;
400
401 res->name = pci_name(dev);
402 res->flags = IORESOURCE_IO;
403
404
405 bus_region.start = region;
406 bus_region.end = region + size - 1;
407 pcibios_bus_to_resource(dev->bus, res, &bus_region);
408
409 if (!pci_claim_resource(dev, nr))
410 dev_info(&dev->dev, "quirk: %pR claimed by %s\n", res, name);
411}
412
413
414
415
416
417static void quirk_ati_exploding_mce(struct pci_dev *dev)
418{
419 dev_info(&dev->dev, "ATI Northbridge, reserving I/O ports 0x3b0 to 0x3bb\n");
420
421 request_region(0x3b0, 0x0C, "RadeonIGP");
422 request_region(0x3d3, 0x01, "RadeonIGP");
423}
424DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RS100, quirk_ati_exploding_mce);
425
426
427
428
429
430
431
432
433
434
435
436static void quirk_amd_nl_class(struct pci_dev *pdev)
437{
438 u32 class = pdev->class;
439
440
441 pdev->class = (PCI_CLASS_SERIAL_USB << 8) | 0xfe;
442 dev_info(&pdev->dev, "PCI class overridden (%#08x -> %#08x) so dwc3 driver can claim this instead of xhci\n",
443 class, pdev->class);
444}
445DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_NL_USB,
446 quirk_amd_nl_class);
447
448
449
450
451
452
453
454
455
456
457
458
459static void quirk_ali7101_acpi(struct pci_dev *dev)
460{
461 quirk_io_region(dev, 0xE0, 64, PCI_BRIDGE_RESOURCES, "ali7101 ACPI");
462 quirk_io_region(dev, 0xE2, 32, PCI_BRIDGE_RESOURCES+1, "ali7101 SMB");
463}
464DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M7101, quirk_ali7101_acpi);
465
466static void piix4_io_quirk(struct pci_dev *dev, const char *name, unsigned int port, unsigned int enable)
467{
468 u32 devres;
469 u32 mask, size, base;
470
471 pci_read_config_dword(dev, port, &devres);
472 if ((devres & enable) != enable)
473 return;
474 mask = (devres >> 16) & 15;
475 base = devres & 0xffff;
476 size = 16;
477 for (;;) {
478 unsigned bit = size >> 1;
479 if ((bit & mask) == bit)
480 break;
481 size = bit;
482 }
483
484
485
486
487
488 base &= -size;
489 dev_info(&dev->dev, "%s PIO at %04x-%04x\n", name, base,
490 base + size - 1);
491}
492
493static void piix4_mem_quirk(struct pci_dev *dev, const char *name, unsigned int port, unsigned int enable)
494{
495 u32 devres;
496 u32 mask, size, base;
497
498 pci_read_config_dword(dev, port, &devres);
499 if ((devres & enable) != enable)
500 return;
501 base = devres & 0xffff0000;
502 mask = (devres & 0x3f) << 16;
503 size = 128 << 16;
504 for (;;) {
505 unsigned bit = size >> 1;
506 if ((bit & mask) == bit)
507 break;
508 size = bit;
509 }
510
511
512
513
514 base &= -size;
515 dev_info(&dev->dev, "%s MMIO at %04x-%04x\n", name, base,
516 base + size - 1);
517}
518
519
520
521
522
523
524
525static void quirk_piix4_acpi(struct pci_dev *dev)
526{
527 u32 res_a;
528
529 quirk_io_region(dev, 0x40, 64, PCI_BRIDGE_RESOURCES, "PIIX4 ACPI");
530 quirk_io_region(dev, 0x90, 16, PCI_BRIDGE_RESOURCES+1, "PIIX4 SMB");
531
532
533 pci_read_config_dword(dev, 0x5c, &res_a);
534
535 piix4_io_quirk(dev, "PIIX4 devres B", 0x60, 3 << 21);
536 piix4_io_quirk(dev, "PIIX4 devres C", 0x64, 3 << 21);
537
538
539
540
541 if (res_a & (1 << 29)) {
542 piix4_io_quirk(dev, "PIIX4 devres E", 0x68, 1 << 20);
543 piix4_mem_quirk(dev, "PIIX4 devres F", 0x6c, 1 << 7);
544 }
545
546 if (res_a & (1 << 30)) {
547 piix4_io_quirk(dev, "PIIX4 devres G", 0x70, 1 << 20);
548 piix4_mem_quirk(dev, "PIIX4 devres H", 0x74, 1 << 7);
549 }
550 piix4_io_quirk(dev, "PIIX4 devres I", 0x78, 1 << 20);
551 piix4_io_quirk(dev, "PIIX4 devres J", 0x7c, 1 << 20);
552}
553DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371AB_3, quirk_piix4_acpi);
554DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443MX_3, quirk_piix4_acpi);
555
556#define ICH_PMBASE 0x40
557#define ICH_ACPI_CNTL 0x44
558#define ICH4_ACPI_EN 0x10
559#define ICH6_ACPI_EN 0x80
560#define ICH4_GPIOBASE 0x58
561#define ICH4_GPIO_CNTL 0x5c
562#define ICH4_GPIO_EN 0x10
563#define ICH6_GPIOBASE 0x48
564#define ICH6_GPIO_CNTL 0x4c
565#define ICH6_GPIO_EN 0x10
566
567
568
569
570
571
572static void quirk_ich4_lpc_acpi(struct pci_dev *dev)
573{
574 u8 enable;
575
576
577
578
579
580
581
582
583
584 pci_read_config_byte(dev, ICH_ACPI_CNTL, &enable);
585 if (enable & ICH4_ACPI_EN)
586 quirk_io_region(dev, ICH_PMBASE, 128, PCI_BRIDGE_RESOURCES,
587 "ICH4 ACPI/GPIO/TCO");
588
589 pci_read_config_byte(dev, ICH4_GPIO_CNTL, &enable);
590 if (enable & ICH4_GPIO_EN)
591 quirk_io_region(dev, ICH4_GPIOBASE, 64, PCI_BRIDGE_RESOURCES+1,
592 "ICH4 GPIO");
593}
594DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_0, quirk_ich4_lpc_acpi);
595DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AB_0, quirk_ich4_lpc_acpi);
596DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_0, quirk_ich4_lpc_acpi);
597DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_10, quirk_ich4_lpc_acpi);
598DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_0, quirk_ich4_lpc_acpi);
599DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_12, quirk_ich4_lpc_acpi);
600DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_0, quirk_ich4_lpc_acpi);
601DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_12, quirk_ich4_lpc_acpi);
602DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801EB_0, quirk_ich4_lpc_acpi);
603DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB_1, quirk_ich4_lpc_acpi);
604
605static void ich6_lpc_acpi_gpio(struct pci_dev *dev)
606{
607 u8 enable;
608
609 pci_read_config_byte(dev, ICH_ACPI_CNTL, &enable);
610 if (enable & ICH6_ACPI_EN)
611 quirk_io_region(dev, ICH_PMBASE, 128, PCI_BRIDGE_RESOURCES,
612 "ICH6 ACPI/GPIO/TCO");
613
614 pci_read_config_byte(dev, ICH6_GPIO_CNTL, &enable);
615 if (enable & ICH6_GPIO_EN)
616 quirk_io_region(dev, ICH6_GPIOBASE, 64, PCI_BRIDGE_RESOURCES+1,
617 "ICH6 GPIO");
618}
619
620static void ich6_lpc_generic_decode(struct pci_dev *dev, unsigned reg, const char *name, int dynsize)
621{
622 u32 val;
623 u32 size, base;
624
625 pci_read_config_dword(dev, reg, &val);
626
627
628 if (!(val & 1))
629 return;
630 base = val & 0xfffc;
631 if (dynsize) {
632
633
634
635
636
637
638 size = 16;
639 } else {
640 size = 128;
641 }
642 base &= ~(size-1);
643
644
645 dev_info(&dev->dev, "%s PIO at %04x-%04x\n", name, base, base+size-1);
646}
647
648static void quirk_ich6_lpc(struct pci_dev *dev)
649{
650
651 ich6_lpc_acpi_gpio(dev);
652
653
654 ich6_lpc_generic_decode(dev, 0x84, "LPC Generic IO decode 1", 0);
655 ich6_lpc_generic_decode(dev, 0x88, "LPC Generic IO decode 2", 1);
656}
657DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH6_0, quirk_ich6_lpc);
658DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH6_1, quirk_ich6_lpc);
659
660static void ich7_lpc_generic_decode(struct pci_dev *dev, unsigned reg, const char *name)
661{
662 u32 val;
663 u32 mask, base;
664
665 pci_read_config_dword(dev, reg, &val);
666
667
668 if (!(val & 1))
669 return;
670
671
672
673
674
675 base = val & 0xfffc;
676 mask = (val >> 16) & 0xfc;
677 mask |= 3;
678
679
680 dev_info(&dev->dev, "%s PIO at %04x (mask %04x)\n", name, base, mask);
681}
682
683
684static void quirk_ich7_lpc(struct pci_dev *dev)
685{
686
687 ich6_lpc_acpi_gpio(dev);
688
689
690 ich7_lpc_generic_decode(dev, 0x84, "ICH7 LPC Generic IO decode 1");
691 ich7_lpc_generic_decode(dev, 0x88, "ICH7 LPC Generic IO decode 2");
692 ich7_lpc_generic_decode(dev, 0x8c, "ICH7 LPC Generic IO decode 3");
693 ich7_lpc_generic_decode(dev, 0x90, "ICH7 LPC Generic IO decode 4");
694}
695DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH7_0, quirk_ich7_lpc);
696DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH7_1, quirk_ich7_lpc);
697DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH7_31, quirk_ich7_lpc);
698DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH8_0, quirk_ich7_lpc);
699DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH8_2, quirk_ich7_lpc);
700DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH8_3, quirk_ich7_lpc);
701DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH8_1, quirk_ich7_lpc);
702DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH8_4, quirk_ich7_lpc);
703DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH9_2, quirk_ich7_lpc);
704DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH9_4, quirk_ich7_lpc);
705DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH9_7, quirk_ich7_lpc);
706DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH9_8, quirk_ich7_lpc);
707DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH10_1, quirk_ich7_lpc);
708
709
710
711
712
713static void quirk_vt82c586_acpi(struct pci_dev *dev)
714{
715 if (dev->revision & 0x10)
716 quirk_io_region(dev, 0x48, 256, PCI_BRIDGE_RESOURCES,
717 "vt82c586 ACPI");
718}
719DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_3, quirk_vt82c586_acpi);
720
721
722
723
724
725
726
727static void quirk_vt82c686_acpi(struct pci_dev *dev)
728{
729 quirk_vt82c586_acpi(dev);
730
731 quirk_io_region(dev, 0x70, 128, PCI_BRIDGE_RESOURCES+1,
732 "vt82c686 HW-mon");
733
734 quirk_io_region(dev, 0x90, 16, PCI_BRIDGE_RESOURCES+2, "vt82c686 SMB");
735}
736DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686_4, quirk_vt82c686_acpi);
737
738
739
740
741
742
743static void quirk_vt8235_acpi(struct pci_dev *dev)
744{
745 quirk_io_region(dev, 0x88, 128, PCI_BRIDGE_RESOURCES, "vt8235 PM");
746 quirk_io_region(dev, 0xd0, 16, PCI_BRIDGE_RESOURCES+1, "vt8235 SMB");
747}
748DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8235, quirk_vt8235_acpi);
749
750
751
752
753
754static void quirk_xio2000a(struct pci_dev *dev)
755{
756 struct pci_dev *pdev;
757 u16 command;
758
759 dev_warn(&dev->dev, "TI XIO2000a quirk detected; secondary bus fast back-to-back transfers disabled\n");
760 list_for_each_entry(pdev, &dev->subordinate->devices, bus_list) {
761 pci_read_config_word(pdev, PCI_COMMAND, &command);
762 if (command & PCI_COMMAND_FAST_BACK)
763 pci_write_config_word(pdev, PCI_COMMAND, command & ~PCI_COMMAND_FAST_BACK);
764 }
765}
766DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_XIO2000A,
767 quirk_xio2000a);
768
769#ifdef CONFIG_X86_IO_APIC
770
771#include <asm/io_apic.h>
772
773
774
775
776
777
778
779
780static void quirk_via_ioapic(struct pci_dev *dev)
781{
782 u8 tmp;
783
784 if (nr_ioapics < 1)
785 tmp = 0;
786 else
787 tmp = 0x1f;
788
789 dev_info(&dev->dev, "%sbling VIA external APIC routing\n",
790 tmp == 0 ? "Disa" : "Ena");
791
792
793 pci_write_config_byte(dev, 0x58, tmp);
794}
795DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686, quirk_via_ioapic);
796DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686, quirk_via_ioapic);
797
798
799
800
801
802
803
804static void quirk_via_vt8237_bypass_apic_deassert(struct pci_dev *dev)
805{
806 u8 misc_control2;
807#define BYPASS_APIC_DEASSERT 8
808
809 pci_read_config_byte(dev, 0x5B, &misc_control2);
810 if (!(misc_control2 & BYPASS_APIC_DEASSERT)) {
811 dev_info(&dev->dev, "Bypassing VIA 8237 APIC De-Assert Message\n");
812 pci_write_config_byte(dev, 0x5B, misc_control2|BYPASS_APIC_DEASSERT);
813 }
814}
815DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8237, quirk_via_vt8237_bypass_apic_deassert);
816DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8237, quirk_via_vt8237_bypass_apic_deassert);
817
818
819
820
821
822
823
824
825
826
827static void quirk_amd_ioapic(struct pci_dev *dev)
828{
829 if (dev->revision >= 0x02) {
830 dev_warn(&dev->dev, "I/O APIC: AMD Erratum #22 may be present. In the event of instability try\n");
831 dev_warn(&dev->dev, " : booting with the \"noapic\" option\n");
832 }
833}
834DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_VIPER_7410, quirk_amd_ioapic);
835#endif
836
837
838
839
840
841static void quirk_amd_8131_mmrbc(struct pci_dev *dev)
842{
843 if (dev->subordinate && dev->revision <= 0x12) {
844 dev_info(&dev->dev, "AMD8131 rev %x detected; disabling PCI-X MMRBC\n",
845 dev->revision);
846 dev->subordinate->bus_flags |= PCI_BUS_FLAGS_NO_MMRBC;
847 }
848}
849DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8131_BRIDGE, quirk_amd_8131_mmrbc);
850
851
852
853
854
855
856
857
858
859static void quirk_via_acpi(struct pci_dev *d)
860{
861
862
863
864 u8 irq;
865 pci_read_config_byte(d, 0x42, &irq);
866 irq &= 0xf;
867 if (irq && (irq != 2))
868 d->irq = irq;
869}
870DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_3, quirk_via_acpi);
871DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686_4, quirk_via_acpi);
872
873
874
875
876
877
878static int via_vlink_dev_lo = -1, via_vlink_dev_hi = 18;
879
880static void quirk_via_bridge(struct pci_dev *dev)
881{
882
883 switch (dev->device) {
884 case PCI_DEVICE_ID_VIA_82C686:
885
886
887
888 via_vlink_dev_lo = PCI_SLOT(dev->devfn);
889 via_vlink_dev_hi = PCI_SLOT(dev->devfn);
890 break;
891 case PCI_DEVICE_ID_VIA_8237:
892 case PCI_DEVICE_ID_VIA_8237A:
893 via_vlink_dev_lo = 15;
894 break;
895 case PCI_DEVICE_ID_VIA_8235:
896 via_vlink_dev_lo = 16;
897 break;
898 case PCI_DEVICE_ID_VIA_8231:
899 case PCI_DEVICE_ID_VIA_8233_0:
900 case PCI_DEVICE_ID_VIA_8233A:
901 case PCI_DEVICE_ID_VIA_8233C_0:
902 via_vlink_dev_lo = 17;
903 break;
904 }
905}
906DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686, quirk_via_bridge);
907DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8231, quirk_via_bridge);
908DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8233_0, quirk_via_bridge);
909DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8233A, quirk_via_bridge);
910DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8233C_0, quirk_via_bridge);
911DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8235, quirk_via_bridge);
912DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8237, quirk_via_bridge);
913DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8237A, quirk_via_bridge);
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928static void quirk_via_vlink(struct pci_dev *dev)
929{
930 u8 irq, new_irq;
931
932
933 if (via_vlink_dev_lo == -1)
934 return;
935
936 new_irq = dev->irq;
937
938
939 if (!new_irq || new_irq > 15)
940 return;
941
942
943 if (dev->bus->number != 0 || PCI_SLOT(dev->devfn) > via_vlink_dev_hi ||
944 PCI_SLOT(dev->devfn) < via_vlink_dev_lo)
945 return;
946
947
948
949
950 pci_read_config_byte(dev, PCI_INTERRUPT_LINE, &irq);
951 if (new_irq != irq) {
952 dev_info(&dev->dev, "VIA VLink IRQ fixup, from %d to %d\n",
953 irq, new_irq);
954 udelay(15);
955 pci_write_config_byte(dev, PCI_INTERRUPT_LINE, new_irq);
956 }
957}
958DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_ANY_ID, quirk_via_vlink);
959
960
961
962
963
964
965
966static void quirk_vt82c598_id(struct pci_dev *dev)
967{
968 pci_write_config_byte(dev, 0xfc, 0);
969 pci_read_config_word(dev, PCI_DEVICE_ID, &dev->device);
970}
971DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C597_0, quirk_vt82c598_id);
972
973
974
975
976
977
978
979static void quirk_cardbus_legacy(struct pci_dev *dev)
980{
981 pci_write_config_dword(dev, PCI_CB_LEGACY_MODE_BASE, 0);
982}
983DECLARE_PCI_FIXUP_CLASS_FINAL(PCI_ANY_ID, PCI_ANY_ID,
984 PCI_CLASS_BRIDGE_CARDBUS, 8, quirk_cardbus_legacy);
985DECLARE_PCI_FIXUP_CLASS_RESUME_EARLY(PCI_ANY_ID, PCI_ANY_ID,
986 PCI_CLASS_BRIDGE_CARDBUS, 8, quirk_cardbus_legacy);
987
988
989
990
991
992
993
994
995static void quirk_amd_ordering(struct pci_dev *dev)
996{
997 u32 pcic;
998 pci_read_config_dword(dev, 0x4C, &pcic);
999 if ((pcic & 6) != 6) {
1000 pcic |= 6;
1001 dev_warn(&dev->dev, "BIOS failed to enable PCI standards compliance; fixing this error\n");
1002 pci_write_config_dword(dev, 0x4C, pcic);
1003 pci_read_config_dword(dev, 0x84, &pcic);
1004 pcic |= (1 << 23);
1005 pci_write_config_dword(dev, 0x84, pcic);
1006 }
1007}
1008DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_FE_GATE_700C, quirk_amd_ordering);
1009DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_FE_GATE_700C, quirk_amd_ordering);
1010
1011
1012
1013
1014
1015
1016
1017
1018static void quirk_dunord(struct pci_dev *dev)
1019{
1020 struct resource *r = &dev->resource[1];
1021
1022 r->flags |= IORESOURCE_UNSET;
1023 r->start = 0;
1024 r->end = 0xffffff;
1025}
1026DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_DUNORD, PCI_DEVICE_ID_DUNORD_I3000, quirk_dunord);
1027
1028
1029
1030
1031
1032
1033
1034static void quirk_transparent_bridge(struct pci_dev *dev)
1035{
1036 dev->transparent = 1;
1037}
1038DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82380FB, quirk_transparent_bridge);
1039DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_TOSHIBA, 0x605, quirk_transparent_bridge);
1040
1041
1042
1043
1044
1045
1046
1047static void quirk_mediagx_master(struct pci_dev *dev)
1048{
1049 u8 reg;
1050
1051 pci_read_config_byte(dev, 0x41, ®);
1052 if (reg & 2) {
1053 reg &= ~2;
1054 dev_info(&dev->dev, "Fixup for MediaGX/Geode Slave Disconnect Boundary (0x41=0x%02x)\n",
1055 reg);
1056 pci_write_config_byte(dev, 0x41, reg);
1057 }
1058}
1059DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CYRIX, PCI_DEVICE_ID_CYRIX_PCI_MASTER, quirk_mediagx_master);
1060DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_CYRIX, PCI_DEVICE_ID_CYRIX_PCI_MASTER, quirk_mediagx_master);
1061
1062
1063
1064
1065
1066
1067static void quirk_disable_pxb(struct pci_dev *pdev)
1068{
1069 u16 config;
1070
1071 if (pdev->revision != 0x04)
1072 return;
1073 pci_read_config_word(pdev, 0x40, &config);
1074 if (config & (1<<6)) {
1075 config &= ~(1<<6);
1076 pci_write_config_word(pdev, 0x40, config);
1077 dev_info(&pdev->dev, "C0 revision 450NX. Disabling PCI restreaming\n");
1078 }
1079}
1080DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82454NX, quirk_disable_pxb);
1081DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82454NX, quirk_disable_pxb);
1082
1083static void quirk_amd_ide_mode(struct pci_dev *pdev)
1084{
1085
1086 u8 tmp;
1087
1088 pci_read_config_byte(pdev, PCI_CLASS_DEVICE, &tmp);
1089 if (tmp == 0x01) {
1090 pci_read_config_byte(pdev, 0x40, &tmp);
1091 pci_write_config_byte(pdev, 0x40, tmp|1);
1092 pci_write_config_byte(pdev, 0x9, 1);
1093 pci_write_config_byte(pdev, 0xa, 6);
1094 pci_write_config_byte(pdev, 0x40, tmp);
1095
1096 pdev->class = PCI_CLASS_STORAGE_SATA_AHCI;
1097 dev_info(&pdev->dev, "set SATA to AHCI mode\n");
1098 }
1099}
1100DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP600_SATA, quirk_amd_ide_mode);
1101DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP600_SATA, quirk_amd_ide_mode);
1102DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP700_SATA, quirk_amd_ide_mode);
1103DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP700_SATA, quirk_amd_ide_mode);
1104DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_HUDSON2_SATA_IDE, quirk_amd_ide_mode);
1105DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_HUDSON2_SATA_IDE, quirk_amd_ide_mode);
1106DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AMD, 0x7900, quirk_amd_ide_mode);
1107DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_AMD, 0x7900, quirk_amd_ide_mode);
1108
1109
1110
1111
1112static void quirk_svwks_csb5ide(struct pci_dev *pdev)
1113{
1114 u8 prog;
1115 pci_read_config_byte(pdev, PCI_CLASS_PROG, &prog);
1116 if (prog & 5) {
1117 prog &= ~5;
1118 pdev->class &= ~5;
1119 pci_write_config_byte(pdev, PCI_CLASS_PROG, prog);
1120
1121 }
1122}
1123DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_CSB5IDE, quirk_svwks_csb5ide);
1124
1125
1126
1127
1128static void quirk_ide_samemode(struct pci_dev *pdev)
1129{
1130 u8 prog;
1131
1132 pci_read_config_byte(pdev, PCI_CLASS_PROG, &prog);
1133
1134 if (((prog & 1) && !(prog & 4)) || ((prog & 4) && !(prog & 1))) {
1135 dev_info(&pdev->dev, "IDE mode mismatch; forcing legacy mode\n");
1136 prog &= ~5;
1137 pdev->class &= ~5;
1138 pci_write_config_byte(pdev, PCI_CLASS_PROG, prog);
1139 }
1140}
1141DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_10, quirk_ide_samemode);
1142
1143
1144
1145
1146
1147static void quirk_no_ata_d3(struct pci_dev *pdev)
1148{
1149 pdev->dev_flags |= PCI_DEV_FLAGS_NO_D3;
1150}
1151
1152DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_SERVERWORKS, PCI_ANY_ID,
1153 PCI_CLASS_STORAGE_IDE, 8, quirk_no_ata_d3);
1154DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_ATI, PCI_ANY_ID,
1155 PCI_CLASS_STORAGE_IDE, 8, quirk_no_ata_d3);
1156
1157DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_AL, PCI_ANY_ID,
1158 PCI_CLASS_STORAGE_IDE, 8, quirk_no_ata_d3);
1159
1160
1161DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_VIA, PCI_ANY_ID,
1162 PCI_CLASS_STORAGE_IDE, 8, quirk_no_ata_d3);
1163
1164
1165
1166
1167static void quirk_eisa_bridge(struct pci_dev *dev)
1168{
1169 dev->class = PCI_CLASS_BRIDGE_EISA << 8;
1170}
1171DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82375, quirk_eisa_bridge);
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199static int asus_hides_smbus;
1200
1201static void asus_hides_smbus_hostbridge(struct pci_dev *dev)
1202{
1203 if (unlikely(dev->subsystem_vendor == PCI_VENDOR_ID_ASUSTEK)) {
1204 if (dev->device == PCI_DEVICE_ID_INTEL_82845_HB)
1205 switch (dev->subsystem_device) {
1206 case 0x8025:
1207 case 0x8070:
1208 case 0x8088:
1209 case 0x1626:
1210 asus_hides_smbus = 1;
1211 }
1212 else if (dev->device == PCI_DEVICE_ID_INTEL_82845G_HB)
1213 switch (dev->subsystem_device) {
1214 case 0x80b1:
1215 case 0x80b2:
1216 case 0x8093:
1217 asus_hides_smbus = 1;
1218 }
1219 else if (dev->device == PCI_DEVICE_ID_INTEL_82850_HB)
1220 switch (dev->subsystem_device) {
1221 case 0x8030:
1222 asus_hides_smbus = 1;
1223 }
1224 else if (dev->device == PCI_DEVICE_ID_INTEL_7205_0)
1225 switch (dev->subsystem_device) {
1226 case 0x8070:
1227 asus_hides_smbus = 1;
1228 }
1229 else if (dev->device == PCI_DEVICE_ID_INTEL_E7501_MCH)
1230 switch (dev->subsystem_device) {
1231 case 0x80c9:
1232 asus_hides_smbus = 1;
1233 }
1234 else if (dev->device == PCI_DEVICE_ID_INTEL_82855GM_HB)
1235 switch (dev->subsystem_device) {
1236 case 0x1751:
1237 case 0x1821:
1238 case 0x1897:
1239 asus_hides_smbus = 1;
1240 }
1241 else if (dev->device == PCI_DEVICE_ID_INTEL_82855PM_HB)
1242 switch (dev->subsystem_device) {
1243 case 0x184b:
1244 case 0x186a:
1245 asus_hides_smbus = 1;
1246 }
1247 else if (dev->device == PCI_DEVICE_ID_INTEL_82865_HB)
1248 switch (dev->subsystem_device) {
1249 case 0x80f2:
1250 asus_hides_smbus = 1;
1251 }
1252 else if (dev->device == PCI_DEVICE_ID_INTEL_82915GM_HB)
1253 switch (dev->subsystem_device) {
1254 case 0x1882:
1255 case 0x1977:
1256 asus_hides_smbus = 1;
1257 }
1258 } else if (unlikely(dev->subsystem_vendor == PCI_VENDOR_ID_HP)) {
1259 if (dev->device == PCI_DEVICE_ID_INTEL_82855PM_HB)
1260 switch (dev->subsystem_device) {
1261 case 0x088C:
1262 case 0x0890:
1263 asus_hides_smbus = 1;
1264 }
1265 else if (dev->device == PCI_DEVICE_ID_INTEL_82865_HB)
1266 switch (dev->subsystem_device) {
1267 case 0x12bc:
1268 case 0x12bd:
1269 case 0x006a:
1270 asus_hides_smbus = 1;
1271 }
1272 else if (dev->device == PCI_DEVICE_ID_INTEL_82875_HB)
1273 switch (dev->subsystem_device) {
1274 case 0x12bf:
1275 asus_hides_smbus = 1;
1276 }
1277 } else if (unlikely(dev->subsystem_vendor == PCI_VENDOR_ID_SAMSUNG)) {
1278 if (dev->device == PCI_DEVICE_ID_INTEL_82855PM_HB)
1279 switch (dev->subsystem_device) {
1280 case 0xC00C:
1281 asus_hides_smbus = 1;
1282 }
1283 } else if (unlikely(dev->subsystem_vendor == PCI_VENDOR_ID_COMPAQ)) {
1284 if (dev->device == PCI_DEVICE_ID_INTEL_82855PM_HB)
1285 switch (dev->subsystem_device) {
1286 case 0x0058:
1287 asus_hides_smbus = 1;
1288 }
1289 else if (dev->device == PCI_DEVICE_ID_INTEL_82810_IG3)
1290 switch (dev->subsystem_device) {
1291 case 0xB16C:
1292
1293
1294
1295 asus_hides_smbus = 1;
1296 }
1297 else if (dev->device == PCI_DEVICE_ID_INTEL_82801DB_2)
1298 switch (dev->subsystem_device) {
1299 case 0x00b8:
1300 case 0x00b9:
1301 case 0x00ba:
1302
1303
1304
1305
1306
1307 asus_hides_smbus = 1;
1308 }
1309 else if (dev->device == PCI_DEVICE_ID_INTEL_82815_CGC)
1310 switch (dev->subsystem_device) {
1311 case 0x001A:
1312
1313
1314
1315 asus_hides_smbus = 1;
1316 }
1317 }
1318}
1319DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82845_HB, asus_hides_smbus_hostbridge);
1320DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82845G_HB, asus_hides_smbus_hostbridge);
1321DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82850_HB, asus_hides_smbus_hostbridge);
1322DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82865_HB, asus_hides_smbus_hostbridge);
1323DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82875_HB, asus_hides_smbus_hostbridge);
1324DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_7205_0, asus_hides_smbus_hostbridge);
1325DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_E7501_MCH, asus_hides_smbus_hostbridge);
1326DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82855PM_HB, asus_hides_smbus_hostbridge);
1327DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82855GM_HB, asus_hides_smbus_hostbridge);
1328DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82915GM_HB, asus_hides_smbus_hostbridge);
1329
1330DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82810_IG3, asus_hides_smbus_hostbridge);
1331DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_2, asus_hides_smbus_hostbridge);
1332DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82815_CGC, asus_hides_smbus_hostbridge);
1333
1334static void asus_hides_smbus_lpc(struct pci_dev *dev)
1335{
1336 u16 val;
1337
1338 if (likely(!asus_hides_smbus))
1339 return;
1340
1341 pci_read_config_word(dev, 0xF2, &val);
1342 if (val & 0x8) {
1343 pci_write_config_word(dev, 0xF2, val & (~0x8));
1344 pci_read_config_word(dev, 0xF2, &val);
1345 if (val & 0x8)
1346 dev_info(&dev->dev, "i801 SMBus device continues to play 'hide and seek'! 0x%x\n",
1347 val);
1348 else
1349 dev_info(&dev->dev, "Enabled i801 SMBus device\n");
1350 }
1351}
1352DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_0, asus_hides_smbus_lpc);
1353DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_0, asus_hides_smbus_lpc);
1354DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_0, asus_hides_smbus_lpc);
1355DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_0, asus_hides_smbus_lpc);
1356DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_12, asus_hides_smbus_lpc);
1357DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_12, asus_hides_smbus_lpc);
1358DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801EB_0, asus_hides_smbus_lpc);
1359DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_0, asus_hides_smbus_lpc);
1360DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_0, asus_hides_smbus_lpc);
1361DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_0, asus_hides_smbus_lpc);
1362DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_0, asus_hides_smbus_lpc);
1363DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_12, asus_hides_smbus_lpc);
1364DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_12, asus_hides_smbus_lpc);
1365DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801EB_0, asus_hides_smbus_lpc);
1366
1367
1368static void __iomem *asus_rcba_base;
1369static void asus_hides_smbus_lpc_ich6_suspend(struct pci_dev *dev)
1370{
1371 u32 rcba;
1372
1373 if (likely(!asus_hides_smbus))
1374 return;
1375 WARN_ON(asus_rcba_base);
1376
1377 pci_read_config_dword(dev, 0xF0, &rcba);
1378
1379 asus_rcba_base = ioremap_nocache(rcba & 0xFFFFC000, 0x4000);
1380 if (asus_rcba_base == NULL)
1381 return;
1382}
1383
1384static void asus_hides_smbus_lpc_ich6_resume_early(struct pci_dev *dev)
1385{
1386 u32 val;
1387
1388 if (likely(!asus_hides_smbus || !asus_rcba_base))
1389 return;
1390
1391 val = readl(asus_rcba_base + 0x3418);
1392 writel(val & 0xFFFFFFF7, asus_rcba_base + 0x3418);
1393}
1394
1395static void asus_hides_smbus_lpc_ich6_resume(struct pci_dev *dev)
1396{
1397 if (likely(!asus_hides_smbus || !asus_rcba_base))
1398 return;
1399 iounmap(asus_rcba_base);
1400 asus_rcba_base = NULL;
1401 dev_info(&dev->dev, "Enabled ICH6/i801 SMBus device\n");
1402}
1403
1404static void asus_hides_smbus_lpc_ich6(struct pci_dev *dev)
1405{
1406 asus_hides_smbus_lpc_ich6_suspend(dev);
1407 asus_hides_smbus_lpc_ich6_resume_early(dev);
1408 asus_hides_smbus_lpc_ich6_resume(dev);
1409}
1410DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH6_1, asus_hides_smbus_lpc_ich6);
1411DECLARE_PCI_FIXUP_SUSPEND(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH6_1, asus_hides_smbus_lpc_ich6_suspend);
1412DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH6_1, asus_hides_smbus_lpc_ich6_resume);
1413DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH6_1, asus_hides_smbus_lpc_ich6_resume_early);
1414
1415
1416
1417
1418static void quirk_sis_96x_smbus(struct pci_dev *dev)
1419{
1420 u8 val = 0;
1421 pci_read_config_byte(dev, 0x77, &val);
1422 if (val & 0x10) {
1423 dev_info(&dev->dev, "Enabling SiS 96x SMBus\n");
1424 pci_write_config_byte(dev, 0x77, val & ~0x10);
1425 }
1426}
1427DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_961, quirk_sis_96x_smbus);
1428DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_962, quirk_sis_96x_smbus);
1429DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_963, quirk_sis_96x_smbus);
1430DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_LPC, quirk_sis_96x_smbus);
1431DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_961, quirk_sis_96x_smbus);
1432DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_962, quirk_sis_96x_smbus);
1433DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_963, quirk_sis_96x_smbus);
1434DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_LPC, quirk_sis_96x_smbus);
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444#define SIS_DETECT_REGISTER 0x40
1445
1446static void quirk_sis_503(struct pci_dev *dev)
1447{
1448 u8 reg;
1449 u16 devid;
1450
1451 pci_read_config_byte(dev, SIS_DETECT_REGISTER, ®);
1452 pci_write_config_byte(dev, SIS_DETECT_REGISTER, reg | (1 << 6));
1453 pci_read_config_word(dev, PCI_DEVICE_ID, &devid);
1454 if (((devid & 0xfff0) != 0x0960) && (devid != 0x0018)) {
1455 pci_write_config_byte(dev, SIS_DETECT_REGISTER, reg);
1456 return;
1457 }
1458
1459
1460
1461
1462
1463
1464 dev->device = devid;
1465 quirk_sis_96x_smbus(dev);
1466}
1467DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_503, quirk_sis_503);
1468DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_503, quirk_sis_503);
1469
1470
1471
1472
1473
1474
1475
1476
1477static void asus_hides_ac97_lpc(struct pci_dev *dev)
1478{
1479 u8 val;
1480 int asus_hides_ac97 = 0;
1481
1482 if (likely(dev->subsystem_vendor == PCI_VENDOR_ID_ASUSTEK)) {
1483 if (dev->device == PCI_DEVICE_ID_VIA_8237)
1484 asus_hides_ac97 = 1;
1485 }
1486
1487 if (!asus_hides_ac97)
1488 return;
1489
1490 pci_read_config_byte(dev, 0x50, &val);
1491 if (val & 0xc0) {
1492 pci_write_config_byte(dev, 0x50, val & (~0xc0));
1493 pci_read_config_byte(dev, 0x50, &val);
1494 if (val & 0xc0)
1495 dev_info(&dev->dev, "Onboard AC97/MC97 devices continue to play 'hide and seek'! 0x%x\n",
1496 val);
1497 else
1498 dev_info(&dev->dev, "Enabled onboard AC97/MC97 devices\n");
1499 }
1500}
1501DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8237, asus_hides_ac97_lpc);
1502DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8237, asus_hides_ac97_lpc);
1503
1504#if defined(CONFIG_ATA) || defined(CONFIG_ATA_MODULE)
1505
1506
1507
1508
1509
1510
1511static void quirk_jmicron_ata(struct pci_dev *pdev)
1512{
1513 u32 conf1, conf5, class;
1514 u8 hdr;
1515
1516
1517 if (PCI_FUNC(pdev->devfn))
1518 return;
1519
1520 pci_read_config_dword(pdev, 0x40, &conf1);
1521 pci_read_config_dword(pdev, 0x80, &conf5);
1522
1523 conf1 &= ~0x00CFF302;
1524 conf5 &= ~(1 << 24);
1525
1526 switch (pdev->device) {
1527 case PCI_DEVICE_ID_JMICRON_JMB360:
1528 case PCI_DEVICE_ID_JMICRON_JMB362:
1529 case PCI_DEVICE_ID_JMICRON_JMB364:
1530
1531 conf1 |= 0x0002A100;
1532 break;
1533
1534 case PCI_DEVICE_ID_JMICRON_JMB365:
1535 case PCI_DEVICE_ID_JMICRON_JMB366:
1536
1537 conf5 |= (1 << 24);
1538
1539 case PCI_DEVICE_ID_JMICRON_JMB361:
1540 case PCI_DEVICE_ID_JMICRON_JMB363:
1541 case PCI_DEVICE_ID_JMICRON_JMB369:
1542
1543
1544 conf1 |= 0x00C2A1B3;
1545 break;
1546
1547 case PCI_DEVICE_ID_JMICRON_JMB368:
1548
1549 conf1 |= 0x00C00000;
1550 break;
1551 }
1552
1553 pci_write_config_dword(pdev, 0x40, conf1);
1554 pci_write_config_dword(pdev, 0x80, conf5);
1555
1556
1557 pci_read_config_byte(pdev, PCI_HEADER_TYPE, &hdr);
1558 pdev->hdr_type = hdr & 0x7f;
1559 pdev->multifunction = !!(hdr & 0x80);
1560
1561 pci_read_config_dword(pdev, PCI_CLASS_REVISION, &class);
1562 pdev->class = class >> 8;
1563}
1564DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB360, quirk_jmicron_ata);
1565DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB361, quirk_jmicron_ata);
1566DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB362, quirk_jmicron_ata);
1567DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB363, quirk_jmicron_ata);
1568DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB364, quirk_jmicron_ata);
1569DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB365, quirk_jmicron_ata);
1570DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB366, quirk_jmicron_ata);
1571DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB368, quirk_jmicron_ata);
1572DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB369, quirk_jmicron_ata);
1573DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB360, quirk_jmicron_ata);
1574DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB361, quirk_jmicron_ata);
1575DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB362, quirk_jmicron_ata);
1576DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB363, quirk_jmicron_ata);
1577DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB364, quirk_jmicron_ata);
1578DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB365, quirk_jmicron_ata);
1579DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB366, quirk_jmicron_ata);
1580DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB368, quirk_jmicron_ata);
1581DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB369, quirk_jmicron_ata);
1582
1583#endif
1584
1585static void quirk_jmicron_async_suspend(struct pci_dev *dev)
1586{
1587 if (dev->multifunction) {
1588 device_disable_async_suspend(&dev->dev);
1589 dev_info(&dev->dev, "async suspend disabled to avoid multi-function power-on ordering issue\n");
1590 }
1591}
1592DECLARE_PCI_FIXUP_CLASS_FINAL(PCI_VENDOR_ID_JMICRON, PCI_ANY_ID, PCI_CLASS_STORAGE_IDE, 8, quirk_jmicron_async_suspend);
1593DECLARE_PCI_FIXUP_CLASS_FINAL(PCI_VENDOR_ID_JMICRON, PCI_ANY_ID, PCI_CLASS_STORAGE_SATA_AHCI, 0, quirk_jmicron_async_suspend);
1594DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_JMICRON, 0x2362, quirk_jmicron_async_suspend);
1595DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_JMICRON, 0x236f, quirk_jmicron_async_suspend);
1596
1597#ifdef CONFIG_X86_IO_APIC
1598static void quirk_alder_ioapic(struct pci_dev *pdev)
1599{
1600 int i;
1601
1602 if ((pdev->class >> 8) != 0xff00)
1603 return;
1604
1605
1606
1607
1608 if (pci_resource_start(pdev, 0) && pci_resource_len(pdev, 0))
1609 insert_resource(&iomem_resource, &pdev->resource[0]);
1610
1611
1612
1613 for (i = 1; i < 6; i++)
1614 memset(&pdev->resource[i], 0, sizeof(pdev->resource[i]));
1615}
1616DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_EESSC, quirk_alder_ioapic);
1617#endif
1618
1619static void quirk_pcie_mch(struct pci_dev *pdev)
1620{
1621 pdev->no_msi = 1;
1622}
1623DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_E7520_MCH, quirk_pcie_mch);
1624DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_E7320_MCH, quirk_pcie_mch);
1625DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_E7525_MCH, quirk_pcie_mch);
1626
1627
1628
1629
1630
1631
1632static void quirk_pcie_pxh(struct pci_dev *dev)
1633{
1634 dev->no_msi = 1;
1635 dev_warn(&dev->dev, "PXH quirk detected; SHPC device MSI disabled\n");
1636}
1637DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXHD_0, quirk_pcie_pxh);
1638DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXHD_1, quirk_pcie_pxh);
1639DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_0, quirk_pcie_pxh);
1640DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_1, quirk_pcie_pxh);
1641DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXHV, quirk_pcie_pxh);
1642
1643
1644
1645
1646
1647static void quirk_intel_pcie_pm(struct pci_dev *dev)
1648{
1649 pci_pm_d3_delay = 120;
1650 dev->no_d1d2 = 1;
1651}
1652
1653DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x25e2, quirk_intel_pcie_pm);
1654DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x25e3, quirk_intel_pcie_pm);
1655DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x25e4, quirk_intel_pcie_pm);
1656DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x25e5, quirk_intel_pcie_pm);
1657DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x25e6, quirk_intel_pcie_pm);
1658DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x25e7, quirk_intel_pcie_pm);
1659DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x25f7, quirk_intel_pcie_pm);
1660DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x25f8, quirk_intel_pcie_pm);
1661DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x25f9, quirk_intel_pcie_pm);
1662DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x25fa, quirk_intel_pcie_pm);
1663DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x2601, quirk_intel_pcie_pm);
1664DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x2602, quirk_intel_pcie_pm);
1665DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x2603, quirk_intel_pcie_pm);
1666DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x2604, quirk_intel_pcie_pm);
1667DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x2605, quirk_intel_pcie_pm);
1668DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x2606, quirk_intel_pcie_pm);
1669DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x2607, quirk_intel_pcie_pm);
1670DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x2608, quirk_intel_pcie_pm);
1671DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x2609, quirk_intel_pcie_pm);
1672DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x260a, quirk_intel_pcie_pm);
1673DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x260b, quirk_intel_pcie_pm);
1674
1675#ifdef CONFIG_X86_IO_APIC
1676
1677
1678
1679
1680
1681
1682static void quirk_reroute_to_boot_interrupts_intel(struct pci_dev *dev)
1683{
1684 if (noioapicquirk || noioapicreroute)
1685 return;
1686
1687 dev->irq_reroute_variant = INTEL_IRQ_REROUTE_VARIANT;
1688 dev_info(&dev->dev, "rerouting interrupts for [%04x:%04x]\n",
1689 dev->vendor, dev->device);
1690}
1691DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_80333_0, quirk_reroute_to_boot_interrupts_intel);
1692DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_80333_1, quirk_reroute_to_boot_interrupts_intel);
1693DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB2_0, quirk_reroute_to_boot_interrupts_intel);
1694DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_0, quirk_reroute_to_boot_interrupts_intel);
1695DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_1, quirk_reroute_to_boot_interrupts_intel);
1696DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXHV, quirk_reroute_to_boot_interrupts_intel);
1697DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_80332_0, quirk_reroute_to_boot_interrupts_intel);
1698DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_80332_1, quirk_reroute_to_boot_interrupts_intel);
1699DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_80333_0, quirk_reroute_to_boot_interrupts_intel);
1700DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_80333_1, quirk_reroute_to_boot_interrupts_intel);
1701DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB2_0, quirk_reroute_to_boot_interrupts_intel);
1702DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_0, quirk_reroute_to_boot_interrupts_intel);
1703DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_1, quirk_reroute_to_boot_interrupts_intel);
1704DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXHV, quirk_reroute_to_boot_interrupts_intel);
1705DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_80332_0, quirk_reroute_to_boot_interrupts_intel);
1706DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_80332_1, quirk_reroute_to_boot_interrupts_intel);
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717#define INTEL_6300_IOAPIC_ABAR 0x40
1718#define INTEL_6300_DISABLE_BOOT_IRQ (1<<14)
1719
1720static void quirk_disable_intel_boot_interrupt(struct pci_dev *dev)
1721{
1722 u16 pci_config_word;
1723
1724 if (noioapicquirk)
1725 return;
1726
1727 pci_read_config_word(dev, INTEL_6300_IOAPIC_ABAR, &pci_config_word);
1728 pci_config_word |= INTEL_6300_DISABLE_BOOT_IRQ;
1729 pci_write_config_word(dev, INTEL_6300_IOAPIC_ABAR, pci_config_word);
1730
1731 dev_info(&dev->dev, "disabled boot interrupts on device [%04x:%04x]\n",
1732 dev->vendor, dev->device);
1733}
1734DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB_10, quirk_disable_intel_boot_interrupt);
1735DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB_10, quirk_disable_intel_boot_interrupt);
1736
1737
1738
1739
1740#define BC_HT1000_FEATURE_REG 0x64
1741#define BC_HT1000_PIC_REGS_ENABLE (1<<0)
1742#define BC_HT1000_MAP_IDX 0xC00
1743#define BC_HT1000_MAP_DATA 0xC01
1744
1745static void quirk_disable_broadcom_boot_interrupt(struct pci_dev *dev)
1746{
1747 u32 pci_config_dword;
1748 u8 irq;
1749
1750 if (noioapicquirk)
1751 return;
1752
1753 pci_read_config_dword(dev, BC_HT1000_FEATURE_REG, &pci_config_dword);
1754 pci_write_config_dword(dev, BC_HT1000_FEATURE_REG, pci_config_dword |
1755 BC_HT1000_PIC_REGS_ENABLE);
1756
1757 for (irq = 0x10; irq < 0x10 + 32; irq++) {
1758 outb(irq, BC_HT1000_MAP_IDX);
1759 outb(0x00, BC_HT1000_MAP_DATA);
1760 }
1761
1762 pci_write_config_dword(dev, BC_HT1000_FEATURE_REG, pci_config_dword);
1763
1764 dev_info(&dev->dev, "disabled boot interrupts on device [%04x:%04x]\n",
1765 dev->vendor, dev->device);
1766}
1767DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_HT1000SB, quirk_disable_broadcom_boot_interrupt);
1768DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_HT1000SB, quirk_disable_broadcom_boot_interrupt);
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778#define AMD_813X_MISC 0x40
1779#define AMD_813X_NOIOAMODE (1<<0)
1780#define AMD_813X_REV_B1 0x12
1781#define AMD_813X_REV_B2 0x13
1782
1783static void quirk_disable_amd_813x_boot_interrupt(struct pci_dev *dev)
1784{
1785 u32 pci_config_dword;
1786
1787 if (noioapicquirk)
1788 return;
1789 if ((dev->revision == AMD_813X_REV_B1) ||
1790 (dev->revision == AMD_813X_REV_B2))
1791 return;
1792
1793 pci_read_config_dword(dev, AMD_813X_MISC, &pci_config_dword);
1794 pci_config_dword &= ~AMD_813X_NOIOAMODE;
1795 pci_write_config_dword(dev, AMD_813X_MISC, pci_config_dword);
1796
1797 dev_info(&dev->dev, "disabled boot interrupts on device [%04x:%04x]\n",
1798 dev->vendor, dev->device);
1799}
1800DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8131_BRIDGE, quirk_disable_amd_813x_boot_interrupt);
1801DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8131_BRIDGE, quirk_disable_amd_813x_boot_interrupt);
1802DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8132_BRIDGE, quirk_disable_amd_813x_boot_interrupt);
1803DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8132_BRIDGE, quirk_disable_amd_813x_boot_interrupt);
1804
1805#define AMD_8111_PCI_IRQ_ROUTING 0x56
1806
1807static void quirk_disable_amd_8111_boot_interrupt(struct pci_dev *dev)
1808{
1809 u16 pci_config_word;
1810
1811 if (noioapicquirk)
1812 return;
1813
1814 pci_read_config_word(dev, AMD_8111_PCI_IRQ_ROUTING, &pci_config_word);
1815 if (!pci_config_word) {
1816 dev_info(&dev->dev, "boot interrupts on device [%04x:%04x] already disabled\n",
1817 dev->vendor, dev->device);
1818 return;
1819 }
1820 pci_write_config_word(dev, AMD_8111_PCI_IRQ_ROUTING, 0);
1821 dev_info(&dev->dev, "disabled boot interrupts on device [%04x:%04x]\n",
1822 dev->vendor, dev->device);
1823}
1824DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8111_SMBUS, quirk_disable_amd_8111_boot_interrupt);
1825DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8111_SMBUS, quirk_disable_amd_8111_boot_interrupt);
1826#endif
1827
1828
1829
1830
1831
1832
1833static void quirk_tc86c001_ide(struct pci_dev *dev)
1834{
1835 struct resource *r = &dev->resource[0];
1836
1837 if (r->start & 0x8) {
1838 r->flags |= IORESOURCE_UNSET;
1839 r->start = 0;
1840 r->end = 0xf;
1841 }
1842}
1843DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_TOSHIBA_2,
1844 PCI_DEVICE_ID_TOSHIBA_TC86C001_IDE,
1845 quirk_tc86c001_ide);
1846
1847
1848
1849
1850
1851
1852
1853
1854static void quirk_plx_pci9050(struct pci_dev *dev)
1855{
1856 unsigned int bar;
1857
1858
1859 if (dev->revision >= 2)
1860 return;
1861 for (bar = 0; bar <= 1; bar++)
1862 if (pci_resource_len(dev, bar) == 0x80 &&
1863 (pci_resource_start(dev, bar) & 0x80)) {
1864 struct resource *r = &dev->resource[bar];
1865 dev_info(&dev->dev, "Re-allocating PLX PCI 9050 BAR %u to length 256 to avoid bit 7 bug\n",
1866 bar);
1867 r->flags |= IORESOURCE_UNSET;
1868 r->start = 0;
1869 r->end = 0xff;
1870 }
1871}
1872DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
1873 quirk_plx_pci9050);
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883DECLARE_PCI_FIXUP_HEADER(0x1402, 0x2000, quirk_plx_pci9050);
1884DECLARE_PCI_FIXUP_HEADER(0x1402, 0x2600, quirk_plx_pci9050);
1885
1886static void quirk_netmos(struct pci_dev *dev)
1887{
1888 unsigned int num_parallel = (dev->subsystem_device & 0xf0) >> 4;
1889 unsigned int num_serial = dev->subsystem_device & 0xf;
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901 switch (dev->device) {
1902 case PCI_DEVICE_ID_NETMOS_9835:
1903
1904 if (dev->subsystem_vendor == PCI_VENDOR_ID_IBM &&
1905 dev->subsystem_device == 0x0299)
1906 return;
1907 case PCI_DEVICE_ID_NETMOS_9735:
1908 case PCI_DEVICE_ID_NETMOS_9745:
1909 case PCI_DEVICE_ID_NETMOS_9845:
1910 case PCI_DEVICE_ID_NETMOS_9855:
1911 if (num_parallel) {
1912 dev_info(&dev->dev, "Netmos %04x (%u parallel, %u serial); changing class SERIAL to OTHER (use parport_serial)\n",
1913 dev->device, num_parallel, num_serial);
1914 dev->class = (PCI_CLASS_COMMUNICATION_OTHER << 8) |
1915 (dev->class & 0xff);
1916 }
1917 }
1918}
1919DECLARE_PCI_FIXUP_CLASS_HEADER(PCI_VENDOR_ID_NETMOS, PCI_ANY_ID,
1920 PCI_CLASS_COMMUNICATION_SERIAL, 8, quirk_netmos);
1921
1922
1923
1924
1925
1926
1927static void quirk_f0_vpd_link(struct pci_dev *dev)
1928{
1929 struct pci_dev *f0;
1930
1931 if (!PCI_FUNC(dev->devfn))
1932 return;
1933
1934 f0 = pci_get_slot(dev->bus, PCI_DEVFN(PCI_SLOT(dev->devfn), 0));
1935 if (!f0)
1936 return;
1937
1938 if (f0->vpd && dev->class == f0->class &&
1939 dev->vendor == f0->vendor && dev->device == f0->device)
1940 dev->dev_flags |= PCI_DEV_FLAGS_VPD_REF_F0;
1941
1942 pci_dev_put(f0);
1943}
1944DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_INTEL, PCI_ANY_ID,
1945 PCI_CLASS_NETWORK_ETHERNET, 8, quirk_f0_vpd_link);
1946
1947static void quirk_e100_interrupt(struct pci_dev *dev)
1948{
1949 u16 command, pmcsr;
1950 u8 __iomem *csr;
1951 u8 cmd_hi;
1952
1953 switch (dev->device) {
1954
1955 case 0x1029:
1956 case 0x1030 ... 0x1034:
1957 case 0x1038 ... 0x103E:
1958 case 0x1050 ... 0x1057:
1959 case 0x1059:
1960 case 0x1064 ... 0x106B:
1961 case 0x1091 ... 0x1095:
1962 case 0x1209:
1963 case 0x1229:
1964 case 0x2449:
1965 case 0x2459:
1966 case 0x245D:
1967 case 0x27DC:
1968 break;
1969 default:
1970 return;
1971 }
1972
1973
1974
1975
1976
1977
1978
1979
1980 pci_read_config_word(dev, PCI_COMMAND, &command);
1981
1982 if (!(command & PCI_COMMAND_MEMORY) || !pci_resource_start(dev, 0))
1983 return;
1984
1985
1986
1987
1988
1989 if (dev->pm_cap) {
1990 pci_read_config_word(dev, dev->pm_cap + PCI_PM_CTRL, &pmcsr);
1991 if ((pmcsr & PCI_PM_CTRL_STATE_MASK) != PCI_D0)
1992 return;
1993 }
1994
1995
1996 csr = ioremap(pci_resource_start(dev, 0), 8);
1997 if (!csr) {
1998 dev_warn(&dev->dev, "Can't map e100 registers\n");
1999 return;
2000 }
2001
2002 cmd_hi = readb(csr + 3);
2003 if (cmd_hi == 0) {
2004 dev_warn(&dev->dev, "Firmware left e100 interrupts enabled; disabling\n");
2005 writeb(1, csr + 3);
2006 }
2007
2008 iounmap(csr);
2009}
2010DECLARE_PCI_FIXUP_CLASS_FINAL(PCI_VENDOR_ID_INTEL, PCI_ANY_ID,
2011 PCI_CLASS_NETWORK_ETHERNET, 8, quirk_e100_interrupt);
2012
2013
2014
2015
2016
2017static void quirk_disable_aspm_l0s(struct pci_dev *dev)
2018{
2019 dev_info(&dev->dev, "Disabling L0s\n");
2020 pci_disable_link_state(dev, PCIE_LINK_STATE_L0S);
2021}
2022DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x10a7, quirk_disable_aspm_l0s);
2023DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x10a9, quirk_disable_aspm_l0s);
2024DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x10b6, quirk_disable_aspm_l0s);
2025DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x10c6, quirk_disable_aspm_l0s);
2026DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x10c7, quirk_disable_aspm_l0s);
2027DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x10c8, quirk_disable_aspm_l0s);
2028DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x10d6, quirk_disable_aspm_l0s);
2029DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x10db, quirk_disable_aspm_l0s);
2030DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x10dd, quirk_disable_aspm_l0s);
2031DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x10e1, quirk_disable_aspm_l0s);
2032DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x10ec, quirk_disable_aspm_l0s);
2033DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x10f1, quirk_disable_aspm_l0s);
2034DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x10f4, quirk_disable_aspm_l0s);
2035DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x1508, quirk_disable_aspm_l0s);
2036
2037static void fixup_rev1_53c810(struct pci_dev *dev)
2038{
2039 u32 class = dev->class;
2040
2041
2042
2043
2044
2045 if (class)
2046 return;
2047
2048 dev->class = PCI_CLASS_STORAGE_SCSI << 8;
2049 dev_info(&dev->dev, "NCR 53c810 rev 1 PCI class overridden (%#08x -> %#08x)\n",
2050 class, dev->class);
2051}
2052DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_NCR, PCI_DEVICE_ID_NCR_53C810, fixup_rev1_53c810);
2053
2054
2055static void quirk_p64h2_1k_io(struct pci_dev *dev)
2056{
2057 u16 en1k;
2058
2059 pci_read_config_word(dev, 0x40, &en1k);
2060
2061 if (en1k & 0x200) {
2062 dev_info(&dev->dev, "Enable I/O Space to 1KB granularity\n");
2063 dev->io_window_1k = 1;
2064 }
2065}
2066DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x1460, quirk_p64h2_1k_io);
2067
2068
2069
2070
2071
2072static void quirk_nvidia_ck804_pcie_aer_ext_cap(struct pci_dev *dev)
2073{
2074 uint8_t b;
2075 if (pci_read_config_byte(dev, 0xf41, &b) == 0) {
2076 if (!(b & 0x20)) {
2077 pci_write_config_byte(dev, 0xf41, b | 0x20);
2078 dev_info(&dev->dev, "Linking AER extended capability\n");
2079 }
2080 }
2081}
2082DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_CK804_PCIE,
2083 quirk_nvidia_ck804_pcie_aer_ext_cap);
2084DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_CK804_PCIE,
2085 quirk_nvidia_ck804_pcie_aer_ext_cap);
2086
2087static void quirk_via_cx700_pci_parking_caching(struct pci_dev *dev)
2088{
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100 struct pci_dev *p = pci_get_device(PCI_VENDOR_ID_VIA,
2101 PCI_DEVICE_ID_VIA_8235_USB_2, NULL);
2102 uint8_t b;
2103
2104
2105
2106 p = pci_get_device(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8235_USB_2, p);
2107 if (!p)
2108 return;
2109 pci_dev_put(p);
2110
2111 if (pci_read_config_byte(dev, 0x76, &b) == 0) {
2112 if (b & 0x40) {
2113
2114 pci_write_config_byte(dev, 0x76, b ^ 0x40);
2115
2116 dev_info(&dev->dev, "Disabling VIA CX700 PCI parking\n");
2117 }
2118 }
2119
2120 if (pci_read_config_byte(dev, 0x72, &b) == 0) {
2121 if (b != 0) {
2122
2123 pci_write_config_byte(dev, 0x72, 0x0);
2124
2125
2126 pci_write_config_byte(dev, 0x75, 0x1);
2127
2128
2129 pci_write_config_byte(dev, 0x77, 0x0);
2130
2131 dev_info(&dev->dev, "Disabling VIA CX700 PCI caching\n");
2132 }
2133 }
2134}
2135DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, 0x324e, quirk_via_cx700_pci_parking_caching);
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148static void quirk_brcm_570x_limit_vpd(struct pci_dev *dev)
2149{
2150
2151
2152
2153
2154 if ((dev->device == PCI_DEVICE_ID_NX2_5706) ||
2155 (dev->device == PCI_DEVICE_ID_NX2_5706S) ||
2156 (dev->device == PCI_DEVICE_ID_NX2_5708) ||
2157 (dev->device == PCI_DEVICE_ID_NX2_5708S) ||
2158 ((dev->device == PCI_DEVICE_ID_NX2_5709) &&
2159 (dev->revision & 0xf0) == 0x0)) {
2160 if (dev->vpd)
2161 dev->vpd->len = 0x80;
2162 }
2163}
2164
2165DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_BROADCOM,
2166 PCI_DEVICE_ID_NX2_5706,
2167 quirk_brcm_570x_limit_vpd);
2168DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_BROADCOM,
2169 PCI_DEVICE_ID_NX2_5706S,
2170 quirk_brcm_570x_limit_vpd);
2171DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_BROADCOM,
2172 PCI_DEVICE_ID_NX2_5708,
2173 quirk_brcm_570x_limit_vpd);
2174DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_BROADCOM,
2175 PCI_DEVICE_ID_NX2_5708S,
2176 quirk_brcm_570x_limit_vpd);
2177DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_BROADCOM,
2178 PCI_DEVICE_ID_NX2_5709,
2179 quirk_brcm_570x_limit_vpd);
2180DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_BROADCOM,
2181 PCI_DEVICE_ID_NX2_5709S,
2182 quirk_brcm_570x_limit_vpd);
2183
2184static void quirk_brcm_5719_limit_mrrs(struct pci_dev *dev)
2185{
2186 u32 rev;
2187
2188 pci_read_config_dword(dev, 0xf4, &rev);
2189
2190
2191 if (rev == 0x05719000) {
2192 int readrq = pcie_get_readrq(dev);
2193 if (readrq > 2048)
2194 pcie_set_readrq(dev, 2048);
2195 }
2196}
2197
2198DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_BROADCOM,
2199 PCI_DEVICE_ID_TIGON3_5719,
2200 quirk_brcm_5719_limit_mrrs);
2201
2202
2203
2204
2205
2206
2207
2208static void quirk_unhide_mch_dev6(struct pci_dev *dev)
2209{
2210 u8 reg;
2211
2212 if (pci_read_config_byte(dev, 0xF4, ®) == 0 && !(reg & 0x02)) {
2213 dev_info(&dev->dev, "Enabling MCH 'Overflow' Device\n");
2214 pci_write_config_byte(dev, 0xF4, reg | 0x02);
2215 }
2216}
2217
2218DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82865_HB,
2219 quirk_unhide_mch_dev6);
2220DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82875_HB,
2221 quirk_unhide_mch_dev6);
2222
2223#ifdef CONFIG_TILEPRO
2224
2225
2226
2227
2228
2229
2230
2231
2232static void quirk_tile_plx_gen1(struct pci_dev *dev)
2233{
2234 if (tile_plx_gen1) {
2235 pci_write_config_dword(dev, 0x98, 0x1);
2236 mdelay(50);
2237 }
2238}
2239DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_PLX, 0x8624, quirk_tile_plx_gen1);
2240#endif
2241
2242#ifdef CONFIG_PCI_MSI
2243
2244
2245
2246
2247
2248
2249static void quirk_disable_all_msi(struct pci_dev *dev)
2250{
2251 pci_no_msi();
2252 dev_warn(&dev->dev, "MSI quirk detected; MSI disabled\n");
2253}
2254DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_GCNB_LE, quirk_disable_all_msi);
2255DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RS400_200, quirk_disable_all_msi);
2256DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RS480, quirk_disable_all_msi);
2257DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT3336, quirk_disable_all_msi);
2258DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT3351, quirk_disable_all_msi);
2259DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT3364, quirk_disable_all_msi);
2260DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8380_0, quirk_disable_all_msi);
2261DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SI, 0x0761, quirk_disable_all_msi);
2262
2263
2264static void quirk_disable_msi(struct pci_dev *dev)
2265{
2266 if (dev->subordinate) {
2267 dev_warn(&dev->dev, "MSI quirk detected; subordinate MSI disabled\n");
2268 dev->subordinate->bus_flags |= PCI_BUS_FLAGS_NO_MSI;
2269 }
2270}
2271DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8131_BRIDGE, quirk_disable_msi);
2272DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, 0xa238, quirk_disable_msi);
2273DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x5a3f, quirk_disable_msi);
2274
2275
2276
2277
2278
2279
2280
2281static void quirk_amd_780_apc_msi(struct pci_dev *host_bridge)
2282{
2283 struct pci_dev *apc_bridge;
2284
2285 apc_bridge = pci_get_slot(host_bridge->bus, PCI_DEVFN(1, 0));
2286 if (apc_bridge) {
2287 if (apc_bridge->device == 0x9602)
2288 quirk_disable_msi(apc_bridge);
2289 pci_dev_put(apc_bridge);
2290 }
2291}
2292DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, 0x9600, quirk_amd_780_apc_msi);
2293DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, 0x9601, quirk_amd_780_apc_msi);
2294
2295
2296
2297static int msi_ht_cap_enabled(struct pci_dev *dev)
2298{
2299 int pos, ttl = PCI_FIND_CAP_TTL;
2300
2301 pos = pci_find_ht_capability(dev, HT_CAPTYPE_MSI_MAPPING);
2302 while (pos && ttl--) {
2303 u8 flags;
2304
2305 if (pci_read_config_byte(dev, pos + HT_MSI_FLAGS,
2306 &flags) == 0) {
2307 dev_info(&dev->dev, "Found %s HT MSI Mapping\n",
2308 flags & HT_MSI_FLAGS_ENABLE ?
2309 "enabled" : "disabled");
2310 return (flags & HT_MSI_FLAGS_ENABLE) != 0;
2311 }
2312
2313 pos = pci_find_next_ht_capability(dev, pos,
2314 HT_CAPTYPE_MSI_MAPPING);
2315 }
2316 return 0;
2317}
2318
2319
2320static void quirk_msi_ht_cap(struct pci_dev *dev)
2321{
2322 if (dev->subordinate && !msi_ht_cap_enabled(dev)) {
2323 dev_warn(&dev->dev, "MSI quirk detected; subordinate MSI disabled\n");
2324 dev->subordinate->bus_flags |= PCI_BUS_FLAGS_NO_MSI;
2325 }
2326}
2327DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_HT2000_PCIE,
2328 quirk_msi_ht_cap);
2329
2330
2331
2332
2333static void quirk_nvidia_ck804_msi_ht_cap(struct pci_dev *dev)
2334{
2335 struct pci_dev *pdev;
2336
2337 if (!dev->subordinate)
2338 return;
2339
2340
2341
2342
2343 pdev = pci_get_slot(dev->bus, 0);
2344 if (!pdev)
2345 return;
2346 if (!msi_ht_cap_enabled(dev) && !msi_ht_cap_enabled(pdev)) {
2347 dev_warn(&dev->dev, "MSI quirk detected; subordinate MSI disabled\n");
2348 dev->subordinate->bus_flags |= PCI_BUS_FLAGS_NO_MSI;
2349 }
2350 pci_dev_put(pdev);
2351}
2352DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_CK804_PCIE,
2353 quirk_nvidia_ck804_msi_ht_cap);
2354
2355
2356static void ht_enable_msi_mapping(struct pci_dev *dev)
2357{
2358 int pos, ttl = PCI_FIND_CAP_TTL;
2359
2360 pos = pci_find_ht_capability(dev, HT_CAPTYPE_MSI_MAPPING);
2361 while (pos && ttl--) {
2362 u8 flags;
2363
2364 if (pci_read_config_byte(dev, pos + HT_MSI_FLAGS,
2365 &flags) == 0) {
2366 dev_info(&dev->dev, "Enabling HT MSI Mapping\n");
2367
2368 pci_write_config_byte(dev, pos + HT_MSI_FLAGS,
2369 flags | HT_MSI_FLAGS_ENABLE);
2370 }
2371 pos = pci_find_next_ht_capability(dev, pos,
2372 HT_CAPTYPE_MSI_MAPPING);
2373 }
2374}
2375DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_SERVERWORKS,
2376 PCI_DEVICE_ID_SERVERWORKS_HT1000_PXB,
2377 ht_enable_msi_mapping);
2378
2379DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8132_BRIDGE,
2380 ht_enable_msi_mapping);
2381
2382
2383
2384
2385
2386static void nvenet_msi_disable(struct pci_dev *dev)
2387{
2388 const char *board_name = dmi_get_system_info(DMI_BOARD_NAME);
2389
2390 if (board_name &&
2391 (strstr(board_name, "P5N32-SLI PREMIUM") ||
2392 strstr(board_name, "P5N32-E SLI"))) {
2393 dev_info(&dev->dev, "Disabling msi for MCP55 NIC on P5N32-SLI\n");
2394 dev->no_msi = 1;
2395 }
2396}
2397DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_NVIDIA,
2398 PCI_DEVICE_ID_NVIDIA_NVENET_15,
2399 nvenet_msi_disable);
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411static void nvbridge_check_legacy_irq_routing(struct pci_dev *dev)
2412{
2413 u32 cfg;
2414
2415 if (!pci_find_capability(dev, PCI_CAP_ID_HT))
2416 return;
2417
2418 pci_read_config_dword(dev, 0x74, &cfg);
2419
2420 if (cfg & ((1 << 2) | (1 << 15))) {
2421 printk(KERN_INFO "Rewriting irq routing register on MCP55\n");
2422 cfg &= ~((1 << 2) | (1 << 15));
2423 pci_write_config_dword(dev, 0x74, cfg);
2424 }
2425}
2426
2427DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_NVIDIA,
2428 PCI_DEVICE_ID_NVIDIA_MCP55_BRIDGE_V0,
2429 nvbridge_check_legacy_irq_routing);
2430
2431DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_NVIDIA,
2432 PCI_DEVICE_ID_NVIDIA_MCP55_BRIDGE_V4,
2433 nvbridge_check_legacy_irq_routing);
2434
2435static int ht_check_msi_mapping(struct pci_dev *dev)
2436{
2437 int pos, ttl = PCI_FIND_CAP_TTL;
2438 int found = 0;
2439
2440
2441 pos = pci_find_ht_capability(dev, HT_CAPTYPE_MSI_MAPPING);
2442 while (pos && ttl--) {
2443 u8 flags;
2444
2445 if (found < 1)
2446 found = 1;
2447 if (pci_read_config_byte(dev, pos + HT_MSI_FLAGS,
2448 &flags) == 0) {
2449 if (flags & HT_MSI_FLAGS_ENABLE) {
2450 if (found < 2) {
2451 found = 2;
2452 break;
2453 }
2454 }
2455 }
2456 pos = pci_find_next_ht_capability(dev, pos,
2457 HT_CAPTYPE_MSI_MAPPING);
2458 }
2459
2460 return found;
2461}
2462
2463static int host_bridge_with_leaf(struct pci_dev *host_bridge)
2464{
2465 struct pci_dev *dev;
2466 int pos;
2467 int i, dev_no;
2468 int found = 0;
2469
2470 dev_no = host_bridge->devfn >> 3;
2471 for (i = dev_no + 1; i < 0x20; i++) {
2472 dev = pci_get_slot(host_bridge->bus, PCI_DEVFN(i, 0));
2473 if (!dev)
2474 continue;
2475
2476
2477 pos = pci_find_ht_capability(dev, HT_CAPTYPE_SLAVE);
2478 if (pos != 0) {
2479 pci_dev_put(dev);
2480 break;
2481 }
2482
2483 if (ht_check_msi_mapping(dev)) {
2484 found = 1;
2485 pci_dev_put(dev);
2486 break;
2487 }
2488 pci_dev_put(dev);
2489 }
2490
2491 return found;
2492}
2493
2494#define PCI_HT_CAP_SLAVE_CTRL0 4
2495#define PCI_HT_CAP_SLAVE_CTRL1 8
2496
2497static int is_end_of_ht_chain(struct pci_dev *dev)
2498{
2499 int pos, ctrl_off;
2500 int end = 0;
2501 u16 flags, ctrl;
2502
2503 pos = pci_find_ht_capability(dev, HT_CAPTYPE_SLAVE);
2504
2505 if (!pos)
2506 goto out;
2507
2508 pci_read_config_word(dev, pos + PCI_CAP_FLAGS, &flags);
2509
2510 ctrl_off = ((flags >> 10) & 1) ?
2511 PCI_HT_CAP_SLAVE_CTRL0 : PCI_HT_CAP_SLAVE_CTRL1;
2512 pci_read_config_word(dev, pos + ctrl_off, &ctrl);
2513
2514 if (ctrl & (1 << 6))
2515 end = 1;
2516
2517out:
2518 return end;
2519}
2520
2521static void nv_ht_enable_msi_mapping(struct pci_dev *dev)
2522{
2523 struct pci_dev *host_bridge;
2524 int pos;
2525 int i, dev_no;
2526 int found = 0;
2527
2528 dev_no = dev->devfn >> 3;
2529 for (i = dev_no; i >= 0; i--) {
2530 host_bridge = pci_get_slot(dev->bus, PCI_DEVFN(i, 0));
2531 if (!host_bridge)
2532 continue;
2533
2534 pos = pci_find_ht_capability(host_bridge, HT_CAPTYPE_SLAVE);
2535 if (pos != 0) {
2536 found = 1;
2537 break;
2538 }
2539 pci_dev_put(host_bridge);
2540 }
2541
2542 if (!found)
2543 return;
2544
2545
2546 if (host_bridge == dev && is_end_of_ht_chain(host_bridge) &&
2547 host_bridge_with_leaf(host_bridge))
2548 goto out;
2549
2550
2551 if (msi_ht_cap_enabled(host_bridge))
2552 goto out;
2553
2554 ht_enable_msi_mapping(dev);
2555
2556out:
2557 pci_dev_put(host_bridge);
2558}
2559
2560static void ht_disable_msi_mapping(struct pci_dev *dev)
2561{
2562 int pos, ttl = PCI_FIND_CAP_TTL;
2563
2564 pos = pci_find_ht_capability(dev, HT_CAPTYPE_MSI_MAPPING);
2565 while (pos && ttl--) {
2566 u8 flags;
2567
2568 if (pci_read_config_byte(dev, pos + HT_MSI_FLAGS,
2569 &flags) == 0) {
2570 dev_info(&dev->dev, "Disabling HT MSI Mapping\n");
2571
2572 pci_write_config_byte(dev, pos + HT_MSI_FLAGS,
2573 flags & ~HT_MSI_FLAGS_ENABLE);
2574 }
2575 pos = pci_find_next_ht_capability(dev, pos,
2576 HT_CAPTYPE_MSI_MAPPING);
2577 }
2578}
2579
2580static void __nv_msi_ht_cap_quirk(struct pci_dev *dev, int all)
2581{
2582 struct pci_dev *host_bridge;
2583 int pos;
2584 int found;
2585
2586 if (!pci_msi_enabled())
2587 return;
2588
2589
2590 found = ht_check_msi_mapping(dev);
2591
2592
2593 if (found == 0)
2594 return;
2595
2596
2597
2598
2599
2600 host_bridge = pci_get_bus_and_slot(0, PCI_DEVFN(0, 0));
2601 if (host_bridge == NULL) {
2602 dev_warn(&dev->dev, "nv_msi_ht_cap_quirk didn't locate host bridge\n");
2603 return;
2604 }
2605
2606 pos = pci_find_ht_capability(host_bridge, HT_CAPTYPE_SLAVE);
2607 if (pos != 0) {
2608
2609 if (found == 1) {
2610
2611 if (all)
2612 ht_enable_msi_mapping(dev);
2613 else
2614 nv_ht_enable_msi_mapping(dev);
2615 }
2616 goto out;
2617 }
2618
2619
2620 if (found == 1)
2621 goto out;
2622
2623
2624 ht_disable_msi_mapping(dev);
2625
2626out:
2627 pci_dev_put(host_bridge);
2628}
2629
2630static void nv_msi_ht_cap_quirk_all(struct pci_dev *dev)
2631{
2632 return __nv_msi_ht_cap_quirk(dev, 1);
2633}
2634
2635static void nv_msi_ht_cap_quirk_leaf(struct pci_dev *dev)
2636{
2637 return __nv_msi_ht_cap_quirk(dev, 0);
2638}
2639
2640DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NVIDIA, PCI_ANY_ID, nv_msi_ht_cap_quirk_leaf);
2641DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_NVIDIA, PCI_ANY_ID, nv_msi_ht_cap_quirk_leaf);
2642
2643DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AL, PCI_ANY_ID, nv_msi_ht_cap_quirk_all);
2644DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_AL, PCI_ANY_ID, nv_msi_ht_cap_quirk_all);
2645
2646static void quirk_msi_intx_disable_bug(struct pci_dev *dev)
2647{
2648 dev->dev_flags |= PCI_DEV_FLAGS_MSI_INTX_DISABLE_BUG;
2649}
2650static void quirk_msi_intx_disable_ati_bug(struct pci_dev *dev)
2651{
2652 struct pci_dev *p;
2653
2654
2655
2656
2657
2658 p = pci_get_device(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_SBX00_SMBUS,
2659 NULL);
2660 if (!p)
2661 return;
2662
2663 if ((p->revision < 0x3B) && (p->revision >= 0x30))
2664 dev->dev_flags |= PCI_DEV_FLAGS_MSI_INTX_DISABLE_BUG;
2665 pci_dev_put(p);
2666}
2667static void quirk_msi_intx_disable_qca_bug(struct pci_dev *dev)
2668{
2669
2670 if (dev->revision < 0x18) {
2671 dev_info(&dev->dev, "set MSI_INTX_DISABLE_BUG flag\n");
2672 dev->dev_flags |= PCI_DEV_FLAGS_MSI_INTX_DISABLE_BUG;
2673 }
2674}
2675DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_BROADCOM,
2676 PCI_DEVICE_ID_TIGON3_5780,
2677 quirk_msi_intx_disable_bug);
2678DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_BROADCOM,
2679 PCI_DEVICE_ID_TIGON3_5780S,
2680 quirk_msi_intx_disable_bug);
2681DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_BROADCOM,
2682 PCI_DEVICE_ID_TIGON3_5714,
2683 quirk_msi_intx_disable_bug);
2684DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_BROADCOM,
2685 PCI_DEVICE_ID_TIGON3_5714S,
2686 quirk_msi_intx_disable_bug);
2687DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_BROADCOM,
2688 PCI_DEVICE_ID_TIGON3_5715,
2689 quirk_msi_intx_disable_bug);
2690DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_BROADCOM,
2691 PCI_DEVICE_ID_TIGON3_5715S,
2692 quirk_msi_intx_disable_bug);
2693
2694DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x4390,
2695 quirk_msi_intx_disable_ati_bug);
2696DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x4391,
2697 quirk_msi_intx_disable_ati_bug);
2698DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x4392,
2699 quirk_msi_intx_disable_ati_bug);
2700DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x4393,
2701 quirk_msi_intx_disable_ati_bug);
2702DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x4394,
2703 quirk_msi_intx_disable_ati_bug);
2704
2705DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x4373,
2706 quirk_msi_intx_disable_bug);
2707DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x4374,
2708 quirk_msi_intx_disable_bug);
2709DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x4375,
2710 quirk_msi_intx_disable_bug);
2711
2712DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATTANSIC, 0x1062,
2713 quirk_msi_intx_disable_bug);
2714DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATTANSIC, 0x1063,
2715 quirk_msi_intx_disable_bug);
2716DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATTANSIC, 0x2060,
2717 quirk_msi_intx_disable_bug);
2718DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATTANSIC, 0x2062,
2719 quirk_msi_intx_disable_bug);
2720DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATTANSIC, 0x1073,
2721 quirk_msi_intx_disable_bug);
2722DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATTANSIC, 0x1083,
2723 quirk_msi_intx_disable_bug);
2724DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATTANSIC, 0x1090,
2725 quirk_msi_intx_disable_qca_bug);
2726DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATTANSIC, 0x1091,
2727 quirk_msi_intx_disable_qca_bug);
2728DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATTANSIC, 0x10a0,
2729 quirk_msi_intx_disable_qca_bug);
2730DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATTANSIC, 0x10a1,
2731 quirk_msi_intx_disable_qca_bug);
2732DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATTANSIC, 0xe091,
2733 quirk_msi_intx_disable_qca_bug);
2734#endif
2735
2736
2737
2738
2739
2740
2741
2742static void quirk_hotplug_bridge(struct pci_dev *dev)
2743{
2744 dev->is_hotplug_bridge = 1;
2745}
2746
2747DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_HINT, 0x0020, quirk_hotplug_bridge);
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776#ifdef CONFIG_MMC_RICOH_MMC
2777static void ricoh_mmc_fixup_rl5c476(struct pci_dev *dev)
2778{
2779
2780 u8 write_enable;
2781 u8 write_target;
2782 u8 disable;
2783
2784
2785 if (PCI_FUNC(dev->devfn))
2786 return;
2787
2788 pci_read_config_byte(dev, 0xB7, &disable);
2789 if (disable & 0x02)
2790 return;
2791
2792 pci_read_config_byte(dev, 0x8E, &write_enable);
2793 pci_write_config_byte(dev, 0x8E, 0xAA);
2794 pci_read_config_byte(dev, 0x8D, &write_target);
2795 pci_write_config_byte(dev, 0x8D, 0xB7);
2796 pci_write_config_byte(dev, 0xB7, disable | 0x02);
2797 pci_write_config_byte(dev, 0x8E, write_enable);
2798 pci_write_config_byte(dev, 0x8D, write_target);
2799
2800 dev_notice(&dev->dev, "proprietary Ricoh MMC controller disabled (via cardbus function)\n");
2801 dev_notice(&dev->dev, "MMC cards are now supported by standard SDHCI controller\n");
2802}
2803DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_RL5C476, ricoh_mmc_fixup_rl5c476);
2804DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_RL5C476, ricoh_mmc_fixup_rl5c476);
2805
2806static void ricoh_mmc_fixup_r5c832(struct pci_dev *dev)
2807{
2808
2809 u8 write_enable;
2810 u8 disable;
2811
2812
2813 if (PCI_FUNC(dev->devfn))
2814 return;
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827 if (dev->device == PCI_DEVICE_ID_RICOH_R5CE822 ||
2828 dev->device == PCI_DEVICE_ID_RICOH_R5CE823) {
2829 pci_write_config_byte(dev, 0xf9, 0xfc);
2830 pci_write_config_byte(dev, 0x150, 0x10);
2831 pci_write_config_byte(dev, 0xf9, 0x00);
2832 pci_write_config_byte(dev, 0xfc, 0x01);
2833 pci_write_config_byte(dev, 0xe1, 0x32);
2834 pci_write_config_byte(dev, 0xfc, 0x00);
2835
2836 dev_notice(&dev->dev, "MMC controller base frequency changed to 50Mhz.\n");
2837 }
2838
2839 pci_read_config_byte(dev, 0xCB, &disable);
2840
2841 if (disable & 0x02)
2842 return;
2843
2844 pci_read_config_byte(dev, 0xCA, &write_enable);
2845 pci_write_config_byte(dev, 0xCA, 0x57);
2846 pci_write_config_byte(dev, 0xCB, disable | 0x02);
2847 pci_write_config_byte(dev, 0xCA, write_enable);
2848
2849 dev_notice(&dev->dev, "proprietary Ricoh MMC controller disabled (via firewire function)\n");
2850 dev_notice(&dev->dev, "MMC cards are now supported by standard SDHCI controller\n");
2851
2852}
2853DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_R5C832, ricoh_mmc_fixup_r5c832);
2854DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_R5C832, ricoh_mmc_fixup_r5c832);
2855DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_R5CE822, ricoh_mmc_fixup_r5c832);
2856DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_R5CE822, ricoh_mmc_fixup_r5c832);
2857DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_R5CE823, ricoh_mmc_fixup_r5c832);
2858DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_R5CE823, ricoh_mmc_fixup_r5c832);
2859#endif
2860
2861#ifdef CONFIG_DMAR_TABLE
2862#define VTUNCERRMSK_REG 0x1ac
2863#define VTD_MSK_SPEC_ERRORS (1 << 31)
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874static void vtd_mask_spec_errors(struct pci_dev *dev)
2875{
2876 u32 word;
2877
2878 pci_read_config_dword(dev, VTUNCERRMSK_REG, &word);
2879 pci_write_config_dword(dev, VTUNCERRMSK_REG, word | VTD_MSK_SPEC_ERRORS);
2880}
2881DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x342e, vtd_mask_spec_errors);
2882DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x3c28, vtd_mask_spec_errors);
2883#endif
2884
2885static void fixup_ti816x_class(struct pci_dev *dev)
2886{
2887 u32 class = dev->class;
2888
2889
2890 dev->class = PCI_CLASS_MULTIMEDIA_VIDEO << 8;
2891 dev_info(&dev->dev, "PCI class overridden (%#08x -> %#08x)\n",
2892 class, dev->class);
2893}
2894DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_TI, 0xb800,
2895 PCI_CLASS_NOT_DEFINED, 8, fixup_ti816x_class);
2896
2897
2898
2899
2900static void fixup_mpss_256(struct pci_dev *dev)
2901{
2902 dev->pcie_mpss = 1;
2903}
2904DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_SOLARFLARE,
2905 PCI_DEVICE_ID_SOLARFLARE_SFC4000A_0, fixup_mpss_256);
2906DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_SOLARFLARE,
2907 PCI_DEVICE_ID_SOLARFLARE_SFC4000A_1, fixup_mpss_256);
2908DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_SOLARFLARE,
2909 PCI_DEVICE_ID_SOLARFLARE_SFC4000B, fixup_mpss_256);
2910
2911
2912
2913
2914
2915
2916
2917
2918static void quirk_intel_mc_errata(struct pci_dev *dev)
2919{
2920 int err;
2921 u16 rcc;
2922
2923 if (pcie_bus_config == PCIE_BUS_TUNE_OFF ||
2924 pcie_bus_config == PCIE_BUS_DEFAULT)
2925 return;
2926
2927
2928
2929
2930
2931 err = pci_read_config_word(dev, 0x48, &rcc);
2932 if (err) {
2933 dev_err(&dev->dev, "Error attempting to read the read completion coalescing register\n");
2934 return;
2935 }
2936
2937 if (!(rcc & (1 << 10)))
2938 return;
2939
2940 rcc &= ~(1 << 10);
2941
2942 err = pci_write_config_word(dev, 0x48, rcc);
2943 if (err) {
2944 dev_err(&dev->dev, "Error attempting to write the read completion coalescing register\n");
2945 return;
2946 }
2947
2948 pr_info_once("Read completion coalescing disabled due to hardware errata relating to 256B MPS\n");
2949}
2950
2951DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x25c0, quirk_intel_mc_errata);
2952DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x25d0, quirk_intel_mc_errata);
2953DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x25d4, quirk_intel_mc_errata);
2954DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x25d8, quirk_intel_mc_errata);
2955DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x25e2, quirk_intel_mc_errata);
2956DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x25e3, quirk_intel_mc_errata);
2957DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x25e4, quirk_intel_mc_errata);
2958DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x25e5, quirk_intel_mc_errata);
2959DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x25e6, quirk_intel_mc_errata);
2960DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x25e7, quirk_intel_mc_errata);
2961DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x25f7, quirk_intel_mc_errata);
2962DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x25f8, quirk_intel_mc_errata);
2963DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x25f9, quirk_intel_mc_errata);
2964DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x25fa, quirk_intel_mc_errata);
2965
2966DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x65c0, quirk_intel_mc_errata);
2967DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x65e2, quirk_intel_mc_errata);
2968DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x65e3, quirk_intel_mc_errata);
2969DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x65e4, quirk_intel_mc_errata);
2970DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x65e5, quirk_intel_mc_errata);
2971DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x65e6, quirk_intel_mc_errata);
2972DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x65e7, quirk_intel_mc_errata);
2973DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x65f7, quirk_intel_mc_errata);
2974DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x65f8, quirk_intel_mc_errata);
2975DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x65f9, quirk_intel_mc_errata);
2976DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x65fa, quirk_intel_mc_errata);
2977
2978
2979
2980
2981
2982
2983
2984static void quirk_intel_ntb(struct pci_dev *dev)
2985{
2986 int rc;
2987 u8 val;
2988
2989 rc = pci_read_config_byte(dev, 0x00D0, &val);
2990 if (rc)
2991 return;
2992
2993 dev->resource[2].end = dev->resource[2].start + ((u64) 1 << val) - 1;
2994
2995 rc = pci_read_config_byte(dev, 0x00D1, &val);
2996 if (rc)
2997 return;
2998
2999 dev->resource[4].end = dev->resource[4].start + ((u64) 1 << val) - 1;
3000}
3001DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x0e08, quirk_intel_ntb);
3002DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x0e0d, quirk_intel_ntb);
3003
3004static ktime_t fixup_debug_start(struct pci_dev *dev,
3005 void (*fn)(struct pci_dev *dev))
3006{
3007 ktime_t calltime = ktime_set(0, 0);
3008
3009 dev_dbg(&dev->dev, "calling %pF\n", fn);
3010 if (initcall_debug) {
3011 pr_debug("calling %pF @ %i for %s\n",
3012 fn, task_pid_nr(current), dev_name(&dev->dev));
3013 calltime = ktime_get();
3014 }
3015
3016 return calltime;
3017}
3018
3019static void fixup_debug_report(struct pci_dev *dev, ktime_t calltime,
3020 void (*fn)(struct pci_dev *dev))
3021{
3022 ktime_t delta, rettime;
3023 unsigned long long duration;
3024
3025 if (initcall_debug) {
3026 rettime = ktime_get();
3027 delta = ktime_sub(rettime, calltime);
3028 duration = (unsigned long long) ktime_to_ns(delta) >> 10;
3029 pr_debug("pci fixup %pF returned after %lld usecs for %s\n",
3030 fn, duration, dev_name(&dev->dev));
3031 }
3032}
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046#define I915_DEIER_REG 0x4400c
3047static void disable_igfx_irq(struct pci_dev *dev)
3048{
3049 void __iomem *regs = pci_iomap(dev, 0, 0);
3050 if (regs == NULL) {
3051 dev_warn(&dev->dev, "igfx quirk: Can't iomap PCI device\n");
3052 return;
3053 }
3054
3055
3056 if (readl(regs + I915_DEIER_REG) != 0) {
3057 dev_warn(&dev->dev, "BIOS left Intel GPU interrupts enabled; disabling\n");
3058
3059 writel(0, regs + I915_DEIER_REG);
3060 }
3061
3062 pci_iounmap(dev, regs);
3063}
3064DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x0102, disable_igfx_irq);
3065DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x010a, disable_igfx_irq);
3066DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x0152, disable_igfx_irq);
3067
3068
3069
3070
3071
3072static void quirk_remove_d3_delay(struct pci_dev *dev)
3073{
3074 dev->d3_delay = 0;
3075}
3076DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x0c00, quirk_remove_d3_delay);
3077DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x0412, quirk_remove_d3_delay);
3078DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x0c0c, quirk_remove_d3_delay);
3079DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x8c31, quirk_remove_d3_delay);
3080DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x8c3a, quirk_remove_d3_delay);
3081DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x8c3d, quirk_remove_d3_delay);
3082DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x8c2d, quirk_remove_d3_delay);
3083DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x8c20, quirk_remove_d3_delay);
3084DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x8c18, quirk_remove_d3_delay);
3085DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x8c1c, quirk_remove_d3_delay);
3086DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x8c26, quirk_remove_d3_delay);
3087DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x8c4e, quirk_remove_d3_delay);
3088DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x8c02, quirk_remove_d3_delay);
3089DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x8c22, quirk_remove_d3_delay);
3090
3091DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x2280, quirk_remove_d3_delay);
3092DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x22b0, quirk_remove_d3_delay);
3093DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x22b8, quirk_remove_d3_delay);
3094DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x22d8, quirk_remove_d3_delay);
3095DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x22dc, quirk_remove_d3_delay);
3096DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x22b5, quirk_remove_d3_delay);
3097DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x22b7, quirk_remove_d3_delay);
3098DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x2298, quirk_remove_d3_delay);
3099DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x229c, quirk_remove_d3_delay);
3100
3101
3102
3103
3104
3105static void quirk_broken_intx_masking(struct pci_dev *dev)
3106{
3107 dev->broken_intx_masking = 1;
3108}
3109DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_CHELSIO, 0x0030,
3110 quirk_broken_intx_masking);
3111DECLARE_PCI_FIXUP_HEADER(0x1814, 0x0601,
3112 quirk_broken_intx_masking);
3113
3114
3115
3116
3117
3118
3119DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_REALTEK, 0x8169,
3120 quirk_broken_intx_masking);
3121DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_MELLANOX, PCI_ANY_ID,
3122 quirk_broken_intx_masking);
3123
3124static void quirk_no_bus_reset(struct pci_dev *dev)
3125{
3126 dev->dev_flags |= PCI_DEV_FLAGS_NO_BUS_RESET;
3127}
3128
3129
3130
3131
3132
3133
3134
3135
3136DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATHEROS, 0x0030, quirk_no_bus_reset);
3137
3138static void quirk_no_pm_reset(struct pci_dev *dev)
3139{
3140
3141
3142
3143
3144 if (!pci_is_root_bus(dev->bus))
3145 dev->dev_flags |= PCI_DEV_FLAGS_NO_PM_RESET;
3146}
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156DECLARE_PCI_FIXUP_CLASS_HEADER(PCI_VENDOR_ID_ATI, PCI_ANY_ID,
3157 PCI_CLASS_DISPLAY_VGA, 8, quirk_no_pm_reset);
3158
3159#ifdef CONFIG_ACPI
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175static void quirk_apple_poweroff_thunderbolt(struct pci_dev *dev)
3176{
3177 acpi_handle bridge, SXIO, SXFP, SXLV;
3178
3179 if (!dmi_match(DMI_BOARD_VENDOR, "Apple Inc."))
3180 return;
3181 if (pci_pcie_type(dev) != PCI_EXP_TYPE_UPSTREAM)
3182 return;
3183 bridge = ACPI_HANDLE(&dev->dev);
3184 if (!bridge)
3185 return;
3186
3187
3188
3189
3190
3191
3192 if (ACPI_FAILURE(acpi_get_handle(bridge, "DSB0.NHI0.SXIO", &SXIO))
3193 || ACPI_FAILURE(acpi_get_handle(bridge, "DSB0.NHI0.SXFP", &SXFP))
3194 || ACPI_FAILURE(acpi_get_handle(bridge, "DSB0.NHI0.SXLV", &SXLV)))
3195 return;
3196 dev_info(&dev->dev, "quirk: cutting power to thunderbolt controller...\n");
3197
3198
3199 acpi_execute_simple_method(SXIO, NULL, 1);
3200 acpi_execute_simple_method(SXFP, NULL, 0);
3201 msleep(300);
3202 acpi_execute_simple_method(SXLV, NULL, 0);
3203 acpi_execute_simple_method(SXIO, NULL, 0);
3204 acpi_execute_simple_method(SXLV, NULL, 0);
3205}
3206DECLARE_PCI_FIXUP_SUSPEND_LATE(PCI_VENDOR_ID_INTEL, 0x1547,
3207 quirk_apple_poweroff_thunderbolt);
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218static void quirk_apple_wait_for_thunderbolt(struct pci_dev *dev)
3219{
3220 struct pci_dev *sibling = NULL;
3221 struct pci_dev *nhi = NULL;
3222
3223 if (!dmi_match(DMI_BOARD_VENDOR, "Apple Inc."))
3224 return;
3225 if (pci_pcie_type(dev) != PCI_EXP_TYPE_DOWNSTREAM)
3226 return;
3227
3228
3229
3230
3231 sibling = pci_get_slot(dev->bus, 0x0);
3232 if (sibling == dev)
3233 goto out;
3234 if (!sibling || !sibling->subordinate)
3235 goto out;
3236 nhi = pci_get_slot(sibling->subordinate, 0x0);
3237 if (!nhi)
3238 goto out;
3239 if (nhi->vendor != PCI_VENDOR_ID_INTEL
3240 || (nhi->device != 0x1547 && nhi->device != 0x156c)
3241 || nhi->subsystem_vendor != 0x2222
3242 || nhi->subsystem_device != 0x1111)
3243 goto out;
3244 dev_info(&dev->dev, "quirk: waiting for thunderbolt to reestablish PCI tunnels...\n");
3245 device_pm_wait_for_dev(&dev->dev, &nhi->dev);
3246out:
3247 pci_dev_put(nhi);
3248 pci_dev_put(sibling);
3249}
3250DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_INTEL, 0x1547,
3251 quirk_apple_wait_for_thunderbolt);
3252DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_INTEL, 0x156d,
3253 quirk_apple_wait_for_thunderbolt);
3254#endif
3255
3256static void pci_do_fixups(struct pci_dev *dev, struct pci_fixup *f,
3257 struct pci_fixup *end)
3258{
3259 ktime_t calltime;
3260
3261 for (; f < end; f++)
3262 if ((f->class == (u32) (dev->class >> f->class_shift) ||
3263 f->class == (u32) PCI_ANY_ID) &&
3264 (f->vendor == dev->vendor ||
3265 f->vendor == (u16) PCI_ANY_ID) &&
3266 (f->device == dev->device ||
3267 f->device == (u16) PCI_ANY_ID)) {
3268 calltime = fixup_debug_start(dev, f->hook);
3269 f->hook(dev);
3270 fixup_debug_report(dev, calltime, f->hook);
3271 }
3272}
3273
3274extern struct pci_fixup __start_pci_fixups_early[];
3275extern struct pci_fixup __end_pci_fixups_early[];
3276extern struct pci_fixup __start_pci_fixups_header[];
3277extern struct pci_fixup __end_pci_fixups_header[];
3278extern struct pci_fixup __start_pci_fixups_final[];
3279extern struct pci_fixup __end_pci_fixups_final[];
3280extern struct pci_fixup __start_pci_fixups_enable[];
3281extern struct pci_fixup __end_pci_fixups_enable[];
3282extern struct pci_fixup __start_pci_fixups_resume[];
3283extern struct pci_fixup __end_pci_fixups_resume[];
3284extern struct pci_fixup __start_pci_fixups_resume_early[];
3285extern struct pci_fixup __end_pci_fixups_resume_early[];
3286extern struct pci_fixup __start_pci_fixups_suspend[];
3287extern struct pci_fixup __end_pci_fixups_suspend[];
3288extern struct pci_fixup __start_pci_fixups_suspend_late[];
3289extern struct pci_fixup __end_pci_fixups_suspend_late[];
3290
3291static bool pci_apply_fixup_final_quirks;
3292
3293void pci_fixup_device(enum pci_fixup_pass pass, struct pci_dev *dev)
3294{
3295 struct pci_fixup *start, *end;
3296
3297 switch (pass) {
3298 case pci_fixup_early:
3299 start = __start_pci_fixups_early;
3300 end = __end_pci_fixups_early;
3301 break;
3302
3303 case pci_fixup_header:
3304 start = __start_pci_fixups_header;
3305 end = __end_pci_fixups_header;
3306 break;
3307
3308 case pci_fixup_final:
3309 if (!pci_apply_fixup_final_quirks)
3310 return;
3311 start = __start_pci_fixups_final;
3312 end = __end_pci_fixups_final;
3313 break;
3314
3315 case pci_fixup_enable:
3316 start = __start_pci_fixups_enable;
3317 end = __end_pci_fixups_enable;
3318 break;
3319
3320 case pci_fixup_resume:
3321 start = __start_pci_fixups_resume;
3322 end = __end_pci_fixups_resume;
3323 break;
3324
3325 case pci_fixup_resume_early:
3326 start = __start_pci_fixups_resume_early;
3327 end = __end_pci_fixups_resume_early;
3328 break;
3329
3330 case pci_fixup_suspend:
3331 start = __start_pci_fixups_suspend;
3332 end = __end_pci_fixups_suspend;
3333 break;
3334
3335 case pci_fixup_suspend_late:
3336 start = __start_pci_fixups_suspend_late;
3337 end = __end_pci_fixups_suspend_late;
3338 break;
3339
3340 default:
3341
3342 return;
3343 }
3344 pci_do_fixups(dev, start, end);
3345}
3346EXPORT_SYMBOL(pci_fixup_device);
3347
3348
3349static int __init pci_apply_final_quirks(void)
3350{
3351 struct pci_dev *dev = NULL;
3352 u8 cls = 0;
3353 u8 tmp;
3354
3355 if (pci_cache_line_size)
3356 printk(KERN_DEBUG "PCI: CLS %u bytes\n",
3357 pci_cache_line_size << 2);
3358
3359 pci_apply_fixup_final_quirks = true;
3360 for_each_pci_dev(dev) {
3361 pci_fixup_device(pci_fixup_final, dev);
3362
3363
3364
3365
3366
3367 if (!pci_cache_line_size) {
3368 pci_read_config_byte(dev, PCI_CACHE_LINE_SIZE, &tmp);
3369 if (!cls)
3370 cls = tmp;
3371 if (!tmp || cls == tmp)
3372 continue;
3373
3374 printk(KERN_DEBUG "PCI: CLS mismatch (%u != %u), using %u bytes\n",
3375 cls << 2, tmp << 2,
3376 pci_dfl_cache_line_size << 2);
3377 pci_cache_line_size = pci_dfl_cache_line_size;
3378 }
3379 }
3380
3381 if (!pci_cache_line_size) {
3382 printk(KERN_DEBUG "PCI: CLS %u bytes, default %u\n",
3383 cls << 2, pci_dfl_cache_line_size << 2);
3384 pci_cache_line_size = cls ? cls : pci_dfl_cache_line_size;
3385 }
3386
3387 return 0;
3388}
3389
3390fs_initcall_sync(pci_apply_final_quirks);
3391
3392
3393
3394
3395
3396
3397static int reset_intel_82599_sfp_virtfn(struct pci_dev *dev, int probe)
3398{
3399
3400
3401
3402
3403
3404
3405
3406
3407 if (probe)
3408 return 0;
3409
3410 if (!pci_wait_for_pending_transaction(dev))
3411 dev_err(&dev->dev, "transaction is not cleared; proceeding with reset anyway\n");
3412
3413 pcie_capability_set_word(dev, PCI_EXP_DEVCTL, PCI_EXP_DEVCTL_BCR_FLR);
3414
3415 msleep(100);
3416
3417 return 0;
3418}
3419
3420#define SOUTH_CHICKEN2 0xc2004
3421#define PCH_PP_STATUS 0xc7200
3422#define PCH_PP_CONTROL 0xc7204
3423#define MSG_CTL 0x45010
3424#define NSDE_PWR_STATE 0xd0100
3425#define IGD_OPERATION_TIMEOUT 10000
3426
3427static int reset_ivb_igd(struct pci_dev *dev, int probe)
3428{
3429 void __iomem *mmio_base;
3430 unsigned long timeout;
3431 u32 val;
3432
3433 if (probe)
3434 return 0;
3435
3436 mmio_base = pci_iomap(dev, 0, 0);
3437 if (!mmio_base)
3438 return -ENOMEM;
3439
3440 iowrite32(0x00000002, mmio_base + MSG_CTL);
3441
3442
3443
3444
3445
3446
3447
3448 iowrite32(0x00000005, mmio_base + SOUTH_CHICKEN2);
3449
3450 val = ioread32(mmio_base + PCH_PP_CONTROL) & 0xfffffffe;
3451 iowrite32(val, mmio_base + PCH_PP_CONTROL);
3452
3453 timeout = jiffies + msecs_to_jiffies(IGD_OPERATION_TIMEOUT);
3454 do {
3455 val = ioread32(mmio_base + PCH_PP_STATUS);
3456 if ((val & 0xb0000000) == 0)
3457 goto reset_complete;
3458 msleep(10);
3459 } while (time_before(jiffies, timeout));
3460 dev_warn(&dev->dev, "timeout during reset\n");
3461
3462reset_complete:
3463 iowrite32(0x00000002, mmio_base + NSDE_PWR_STATE);
3464
3465 pci_iounmap(dev, mmio_base);
3466 return 0;
3467}
3468
3469
3470
3471
3472static int reset_chelsio_generic_dev(struct pci_dev *dev, int probe)
3473{
3474 u16 old_command;
3475 u16 msix_flags;
3476
3477
3478
3479
3480
3481 if ((dev->device & 0xf000) != 0x4000)
3482 return -ENOTTY;
3483
3484
3485
3486
3487
3488 if (probe)
3489 return 0;
3490
3491
3492
3493
3494
3495
3496
3497 pci_read_config_word(dev, PCI_COMMAND, &old_command);
3498 pci_write_config_word(dev, PCI_COMMAND,
3499 old_command | PCI_COMMAND_MASTER);
3500
3501
3502
3503
3504
3505 pci_save_state(dev);
3506
3507
3508
3509
3510
3511
3512
3513
3514 pci_read_config_word(dev, dev->msix_cap+PCI_MSIX_FLAGS, &msix_flags);
3515 if ((msix_flags & PCI_MSIX_FLAGS_ENABLE) == 0)
3516 pci_write_config_word(dev, dev->msix_cap+PCI_MSIX_FLAGS,
3517 msix_flags |
3518 PCI_MSIX_FLAGS_ENABLE |
3519 PCI_MSIX_FLAGS_MASKALL);
3520
3521
3522
3523
3524
3525
3526 if (!pci_wait_for_pending_transaction(dev))
3527 dev_err(&dev->dev, "transaction is not cleared; proceeding with reset anyway\n");
3528
3529 pcie_capability_set_word(dev, PCI_EXP_DEVCTL, PCI_EXP_DEVCTL_BCR_FLR);
3530 msleep(100);
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541 pci_restore_state(dev);
3542 pci_write_config_word(dev, PCI_COMMAND, old_command);
3543 return 0;
3544}
3545
3546#define PCI_DEVICE_ID_INTEL_82599_SFP_VF 0x10ed
3547#define PCI_DEVICE_ID_INTEL_IVB_M_VGA 0x0156
3548#define PCI_DEVICE_ID_INTEL_IVB_M2_VGA 0x0166
3549
3550static const struct pci_dev_reset_methods pci_dev_reset_methods[] = {
3551 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82599_SFP_VF,
3552 reset_intel_82599_sfp_virtfn },
3553 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_IVB_M_VGA,
3554 reset_ivb_igd },
3555 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_IVB_M2_VGA,
3556 reset_ivb_igd },
3557 { PCI_VENDOR_ID_CHELSIO, PCI_ANY_ID,
3558 reset_chelsio_generic_dev },
3559 { 0 }
3560};
3561
3562
3563
3564
3565
3566
3567int pci_dev_specific_reset(struct pci_dev *dev, int probe)
3568{
3569 const struct pci_dev_reset_methods *i;
3570
3571 for (i = pci_dev_reset_methods; i->reset; i++) {
3572 if ((i->vendor == dev->vendor ||
3573 i->vendor == (u16)PCI_ANY_ID) &&
3574 (i->device == dev->device ||
3575 i->device == (u16)PCI_ANY_ID))
3576 return i->reset(dev, probe);
3577 }
3578
3579 return -ENOTTY;
3580}
3581
3582static void quirk_dma_func0_alias(struct pci_dev *dev)
3583{
3584 if (PCI_FUNC(dev->devfn) != 0) {
3585 dev->dma_alias_devfn = PCI_DEVFN(PCI_SLOT(dev->devfn), 0);
3586 dev->dev_flags |= PCI_DEV_FLAGS_DMA_ALIAS_DEVFN;
3587 }
3588}
3589
3590
3591
3592
3593
3594
3595DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_RICOH, 0xe832, quirk_dma_func0_alias);
3596DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_RICOH, 0xe476, quirk_dma_func0_alias);
3597
3598static void quirk_dma_func1_alias(struct pci_dev *dev)
3599{
3600 if (PCI_FUNC(dev->devfn) != 1) {
3601 dev->dma_alias_devfn = PCI_DEVFN(PCI_SLOT(dev->devfn), 1);
3602 dev->dev_flags |= PCI_DEV_FLAGS_DMA_ALIAS_DEVFN;
3603 }
3604}
3605
3606
3607
3608
3609
3610
3611
3612DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_MARVELL_EXT, 0x9120,
3613 quirk_dma_func1_alias);
3614DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_MARVELL_EXT, 0x9123,
3615 quirk_dma_func1_alias);
3616
3617DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_MARVELL_EXT, 0x9130,
3618 quirk_dma_func1_alias);
3619
3620DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_MARVELL_EXT, 0x9172,
3621 quirk_dma_func1_alias);
3622
3623DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_MARVELL_EXT, 0x917a,
3624 quirk_dma_func1_alias);
3625
3626DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_MARVELL_EXT, 0x91a0,
3627 quirk_dma_func1_alias);
3628
3629DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_MARVELL_EXT, 0x9230,
3630 quirk_dma_func1_alias);
3631DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_TTI, 0x0642,
3632 quirk_dma_func1_alias);
3633
3634DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_JMICRON,
3635 PCI_DEVICE_ID_JMICRON_JMB388_ESD,
3636 quirk_dma_func1_alias);
3637
3638DECLARE_PCI_FIXUP_HEADER(0x1c28,
3639 0x0122,
3640 quirk_dma_func1_alias);
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656
3657static const struct pci_device_id fixed_dma_alias_tbl[] = {
3658 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x0285,
3659 PCI_VENDOR_ID_ADAPTEC2, 0x02bb),
3660 .driver_data = PCI_DEVFN(1, 0) },
3661 { 0 }
3662};
3663
3664static void quirk_fixed_dma_alias(struct pci_dev *dev)
3665{
3666 const struct pci_device_id *id;
3667
3668 id = pci_match_id(fixed_dma_alias_tbl, dev);
3669 if (id) {
3670 dev->dma_alias_devfn = id->driver_data;
3671 dev->dev_flags |= PCI_DEV_FLAGS_DMA_ALIAS_DEVFN;
3672 dev_info(&dev->dev, "Enabling fixed DMA alias to %02x.%d\n",
3673 PCI_SLOT(dev->dma_alias_devfn),
3674 PCI_FUNC(dev->dma_alias_devfn));
3675 }
3676}
3677
3678DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ADAPTEC2, 0x0285, quirk_fixed_dma_alias);
3679
3680
3681
3682
3683
3684
3685
3686
3687
3688
3689static void quirk_use_pcie_bridge_dma_alias(struct pci_dev *pdev)
3690{
3691 if (!pci_is_root_bus(pdev->bus) &&
3692 pdev->hdr_type == PCI_HEADER_TYPE_BRIDGE &&
3693 !pci_is_pcie(pdev) && pci_is_pcie(pdev->bus->self) &&
3694 pci_pcie_type(pdev->bus->self) != PCI_EXP_TYPE_PCI_BRIDGE)
3695 pdev->dev_flags |= PCI_DEV_FLAG_PCIE_BRIDGE_ALIAS;
3696}
3697
3698DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ASMEDIA, 0x1080,
3699 quirk_use_pcie_bridge_dma_alias);
3700
3701DECLARE_PCI_FIXUP_HEADER(0x10e3, 0x8113, quirk_use_pcie_bridge_dma_alias);
3702
3703DECLARE_PCI_FIXUP_HEADER(0x1283, 0x8892, quirk_use_pcie_bridge_dma_alias);
3704
3705DECLARE_PCI_FIXUP_HEADER(0x8086, 0x244e, quirk_use_pcie_bridge_dma_alias);
3706
3707
3708
3709
3710
3711static void quirk_tw686x_class(struct pci_dev *pdev)
3712{
3713 u32 class = pdev->class;
3714
3715
3716 pdev->class = (PCI_CLASS_MULTIMEDIA_OTHER << 8) | 0x01;
3717 dev_info(&pdev->dev, "TW686x PCI class overridden (%#08x -> %#08x)\n",
3718 class, pdev->class);
3719}
3720DECLARE_PCI_FIXUP_CLASS_EARLY(0x1797, 0x6864, PCI_CLASS_NOT_DEFINED, 8,
3721 quirk_tw686x_class);
3722DECLARE_PCI_FIXUP_CLASS_EARLY(0x1797, 0x6865, PCI_CLASS_NOT_DEFINED, 8,
3723 quirk_tw686x_class);
3724DECLARE_PCI_FIXUP_CLASS_EARLY(0x1797, 0x6868, PCI_CLASS_NOT_DEFINED, 8,
3725 quirk_tw686x_class);
3726DECLARE_PCI_FIXUP_CLASS_EARLY(0x1797, 0x6869, PCI_CLASS_NOT_DEFINED, 8,
3727 quirk_tw686x_class);
3728
3729
3730
3731
3732
3733
3734
3735
3736
3737
3738
3739
3740
3741
3742
3743
3744
3745
3746
3747
3748
3749
3750
3751
3752static void quirk_disable_root_port_attributes(struct pci_dev *pdev)
3753{
3754 struct pci_dev *root_port = pci_find_pcie_root_port(pdev);
3755
3756 if (!root_port) {
3757 dev_warn(&pdev->dev, "PCIe Completion erratum may cause device errors\n");
3758 return;
3759 }
3760
3761 dev_info(&root_port->dev, "Disabling No Snoop/Relaxed Ordering Attributes to avoid PCIe Completion erratum in %s\n",
3762 dev_name(&pdev->dev));
3763 pcie_capability_clear_and_set_word(root_port, PCI_EXP_DEVCTL,
3764 PCI_EXP_DEVCTL_RELAX_EN |
3765 PCI_EXP_DEVCTL_NOSNOOP_EN, 0);
3766}
3767
3768
3769
3770
3771
3772static void quirk_chelsio_T5_disable_root_port_attributes(struct pci_dev *pdev)
3773{
3774
3775
3776
3777
3778
3779
3780 if ((pdev->device & 0xff00) == 0x5400)
3781 quirk_disable_root_port_attributes(pdev);
3782}
3783DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_CHELSIO, PCI_ANY_ID,
3784 quirk_chelsio_T5_disable_root_port_attributes);
3785
3786
3787
3788
3789
3790
3791
3792
3793
3794
3795
3796
3797
3798
3799
3800
3801
3802
3803
3804
3805
3806
3807
3808
3809
3810
3811static int pci_quirk_amd_sb_acs(struct pci_dev *dev, u16 acs_flags)
3812{
3813#ifdef CONFIG_ACPI
3814 struct acpi_table_header *header = NULL;
3815 acpi_status status;
3816
3817
3818 if (!dev->multifunction || !pci_is_root_bus(dev->bus))
3819 return -ENODEV;
3820
3821
3822 status = acpi_get_table("IVRS", 0, &header);
3823 if (ACPI_FAILURE(status))
3824 return -ENODEV;
3825
3826
3827 acs_flags &= (PCI_ACS_RR | PCI_ACS_CR | PCI_ACS_EC | PCI_ACS_DT);
3828
3829 return acs_flags & ~(PCI_ACS_RR | PCI_ACS_CR) ? 0 : 1;
3830#else
3831 return -ENODEV;
3832#endif
3833}
3834
3835
3836
3837
3838
3839
3840
3841static const u16 pci_quirk_intel_pch_acs_ids[] = {
3842
3843 0x3b42, 0x3b43, 0x3b44, 0x3b45, 0x3b46, 0x3b47, 0x3b48, 0x3b49,
3844 0x3b4a, 0x3b4b, 0x3b4c, 0x3b4d, 0x3b4e, 0x3b4f, 0x3b50, 0x3b51,
3845
3846 0x1c10, 0x1c11, 0x1c12, 0x1c13, 0x1c14, 0x1c15, 0x1c16, 0x1c17,
3847 0x1c18, 0x1c19, 0x1c1a, 0x1c1b, 0x1c1c, 0x1c1d, 0x1c1e, 0x1c1f,
3848
3849 0x1e10, 0x1e11, 0x1e12, 0x1e13, 0x1e14, 0x1e15, 0x1e16, 0x1e17,
3850 0x1e18, 0x1e19, 0x1e1a, 0x1e1b, 0x1e1c, 0x1e1d, 0x1e1e, 0x1e1f,
3851
3852 0x8c10, 0x8c11, 0x8c12, 0x8c13, 0x8c14, 0x8c15, 0x8c16, 0x8c17,
3853 0x8c18, 0x8c19, 0x8c1a, 0x8c1b, 0x8c1c, 0x8c1d, 0x8c1e, 0x8c1f,
3854
3855 0x9c10, 0x9c11, 0x9c12, 0x9c13, 0x9c14, 0x9c15, 0x9c16, 0x9c17,
3856 0x9c18, 0x9c19, 0x9c1a, 0x9c1b,
3857
3858 0x9c90, 0x9c91, 0x9c92, 0x9c93, 0x9c94, 0x9c95, 0x9c96, 0x9c97,
3859 0x9c98, 0x9c99, 0x9c9a, 0x9c9b,
3860
3861 0x1d10, 0x1d12, 0x1d14, 0x1d16, 0x1d18, 0x1d1a, 0x1d1c, 0x1d1e,
3862
3863 0x8d10, 0x8d11, 0x8d12, 0x8d13, 0x8d14, 0x8d15, 0x8d16, 0x8d17,
3864 0x8d18, 0x8d19, 0x8d1a, 0x8d1b, 0x8d1c, 0x8d1d, 0x8d1e,
3865
3866 0x8c90, 0x8c92, 0x8c94, 0x8c96, 0x8c98, 0x8c9a, 0x8c9c, 0x8c9e,
3867};
3868
3869static bool pci_quirk_intel_pch_acs_match(struct pci_dev *dev)
3870{
3871 int i;
3872
3873
3874 if (!pci_is_pcie(dev) || pci_pcie_type(dev) != PCI_EXP_TYPE_ROOT_PORT)
3875 return false;
3876
3877 for (i = 0; i < ARRAY_SIZE(pci_quirk_intel_pch_acs_ids); i++)
3878 if (pci_quirk_intel_pch_acs_ids[i] == dev->device)
3879 return true;
3880
3881 return false;
3882}
3883
3884#define INTEL_PCH_ACS_FLAGS (PCI_ACS_RR | PCI_ACS_CR | PCI_ACS_UF | PCI_ACS_SV)
3885
3886static int pci_quirk_intel_pch_acs(struct pci_dev *dev, u16 acs_flags)
3887{
3888 u16 flags = dev->dev_flags & PCI_DEV_FLAGS_ACS_ENABLED_QUIRK ?
3889 INTEL_PCH_ACS_FLAGS : 0;
3890
3891 if (!pci_quirk_intel_pch_acs_match(dev))
3892 return -ENOTTY;
3893
3894 return acs_flags & ~flags ? 0 : 1;
3895}
3896
3897static int pci_quirk_mf_endpoint_acs(struct pci_dev *dev, u16 acs_flags)
3898{
3899
3900
3901
3902
3903
3904
3905
3906
3907
3908 acs_flags &= ~(PCI_ACS_SV | PCI_ACS_TB | PCI_ACS_RR |
3909 PCI_ACS_CR | PCI_ACS_UF | PCI_ACS_DT);
3910
3911 return acs_flags ? 0 : 1;
3912}
3913
3914static const struct pci_dev_acs_enabled {
3915 u16 vendor;
3916 u16 device;
3917 int (*acs_enabled)(struct pci_dev *dev, u16 acs_flags);
3918} pci_dev_acs_enabled[] = {
3919 { PCI_VENDOR_ID_ATI, 0x4385, pci_quirk_amd_sb_acs },
3920 { PCI_VENDOR_ID_ATI, 0x439c, pci_quirk_amd_sb_acs },
3921 { PCI_VENDOR_ID_ATI, 0x4383, pci_quirk_amd_sb_acs },
3922 { PCI_VENDOR_ID_ATI, 0x439d, pci_quirk_amd_sb_acs },
3923 { PCI_VENDOR_ID_ATI, 0x4384, pci_quirk_amd_sb_acs },
3924 { PCI_VENDOR_ID_ATI, 0x4399, pci_quirk_amd_sb_acs },
3925 { PCI_VENDOR_ID_AMD, 0x780f, pci_quirk_amd_sb_acs },
3926 { PCI_VENDOR_ID_AMD, 0x7809, pci_quirk_amd_sb_acs },
3927 { PCI_VENDOR_ID_SOLARFLARE, 0x0903, pci_quirk_mf_endpoint_acs },
3928 { PCI_VENDOR_ID_SOLARFLARE, 0x0923, pci_quirk_mf_endpoint_acs },
3929 { PCI_VENDOR_ID_INTEL, 0x10C6, pci_quirk_mf_endpoint_acs },
3930 { PCI_VENDOR_ID_INTEL, 0x10DB, pci_quirk_mf_endpoint_acs },
3931 { PCI_VENDOR_ID_INTEL, 0x10DD, pci_quirk_mf_endpoint_acs },
3932 { PCI_VENDOR_ID_INTEL, 0x10E1, pci_quirk_mf_endpoint_acs },
3933 { PCI_VENDOR_ID_INTEL, 0x10F1, pci_quirk_mf_endpoint_acs },
3934 { PCI_VENDOR_ID_INTEL, 0x10F7, pci_quirk_mf_endpoint_acs },
3935 { PCI_VENDOR_ID_INTEL, 0x10F8, pci_quirk_mf_endpoint_acs },
3936 { PCI_VENDOR_ID_INTEL, 0x10F9, pci_quirk_mf_endpoint_acs },
3937 { PCI_VENDOR_ID_INTEL, 0x10FA, pci_quirk_mf_endpoint_acs },
3938 { PCI_VENDOR_ID_INTEL, 0x10FB, pci_quirk_mf_endpoint_acs },
3939 { PCI_VENDOR_ID_INTEL, 0x10FC, pci_quirk_mf_endpoint_acs },
3940 { PCI_VENDOR_ID_INTEL, 0x1507, pci_quirk_mf_endpoint_acs },
3941 { PCI_VENDOR_ID_INTEL, 0x1514, pci_quirk_mf_endpoint_acs },
3942 { PCI_VENDOR_ID_INTEL, 0x151C, pci_quirk_mf_endpoint_acs },
3943 { PCI_VENDOR_ID_INTEL, 0x1529, pci_quirk_mf_endpoint_acs },
3944 { PCI_VENDOR_ID_INTEL, 0x152A, pci_quirk_mf_endpoint_acs },
3945 { PCI_VENDOR_ID_INTEL, 0x154D, pci_quirk_mf_endpoint_acs },
3946 { PCI_VENDOR_ID_INTEL, 0x154F, pci_quirk_mf_endpoint_acs },
3947 { PCI_VENDOR_ID_INTEL, 0x1551, pci_quirk_mf_endpoint_acs },
3948 { PCI_VENDOR_ID_INTEL, 0x1558, pci_quirk_mf_endpoint_acs },
3949
3950 { PCI_VENDOR_ID_INTEL, 0x1509, pci_quirk_mf_endpoint_acs },
3951 { PCI_VENDOR_ID_INTEL, 0x150E, pci_quirk_mf_endpoint_acs },
3952 { PCI_VENDOR_ID_INTEL, 0x150F, pci_quirk_mf_endpoint_acs },
3953 { PCI_VENDOR_ID_INTEL, 0x1510, pci_quirk_mf_endpoint_acs },
3954 { PCI_VENDOR_ID_INTEL, 0x1511, pci_quirk_mf_endpoint_acs },
3955 { PCI_VENDOR_ID_INTEL, 0x1516, pci_quirk_mf_endpoint_acs },
3956 { PCI_VENDOR_ID_INTEL, 0x1527, pci_quirk_mf_endpoint_acs },
3957
3958 { PCI_VENDOR_ID_INTEL, 0x10C9, pci_quirk_mf_endpoint_acs },
3959 { PCI_VENDOR_ID_INTEL, 0x10E6, pci_quirk_mf_endpoint_acs },
3960 { PCI_VENDOR_ID_INTEL, 0x10E7, pci_quirk_mf_endpoint_acs },
3961 { PCI_VENDOR_ID_INTEL, 0x10E8, pci_quirk_mf_endpoint_acs },
3962 { PCI_VENDOR_ID_INTEL, 0x150A, pci_quirk_mf_endpoint_acs },
3963 { PCI_VENDOR_ID_INTEL, 0x150D, pci_quirk_mf_endpoint_acs },
3964 { PCI_VENDOR_ID_INTEL, 0x1518, pci_quirk_mf_endpoint_acs },
3965 { PCI_VENDOR_ID_INTEL, 0x1526, pci_quirk_mf_endpoint_acs },
3966
3967 { PCI_VENDOR_ID_INTEL, 0x10A7, pci_quirk_mf_endpoint_acs },
3968 { PCI_VENDOR_ID_INTEL, 0x10A9, pci_quirk_mf_endpoint_acs },
3969 { PCI_VENDOR_ID_INTEL, 0x10D6, pci_quirk_mf_endpoint_acs },
3970
3971 { PCI_VENDOR_ID_INTEL, 0x1521, pci_quirk_mf_endpoint_acs },
3972 { PCI_VENDOR_ID_INTEL, 0x1522, pci_quirk_mf_endpoint_acs },
3973 { PCI_VENDOR_ID_INTEL, 0x1523, pci_quirk_mf_endpoint_acs },
3974 { PCI_VENDOR_ID_INTEL, 0x1524, pci_quirk_mf_endpoint_acs },
3975
3976 { PCI_VENDOR_ID_INTEL, 0x105E, pci_quirk_mf_endpoint_acs },
3977 { PCI_VENDOR_ID_INTEL, 0x105F, pci_quirk_mf_endpoint_acs },
3978 { PCI_VENDOR_ID_INTEL, 0x1060, pci_quirk_mf_endpoint_acs },
3979 { PCI_VENDOR_ID_INTEL, 0x10D9, pci_quirk_mf_endpoint_acs },
3980
3981 { PCI_VENDOR_ID_INTEL, 0x15b7, pci_quirk_mf_endpoint_acs },
3982 { PCI_VENDOR_ID_INTEL, 0x15b8, pci_quirk_mf_endpoint_acs },
3983
3984 { PCI_VENDOR_ID_INTEL, PCI_ANY_ID, pci_quirk_intel_pch_acs },
3985 { 0x19a2, 0x710, pci_quirk_mf_endpoint_acs },
3986 { 0x10df, 0x720, pci_quirk_mf_endpoint_acs },
3987 { 0 }
3988};
3989
3990int pci_dev_specific_acs_enabled(struct pci_dev *dev, u16 acs_flags)
3991{
3992 const struct pci_dev_acs_enabled *i;
3993 int ret;
3994
3995
3996
3997
3998
3999
4000
4001 for (i = pci_dev_acs_enabled; i->acs_enabled; i++) {
4002 if ((i->vendor == dev->vendor ||
4003 i->vendor == (u16)PCI_ANY_ID) &&
4004 (i->device == dev->device ||
4005 i->device == (u16)PCI_ANY_ID)) {
4006 ret = i->acs_enabled(dev, acs_flags);
4007 if (ret >= 0)
4008 return ret;
4009 }
4010 }
4011
4012 return -ENOTTY;
4013}
4014
4015
4016#define INTEL_LPC_RCBA_REG 0xf0
4017
4018#define INTEL_LPC_RCBA_MASK 0xffffc000
4019
4020#define INTEL_LPC_RCBA_ENABLE (1 << 0)
4021
4022
4023#define INTEL_BSPR_REG 0x1104
4024
4025#define INTEL_BSPR_REG_BPNPD (1 << 8)
4026
4027#define INTEL_BSPR_REG_BPPD (1 << 9)
4028
4029
4030#define INTEL_UPDCR_REG 0x1114
4031
4032#define INTEL_UPDCR_REG_MASK 0x3f
4033
4034static int pci_quirk_enable_intel_lpc_acs(struct pci_dev *dev)
4035{
4036 u32 rcba, bspr, updcr;
4037 void __iomem *rcba_mem;
4038
4039
4040
4041
4042
4043
4044 pci_bus_read_config_dword(dev->bus, PCI_DEVFN(31, 0),
4045 INTEL_LPC_RCBA_REG, &rcba);
4046 if (!(rcba & INTEL_LPC_RCBA_ENABLE))
4047 return -EINVAL;
4048
4049 rcba_mem = ioremap_nocache(rcba & INTEL_LPC_RCBA_MASK,
4050 PAGE_ALIGN(INTEL_UPDCR_REG));
4051 if (!rcba_mem)
4052 return -ENOMEM;
4053
4054
4055
4056
4057
4058
4059
4060
4061 bspr = readl(rcba_mem + INTEL_BSPR_REG);
4062 bspr &= INTEL_BSPR_REG_BPNPD | INTEL_BSPR_REG_BPPD;
4063 if (bspr != (INTEL_BSPR_REG_BPNPD | INTEL_BSPR_REG_BPPD)) {
4064 updcr = readl(rcba_mem + INTEL_UPDCR_REG);
4065 if (updcr & INTEL_UPDCR_REG_MASK) {
4066 dev_info(&dev->dev, "Disabling UPDCR peer decodes\n");
4067 updcr &= ~INTEL_UPDCR_REG_MASK;
4068 writel(updcr, rcba_mem + INTEL_UPDCR_REG);
4069 }
4070 }
4071
4072 iounmap(rcba_mem);
4073 return 0;
4074}
4075
4076
4077#define INTEL_MPC_REG 0xd8
4078
4079#define INTEL_MPC_REG_IRBNCE (1 << 26)
4080
4081static void pci_quirk_enable_intel_rp_mpc_acs(struct pci_dev *dev)
4082{
4083 u32 mpc;
4084
4085
4086
4087
4088
4089
4090
4091 pci_read_config_dword(dev, INTEL_MPC_REG, &mpc);
4092 if (!(mpc & INTEL_MPC_REG_IRBNCE)) {
4093 dev_info(&dev->dev, "Enabling MPC IRBNCE\n");
4094 mpc |= INTEL_MPC_REG_IRBNCE;
4095 pci_write_config_word(dev, INTEL_MPC_REG, mpc);
4096 }
4097}
4098
4099static int pci_quirk_enable_intel_pch_acs(struct pci_dev *dev)
4100{
4101 if (!pci_quirk_intel_pch_acs_match(dev))
4102 return -ENOTTY;
4103
4104 if (pci_quirk_enable_intel_lpc_acs(dev)) {
4105 dev_warn(&dev->dev, "Failed to enable Intel PCH ACS quirk\n");
4106 return 0;
4107 }
4108
4109 pci_quirk_enable_intel_rp_mpc_acs(dev);
4110
4111 dev->dev_flags |= PCI_DEV_FLAGS_ACS_ENABLED_QUIRK;
4112
4113 dev_info(&dev->dev, "Intel PCH root port ACS workaround enabled\n");
4114
4115 return 0;
4116}
4117
4118static const struct pci_dev_enable_acs {
4119 u16 vendor;
4120 u16 device;
4121 int (*enable_acs)(struct pci_dev *dev);
4122} pci_dev_enable_acs[] = {
4123 { PCI_VENDOR_ID_INTEL, PCI_ANY_ID, pci_quirk_enable_intel_pch_acs },
4124 { 0 }
4125};
4126
4127void pci_dev_specific_enable_acs(struct pci_dev *dev)
4128{
4129 const struct pci_dev_enable_acs *i;
4130 int ret;
4131
4132 for (i = pci_dev_enable_acs; i->enable_acs; i++) {
4133 if ((i->vendor == dev->vendor ||
4134 i->vendor == (u16)PCI_ANY_ID) &&
4135 (i->device == dev->device ||
4136 i->device == (u16)PCI_ANY_ID)) {
4137 ret = i->enable_acs(dev);
4138 if (ret >= 0)
4139 return;
4140 }
4141 }
4142}
4143
4144
4145
4146
4147
4148
4149
4150
4151static void quirk_intel_qat_vf_cap(struct pci_dev *pdev)
4152{
4153 int pos, i = 0;
4154 u8 next_cap;
4155 u16 reg16, *cap;
4156 struct pci_cap_saved_state *state;
4157
4158
4159 if (pdev->pcie_cap || pci_find_capability(pdev, PCI_CAP_ID_EXP))
4160 return;
4161
4162
4163 pos = pci_find_capability(pdev, PCI_CAP_ID_MSI);
4164 if (!pos)
4165 return;
4166
4167
4168
4169
4170
4171 pci_read_config_byte(pdev, pos + 1, &next_cap);
4172 if (next_cap)
4173 return;
4174
4175
4176
4177
4178
4179
4180
4181
4182
4183 pos = 0x50;
4184 pci_read_config_word(pdev, pos, ®16);
4185 if (reg16 == (0x0000 | PCI_CAP_ID_EXP)) {
4186 u32 status;
4187#ifndef PCI_EXP_SAVE_REGS
4188#define PCI_EXP_SAVE_REGS 7
4189#endif
4190 int size = PCI_EXP_SAVE_REGS * sizeof(u16);
4191
4192 pdev->pcie_cap = pos;
4193 pci_read_config_word(pdev, pos + PCI_EXP_FLAGS, ®16);
4194 pdev->pcie_flags_reg = reg16;
4195 pci_read_config_word(pdev, pos + PCI_EXP_DEVCAP, ®16);
4196 pdev->pcie_mpss = reg16 & PCI_EXP_DEVCAP_PAYLOAD;
4197
4198 pdev->cfg_size = PCI_CFG_SPACE_EXP_SIZE;
4199 if (pci_read_config_dword(pdev, PCI_CFG_SPACE_SIZE, &status) !=
4200 PCIBIOS_SUCCESSFUL || (status == 0xffffffff))
4201 pdev->cfg_size = PCI_CFG_SPACE_SIZE;
4202
4203 if (pci_find_saved_cap(pdev, PCI_CAP_ID_EXP))
4204 return;
4205
4206
4207
4208
4209 state = kzalloc(sizeof(*state) + size, GFP_KERNEL);
4210 if (!state)
4211 return;
4212
4213 state->cap.cap_nr = PCI_CAP_ID_EXP;
4214 state->cap.cap_extended = 0;
4215 state->cap.size = size;
4216 cap = (u16 *)&state->cap.data[0];
4217 pcie_capability_read_word(pdev, PCI_EXP_DEVCTL, &cap[i++]);
4218 pcie_capability_read_word(pdev, PCI_EXP_LNKCTL, &cap[i++]);
4219 pcie_capability_read_word(pdev, PCI_EXP_SLTCTL, &cap[i++]);
4220 pcie_capability_read_word(pdev, PCI_EXP_RTCTL, &cap[i++]);
4221 pcie_capability_read_word(pdev, PCI_EXP_DEVCTL2, &cap[i++]);
4222 pcie_capability_read_word(pdev, PCI_EXP_LNKCTL2, &cap[i++]);
4223 pcie_capability_read_word(pdev, PCI_EXP_SLTCTL2, &cap[i++]);
4224 hlist_add_head(&state->next, &pdev->saved_cap_space);
4225 }
4226}
4227DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x443, quirk_intel_qat_vf_cap);
4228