diff options
63 files changed, 560 insertions, 543 deletions
diff --git a/Documentation/powerpc/booting-without-of.txt b/Documentation/powerpc/booting-without-of.txt index ee551c6ea235..217e51768b87 100644 --- a/Documentation/powerpc/booting-without-of.txt +++ b/Documentation/powerpc/booting-without-of.txt | |||
@@ -719,6 +719,11 @@ address which can extend beyond that limit. | |||
719 | - model : this is your board name/model | 719 | - model : this is your board name/model |
720 | - #address-cells : address representation for "root" devices | 720 | - #address-cells : address representation for "root" devices |
721 | - #size-cells: the size representation for "root" devices | 721 | - #size-cells: the size representation for "root" devices |
722 | - device_type : This property shouldn't be necessary. However, if | ||
723 | you decide to create a device_type for your root node, make sure it | ||
724 | is _not_ "chrp" unless your platform is a pSeries or PAPR compliant | ||
725 | one for 64-bit, or a CHRP-type machine for 32-bit as this will | ||
726 | matched by the kernel this way. | ||
722 | 727 | ||
723 | Additionally, some recommended properties are: | 728 | Additionally, some recommended properties are: |
724 | 729 | ||
diff --git a/arch/powerpc/kernel/asm-offsets.c b/arch/powerpc/kernel/asm-offsets.c index 882889b15926..54b48f330051 100644 --- a/arch/powerpc/kernel/asm-offsets.c +++ b/arch/powerpc/kernel/asm-offsets.c | |||
@@ -105,8 +105,6 @@ int main(void) | |||
105 | DEFINE(ICACHEL1LINESIZE, offsetof(struct ppc64_caches, iline_size)); | 105 | DEFINE(ICACHEL1LINESIZE, offsetof(struct ppc64_caches, iline_size)); |
106 | DEFINE(ICACHEL1LOGLINESIZE, offsetof(struct ppc64_caches, log_iline_size)); | 106 | DEFINE(ICACHEL1LOGLINESIZE, offsetof(struct ppc64_caches, log_iline_size)); |
107 | DEFINE(ICACHEL1LINESPERPAGE, offsetof(struct ppc64_caches, ilines_per_page)); | 107 | DEFINE(ICACHEL1LINESPERPAGE, offsetof(struct ppc64_caches, ilines_per_page)); |
108 | DEFINE(PLATFORM_LPAR, PLATFORM_LPAR); | ||
109 | |||
110 | /* paca */ | 108 | /* paca */ |
111 | DEFINE(PACA_SIZE, sizeof(struct paca_struct)); | 109 | DEFINE(PACA_SIZE, sizeof(struct paca_struct)); |
112 | DEFINE(PACAPACAINDEX, offsetof(struct paca_struct, paca_index)); | 110 | DEFINE(PACAPACAINDEX, offsetof(struct paca_struct, paca_index)); |
diff --git a/arch/powerpc/kernel/nvram_64.c b/arch/powerpc/kernel/nvram_64.c index 6c3989f6247d..ada50aa5b600 100644 --- a/arch/powerpc/kernel/nvram_64.c +++ b/arch/powerpc/kernel/nvram_64.c | |||
@@ -160,7 +160,7 @@ static int dev_nvram_ioctl(struct inode *inode, struct file *file, | |||
160 | case IOC_NVRAM_GET_OFFSET: { | 160 | case IOC_NVRAM_GET_OFFSET: { |
161 | int part, offset; | 161 | int part, offset; |
162 | 162 | ||
163 | if (_machine != PLATFORM_POWERMAC) | 163 | if (!machine_is(powermac)) |
164 | return -EINVAL; | 164 | return -EINVAL; |
165 | if (copy_from_user(&part, (void __user*)arg, sizeof(part)) != 0) | 165 | if (copy_from_user(&part, (void __user*)arg, sizeof(part)) != 0) |
166 | return -EFAULT; | 166 | return -EFAULT; |
@@ -444,7 +444,7 @@ static int nvram_setup_partition(void) | |||
444 | * in our nvram, as Apple defined partitions use pretty much | 444 | * in our nvram, as Apple defined partitions use pretty much |
445 | * all of the space | 445 | * all of the space |
446 | */ | 446 | */ |
447 | if (_machine == PLATFORM_POWERMAC) | 447 | if (machine_is(powermac)) |
448 | return -ENOSPC; | 448 | return -ENOSPC; |
449 | 449 | ||
450 | /* see if we have an OS partition that meets our needs. | 450 | /* see if we have an OS partition that meets our needs. |
diff --git a/arch/powerpc/kernel/pci_32.c b/arch/powerpc/kernel/pci_32.c index 704c846b2b0f..b129d2e4b759 100644 --- a/arch/powerpc/kernel/pci_32.c +++ b/arch/powerpc/kernel/pci_32.c | |||
@@ -787,7 +787,7 @@ pci_busdev_to_OF_node(struct pci_bus *bus, int devfn) | |||
787 | * fix has to be done by making the remapping per-host and always | 787 | * fix has to be done by making the remapping per-host and always |
788 | * filling the pci_to_OF map. --BenH | 788 | * filling the pci_to_OF map. --BenH |
789 | */ | 789 | */ |
790 | if (_machine == _MACH_Pmac && busnr >= 0xf0) | 790 | if (machine_is(powermac) && busnr >= 0xf0) |
791 | busnr -= 0xf0; | 791 | busnr -= 0xf0; |
792 | else | 792 | else |
793 | #endif | 793 | #endif |
@@ -1728,7 +1728,7 @@ long sys_pciconfig_iobase(long which, unsigned long bus, unsigned long devfn) | |||
1728 | * (bus 0 is HT root), we return the AGP one instead. | 1728 | * (bus 0 is HT root), we return the AGP one instead. |
1729 | */ | 1729 | */ |
1730 | #ifdef CONFIG_PPC_PMAC | 1730 | #ifdef CONFIG_PPC_PMAC |
1731 | if (_machine == _MACH_Pmac && machine_is_compatible("MacRISC4")) | 1731 | if (machine_is(powermac) && machine_is_compatible("MacRISC4")) |
1732 | if (bus == 0) | 1732 | if (bus == 0) |
1733 | bus = 0xf0; | 1733 | bus = 0xf0; |
1734 | #endif /* CONFIG_PPC_PMAC */ | 1734 | #endif /* CONFIG_PPC_PMAC */ |
diff --git a/arch/powerpc/kernel/proc_ppc64.c b/arch/powerpc/kernel/proc_ppc64.c index 7ba42a405f41..3c2cf661f6d9 100644 --- a/arch/powerpc/kernel/proc_ppc64.c +++ b/arch/powerpc/kernel/proc_ppc64.c | |||
@@ -23,6 +23,7 @@ | |||
23 | #include <linux/slab.h> | 23 | #include <linux/slab.h> |
24 | #include <linux/kernel.h> | 24 | #include <linux/kernel.h> |
25 | 25 | ||
26 | #include <asm/machdep.h> | ||
26 | #include <asm/vdso_datapage.h> | 27 | #include <asm/vdso_datapage.h> |
27 | #include <asm/rtas.h> | 28 | #include <asm/rtas.h> |
28 | #include <asm/uaccess.h> | 29 | #include <asm/uaccess.h> |
@@ -51,7 +52,7 @@ static int __init proc_ppc64_create(void) | |||
51 | if (!root) | 52 | if (!root) |
52 | return 1; | 53 | return 1; |
53 | 54 | ||
54 | if (!(platform_is_pseries() || _machine == PLATFORM_CELL)) | 55 | if (!machine_is(pseries) && !machine_is(cell)) |
55 | return 0; | 56 | return 0; |
56 | 57 | ||
57 | if (!proc_mkdir("rtas", root)) | 58 | if (!proc_mkdir("rtas", root)) |
diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c index a2bc433f3610..4336390bcf34 100644 --- a/arch/powerpc/kernel/prom.c +++ b/arch/powerpc/kernel/prom.c | |||
@@ -383,14 +383,14 @@ static int __devinit finish_node_interrupts(struct device_node *np, | |||
383 | /* Apple uses bits in there in a different way, let's | 383 | /* Apple uses bits in there in a different way, let's |
384 | * only keep the real sense bit on macs | 384 | * only keep the real sense bit on macs |
385 | */ | 385 | */ |
386 | if (_machine == PLATFORM_POWERMAC) | 386 | if (machine_is(powermac)) |
387 | sense &= 0x1; | 387 | sense &= 0x1; |
388 | np->intrs[intrcount].sense = map_mpic_senses[sense]; | 388 | np->intrs[intrcount].sense = map_mpic_senses[sense]; |
389 | } | 389 | } |
390 | 390 | ||
391 | #ifdef CONFIG_PPC64 | 391 | #ifdef CONFIG_PPC64 |
392 | /* We offset irq numbers for the u3 MPIC by 128 in PowerMac */ | 392 | /* We offset irq numbers for the u3 MPIC by 128 in PowerMac */ |
393 | if (_machine == PLATFORM_POWERMAC && ic && ic->parent) { | 393 | if (machine_is(powermac) && ic && ic->parent) { |
394 | char *name = get_property(ic->parent, "name", NULL); | 394 | char *name = get_property(ic->parent, "name", NULL); |
395 | if (name && !strcmp(name, "u3")) | 395 | if (name && !strcmp(name, "u3")) |
396 | np->intrs[intrcount].line += 128; | 396 | np->intrs[intrcount].line += 128; |
@@ -570,6 +570,18 @@ int __init of_scan_flat_dt(int (*it)(unsigned long node, | |||
570 | return rc; | 570 | return rc; |
571 | } | 571 | } |
572 | 572 | ||
573 | unsigned long __init of_get_flat_dt_root(void) | ||
574 | { | ||
575 | unsigned long p = ((unsigned long)initial_boot_params) + | ||
576 | initial_boot_params->off_dt_struct; | ||
577 | |||
578 | while(*((u32 *)p) == OF_DT_NOP) | ||
579 | p += 4; | ||
580 | BUG_ON (*((u32 *)p) != OF_DT_BEGIN_NODE); | ||
581 | p += 4; | ||
582 | return _ALIGN(p + strlen((char *)p) + 1, 4); | ||
583 | } | ||
584 | |||
573 | /** | 585 | /** |
574 | * This function can be used within scan_flattened_dt callback to get | 586 | * This function can be used within scan_flattened_dt callback to get |
575 | * access to properties | 587 | * access to properties |
@@ -612,6 +624,25 @@ void* __init of_get_flat_dt_prop(unsigned long node, const char *name, | |||
612 | } while(1); | 624 | } while(1); |
613 | } | 625 | } |
614 | 626 | ||
627 | int __init of_flat_dt_is_compatible(unsigned long node, const char *compat) | ||
628 | { | ||
629 | const char* cp; | ||
630 | unsigned long cplen, l; | ||
631 | |||
632 | cp = of_get_flat_dt_prop(node, "compatible", &cplen); | ||
633 | if (cp == NULL) | ||
634 | return 0; | ||
635 | while (cplen > 0) { | ||
636 | if (strncasecmp(cp, compat, strlen(compat)) == 0) | ||
637 | return 1; | ||
638 | l = strlen(cp) + 1; | ||
639 | cp += l; | ||
640 | cplen -= l; | ||
641 | } | ||
642 | |||
643 | return 0; | ||
644 | } | ||
645 | |||
615 | static void *__init unflatten_dt_alloc(unsigned long *mem, unsigned long size, | 646 | static void *__init unflatten_dt_alloc(unsigned long *mem, unsigned long size, |
616 | unsigned long align) | 647 | unsigned long align) |
617 | { | 648 | { |
@@ -686,7 +717,7 @@ static unsigned long __init unflatten_dt_node(unsigned long mem, | |||
686 | #ifdef DEBUG | 717 | #ifdef DEBUG |
687 | if ((strlen(p) + l + 1) != allocl) { | 718 | if ((strlen(p) + l + 1) != allocl) { |
688 | DBG("%s: p: %d, l: %d, a: %d\n", | 719 | DBG("%s: p: %d, l: %d, a: %d\n", |
689 | pathp, strlen(p), l, allocl); | 720 | pathp, (int)strlen(p), l, allocl); |
690 | } | 721 | } |
691 | #endif | 722 | #endif |
692 | p += strlen(p); | 723 | p += strlen(p); |
@@ -951,7 +982,6 @@ static int __init early_init_dt_scan_cpus(unsigned long node, | |||
951 | static int __init early_init_dt_scan_chosen(unsigned long node, | 982 | static int __init early_init_dt_scan_chosen(unsigned long node, |
952 | const char *uname, int depth, void *data) | 983 | const char *uname, int depth, void *data) |
953 | { | 984 | { |
954 | u32 *prop; | ||
955 | unsigned long *lprop; | 985 | unsigned long *lprop; |
956 | unsigned long l; | 986 | unsigned long l; |
957 | char *p; | 987 | char *p; |
@@ -962,14 +992,6 @@ static int __init early_init_dt_scan_chosen(unsigned long node, | |||
962 | (strcmp(uname, "chosen") != 0 && strcmp(uname, "chosen@0") != 0)) | 992 | (strcmp(uname, "chosen") != 0 && strcmp(uname, "chosen@0") != 0)) |
963 | return 0; | 993 | return 0; |
964 | 994 | ||
965 | /* get platform type */ | ||
966 | prop = (u32 *)of_get_flat_dt_prop(node, "linux,platform", NULL); | ||
967 | if (prop == NULL) | ||
968 | return 0; | ||
969 | #ifdef CONFIG_PPC_MULTIPLATFORM | ||
970 | _machine = *prop; | ||
971 | #endif | ||
972 | |||
973 | #ifdef CONFIG_PPC64 | 995 | #ifdef CONFIG_PPC64 |
974 | /* check if iommu is forced on or off */ | 996 | /* check if iommu is forced on or off */ |
975 | if (of_get_flat_dt_prop(node, "linux,iommu-off", NULL) != NULL) | 997 | if (of_get_flat_dt_prop(node, "linux,iommu-off", NULL) != NULL) |
@@ -996,15 +1018,15 @@ static int __init early_init_dt_scan_chosen(unsigned long node, | |||
996 | * set of RTAS infos now if available | 1018 | * set of RTAS infos now if available |
997 | */ | 1019 | */ |
998 | { | 1020 | { |
999 | u64 *basep, *entryp; | 1021 | u64 *basep, *entryp, *sizep; |
1000 | 1022 | ||
1001 | basep = of_get_flat_dt_prop(node, "linux,rtas-base", NULL); | 1023 | basep = of_get_flat_dt_prop(node, "linux,rtas-base", NULL); |
1002 | entryp = of_get_flat_dt_prop(node, "linux,rtas-entry", NULL); | 1024 | entryp = of_get_flat_dt_prop(node, "linux,rtas-entry", NULL); |
1003 | prop = of_get_flat_dt_prop(node, "linux,rtas-size", NULL); | 1025 | sizep = of_get_flat_dt_prop(node, "linux,rtas-size", NULL); |
1004 | if (basep && entryp && prop) { | 1026 | if (basep && entryp && sizep) { |
1005 | rtas.base = *basep; | 1027 | rtas.base = *basep; |
1006 | rtas.entry = *entryp; | 1028 | rtas.entry = *entryp; |
1007 | rtas.size = *prop; | 1029 | rtas.size = *sizep; |
1008 | } | 1030 | } |
1009 | } | 1031 | } |
1010 | #endif /* CONFIG_PPC_RTAS */ | 1032 | #endif /* CONFIG_PPC_RTAS */ |
@@ -1775,7 +1797,7 @@ static int of_finish_dynamic_node(struct device_node *node) | |||
1775 | /* We don't support that function on PowerMac, at least | 1797 | /* We don't support that function on PowerMac, at least |
1776 | * not yet | 1798 | * not yet |
1777 | */ | 1799 | */ |
1778 | if (_machine == PLATFORM_POWERMAC) | 1800 | if (machine_is(powermac)) |
1779 | return -ENODEV; | 1801 | return -ENODEV; |
1780 | 1802 | ||
1781 | /* fix up new node's linux_phandle field */ | 1803 | /* fix up new node's linux_phandle field */ |
diff --git a/arch/powerpc/kernel/prom_init.c b/arch/powerpc/kernel/prom_init.c index 0d0887844501..d66c5e77fcff 100644 --- a/arch/powerpc/kernel/prom_init.c +++ b/arch/powerpc/kernel/prom_init.c | |||
@@ -180,6 +180,16 @@ static unsigned long __initdata prom_tce_alloc_start; | |||
180 | static unsigned long __initdata prom_tce_alloc_end; | 180 | static unsigned long __initdata prom_tce_alloc_end; |
181 | #endif | 181 | #endif |
182 | 182 | ||
183 | /* Platforms codes are now obsolete in the kernel. Now only used within this | ||
184 | * file and ultimately gone too. Feel free to change them if you need, they | ||
185 | * are not shared with anything outside of this file anymore | ||
186 | */ | ||
187 | #define PLATFORM_PSERIES 0x0100 | ||
188 | #define PLATFORM_PSERIES_LPAR 0x0101 | ||
189 | #define PLATFORM_LPAR 0x0001 | ||
190 | #define PLATFORM_POWERMAC 0x0400 | ||
191 | #define PLATFORM_GENERIC 0x0500 | ||
192 | |||
183 | static int __initdata of_platform; | 193 | static int __initdata of_platform; |
184 | 194 | ||
185 | static char __initdata prom_cmd_line[COMMAND_LINE_SIZE]; | 195 | static char __initdata prom_cmd_line[COMMAND_LINE_SIZE]; |
@@ -1492,7 +1502,10 @@ static int __init prom_find_machine_type(void) | |||
1492 | int len, i = 0; | 1502 | int len, i = 0; |
1493 | #ifdef CONFIG_PPC64 | 1503 | #ifdef CONFIG_PPC64 |
1494 | phandle rtas; | 1504 | phandle rtas; |
1505 | int x; | ||
1495 | #endif | 1506 | #endif |
1507 | |||
1508 | /* Look for a PowerMac */ | ||
1496 | len = prom_getprop(_prom->root, "compatible", | 1509 | len = prom_getprop(_prom->root, "compatible", |
1497 | compat, sizeof(compat)-1); | 1510 | compat, sizeof(compat)-1); |
1498 | if (len > 0) { | 1511 | if (len > 0) { |
@@ -1505,28 +1518,36 @@ static int __init prom_find_machine_type(void) | |||
1505 | if (strstr(p, RELOC("Power Macintosh")) || | 1518 | if (strstr(p, RELOC("Power Macintosh")) || |
1506 | strstr(p, RELOC("MacRISC"))) | 1519 | strstr(p, RELOC("MacRISC"))) |
1507 | return PLATFORM_POWERMAC; | 1520 | return PLATFORM_POWERMAC; |
1508 | #ifdef CONFIG_PPC64 | ||
1509 | if (strstr(p, RELOC("Momentum,Maple"))) | ||
1510 | return PLATFORM_MAPLE; | ||
1511 | if (strstr(p, RELOC("IBM,CPB"))) | ||
1512 | return PLATFORM_CELL; | ||
1513 | #endif | ||
1514 | i += sl + 1; | 1521 | i += sl + 1; |
1515 | } | 1522 | } |
1516 | } | 1523 | } |
1517 | #ifdef CONFIG_PPC64 | 1524 | #ifdef CONFIG_PPC64 |
1525 | /* If not a mac, try to figure out if it's an IBM pSeries or any other | ||
1526 | * PAPR compliant platform. We assume it is if : | ||
1527 | * - /device_type is "chrp" (please, do NOT use that for future | ||
1528 | * non-IBM designs ! | ||
1529 | * - it has /rtas | ||
1530 | */ | ||
1531 | len = prom_getprop(_prom->root, "model", | ||
1532 | compat, sizeof(compat)-1); | ||
1533 | if (len <= 0) | ||
1534 | return PLATFORM_GENERIC; | ||
1535 | compat[len] = 0; | ||
1536 | if (strcmp(compat, "chrp")) | ||
1537 | return PLATFORM_GENERIC; | ||
1538 | |||
1518 | /* Default to pSeries. We need to know if we are running LPAR */ | 1539 | /* Default to pSeries. We need to know if we are running LPAR */ |
1519 | rtas = call_prom("finddevice", 1, 1, ADDR("/rtas")); | 1540 | rtas = call_prom("finddevice", 1, 1, ADDR("/rtas")); |
1520 | if (PHANDLE_VALID(rtas)) { | 1541 | if (!PHANDLE_VALID(rtas)) |
1521 | int x = prom_getproplen(rtas, "ibm,hypertas-functions"); | 1542 | return PLATFORM_GENERIC; |
1522 | if (x != PROM_ERROR) { | 1543 | x = prom_getproplen(rtas, "ibm,hypertas-functions"); |
1523 | prom_printf("Hypertas detected, assuming LPAR !\n"); | 1544 | if (x != PROM_ERROR) { |
1524 | return PLATFORM_PSERIES_LPAR; | 1545 | prom_printf("Hypertas detected, assuming LPAR !\n"); |
1525 | } | 1546 | return PLATFORM_PSERIES_LPAR; |
1526 | } | 1547 | } |
1527 | return PLATFORM_PSERIES; | 1548 | return PLATFORM_PSERIES; |
1528 | #else | 1549 | #else |
1529 | return PLATFORM_CHRP; | 1550 | return PLATFORM_GENERIC; |
1530 | #endif | 1551 | #endif |
1531 | } | 1552 | } |
1532 | 1553 | ||
@@ -2034,7 +2055,6 @@ unsigned long __init prom_init(unsigned long r3, unsigned long r4, | |||
2034 | { | 2055 | { |
2035 | struct prom_t *_prom; | 2056 | struct prom_t *_prom; |
2036 | unsigned long hdr; | 2057 | unsigned long hdr; |
2037 | u32 getprop_rval; | ||
2038 | unsigned long offset = reloc_offset(); | 2058 | unsigned long offset = reloc_offset(); |
2039 | 2059 | ||
2040 | #ifdef CONFIG_PPC32 | 2060 | #ifdef CONFIG_PPC32 |
@@ -2070,9 +2090,6 @@ unsigned long __init prom_init(unsigned long r3, unsigned long r4, | |||
2070 | * between pSeries SMP and pSeries LPAR | 2090 | * between pSeries SMP and pSeries LPAR |
2071 | */ | 2091 | */ |
2072 | RELOC(of_platform) = prom_find_machine_type(); | 2092 | RELOC(of_platform) = prom_find_machine_type(); |
2073 | getprop_rval = RELOC(of_platform); | ||
2074 | prom_setprop(_prom->chosen, "/chosen", "linux,platform", | ||
2075 | &getprop_rval, sizeof(getprop_rval)); | ||
2076 | 2093 | ||
2077 | /* Bail if this is a kdump kernel. */ | 2094 | /* Bail if this is a kdump kernel. */ |
2078 | if (PHYSICAL_START > 0) | 2095 | if (PHYSICAL_START > 0) |
diff --git a/arch/powerpc/kernel/rtas-proc.c b/arch/powerpc/kernel/rtas-proc.c index 1f03fb28cc0a..456286cf1d14 100644 --- a/arch/powerpc/kernel/rtas-proc.c +++ b/arch/powerpc/kernel/rtas-proc.c | |||
@@ -257,7 +257,7 @@ static int __init proc_rtas_init(void) | |||
257 | { | 257 | { |
258 | struct proc_dir_entry *entry; | 258 | struct proc_dir_entry *entry; |
259 | 259 | ||
260 | if (_machine != PLATFORM_PSERIES && _machine != PLATFORM_PSERIES_LPAR) | 260 | if (!machine_is(pseries)) |
261 | return 1; | 261 | return 1; |
262 | 262 | ||
263 | rtas_node = of_find_node_by_name(NULL, "rtas"); | 263 | rtas_node = of_find_node_by_name(NULL, "rtas"); |
diff --git a/arch/powerpc/kernel/rtas.c b/arch/powerpc/kernel/rtas.c index 142d818a31a6..4b78ee0e5867 100644 --- a/arch/powerpc/kernel/rtas.c +++ b/arch/powerpc/kernel/rtas.c | |||
@@ -25,6 +25,7 @@ | |||
25 | #include <asm/hvcall.h> | 25 | #include <asm/hvcall.h> |
26 | #include <asm/semaphore.h> | 26 | #include <asm/semaphore.h> |
27 | #include <asm/machdep.h> | 27 | #include <asm/machdep.h> |
28 | #include <asm/firmware.h> | ||
28 | #include <asm/page.h> | 29 | #include <asm/page.h> |
29 | #include <asm/param.h> | 30 | #include <asm/param.h> |
30 | #include <asm/system.h> | 31 | #include <asm/system.h> |
@@ -768,7 +769,7 @@ void __init rtas_initialize(void) | |||
768 | * the stop-self token if any | 769 | * the stop-self token if any |
769 | */ | 770 | */ |
770 | #ifdef CONFIG_PPC64 | 771 | #ifdef CONFIG_PPC64 |
771 | if (_machine == PLATFORM_PSERIES_LPAR) { | 772 | if (machine_is(pseries) && firmware_has_feature(FW_FEATURE_LPAR)) { |
772 | rtas_region = min(lmb.rmo_size, RTAS_INSTANTIATE_MAX); | 773 | rtas_region = min(lmb.rmo_size, RTAS_INSTANTIATE_MAX); |
773 | ibm_suspend_me_token = rtas_token("ibm,suspend-me"); | 774 | ibm_suspend_me_token = rtas_token("ibm,suspend-me"); |
774 | } | 775 | } |
diff --git a/arch/powerpc/kernel/setup-common.c b/arch/powerpc/kernel/setup-common.c index b17630ad4ac7..3473cb9cb0ab 100644 --- a/arch/powerpc/kernel/setup-common.c +++ b/arch/powerpc/kernel/setup-common.c | |||
@@ -9,6 +9,9 @@ | |||
9 | * as published by the Free Software Foundation; either version | 9 | * as published by the Free Software Foundation; either version |
10 | * 2 of the License, or (at your option) any later version. | 10 | * 2 of the License, or (at your option) any later version. |
11 | */ | 11 | */ |
12 | |||
13 | #undef DEBUG | ||
14 | |||
12 | #include <linux/config.h> | 15 | #include <linux/config.h> |
13 | #include <linux/module.h> | 16 | #include <linux/module.h> |
14 | #include <linux/string.h> | 17 | #include <linux/string.h> |
@@ -41,6 +44,7 @@ | |||
41 | #include <asm/time.h> | 44 | #include <asm/time.h> |
42 | #include <asm/cputable.h> | 45 | #include <asm/cputable.h> |
43 | #include <asm/sections.h> | 46 | #include <asm/sections.h> |
47 | #include <asm/firmware.h> | ||
44 | #include <asm/btext.h> | 48 | #include <asm/btext.h> |
45 | #include <asm/nvram.h> | 49 | #include <asm/nvram.h> |
46 | #include <asm/setup.h> | 50 | #include <asm/setup.h> |
@@ -56,8 +60,6 @@ | |||
56 | 60 | ||
57 | #include "setup.h" | 61 | #include "setup.h" |
58 | 62 | ||
59 | #undef DEBUG | ||
60 | |||
61 | #ifdef DEBUG | 63 | #ifdef DEBUG |
62 | #include <asm/udbg.h> | 64 | #include <asm/udbg.h> |
63 | #define DBG(fmt...) udbg_printf(fmt) | 65 | #define DBG(fmt...) udbg_printf(fmt) |
@@ -65,10 +67,12 @@ | |||
65 | #define DBG(fmt...) | 67 | #define DBG(fmt...) |
66 | #endif | 68 | #endif |
67 | 69 | ||
68 | #ifdef CONFIG_PPC_MULTIPLATFORM | 70 | /* The main machine-dep calls structure |
69 | int _machine = 0; | 71 | */ |
70 | EXPORT_SYMBOL(_machine); | 72 | struct machdep_calls ppc_md; |
71 | #endif | 73 | EXPORT_SYMBOL(ppc_md); |
74 | struct machdep_calls *machine_id; | ||
75 | EXPORT_SYMBOL(machine_id); | ||
72 | 76 | ||
73 | unsigned long klimit = (unsigned long) _end; | 77 | unsigned long klimit = (unsigned long) _end; |
74 | 78 | ||
@@ -168,7 +172,8 @@ static int show_cpuinfo(struct seq_file *m, void *v) | |||
168 | bogosum/(500000/HZ), bogosum/(5000/HZ) % 100); | 172 | bogosum/(500000/HZ), bogosum/(5000/HZ) % 100); |
169 | #endif /* CONFIG_SMP && CONFIG_PPC32 */ | 173 | #endif /* CONFIG_SMP && CONFIG_PPC32 */ |
170 | seq_printf(m, "timebase\t: %lu\n", ppc_tb_freq); | 174 | seq_printf(m, "timebase\t: %lu\n", ppc_tb_freq); |
171 | 175 | if (ppc_md.name) | |
176 | seq_printf(m, "platform\t: %s\n", ppc_md.name); | ||
172 | if (ppc_md.show_cpuinfo != NULL) | 177 | if (ppc_md.show_cpuinfo != NULL) |
173 | ppc_md.show_cpuinfo(m); | 178 | ppc_md.show_cpuinfo(m); |
174 | 179 | ||
@@ -387,7 +392,7 @@ void __init smp_setup_cpu_maps(void) | |||
387 | * On pSeries LPAR, we need to know how many cpus | 392 | * On pSeries LPAR, we need to know how many cpus |
388 | * could possibly be added to this partition. | 393 | * could possibly be added to this partition. |
389 | */ | 394 | */ |
390 | if (_machine == PLATFORM_PSERIES_LPAR && | 395 | if (machine_is(pseries) && firmware_has_feature(FW_FEATURE_LPAR) && |
391 | (dn = of_find_node_by_path("/rtas"))) { | 396 | (dn = of_find_node_by_path("/rtas"))) { |
392 | int num_addr_cell, num_size_cell, maxcpus; | 397 | int num_addr_cell, num_size_cell, maxcpus; |
393 | unsigned int *ireg; | 398 | unsigned int *ireg; |
@@ -456,3 +461,34 @@ static int __init early_xmon(char *p) | |||
456 | } | 461 | } |
457 | early_param("xmon", early_xmon); | 462 | early_param("xmon", early_xmon); |
458 | #endif | 463 | #endif |
464 | |||
465 | void probe_machine(void) | ||
466 | { | ||
467 | extern struct machdep_calls __machine_desc_start; | ||
468 | extern struct machdep_calls __machine_desc_end; | ||
469 | |||
470 | /* | ||
471 | * Iterate all ppc_md structures until we find the proper | ||
472 | * one for the current machine type | ||
473 | */ | ||
474 | DBG("Probing machine type ...\n"); | ||
475 | |||
476 | for (machine_id = &__machine_desc_start; | ||
477 | machine_id < &__machine_desc_end; | ||
478 | machine_id++) { | ||
479 | DBG(" %s ...", machine_id->name); | ||
480 | memcpy(&ppc_md, machine_id, sizeof(struct machdep_calls)); | ||
481 | if (ppc_md.probe()) { | ||
482 | DBG(" match !\n"); | ||
483 | break; | ||
484 | } | ||
485 | DBG("\n"); | ||
486 | } | ||
487 | /* What can we do if we didn't find ? */ | ||
488 | if (machine_id >= &__machine_desc_end) { | ||
489 | DBG("No suitable machine found !\n"); | ||
490 | for (;;); | ||
491 | } | ||
492 | |||
493 | printk(KERN_INFO "Using %s machine description\n", ppc_md.name); | ||
494 | } | ||
diff --git a/arch/powerpc/kernel/setup_32.c b/arch/powerpc/kernel/setup_32.c index a2c89435abec..ae9c33d70731 100644 --- a/arch/powerpc/kernel/setup_32.c +++ b/arch/powerpc/kernel/setup_32.c | |||
@@ -67,10 +67,6 @@ unsigned int DMA_MODE_WRITE; | |||
67 | int have_of = 1; | 67 | int have_of = 1; |
68 | 68 | ||
69 | #ifdef CONFIG_PPC_MULTIPLATFORM | 69 | #ifdef CONFIG_PPC_MULTIPLATFORM |
70 | extern void prep_init(void); | ||
71 | extern void pmac_init(void); | ||
72 | extern void chrp_init(void); | ||
73 | |||
74 | dev_t boot_dev; | 70 | dev_t boot_dev; |
75 | #endif /* CONFIG_PPC_MULTIPLATFORM */ | 71 | #endif /* CONFIG_PPC_MULTIPLATFORM */ |
76 | 72 | ||
@@ -82,9 +78,6 @@ unsigned long SYSRQ_KEY = 0x54; | |||
82 | unsigned long vgacon_remap_base; | 78 | unsigned long vgacon_remap_base; |
83 | #endif | 79 | #endif |
84 | 80 | ||
85 | struct machdep_calls ppc_md; | ||
86 | EXPORT_SYMBOL(ppc_md); | ||
87 | |||
88 | /* | 81 | /* |
89 | * These are used in binfmt_elf.c to put aux entries on the stack | 82 | * These are used in binfmt_elf.c to put aux entries on the stack |
90 | * for each elf executable being started. | 83 | * for each elf executable being started. |
@@ -120,48 +113,6 @@ unsigned long __init early_init(unsigned long dt_ptr) | |||
120 | return KERNELBASE + offset; | 113 | return KERNELBASE + offset; |
121 | } | 114 | } |
122 | 115 | ||
123 | #ifdef CONFIG_PPC_MULTIPLATFORM | ||
124 | /* | ||
125 | * The PPC_MULTIPLATFORM version of platform_init... | ||
126 | */ | ||
127 | void __init platform_init(void) | ||
128 | { | ||
129 | /* if we didn't get any bootinfo telling us what we are... */ | ||
130 | if (_machine == 0) { | ||
131 | /* prep boot loader tells us if we're prep or not */ | ||
132 | if ( *(unsigned long *)(KERNELBASE) == (0xdeadc0de) ) | ||
133 | _machine = _MACH_prep; | ||
134 | } | ||
135 | |||
136 | #ifdef CONFIG_PPC_PREP | ||
137 | /* not much more to do here, if prep */ | ||
138 | if (_machine == _MACH_prep) { | ||
139 | prep_init(); | ||
140 | return; | ||
141 | } | ||
142 | #endif | ||
143 | |||
144 | #ifdef CONFIG_ADB | ||
145 | if (strstr(cmd_line, "adb_sync")) { | ||
146 | extern int __adb_probe_sync; | ||
147 | __adb_probe_sync = 1; | ||
148 | } | ||
149 | #endif /* CONFIG_ADB */ | ||
150 | |||
151 | switch (_machine) { | ||
152 | #ifdef CONFIG_PPC_PMAC | ||
153 | case _MACH_Pmac: | ||
154 | pmac_init(); | ||
155 | break; | ||
156 | #endif | ||
157 | #ifdef CONFIG_PPC_CHRP | ||
158 | case _MACH_chrp: | ||
159 | chrp_init(); | ||
160 | break; | ||
161 | #endif | ||
162 | } | ||
163 | } | ||
164 | #endif | ||
165 | 116 | ||
166 | /* | 117 | /* |
167 | * Find out what kind of machine we're on and save any data we need | 118 | * Find out what kind of machine we're on and save any data we need |
@@ -187,8 +138,12 @@ void __init machine_init(unsigned long dt_ptr, unsigned long phys) | |||
187 | strlcpy(cmd_line, CONFIG_CMDLINE, sizeof(cmd_line)); | 138 | strlcpy(cmd_line, CONFIG_CMDLINE, sizeof(cmd_line)); |
188 | #endif /* CONFIG_CMDLINE */ | 139 | #endif /* CONFIG_CMDLINE */ |
189 | 140 | ||
190 | /* Base init based on machine type */ | 141 | #ifdef CONFIG_PPC_MULTIPLATFORM |
142 | probe_machine(); | ||
143 | #else | ||
144 | /* Base init based on machine type. Obsoloete, please kill ! */ | ||
191 | platform_init(); | 145 | platform_init(); |
146 | #endif | ||
192 | 147 | ||
193 | #ifdef CONFIG_6xx | 148 | #ifdef CONFIG_6xx |
194 | if (cpu_has_feature(CPU_FTR_CAN_DOZE) || | 149 | if (cpu_has_feature(CPU_FTR_CAN_DOZE) || |
@@ -359,7 +314,4 @@ void __init setup_arch(char **cmdline_p) | |||
359 | if ( ppc_md.progress ) ppc_md.progress("arch: exit", 0x3eab); | 314 | if ( ppc_md.progress ) ppc_md.progress("arch: exit", 0x3eab); |
360 | 315 | ||
361 | paging_init(); | 316 | paging_init(); |
362 | |||
363 | /* this is for modules since _machine can be a define -- Cort */ | ||
364 | ppc_md.ppc_machine = _machine; | ||
365 | } | 317 | } |
diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c index 5b63a861ef43..6aea1fb74b69 100644 --- a/arch/powerpc/kernel/setup_64.c +++ b/arch/powerpc/kernel/setup_64.c | |||
@@ -95,11 +95,6 @@ int dcache_bsize; | |||
95 | int icache_bsize; | 95 | int icache_bsize; |
96 | int ucache_bsize; | 96 | int ucache_bsize; |
97 | 97 | ||
98 | /* The main machine-dep calls structure | ||
99 | */ | ||
100 | struct machdep_calls ppc_md; | ||
101 | EXPORT_SYMBOL(ppc_md); | ||
102 | |||
103 | #ifdef CONFIG_MAGIC_SYSRQ | 98 | #ifdef CONFIG_MAGIC_SYSRQ |
104 | unsigned long SYSRQ_KEY; | 99 | unsigned long SYSRQ_KEY; |
105 | #endif /* CONFIG_MAGIC_SYSRQ */ | 100 | #endif /* CONFIG_MAGIC_SYSRQ */ |
@@ -160,32 +155,6 @@ early_param("smt-enabled", early_smt_enabled); | |||
160 | #define check_smt_enabled() | 155 | #define check_smt_enabled() |
161 | #endif /* CONFIG_SMP */ | 156 | #endif /* CONFIG_SMP */ |
162 | 157 | ||
163 | extern struct machdep_calls pSeries_md; | ||
164 | extern struct machdep_calls pmac_md; | ||
165 | extern struct machdep_calls maple_md; | ||
166 | extern struct machdep_calls cell_md; | ||
167 | extern struct machdep_calls iseries_md; | ||
168 | |||
169 | /* Ultimately, stuff them in an elf section like initcalls... */ | ||
170 | static struct machdep_calls __initdata *machines[] = { | ||
171 | #ifdef CONFIG_PPC_PSERIES | ||
172 | &pSeries_md, | ||
173 | #endif /* CONFIG_PPC_PSERIES */ | ||
174 | #ifdef CONFIG_PPC_PMAC | ||
175 | &pmac_md, | ||
176 | #endif /* CONFIG_PPC_PMAC */ | ||
177 | #ifdef CONFIG_PPC_MAPLE | ||
178 | &maple_md, | ||
179 | #endif /* CONFIG_PPC_MAPLE */ | ||
180 | #ifdef CONFIG_PPC_CELL | ||
181 | &cell_md, | ||
182 | #endif | ||
183 | #ifdef CONFIG_PPC_ISERIES | ||
184 | &iseries_md, | ||
185 | #endif | ||
186 | NULL | ||
187 | }; | ||
188 | |||
189 | /* | 158 | /* |
190 | * Early initialization entry point. This is called by head.S | 159 | * Early initialization entry point. This is called by head.S |
191 | * with MMU translation disabled. We rely on the "feature" of | 160 | * with MMU translation disabled. We rely on the "feature" of |
@@ -207,12 +176,10 @@ static struct machdep_calls __initdata *machines[] = { | |||
207 | 176 | ||
208 | void __init early_setup(unsigned long dt_ptr) | 177 | void __init early_setup(unsigned long dt_ptr) |
209 | { | 178 | { |
210 | static struct machdep_calls **mach; | ||
211 | |||
212 | /* Enable early debugging if any specified (see udbg.h) */ | 179 | /* Enable early debugging if any specified (see udbg.h) */ |
213 | udbg_early_init(); | 180 | udbg_early_init(); |
214 | 181 | ||
215 | DBG(" -> early_setup()\n"); | 182 | DBG(" -> early_setup(), dt_ptr: 0x%lx\n", dt_ptr); |
216 | 183 | ||
217 | /* | 184 | /* |
218 | * Do early initializations using the flattened device | 185 | * Do early initializations using the flattened device |
@@ -229,22 +196,8 @@ void __init early_setup(unsigned long dt_ptr) | |||
229 | get_paca()->stab_real = __pa((u64)&initial_stab); | 196 | get_paca()->stab_real = __pa((u64)&initial_stab); |
230 | get_paca()->stab_addr = (u64)&initial_stab; | 197 | get_paca()->stab_addr = (u64)&initial_stab; |
231 | 198 | ||
232 | /* | 199 | /* Probe the machine type */ |
233 | * Iterate all ppc_md structures until we find the proper | 200 | probe_machine(); |
234 | * one for the current machine type | ||
235 | */ | ||
236 | DBG("Probing machine type for platform %x...\n", _machine); | ||
237 | |||
238 | for (mach = machines; *mach; mach++) { | ||
239 | if ((*mach)->probe(_machine)) | ||
240 | break; | ||
241 | } | ||
242 | /* What can we do if we didn't find ? */ | ||
243 | if (*mach == NULL) { | ||
244 | DBG("No suitable machine found !\n"); | ||
245 | for (;;); | ||
246 | } | ||
247 | ppc_md = **mach; | ||
248 | 201 | ||
249 | #ifdef CONFIG_CRASH_DUMP | 202 | #ifdef CONFIG_CRASH_DUMP |
250 | kdump_setup(); | 203 | kdump_setup(); |
@@ -346,7 +299,7 @@ static void __init initialize_cache_info(void) | |||
346 | const char *dc, *ic; | 299 | const char *dc, *ic; |
347 | 300 | ||
348 | /* Then read cache informations */ | 301 | /* Then read cache informations */ |
349 | if (_machine == PLATFORM_POWERMAC) { | 302 | if (machine_is(powermac)) { |
350 | dc = "d-cache-block-size"; | 303 | dc = "d-cache-block-size"; |
351 | ic = "i-cache-block-size"; | 304 | ic = "i-cache-block-size"; |
352 | } else { | 305 | } else { |
@@ -490,7 +443,6 @@ void __init setup_system(void) | |||
490 | printk("ppc64_pft_size = 0x%lx\n", ppc64_pft_size); | 443 | printk("ppc64_pft_size = 0x%lx\n", ppc64_pft_size); |
491 | printk("ppc64_interrupt_controller = 0x%ld\n", | 444 | printk("ppc64_interrupt_controller = 0x%ld\n", |
492 | ppc64_interrupt_controller); | 445 | ppc64_interrupt_controller); |
493 | printk("platform = 0x%x\n", _machine); | ||
494 | printk("physicalMemorySize = 0x%lx\n", lmb_phys_mem_size()); | 446 | printk("physicalMemorySize = 0x%lx\n", lmb_phys_mem_size()); |
495 | printk("ppc64_caches.dcache_line_size = 0x%x\n", | 447 | printk("ppc64_caches.dcache_line_size = 0x%x\n", |
496 | ppc64_caches.dline_size); | 448 | ppc64_caches.dline_size); |
diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c index 98660aedeeb7..27600c9432bc 100644 --- a/arch/powerpc/kernel/traps.c +++ b/arch/powerpc/kernel/traps.c | |||
@@ -97,7 +97,6 @@ static DEFINE_SPINLOCK(die_lock); | |||
97 | int die(const char *str, struct pt_regs *regs, long err) | 97 | int die(const char *str, struct pt_regs *regs, long err) |
98 | { | 98 | { |
99 | static int die_counter, crash_dump_start = 0; | 99 | static int die_counter, crash_dump_start = 0; |
100 | int nl = 0; | ||
101 | 100 | ||
102 | if (debugger(regs)) | 101 | if (debugger(regs)) |
103 | return 1; | 102 | return 1; |
@@ -106,7 +105,7 @@ int die(const char *str, struct pt_regs *regs, long err) | |||
106 | spin_lock_irq(&die_lock); | 105 | spin_lock_irq(&die_lock); |
107 | bust_spinlocks(1); | 106 | bust_spinlocks(1); |
108 | #ifdef CONFIG_PMAC_BACKLIGHT | 107 | #ifdef CONFIG_PMAC_BACKLIGHT |
109 | if (_machine == _MACH_Pmac) { | 108 | if (machine_is(powermac)) { |
110 | set_backlight_enable(1); | 109 | set_backlight_enable(1); |
111 | set_backlight_level(BACKLIGHT_MAX); | 110 | set_backlight_level(BACKLIGHT_MAX); |
112 | } | 111 | } |
@@ -114,46 +113,18 @@ int die(const char *str, struct pt_regs *regs, long err) | |||
114 | printk("Oops: %s, sig: %ld [#%d]\n", str, err, ++die_counter); | 113 | printk("Oops: %s, sig: %ld [#%d]\n", str, err, ++die_counter); |
115 | #ifdef CONFIG_PREEMPT | 114 | #ifdef CONFIG_PREEMPT |
116 | printk("PREEMPT "); | 115 | printk("PREEMPT "); |
117 | nl = 1; | ||
118 | #endif | 116 | #endif |
119 | #ifdef CONFIG_SMP | 117 | #ifdef CONFIG_SMP |
120 | printk("SMP NR_CPUS=%d ", NR_CPUS); | 118 | printk("SMP NR_CPUS=%d ", NR_CPUS); |
121 | nl = 1; | ||
122 | #endif | 119 | #endif |
123 | #ifdef CONFIG_DEBUG_PAGEALLOC | 120 | #ifdef CONFIG_DEBUG_PAGEALLOC |
124 | printk("DEBUG_PAGEALLOC "); | 121 | printk("DEBUG_PAGEALLOC "); |
125 | nl = 1; | ||
126 | #endif | 122 | #endif |
127 | #ifdef CONFIG_NUMA | 123 | #ifdef CONFIG_NUMA |
128 | printk("NUMA "); | 124 | printk("NUMA "); |
129 | nl = 1; | ||
130 | #endif | 125 | #endif |
131 | #ifdef CONFIG_PPC64 | 126 | printk("%s\n", ppc_md.name ? "" : ppc_md.name); |
132 | switch (_machine) { | 127 | |
133 | case PLATFORM_PSERIES: | ||
134 | printk("PSERIES "); | ||
135 | nl = 1; | ||
136 | break; | ||
137 | case PLATFORM_PSERIES_LPAR: | ||
138 | printk("PSERIES LPAR "); | ||
139 | nl = 1; | ||
140 | break; | ||
141 | case PLATFORM_ISERIES_LPAR: | ||
142 | printk("ISERIES LPAR "); | ||
143 | nl = 1; | ||
144 | break; | ||
145 | case PLATFORM_POWERMAC: | ||
146 | printk("POWERMAC "); | ||
147 | nl = 1; | ||
148 | break; | ||
149 | case PLATFORM_CELL: | ||
150 | printk("CELL "); | ||
151 | nl = 1; | ||
152 | break; | ||
153 | } | ||
154 | #endif | ||
155 | if (nl) | ||
156 | printk("\n"); | ||
157 | print_modules(); | 128 | print_modules(); |
158 | show_regs(regs); | 129 | show_regs(regs); |
159 | bust_spinlocks(0); | 130 | bust_spinlocks(0); |
diff --git a/arch/powerpc/kernel/vdso.c b/arch/powerpc/kernel/vdso.c index ec8370368423..573afb68d69e 100644 --- a/arch/powerpc/kernel/vdso.c +++ b/arch/powerpc/kernel/vdso.c | |||
@@ -33,6 +33,7 @@ | |||
33 | #include <asm/machdep.h> | 33 | #include <asm/machdep.h> |
34 | #include <asm/cputable.h> | 34 | #include <asm/cputable.h> |
35 | #include <asm/sections.h> | 35 | #include <asm/sections.h> |
36 | #include <asm/firmware.h> | ||
36 | #include <asm/vdso.h> | 37 | #include <asm/vdso.h> |
37 | #include <asm/vdso_datapage.h> | 38 | #include <asm/vdso_datapage.h> |
38 | 39 | ||
@@ -667,7 +668,13 @@ void __init vdso_init(void) | |||
667 | vdso_data->version.major = SYSTEMCFG_MAJOR; | 668 | vdso_data->version.major = SYSTEMCFG_MAJOR; |
668 | vdso_data->version.minor = SYSTEMCFG_MINOR; | 669 | vdso_data->version.minor = SYSTEMCFG_MINOR; |
669 | vdso_data->processor = mfspr(SPRN_PVR); | 670 | vdso_data->processor = mfspr(SPRN_PVR); |
670 | vdso_data->platform = _machine; | 671 | /* |
672 | * Fake the old platform number for pSeries and iSeries and add | ||
673 | * in LPAR bit if necessary | ||
674 | */ | ||
675 | vdso_data->platform = machine_is(iseries) ? 0x200 : 0x100; | ||
676 | if (firmware_has_feature(FW_FEATURE_LPAR)) | ||
677 | vdso_data->platform |= 1; | ||
671 | vdso_data->physicalMemorySize = lmb_phys_mem_size(); | 678 | vdso_data->physicalMemorySize = lmb_phys_mem_size(); |
672 | vdso_data->dcache_size = ppc64_caches.dsize; | 679 | vdso_data->dcache_size = ppc64_caches.dsize; |
673 | vdso_data->dcache_line_size = ppc64_caches.dline_size; | 680 | vdso_data->dcache_line_size = ppc64_caches.dline_size; |
diff --git a/arch/powerpc/kernel/vmlinux.lds.S b/arch/powerpc/kernel/vmlinux.lds.S index 7fa7b15fd8e6..fe79c2584cb0 100644 --- a/arch/powerpc/kernel/vmlinux.lds.S +++ b/arch/powerpc/kernel/vmlinux.lds.S | |||
@@ -1,9 +1,11 @@ | |||
1 | #include <linux/config.h> | 1 | #include <linux/config.h> |
2 | #ifdef CONFIG_PPC64 | 2 | #ifdef CONFIG_PPC64 |
3 | #include <asm/page.h> | 3 | #include <asm/page.h> |
4 | #define PROVIDE32(x) PROVIDE(__unused__##x) | ||
4 | #else | 5 | #else |
5 | #define PAGE_SIZE 4096 | 6 | #define PAGE_SIZE 4096 |
6 | #define KERNELBASE CONFIG_KERNEL_START | 7 | #define KERNELBASE CONFIG_KERNEL_START |
8 | #define PROVIDE32(x) PROVIDE(x) | ||
7 | #endif | 9 | #endif |
8 | #include <asm-generic/vmlinux.lds.h> | 10 | #include <asm-generic/vmlinux.lds.h> |
9 | 11 | ||
@@ -18,43 +20,42 @@ jiffies = jiffies_64 + 4; | |||
18 | #endif | 20 | #endif |
19 | SECTIONS | 21 | SECTIONS |
20 | { | 22 | { |
21 | /* Sections to be discarded. */ | 23 | /* Sections to be discarded. */ |
22 | /DISCARD/ : { | 24 | /DISCARD/ : { |
23 | *(.exitcall.exit) | 25 | *(.exitcall.exit) |
24 | *(.exit.data) | 26 | *(.exit.data) |
25 | } | 27 | } |
26 | |||
27 | . = KERNELBASE; | ||
28 | |||
29 | /* Read-only sections, merged into text segment: */ | ||
30 | .text : { | ||
31 | *(.text .text.*) | ||
32 | SCHED_TEXT | ||
33 | LOCK_TEXT | ||
34 | KPROBES_TEXT | ||
35 | *(.fixup) | ||
36 | #ifdef CONFIG_PPC32 | ||
37 | *(.got1) | ||
38 | __got2_start = .; | ||
39 | *(.got2) | ||
40 | __got2_end = .; | ||
41 | #else | ||
42 | . = ALIGN(PAGE_SIZE); | ||
43 | _etext = .; | ||
44 | #endif | ||
45 | } | ||
46 | #ifdef CONFIG_PPC32 | ||
47 | _etext = .; | ||
48 | PROVIDE (etext = .); | ||
49 | 28 | ||
50 | RODATA | 29 | . = KERNELBASE; |
51 | .fini : { *(.fini) } =0 | ||
52 | .ctors : { *(.ctors) } | ||
53 | .dtors : { *(.dtors) } | ||
54 | 30 | ||
55 | .fixup : { *(.fixup) } | 31 | /* |
56 | #endif | 32 | * Text, read only data and other permanent read-only sections |
33 | */ | ||
34 | |||
35 | /* Text and gots */ | ||
36 | .text : { | ||
37 | *(.text .text.*) | ||
38 | SCHED_TEXT | ||
39 | LOCK_TEXT | ||
40 | KPROBES_TEXT | ||
41 | *(.fixup) | ||
57 | 42 | ||
43 | #ifdef CONFIG_PPC32 | ||
44 | *(.got1) | ||
45 | __got2_start = .; | ||
46 | *(.got2) | ||
47 | __got2_end = .; | ||
48 | #endif /* CONFIG_PPC32 */ | ||
49 | |||
50 | . = ALIGN(PAGE_SIZE); | ||
51 | _etext = .; | ||
52 | PROVIDE32 (etext = .); | ||
53 | } | ||
54 | |||
55 | /* Read-only data */ | ||
56 | RODATA | ||
57 | |||
58 | /* Exception & bug tables */ | ||
58 | __ex_table : { | 59 | __ex_table : { |
59 | __start___ex_table = .; | 60 | __start___ex_table = .; |
60 | *(__ex_table) | 61 | *(__ex_table) |
@@ -67,192 +68,172 @@ SECTIONS | |||
67 | __stop___bug_table = .; | 68 | __stop___bug_table = .; |
68 | } | 69 | } |
69 | 70 | ||
70 | #ifdef CONFIG_PPC64 | 71 | /* |
72 | * Init sections discarded at runtime | ||
73 | */ | ||
74 | . = ALIGN(PAGE_SIZE); | ||
75 | __init_begin = .; | ||
76 | |||
77 | .init.text : { | ||
78 | _sinittext = .; | ||
79 | *(.init.text) | ||
80 | _einittext = .; | ||
81 | } | ||
82 | |||
83 | /* .exit.text is discarded at runtime, not link time, | ||
84 | * to deal with references from __bug_table | ||
85 | */ | ||
86 | .exit.text : { *(.exit.text) } | ||
87 | |||
88 | .init.data : { | ||
89 | *(.init.data); | ||
90 | __vtop_table_begin = .; | ||
91 | *(.vtop_fixup); | ||
92 | __vtop_table_end = .; | ||
93 | __ptov_table_begin = .; | ||
94 | *(.ptov_fixup); | ||
95 | __ptov_table_end = .; | ||
96 | } | ||
97 | |||
98 | . = ALIGN(16); | ||
99 | .init.setup : { | ||
100 | __setup_start = .; | ||
101 | *(.init.setup) | ||
102 | __setup_end = .; | ||
103 | } | ||
104 | |||
105 | .initcall.init : { | ||
106 | __initcall_start = .; | ||
107 | *(.initcall1.init) | ||
108 | *(.initcall2.init) | ||
109 | *(.initcall3.init) | ||
110 | *(.initcall4.init) | ||
111 | *(.initcall5.init) | ||
112 | *(.initcall6.init) | ||
113 | *(.initcall7.init) | ||
114 | __initcall_end = .; | ||
115 | } | ||
116 | |||
117 | .con_initcall.init : { | ||
118 | __con_initcall_start = .; | ||
119 | *(.con_initcall.init) | ||
120 | __con_initcall_end = .; | ||
121 | } | ||
122 | |||
123 | SECURITY_INIT | ||
124 | |||
125 | . = ALIGN(8); | ||
71 | __ftr_fixup : { | 126 | __ftr_fixup : { |
72 | __start___ftr_fixup = .; | 127 | __start___ftr_fixup = .; |
73 | *(__ftr_fixup) | 128 | *(__ftr_fixup) |
74 | __stop___ftr_fixup = .; | 129 | __stop___ftr_fixup = .; |
75 | } | 130 | } |
76 | 131 | ||
77 | RODATA | 132 | . = ALIGN(PAGE_SIZE); |
78 | #endif | 133 | .init.ramfs : { |
134 | __initramfs_start = .; | ||
135 | *(.init.ramfs) | ||
136 | __initramfs_end = .; | ||
137 | } | ||
79 | 138 | ||
80 | #ifdef CONFIG_PPC32 | 139 | #ifdef CONFIG_PPC32 |
81 | /* Read-write section, merged into data segment: */ | 140 | . = ALIGN(32); |
82 | . = ALIGN(PAGE_SIZE); | 141 | #else |
83 | _sdata = .; | 142 | . = ALIGN(128); |
84 | .data : | ||
85 | { | ||
86 | *(.data) | ||
87 | *(.data1) | ||
88 | *(.sdata) | ||
89 | *(.sdata2) | ||
90 | *(.got.plt) *(.got) | ||
91 | *(.dynamic) | ||
92 | CONSTRUCTORS | ||
93 | } | ||
94 | |||
95 | . = ALIGN(PAGE_SIZE); | ||
96 | __nosave_begin = .; | ||
97 | .data_nosave : { *(.data.nosave) } | ||
98 | . = ALIGN(PAGE_SIZE); | ||
99 | __nosave_end = .; | ||
100 | |||
101 | . = ALIGN(32); | ||
102 | .data.cacheline_aligned : { *(.data.cacheline_aligned) } | ||
103 | |||
104 | _edata = .; | ||
105 | PROVIDE (edata = .); | ||
106 | |||
107 | . = ALIGN(8192); | ||
108 | .data.init_task : { *(.data.init_task) } | ||
109 | #endif | 143 | #endif |
144 | .data.percpu : { | ||
145 | __per_cpu_start = .; | ||
146 | *(.data.percpu) | ||
147 | __per_cpu_end = .; | ||
148 | } | ||
110 | 149 | ||
111 | /* will be freed after init */ | 150 | . = ALIGN(8); |
112 | . = ALIGN(PAGE_SIZE); | 151 | .machine.desc : { |
113 | __init_begin = .; | 152 | __machine_desc_start = . ; |
114 | .init.text : { | 153 | *(.machine.desc) |
115 | _sinittext = .; | 154 | __machine_desc_end = . ; |
116 | *(.init.text) | 155 | } |
117 | _einittext = .; | 156 | |
118 | } | 157 | /* freed after init ends here */ |
119 | #ifdef CONFIG_PPC32 | 158 | . = ALIGN(PAGE_SIZE); |
120 | /* .exit.text is discarded at runtime, not link time, | 159 | __init_end = .; |
121 | to deal with references from __bug_table */ | 160 | |
122 | .exit.text : { *(.exit.text) } | 161 | /* |
123 | #endif | 162 | * And now the various read/write data |
124 | .init.data : { | 163 | */ |
125 | *(.init.data); | 164 | |
126 | __vtop_table_begin = .; | 165 | . = ALIGN(PAGE_SIZE); |
127 | *(.vtop_fixup); | 166 | _sdata = .; |
128 | __vtop_table_end = .; | ||
129 | __ptov_table_begin = .; | ||
130 | *(.ptov_fixup); | ||
131 | __ptov_table_end = .; | ||
132 | } | ||
133 | |||
134 | . = ALIGN(16); | ||
135 | .init.setup : { | ||
136 | __setup_start = .; | ||
137 | *(.init.setup) | ||
138 | __setup_end = .; | ||
139 | } | ||
140 | |||
141 | .initcall.init : { | ||
142 | __initcall_start = .; | ||
143 | *(.initcall1.init) | ||
144 | *(.initcall2.init) | ||
145 | *(.initcall3.init) | ||
146 | *(.initcall4.init) | ||
147 | *(.initcall5.init) | ||
148 | *(.initcall6.init) | ||
149 | *(.initcall7.init) | ||
150 | __initcall_end = .; | ||
151 | } | ||
152 | |||
153 | .con_initcall.init : { | ||
154 | __con_initcall_start = .; | ||
155 | *(.con_initcall.init) | ||
156 | __con_initcall_end = .; | ||
157 | } | ||
158 | |||
159 | SECURITY_INIT | ||
160 | 167 | ||
161 | #ifdef CONFIG_PPC32 | 168 | #ifdef CONFIG_PPC32 |
162 | __start___ftr_fixup = .; | 169 | .data : |
163 | __ftr_fixup : { *(__ftr_fixup) } | 170 | { |
164 | __stop___ftr_fixup = .; | 171 | *(.data) |
172 | *(.sdata) | ||
173 | *(.got.plt) *(.got) | ||
174 | } | ||
165 | #else | 175 | #else |
166 | . = ALIGN(PAGE_SIZE); | 176 | .data : { |
167 | .init.ramfs : { | 177 | *(.data .data.rel* .toc1) |
168 | __initramfs_start = .; | 178 | *(.branch_lt) |
169 | *(.init.ramfs) | 179 | } |
170 | __initramfs_end = .; | ||
171 | } | ||
172 | #endif | ||
173 | 180 | ||
174 | #ifdef CONFIG_PPC32 | 181 | .opd : { |
175 | . = ALIGN(32); | 182 | *(.opd) |
183 | } | ||
184 | |||
185 | .got : { | ||
186 | __toc_start = .; | ||
187 | *(.got) | ||
188 | *(.toc) | ||
189 | } | ||
176 | #endif | 190 | #endif |
177 | .data.percpu : { | ||
178 | __per_cpu_start = .; | ||
179 | *(.data.percpu) | ||
180 | __per_cpu_end = .; | ||
181 | } | ||
182 | 191 | ||
183 | . = ALIGN(PAGE_SIZE); | 192 | . = ALIGN(PAGE_SIZE); |
184 | #ifdef CONFIG_PPC64 | 193 | _edata = .; |
185 | . = ALIGN(16384); | 194 | PROVIDE32 (edata = .); |
186 | __init_end = .; | 195 | |
187 | /* freed after init ends here */ | 196 | /* The initial task and kernel stack */ |
188 | 197 | #ifdef CONFIG_PPC32 | |
189 | /* Read/write sections */ | 198 | . = ALIGN(8192); |
190 | . = ALIGN(PAGE_SIZE); | ||
191 | . = ALIGN(16384); | ||
192 | _sdata = .; | ||
193 | /* The initial task and kernel stack */ | ||
194 | .data.init_task : { | ||
195 | *(.data.init_task) | ||
196 | } | ||
197 | |||
198 | . = ALIGN(PAGE_SIZE); | ||
199 | .data.page_aligned : { | ||
200 | *(.data.page_aligned) | ||
201 | } | ||
202 | |||
203 | .data.cacheline_aligned : { | ||
204 | *(.data.cacheline_aligned) | ||
205 | } | ||
206 | |||
207 | .data : { | ||
208 | *(.data .data.rel* .toc1) | ||
209 | *(.branch_lt) | ||
210 | } | ||
211 | |||
212 | .opd : { | ||
213 | *(.opd) | ||
214 | } | ||
215 | |||
216 | .got : { | ||
217 | __toc_start = .; | ||
218 | *(.got) | ||
219 | *(.toc) | ||
220 | . = ALIGN(PAGE_SIZE); | ||
221 | _edata = .; | ||
222 | } | ||
223 | |||
224 | . = ALIGN(PAGE_SIZE); | ||
225 | #else | 199 | #else |
226 | __initramfs_start = .; | 200 | . = ALIGN(16384); |
227 | .init.ramfs : { | 201 | #endif |
228 | *(.init.ramfs) | 202 | .data.init_task : { |
229 | } | 203 | *(.data.init_task) |
230 | __initramfs_end = .; | 204 | } |
231 | 205 | ||
232 | . = ALIGN(4096); | 206 | . = ALIGN(PAGE_SIZE); |
233 | __init_end = .; | 207 | .data.page_aligned : { |
208 | *(.data.page_aligned) | ||
209 | } | ||
234 | 210 | ||
235 | . = ALIGN(4096); | 211 | .data.cacheline_aligned : { |
236 | _sextratext = .; | 212 | *(.data.cacheline_aligned) |
237 | _eextratext = .; | 213 | } |
238 | 214 | ||
239 | __bss_start = .; | 215 | . = ALIGN(PAGE_SIZE); |
240 | #endif | 216 | __data_nosave : { |
217 | __nosave_begin = .; | ||
218 | *(.data.nosave) | ||
219 | . = ALIGN(PAGE_SIZE); | ||
220 | __nosave_end = .; | ||
221 | } | ||
241 | 222 | ||
242 | .bss : { | 223 | /* |
243 | __bss_start = .; | 224 | * And finally the bss |
244 | *(.sbss) *(.scommon) | 225 | */ |
245 | *(.dynbss) | 226 | |
246 | *(.bss) | 227 | .bss : { |
247 | *(COMMON) | 228 | __bss_start = .; |
248 | __bss_stop = .; | 229 | *(.sbss) *(.scommon) |
249 | } | 230 | *(.dynbss) |
231 | *(.bss) | ||
232 | *(COMMON) | ||
233 | __bss_stop = .; | ||
234 | } | ||
250 | 235 | ||
251 | #ifdef CONFIG_PPC64 | 236 | . = ALIGN(PAGE_SIZE); |
252 | . = ALIGN(PAGE_SIZE); | 237 | _end = . ; |
253 | #endif | 238 | PROVIDE32 (end = .); |
254 | _end = . ; | ||
255 | #ifdef CONFIG_PPC32 | ||
256 | PROVIDE (end = .); | ||
257 | #endif | ||
258 | } | 239 | } |
diff --git a/arch/powerpc/mm/hash_utils_64.c b/arch/powerpc/mm/hash_utils_64.c index 89b35c181314..c006d9039633 100644 --- a/arch/powerpc/mm/hash_utils_64.c +++ b/arch/powerpc/mm/hash_utils_64.c | |||
@@ -167,7 +167,7 @@ int htab_bolt_mapping(unsigned long vstart, unsigned long vend, | |||
167 | * normal insert callback here. | 167 | * normal insert callback here. |
168 | */ | 168 | */ |
169 | #ifdef CONFIG_PPC_ISERIES | 169 | #ifdef CONFIG_PPC_ISERIES |
170 | if (_machine == PLATFORM_ISERIES_LPAR) | 170 | if (machine_is(iseries)) |
171 | ret = iSeries_hpte_insert(hpteg, va, | 171 | ret = iSeries_hpte_insert(hpteg, va, |
172 | paddr, | 172 | paddr, |
173 | tmp_mode, | 173 | tmp_mode, |
@@ -176,7 +176,7 @@ int htab_bolt_mapping(unsigned long vstart, unsigned long vend, | |||
176 | else | 176 | else |
177 | #endif | 177 | #endif |
178 | #ifdef CONFIG_PPC_PSERIES | 178 | #ifdef CONFIG_PPC_PSERIES |
179 | if (_machine & PLATFORM_LPAR) | 179 | if (machine_is(pseries) && firmware_has_feature(FW_FEATURE_LPAR)) |
180 | ret = pSeries_lpar_hpte_insert(hpteg, va, | 180 | ret = pSeries_lpar_hpte_insert(hpteg, va, |
181 | paddr, | 181 | paddr, |
182 | tmp_mode, | 182 | tmp_mode, |
@@ -295,8 +295,7 @@ static void __init htab_init_page_sizes(void) | |||
295 | * Not in the device-tree, let's fallback on known size | 295 | * Not in the device-tree, let's fallback on known size |
296 | * list for 16M capable GP & GR | 296 | * list for 16M capable GP & GR |
297 | */ | 297 | */ |
298 | if ((_machine != PLATFORM_ISERIES_LPAR) && | 298 | if (cpu_has_feature(CPU_FTR_16M_PAGE) && !machine_is(iseries)) |
299 | cpu_has_feature(CPU_FTR_16M_PAGE)) | ||
300 | memcpy(mmu_psize_defs, mmu_psize_defaults_gp, | 299 | memcpy(mmu_psize_defs, mmu_psize_defaults_gp, |
301 | sizeof(mmu_psize_defaults_gp)); | 300 | sizeof(mmu_psize_defaults_gp)); |
302 | found: | 301 | found: |
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, |
diff --git a/arch/ppc/platforms/prep_setup.c b/arch/ppc/platforms/prep_setup.c index a0fc628ffb1e..fa46f8ce5c71 100644 --- a/arch/ppc/platforms/prep_setup.c +++ b/arch/ppc/platforms/prep_setup.c | |||
@@ -1067,15 +1067,13 @@ prep_map_io(void) | |||
1067 | static int __init | 1067 | static int __init |
1068 | prep_request_io(void) | 1068 | prep_request_io(void) |
1069 | { | 1069 | { |
1070 | if (_machine == _MACH_prep) { | ||
1071 | #ifdef CONFIG_NVRAM | 1070 | #ifdef CONFIG_NVRAM |
1072 | request_region(PREP_NVRAM_AS0, 0x8, "nvram"); | 1071 | request_region(PREP_NVRAM_AS0, 0x8, "nvram"); |
1073 | #endif | 1072 | #endif |
1074 | request_region(0x00,0x20,"dma1"); | 1073 | request_region(0x00,0x20,"dma1"); |
1075 | request_region(0x40,0x20,"timer"); | 1074 | request_region(0x40,0x20,"timer"); |
1076 | request_region(0x80,0x10,"dma page reg"); | 1075 | request_region(0x80,0x10,"dma page reg"); |
1077 | request_region(0xc0,0x20,"dma2"); | 1076 | request_region(0xc0,0x20,"dma2"); |
1078 | } | ||
1079 | 1077 | ||
1080 | return 0; | 1078 | return 0; |
1081 | } | 1079 | } |
diff --git a/drivers/char/generic_nvram.c b/drivers/char/generic_nvram.c index 1b5e01e6e129..43ff59816511 100644 --- a/drivers/char/generic_nvram.c +++ b/drivers/char/generic_nvram.c | |||
@@ -22,6 +22,9 @@ | |||
22 | #include <linux/smp_lock.h> | 22 | #include <linux/smp_lock.h> |
23 | #include <asm/uaccess.h> | 23 | #include <asm/uaccess.h> |
24 | #include <asm/nvram.h> | 24 | #include <asm/nvram.h> |
25 | #ifdef CONFIG_PPC_PMAC | ||
26 | #include <asm/machdep.h> | ||
27 | #endif | ||
25 | 28 | ||
26 | #define NVRAM_SIZE 8192 | 29 | #define NVRAM_SIZE 8192 |
27 | 30 | ||
@@ -92,7 +95,7 @@ static int nvram_ioctl(struct inode *inode, struct file *file, | |||
92 | case IOC_NVRAM_GET_OFFSET: { | 95 | case IOC_NVRAM_GET_OFFSET: { |
93 | int part, offset; | 96 | int part, offset; |
94 | 97 | ||
95 | if (_machine != _MACH_Pmac) | 98 | if (!machine_is(powermac)) |
96 | return -EINVAL; | 99 | return -EINVAL; |
97 | if (copy_from_user(&part, (void __user*)arg, sizeof(part)) != 0) | 100 | if (copy_from_user(&part, (void __user*)arg, sizeof(part)) != 0) |
98 | return -EFAULT; | 101 | return -EFAULT; |
diff --git a/drivers/ide/pci/via82cxxx.c b/drivers/ide/pci/via82cxxx.c index c85b87cb59d1..3e677c4f8c28 100644 --- a/drivers/ide/pci/via82cxxx.c +++ b/drivers/ide/pci/via82cxxx.c | |||
@@ -440,7 +440,7 @@ static void __devinit init_hwif_via82cxxx(ide_hwif_t *hwif) | |||
440 | 440 | ||
441 | 441 | ||
442 | #if defined(CONFIG_PPC_CHRP) && defined(CONFIG_PPC32) | 442 | #if defined(CONFIG_PPC_CHRP) && defined(CONFIG_PPC32) |
443 | if(_machine == _MACH_chrp && _chrp_type == _CHRP_Pegasos) { | 443 | if(machine_is(chrp) && _chrp_type == _CHRP_Pegasos) { |
444 | hwif->irq = hwif->channel ? 15 : 14; | 444 | hwif->irq = hwif->channel ? 15 : 14; |
445 | } | 445 | } |
446 | #endif | 446 | #endif |
diff --git a/drivers/ide/ppc/pmac.c b/drivers/ide/ppc/pmac.c index 5013b1285e22..78e30f803671 100644 --- a/drivers/ide/ppc/pmac.c +++ b/drivers/ide/ppc/pmac.c | |||
@@ -1677,7 +1677,7 @@ MODULE_DEVICE_TABLE(pci, pmac_ide_pci_match); | |||
1677 | void __init | 1677 | void __init |
1678 | pmac_ide_probe(void) | 1678 | pmac_ide_probe(void) |
1679 | { | 1679 | { |
1680 | if (_machine != _MACH_Pmac) | 1680 | if (!machine_is(powermac)) |
1681 | return; | 1681 | return; |
1682 | 1682 | ||
1683 | #ifdef CONFIG_BLK_DEV_IDE_PMAC_ATA100FIRST | 1683 | #ifdef CONFIG_BLK_DEV_IDE_PMAC_ATA100FIRST |
diff --git a/drivers/ieee1394/ohci1394.c b/drivers/ieee1394/ohci1394.c index b6b96fa04d62..314f35540034 100644 --- a/drivers/ieee1394/ohci1394.c +++ b/drivers/ieee1394/ohci1394.c | |||
@@ -3526,7 +3526,7 @@ static void ohci1394_pci_remove(struct pci_dev *pdev) | |||
3526 | static int ohci1394_pci_resume (struct pci_dev *pdev) | 3526 | static int ohci1394_pci_resume (struct pci_dev *pdev) |
3527 | { | 3527 | { |
3528 | #ifdef CONFIG_PPC_PMAC | 3528 | #ifdef CONFIG_PPC_PMAC |
3529 | if (_machine == _MACH_Pmac) { | 3529 | if (machine_is(powermac)) { |
3530 | struct device_node *of_node; | 3530 | struct device_node *of_node; |
3531 | 3531 | ||
3532 | /* Re-enable 1394 */ | 3532 | /* Re-enable 1394 */ |
@@ -3545,7 +3545,7 @@ static int ohci1394_pci_resume (struct pci_dev *pdev) | |||
3545 | static int ohci1394_pci_suspend (struct pci_dev *pdev, pm_message_t state) | 3545 | static int ohci1394_pci_suspend (struct pci_dev *pdev, pm_message_t state) |
3546 | { | 3546 | { |
3547 | #ifdef CONFIG_PPC_PMAC | 3547 | #ifdef CONFIG_PPC_PMAC |
3548 | if (_machine == _MACH_Pmac) { | 3548 | if (machine_is(powermac)) { |
3549 | struct device_node *of_node; | 3549 | struct device_node *of_node; |
3550 | 3550 | ||
3551 | /* Disable 1394 */ | 3551 | /* Disable 1394 */ |
diff --git a/drivers/macintosh/adb.c b/drivers/macintosh/adb.c index d2ead1776c16..781d93b0bbd5 100644 --- a/drivers/macintosh/adb.c +++ b/drivers/macintosh/adb.c | |||
@@ -42,6 +42,7 @@ | |||
42 | #include <asm/semaphore.h> | 42 | #include <asm/semaphore.h> |
43 | #ifdef CONFIG_PPC | 43 | #ifdef CONFIG_PPC |
44 | #include <asm/prom.h> | 44 | #include <asm/prom.h> |
45 | #include <asm/machdep.h> | ||
45 | #endif | 46 | #endif |
46 | 47 | ||
47 | 48 | ||
@@ -294,7 +295,7 @@ int __init adb_init(void) | |||
294 | int i; | 295 | int i; |
295 | 296 | ||
296 | #ifdef CONFIG_PPC32 | 297 | #ifdef CONFIG_PPC32 |
297 | if ( (_machine != _MACH_chrp) && (_machine != _MACH_Pmac) ) | 298 | if (!machine_is(chrp) && !machine_is(powermac)) |
298 | return 0; | 299 | return 0; |
299 | #endif | 300 | #endif |
300 | #ifdef CONFIG_MAC | 301 | #ifdef CONFIG_MAC |
diff --git a/drivers/macintosh/adbhid.c b/drivers/macintosh/adbhid.c index c0b46bceb5df..0a4c680d4ac0 100644 --- a/drivers/macintosh/adbhid.c +++ b/drivers/macintosh/adbhid.c | |||
@@ -1206,8 +1206,8 @@ init_ms_a3(int id) | |||
1206 | static int __init adbhid_init(void) | 1206 | static int __init adbhid_init(void) |
1207 | { | 1207 | { |
1208 | #ifndef CONFIG_MAC | 1208 | #ifndef CONFIG_MAC |
1209 | if ( (_machine != _MACH_chrp) && (_machine != _MACH_Pmac) ) | 1209 | if (!machine_is(chrp) && !machine_is(powermac)) |
1210 | return 0; | 1210 | return 0; |
1211 | #endif | 1211 | #endif |
1212 | 1212 | ||
1213 | led_request.complete = 1; | 1213 | led_request.complete = 1; |
diff --git a/drivers/macintosh/mediabay.c b/drivers/macintosh/mediabay.c index 8dbf2852bae0..53c1c7909413 100644 --- a/drivers/macintosh/mediabay.c +++ b/drivers/macintosh/mediabay.c | |||
@@ -839,8 +839,8 @@ static int __init media_bay_init(void) | |||
839 | media_bays[i].cd_index = -1; | 839 | media_bays[i].cd_index = -1; |
840 | #endif | 840 | #endif |
841 | } | 841 | } |
842 | if (_machine != _MACH_Pmac) | 842 | if (!machine_is(powermac)) |
843 | return -ENODEV; | 843 | return 0; |
844 | 844 | ||
845 | macio_register_driver(&media_bay_driver); | 845 | macio_register_driver(&media_bay_driver); |
846 | 846 | ||
diff --git a/drivers/media/video/planb.c b/drivers/media/video/planb.c index 522e9ddeb089..d9e3cada52f4 100644 --- a/drivers/media/video/planb.c +++ b/drivers/media/video/planb.c | |||
@@ -2156,7 +2156,7 @@ static int find_planb(void) | |||
2156 | struct pci_dev *pdev; | 2156 | struct pci_dev *pdev; |
2157 | int rc; | 2157 | int rc; |
2158 | 2158 | ||
2159 | if (_machine != _MACH_Pmac) | 2159 | if (!machine_is(powermac)) |
2160 | return 0; | 2160 | return 0; |
2161 | 2161 | ||
2162 | planb_devices = find_devices("planb"); | 2162 | planb_devices = find_devices("planb"); |
diff --git a/drivers/net/tulip/de4x5.c b/drivers/net/tulip/de4x5.c index ee48bfd67349..46d087c5467b 100644 --- a/drivers/net/tulip/de4x5.c +++ b/drivers/net/tulip/de4x5.c | |||
@@ -4160,7 +4160,7 @@ get_hw_addr(struct net_device *dev) | |||
4160 | ** If the address starts with 00 a0, we have to bit-reverse | 4160 | ** If the address starts with 00 a0, we have to bit-reverse |
4161 | ** each byte of the address. | 4161 | ** each byte of the address. |
4162 | */ | 4162 | */ |
4163 | if ( (_machine & _MACH_Pmac) && | 4163 | if ( machine_is(powermac) && |
4164 | (dev->dev_addr[0] == 0) && | 4164 | (dev->dev_addr[0] == 0) && |
4165 | (dev->dev_addr[1] == 0xa0) ) | 4165 | (dev->dev_addr[1] == 0xa0) ) |
4166 | { | 4166 | { |
diff --git a/drivers/scsi/mesh.c b/drivers/scsi/mesh.c index d6d2125f9044..f852421002ef 100644 --- a/drivers/scsi/mesh.c +++ b/drivers/scsi/mesh.c | |||
@@ -1748,7 +1748,7 @@ static int mesh_host_reset(struct scsi_cmnd *cmd) | |||
1748 | 1748 | ||
1749 | static void set_mesh_power(struct mesh_state *ms, int state) | 1749 | static void set_mesh_power(struct mesh_state *ms, int state) |
1750 | { | 1750 | { |
1751 | if (_machine != _MACH_Pmac) | 1751 | if (!machine_is(powermac)) |
1752 | return; | 1752 | return; |
1753 | if (state) { | 1753 | if (state) { |
1754 | pmac_call_feature(PMAC_FTR_MESH_ENABLE, macio_get_of_node(ms->mdev), 0, 1); | 1754 | pmac_call_feature(PMAC_FTR_MESH_ENABLE, macio_get_of_node(ms->mdev), 0, 1); |
diff --git a/drivers/usb/core/hcd-pci.c b/drivers/usb/core/hcd-pci.c index e0afb5ad29e5..0d2193b69235 100644 --- a/drivers/usb/core/hcd-pci.c +++ b/drivers/usb/core/hcd-pci.c | |||
@@ -296,7 +296,7 @@ done: | |||
296 | 296 | ||
297 | #ifdef CONFIG_PPC_PMAC | 297 | #ifdef CONFIG_PPC_PMAC |
298 | /* Disable ASIC clocks for USB */ | 298 | /* Disable ASIC clocks for USB */ |
299 | if (_machine == _MACH_Pmac) { | 299 | if (machine_is(powermac)) { |
300 | struct device_node *of_node; | 300 | struct device_node *of_node; |
301 | 301 | ||
302 | of_node = pci_device_to_OF_node (dev); | 302 | of_node = pci_device_to_OF_node (dev); |
@@ -331,7 +331,7 @@ int usb_hcd_pci_resume (struct pci_dev *dev) | |||
331 | 331 | ||
332 | #ifdef CONFIG_PPC_PMAC | 332 | #ifdef CONFIG_PPC_PMAC |
333 | /* Reenable ASIC clocks for USB */ | 333 | /* Reenable ASIC clocks for USB */ |
334 | if (_machine == _MACH_Pmac) { | 334 | if (machine_is(powermac)) { |
335 | struct device_node *of_node; | 335 | struct device_node *of_node; |
336 | 336 | ||
337 | of_node = pci_device_to_OF_node (dev); | 337 | of_node = pci_device_to_OF_node (dev); |
diff --git a/drivers/video/aty/aty128fb.c b/drivers/video/aty/aty128fb.c index 620c9a934e0e..f07be22e119d 100644 --- a/drivers/video/aty/aty128fb.c +++ b/drivers/video/aty/aty128fb.c | |||
@@ -67,6 +67,7 @@ | |||
67 | #include <asm/io.h> | 67 | #include <asm/io.h> |
68 | 68 | ||
69 | #ifdef CONFIG_PPC_PMAC | 69 | #ifdef CONFIG_PPC_PMAC |
70 | #include <asm/machdep.h> | ||
70 | #include <asm/pmac_feature.h> | 71 | #include <asm/pmac_feature.h> |
71 | #include <asm/prom.h> | 72 | #include <asm/prom.h> |
72 | #include <asm/pci-bridge.h> | 73 | #include <asm/pci-bridge.h> |
@@ -1748,7 +1749,7 @@ static int __init aty128_init(struct pci_dev *pdev, const struct pci_device_id * | |||
1748 | 1749 | ||
1749 | var = default_var; | 1750 | var = default_var; |
1750 | #ifdef CONFIG_PPC_PMAC | 1751 | #ifdef CONFIG_PPC_PMAC |
1751 | if (_machine == _MACH_Pmac) { | 1752 | if (machine_is(powermac)) { |
1752 | /* Indicate sleep capability */ | 1753 | /* Indicate sleep capability */ |
1753 | if (par->chip_gen == rage_M3) { | 1754 | if (par->chip_gen == rage_M3) { |
1754 | pmac_call_feature(PMAC_FTR_DEVICE_CAN_WAKE, NULL, 0, 1); | 1755 | pmac_call_feature(PMAC_FTR_DEVICE_CAN_WAKE, NULL, 0, 1); |
@@ -2011,7 +2012,7 @@ static int aty128fb_blank(int blank, struct fb_info *fb) | |||
2011 | return 0; | 2012 | return 0; |
2012 | 2013 | ||
2013 | #ifdef CONFIG_PMAC_BACKLIGHT | 2014 | #ifdef CONFIG_PMAC_BACKLIGHT |
2014 | if ((_machine == _MACH_Pmac) && blank) | 2015 | if (machine_is(powermac) && blank) |
2015 | set_backlight_enable(0); | 2016 | set_backlight_enable(0); |
2016 | #endif /* CONFIG_PMAC_BACKLIGHT */ | 2017 | #endif /* CONFIG_PMAC_BACKLIGHT */ |
2017 | 2018 | ||
@@ -2029,7 +2030,7 @@ static int aty128fb_blank(int blank, struct fb_info *fb) | |||
2029 | aty128_set_lcd_enable(par, par->lcd_on && !blank); | 2030 | aty128_set_lcd_enable(par, par->lcd_on && !blank); |
2030 | } | 2031 | } |
2031 | #ifdef CONFIG_PMAC_BACKLIGHT | 2032 | #ifdef CONFIG_PMAC_BACKLIGHT |
2032 | if ((_machine == _MACH_Pmac) && !blank) | 2033 | if (machine_is(powermac) && !blank) |
2033 | set_backlight_enable(1); | 2034 | set_backlight_enable(1); |
2034 | #endif /* CONFIG_PMAC_BACKLIGHT */ | 2035 | #endif /* CONFIG_PMAC_BACKLIGHT */ |
2035 | return 0; | 2036 | return 0; |
diff --git a/drivers/video/aty/atyfb_base.c b/drivers/video/aty/atyfb_base.c index 485be386a8ff..1b1f24e2bfbe 100644 --- a/drivers/video/aty/atyfb_base.c +++ b/drivers/video/aty/atyfb_base.c | |||
@@ -75,6 +75,7 @@ | |||
75 | #include "ati_ids.h" | 75 | #include "ati_ids.h" |
76 | 76 | ||
77 | #ifdef __powerpc__ | 77 | #ifdef __powerpc__ |
78 | #include <asm/machdep.h> | ||
78 | #include <asm/prom.h> | 79 | #include <asm/prom.h> |
79 | #include "../macmodes.h" | 80 | #include "../macmodes.h" |
80 | #endif | 81 | #endif |
@@ -2516,7 +2517,7 @@ static int __init aty_init(struct fb_info *info, const char *name) | |||
2516 | 2517 | ||
2517 | memset(&var, 0, sizeof(var)); | 2518 | memset(&var, 0, sizeof(var)); |
2518 | #ifdef CONFIG_PPC | 2519 | #ifdef CONFIG_PPC |
2519 | if (_machine == _MACH_Pmac) { | 2520 | if (machine_is(powermac)) { |
2520 | /* | 2521 | /* |
2521 | * FIXME: The NVRAM stuff should be put in a Mac-specific file, as it | 2522 | * FIXME: The NVRAM stuff should be put in a Mac-specific file, as it |
2522 | * applies to all Mac video cards | 2523 | * applies to all Mac video cards |
@@ -2671,7 +2672,7 @@ static int atyfb_blank(int blank, struct fb_info *info) | |||
2671 | return 0; | 2672 | return 0; |
2672 | 2673 | ||
2673 | #ifdef CONFIG_PMAC_BACKLIGHT | 2674 | #ifdef CONFIG_PMAC_BACKLIGHT |
2674 | if ((_machine == _MACH_Pmac) && blank > FB_BLANK_NORMAL) | 2675 | if (machine_is(powermac) && blank > FB_BLANK_NORMAL) |
2675 | set_backlight_enable(0); | 2676 | set_backlight_enable(0); |
2676 | #elif defined(CONFIG_FB_ATY_GENERIC_LCD) | 2677 | #elif defined(CONFIG_FB_ATY_GENERIC_LCD) |
2677 | if (par->lcd_table && blank > FB_BLANK_NORMAL && | 2678 | if (par->lcd_table && blank > FB_BLANK_NORMAL && |
@@ -2703,7 +2704,7 @@ static int atyfb_blank(int blank, struct fb_info *info) | |||
2703 | aty_st_le32(CRTC_GEN_CNTL, gen_cntl, par); | 2704 | aty_st_le32(CRTC_GEN_CNTL, gen_cntl, par); |
2704 | 2705 | ||
2705 | #ifdef CONFIG_PMAC_BACKLIGHT | 2706 | #ifdef CONFIG_PMAC_BACKLIGHT |
2706 | if ((_machine == _MACH_Pmac) && blank <= FB_BLANK_NORMAL) | 2707 | if (machine_is(powermac) && blank <= FB_BLANK_NORMAL) |
2707 | set_backlight_enable(1); | 2708 | set_backlight_enable(1); |
2708 | #elif defined(CONFIG_FB_ATY_GENERIC_LCD) | 2709 | #elif defined(CONFIG_FB_ATY_GENERIC_LCD) |
2709 | if (par->lcd_table && blank <= FB_BLANK_NORMAL && | 2710 | if (par->lcd_table && blank <= FB_BLANK_NORMAL && |
diff --git a/drivers/video/aty/radeon_pm.c b/drivers/video/aty/radeon_pm.c index 5886a2f1323e..c7091761cef4 100644 --- a/drivers/video/aty/radeon_pm.c +++ b/drivers/video/aty/radeon_pm.c | |||
@@ -20,7 +20,7 @@ | |||
20 | #include <linux/agp_backend.h> | 20 | #include <linux/agp_backend.h> |
21 | 21 | ||
22 | #ifdef CONFIG_PPC_PMAC | 22 | #ifdef CONFIG_PPC_PMAC |
23 | #include <asm/processor.h> | 23 | #include <asm/machdep.h> |
24 | #include <asm/prom.h> | 24 | #include <asm/prom.h> |
25 | #include <asm/pmac_feature.h> | 25 | #include <asm/pmac_feature.h> |
26 | #endif | 26 | #endif |
@@ -2745,7 +2745,7 @@ void radeonfb_pm_init(struct radeonfb_info *rinfo, int dynclk) | |||
2745 | rinfo->pm_mode |= radeon_pm_off; | 2745 | rinfo->pm_mode |= radeon_pm_off; |
2746 | } | 2746 | } |
2747 | #if defined(CONFIG_PPC_PMAC) | 2747 | #if defined(CONFIG_PPC_PMAC) |
2748 | if (_machine == _MACH_Pmac && rinfo->of_node) { | 2748 | if (machine_is(powermac) && rinfo->of_node) { |
2749 | if (rinfo->is_mobility && rinfo->pm_reg && | 2749 | if (rinfo->is_mobility && rinfo->pm_reg && |
2750 | rinfo->family <= CHIP_FAMILY_RV250) | 2750 | rinfo->family <= CHIP_FAMILY_RV250) |
2751 | rinfo->pm_mode |= radeon_pm_d2; | 2751 | rinfo->pm_mode |= radeon_pm_d2; |
diff --git a/drivers/video/cirrusfb.c b/drivers/video/cirrusfb.c index 66d6f2f0a219..1103010af54a 100644 --- a/drivers/video/cirrusfb.c +++ b/drivers/video/cirrusfb.c | |||
@@ -60,8 +60,8 @@ | |||
60 | #include <asm/amigahw.h> | 60 | #include <asm/amigahw.h> |
61 | #endif | 61 | #endif |
62 | #ifdef CONFIG_PPC_PREP | 62 | #ifdef CONFIG_PPC_PREP |
63 | #include <asm/processor.h> | 63 | #include <asm/machdep.h> |
64 | #define isPReP (_machine == _MACH_prep) | 64 | #define isPReP (machine_is(prep)) |
65 | #else | 65 | #else |
66 | #define isPReP 0 | 66 | #define isPReP 0 |
67 | #endif | 67 | #endif |
diff --git a/drivers/video/matrox/matroxfb_base.c b/drivers/video/matrox/matroxfb_base.c index 951c9974a1d3..23c1827b2d0b 100644 --- a/drivers/video/matrox/matroxfb_base.c +++ b/drivers/video/matrox/matroxfb_base.c | |||
@@ -115,6 +115,7 @@ | |||
115 | #include <asm/uaccess.h> | 115 | #include <asm/uaccess.h> |
116 | 116 | ||
117 | #ifdef CONFIG_PPC_PMAC | 117 | #ifdef CONFIG_PPC_PMAC |
118 | #include <asm/machdep.h> | ||
118 | unsigned char nvram_read_byte(int); | 119 | unsigned char nvram_read_byte(int); |
119 | static int default_vmode = VMODE_NVRAM; | 120 | static int default_vmode = VMODE_NVRAM; |
120 | static int default_cmode = CMODE_NVRAM; | 121 | static int default_cmode = CMODE_NVRAM; |
@@ -1833,7 +1834,7 @@ static int initMatrox2(WPMINFO struct board* b){ | |||
1833 | /* FIXME: Where to move this?! */ | 1834 | /* FIXME: Where to move this?! */ |
1834 | #if defined(CONFIG_PPC_PMAC) | 1835 | #if defined(CONFIG_PPC_PMAC) |
1835 | #ifndef MODULE | 1836 | #ifndef MODULE |
1836 | if (_machine == _MACH_Pmac) { | 1837 | if (machine_is(powermac)) { |
1837 | struct fb_var_screeninfo var; | 1838 | struct fb_var_screeninfo var; |
1838 | if (default_vmode <= 0 || default_vmode > VMODE_MAX) | 1839 | if (default_vmode <= 0 || default_vmode > VMODE_MAX) |
1839 | default_vmode = VMODE_640_480_60; | 1840 | default_vmode = VMODE_640_480_60; |
diff --git a/drivers/video/nvidia/nvidia.c b/drivers/video/nvidia/nvidia.c index a7c4e5e8ead6..7258b3245316 100644 --- a/drivers/video/nvidia/nvidia.c +++ b/drivers/video/nvidia/nvidia.c | |||
@@ -29,6 +29,7 @@ | |||
29 | #include <asm/pci-bridge.h> | 29 | #include <asm/pci-bridge.h> |
30 | #endif | 30 | #endif |
31 | #ifdef CONFIG_PMAC_BACKLIGHT | 31 | #ifdef CONFIG_PMAC_BACKLIGHT |
32 | #include <asm/machdep.h> | ||
32 | #include <asm/backlight.h> | 33 | #include <asm/backlight.h> |
33 | #endif | 34 | #endif |
34 | 35 | ||
@@ -1353,7 +1354,7 @@ static int nvidiafb_blank(int blank, struct fb_info *info) | |||
1353 | NVWriteCrtc(par, 0x1a, vesa); | 1354 | NVWriteCrtc(par, 0x1a, vesa); |
1354 | 1355 | ||
1355 | #ifdef CONFIG_PMAC_BACKLIGHT | 1356 | #ifdef CONFIG_PMAC_BACKLIGHT |
1356 | if (par->FlatPanel && _machine == _MACH_Pmac) { | 1357 | if (par->FlatPanel && machine_is(powermac)) { |
1357 | set_backlight_enable(!blank); | 1358 | set_backlight_enable(!blank); |
1358 | } | 1359 | } |
1359 | #endif | 1360 | #endif |
@@ -1688,7 +1689,7 @@ static int __devinit nvidiafb_probe(struct pci_dev *pd, | |||
1688 | info->fix.id, | 1689 | info->fix.id, |
1689 | par->FbMapSize / (1024 * 1024), info->fix.smem_start); | 1690 | par->FbMapSize / (1024 * 1024), info->fix.smem_start); |
1690 | #ifdef CONFIG_PMAC_BACKLIGHT | 1691 | #ifdef CONFIG_PMAC_BACKLIGHT |
1691 | if (par->FlatPanel && _machine == _MACH_Pmac) | 1692 | if (par->FlatPanel && machine_is(powermac)) |
1692 | register_backlight_controller(&nvidia_backlight_controller, | 1693 | register_backlight_controller(&nvidia_backlight_controller, |
1693 | par, "mnca"); | 1694 | par, "mnca"); |
1694 | #endif | 1695 | #endif |
diff --git a/drivers/video/radeonfb.c b/drivers/video/radeonfb.c index db9fb9074dbc..04820fab964c 100644 --- a/drivers/video/radeonfb.c +++ b/drivers/video/radeonfb.c | |||
@@ -1596,7 +1596,7 @@ static int radeonfb_blank (int blank, struct fb_info *info) | |||
1596 | return 0; | 1596 | return 0; |
1597 | 1597 | ||
1598 | #ifdef CONFIG_PMAC_BACKLIGHT | 1598 | #ifdef CONFIG_PMAC_BACKLIGHT |
1599 | if (rinfo->dviDisp_type == MT_LCD && _machine == _MACH_Pmac) { | 1599 | if (rinfo->dviDisp_type == MT_LCD && machine_is(powermac)) { |
1600 | set_backlight_enable(!blank); | 1600 | set_backlight_enable(!blank); |
1601 | return 0; | 1601 | return 0; |
1602 | } | 1602 | } |
diff --git a/drivers/video/riva/fbdev.c b/drivers/video/riva/fbdev.c index 6c19ab6afb01..b7bd6bb2c77c 100644 --- a/drivers/video/riva/fbdev.c +++ b/drivers/video/riva/fbdev.c | |||
@@ -49,6 +49,7 @@ | |||
49 | #include <asm/pci-bridge.h> | 49 | #include <asm/pci-bridge.h> |
50 | #endif | 50 | #endif |
51 | #ifdef CONFIG_PMAC_BACKLIGHT | 51 | #ifdef CONFIG_PMAC_BACKLIGHT |
52 | #include <asm/machdep.h> | ||
52 | #include <asm/backlight.h> | 53 | #include <asm/backlight.h> |
53 | #endif | 54 | #endif |
54 | 55 | ||
@@ -1247,7 +1248,7 @@ static int rivafb_blank(int blank, struct fb_info *info) | |||
1247 | CRTCout(par, 0x1a, vesa); | 1248 | CRTCout(par, 0x1a, vesa); |
1248 | 1249 | ||
1249 | #ifdef CONFIG_PMAC_BACKLIGHT | 1250 | #ifdef CONFIG_PMAC_BACKLIGHT |
1250 | if ( par->FlatPanel && _machine == _MACH_Pmac) { | 1251 | if ( par->FlatPanel && machine_is(powermac)) { |
1251 | set_backlight_enable(!blank); | 1252 | set_backlight_enable(!blank); |
1252 | } | 1253 | } |
1253 | #endif | 1254 | #endif |
@@ -2037,9 +2038,9 @@ static int __devinit rivafb_probe(struct pci_dev *pd, | |||
2037 | info->fix.smem_len / (1024 * 1024), | 2038 | info->fix.smem_len / (1024 * 1024), |
2038 | info->fix.smem_start); | 2039 | info->fix.smem_start); |
2039 | #ifdef CONFIG_PMAC_BACKLIGHT | 2040 | #ifdef CONFIG_PMAC_BACKLIGHT |
2040 | if (default_par->FlatPanel && _machine == _MACH_Pmac) | 2041 | if (default_par->FlatPanel && machine_is(powermac)) |
2041 | register_backlight_controller(&riva_backlight_controller, | 2042 | register_backlight_controller(&riva_backlight_controller, |
2042 | default_par, "mnca"); | 2043 | default_par, "mnca"); |
2043 | #endif | 2044 | #endif |
2044 | NVTRACE_LEAVE(); | 2045 | NVTRACE_LEAVE(); |
2045 | return 0; | 2046 | return 0; |
diff --git a/fs/partitions/mac.c b/fs/partitions/mac.c index bb22cdd0cb14..813292f21210 100644 --- a/fs/partitions/mac.c +++ b/fs/partitions/mac.c | |||
@@ -12,6 +12,7 @@ | |||
12 | #include "mac.h" | 12 | #include "mac.h" |
13 | 13 | ||
14 | #ifdef CONFIG_PPC_PMAC | 14 | #ifdef CONFIG_PPC_PMAC |
15 | #include <asm/machdep.h> | ||
15 | extern void note_bootable_part(dev_t dev, int part, int goodness); | 16 | extern void note_bootable_part(dev_t dev, int part, int goodness); |
16 | #endif | 17 | #endif |
17 | 18 | ||
@@ -79,7 +80,7 @@ int mac_partition(struct parsed_partitions *state, struct block_device *bdev) | |||
79 | * If this is the first bootable partition, tell the | 80 | * If this is the first bootable partition, tell the |
80 | * setup code, in case it wants to make this the root. | 81 | * setup code, in case it wants to make this the root. |
81 | */ | 82 | */ |
82 | if (_machine == _MACH_Pmac) { | 83 | if (machine_is(powermac)) { |
83 | int goodness = 0; | 84 | int goodness = 0; |
84 | 85 | ||
85 | mac_fix_string(part->processor, 16); | 86 | mac_fix_string(part->processor, 16); |
diff --git a/include/asm-powerpc/machdep.h b/include/asm-powerpc/machdep.h index 758e47fe8c1e..5ed847680754 100644 --- a/include/asm-powerpc/machdep.h +++ b/include/asm-powerpc/machdep.h | |||
@@ -47,6 +47,7 @@ struct smp_ops_t { | |||
47 | #endif | 47 | #endif |
48 | 48 | ||
49 | struct machdep_calls { | 49 | struct machdep_calls { |
50 | char *name; | ||
50 | #ifdef CONFIG_PPC64 | 51 | #ifdef CONFIG_PPC64 |
51 | void (*hpte_invalidate)(unsigned long slot, | 52 | void (*hpte_invalidate)(unsigned long slot, |
52 | unsigned long va, | 53 | unsigned long va, |
@@ -85,9 +86,9 @@ struct machdep_calls { | |||
85 | void (*iommu_dev_setup)(struct pci_dev *dev); | 86 | void (*iommu_dev_setup)(struct pci_dev *dev); |
86 | void (*iommu_bus_setup)(struct pci_bus *bus); | 87 | void (*iommu_bus_setup)(struct pci_bus *bus); |
87 | void (*irq_bus_setup)(struct pci_bus *bus); | 88 | void (*irq_bus_setup)(struct pci_bus *bus); |
88 | #endif | 89 | #endif /* CONFIG_PPC64 */ |
89 | 90 | ||
90 | int (*probe)(int platform); | 91 | int (*probe)(void); |
91 | void (*setup_arch)(void); | 92 | void (*setup_arch)(void); |
92 | void (*init_early)(void); | 93 | void (*init_early)(void); |
93 | /* Optional, may be NULL. */ | 94 | /* Optional, may be NULL. */ |
@@ -207,8 +208,6 @@ struct machdep_calls { | |||
207 | /* Called at then very end of pcibios_init() */ | 208 | /* Called at then very end of pcibios_init() */ |
208 | void (*pcibios_after_init)(void); | 209 | void (*pcibios_after_init)(void); |
209 | 210 | ||
210 | /* this is for modules, since _machine can be a define -- Cort */ | ||
211 | int ppc_machine; | ||
212 | #endif /* CONFIG_PPC32 */ | 211 | #endif /* CONFIG_PPC32 */ |
213 | 212 | ||
214 | /* Called to shutdown machine specific hardware not already controlled | 213 | /* Called to shutdown machine specific hardware not already controlled |
@@ -244,7 +243,26 @@ struct machdep_calls { | |||
244 | extern void power4_idle(void); | 243 | extern void power4_idle(void); |
245 | extern void ppc6xx_idle(void); | 244 | extern void ppc6xx_idle(void); |
246 | 245 | ||
246 | /* | ||
247 | * ppc_md contains a copy of the machine description structure for the | ||
248 | * current platform. machine_id contains the initial address where the | ||
249 | * description was found during boot. | ||
250 | */ | ||
247 | extern struct machdep_calls ppc_md; | 251 | extern struct machdep_calls ppc_md; |
252 | extern struct machdep_calls *machine_id; | ||
253 | |||
254 | #define __machine_desc __attribute__ ((__section__ (".machine.desc"))) | ||
255 | |||
256 | #define define_machine(name) struct machdep_calls mach_##name __machine_desc = | ||
257 | #define machine_is(name) \ | ||
258 | ({ \ | ||
259 | extern struct machdep_calls mach_##name \ | ||
260 | __attribute__((weak)); \ | ||
261 | machine_id == &mach_##name; \ | ||
262 | }) | ||
263 | |||
264 | extern void probe_machine(void); | ||
265 | |||
248 | extern char cmd_line[COMMAND_LINE_SIZE]; | 266 | extern char cmd_line[COMMAND_LINE_SIZE]; |
249 | 267 | ||
250 | #ifdef CONFIG_PPC_PMAC | 268 | #ifdef CONFIG_PPC_PMAC |
diff --git a/include/asm-powerpc/pmac_feature.h b/include/asm-powerpc/pmac_feature.h index 3221628130c4..d3599cc9aa74 100644 --- a/include/asm-powerpc/pmac_feature.h +++ b/include/asm-powerpc/pmac_feature.h | |||
@@ -305,7 +305,7 @@ extern void pmac_feature_init(void); | |||
305 | extern void pmac_set_early_video_resume(void (*proc)(void *data), void *data); | 305 | extern void pmac_set_early_video_resume(void (*proc)(void *data), void *data); |
306 | extern void pmac_call_early_video_resume(void); | 306 | extern void pmac_call_early_video_resume(void); |
307 | 307 | ||
308 | #define PMAC_FTR_DEF(x) ((_MACH_Pmac << 16) | (x)) | 308 | #define PMAC_FTR_DEF(x) ((0x6660000) | (x)) |
309 | 309 | ||
310 | /* The AGP driver registers itself here */ | 310 | /* The AGP driver registers itself here */ |
311 | extern void pmac_register_agp_pm(struct pci_dev *bridge, | 311 | extern void pmac_register_agp_pm(struct pci_dev *bridge, |
diff --git a/include/asm-powerpc/processor.h b/include/asm-powerpc/processor.h index 57643b5b782f..93f83efeb310 100644 --- a/include/asm-powerpc/processor.h +++ b/include/asm-powerpc/processor.h | |||
@@ -22,22 +22,6 @@ | |||
22 | * -- BenH. | 22 | * -- BenH. |
23 | */ | 23 | */ |
24 | 24 | ||
25 | /* Platforms codes (to be obsoleted) */ | ||
26 | #define PLATFORM_PSERIES 0x0100 | ||
27 | #define PLATFORM_PSERIES_LPAR 0x0101 | ||
28 | #define PLATFORM_ISERIES_LPAR 0x0201 | ||
29 | #define PLATFORM_LPAR 0x0001 | ||
30 | #define PLATFORM_POWERMAC 0x0400 | ||
31 | #define PLATFORM_MAPLE 0x0500 | ||
32 | #define PLATFORM_PREP 0x0600 | ||
33 | #define PLATFORM_CHRP 0x0700 | ||
34 | #define PLATFORM_CELL 0x1000 | ||
35 | |||
36 | /* Compat platform codes for 32 bits */ | ||
37 | #define _MACH_prep PLATFORM_PREP | ||
38 | #define _MACH_Pmac PLATFORM_POWERMAC | ||
39 | #define _MACH_chrp PLATFORM_CHRP | ||
40 | |||
41 | /* PREP sub-platform types see residual.h for these */ | 25 | /* PREP sub-platform types see residual.h for these */ |
42 | #define _PREP_Motorola 0x01 /* motorola prep */ | 26 | #define _PREP_Motorola 0x01 /* motorola prep */ |
43 | #define _PREP_Firm 0x02 /* firmworks prep */ | 27 | #define _PREP_Firm 0x02 /* firmworks prep */ |
@@ -49,15 +33,14 @@ | |||
49 | #define _CHRP_IBM 0x05 /* IBM chrp, the longtrail and longtrail 2 */ | 33 | #define _CHRP_IBM 0x05 /* IBM chrp, the longtrail and longtrail 2 */ |
50 | #define _CHRP_Pegasos 0x06 /* Genesi/bplan's Pegasos and Pegasos2 */ | 34 | #define _CHRP_Pegasos 0x06 /* Genesi/bplan's Pegasos and Pegasos2 */ |
51 | 35 | ||
52 | #ifdef __KERNEL__ | 36 | #if defined(__KERNEL__) && defined(CONFIG_PPC32) |
53 | #define platform_is_pseries() (_machine == PLATFORM_PSERIES || \ | 37 | |
54 | _machine == PLATFORM_PSERIES_LPAR) | 38 | extern int _chrp_type; |
55 | 39 | ||
56 | #ifdef CONFIG_PPC_PREP | 40 | #ifdef CONFIG_PPC_PREP |
57 | 41 | ||
58 | /* what kind of prep workstation we are */ | 42 | /* what kind of prep workstation we are */ |
59 | extern int _prep_type; | 43 | extern int _prep_type; |
60 | extern int _chrp_type; | ||
61 | 44 | ||
62 | /* | 45 | /* |
63 | * This is used to identify the board type from a given PReP board | 46 | * This is used to identify the board type from a given PReP board |
@@ -69,18 +52,12 @@ extern unsigned char ucBoardRevMaj, ucBoardRevMin; | |||
69 | 52 | ||
70 | #endif /* CONFIG_PPC_PREP */ | 53 | #endif /* CONFIG_PPC_PREP */ |
71 | 54 | ||
72 | #if defined(CONFIG_PPC_MULTIPLATFORM) | 55 | #ifndef CONFIG_PPC_MULTIPLATFORM |
73 | extern int _machine; | ||
74 | |||
75 | #elif defined(CONFIG_PPC_ISERIES) | ||
76 | /* | ||
77 | * iSeries is soon to become MULTIPLATFORM hopefully ... | ||
78 | */ | ||
79 | #define _machine PLATFORM_ISERIES_LPAR | ||
80 | #else | ||
81 | #define _machine 0 | 56 | #define _machine 0 |
82 | #endif /* CONFIG_PPC_MULTIPLATFORM */ | 57 | #endif /* CONFIG_PPC_MULTIPLATFORM */ |
83 | #endif /* __KERNEL__ */ | 58 | |
59 | #endif /* defined(__KERNEL__) && defined(CONFIG_PPC32) */ | ||
60 | |||
84 | /* | 61 | /* |
85 | * Default implementation of macro that returns current | 62 | * Default implementation of macro that returns current |
86 | * instruction pointer ("program counter"). | 63 | * instruction pointer ("program counter"). |
diff --git a/include/asm-powerpc/prom.h b/include/asm-powerpc/prom.h index 782e13a070a1..97ef1cd71a4d 100644 --- a/include/asm-powerpc/prom.h +++ b/include/asm-powerpc/prom.h | |||
@@ -149,12 +149,14 @@ extern struct device_node *of_node_get(struct device_node *node); | |||
149 | extern void of_node_put(struct device_node *node); | 149 | extern void of_node_put(struct device_node *node); |
150 | 150 | ||
151 | /* For scanning the flat device-tree at boot time */ | 151 | /* For scanning the flat device-tree at boot time */ |
152 | int __init of_scan_flat_dt(int (*it)(unsigned long node, | 152 | extern int __init of_scan_flat_dt(int (*it)(unsigned long node, |
153 | const char *uname, int depth, | 153 | const char *uname, int depth, |
154 | void *data), | 154 | void *data), |
155 | void *data); | 155 | void *data); |
156 | void* __init of_get_flat_dt_prop(unsigned long node, const char *name, | 156 | extern void* __init of_get_flat_dt_prop(unsigned long node, const char *name, |
157 | unsigned long *size); | 157 | unsigned long *size); |
158 | extern int __init of_flat_dt_is_compatible(unsigned long node, const char *name); | ||
159 | extern unsigned long __init of_get_flat_dt_root(void); | ||
158 | 160 | ||
159 | /* For updating the device tree at runtime */ | 161 | /* For updating the device tree at runtime */ |
160 | extern void of_attach_node(struct device_node *); | 162 | extern void of_attach_node(struct device_node *); |
diff --git a/include/asm-powerpc/vdso_datapage.h b/include/asm-powerpc/vdso_datapage.h index 7aa92086c3fb..8a94f0eba5e9 100644 --- a/include/asm-powerpc/vdso_datapage.h +++ b/include/asm-powerpc/vdso_datapage.h | |||
@@ -55,6 +55,9 @@ struct vdso_data { | |||
55 | __u32 minor; /* Minor number 0x14 */ | 55 | __u32 minor; /* Minor number 0x14 */ |
56 | } version; | 56 | } version; |
57 | 57 | ||
58 | /* Note about the platform flags: it now only contains the lpar | ||
59 | * bit. The actual platform number is dead and burried | ||
60 | */ | ||
58 | __u32 platform; /* Platform flags 0x18 */ | 61 | __u32 platform; /* Platform flags 0x18 */ |
59 | __u32 processor; /* Processor type 0x1C */ | 62 | __u32 processor; /* Processor type 0x1C */ |
60 | __u64 processorCount; /* # of physical processors 0x20 */ | 63 | __u64 processorCount; /* # of physical processors 0x20 */ |
diff --git a/include/asm-ppc/machdep.h b/include/asm-ppc/machdep.h index 2723b423f675..e1a0a7b213d7 100644 --- a/include/asm-ppc/machdep.h +++ b/include/asm-ppc/machdep.h | |||
@@ -19,6 +19,18 @@ struct pci_dev; | |||
19 | struct seq_file; | 19 | struct seq_file; |
20 | struct file; | 20 | struct file; |
21 | 21 | ||
22 | /* | ||
23 | * This is for compatibility with ARCH=powerpc. | ||
24 | */ | ||
25 | #define machine_is(x) __MACHINE_IS_##x | ||
26 | #define __MACHINE_IS_powermac 0 | ||
27 | #define __MACHINE_IS_chrp 0 | ||
28 | #ifdef CONFIG_PPC_PREP | ||
29 | #define __MACHINE_IS_prep 1 | ||
30 | #else | ||
31 | #define __MACHINE_IS_prep 0 | ||
32 | #endif | ||
33 | |||
22 | /* We export this macro for external modules like Alsa to know if | 34 | /* We export this macro for external modules like Alsa to know if |
23 | * ppc_md.feature_call is implemented or not | 35 | * ppc_md.feature_call is implemented or not |
24 | */ | 36 | */ |
diff --git a/sound/oss/dmasound/dmasound_awacs.c b/sound/oss/dmasound/dmasound_awacs.c index 6ba8d6f45fe8..a8636adef2e6 100644 --- a/sound/oss/dmasound/dmasound_awacs.c +++ b/sound/oss/dmasound/dmasound_awacs.c | |||
@@ -2814,7 +2814,7 @@ int __init dmasound_awacs_init(void) | |||
2814 | struct device_node *io = NULL, *info = NULL; | 2814 | struct device_node *io = NULL, *info = NULL; |
2815 | int vol, res; | 2815 | int vol, res; |
2816 | 2816 | ||
2817 | if (_machine != _MACH_Pmac) | 2817 | if (!machine_is(powermac)) |
2818 | return -ENODEV; | 2818 | return -ENODEV; |
2819 | 2819 | ||
2820 | awacs_subframe = 0; | 2820 | awacs_subframe = 0; |
diff --git a/sound/ppc/pmac.c b/sound/ppc/pmac.c index aa57170101fd..f0794ef9d1ac 100644 --- a/sound/ppc/pmac.c +++ b/sound/ppc/pmac.c | |||
@@ -869,7 +869,7 @@ static int __init snd_pmac_detect(struct snd_pmac *chip) | |||
869 | 869 | ||
870 | u32 layout_id = 0; | 870 | u32 layout_id = 0; |
871 | 871 | ||
872 | if (_machine != _MACH_Pmac) | 872 | if (!machine_is(powermac)) |
873 | return -ENODEV; | 873 | return -ENODEV; |
874 | 874 | ||
875 | chip->subframe = 0; | 875 | chip->subframe = 0; |