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