mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-23 23:32:14 +00:00
Merge branches 'x86/apic', 'x86/cleanups', 'x86/cpufeature', 'x86/crashdump', 'x86/debug', 'x86/defconfig', 'x86/detect-hyper', 'x86/doc', 'x86/dumpstack', 'x86/early-printk', 'x86/fpu', 'x86/idle', 'x86/io', 'x86/memory-corruption-check', 'x86/microcode', 'x86/mm', 'x86/mtrr', 'x86/nmi-watchdog', 'x86/pat2', 'x86/pci-ioapic-boot-irq-quirks', 'x86/ptrace', 'x86/quirks', 'x86/reboot', 'x86/setup-memory', 'x86/signal', 'x86/sparse-fixes', 'x86/time', 'x86/uv' and 'x86/xen' into x86/core
This commit is contained in:
parent
3d44cc3e01
1ccedb7cdb
34945ede31
d437797406
c415b3dce3
beeb4195cb
f269b07e86
4e42ebd57b
e1286f2c68
878719e831
fd28a5b58d
adf77bac05
8f2466f45f
93093d099e
bb5574608a
f34a10bd9f
b6fd6f2673
30604bb410
5b9a0e14eb
67bac792cd
7a9787e1eb
f4166c54bf
69b88afa8d
8daa19051e
3e1e9002aa
8403295e0f
4db646b1af
205516c12d
c8182f0016
ecbf29cdb3
commit
fa623d1b02
173 changed files with 4121 additions and 3195 deletions
|
@ -606,27 +606,6 @@ static void __init quirk_ioapic_rmw(struct pci_dev *dev)
|
|||
sis_apic_bug = 1;
|
||||
}
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SI, PCI_ANY_ID, quirk_ioapic_rmw);
|
||||
|
||||
#define AMD8131_revA0 0x01
|
||||
#define AMD8131_revB0 0x11
|
||||
#define AMD8131_MISC 0x40
|
||||
#define AMD8131_NIOAMODE_BIT 0
|
||||
static void quirk_amd_8131_ioapic(struct pci_dev *dev)
|
||||
{
|
||||
unsigned char tmp;
|
||||
|
||||
if (nr_ioapics == 0)
|
||||
return;
|
||||
|
||||
if (dev->revision == AMD8131_revA0 || dev->revision == AMD8131_revB0) {
|
||||
dev_info(&dev->dev, "Fixing up AMD8131 IOAPIC mode\n");
|
||||
pci_read_config_byte( dev, AMD8131_MISC, &tmp);
|
||||
tmp &= ~(1 << AMD8131_NIOAMODE_BIT);
|
||||
pci_write_config_byte( dev, AMD8131_MISC, tmp);
|
||||
}
|
||||
}
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8131_BRIDGE, quirk_amd_8131_ioapic);
|
||||
DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8131_BRIDGE, quirk_amd_8131_ioapic);
|
||||
#endif /* CONFIG_X86_IO_APIC */
|
||||
|
||||
/*
|
||||
|
@ -1423,6 +1402,155 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x2609, quirk_intel_pcie_pm);
|
|||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x260a, quirk_intel_pcie_pm);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x260b, quirk_intel_pcie_pm);
|
||||
|
||||
#ifdef CONFIG_X86_IO_APIC
|
||||
/*
|
||||
* Boot interrupts on some chipsets cannot be turned off. For these chipsets,
|
||||
* remap the original interrupt in the linux kernel to the boot interrupt, so
|
||||
* that a PCI device's interrupt handler is installed on the boot interrupt
|
||||
* line instead.
|
||||
*/
|
||||
static void quirk_reroute_to_boot_interrupts_intel(struct pci_dev *dev)
|
||||
{
|
||||
if (noioapicquirk || noioapicreroute)
|
||||
return;
|
||||
|
||||
dev->irq_reroute_variant = INTEL_IRQ_REROUTE_VARIANT;
|
||||
|
||||
printk(KERN_INFO "PCI quirk: reroute interrupts for 0x%04x:0x%04x\n",
|
||||
dev->vendor, dev->device);
|
||||
return;
|
||||
}
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_80333_0, quirk_reroute_to_boot_interrupts_intel);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_80333_1, quirk_reroute_to_boot_interrupts_intel);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB2_0, quirk_reroute_to_boot_interrupts_intel);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_0, quirk_reroute_to_boot_interrupts_intel);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_1, quirk_reroute_to_boot_interrupts_intel);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXHV, quirk_reroute_to_boot_interrupts_intel);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_80332_0, quirk_reroute_to_boot_interrupts_intel);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_80332_1, quirk_reroute_to_boot_interrupts_intel);
|
||||
DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_80333_0, quirk_reroute_to_boot_interrupts_intel);
|
||||
DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_80333_1, quirk_reroute_to_boot_interrupts_intel);
|
||||
DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB2_0, quirk_reroute_to_boot_interrupts_intel);
|
||||
DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_0, quirk_reroute_to_boot_interrupts_intel);
|
||||
DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_1, quirk_reroute_to_boot_interrupts_intel);
|
||||
DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXHV, quirk_reroute_to_boot_interrupts_intel);
|
||||
DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_80332_0, quirk_reroute_to_boot_interrupts_intel);
|
||||
DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_80332_1, quirk_reroute_to_boot_interrupts_intel);
|
||||
|
||||
/*
|
||||
* On some chipsets we can disable the generation of legacy INTx boot
|
||||
* interrupts.
|
||||
*/
|
||||
|
||||
/*
|
||||
* IO-APIC1 on 6300ESB generates boot interrupts, see intel order no
|
||||
* 300641-004US, section 5.7.3.
|
||||
*/
|
||||
#define INTEL_6300_IOAPIC_ABAR 0x40
|
||||
#define INTEL_6300_DISABLE_BOOT_IRQ (1<<14)
|
||||
|
||||
static void quirk_disable_intel_boot_interrupt(struct pci_dev *dev)
|
||||
{
|
||||
u16 pci_config_word;
|
||||
|
||||
if (noioapicquirk)
|
||||
return;
|
||||
|
||||
pci_read_config_word(dev, INTEL_6300_IOAPIC_ABAR, &pci_config_word);
|
||||
pci_config_word |= INTEL_6300_DISABLE_BOOT_IRQ;
|
||||
pci_write_config_word(dev, INTEL_6300_IOAPIC_ABAR, pci_config_word);
|
||||
|
||||
printk(KERN_INFO "disabled boot interrupt on device 0x%04x:0x%04x\n",
|
||||
dev->vendor, dev->device);
|
||||
}
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB_10, quirk_disable_intel_boot_interrupt);
|
||||
DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB_10, quirk_disable_intel_boot_interrupt);
|
||||
|
||||
/*
|
||||
* disable boot interrupts on HT-1000
|
||||
*/
|
||||
#define BC_HT1000_FEATURE_REG 0x64
|
||||
#define BC_HT1000_PIC_REGS_ENABLE (1<<0)
|
||||
#define BC_HT1000_MAP_IDX 0xC00
|
||||
#define BC_HT1000_MAP_DATA 0xC01
|
||||
|
||||
static void quirk_disable_broadcom_boot_interrupt(struct pci_dev *dev)
|
||||
{
|
||||
u32 pci_config_dword;
|
||||
u8 irq;
|
||||
|
||||
if (noioapicquirk)
|
||||
return;
|
||||
|
||||
pci_read_config_dword(dev, BC_HT1000_FEATURE_REG, &pci_config_dword);
|
||||
pci_write_config_dword(dev, BC_HT1000_FEATURE_REG, pci_config_dword |
|
||||
BC_HT1000_PIC_REGS_ENABLE);
|
||||
|
||||
for (irq = 0x10; irq < 0x10 + 32; irq++) {
|
||||
outb(irq, BC_HT1000_MAP_IDX);
|
||||
outb(0x00, BC_HT1000_MAP_DATA);
|
||||
}
|
||||
|
||||
pci_write_config_dword(dev, BC_HT1000_FEATURE_REG, pci_config_dword);
|
||||
|
||||
printk(KERN_INFO "disabled boot interrupts on PCI device"
|
||||
"0x%04x:0x%04x\n", dev->vendor, dev->device);
|
||||
}
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_HT1000SB, quirk_disable_broadcom_boot_interrupt);
|
||||
DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_HT1000SB, quirk_disable_broadcom_boot_interrupt);
|
||||
|
||||
/*
|
||||
* disable boot interrupts on AMD and ATI chipsets
|
||||
*/
|
||||
/*
|
||||
* NOIOAMODE needs to be disabled to disable "boot interrupts". For AMD 8131
|
||||
* rev. A0 and B0, NOIOAMODE needs to be disabled anyway to fix IO-APIC mode
|
||||
* (due to an erratum).
|
||||
*/
|
||||
#define AMD_813X_MISC 0x40
|
||||
#define AMD_813X_NOIOAMODE (1<<0)
|
||||
|
||||
static void quirk_disable_amd_813x_boot_interrupt(struct pci_dev *dev)
|
||||
{
|
||||
u32 pci_config_dword;
|
||||
|
||||
if (noioapicquirk)
|
||||
return;
|
||||
|
||||
pci_read_config_dword(dev, AMD_813X_MISC, &pci_config_dword);
|
||||
pci_config_dword &= ~AMD_813X_NOIOAMODE;
|
||||
pci_write_config_dword(dev, AMD_813X_MISC, pci_config_dword);
|
||||
|
||||
printk(KERN_INFO "disabled boot interrupts on PCI device "
|
||||
"0x%04x:0x%04x\n", dev->vendor, dev->device);
|
||||
}
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8131_BRIDGE, quirk_disable_amd_813x_boot_interrupt);
|
||||
DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8132_BRIDGE, quirk_disable_amd_813x_boot_interrupt);
|
||||
|
||||
#define AMD_8111_PCI_IRQ_ROUTING 0x56
|
||||
|
||||
static void quirk_disable_amd_8111_boot_interrupt(struct pci_dev *dev)
|
||||
{
|
||||
u16 pci_config_word;
|
||||
|
||||
if (noioapicquirk)
|
||||
return;
|
||||
|
||||
pci_read_config_word(dev, AMD_8111_PCI_IRQ_ROUTING, &pci_config_word);
|
||||
if (!pci_config_word) {
|
||||
printk(KERN_INFO "boot interrupts on PCI device 0x%04x:0x%04x "
|
||||
"already disabled\n",
|
||||
dev->vendor, dev->device);
|
||||
return;
|
||||
}
|
||||
pci_write_config_word(dev, AMD_8111_PCI_IRQ_ROUTING, 0);
|
||||
printk(KERN_INFO "disabled boot interrupts on PCI device "
|
||||
"0x%04x:0x%04x\n", dev->vendor, dev->device);
|
||||
}
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8111_SMBUS, quirk_disable_amd_8111_boot_interrupt);
|
||||
DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8111_SMBUS, quirk_disable_amd_8111_boot_interrupt);
|
||||
#endif /* CONFIG_X86_IO_APIC */
|
||||
|
||||
/*
|
||||
* Toshiba TC86C001 IDE controller reports the standard 8-byte BAR0 size
|
||||
* but the PIO transfers won't work if BAR0 falls at the odd 8 bytes.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue