]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/commitdiff
Merge branch 'linus' into x86/quirks
authorIngo Molnar <mingo@elte.hu>
Sun, 12 Oct 2008 10:43:21 +0000 (12:43 +0200)
committerIngo Molnar <mingo@elte.hu>
Sun, 12 Oct 2008 10:43:21 +0000 (12:43 +0200)
Conflicts:
arch/x86/kernel/early-quirks.c

1  2 
arch/x86/kernel/acpi/boot.c
arch/x86/kernel/early-quirks.c

index 096102d9b24ee0da7a027b8212ba83b480601003,c2ac1b4515a0b95f9dd54717127144b50cc550ee..eb875cdc7367c3aee3fcb285606c1e993cc808af
@@@ -58,7 -58,6 +58,6 @@@ EXPORT_SYMBOL(acpi_disabled)
  #ifdef        CONFIG_X86_64
  
  #include <asm/proto.h>
- #include <asm/genapic.h>
  
  #else                         /* X86 */
  
@@@ -97,8 -96,6 +96,6 @@@ static u64 acpi_lapic_addr __initdata 
  #warning ACPI uses CMPXCHG, i486 and later hardware
  #endif
  
- static int acpi_mcfg_64bit_base_addr __initdata = FALSE;
  /* --------------------------------------------------------------------------
                                Boot-time Configuration
     -------------------------------------------------------------------------- */
@@@ -160,6 -157,8 +157,8 @@@ char *__init __acpi_map_table(unsigned 
  struct acpi_mcfg_allocation *pci_mmcfg_config;
  int pci_mmcfg_config_num;
  
+ static int acpi_mcfg_64bit_base_addr __initdata = FALSE;
  static int __init acpi_mcfg_oem_check(struct acpi_table_mcfg *mcfg)
  {
        if (!strcmp(mcfg->header.oem_id, "SGI"))
@@@ -253,10 -252,8 +252,8 @@@ static void __cpuinit acpi_register_lap
                return;
        }
  
- #ifdef CONFIG_X86_32
        if (boot_cpu_physical_apicid != -1U)
                ver = apic_version[boot_cpu_physical_apicid];
- #endif
  
        generic_processor_info(id, ver);
  }
@@@ -775,11 -772,9 +772,9 @@@ static void __init acpi_register_lapic_
  
        set_fixmap_nocache(FIX_APIC_BASE, address);
        if (boot_cpu_physical_apicid == -1U) {
-               boot_cpu_physical_apicid  = GET_APIC_ID(read_apic_id());
- #ifdef CONFIG_X86_32
+               boot_cpu_physical_apicid  = read_apic_id();
                apic_version[boot_cpu_physical_apicid] =
                         GET_APIC_VERSION(apic_read(APIC_LVR));
- #endif
        }
  }
  
@@@ -1351,7 -1346,9 +1346,9 @@@ static void __init acpi_process_madt(vo
                                acpi_ioapic = 1;
  
                                smp_found_config = 1;
+ #ifdef CONFIG_X86_32
                                setup_apic_routing();
+ #endif
                        }
                }
                if (error == -EINVAL) {
@@@ -1421,16 -1418,8 +1418,16 @@@ static int __init force_acpi_ht(const s
   */
  static int __init dmi_ignore_irq0_timer_override(const struct dmi_system_id *d)
  {
 -      pr_notice("%s detected: Ignoring BIOS IRQ0 pin2 override\n", d->ident);
 -      acpi_skip_timer_override = 1;
 +      /*
 +       * The ati_ixp4x0_rev() early PCI quirk should have set
 +       * the acpi_skip_timer_override flag already:
 +       */
 +      if (!acpi_skip_timer_override) {
 +              WARN(1, KERN_ERR "ati_ixp4x0 quirk not complete.\n");
 +              pr_notice("%s detected: Ignoring BIOS IRQ0 pin2 override\n",
 +                      d->ident);
 +              acpi_skip_timer_override = 1;
 +      }
        return 0;
  }
  
index 6b839b1476441c602f32ca62ad1a87a3bc801e87,24bb5faf5efaefedcb578d4f4f27415a015833c7..733c4f8d42ea587437191881974c786bc6e9186e
@@@ -95,52 -95,20 +95,66 @@@ static void __init nvidia_bugs(int num
  
  }
  
 +static u32 ati_ixp4x0_rev(int num, int slot, int func)
 +{
 +      u32 d;
 +      u8  b;
 +
 +      b = read_pci_config_byte(num, slot, func, 0xac);
 +      b &= ~(1<<5);
 +      write_pci_config_byte(num, slot, func, 0xac, b);
 +
 +      d = read_pci_config(num, slot, func, 0x70);
 +      d |= 1<<8;
 +      write_pci_config(num, slot, func, 0x70, d);
 +
 +      d = read_pci_config(num, slot, func, 0x8);
 +      d &= 0xff;
 +      return d;
 +}
 +
 +static void __init ati_bugs(int num, int slot, int func)
 +{
 +#if defined(CONFIG_ACPI) && defined (CONFIG_X86_IO_APIC)
 +      u32 d;
 +      u8  b;
 +
 +      if (acpi_use_timer_override)
 +              return;
 +
 +      d = ati_ixp4x0_rev(num, slot, func);
 +      if (d  < 0x82)
 +              acpi_skip_timer_override = 1;
 +      else {
 +              /* check for IRQ0 interrupt swap */
 +              outb(0x72, 0xcd6); b = inb(0xcd7);
 +              if (!(b & 0x2))
 +                      acpi_skip_timer_override = 1;
 +      }
 +
 +      if (acpi_skip_timer_override) {
 +              printk(KERN_INFO "SB4X0 revision 0x%x\n", d);
 +              printk(KERN_INFO "Ignoring ACPI timer override.\n");
 +              printk(KERN_INFO "If you got timer trouble "
 +                     "try acpi_use_timer_override\n");
 +      }
 +#endif
 +}
 +
+ #ifdef CONFIG_DMAR
+ static void __init intel_g33_dmar(int num, int slot, int func)
+ {
+       struct acpi_table_header *dmar_tbl;
+       acpi_status status;
+       status = acpi_get_table(ACPI_SIG_DMAR, 0, &dmar_tbl);
+       if (ACPI_SUCCESS(status)) {
+               printk(KERN_INFO "BIOS BUG: DMAR advertised on Intel G31/G33 chipset -- ignoring\n");
+               dmar_disabled = 1;
+       }
+ }
+ #endif
  #define QFLAG_APPLY_ONCE      0x1
  #define QFLAG_APPLIED         0x2
  #define QFLAG_DONE            (QFLAG_APPLY_ONCE|QFLAG_APPLIED)
@@@ -160,8 -128,10 +174,12 @@@ static struct chipset early_qrk[] __ini
          PCI_CLASS_BRIDGE_PCI, PCI_ANY_ID, QFLAG_APPLY_ONCE, via_bugs },
        { PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_K8_NB,
          PCI_CLASS_BRIDGE_HOST, PCI_ANY_ID, 0, fix_hypertransport_config },
 +      { PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP400_SMBUS,
 +        PCI_CLASS_SERIAL_SMBUS, PCI_ANY_ID, 0, ati_bugs },
+ #ifdef CONFIG_DMAR
+       { PCI_VENDOR_ID_INTEL, 0x29c0,
+         PCI_CLASS_BRIDGE_HOST, PCI_ANY_ID, 0, intel_g33_dmar },
+ #endif
        {}
  };