diff options
| author | Ingo Molnar <mingo@elte.hu> | 2009-02-17 09:29:30 -0500 |
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2009-02-17 11:52:50 -0500 |
| commit | 7da18ed924b182f8174de243c55a323c56398675 (patch) | |
| tree | ab036a38e73298aa4db41d38cc38d251204adcff | |
| parent | 352887d1c9d99d4c2f0fbac6176ef0cd4fe7a820 (diff) | |
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: Ingo Molnar <mingo@elte.hu>
| -rw-r--r-- | arch/x86/kernel/es7000_32.c | 170 |
1 files changed, 90 insertions, 80 deletions
diff --git a/arch/x86/kernel/es7000_32.c b/arch/x86/kernel/es7000_32.c index 03acbe95d2b..3519f8cab70 100644 --- a/arch/x86/kernel/es7000_32.c +++ b/arch/x86/kernel/es7000_32.c | |||
| @@ -1,10 +1,14 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Written by: Garry Forsgren, Unisys Corporation | 2 | * Written by: Garry Forsgren, Unisys Corporation |
| 3 | * Natalie Protasevich, Unisys Corporation | 3 | * Natalie Protasevich, Unisys Corporation |
| 4 | * | ||
| 4 | * This file contains the code to configure and interface | 5 | * This file contains the code to configure and interface |
| 5 | * with Unisys ES7000 series hardware system manager. | 6 | * with Unisys ES7000 series hardware system manager. |
| 6 | * | 7 | * |
| 7 | * Copyright (c) 2003 Unisys Corporation. All Rights Reserved. | 8 | * Copyright (c) 2003 Unisys Corporation. |
| 9 | * Copyright (C) 2009, Red Hat, Inc., Ingo Molnar | ||
| 10 | * | ||
| 11 | * All Rights Reserved. | ||
| 8 | * | 12 | * |
| 9 | * This program is free software; you can redistribute it and/or modify it | 13 | * This program is free software; you can redistribute it and/or modify it |
| 10 | * under the terms of version 2 of the GNU General Public License as | 14 | * under the terms of version 2 of the GNU General Public License as |
| @@ -35,7 +39,9 @@ | |||
| 35 | #include <linux/errno.h> | 39 | #include <linux/errno.h> |
| 36 | #include <linux/acpi.h> | 40 | #include <linux/acpi.h> |
| 37 | #include <linux/init.h> | 41 | #include <linux/init.h> |
| 42 | #include <linux/nmi.h> | ||
| 38 | #include <linux/smp.h> | 43 | #include <linux/smp.h> |
| 44 | #include <linux/io.h> | ||
| 39 | 45 | ||
| 40 | #include <asm/apicdef.h> | 46 | #include <asm/apicdef.h> |
| 41 | #include <asm/atomic.h> | 47 | #include <asm/atomic.h> |
| @@ -44,9 +50,6 @@ | |||
| 44 | #include <asm/setup.h> | 50 | #include <asm/setup.h> |
| 45 | #include <asm/apic.h> | 51 | #include <asm/apic.h> |
| 46 | #include <asm/ipi.h> | 52 | #include <asm/ipi.h> |
| 47 | #include <asm/nmi.h> | ||
| 48 | #include <asm/smp.h> | ||
| 49 | #include <asm/io.h> | ||
| 50 | 53 | ||
| 51 | /* | 54 | /* |
| 52 | * ES7000 chipsets | 55 | * ES7000 chipsets |
| @@ -93,22 +96,28 @@ struct psai { | |||
| 93 | }; | 96 | }; |
| 94 | 97 | ||
| 95 | #ifdef CONFIG_ACPI | 98 | #ifdef CONFIG_ACPI |
| 99 | |||
| 96 | struct es7000_oem_table { | 100 | struct es7000_oem_table { |
| 97 | struct acpi_table_header Header; | 101 | struct acpi_table_header Header; |
| 98 | u32 OEMTableAddr; | 102 | u32 OEMTableAddr; |
| 99 | u32 OEMTableSize; | 103 | u32 OEMTableSize; |
| 100 | }; | 104 | }; |
| 105 | |||
| 106 | static unsigned long oem_addrX; | ||
| 107 | static unsigned long oem_size; | ||
| 108 | |||
| 101 | #endif | 109 | #endif |
| 102 | 110 | ||
| 103 | /* | 111 | /* |
| 104 | * ES7000 Globals | 112 | * ES7000 Globals |
| 105 | */ | 113 | */ |
| 106 | 114 | ||
| 107 | static volatile unsigned long *psai = NULL; | 115 | static volatile unsigned long *psai; |
| 108 | static struct mip_reg *mip_reg; | 116 | static struct mip_reg *mip_reg; |
| 109 | static struct mip_reg *host_reg; | 117 | static struct mip_reg *host_reg; |
| 110 | static int mip_port; | 118 | static int mip_port; |
| 111 | static unsigned long mip_addr, host_addr; | 119 | static unsigned long mip_addr; |
| 120 | static unsigned long host_addr; | ||
| 112 | 121 | ||
| 113 | int es7000_plat; | 122 | int es7000_plat; |
| 114 | 123 | ||
| @@ -252,31 +261,35 @@ static int __init parse_unisys_oem(char *oemptr) | |||
| 252 | } | 261 | } |
| 253 | 262 | ||
| 254 | #ifdef CONFIG_ACPI | 263 | #ifdef CONFIG_ACPI |
| 255 | |||
| 256 | static unsigned long oem_addrX; | ||
| 257 | static unsigned long oem_size; | ||
| 258 | |||
| 259 | static int __init find_unisys_acpi_oem_table(unsigned long *oem_addr) | 264 | static int __init find_unisys_acpi_oem_table(unsigned long *oem_addr) |
| 260 | { | 265 | { |
| 261 | struct acpi_table_header *header = NULL; | 266 | struct acpi_table_header *header = NULL; |
| 262 | int i = 0; | 267 | struct es7000_oem_table *table; |
| 263 | acpi_size tbl_size; | 268 | acpi_size tbl_size; |
| 269 | acpi_status ret; | ||
| 270 | int i = 0; | ||
| 264 | 271 | ||
| 265 | while (ACPI_SUCCESS(acpi_get_table_with_size("OEM1", i++, &header, &tbl_size))) { | 272 | for (;;) { |
| 266 | if (!memcmp((char *) &header->oem_id, "UNISYS", 6)) { | 273 | ret = acpi_get_table_with_size("OEM1", i++, &header, &tbl_size); |
| 267 | struct es7000_oem_table *t = (void *)header; | 274 | if (!ACPI_SUCCESS(ret)) |
| 275 | return -1; | ||
| 268 | 276 | ||
| 269 | oem_addrX = t->OEMTableAddr; | 277 | if (!memcmp((char *) &header->oem_id, "UNISYS", 6)) |
| 270 | oem_size = t->OEMTableSize; | 278 | break; |
| 271 | early_acpi_os_unmap_memory(header, tbl_size); | ||
| 272 | 279 | ||
| 273 | *oem_addr = (unsigned long)__acpi_map_table(oem_addrX, | ||
| 274 | oem_size); | ||
| 275 | return 0; | ||
| 276 | } | ||
| 277 | early_acpi_os_unmap_memory(header, tbl_size); | 280 | early_acpi_os_unmap_memory(header, tbl_size); |
| 278 | } | 281 | } |
| 279 | return -1; | 282 | |
| 283 | table = (void *)header; | ||
| 284 | |||
| 285 | oem_addrX = table->OEMTableAddr; | ||
| 286 | oem_size = table->OEMTableSize; | ||
| 287 | |||
| 288 | early_acpi_os_unmap_memory(header, tbl_size); | ||
| 289 | |||
| 290 | *oem_addr = (unsigned long)__acpi_map_table(oem_addrX, oem_size); | ||
| 291 | |||
| 292 | return 0; | ||
| 280 | } | 293 | } |
| 281 | 294 | ||
| 282 | static void __init unmap_unisys_acpi_oem_table(unsigned long oem_addr) | 295 | 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 | 299 | ||
| 287 | __acpi_unmap_table((char *)oem_addr, oem_size); | 300 | __acpi_unmap_table((char *)oem_addr, oem_size); |
| 288 | } | 301 | } |
| 289 | #endif | 302 | |
| 303 | static int es7000_check_dsdt(void) | ||
| 304 | { | ||
| 305 | struct acpi_table_header header; | ||
| 306 | |||
| 307 | if (ACPI_SUCCESS(acpi_get_table_header(ACPI_SIG_DSDT, 0, &header)) && | ||
| 308 | !strncmp(header.oem_id, "UNISYS", 6)) | ||
| 309 | return 1; | ||
| 310 | return 0; | ||
| 311 | } | ||
| 312 | |||
| 313 | /* Hook from generic ACPI tables.c */ | ||
| 314 | static int __init es7000_acpi_madt_oem_check(char *oem_id, char *oem_table_id) | ||
| 315 | { | ||
| 316 | unsigned long oem_addr = 0; | ||
| 317 | int check_dsdt; | ||
| 318 | int ret = 0; | ||
| 319 | |||
| 320 | /* check dsdt at first to avoid clear fix_map for oem_addr */ | ||
| 321 | check_dsdt = es7000_check_dsdt(); | ||
| 322 | |||
| 323 | if (!find_unisys_acpi_oem_table(&oem_addr)) { | ||
| 324 | if (check_dsdt) { | ||
| 325 | ret = parse_unisys_oem((char *)oem_addr); | ||
| 326 | } else { | ||
| 327 | setup_unisys(); | ||
| 328 | ret = 1; | ||
| 329 | } | ||
| 330 | /* | ||
| 331 | * we need to unmap it | ||
| 332 | */ | ||
| 333 | unmap_unisys_acpi_oem_table(oem_addr); | ||
| 334 | } | ||
| 335 | return ret; | ||
| 336 | } | ||
| 337 | #else /* !CONFIG_ACPI: */ | ||
| 338 | static int __init es7000_acpi_madt_oem_check(char *oem_id, char *oem_table_id) | ||
| 339 | { | ||
| 340 | return 0; | ||
| 341 | } | ||
| 342 | #endif /* !CONFIG_ACPI */ | ||
| 290 | 343 | ||
| 291 | static void es7000_spin(int n) | 344 | static void es7000_spin(int n) |
| 292 | { | 345 | { |
| @@ -305,7 +358,7 @@ es7000_mip_write(struct mip_reg *mip_reg) | |||
| 305 | spin = MIP_SPIN; | 358 | spin = MIP_SPIN; |
| 306 | while ((host_reg->off_0x38 & MIP_VALID) != 0) { | 359 | while ((host_reg->off_0x38 & MIP_VALID) != 0) { |
| 307 | if (--spin <= 0) { | 360 | if (--spin <= 0) { |
| 308 | printk("es7000_mip_write: Timeout waiting for Host Valid Flag"); | 361 | WARN(1, "Timeout waiting for Host Valid Flag\n"); |
| 309 | return -1; | 362 | return -1; |
| 310 | } | 363 | } |
| 311 | es7000_spin(MIP_SPIN); | 364 | es7000_spin(MIP_SPIN); |
| @@ -318,7 +371,7 @@ es7000_mip_write(struct mip_reg *mip_reg) | |||
| 318 | 371 | ||
| 319 | while ((mip_reg->off_0x38 & MIP_VALID) == 0) { | 372 | while ((mip_reg->off_0x38 & MIP_VALID) == 0) { |
| 320 | if (--spin <= 0) { | 373 | if (--spin <= 0) { |
| 321 | printk("es7000_mip_write: Timeout waiting for MIP Valid Flag"); | 374 | WARN(1, "Timeout waiting for MIP Valid Flag\n"); |
| 322 | return -1; | 375 | return -1; |
| 323 | } | 376 | } |
| 324 | es7000_spin(MIP_SPIN); | 377 | es7000_spin(MIP_SPIN); |
| @@ -338,15 +391,13 @@ static void __init es7000_enable_apic_mode(void) | |||
| 338 | if (!es7000_plat) | 391 | if (!es7000_plat) |
| 339 | return; | 392 | return; |
| 340 | 393 | ||
| 341 | printk("ES7000: Enabling APIC mode.\n"); | 394 | printk(KERN_INFO "ES7000: Enabling APIC mode.\n"); |
| 342 | memset(&es7000_mip_reg, 0, sizeof(struct mip_reg)); | 395 | memset(&es7000_mip_reg, 0, sizeof(struct mip_reg)); |
| 343 | es7000_mip_reg.off_0x00 = MIP_SW_APIC; | 396 | es7000_mip_reg.off_0x00 = MIP_SW_APIC; |
| 344 | es7000_mip_reg.off_0x38 = MIP_VALID; | 397 | es7000_mip_reg.off_0x38 = MIP_VALID; |
| 345 | 398 | ||
| 346 | while ((mip_status = es7000_mip_write(&es7000_mip_reg)) != 0) { | 399 | while ((mip_status = es7000_mip_write(&es7000_mip_reg)) != 0) |
| 347 | printk("es7000_enable_apic_mode: command failed, status = %x\n", | 400 | WARN(1, "Command failed, status = %x\n", mip_status); |
| 348 | mip_status); | ||
| 349 | } | ||
| 350 | } | 401 | } |
| 351 | 402 | ||
| 352 | static void es7000_vector_allocation_domain(int cpu, cpumask_t *retmask) | 403 | 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 | return (x >> 24) & 0xFF; | 428 | return (x >> 24) & 0xFF; |
| 378 | } | 429 | } |
| 379 | 430 | ||
| 380 | #ifdef CONFIG_ACPI | ||
| 381 | static int es7000_check_dsdt(void) | ||
| 382 | { | ||
| 383 | struct acpi_table_header header; | ||
| 384 | |||
| 385 | if (ACPI_SUCCESS(acpi_get_table_header(ACPI_SIG_DSDT, 0, &header)) && | ||
| 386 | !strncmp(header.oem_id, "UNISYS", 6)) | ||
| 387 | return 1; | ||
| 388 | return 0; | ||
| 389 | } | ||
| 390 | #endif | ||
| 391 | |||
| 392 | static void es7000_send_IPI_mask(const struct cpumask *mask, int vector) | 431 | static void es7000_send_IPI_mask(const struct cpumask *mask, int vector) |
| 393 | { | 432 | { |
| 394 | default_send_IPI_mask_sequence_phys(mask, vector); | 433 | default_send_IPI_mask_sequence_phys(mask, vector); |
| @@ -466,10 +505,12 @@ static void es7000_init_apic_ldr(void) | |||
| 466 | static void es7000_setup_apic_routing(void) | 505 | static void es7000_setup_apic_routing(void) |
| 467 | { | 506 | { |
| 468 | int apic = per_cpu(x86_bios_cpu_apicid, smp_processor_id()); | 507 | int apic = per_cpu(x86_bios_cpu_apicid, smp_processor_id()); |
| 469 | printk("Enabling APIC mode: %s. Using %d I/O APICs, target cpus %lx\n", | 508 | |
| 509 | printk(KERN_INFO | ||
| 510 | "Enabling APIC mode: %s. Using %d I/O APICs, target cpus %lx\n", | ||
| 470 | (apic_version[apic] == 0x14) ? | 511 | (apic_version[apic] == 0x14) ? |
| 471 | "Physical Cluster" : "Logical Cluster", | 512 | "Physical Cluster" : "Logical Cluster", |
| 472 | nr_ioapics, cpus_addr(*es7000_target_cpus())[0]); | 513 | nr_ioapics, cpus_addr(*es7000_target_cpus())[0]); |
| 473 | } | 514 | } |
| 474 | 515 | ||
| 475 | static int es7000_apicid_to_node(int logical_apicid) | 516 | static int es7000_apicid_to_node(int logical_apicid) |
| @@ -488,13 +529,14 @@ static int es7000_cpu_present_to_apicid(int mps_cpu) | |||
| 488 | return BAD_APICID; | 529 | return BAD_APICID; |
| 489 | } | 530 | } |
| 490 | 531 | ||
| 532 | static int cpu_id; | ||
| 533 | |||
| 491 | static physid_mask_t es7000_apicid_to_cpu_present(int phys_apicid) | 534 | static physid_mask_t es7000_apicid_to_cpu_present(int phys_apicid) |
| 492 | { | 535 | { |
| 493 | static int id = 0; | ||
| 494 | physid_mask_t mask; | 536 | physid_mask_t mask; |
| 495 | 537 | ||
| 496 | mask = physid_mask_of_physid(id); | 538 | mask = physid_mask_of_physid(cpu_id); |
| 497 | ++id; | 539 | ++cpu_id; |
| 498 | 540 | ||
| 499 | return mask; | 541 | return mask; |
| 500 | } | 542 | } |
| @@ -547,7 +589,7 @@ es7000_cpu_mask_to_apicid_cluster(const struct cpumask *cpumask) | |||
| 547 | int new_apicid = es7000_cpu_to_logical_apicid(cpu); | 589 | int new_apicid = es7000_cpu_to_logical_apicid(cpu); |
| 548 | 590 | ||
| 549 | if (APIC_CLUSTER(apicid) != APIC_CLUSTER(new_apicid)) { | 591 | if (APIC_CLUSTER(apicid) != APIC_CLUSTER(new_apicid)) { |
| 550 | printk("%s: Not a valid mask!\n", __func__); | 592 | WARN(1, "Not a valid mask!"); |
| 551 | 593 | ||
| 552 | return 0xFF; | 594 | return 0xFF; |
| 553 | } | 595 | } |
| @@ -648,38 +690,6 @@ es7000_mps_oem_check(struct mpc_table *mpc, char *oem, char *productid) | |||
| 648 | return 0; | 690 | return 0; |
| 649 | } | 691 | } |
| 650 | 692 | ||
| 651 | #ifdef CONFIG_ACPI | ||
| 652 | /* Hook from generic ACPI tables.c */ | ||
| 653 | static int __init es7000_acpi_madt_oem_check(char *oem_id, char *oem_table_id) | ||
| 654 | { | ||
| 655 | unsigned long oem_addr = 0; | ||
| 656 | int check_dsdt; | ||
| 657 | int ret = 0; | ||
| 658 | |||
| 659 | /* check dsdt at first to avoid clear fix_map for oem_addr */ | ||
| 660 | check_dsdt = es7000_check_dsdt(); | ||
| 661 | |||
| 662 | if (!find_unisys_acpi_oem_table(&oem_addr)) { | ||
| 663 | if (check_dsdt) { | ||
| 664 | ret = parse_unisys_oem((char *)oem_addr); | ||
| 665 | } else { | ||
| 666 | setup_unisys(); | ||
| 667 | ret = 1; | ||
| 668 | } | ||
| 669 | /* | ||
| 670 | * we need to unmap it | ||
| 671 | */ | ||
| 672 | unmap_unisys_acpi_oem_table(oem_addr); | ||
| 673 | } | ||
| 674 | return ret; | ||
| 675 | } | ||
| 676 | #else | ||
| 677 | static int __init es7000_acpi_madt_oem_check(char *oem_id, char *oem_table_id) | ||
| 678 | { | ||
| 679 | return 0; | ||
| 680 | } | ||
| 681 | #endif | ||
| 682 | |||
| 683 | 693 | ||
| 684 | struct genapic apic_es7000 = { | 694 | struct genapic apic_es7000 = { |
| 685 | 695 | ||
