Commit 7da18ed9 authored by Ingo Molnar's avatar Ingo Molnar

x86, es7000: misc cleanups

These are cleanups that change the md5 signature:

 - asm/ => linux/ include conversion
 - simplify the code flow of find_unisys_acpi_oem_table()
 - move ACPI methods into one #ifdef block
 - remove 0/NULL initialization of statics
 - simplify/standardize printouts
 - update copyrights
 - more cleanups, pointed out by checkpatch

arch/x86/kernel/es7000_32.o:

   text	   data	    bss	    dec	    hex	filename
   2693	    192	     44	   2929	    b71	es7000_32.o.before
   2688	    192	     44	   2924	    b6c	es7000_32.o.after
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent 352887d1
/* /*
* Written by: Garry Forsgren, Unisys Corporation * Written by: Garry Forsgren, Unisys Corporation
* Natalie Protasevich, Unisys Corporation * Natalie Protasevich, Unisys Corporation
*
* This file contains the code to configure and interface * This file contains the code to configure and interface
* with Unisys ES7000 series hardware system manager. * with Unisys ES7000 series hardware system manager.
* *
* Copyright (c) 2003 Unisys Corporation. All Rights Reserved. * Copyright (c) 2003 Unisys Corporation.
* Copyright (C) 2009, Red Hat, Inc., Ingo Molnar
*
* All Rights Reserved.
* *
* This program is free software; you can redistribute it and/or modify it * This program is free software; you can redistribute it and/or modify it
* under the terms of version 2 of the GNU General Public License as * under the terms of version 2 of the GNU General Public License as
...@@ -35,7 +39,9 @@ ...@@ -35,7 +39,9 @@
#include <linux/errno.h> #include <linux/errno.h>
#include <linux/acpi.h> #include <linux/acpi.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/nmi.h>
#include <linux/smp.h> #include <linux/smp.h>
#include <linux/io.h>
#include <asm/apicdef.h> #include <asm/apicdef.h>
#include <asm/atomic.h> #include <asm/atomic.h>
...@@ -44,9 +50,6 @@ ...@@ -44,9 +50,6 @@
#include <asm/setup.h> #include <asm/setup.h>
#include <asm/apic.h> #include <asm/apic.h>
#include <asm/ipi.h> #include <asm/ipi.h>
#include <asm/nmi.h>
#include <asm/smp.h>
#include <asm/io.h>
/* /*
* ES7000 chipsets * ES7000 chipsets
...@@ -93,22 +96,28 @@ struct psai { ...@@ -93,22 +96,28 @@ struct psai {
}; };
#ifdef CONFIG_ACPI #ifdef CONFIG_ACPI
struct es7000_oem_table { struct es7000_oem_table {
struct acpi_table_header Header; struct acpi_table_header Header;
u32 OEMTableAddr; u32 OEMTableAddr;
u32 OEMTableSize; u32 OEMTableSize;
}; };
static unsigned long oem_addrX;
static unsigned long oem_size;
#endif #endif
/* /*
* ES7000 Globals * ES7000 Globals
*/ */
static volatile unsigned long *psai = NULL; static volatile unsigned long *psai;
static struct mip_reg *mip_reg; static struct mip_reg *mip_reg;
static struct mip_reg *host_reg; static struct mip_reg *host_reg;
static int mip_port; static int mip_port;
static unsigned long mip_addr, host_addr; static unsigned long mip_addr;
static unsigned long host_addr;
int es7000_plat; int es7000_plat;
...@@ -252,31 +261,35 @@ static int __init parse_unisys_oem(char *oemptr) ...@@ -252,31 +261,35 @@ static int __init parse_unisys_oem(char *oemptr)
} }
#ifdef CONFIG_ACPI #ifdef CONFIG_ACPI
static unsigned long oem_addrX;
static unsigned long oem_size;
static int __init find_unisys_acpi_oem_table(unsigned long *oem_addr) static int __init find_unisys_acpi_oem_table(unsigned long *oem_addr)
{ {
struct acpi_table_header *header = NULL; struct acpi_table_header *header = NULL;
int i = 0; struct es7000_oem_table *table;
acpi_size tbl_size; acpi_size tbl_size;
acpi_status ret;
int i = 0;
while (ACPI_SUCCESS(acpi_get_table_with_size("OEM1", i++, &header, &tbl_size))) { for (;;) {
if (!memcmp((char *) &header->oem_id, "UNISYS", 6)) { ret = acpi_get_table_with_size("OEM1", i++, &header, &tbl_size);
struct es7000_oem_table *t = (void *)header; if (!ACPI_SUCCESS(ret))
return -1;
oem_addrX = t->OEMTableAddr; if (!memcmp((char *) &header->oem_id, "UNISYS", 6))
oem_size = t->OEMTableSize; break;
early_acpi_os_unmap_memory(header, tbl_size);
*oem_addr = (unsigned long)__acpi_map_table(oem_addrX,
oem_size);
return 0;
}
early_acpi_os_unmap_memory(header, tbl_size); early_acpi_os_unmap_memory(header, tbl_size);
} }
return -1;
table = (void *)header;
oem_addrX = table->OEMTableAddr;
oem_size = table->OEMTableSize;
early_acpi_os_unmap_memory(header, tbl_size);
*oem_addr = (unsigned long)__acpi_map_table(oem_addrX, oem_size);
return 0;
} }
static void __init unmap_unisys_acpi_oem_table(unsigned long oem_addr) static void __init unmap_unisys_acpi_oem_table(unsigned long oem_addr)
...@@ -286,7 +299,47 @@ static void __init unmap_unisys_acpi_oem_table(unsigned long oem_addr) ...@@ -286,7 +299,47 @@ static void __init unmap_unisys_acpi_oem_table(unsigned long oem_addr)
__acpi_unmap_table((char *)oem_addr, oem_size); __acpi_unmap_table((char *)oem_addr, oem_size);
} }
#endif
static int es7000_check_dsdt(void)
{
struct acpi_table_header header;
if (ACPI_SUCCESS(acpi_get_table_header(ACPI_SIG_DSDT, 0, &header)) &&
!strncmp(header.oem_id, "UNISYS", 6))
return 1;
return 0;
}
/* Hook from generic ACPI tables.c */
static int __init es7000_acpi_madt_oem_check(char *oem_id, char *oem_table_id)
{
unsigned long oem_addr = 0;
int check_dsdt;
int ret = 0;
/* check dsdt at first to avoid clear fix_map for oem_addr */
check_dsdt = es7000_check_dsdt();
if (!find_unisys_acpi_oem_table(&oem_addr)) {
if (check_dsdt) {
ret = parse_unisys_oem((char *)oem_addr);
} else {
setup_unisys();
ret = 1;
}
/*
* we need to unmap it
*/
unmap_unisys_acpi_oem_table(oem_addr);
}
return ret;
}
#else /* !CONFIG_ACPI: */
static int __init es7000_acpi_madt_oem_check(char *oem_id, char *oem_table_id)
{
return 0;
}
#endif /* !CONFIG_ACPI */
static void es7000_spin(int n) static void es7000_spin(int n)
{ {
...@@ -305,7 +358,7 @@ es7000_mip_write(struct mip_reg *mip_reg) ...@@ -305,7 +358,7 @@ es7000_mip_write(struct mip_reg *mip_reg)
spin = MIP_SPIN; spin = MIP_SPIN;
while ((host_reg->off_0x38 & MIP_VALID) != 0) { while ((host_reg->off_0x38 & MIP_VALID) != 0) {
if (--spin <= 0) { if (--spin <= 0) {
printk("es7000_mip_write: Timeout waiting for Host Valid Flag"); WARN(1, "Timeout waiting for Host Valid Flag\n");
return -1; return -1;
} }
es7000_spin(MIP_SPIN); es7000_spin(MIP_SPIN);
...@@ -318,7 +371,7 @@ es7000_mip_write(struct mip_reg *mip_reg) ...@@ -318,7 +371,7 @@ es7000_mip_write(struct mip_reg *mip_reg)
while ((mip_reg->off_0x38 & MIP_VALID) == 0) { while ((mip_reg->off_0x38 & MIP_VALID) == 0) {
if (--spin <= 0) { if (--spin <= 0) {
printk("es7000_mip_write: Timeout waiting for MIP Valid Flag"); WARN(1, "Timeout waiting for MIP Valid Flag\n");
return -1; return -1;
} }
es7000_spin(MIP_SPIN); es7000_spin(MIP_SPIN);
...@@ -338,15 +391,13 @@ static void __init es7000_enable_apic_mode(void) ...@@ -338,15 +391,13 @@ static void __init es7000_enable_apic_mode(void)
if (!es7000_plat) if (!es7000_plat)
return; return;
printk("ES7000: Enabling APIC mode.\n"); printk(KERN_INFO "ES7000: Enabling APIC mode.\n");
memset(&es7000_mip_reg, 0, sizeof(struct mip_reg)); memset(&es7000_mip_reg, 0, sizeof(struct mip_reg));
es7000_mip_reg.off_0x00 = MIP_SW_APIC; es7000_mip_reg.off_0x00 = MIP_SW_APIC;
es7000_mip_reg.off_0x38 = MIP_VALID; es7000_mip_reg.off_0x38 = MIP_VALID;
while ((mip_status = es7000_mip_write(&es7000_mip_reg)) != 0) { while ((mip_status = es7000_mip_write(&es7000_mip_reg)) != 0)
printk("es7000_enable_apic_mode: command failed, status = %x\n", WARN(1, "Command failed, status = %x\n", mip_status);
mip_status);
}
} }
static void es7000_vector_allocation_domain(int cpu, cpumask_t *retmask) static void es7000_vector_allocation_domain(int cpu, cpumask_t *retmask)
...@@ -377,18 +428,6 @@ static unsigned int es7000_get_apic_id(unsigned long x) ...@@ -377,18 +428,6 @@ static unsigned int es7000_get_apic_id(unsigned long x)
return (x >> 24) & 0xFF; return (x >> 24) & 0xFF;
} }
#ifdef CONFIG_ACPI
static int es7000_check_dsdt(void)
{
struct acpi_table_header header;
if (ACPI_SUCCESS(acpi_get_table_header(ACPI_SIG_DSDT, 0, &header)) &&
!strncmp(header.oem_id, "UNISYS", 6))
return 1;
return 0;
}
#endif
static void es7000_send_IPI_mask(const struct cpumask *mask, int vector) static void es7000_send_IPI_mask(const struct cpumask *mask, int vector)
{ {
default_send_IPI_mask_sequence_phys(mask, vector); default_send_IPI_mask_sequence_phys(mask, vector);
...@@ -466,10 +505,12 @@ static void es7000_init_apic_ldr(void) ...@@ -466,10 +505,12 @@ static void es7000_init_apic_ldr(void)
static void es7000_setup_apic_routing(void) static void es7000_setup_apic_routing(void)
{ {
int apic = per_cpu(x86_bios_cpu_apicid, smp_processor_id()); int apic = per_cpu(x86_bios_cpu_apicid, smp_processor_id());
printk("Enabling APIC mode: %s. Using %d I/O APICs, target cpus %lx\n",
printk(KERN_INFO
"Enabling APIC mode: %s. Using %d I/O APICs, target cpus %lx\n",
(apic_version[apic] == 0x14) ? (apic_version[apic] == 0x14) ?
"Physical Cluster" : "Logical Cluster", "Physical Cluster" : "Logical Cluster",
nr_ioapics, cpus_addr(*es7000_target_cpus())[0]); nr_ioapics, cpus_addr(*es7000_target_cpus())[0]);
} }
static int es7000_apicid_to_node(int logical_apicid) static int es7000_apicid_to_node(int logical_apicid)
...@@ -488,13 +529,14 @@ static int es7000_cpu_present_to_apicid(int mps_cpu) ...@@ -488,13 +529,14 @@ static int es7000_cpu_present_to_apicid(int mps_cpu)
return BAD_APICID; return BAD_APICID;
} }
static int cpu_id;
static physid_mask_t es7000_apicid_to_cpu_present(int phys_apicid) static physid_mask_t es7000_apicid_to_cpu_present(int phys_apicid)
{ {
static int id = 0;
physid_mask_t mask; physid_mask_t mask;
mask = physid_mask_of_physid(id); mask = physid_mask_of_physid(cpu_id);
++id; ++cpu_id;
return mask; return mask;
} }
...@@ -547,7 +589,7 @@ es7000_cpu_mask_to_apicid_cluster(const struct cpumask *cpumask) ...@@ -547,7 +589,7 @@ es7000_cpu_mask_to_apicid_cluster(const struct cpumask *cpumask)
int new_apicid = es7000_cpu_to_logical_apicid(cpu); int new_apicid = es7000_cpu_to_logical_apicid(cpu);
if (APIC_CLUSTER(apicid) != APIC_CLUSTER(new_apicid)) { if (APIC_CLUSTER(apicid) != APIC_CLUSTER(new_apicid)) {
printk("%s: Not a valid mask!\n", __func__); WARN(1, "Not a valid mask!");
return 0xFF; return 0xFF;
} }
...@@ -648,38 +690,6 @@ es7000_mps_oem_check(struct mpc_table *mpc, char *oem, char *productid) ...@@ -648,38 +690,6 @@ es7000_mps_oem_check(struct mpc_table *mpc, char *oem, char *productid)
return 0; return 0;
} }
#ifdef CONFIG_ACPI
/* Hook from generic ACPI tables.c */
static int __init es7000_acpi_madt_oem_check(char *oem_id, char *oem_table_id)
{
unsigned long oem_addr = 0;
int check_dsdt;
int ret = 0;
/* check dsdt at first to avoid clear fix_map for oem_addr */
check_dsdt = es7000_check_dsdt();
if (!find_unisys_acpi_oem_table(&oem_addr)) {
if (check_dsdt) {
ret = parse_unisys_oem((char *)oem_addr);
} else {
setup_unisys();
ret = 1;
}
/*
* we need to unmap it
*/
unmap_unisys_acpi_oem_table(oem_addr);
}
return ret;
}
#else
static int __init es7000_acpi_madt_oem_check(char *oem_id, char *oem_table_id)
{
return 0;
}
#endif
struct genapic apic_es7000 = { struct genapic apic_es7000 = {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment