diff options
author | Ingo Molnar <mingo@elte.hu> | 2009-05-18 01:37:44 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-05-18 01:37:49 -0400 |
commit | dc3f81b129b5439ba7bac265bbc6a51a39275dae (patch) | |
tree | 216030731d911249496d2e97206cd61431e31c89 /arch/powerpc/kernel | |
parent | d2517a49d55536b38c7a87e5289550cfedaa4dcc (diff) | |
parent | 1406de8e11eb043681297adf86d6892ff8efc27a (diff) |
Merge commit 'v2.6.30-rc6' into perfcounters/core
Merge reason: this branch was on an -rc4 base, merge it up to -rc6
to get the latest upstream fixes.
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/powerpc/kernel')
-rw-r--r-- | arch/powerpc/kernel/cputable.c | 15 | ||||
-rw-r--r-- | arch/powerpc/kernel/machine_kexec.c | 4 | ||||
-rw-r--r-- | arch/powerpc/kernel/pci-common.c | 21 | ||||
-rw-r--r-- | arch/powerpc/kernel/pci_64.c | 15 | ||||
-rw-r--r-- | arch/powerpc/kernel/prom.c | 8 |
5 files changed, 42 insertions, 21 deletions
diff --git a/arch/powerpc/kernel/cputable.c b/arch/powerpc/kernel/cputable.c index cd1b687544f3..3e33fb933d99 100644 --- a/arch/powerpc/kernel/cputable.c +++ b/arch/powerpc/kernel/cputable.c | |||
@@ -382,7 +382,8 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
382 | .icache_bsize = 128, | 382 | .icache_bsize = 128, |
383 | .dcache_bsize = 128, | 383 | .dcache_bsize = 128, |
384 | .machine_check = machine_check_generic, | 384 | .machine_check = machine_check_generic, |
385 | .oprofile_cpu_type = "ppc64/compat-power5+", | 385 | .oprofile_cpu_type = "ppc64/ibm-compat-v1", |
386 | .oprofile_type = PPC_OPROFILE_POWER4, | ||
386 | .platform = "power5+", | 387 | .platform = "power5+", |
387 | }, | 388 | }, |
388 | { /* Power6 */ | 389 | { /* Power6 */ |
@@ -416,7 +417,8 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
416 | .icache_bsize = 128, | 417 | .icache_bsize = 128, |
417 | .dcache_bsize = 128, | 418 | .dcache_bsize = 128, |
418 | .machine_check = machine_check_generic, | 419 | .machine_check = machine_check_generic, |
419 | .oprofile_cpu_type = "ppc64/compat-power6", | 420 | .oprofile_cpu_type = "ppc64/ibm-compat-v1", |
421 | .oprofile_type = PPC_OPROFILE_POWER4, | ||
420 | .platform = "power6", | 422 | .platform = "power6", |
421 | }, | 423 | }, |
422 | { /* 2.06-compliant processor, i.e. Power7 "architected" mode */ | 424 | { /* 2.06-compliant processor, i.e. Power7 "architected" mode */ |
@@ -429,7 +431,8 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
429 | .icache_bsize = 128, | 431 | .icache_bsize = 128, |
430 | .dcache_bsize = 128, | 432 | .dcache_bsize = 128, |
431 | .machine_check = machine_check_generic, | 433 | .machine_check = machine_check_generic, |
432 | .oprofile_cpu_type = "ppc64/compat-power7", | 434 | .oprofile_type = PPC_OPROFILE_POWER4, |
435 | .oprofile_cpu_type = "ppc64/ibm-compat-v1", | ||
433 | .platform = "power7", | 436 | .platform = "power7", |
434 | }, | 437 | }, |
435 | { /* Power7 */ | 438 | { /* Power7 */ |
@@ -1833,8 +1836,10 @@ static void __init setup_cpu_spec(unsigned long offset, struct cpu_spec *s) | |||
1833 | * and, in that case, keep the current value for | 1836 | * and, in that case, keep the current value for |
1834 | * oprofile_cpu_type. | 1837 | * oprofile_cpu_type. |
1835 | */ | 1838 | */ |
1836 | if (old.oprofile_cpu_type == NULL) | 1839 | if (old.oprofile_cpu_type != NULL) { |
1837 | t->oprofile_cpu_type = s->oprofile_cpu_type; | 1840 | t->oprofile_cpu_type = old.oprofile_cpu_type; |
1841 | t->oprofile_type = old.oprofile_type; | ||
1842 | } | ||
1838 | } | 1843 | } |
1839 | 1844 | ||
1840 | *PTRRELOC(&cur_cpu_spec) = &the_cpu_spec; | 1845 | *PTRRELOC(&cur_cpu_spec) = &the_cpu_spec; |
diff --git a/arch/powerpc/kernel/machine_kexec.c b/arch/powerpc/kernel/machine_kexec.c index d59e2b1bdcba..bb3d893a8353 100644 --- a/arch/powerpc/kernel/machine_kexec.c +++ b/arch/powerpc/kernel/machine_kexec.c | |||
@@ -125,8 +125,8 @@ void __init reserve_crashkernel(void) | |||
125 | /* Crash kernel trumps memory limit */ | 125 | /* Crash kernel trumps memory limit */ |
126 | if (memory_limit && memory_limit <= crashk_res.end) { | 126 | if (memory_limit && memory_limit <= crashk_res.end) { |
127 | memory_limit = crashk_res.end + 1; | 127 | memory_limit = crashk_res.end + 1; |
128 | printk("Adjusted memory limit for crashkernel, now 0x%lx\n", | 128 | printk("Adjusted memory limit for crashkernel, now 0x%llx\n", |
129 | memory_limit); | 129 | (unsigned long long)memory_limit); |
130 | } | 130 | } |
131 | 131 | ||
132 | printk(KERN_INFO "Reserving %ldMB of memory at %ldMB " | 132 | printk(KERN_INFO "Reserving %ldMB of memory at %ldMB " |
diff --git a/arch/powerpc/kernel/pci-common.c b/arch/powerpc/kernel/pci-common.c index 9c69e7e145c5..4fee63cb53ff 100644 --- a/arch/powerpc/kernel/pci-common.c +++ b/arch/powerpc/kernel/pci-common.c | |||
@@ -1366,12 +1366,17 @@ static void __init pcibios_allocate_resources(int pass) | |||
1366 | 1366 | ||
1367 | for_each_pci_dev(dev) { | 1367 | for_each_pci_dev(dev) { |
1368 | pci_read_config_word(dev, PCI_COMMAND, &command); | 1368 | pci_read_config_word(dev, PCI_COMMAND, &command); |
1369 | for (idx = 0; idx < 6; idx++) { | 1369 | for (idx = 0; idx <= PCI_ROM_RESOURCE; idx++) { |
1370 | r = &dev->resource[idx]; | 1370 | r = &dev->resource[idx]; |
1371 | if (r->parent) /* Already allocated */ | 1371 | if (r->parent) /* Already allocated */ |
1372 | continue; | 1372 | continue; |
1373 | if (!r->flags || (r->flags & IORESOURCE_UNSET)) | 1373 | if (!r->flags || (r->flags & IORESOURCE_UNSET)) |
1374 | continue; /* Not assigned at all */ | 1374 | continue; /* Not assigned at all */ |
1375 | /* We only allocate ROMs on pass 1 just in case they | ||
1376 | * have been screwed up by firmware | ||
1377 | */ | ||
1378 | if (idx == PCI_ROM_RESOURCE ) | ||
1379 | disabled = 1; | ||
1375 | if (r->flags & IORESOURCE_IO) | 1380 | if (r->flags & IORESOURCE_IO) |
1376 | disabled = !(command & PCI_COMMAND_IO); | 1381 | disabled = !(command & PCI_COMMAND_IO); |
1377 | else | 1382 | else |
@@ -1382,17 +1387,19 @@ static void __init pcibios_allocate_resources(int pass) | |||
1382 | if (pass) | 1387 | if (pass) |
1383 | continue; | 1388 | continue; |
1384 | r = &dev->resource[PCI_ROM_RESOURCE]; | 1389 | r = &dev->resource[PCI_ROM_RESOURCE]; |
1385 | if (r->flags & IORESOURCE_ROM_ENABLE) { | 1390 | if (r->flags) { |
1386 | /* Turn the ROM off, leave the resource region, | 1391 | /* Turn the ROM off, leave the resource region, |
1387 | * but keep it unregistered. | 1392 | * but keep it unregistered. |
1388 | */ | 1393 | */ |
1389 | u32 reg; | 1394 | u32 reg; |
1390 | pr_debug("PCI: Switching off ROM of %s\n", | ||
1391 | pci_name(dev)); | ||
1392 | r->flags &= ~IORESOURCE_ROM_ENABLE; | ||
1393 | pci_read_config_dword(dev, dev->rom_base_reg, ®); | 1395 | pci_read_config_dword(dev, dev->rom_base_reg, ®); |
1394 | pci_write_config_dword(dev, dev->rom_base_reg, | 1396 | if (reg & PCI_ROM_ADDRESS_ENABLE) { |
1395 | reg & ~PCI_ROM_ADDRESS_ENABLE); | 1397 | pr_debug("PCI: Switching off ROM of %s\n", |
1398 | pci_name(dev)); | ||
1399 | r->flags &= ~IORESOURCE_ROM_ENABLE; | ||
1400 | pci_write_config_dword(dev, dev->rom_base_reg, | ||
1401 | reg & ~PCI_ROM_ADDRESS_ENABLE); | ||
1402 | } | ||
1396 | } | 1403 | } |
1397 | } | 1404 | } |
1398 | } | 1405 | } |
diff --git a/arch/powerpc/kernel/pci_64.c b/arch/powerpc/kernel/pci_64.c index be574fc0d92f..96edb6f8babb 100644 --- a/arch/powerpc/kernel/pci_64.c +++ b/arch/powerpc/kernel/pci_64.c | |||
@@ -64,7 +64,7 @@ static u32 get_int_prop(struct device_node *np, const char *name, u32 def) | |||
64 | return def; | 64 | return def; |
65 | } | 65 | } |
66 | 66 | ||
67 | static unsigned int pci_parse_of_flags(u32 addr0) | 67 | static unsigned int pci_parse_of_flags(u32 addr0, int bridge) |
68 | { | 68 | { |
69 | unsigned int flags = 0; | 69 | unsigned int flags = 0; |
70 | 70 | ||
@@ -75,8 +75,17 @@ static unsigned int pci_parse_of_flags(u32 addr0) | |||
75 | if (addr0 & 0x40000000) | 75 | if (addr0 & 0x40000000) |
76 | flags |= IORESOURCE_PREFETCH | 76 | flags |= IORESOURCE_PREFETCH |
77 | | PCI_BASE_ADDRESS_MEM_PREFETCH; | 77 | | PCI_BASE_ADDRESS_MEM_PREFETCH; |
78 | /* Note: We don't know whether the ROM has been left enabled | ||
79 | * by the firmware or not. We mark it as disabled (ie, we do | ||
80 | * not set the IORESOURCE_ROM_ENABLE flag) for now rather than | ||
81 | * do a config space read, it will be force-enabled if needed | ||
82 | */ | ||
83 | if (!bridge && (addr0 & 0xff) == 0x30) | ||
84 | flags |= IORESOURCE_READONLY; | ||
78 | } else if (addr0 & 0x01000000) | 85 | } else if (addr0 & 0x01000000) |
79 | flags = IORESOURCE_IO | PCI_BASE_ADDRESS_SPACE_IO; | 86 | flags = IORESOURCE_IO | PCI_BASE_ADDRESS_SPACE_IO; |
87 | if (flags) | ||
88 | flags |= IORESOURCE_SIZEALIGN; | ||
80 | return flags; | 89 | return flags; |
81 | } | 90 | } |
82 | 91 | ||
@@ -95,7 +104,7 @@ static void pci_parse_of_addrs(struct device_node *node, struct pci_dev *dev) | |||
95 | return; | 104 | return; |
96 | pr_debug(" parse addresses (%d bytes) @ %p\n", proplen, addrs); | 105 | pr_debug(" parse addresses (%d bytes) @ %p\n", proplen, addrs); |
97 | for (; proplen >= 20; proplen -= 20, addrs += 5) { | 106 | for (; proplen >= 20; proplen -= 20, addrs += 5) { |
98 | flags = pci_parse_of_flags(addrs[0]); | 107 | flags = pci_parse_of_flags(addrs[0], 0); |
99 | if (!flags) | 108 | if (!flags) |
100 | continue; | 109 | continue; |
101 | base = of_read_number(&addrs[1], 2); | 110 | base = of_read_number(&addrs[1], 2); |
@@ -293,7 +302,7 @@ void __devinit of_scan_pci_bridge(struct device_node *node, | |||
293 | } | 302 | } |
294 | i = 1; | 303 | i = 1; |
295 | for (; len >= 32; len -= 32, ranges += 8) { | 304 | for (; len >= 32; len -= 32, ranges += 8) { |
296 | flags = pci_parse_of_flags(ranges[0]); | 305 | flags = pci_parse_of_flags(ranges[0], 1); |
297 | size = of_read_number(&ranges[6], 2); | 306 | size = of_read_number(&ranges[6], 2); |
298 | if (flags == 0 || size == 0) | 307 | if (flags == 0 || size == 0) |
299 | continue; | 308 | continue; |
diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c index 5ec6a9e23933..ce01ff2474da 100644 --- a/arch/powerpc/kernel/prom.c +++ b/arch/powerpc/kernel/prom.c | |||
@@ -426,7 +426,7 @@ static int __init early_parse_mem(char *p) | |||
426 | return 1; | 426 | return 1; |
427 | 427 | ||
428 | memory_limit = PAGE_ALIGN(memparse(p, &p)); | 428 | memory_limit = PAGE_ALIGN(memparse(p, &p)); |
429 | DBG("memory limit = 0x%lx\n", memory_limit); | 429 | DBG("memory limit = 0x%llx\n", (unsigned long long)memory_limit); |
430 | 430 | ||
431 | return 0; | 431 | return 0; |
432 | } | 432 | } |
@@ -1160,7 +1160,7 @@ static inline void __init phyp_dump_reserve_mem(void) {} | |||
1160 | 1160 | ||
1161 | void __init early_init_devtree(void *params) | 1161 | void __init early_init_devtree(void *params) |
1162 | { | 1162 | { |
1163 | unsigned long limit; | 1163 | phys_addr_t limit; |
1164 | 1164 | ||
1165 | DBG(" -> early_init_devtree(%p)\n", params); | 1165 | DBG(" -> early_init_devtree(%p)\n", params); |
1166 | 1166 | ||
@@ -1204,7 +1204,7 @@ void __init early_init_devtree(void *params) | |||
1204 | 1204 | ||
1205 | limit = memory_limit; | 1205 | limit = memory_limit; |
1206 | if (! limit) { | 1206 | if (! limit) { |
1207 | unsigned long memsize; | 1207 | phys_addr_t memsize; |
1208 | 1208 | ||
1209 | /* Ensure that total memory size is page-aligned, because | 1209 | /* Ensure that total memory size is page-aligned, because |
1210 | * otherwise mark_bootmem() gets upset. */ | 1210 | * otherwise mark_bootmem() gets upset. */ |
@@ -1218,7 +1218,7 @@ void __init early_init_devtree(void *params) | |||
1218 | lmb_analyze(); | 1218 | lmb_analyze(); |
1219 | lmb_dump_all(); | 1219 | lmb_dump_all(); |
1220 | 1220 | ||
1221 | DBG("Phys. mem: %lx\n", lmb_phys_mem_size()); | 1221 | DBG("Phys. mem: %llx\n", lmb_phys_mem_size()); |
1222 | 1222 | ||
1223 | /* We may need to relocate the flat tree, do it now. | 1223 | /* We may need to relocate the flat tree, do it now. |
1224 | * FIXME .. and the initrd too? */ | 1224 | * FIXME .. and the initrd too? */ |