diff options
author | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2006-03-28 07:15:54 -0500 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2006-03-28 07:15:54 -0500 |
commit | e8222502ee6157e2713da9e0792c21f4ad458d50 (patch) | |
tree | 0f970fb99912c257a7e5254f863a53f79d22ab14 /arch/powerpc/platforms | |
parent | 056cb48a2fb6fb31debf665695a9f97b45cfb8ec (diff) |
[PATCH] powerpc: Kill _machine and hard-coded platform numbers
This removes statically assigned platform numbers and reworks the
powerpc platform probe code to use a better mechanism. With this,
board support files can simply declare a new machine type with a
macro, and implement a probe() function that uses the flattened
device-tree to detect if they apply for a given machine.
We now have a machine_is() macro that replaces the comparisons of
_machine with the various PLATFORM_* constants. This commit also
changes various drivers to use the new macro instead of looking at
_machine.
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'arch/powerpc/platforms')
-rw-r--r-- | arch/powerpc/platforms/cell/setup.c | 11 | ||||
-rw-r--r-- | arch/powerpc/platforms/chrp/setup.c | 13 | ||||
-rw-r--r-- | arch/powerpc/platforms/iseries/setup.c | 9 | ||||
-rw-r--r-- | arch/powerpc/platforms/maple/setup.c | 8 | ||||
-rw-r--r-- | arch/powerpc/platforms/powermac/bootx_init.c | 4 | ||||
-rw-r--r-- | arch/powerpc/platforms/powermac/feature.c | 2 | ||||
-rw-r--r-- | arch/powerpc/platforms/powermac/low_i2c.c | 3 | ||||
-rw-r--r-- | arch/powerpc/platforms/powermac/nvram.c | 2 | ||||
-rw-r--r-- | arch/powerpc/platforms/powermac/pci.c | 5 | ||||
-rw-r--r-- | arch/powerpc/platforms/powermac/pfunc_base.c | 2 | ||||
-rw-r--r-- | arch/powerpc/platforms/powermac/setup.c | 72 | ||||
-rw-r--r-- | arch/powerpc/platforms/powermac/time.c | 4 | ||||
-rw-r--r-- | arch/powerpc/platforms/pseries/eeh.c | 2 | ||||
-rw-r--r-- | arch/powerpc/platforms/pseries/pci.c | 2 | ||||
-rw-r--r-- | arch/powerpc/platforms/pseries/pci_dlpar.c | 1 | ||||
-rw-r--r-- | arch/powerpc/platforms/pseries/reconfig.c | 5 | ||||
-rw-r--r-- | arch/powerpc/platforms/pseries/rtasd.c | 3 | ||||
-rw-r--r-- | arch/powerpc/platforms/pseries/setup.c | 39 |
18 files changed, 121 insertions, 66 deletions
diff --git a/arch/powerpc/platforms/cell/setup.c b/arch/powerpc/platforms/cell/setup.c index fec8e65b36ea..dac5d0365fde 100644 --- a/arch/powerpc/platforms/cell/setup.c +++ b/arch/powerpc/platforms/cell/setup.c | |||
@@ -195,9 +195,13 @@ static void __init cell_init_early(void) | |||
195 | } | 195 | } |
196 | 196 | ||
197 | 197 | ||
198 | static int __init cell_probe(int platform) | 198 | static int __init cell_probe(void) |
199 | { | 199 | { |
200 | if (platform != PLATFORM_CELL) | 200 | /* XXX This is temporary, the Cell maintainer will come up with |
201 | * more appropriate detection logic | ||
202 | */ | ||
203 | unsigned long root = of_get_flat_dt_root(); | ||
204 | if (!of_flat_dt_is_compatible(root, "IBM,CPBW-1.0")) | ||
201 | return 0; | 205 | return 0; |
202 | 206 | ||
203 | return 1; | 207 | return 1; |
@@ -212,7 +216,8 @@ static int cell_check_legacy_ioport(unsigned int baseport) | |||
212 | return -ENODEV; | 216 | return -ENODEV; |
213 | } | 217 | } |
214 | 218 | ||
215 | struct machdep_calls __initdata cell_md = { | 219 | define_machine(cell) { |
220 | .name = "Cell", | ||
216 | .probe = cell_probe, | 221 | .probe = cell_probe, |
217 | .setup_arch = cell_setup_arch, | 222 | .setup_arch = cell_setup_arch, |
218 | .init_early = cell_init_early, | 223 | .init_early = cell_init_early, |
diff --git a/arch/powerpc/platforms/chrp/setup.c b/arch/powerpc/platforms/chrp/setup.c index 9c718bb2305e..23a201718704 100644 --- a/arch/powerpc/platforms/chrp/setup.c +++ b/arch/powerpc/platforms/chrp/setup.c | |||
@@ -292,6 +292,10 @@ void __init chrp_setup_arch(void) | |||
292 | 292 | ||
293 | pci_create_OF_bus_map(); | 293 | pci_create_OF_bus_map(); |
294 | 294 | ||
295 | #ifdef CONFIG_SMP | ||
296 | smp_ops = &chrp_smp_ops; | ||
297 | #endif /* CONFIG_SMP */ | ||
298 | |||
295 | /* | 299 | /* |
296 | * Print the banner, then scroll down so boot progress | 300 | * Print the banner, then scroll down so boot progress |
297 | * can be printed. -- Cort | 301 | * can be printed. -- Cort |
@@ -506,8 +510,15 @@ chrp_init2(void) | |||
506 | ppc_md.progress(" Have fun! ", 0x7777); | 510 | ppc_md.progress(" Have fun! ", 0x7777); |
507 | } | 511 | } |
508 | 512 | ||
509 | void __init chrp_init(void) | 513 | static int __init chrp_probe(void) |
510 | { | 514 | { |
515 | char *dtype = of_get_flat_dt_prop(of_get_flat_dt_root(), | ||
516 | "device_type", NULL); | ||
517 | if (dtype == NULL) | ||
518 | return 0; | ||
519 | if (strcmp(dtype, "chrp")) | ||
520 | return 0; | ||
521 | |||
511 | ISA_DMA_THRESHOLD = ~0L; | 522 | ISA_DMA_THRESHOLD = ~0L; |
512 | DMA_MODE_READ = 0x44; | 523 | DMA_MODE_READ = 0x44; |
513 | DMA_MODE_WRITE = 0x48; | 524 | DMA_MODE_WRITE = 0x48; |
diff --git a/arch/powerpc/platforms/iseries/setup.c b/arch/powerpc/platforms/iseries/setup.c index 155aa690e4bb..6ce8a404ba6b 100644 --- a/arch/powerpc/platforms/iseries/setup.c +++ b/arch/powerpc/platforms/iseries/setup.c | |||
@@ -675,9 +675,10 @@ static void iseries_dedicated_idle(void) | |||
675 | void __init iSeries_init_IRQ(void) { } | 675 | void __init iSeries_init_IRQ(void) { } |
676 | #endif | 676 | #endif |
677 | 677 | ||
678 | static int __init iseries_probe(int platform) | 678 | static int __init iseries_probe(void) |
679 | { | 679 | { |
680 | if (PLATFORM_ISERIES_LPAR != platform) | 680 | unsigned long root = of_get_flat_dt_root(); |
681 | if (!of_flat_dt_is_compatible(root, "IBM,iSeries")) | ||
681 | return 0; | 682 | return 0; |
682 | 683 | ||
683 | powerpc_firmware_features |= FW_FEATURE_ISERIES; | 684 | powerpc_firmware_features |= FW_FEATURE_ISERIES; |
@@ -686,7 +687,8 @@ static int __init iseries_probe(int platform) | |||
686 | return 1; | 687 | return 1; |
687 | } | 688 | } |
688 | 689 | ||
689 | struct machdep_calls __initdata iseries_md = { | 690 | define_machine(iseries) { |
691 | .name = "iSeries", | ||
690 | .setup_arch = iSeries_setup_arch, | 692 | .setup_arch = iSeries_setup_arch, |
691 | .show_cpuinfo = iSeries_show_cpuinfo, | 693 | .show_cpuinfo = iSeries_show_cpuinfo, |
692 | .init_IRQ = iSeries_init_IRQ, | 694 | .init_IRQ = iSeries_init_IRQ, |
@@ -930,7 +932,6 @@ void build_flat_dt(struct iseries_flat_dt *dt, unsigned long phys_mem_size) | |||
930 | 932 | ||
931 | /* /chosen */ | 933 | /* /chosen */ |
932 | dt_start_node(dt, "chosen"); | 934 | dt_start_node(dt, "chosen"); |
933 | dt_prop_u32(dt, "linux,platform", PLATFORM_ISERIES_LPAR); | ||
934 | dt_prop_str(dt, "bootargs", cmd_line); | 935 | dt_prop_str(dt, "bootargs", cmd_line); |
935 | if (cmd_mem_limit) | 936 | if (cmd_mem_limit) |
936 | dt_prop_u64(dt, "linux,memory-limit", cmd_mem_limit); | 937 | dt_prop_u64(dt, "linux,memory-limit", cmd_mem_limit); |
diff --git a/arch/powerpc/platforms/maple/setup.c b/arch/powerpc/platforms/maple/setup.c index 137d6063182b..24c0aef4ea39 100644 --- a/arch/powerpc/platforms/maple/setup.c +++ b/arch/powerpc/platforms/maple/setup.c | |||
@@ -259,9 +259,10 @@ static void __init maple_progress(char *s, unsigned short hex) | |||
259 | /* | 259 | /* |
260 | * Called very early, MMU is off, device-tree isn't unflattened | 260 | * Called very early, MMU is off, device-tree isn't unflattened |
261 | */ | 261 | */ |
262 | static int __init maple_probe(int platform) | 262 | static int __init maple_probe(void) |
263 | { | 263 | { |
264 | if (platform != PLATFORM_MAPLE) | 264 | unsigned long root = of_get_flat_dt_root(); |
265 | if (!of_flat_dt_is_compatible(root, "Momentum,Maple")) | ||
265 | return 0; | 266 | return 0; |
266 | /* | 267 | /* |
267 | * On U3, the DART (iommu) must be allocated now since it | 268 | * On U3, the DART (iommu) must be allocated now since it |
@@ -274,7 +275,8 @@ static int __init maple_probe(int platform) | |||
274 | return 1; | 275 | return 1; |
275 | } | 276 | } |
276 | 277 | ||
277 | struct machdep_calls __initdata maple_md = { | 278 | define_machine(maple_md) { |
279 | .name = "Maple", | ||
278 | .probe = maple_probe, | 280 | .probe = maple_probe, |
279 | .setup_arch = maple_setup_arch, | 281 | .setup_arch = maple_setup_arch, |
280 | .init_early = maple_init_early, | 282 | .init_early = maple_init_early, |
diff --git a/arch/powerpc/platforms/powermac/bootx_init.c b/arch/powerpc/platforms/powermac/bootx_init.c index a94571be65ca..eacbfd9beabc 100644 --- a/arch/powerpc/platforms/powermac/bootx_init.c +++ b/arch/powerpc/platforms/powermac/bootx_init.c | |||
@@ -161,9 +161,7 @@ static void __init bootx_dt_add_prop(char *name, void *data, int size, | |||
161 | static void __init bootx_add_chosen_props(unsigned long base, | 161 | static void __init bootx_add_chosen_props(unsigned long base, |
162 | unsigned long *mem_end) | 162 | unsigned long *mem_end) |
163 | { | 163 | { |
164 | u32 val = _MACH_Pmac; | 164 | u32 val; |
165 | |||
166 | bootx_dt_add_prop("linux,platform", &val, 4, mem_end); | ||
167 | 165 | ||
168 | if (bootx_info->kernelParamsOffset) { | 166 | if (bootx_info->kernelParamsOffset) { |
169 | char *args = (char *)((unsigned long)bootx_info) + | 167 | char *args = (char *)((unsigned long)bootx_info) + |
diff --git a/arch/powerpc/platforms/powermac/feature.c b/arch/powerpc/platforms/powermac/feature.c index e49eddd5042d..a5063cd675c5 100644 --- a/arch/powerpc/platforms/powermac/feature.c +++ b/arch/powerpc/platforms/powermac/feature.c | |||
@@ -2951,7 +2951,7 @@ static void *pmac_early_vresume_data; | |||
2951 | 2951 | ||
2952 | void pmac_set_early_video_resume(void (*proc)(void *data), void *data) | 2952 | void pmac_set_early_video_resume(void (*proc)(void *data), void *data) |
2953 | { | 2953 | { |
2954 | if (_machine != _MACH_Pmac) | 2954 | if (!machine_is(powermac)) |
2955 | return; | 2955 | return; |
2956 | preempt_disable(); | 2956 | preempt_disable(); |
2957 | pmac_early_vresume_proc = proc; | 2957 | pmac_early_vresume_proc = proc; |
diff --git a/arch/powerpc/platforms/powermac/low_i2c.c b/arch/powerpc/platforms/powermac/low_i2c.c index 87eb6bb7f0e7..e14f9ac55cf4 100644 --- a/arch/powerpc/platforms/powermac/low_i2c.c +++ b/arch/powerpc/platforms/powermac/low_i2c.c | |||
@@ -1457,6 +1457,9 @@ int __init pmac_i2c_init(void) | |||
1457 | return 0; | 1457 | return 0; |
1458 | i2c_inited = 1; | 1458 | i2c_inited = 1; |
1459 | 1459 | ||
1460 | if (!machine_is(powermac)) | ||
1461 | return 0; | ||
1462 | |||
1460 | /* Probe keywest-i2c busses */ | 1463 | /* Probe keywest-i2c busses */ |
1461 | kw_i2c_probe(); | 1464 | kw_i2c_probe(); |
1462 | 1465 | ||
diff --git a/arch/powerpc/platforms/powermac/nvram.c b/arch/powerpc/platforms/powermac/nvram.c index 3aa3477b86f7..262f967b880a 100644 --- a/arch/powerpc/platforms/powermac/nvram.c +++ b/arch/powerpc/platforms/powermac/nvram.c | |||
@@ -597,7 +597,7 @@ int __init pmac_nvram_init(void) | |||
597 | } | 597 | } |
598 | 598 | ||
599 | #ifdef CONFIG_PPC32 | 599 | #ifdef CONFIG_PPC32 |
600 | if (_machine == _MACH_chrp && nvram_naddrs == 1) { | 600 | if (machine_is(chrp) && nvram_naddrs == 1) { |
601 | nvram_data = ioremap(r1.start, s1); | 601 | nvram_data = ioremap(r1.start, s1); |
602 | nvram_mult = 1; | 602 | nvram_mult = 1; |
603 | ppc_md.nvram_read_val = direct_nvram_read_byte; | 603 | ppc_md.nvram_read_val = direct_nvram_read_byte; |
diff --git a/arch/powerpc/platforms/powermac/pci.c b/arch/powerpc/platforms/powermac/pci.c index de3f30e6b333..f5d8d15d74fa 100644 --- a/arch/powerpc/platforms/powermac/pci.c +++ b/arch/powerpc/platforms/powermac/pci.c | |||
@@ -1201,7 +1201,7 @@ void __init pmac_pcibios_after_init(void) | |||
1201 | #ifdef CONFIG_PPC32 | 1201 | #ifdef CONFIG_PPC32 |
1202 | void pmac_pci_fixup_cardbus(struct pci_dev* dev) | 1202 | void pmac_pci_fixup_cardbus(struct pci_dev* dev) |
1203 | { | 1203 | { |
1204 | if (_machine != _MACH_Pmac) | 1204 | if (!machine_is(powermac)) |
1205 | return; | 1205 | return; |
1206 | /* | 1206 | /* |
1207 | * Fix the interrupt routing on the various cardbus bridges | 1207 | * Fix the interrupt routing on the various cardbus bridges |
@@ -1244,8 +1244,9 @@ void pmac_pci_fixup_pciata(struct pci_dev* dev) | |||
1244 | * On PowerMacs, we try to switch any PCI ATA controller to | 1244 | * On PowerMacs, we try to switch any PCI ATA controller to |
1245 | * fully native mode | 1245 | * fully native mode |
1246 | */ | 1246 | */ |
1247 | if (_machine != _MACH_Pmac) | 1247 | if (!machine_is(powermac)) |
1248 | return; | 1248 | return; |
1249 | |||
1249 | /* Some controllers don't have the class IDE */ | 1250 | /* Some controllers don't have the class IDE */ |
1250 | if (dev->vendor == PCI_VENDOR_ID_PROMISE) | 1251 | if (dev->vendor == PCI_VENDOR_ID_PROMISE) |
1251 | switch(dev->device) { | 1252 | switch(dev->device) { |
diff --git a/arch/powerpc/platforms/powermac/pfunc_base.c b/arch/powerpc/platforms/powermac/pfunc_base.c index 9b7150f10414..a3bd3e728fa3 100644 --- a/arch/powerpc/platforms/powermac/pfunc_base.c +++ b/arch/powerpc/platforms/powermac/pfunc_base.c | |||
@@ -336,6 +336,8 @@ int __init pmac_pfunc_base_install(void) | |||
336 | return 0; | 336 | return 0; |
337 | pfbase_inited = 1; | 337 | pfbase_inited = 1; |
338 | 338 | ||
339 | if (!machine_is(powermac)) | ||
340 | return 0; | ||
339 | 341 | ||
340 | DBG("Installing base platform functions...\n"); | 342 | DBG("Installing base platform functions...\n"); |
341 | 343 | ||
diff --git a/arch/powerpc/platforms/powermac/setup.c b/arch/powerpc/platforms/powermac/setup.c index c2696d00672a..4d15e396655c 100644 --- a/arch/powerpc/platforms/powermac/setup.c +++ b/arch/powerpc/platforms/powermac/setup.c | |||
@@ -350,6 +350,13 @@ static void __init pmac_setup_arch(void) | |||
350 | smp_ops = &psurge_smp_ops; | 350 | smp_ops = &psurge_smp_ops; |
351 | #endif | 351 | #endif |
352 | #endif /* CONFIG_SMP */ | 352 | #endif /* CONFIG_SMP */ |
353 | |||
354 | #ifdef CONFIG_ADB | ||
355 | if (strstr(cmd_line, "adb_sync")) { | ||
356 | extern int __adb_probe_sync; | ||
357 | __adb_probe_sync = 1; | ||
358 | } | ||
359 | #endif /* CONFIG_ADB */ | ||
353 | } | 360 | } |
354 | 361 | ||
355 | char *bootpath; | 362 | char *bootpath; |
@@ -576,30 +583,6 @@ pmac_halt(void) | |||
576 | pmac_power_off(); | 583 | pmac_power_off(); |
577 | } | 584 | } |
578 | 585 | ||
579 | #ifdef CONFIG_PPC32 | ||
580 | void __init pmac_init(void) | ||
581 | { | ||
582 | /* isa_io_base gets set in pmac_pci_init */ | ||
583 | isa_mem_base = PMAC_ISA_MEM_BASE; | ||
584 | pci_dram_offset = PMAC_PCI_DRAM_OFFSET; | ||
585 | ISA_DMA_THRESHOLD = ~0L; | ||
586 | DMA_MODE_READ = 1; | ||
587 | DMA_MODE_WRITE = 2; | ||
588 | |||
589 | ppc_md = pmac_md; | ||
590 | |||
591 | #if defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_IDE_MODULE) | ||
592 | #ifdef CONFIG_BLK_DEV_IDE_PMAC | ||
593 | ppc_ide_md.ide_init_hwif = pmac_ide_init_hwif_ports; | ||
594 | ppc_ide_md.default_io_base = pmac_ide_get_base; | ||
595 | #endif /* CONFIG_BLK_DEV_IDE_PMAC */ | ||
596 | #endif /* defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_IDE_MODULE) */ | ||
597 | |||
598 | if (ppc_md.progress) ppc_md.progress("pmac_init(): exit", 0); | ||
599 | |||
600 | } | ||
601 | #endif | ||
602 | |||
603 | /* | 586 | /* |
604 | * Early initialization. | 587 | * Early initialization. |
605 | */ | 588 | */ |
@@ -646,6 +629,12 @@ static int __init pmac_declare_of_platform_devices(void) | |||
646 | { | 629 | { |
647 | struct device_node *np; | 630 | struct device_node *np; |
648 | 631 | ||
632 | if (machine_is(chrp)) | ||
633 | return -1; | ||
634 | |||
635 | if (!machine_is(powermac)) | ||
636 | return 0; | ||
637 | |||
649 | np = of_find_node_by_name(NULL, "valkyrie"); | 638 | np = of_find_node_by_name(NULL, "valkyrie"); |
650 | if (np) | 639 | if (np) |
651 | of_platform_device_create(np, "valkyrie", NULL); | 640 | of_platform_device_create(np, "valkyrie", NULL); |
@@ -666,12 +655,15 @@ device_initcall(pmac_declare_of_platform_devices); | |||
666 | /* | 655 | /* |
667 | * Called very early, MMU is off, device-tree isn't unflattened | 656 | * Called very early, MMU is off, device-tree isn't unflattened |
668 | */ | 657 | */ |
669 | static int __init pmac_probe(int platform) | 658 | static int __init pmac_probe(void) |
670 | { | 659 | { |
671 | #ifdef CONFIG_PPC64 | 660 | unsigned long root = of_get_flat_dt_root(); |
672 | if (platform != PLATFORM_POWERMAC) | 661 | |
662 | if (!of_flat_dt_is_compatible(root, "Power Macintosh") && | ||
663 | !of_flat_dt_is_compatible(root, "MacRISC")) | ||
673 | return 0; | 664 | return 0; |
674 | 665 | ||
666 | #ifdef CONFIG_PPC64 | ||
675 | /* | 667 | /* |
676 | * On U3, the DART (iommu) must be allocated now since it | 668 | * On U3, the DART (iommu) must be allocated now since it |
677 | * has an impact on htab_initialize (due to the large page it | 669 | * has an impact on htab_initialize (due to the large page it |
@@ -681,6 +673,23 @@ static int __init pmac_probe(int platform) | |||
681 | alloc_dart_table(); | 673 | alloc_dart_table(); |
682 | #endif | 674 | #endif |
683 | 675 | ||
676 | #ifdef CONFIG_PPC32 | ||
677 | /* isa_io_base gets set in pmac_pci_init */ | ||
678 | isa_mem_base = PMAC_ISA_MEM_BASE; | ||
679 | pci_dram_offset = PMAC_PCI_DRAM_OFFSET; | ||
680 | ISA_DMA_THRESHOLD = ~0L; | ||
681 | DMA_MODE_READ = 1; | ||
682 | DMA_MODE_WRITE = 2; | ||
683 | |||
684 | #if defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_IDE_MODULE) | ||
685 | #ifdef CONFIG_BLK_DEV_IDE_PMAC | ||
686 | ppc_ide_md.ide_init_hwif = pmac_ide_init_hwif_ports; | ||
687 | ppc_ide_md.default_io_base = pmac_ide_get_base; | ||
688 | #endif /* CONFIG_BLK_DEV_IDE_PMAC */ | ||
689 | #endif /* defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_IDE_MODULE) */ | ||
690 | |||
691 | #endif /* CONFIG_PPC32 */ | ||
692 | |||
684 | #ifdef CONFIG_PMAC_SMU | 693 | #ifdef CONFIG_PMAC_SMU |
685 | /* | 694 | /* |
686 | * SMU based G5s need some memory below 2Gb, at least the current | 695 | * SMU based G5s need some memory below 2Gb, at least the current |
@@ -709,10 +718,8 @@ static int pmac_pci_probe_mode(struct pci_bus *bus) | |||
709 | } | 718 | } |
710 | #endif | 719 | #endif |
711 | 720 | ||
712 | struct machdep_calls __initdata pmac_md = { | 721 | define_machine(powermac) { |
713 | #if defined(CONFIG_HOTPLUG_CPU) && defined(CONFIG_PPC64) | 722 | .name = "PowerMac", |
714 | .cpu_die = generic_mach_cpu_die, | ||
715 | #endif | ||
716 | .probe = pmac_probe, | 723 | .probe = pmac_probe, |
717 | .setup_arch = pmac_setup_arch, | 724 | .setup_arch = pmac_setup_arch, |
718 | .init_early = pmac_init_early, | 725 | .init_early = pmac_init_early, |
@@ -746,4 +753,7 @@ struct machdep_calls __initdata pmac_md = { | |||
746 | .pcibios_after_init = pmac_pcibios_after_init, | 753 | .pcibios_after_init = pmac_pcibios_after_init, |
747 | .phys_mem_access_prot = pci_phys_mem_access_prot, | 754 | .phys_mem_access_prot = pci_phys_mem_access_prot, |
748 | #endif | 755 | #endif |
756 | #if defined(CONFIG_HOTPLUG_CPU) && defined(CONFIG_PPC64) | ||
757 | .cpu_die = generic_mach_cpu_die, | ||
758 | #endif | ||
749 | }; | 759 | }; |
diff --git a/arch/powerpc/platforms/powermac/time.c b/arch/powerpc/platforms/powermac/time.c index 5d9afa1fa02d..890758aa9667 100644 --- a/arch/powerpc/platforms/powermac/time.c +++ b/arch/powerpc/platforms/powermac/time.c | |||
@@ -336,10 +336,10 @@ static struct pmu_sleep_notifier time_sleep_notifier = { | |||
336 | */ | 336 | */ |
337 | void __init pmac_calibrate_decr(void) | 337 | void __init pmac_calibrate_decr(void) |
338 | { | 338 | { |
339 | #ifdef CONFIG_PM | 339 | #if defined(CONFIG_PM) && defined(CONFIG_ADB_PMU) |
340 | /* XXX why here? */ | 340 | /* XXX why here? */ |
341 | pmu_register_sleep_notifier(&time_sleep_notifier); | 341 | pmu_register_sleep_notifier(&time_sleep_notifier); |
342 | #endif /* CONFIG_PM */ | 342 | #endif |
343 | 343 | ||
344 | generic_calibrate_decr(); | 344 | generic_calibrate_decr(); |
345 | 345 | ||
diff --git a/arch/powerpc/platforms/pseries/eeh.c b/arch/powerpc/platforms/pseries/eeh.c index 2ab9dcdfb415..9b2b1cb117b3 100644 --- a/arch/powerpc/platforms/pseries/eeh.c +++ b/arch/powerpc/platforms/pseries/eeh.c | |||
@@ -1018,7 +1018,7 @@ static int __init eeh_init_proc(void) | |||
1018 | { | 1018 | { |
1019 | struct proc_dir_entry *e; | 1019 | struct proc_dir_entry *e; |
1020 | 1020 | ||
1021 | if (platform_is_pseries()) { | 1021 | if (machine_is(pseries)) { |
1022 | e = create_proc_entry("ppc64/eeh", 0, NULL); | 1022 | e = create_proc_entry("ppc64/eeh", 0, NULL); |
1023 | if (e) | 1023 | if (e) |
1024 | e->proc_fops = &proc_eeh_operations; | 1024 | e->proc_fops = &proc_eeh_operations; |
diff --git a/arch/powerpc/platforms/pseries/pci.c b/arch/powerpc/platforms/pseries/pci.c index 946ad59e3352..e97e67f5e079 100644 --- a/arch/powerpc/platforms/pseries/pci.c +++ b/arch/powerpc/platforms/pseries/pci.c | |||
@@ -120,7 +120,7 @@ static void fixup_winbond_82c105(struct pci_dev* dev) | |||
120 | int i; | 120 | int i; |
121 | unsigned int reg; | 121 | unsigned int reg; |
122 | 122 | ||
123 | if (!platform_is_pseries()) | 123 | if (!machine_is(pseries)) |
124 | return; | 124 | return; |
125 | 125 | ||
126 | printk("Using INTC for W82c105 IDE controller.\n"); | 126 | printk("Using INTC for W82c105 IDE controller.\n"); |
diff --git a/arch/powerpc/platforms/pseries/pci_dlpar.c b/arch/powerpc/platforms/pseries/pci_dlpar.c index b3c2dcb1e4f0..6bfacc217085 100644 --- a/arch/powerpc/platforms/pseries/pci_dlpar.c +++ b/arch/powerpc/platforms/pseries/pci_dlpar.c | |||
@@ -28,6 +28,7 @@ | |||
28 | #include <linux/pci.h> | 28 | #include <linux/pci.h> |
29 | #include <asm/pci-bridge.h> | 29 | #include <asm/pci-bridge.h> |
30 | #include <asm/ppc-pci.h> | 30 | #include <asm/ppc-pci.h> |
31 | #include <asm/firmware.h> | ||
31 | 32 | ||
32 | static struct pci_bus * | 33 | static struct pci_bus * |
33 | find_bus_among_children(struct pci_bus *bus, | 34 | find_bus_among_children(struct pci_bus *bus, |
diff --git a/arch/powerpc/platforms/pseries/reconfig.c b/arch/powerpc/platforms/pseries/reconfig.c index 86cfa6ecdcf3..9a4b592e40bc 100644 --- a/arch/powerpc/platforms/pseries/reconfig.c +++ b/arch/powerpc/platforms/pseries/reconfig.c | |||
@@ -17,8 +17,9 @@ | |||
17 | #include <linux/proc_fs.h> | 17 | #include <linux/proc_fs.h> |
18 | 18 | ||
19 | #include <asm/prom.h> | 19 | #include <asm/prom.h> |
20 | #include <asm/pSeries_reconfig.h> | 20 | #include <asm/machdep.h> |
21 | #include <asm/uaccess.h> | 21 | #include <asm/uaccess.h> |
22 | #include <asm/pSeries_reconfig.h> | ||
22 | 23 | ||
23 | 24 | ||
24 | 25 | ||
@@ -508,7 +509,7 @@ static int proc_ppc64_create_ofdt(void) | |||
508 | { | 509 | { |
509 | struct proc_dir_entry *ent; | 510 | struct proc_dir_entry *ent; |
510 | 511 | ||
511 | if (!platform_is_pseries()) | 512 | if (!machine_is(pseries)) |
512 | return 0; | 513 | return 0; |
513 | 514 | ||
514 | ent = create_proc_entry("ppc64/ofdt", S_IWUSR, NULL); | 515 | ent = create_proc_entry("ppc64/ofdt", S_IWUSR, NULL); |
diff --git a/arch/powerpc/platforms/pseries/rtasd.c b/arch/powerpc/platforms/pseries/rtasd.c index a6f628d4c9dc..fcc4d561a236 100644 --- a/arch/powerpc/platforms/pseries/rtasd.c +++ b/arch/powerpc/platforms/pseries/rtasd.c | |||
@@ -27,6 +27,7 @@ | |||
27 | #include <asm/prom.h> | 27 | #include <asm/prom.h> |
28 | #include <asm/nvram.h> | 28 | #include <asm/nvram.h> |
29 | #include <asm/atomic.h> | 29 | #include <asm/atomic.h> |
30 | #include <asm/machdep.h> | ||
30 | 31 | ||
31 | #if 0 | 32 | #if 0 |
32 | #define DEBUG(A...) printk(KERN_ERR A) | 33 | #define DEBUG(A...) printk(KERN_ERR A) |
@@ -481,7 +482,7 @@ static int __init rtas_init(void) | |||
481 | { | 482 | { |
482 | struct proc_dir_entry *entry; | 483 | struct proc_dir_entry *entry; |
483 | 484 | ||
484 | if (!platform_is_pseries()) | 485 | if (!machine_is(pseries)) |
485 | return 0; | 486 | return 0; |
486 | 487 | ||
487 | /* No RTAS */ | 488 | /* No RTAS */ |
diff --git a/arch/powerpc/platforms/pseries/setup.c b/arch/powerpc/platforms/pseries/setup.c index 1b0c4c034a26..b2fbf8ba8fbb 100644 --- a/arch/powerpc/platforms/pseries/setup.c +++ b/arch/powerpc/platforms/pseries/setup.c | |||
@@ -372,24 +372,42 @@ static int pSeries_check_legacy_ioport(unsigned int baseport) | |||
372 | /* | 372 | /* |
373 | * Called very early, MMU is off, device-tree isn't unflattened | 373 | * Called very early, MMU is off, device-tree isn't unflattened |
374 | */ | 374 | */ |
375 | extern struct machdep_calls pSeries_md; | ||
376 | 375 | ||
377 | static int __init pSeries_probe(int platform) | 376 | static int __init pSeries_probe_hypertas(unsigned long node, |
377 | const char *uname, int depth, | ||
378 | void *data) | ||
378 | { | 379 | { |
379 | if (platform != PLATFORM_PSERIES && | 380 | if (depth != 1 || |
380 | platform != PLATFORM_PSERIES_LPAR) | 381 | (strcmp(uname, "rtas") != 0 && strcmp(uname, "rtas@0") != 0)) |
382 | return 0; | ||
383 | |||
384 | if (of_get_flat_dt_prop(node, "ibm,hypertas-functions", NULL) != NULL) | ||
385 | powerpc_firmware_features |= FW_FEATURE_LPAR; | ||
386 | |||
387 | return 1; | ||
388 | } | ||
389 | |||
390 | static int __init pSeries_probe(void) | ||
391 | { | ||
392 | char *dtype = of_get_flat_dt_prop(of_get_flat_dt_root(), | ||
393 | "device_type", NULL); | ||
394 | if (dtype == NULL) | ||
395 | return 0; | ||
396 | if (strcmp(dtype, "chrp")) | ||
381 | return 0; | 397 | return 0; |
382 | 398 | ||
383 | /* if we have some ppc_md fixups for LPAR to do, do | 399 | DBG("pSeries detected, looking for LPAR capability...\n"); |
384 | * it here ... | ||
385 | */ | ||
386 | 400 | ||
387 | if (platform == PLATFORM_PSERIES_LPAR) | 401 | /* Now try to figure out if we are running on LPAR */ |
388 | powerpc_firmware_features |= FW_FEATURE_LPAR; | 402 | of_scan_flat_dt(pSeries_probe_hypertas, NULL); |
403 | |||
404 | DBG("Machine is%s LPAR !\n", | ||
405 | (powerpc_firmware_features & FW_FEATURE_LPAR) ? "" : " not"); | ||
389 | 406 | ||
390 | return 1; | 407 | return 1; |
391 | } | 408 | } |
392 | 409 | ||
410 | |||
393 | DECLARE_PER_CPU(unsigned long, smt_snooze_delay); | 411 | DECLARE_PER_CPU(unsigned long, smt_snooze_delay); |
394 | 412 | ||
395 | static void pseries_dedicated_idle_sleep(void) | 413 | static void pseries_dedicated_idle_sleep(void) |
@@ -501,7 +519,8 @@ static void pseries_kexec_cpu_down(int crash_shutdown, int secondary) | |||
501 | } | 519 | } |
502 | #endif | 520 | #endif |
503 | 521 | ||
504 | struct machdep_calls __initdata pSeries_md = { | 522 | define_machine(pseries) { |
523 | .name = "pSeries", | ||
505 | .probe = pSeries_probe, | 524 | .probe = pSeries_probe, |
506 | .setup_arch = pSeries_setup_arch, | 525 | .setup_arch = pSeries_setup_arch, |
507 | .init_early = pSeries_init_early, | 526 | .init_early = pSeries_init_early, |