mirror of
https://github.com/armbian/linux.git
synced 2026-01-06 10:13:00 -08:00
x86, platforms: Remove NUMAQ
The NUMAQ support seems to be unmaintained, remove it. Cc: Paul Gortmaker <paul.gortmaker@windriver.com> Cc: David Rientjes <rientjes@google.com> Acked-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Signed-off-by: H. Peter Anvin <hpa@linux.intel.com> Link: http://lkml.kernel.org/r/n/530CFD6C.7040705@zytor.com
This commit is contained in:
@@ -346,7 +346,6 @@ config X86_EXTENDED_PLATFORM
|
||||
for the following (non-PC) 32 bit x86 platforms:
|
||||
Goldfish (Android emulator)
|
||||
AMD Elan
|
||||
NUMAQ (IBM/Sequent)
|
||||
RDC R-321x SoC
|
||||
SGI 320/540 (Visual Workstation)
|
||||
STA2X11-based (e.g. Northville)
|
||||
@@ -487,32 +486,18 @@ config X86_32_NON_STANDARD
|
||||
depends on X86_32 && SMP
|
||||
depends on X86_EXTENDED_PLATFORM
|
||||
---help---
|
||||
This option compiles in the NUMAQ, bigsmp, and STA2X11 default
|
||||
subarchitectures. It is intended for a generic binary kernel. If you
|
||||
select them all, kernel will probe it one by one and will fallback to
|
||||
default.
|
||||
This option compiles in the bigsmp and STA2X11 default
|
||||
subarchitectures. It is intended for a generic binary
|
||||
kernel. If you select them all, kernel will probe it one by
|
||||
one and will fallback to default.
|
||||
|
||||
# Alphabetically sorted list of Non standard 32 bit platforms
|
||||
|
||||
config X86_NUMAQ
|
||||
bool "NUMAQ (IBM/Sequent)"
|
||||
depends on X86_32_NON_STANDARD
|
||||
depends on PCI
|
||||
select NUMA
|
||||
select X86_MPPARSE
|
||||
---help---
|
||||
This option is used for getting Linux to run on a NUMAQ (IBM/Sequent)
|
||||
NUMA multiquad box. This changes the way that processors are
|
||||
bootstrapped, and uses Clustered Logical APIC addressing mode instead
|
||||
of Flat Logical. You will need a new lynxer.elf file to flash your
|
||||
firmware with - send email to <Martin.Bligh@us.ibm.com>.
|
||||
|
||||
config X86_SUPPORTS_MEMORY_FAILURE
|
||||
def_bool y
|
||||
# MCE code calls memory_failure():
|
||||
depends on X86_MCE
|
||||
# On 32-bit this adds too big of NODES_SHIFT and we run out of page flags:
|
||||
depends on !X86_NUMAQ
|
||||
# On 32-bit SPARSEMEM adds too big of SECTIONS_WIDTH:
|
||||
depends on X86_64 || !SPARSEMEM
|
||||
select ARCH_SUPPORTS_MEMORY_FAILURE
|
||||
@@ -783,7 +768,7 @@ config NR_CPUS
|
||||
range 2 8192 if SMP && !MAXSMP && CPUMASK_OFFSTACK && X86_64
|
||||
default "1" if !SMP
|
||||
default "8192" if MAXSMP
|
||||
default "32" if SMP && (X86_NUMAQ || X86_BIGSMP)
|
||||
default "32" if SMP && X86_BIGSMP
|
||||
default "8" if SMP
|
||||
---help---
|
||||
This allows you to specify the maximum number of CPUs which this
|
||||
@@ -1064,13 +1049,11 @@ config X86_CPUID
|
||||
|
||||
choice
|
||||
prompt "High Memory Support"
|
||||
default HIGHMEM64G if X86_NUMAQ
|
||||
default HIGHMEM4G
|
||||
depends on X86_32
|
||||
|
||||
config NOHIGHMEM
|
||||
bool "off"
|
||||
depends on !X86_NUMAQ
|
||||
---help---
|
||||
Linux can use up to 64 Gigabytes of physical memory on x86 systems.
|
||||
However, the address space of 32-bit x86 processors is only 4
|
||||
@@ -1107,7 +1090,6 @@ config NOHIGHMEM
|
||||
|
||||
config HIGHMEM4G
|
||||
bool "4GB"
|
||||
depends on !X86_NUMAQ
|
||||
---help---
|
||||
Select this if you have a 32-bit processor and between 1 and 4
|
||||
gigabytes of physical RAM.
|
||||
@@ -1199,8 +1181,8 @@ config DIRECT_GBPAGES
|
||||
config NUMA
|
||||
bool "Numa Memory Allocation and Scheduler Support"
|
||||
depends on SMP
|
||||
depends on X86_64 || (X86_32 && HIGHMEM64G && (X86_NUMAQ || X86_BIGSMP))
|
||||
default y if (X86_NUMAQ || X86_BIGSMP)
|
||||
depends on X86_64 || (X86_32 && HIGHMEM64G && X86_BIGSMP)
|
||||
default y if X86_BIGSMP
|
||||
---help---
|
||||
Enable NUMA (Non Uniform Memory Access) support.
|
||||
|
||||
@@ -1211,8 +1193,7 @@ config NUMA
|
||||
For 64-bit this is recommended if the system is Intel Core i7
|
||||
(or later), AMD Opteron, or EM64T NUMA.
|
||||
|
||||
For 32-bit this is only needed on (rare) 32-bit-only platforms
|
||||
that support NUMA topologies, such as NUMAQ, or if you boot a 32-bit
|
||||
For 32-bit this is only needed if you boot a 32-bit
|
||||
kernel on a 64-bit NUMA platform.
|
||||
|
||||
Otherwise, you should say N.
|
||||
@@ -1258,7 +1239,6 @@ config NODES_SHIFT
|
||||
range 1 10
|
||||
default "10" if MAXSMP
|
||||
default "6" if X86_64
|
||||
default "4" if X86_NUMAQ
|
||||
default "3"
|
||||
depends on NEED_MULTIPLE_NODES
|
||||
---help---
|
||||
|
||||
@@ -363,7 +363,7 @@ config X86_P6_NOP
|
||||
|
||||
config X86_TSC
|
||||
def_bool y
|
||||
depends on ((MWINCHIP3D || MCRUSOE || MEFFICEON || MCYRIXIII || MK7 || MK6 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || M586MMX || M586TSC || MK8 || MVIAC3_2 || MVIAC7 || MGEODEGX1 || MGEODE_LX || MCORE2 || MATOM) && !X86_NUMAQ) || X86_64
|
||||
depends on (MWINCHIP3D || MCRUSOE || MEFFICEON || MCYRIXIII || MK7 || MK6 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || M586MMX || M586TSC || MK8 || MVIAC3_2 || MVIAC7 || MGEODEGX1 || MGEODE_LX || MCORE2 || MATOM) || X86_64
|
||||
|
||||
config X86_CMPXCHG64
|
||||
def_bool y
|
||||
|
||||
@@ -11,9 +11,6 @@
|
||||
#ifdef CONFIG_NUMA
|
||||
extern struct pglist_data *node_data[];
|
||||
#define NODE_DATA(nid) (node_data[nid])
|
||||
|
||||
#include <asm/numaq.h>
|
||||
|
||||
#endif /* CONFIG_NUMA */
|
||||
|
||||
#ifdef CONFIG_DISCONTIGMEM
|
||||
|
||||
@@ -25,12 +25,6 @@ extern int pic_mode;
|
||||
|
||||
extern unsigned int def_to_bigsmp;
|
||||
|
||||
#ifdef CONFIG_X86_NUMAQ
|
||||
extern int mp_bus_id_to_node[MAX_MP_BUSSES];
|
||||
extern int mp_bus_id_to_local[MAX_MP_BUSSES];
|
||||
extern int quad_local_to_mp_bus_id [NR_CPUS/4][4];
|
||||
#endif
|
||||
|
||||
#else /* CONFIG_X86_64: */
|
||||
|
||||
#define MAX_MP_BUSSES 256
|
||||
|
||||
@@ -1,171 +0,0 @@
|
||||
/*
|
||||
* Written by: Patricia Gaughen, IBM Corporation
|
||||
*
|
||||
* Copyright (C) 2002, IBM Corp.
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
|
||||
* NON INFRINGEMENT. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*
|
||||
* Send feedback to <gone@us.ibm.com>
|
||||
*/
|
||||
|
||||
#ifndef _ASM_X86_NUMAQ_H
|
||||
#define _ASM_X86_NUMAQ_H
|
||||
|
||||
#ifdef CONFIG_X86_NUMAQ
|
||||
|
||||
extern int found_numaq;
|
||||
extern int numaq_numa_init(void);
|
||||
extern int pci_numaq_init(void);
|
||||
|
||||
extern void *xquad_portio;
|
||||
|
||||
#define XQUAD_PORTIO_BASE 0xfe400000
|
||||
#define XQUAD_PORTIO_QUAD 0x40000 /* 256k per quad. */
|
||||
#define XQUAD_PORT_ADDR(port, quad) (xquad_portio + (XQUAD_PORTIO_QUAD*quad) + port)
|
||||
|
||||
/*
|
||||
* SYS_CFG_DATA_PRIV_ADDR, struct eachquadmem, and struct sys_cfg_data are the
|
||||
*/
|
||||
#define SYS_CFG_DATA_PRIV_ADDR 0x0009d000 /* place for scd in private
|
||||
quad space */
|
||||
|
||||
/*
|
||||
* Communication area for each processor on lynxer-processor tests.
|
||||
*
|
||||
* NOTE: If you change the size of this eachproc structure you need
|
||||
* to change the definition for EACH_QUAD_SIZE.
|
||||
*/
|
||||
struct eachquadmem {
|
||||
unsigned int priv_mem_start; /* Starting address of this */
|
||||
/* quad's private memory. */
|
||||
/* This is always 0. */
|
||||
/* In MB. */
|
||||
unsigned int priv_mem_size; /* Size of this quad's */
|
||||
/* private memory. */
|
||||
/* In MB. */
|
||||
unsigned int low_shrd_mem_strp_start;/* Starting address of this */
|
||||
/* quad's low shared block */
|
||||
/* (untranslated). */
|
||||
/* In MB. */
|
||||
unsigned int low_shrd_mem_start; /* Starting address of this */
|
||||
/* quad's low shared memory */
|
||||
/* (untranslated). */
|
||||
/* In MB. */
|
||||
unsigned int low_shrd_mem_size; /* Size of this quad's low */
|
||||
/* shared memory. */
|
||||
/* In MB. */
|
||||
unsigned int lmmio_copb_start; /* Starting address of this */
|
||||
/* quad's local memory */
|
||||
/* mapped I/O in the */
|
||||
/* compatibility OPB. */
|
||||
/* In MB. */
|
||||
unsigned int lmmio_copb_size; /* Size of this quad's local */
|
||||
/* memory mapped I/O in the */
|
||||
/* compatibility OPB. */
|
||||
/* In MB. */
|
||||
unsigned int lmmio_nopb_start; /* Starting address of this */
|
||||
/* quad's local memory */
|
||||
/* mapped I/O in the */
|
||||
/* non-compatibility OPB. */
|
||||
/* In MB. */
|
||||
unsigned int lmmio_nopb_size; /* Size of this quad's local */
|
||||
/* memory mapped I/O in the */
|
||||
/* non-compatibility OPB. */
|
||||
/* In MB. */
|
||||
unsigned int io_apic_0_start; /* Starting address of I/O */
|
||||
/* APIC 0. */
|
||||
unsigned int io_apic_0_sz; /* Size I/O APIC 0. */
|
||||
unsigned int io_apic_1_start; /* Starting address of I/O */
|
||||
/* APIC 1. */
|
||||
unsigned int io_apic_1_sz; /* Size I/O APIC 1. */
|
||||
unsigned int hi_shrd_mem_start; /* Starting address of this */
|
||||
/* quad's high shared memory.*/
|
||||
/* In MB. */
|
||||
unsigned int hi_shrd_mem_size; /* Size of this quad's high */
|
||||
/* shared memory. */
|
||||
/* In MB. */
|
||||
unsigned int mps_table_addr; /* Address of this quad's */
|
||||
/* MPS tables from BIOS, */
|
||||
/* in system space.*/
|
||||
unsigned int lcl_MDC_pio_addr; /* Port-I/O address for */
|
||||
/* local access of MDC. */
|
||||
unsigned int rmt_MDC_mmpio_addr; /* MM-Port-I/O address for */
|
||||
/* remote access of MDC. */
|
||||
unsigned int mm_port_io_start; /* Starting address of this */
|
||||
/* quad's memory mapped Port */
|
||||
/* I/O space. */
|
||||
unsigned int mm_port_io_size; /* Size of this quad's memory*/
|
||||
/* mapped Port I/O space. */
|
||||
unsigned int mm_rmt_io_apic_start; /* Starting address of this */
|
||||
/* quad's memory mapped */
|
||||
/* remote I/O APIC space. */
|
||||
unsigned int mm_rmt_io_apic_size; /* Size of this quad's memory*/
|
||||
/* mapped remote I/O APIC */
|
||||
/* space. */
|
||||
unsigned int mm_isa_start; /* Starting address of this */
|
||||
/* quad's memory mapped ISA */
|
||||
/* space (contains MDC */
|
||||
/* memory space). */
|
||||
unsigned int mm_isa_size; /* Size of this quad's memory*/
|
||||
/* mapped ISA space (contains*/
|
||||
/* MDC memory space). */
|
||||
unsigned int rmt_qmi_addr; /* Remote addr to access QMI.*/
|
||||
unsigned int lcl_qmi_addr; /* Local addr to access QMI. */
|
||||
};
|
||||
|
||||
/*
|
||||
* Note: This structure must be NOT be changed unless the multiproc and
|
||||
* OS are changed to reflect the new structure.
|
||||
*/
|
||||
struct sys_cfg_data {
|
||||
unsigned int quad_id;
|
||||
unsigned int bsp_proc_id; /* Boot Strap Processor in this quad. */
|
||||
unsigned int scd_version; /* Version number of this table. */
|
||||
unsigned int first_quad_id;
|
||||
unsigned int quads_present31_0; /* 1 bit for each quad */
|
||||
unsigned int quads_present63_32; /* 1 bit for each quad */
|
||||
unsigned int config_flags;
|
||||
unsigned int boot_flags;
|
||||
unsigned int csr_start_addr; /* Absolute value (not in MB) */
|
||||
unsigned int csr_size; /* Absolute value (not in MB) */
|
||||
unsigned int lcl_apic_start_addr; /* Absolute value (not in MB) */
|
||||
unsigned int lcl_apic_size; /* Absolute value (not in MB) */
|
||||
unsigned int low_shrd_mem_base; /* 0 or 512MB or 1GB */
|
||||
unsigned int low_shrd_mem_quad_offset; /* 0,128M,256M,512M,1G */
|
||||
/* may not be totally populated */
|
||||
unsigned int split_mem_enbl; /* 0 for no low shared memory */
|
||||
unsigned int mmio_sz; /* Size of total system memory mapped I/O */
|
||||
/* (in MB). */
|
||||
unsigned int quad_spin_lock; /* Spare location used for quad */
|
||||
/* bringup. */
|
||||
unsigned int nonzero55; /* For checksumming. */
|
||||
unsigned int nonzeroaa; /* For checksumming. */
|
||||
unsigned int scd_magic_number;
|
||||
unsigned int system_type;
|
||||
unsigned int checksum;
|
||||
/*
|
||||
* memory configuration area for each quad
|
||||
*/
|
||||
struct eachquadmem eq[MAX_NUMNODES]; /* indexed by quad id */
|
||||
};
|
||||
|
||||
void numaq_tsc_disable(void);
|
||||
|
||||
#endif /* CONFIG_X86_NUMAQ */
|
||||
#endif /* _ASM_X86_NUMAQ_H */
|
||||
|
||||
@@ -18,7 +18,6 @@ obj-y += apic_flat_64.o
|
||||
endif
|
||||
|
||||
# APIC probe will depend on the listing order here
|
||||
obj-$(CONFIG_X86_NUMAQ) += numaq_32.o
|
||||
obj-$(CONFIG_X86_BIGSMP) += bigsmp_32.o
|
||||
|
||||
# For 32bit, probe_32 need to be listed last
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -267,10 +267,6 @@ static void intel_workarounds(struct cpuinfo_x86 *c)
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_X86_NUMAQ
|
||||
numaq_tsc_disable();
|
||||
#endif
|
||||
|
||||
intel_smp_check(c);
|
||||
}
|
||||
#else
|
||||
|
||||
@@ -687,10 +687,6 @@ static int __init dummy_numa_init(void)
|
||||
void __init x86_numa_init(void)
|
||||
{
|
||||
if (!numa_off) {
|
||||
#ifdef CONFIG_X86_NUMAQ
|
||||
if (!numa_init(numaq_numa_init))
|
||||
return;
|
||||
#endif
|
||||
#ifdef CONFIG_ACPI_NUMA
|
||||
if (!numa_init(x86_acpi_numa_init))
|
||||
return;
|
||||
|
||||
@@ -13,7 +13,6 @@ obj-y += legacy.o irq.o
|
||||
|
||||
obj-$(CONFIG_STA2X11) += sta2x11-fixup.o
|
||||
|
||||
obj-$(CONFIG_X86_NUMAQ) += numaq_32.o
|
||||
obj-$(CONFIG_X86_NUMACHIP) += numachip.o
|
||||
|
||||
obj-$(CONFIG_X86_INTEL_MID) += intel_mid_pci.o
|
||||
|
||||
@@ -1,165 +0,0 @@
|
||||
/*
|
||||
* numaq_32.c - Low-level PCI access for NUMA-Q machines
|
||||
*/
|
||||
|
||||
#include <linux/pci.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/nodemask.h>
|
||||
#include <asm/apic.h>
|
||||
#include <asm/mpspec.h>
|
||||
#include <asm/pci_x86.h>
|
||||
#include <asm/numaq.h>
|
||||
|
||||
#define BUS2QUAD(global) (mp_bus_id_to_node[global])
|
||||
|
||||
#define BUS2LOCAL(global) (mp_bus_id_to_local[global])
|
||||
|
||||
#define QUADLOCAL2BUS(quad,local) (quad_local_to_mp_bus_id[quad][local])
|
||||
|
||||
#define PCI_CONF1_MQ_ADDRESS(bus, devfn, reg) \
|
||||
(0x80000000 | (BUS2LOCAL(bus) << 16) | (devfn << 8) | (reg & ~3))
|
||||
|
||||
static void write_cf8(unsigned bus, unsigned devfn, unsigned reg)
|
||||
{
|
||||
unsigned val = PCI_CONF1_MQ_ADDRESS(bus, devfn, reg);
|
||||
if (xquad_portio)
|
||||
writel(val, XQUAD_PORT_ADDR(0xcf8, BUS2QUAD(bus)));
|
||||
else
|
||||
outl(val, 0xCF8);
|
||||
}
|
||||
|
||||
static int pci_conf1_mq_read(unsigned int seg, unsigned int bus,
|
||||
unsigned int devfn, int reg, int len, u32 *value)
|
||||
{
|
||||
unsigned long flags;
|
||||
void *adr __iomem = XQUAD_PORT_ADDR(0xcfc, BUS2QUAD(bus));
|
||||
|
||||
WARN_ON(seg);
|
||||
if (!value || (bus >= MAX_MP_BUSSES) || (devfn > 255) || (reg > 255))
|
||||
return -EINVAL;
|
||||
|
||||
raw_spin_lock_irqsave(&pci_config_lock, flags);
|
||||
|
||||
write_cf8(bus, devfn, reg);
|
||||
|
||||
switch (len) {
|
||||
case 1:
|
||||
if (xquad_portio)
|
||||
*value = readb(adr + (reg & 3));
|
||||
else
|
||||
*value = inb(0xCFC + (reg & 3));
|
||||
break;
|
||||
case 2:
|
||||
if (xquad_portio)
|
||||
*value = readw(adr + (reg & 2));
|
||||
else
|
||||
*value = inw(0xCFC + (reg & 2));
|
||||
break;
|
||||
case 4:
|
||||
if (xquad_portio)
|
||||
*value = readl(adr);
|
||||
else
|
||||
*value = inl(0xCFC);
|
||||
break;
|
||||
}
|
||||
|
||||
raw_spin_unlock_irqrestore(&pci_config_lock, flags);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int pci_conf1_mq_write(unsigned int seg, unsigned int bus,
|
||||
unsigned int devfn, int reg, int len, u32 value)
|
||||
{
|
||||
unsigned long flags;
|
||||
void *adr __iomem = XQUAD_PORT_ADDR(0xcfc, BUS2QUAD(bus));
|
||||
|
||||
WARN_ON(seg);
|
||||
if ((bus >= MAX_MP_BUSSES) || (devfn > 255) || (reg > 255))
|
||||
return -EINVAL;
|
||||
|
||||
raw_spin_lock_irqsave(&pci_config_lock, flags);
|
||||
|
||||
write_cf8(bus, devfn, reg);
|
||||
|
||||
switch (len) {
|
||||
case 1:
|
||||
if (xquad_portio)
|
||||
writeb(value, adr + (reg & 3));
|
||||
else
|
||||
outb((u8)value, 0xCFC + (reg & 3));
|
||||
break;
|
||||
case 2:
|
||||
if (xquad_portio)
|
||||
writew(value, adr + (reg & 2));
|
||||
else
|
||||
outw((u16)value, 0xCFC + (reg & 2));
|
||||
break;
|
||||
case 4:
|
||||
if (xquad_portio)
|
||||
writel(value, adr + reg);
|
||||
else
|
||||
outl((u32)value, 0xCFC);
|
||||
break;
|
||||
}
|
||||
|
||||
raw_spin_unlock_irqrestore(&pci_config_lock, flags);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#undef PCI_CONF1_MQ_ADDRESS
|
||||
|
||||
static const struct pci_raw_ops pci_direct_conf1_mq = {
|
||||
.read = pci_conf1_mq_read,
|
||||
.write = pci_conf1_mq_write
|
||||
};
|
||||
|
||||
|
||||
static void pci_fixup_i450nx(struct pci_dev *d)
|
||||
{
|
||||
/*
|
||||
* i450NX -- Find and scan all secondary buses on all PXB's.
|
||||
*/
|
||||
int pxb, reg;
|
||||
u8 busno, suba, subb;
|
||||
int quad = BUS2QUAD(d->bus->number);
|
||||
|
||||
dev_info(&d->dev, "searching for i450NX host bridges\n");
|
||||
reg = 0xd0;
|
||||
for(pxb=0; pxb<2; pxb++) {
|
||||
pci_read_config_byte(d, reg++, &busno);
|
||||
pci_read_config_byte(d, reg++, &suba);
|
||||
pci_read_config_byte(d, reg++, &subb);
|
||||
dev_dbg(&d->dev, "i450NX PXB %d: %02x/%02x/%02x\n",
|
||||
pxb, busno, suba, subb);
|
||||
if (busno) {
|
||||
/* Bus A */
|
||||
pci_scan_bus_with_sysdata(QUADLOCAL2BUS(quad, busno));
|
||||
}
|
||||
if (suba < subb) {
|
||||
/* Bus B */
|
||||
pci_scan_bus_with_sysdata(QUADLOCAL2BUS(quad, suba+1));
|
||||
}
|
||||
}
|
||||
pcibios_last_bus = -1;
|
||||
}
|
||||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82451NX, pci_fixup_i450nx);
|
||||
|
||||
int __init pci_numaq_init(void)
|
||||
{
|
||||
int quad;
|
||||
|
||||
raw_pci_ops = &pci_direct_conf1_mq;
|
||||
|
||||
pcibios_scan_root(0);
|
||||
if (num_online_nodes() > 1)
|
||||
for_each_online_node(quad) {
|
||||
if (quad == 0)
|
||||
continue;
|
||||
printk("Scanning PCI bus %d for quad %d\n",
|
||||
QUADLOCAL2BUS(quad,0), quad);
|
||||
pci_scan_bus_with_sysdata(QUADLOCAL2BUS(quad, 0));
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user