diff options
| author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-04-30 11:10:12 -0400 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-04-30 11:10:12 -0400 | 
| commit | 24a77daf3d80bddcece044e6dc3675e427eef3f3 (patch) | |
| tree | 2c5e0b0bea394d6fe62c5d5857c252e83e48ac48 /arch/powerpc/kernel/setup-common.c | |
| parent | e389f9aec689209724105ae80a6c91fd2e747bc9 (diff) | |
| parent | f900e9777fc9b65140cb9570438597bc8fae56ab (diff) | |
Merge branch 'for-2.6.22' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc
* 'for-2.6.22' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc: (255 commits)
  [POWERPC] Remove dev_dbg redefinition in drivers/ps3/vuart.c
  [POWERPC] remove kernel module option for booke wdt
  [POWERPC] Avoid putting cpu node twice
  [POWERPC] Spinlock initializer cleanup
  [POWERPC] ppc4xx_sgdma needs dma-mapping.h
  [POWERPC] arch/powerpc/sysdev/timer.c build fix
  [POWERPC] get_property cleanups
  [POWERPC] Remove the unused HTDMSOUND driver
  [POWERPC] cell: cbe_cpufreq cleanup and crash fix
  [POWERPC] Declare enable_kernel_spe in a header
  [POWERPC] Add dt_xlate_addr() to bootwrapper
  [POWERPC] bootwrapper: CONFIG_ -> CONFIG_DEVICE_TREE
  [POWERPC] Don't define a custom bd_t for Xilixn Virtex based boards.
  [POWERPC] Add sane defaults for Xilinx EDK generated xparameters files
  [POWERPC] Add uartlite boot console driver for the zImage wrapper
  [POWERPC] Stop using ppc_sys for Xilinx Virtex boards
  [POWERPC] New registration for common Xilinx Virtex ppc405 platform devices
  [POWERPC] Merge common virtex header files
  [POWERPC] Rework Kconfig dependancies for Xilinx Virtex ppc405 platform
  [POWERPC] Clean up cpufreq Kconfig dependencies
  ...
Diffstat (limited to 'arch/powerpc/kernel/setup-common.c')
| -rw-r--r-- | arch/powerpc/kernel/setup-common.c | 68 | 
1 files changed, 39 insertions, 29 deletions
| diff --git a/arch/powerpc/kernel/setup-common.c b/arch/powerpc/kernel/setup-common.c index 89cfaf49d3de..370803722e47 100644 --- a/arch/powerpc/kernel/setup-common.c +++ b/arch/powerpc/kernel/setup-common.c | |||
| @@ -21,7 +21,6 @@ | |||
| 21 | #include <linux/delay.h> | 21 | #include <linux/delay.h> | 
| 22 | #include <linux/initrd.h> | 22 | #include <linux/initrd.h> | 
| 23 | #include <linux/platform_device.h> | 23 | #include <linux/platform_device.h> | 
| 24 | #include <linux/ide.h> | ||
| 25 | #include <linux/seq_file.h> | 24 | #include <linux/seq_file.h> | 
| 26 | #include <linux/ioport.h> | 25 | #include <linux/ioport.h> | 
| 27 | #include <linux/console.h> | 26 | #include <linux/console.h> | 
| @@ -304,26 +303,8 @@ struct seq_operations cpuinfo_op = { | |||
| 304 | void __init check_for_initrd(void) | 303 | void __init check_for_initrd(void) | 
| 305 | { | 304 | { | 
| 306 | #ifdef CONFIG_BLK_DEV_INITRD | 305 | #ifdef CONFIG_BLK_DEV_INITRD | 
| 307 | const unsigned int *prop; | 306 | DBG(" -> check_for_initrd() initrd_start=0x%lx initrd_end=0x%lx\n", | 
| 308 | int len; | 307 | initrd_start, initrd_end); | 
| 309 | |||
| 310 | DBG(" -> check_for_initrd()\n"); | ||
| 311 | |||
| 312 | if (of_chosen) { | ||
| 313 | prop = get_property(of_chosen, "linux,initrd-start", &len); | ||
| 314 | if (prop != NULL) { | ||
| 315 | initrd_start = (unsigned long) | ||
| 316 | __va(of_read_ulong(prop, len / 4)); | ||
| 317 | prop = get_property(of_chosen, | ||
| 318 | "linux,initrd-end", &len); | ||
| 319 | if (prop != NULL) { | ||
| 320 | initrd_end = (unsigned long) | ||
| 321 | __va(of_read_ulong(prop, len / 4)); | ||
| 322 | initrd_below_start_ok = 1; | ||
| 323 | } else | ||
| 324 | initrd_start = 0; | ||
| 325 | } | ||
| 326 | } | ||
| 327 | 308 | ||
| 328 | /* If we were passed an initrd, set the ROOT_DEV properly if the values | 309 | /* If we were passed an initrd, set the ROOT_DEV properly if the values | 
| 329 | * look sensible. If not, clear initrd reference. | 310 | * look sensible. If not, clear initrd reference. | 
| @@ -371,11 +352,12 @@ void __init smp_setup_cpu_maps(void) | |||
| 371 | const int *intserv; | 352 | const int *intserv; | 
| 372 | int j, len = sizeof(u32), nthreads = 1; | 353 | int j, len = sizeof(u32), nthreads = 1; | 
| 373 | 354 | ||
| 374 | intserv = get_property(dn, "ibm,ppc-interrupt-server#s", &len); | 355 | intserv = of_get_property(dn, "ibm,ppc-interrupt-server#s", | 
| 356 | &len); | ||
| 375 | if (intserv) | 357 | if (intserv) | 
| 376 | nthreads = len / sizeof(int); | 358 | nthreads = len / sizeof(int); | 
| 377 | else { | 359 | else { | 
| 378 | intserv = get_property(dn, "reg", NULL); | 360 | intserv = of_get_property(dn, "reg", NULL); | 
| 379 | if (!intserv) | 361 | if (!intserv) | 
| 380 | intserv = &cpu; /* assume logical == phys */ | 362 | intserv = &cpu; /* assume logical == phys */ | 
| 381 | } | 363 | } | 
| @@ -398,10 +380,10 @@ void __init smp_setup_cpu_maps(void) | |||
| 398 | int num_addr_cell, num_size_cell, maxcpus; | 380 | int num_addr_cell, num_size_cell, maxcpus; | 
| 399 | const unsigned int *ireg; | 381 | const unsigned int *ireg; | 
| 400 | 382 | ||
| 401 | num_addr_cell = prom_n_addr_cells(dn); | 383 | num_addr_cell = of_n_addr_cells(dn); | 
| 402 | num_size_cell = prom_n_size_cells(dn); | 384 | num_size_cell = of_n_size_cells(dn); | 
| 403 | 385 | ||
| 404 | ireg = get_property(dn, "ibm,lrdr-capacity", NULL); | 386 | ireg = of_get_property(dn, "ibm,lrdr-capacity", NULL); | 
| 405 | 387 | ||
| 406 | if (!ireg) | 388 | if (!ireg) | 
| 407 | goto out; | 389 | goto out; | 
| @@ -496,11 +478,39 @@ void probe_machine(void) | |||
| 496 | printk(KERN_INFO "Using %s machine description\n", ppc_md.name); | 478 | printk(KERN_INFO "Using %s machine description\n", ppc_md.name); | 
| 497 | } | 479 | } | 
| 498 | 480 | ||
| 481 | /* Match a class of boards, not a specific device configuration. */ | ||
| 499 | int check_legacy_ioport(unsigned long base_port) | 482 | int check_legacy_ioport(unsigned long base_port) | 
| 500 | { | 483 | { | 
| 501 | if (ppc_md.check_legacy_ioport == NULL) | 484 | struct device_node *parent, *np = NULL; | 
| 502 | return 0; | 485 | int ret = -ENODEV; | 
| 503 | return ppc_md.check_legacy_ioport(base_port); | 486 | |
| 487 | switch(base_port) { | ||
| 488 | case I8042_DATA_REG: | ||
| 489 | np = of_find_node_by_type(NULL, "8042"); | ||
| 490 | break; | ||
| 491 | case FDC_BASE: /* FDC1 */ | ||
| 492 | np = of_find_node_by_type(NULL, "fdc"); | ||
| 493 | break; | ||
| 494 | #ifdef CONFIG_PPC_PREP | ||
| 495 | case _PIDXR: | ||
| 496 | case _PNPWRP: | ||
| 497 | case PNPBIOS_BASE: | ||
| 498 | /* implement me */ | ||
| 499 | #endif | ||
| 500 | default: | ||
| 501 | /* ipmi is supposed to fail here */ | ||
| 502 | break; | ||
| 503 | } | ||
| 504 | if (!np) | ||
| 505 | return ret; | ||
| 506 | parent = of_get_parent(np); | ||
| 507 | if (parent) { | ||
| 508 | if (strcmp(parent->type, "isa") == 0) | ||
| 509 | ret = 0; | ||
| 510 | of_node_put(parent); | ||
| 511 | } | ||
| 512 | of_node_put(np); | ||
| 513 | return ret; | ||
| 504 | } | 514 | } | 
| 505 | EXPORT_SYMBOL(check_legacy_ioport); | 515 | EXPORT_SYMBOL(check_legacy_ioport); | 
| 506 | 516 | ||
