diff options
author | Ravikiran G Thirumalai <kiran@scalex86.org> | 2006-01-11 16:46:18 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-01-11 22:05:01 -0500 |
commit | 79f12614a6537cc3ac9ca4d1ea26f6e4f4a34aee (patch) | |
tree | 25167c8862ad7733c7e044b0aad67e4291a0681b /arch/x86_64/kernel/vsmp.c | |
parent | 5fd63b308569060ffa40af52ed122d9734111bff (diff) |
[PATCH] x86_64: Inclusion of ScaleMP vSMP architecture patches - vsmp_arch
Introduce vSMP arch to the kernel.
This patch:
1. Adds CONFIG_X86_VSMP
2. Adds machine specific macros for local_irq_disabled, local_irq_enabled
and irqs_disabled
3. Writes to the vSMP CTL device to indicate kernel compiled with CONFIG_VSMP
Signed-off-by: Ravikiran Thirumalai <kiran@scalemp.com>
Signed-off-by: Shai Fultheim <shai@scalemp.com>
Signed-off-by: Andi Kleen <ak@suse.de>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'arch/x86_64/kernel/vsmp.c')
-rw-r--r-- | arch/x86_64/kernel/vsmp.c | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/arch/x86_64/kernel/vsmp.c b/arch/x86_64/kernel/vsmp.c new file mode 100644 index 00000000000..92f70c74965 --- /dev/null +++ b/arch/x86_64/kernel/vsmp.c | |||
@@ -0,0 +1,45 @@ | |||
1 | /* | ||
2 | * vSMPowered(tm) systems specific initialization | ||
3 | * Copyright (C) 2005 ScaleMP Inc. | ||
4 | * | ||
5 | * Use of this code is subject to the terms and conditions of the | ||
6 | * GNU general public license version 2. See "COPYING" or | ||
7 | * http://www.gnu.org/licenses/gpl.html | ||
8 | * | ||
9 | * Ravikiran Thirumalai <kiran@scalemp.com>, | ||
10 | * Shai Fultheim <shai@scalemp.com> | ||
11 | */ | ||
12 | |||
13 | #include <linux/init.h> | ||
14 | #include <linux/pci_ids.h> | ||
15 | #include <linux/pci_regs.h> | ||
16 | #include <asm/pci-direct.h> | ||
17 | |||
18 | static int __init vsmp_init(void) | ||
19 | { | ||
20 | void *address; | ||
21 | unsigned int cap, ctl; | ||
22 | |||
23 | /* Check if we are running on a ScaleMP vSMP box */ | ||
24 | if ((read_pci_config_16(0, 0x1f, 0, PCI_VENDOR_ID) != PCI_VENDOR_ID_SCALEMP) || | ||
25 | (read_pci_config_16(0, 0x1f, 0, PCI_DEVICE_ID) != PCI_DEVICE_ID_SCALEMP_VSMP_CTL)) | ||
26 | return 0; | ||
27 | |||
28 | /* set vSMP magic bits to indicate vSMP capable kernel */ | ||
29 | address = ioremap(read_pci_config(0, 0x1f, 0, PCI_BASE_ADDRESS_0), 8); | ||
30 | cap = readl(address); | ||
31 | ctl = readl(address + 4); | ||
32 | printk("vSMP CTL: capabilities:0x%08x control:0x%08x\n", cap, ctl); | ||
33 | if (cap & ctl & (1 << 4)) { | ||
34 | /* Turn on vSMP IRQ fastpath handling (see system.h) */ | ||
35 | ctl &= ~(1 << 4); | ||
36 | writel(ctl, address + 4); | ||
37 | ctl = readl(address + 4); | ||
38 | printk("vSMP CTL: control set to:0x%08x\n", ctl); | ||
39 | } | ||
40 | |||
41 | iounmap(address); | ||
42 | return 0; | ||
43 | } | ||
44 | |||
45 | core_initcall(vsmp_init); | ||