12 #include <linux/stddef.h>
13 #include <linux/kernel.h>
14 #include <linux/pci.h>
18 #include <asm/pci-bridge.h>
20 #define ULI_PIRQA 0x08
21 #define ULI_PIRQB 0x09
22 #define ULI_PIRQC 0x0a
23 #define ULI_PIRQD 0x0b
24 #define ULI_PIRQE 0x0c
25 #define ULI_PIRQF 0x0d
26 #define ULI_PIRQG 0x0e
28 #define ULI_8259_NONE 0x00
29 #define ULI_8259_IRQ1 0x08
30 #define ULI_8259_IRQ3 0x02
31 #define ULI_8259_IRQ4 0x04
32 #define ULI_8259_IRQ5 0x05
33 #define ULI_8259_IRQ6 0x07
34 #define ULI_8259_IRQ7 0x06
35 #define ULI_8259_IRQ9 0x01
36 #define ULI_8259_IRQ10 0x03
37 #define ULI_8259_IRQ11 0x09
38 #define ULI_8259_IRQ12 0x0b
39 #define ULI_8259_IRQ14 0x0d
40 #define ULI_8259_IRQ15 0x0f
53 static inline bool is_quirk_valid(
void)
55 return (machine_is(mpc86xx_hpcn) ||
56 machine_is(mpc8544_ds) ||
57 machine_is(p2020_ds) ||
58 machine_is(mpc8572_ds));
66 if (!is_quirk_valid())
73 pci_read_config_byte(dev, 0x7c, &temp);
74 pci_write_config_byte(dev, 0x7c, 0x80);
81 pci_write_config_byte(dev, 0x7c, temp);
89 if (!is_quirk_valid())
97 for (i = 0; i < 4; i++) {
99 pci_write_config_byte(dev, 0x48 + i, val);
106 pci_write_config_byte(dev, 0x87,
ULI_PIRQA);
109 pci_write_config_byte(dev, 0x88,
ULI_PIRQB);
112 pci_write_config_byte(dev, 0x89,
ULI_PIRQF);
115 pci_write_config_byte(dev, 0x8a,
ULI_PIRQF);
118 pci_write_config_byte(dev, 0x8b,
ULI_PIRQF);
121 pci_write_config_byte(dev, 0x8c,
ULI_PIRQF);
124 pci_write_config_byte(dev, 0x8d,
ULI_PIRQE);
127 pci_write_config_byte(dev, 0x8e,
ULI_PIRQG);
130 pci_write_config_byte(dev, 0x8f,
ULI_PIRQG);
157 if (!is_quirk_valid())
183 if (!is_quirk_valid())
187 pci_read_config_byte(dev, 0x83, &c);
188 pci_write_config_byte(dev, 0x83, c|0x80);
195 pci_write_config_byte(dev, 0x83, c);
198 pci_read_config_byte(dev, 0x84, &c);
199 pci_write_config_byte(dev, 0x84, c & ~0x01);
207 if (!is_quirk_valid())
214 pci_read_config_word(dev, 0x4a, &temp);
215 pci_write_config_word(dev, 0x4a, temp | 0x1000);
233 pci_bus_for_each_resource(bus, res, i) {
260 if (!machine_is(mpc86xx_hpcd))
264 pci_read_config_dword(dev, 0x48, &temp32);
265 pci_write_config_dword(dev, 0x48, (temp32 | 1<<26));
268 pci_read_config_dword(dev, 0x90, &temp32);
269 pci_write_config_dword(dev, 0x90, (temp32 | 1<<22));
276 if (!machine_is(mpc86xx_hpcd))
279 pci_read_config_byte(dev, 0x83, &c);
281 pci_write_config_byte(dev, 0x83, c);
286 pci_read_config_byte(dev, 0x83, &c);
288 pci_write_config_byte(dev, 0x83, c);
302 if (!machine_is(mpc86xx_hpcd))
305 pci_read_config_byte(dev, 0x4b, &c);
307 pci_write_config_byte(dev, 0x4b, c);
328 if (!machine_is(mpc86xx_hpcd))
335 laddr[1] = laddr[2] = 0;