diff options
Diffstat (limited to 'arch/powerpc/kernel')
-rw-r--r-- | arch/powerpc/kernel/cputable.c | 2 | ||||
-rw-r--r-- | arch/powerpc/kernel/dma.c | 2 | ||||
-rw-r--r-- | arch/powerpc/kernel/ftrace.c | 22 | ||||
-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 | ||||
-rw-r--r-- | arch/powerpc/kernel/vmlinux.lds.S | 1 |
8 files changed, 46 insertions, 29 deletions
diff --git a/arch/powerpc/kernel/cputable.c b/arch/powerpc/kernel/cputable.c index f9c40f869c6e..3e33fb933d99 100644 --- a/arch/powerpc/kernel/cputable.c +++ b/arch/powerpc/kernel/cputable.c | |||
@@ -1836,7 +1836,7 @@ static void __init setup_cpu_spec(unsigned long offset, struct cpu_spec *s) | |||
1836 | * and, in that case, keep the current value for | 1836 | * and, in that case, keep the current value for |
1837 | * oprofile_cpu_type. | 1837 | * oprofile_cpu_type. |
1838 | */ | 1838 | */ |
1839 | if (old.oprofile_cpu_type == NULL) { | 1839 | if (old.oprofile_cpu_type != NULL) { |
1840 | t->oprofile_cpu_type = old.oprofile_cpu_type; | 1840 | t->oprofile_cpu_type = old.oprofile_cpu_type; |
1841 | t->oprofile_type = old.oprofile_type; | 1841 | t->oprofile_type = old.oprofile_type; |
1842 | } | 1842 | } |
diff --git a/arch/powerpc/kernel/dma.c b/arch/powerpc/kernel/dma.c index 53c7788cba78..6b02793dc75b 100644 --- a/arch/powerpc/kernel/dma.c +++ b/arch/powerpc/kernel/dma.c | |||
@@ -32,7 +32,7 @@ void *dma_direct_alloc_coherent(struct device *dev, size_t size, | |||
32 | { | 32 | { |
33 | void *ret; | 33 | void *ret; |
34 | #ifdef CONFIG_NOT_COHERENT_CACHE | 34 | #ifdef CONFIG_NOT_COHERENT_CACHE |
35 | ret = __dma_alloc_coherent(size, dma_handle, flag); | 35 | ret = __dma_alloc_coherent(dev, size, dma_handle, flag); |
36 | if (ret == NULL) | 36 | if (ret == NULL) |
37 | return NULL; | 37 | return NULL; |
38 | *dma_handle += get_dma_direct_offset(dev); | 38 | *dma_handle += get_dma_direct_offset(dev); |
diff --git a/arch/powerpc/kernel/ftrace.c b/arch/powerpc/kernel/ftrace.c index 70e2a736be1f..2d182f119d1d 100644 --- a/arch/powerpc/kernel/ftrace.c +++ b/arch/powerpc/kernel/ftrace.c | |||
@@ -157,7 +157,7 @@ __ftrace_make_nop(struct module *mod, | |||
157 | * 0xe8, 0x4c, 0x00, 0x28, ld r2,40(r12) | 157 | * 0xe8, 0x4c, 0x00, 0x28, ld r2,40(r12) |
158 | */ | 158 | */ |
159 | 159 | ||
160 | pr_debug("ip:%lx jumps to %lx r2: %lx", ip, tramp, mod->arch.toc); | 160 | pr_devel("ip:%lx jumps to %lx r2: %lx", ip, tramp, mod->arch.toc); |
161 | 161 | ||
162 | /* Find where the trampoline jumps to */ | 162 | /* Find where the trampoline jumps to */ |
163 | if (probe_kernel_read(jmp, (void *)tramp, sizeof(jmp))) { | 163 | if (probe_kernel_read(jmp, (void *)tramp, sizeof(jmp))) { |
@@ -165,7 +165,7 @@ __ftrace_make_nop(struct module *mod, | |||
165 | return -EFAULT; | 165 | return -EFAULT; |
166 | } | 166 | } |
167 | 167 | ||
168 | pr_debug(" %08x %08x", jmp[0], jmp[1]); | 168 | pr_devel(" %08x %08x", jmp[0], jmp[1]); |
169 | 169 | ||
170 | /* verify that this is what we expect it to be */ | 170 | /* verify that this is what we expect it to be */ |
171 | if (((jmp[0] & 0xffff0000) != 0x3d820000) || | 171 | if (((jmp[0] & 0xffff0000) != 0x3d820000) || |
@@ -181,18 +181,18 @@ __ftrace_make_nop(struct module *mod, | |||
181 | offset = ((unsigned)((unsigned short)jmp[0]) << 16) + | 181 | offset = ((unsigned)((unsigned short)jmp[0]) << 16) + |
182 | (int)((short)jmp[1]); | 182 | (int)((short)jmp[1]); |
183 | 183 | ||
184 | pr_debug(" %x ", offset); | 184 | pr_devel(" %x ", offset); |
185 | 185 | ||
186 | /* get the address this jumps too */ | 186 | /* get the address this jumps too */ |
187 | tramp = mod->arch.toc + offset + 32; | 187 | tramp = mod->arch.toc + offset + 32; |
188 | pr_debug("toc: %lx", tramp); | 188 | pr_devel("toc: %lx", tramp); |
189 | 189 | ||
190 | if (probe_kernel_read(jmp, (void *)tramp, 8)) { | 190 | if (probe_kernel_read(jmp, (void *)tramp, 8)) { |
191 | printk(KERN_ERR "Failed to read %lx\n", tramp); | 191 | printk(KERN_ERR "Failed to read %lx\n", tramp); |
192 | return -EFAULT; | 192 | return -EFAULT; |
193 | } | 193 | } |
194 | 194 | ||
195 | pr_debug(" %08x %08x\n", jmp[0], jmp[1]); | 195 | pr_devel(" %08x %08x\n", jmp[0], jmp[1]); |
196 | 196 | ||
197 | ptr = ((unsigned long)jmp[0] << 32) + jmp[1]; | 197 | ptr = ((unsigned long)jmp[0] << 32) + jmp[1]; |
198 | 198 | ||
@@ -269,7 +269,7 @@ __ftrace_make_nop(struct module *mod, | |||
269 | * 0x4e, 0x80, 0x04, 0x20 bctr | 269 | * 0x4e, 0x80, 0x04, 0x20 bctr |
270 | */ | 270 | */ |
271 | 271 | ||
272 | pr_debug("ip:%lx jumps to %lx", ip, tramp); | 272 | pr_devel("ip:%lx jumps to %lx", ip, tramp); |
273 | 273 | ||
274 | /* Find where the trampoline jumps to */ | 274 | /* Find where the trampoline jumps to */ |
275 | if (probe_kernel_read(jmp, (void *)tramp, sizeof(jmp))) { | 275 | if (probe_kernel_read(jmp, (void *)tramp, sizeof(jmp))) { |
@@ -277,7 +277,7 @@ __ftrace_make_nop(struct module *mod, | |||
277 | return -EFAULT; | 277 | return -EFAULT; |
278 | } | 278 | } |
279 | 279 | ||
280 | pr_debug(" %08x %08x ", jmp[0], jmp[1]); | 280 | pr_devel(" %08x %08x ", jmp[0], jmp[1]); |
281 | 281 | ||
282 | /* verify that this is what we expect it to be */ | 282 | /* verify that this is what we expect it to be */ |
283 | if (((jmp[0] & 0xffff0000) != 0x3d600000) || | 283 | if (((jmp[0] & 0xffff0000) != 0x3d600000) || |
@@ -293,7 +293,7 @@ __ftrace_make_nop(struct module *mod, | |||
293 | if (tramp & 0x8000) | 293 | if (tramp & 0x8000) |
294 | tramp -= 0x10000; | 294 | tramp -= 0x10000; |
295 | 295 | ||
296 | pr_debug(" %lx ", tramp); | 296 | pr_devel(" %lx ", tramp); |
297 | 297 | ||
298 | if (tramp != addr) { | 298 | if (tramp != addr) { |
299 | printk(KERN_ERR | 299 | printk(KERN_ERR |
@@ -402,7 +402,7 @@ __ftrace_make_call(struct dyn_ftrace *rec, unsigned long addr) | |||
402 | /* ld r2,40(r1) */ | 402 | /* ld r2,40(r1) */ |
403 | op[1] = 0xe8410028; | 403 | op[1] = 0xe8410028; |
404 | 404 | ||
405 | pr_debug("write to %lx\n", rec->ip); | 405 | pr_devel("write to %lx\n", rec->ip); |
406 | 406 | ||
407 | if (probe_kernel_write((void *)ip, op, MCOUNT_INSN_SIZE * 2)) | 407 | if (probe_kernel_write((void *)ip, op, MCOUNT_INSN_SIZE * 2)) |
408 | return -EPERM; | 408 | return -EPERM; |
@@ -442,7 +442,7 @@ __ftrace_make_call(struct dyn_ftrace *rec, unsigned long addr) | |||
442 | return -EINVAL; | 442 | return -EINVAL; |
443 | } | 443 | } |
444 | 444 | ||
445 | pr_debug("write to %lx\n", rec->ip); | 445 | pr_devel("write to %lx\n", rec->ip); |
446 | 446 | ||
447 | if (probe_kernel_write((void *)ip, &op, MCOUNT_INSN_SIZE)) | 447 | if (probe_kernel_write((void *)ip, &op, MCOUNT_INSN_SIZE)) |
448 | return -EPERM; | 448 | return -EPERM; |
@@ -594,7 +594,7 @@ void prepare_ftrace_return(unsigned long *parent, unsigned long self_addr) | |||
594 | PPC_LONG "2b,4b\n" | 594 | PPC_LONG "2b,4b\n" |
595 | ".previous" | 595 | ".previous" |
596 | 596 | ||
597 | : [old] "=r" (old), [faulted] "=r" (faulted) | 597 | : [old] "=&r" (old), [faulted] "=r" (faulted) |
598 | : [parent] "r" (parent), [return_hooker] "r" (return_hooker) | 598 | : [parent] "r" (parent), [return_hooker] "r" (return_hooker) |
599 | : "memory" | 599 | : "memory" |
600 | ); | 600 | ); |
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? */ |
diff --git a/arch/powerpc/kernel/vmlinux.lds.S b/arch/powerpc/kernel/vmlinux.lds.S index a047a6cfca4d..8ef8a14abc95 100644 --- a/arch/powerpc/kernel/vmlinux.lds.S +++ b/arch/powerpc/kernel/vmlinux.lds.S | |||
@@ -264,6 +264,7 @@ SECTIONS | |||
264 | *(.data.page_aligned) | 264 | *(.data.page_aligned) |
265 | } | 265 | } |
266 | 266 | ||
267 | . = ALIGN(L1_CACHE_BYTES); | ||
267 | .data.cacheline_aligned : AT(ADDR(.data.cacheline_aligned) - LOAD_OFFSET) { | 268 | .data.cacheline_aligned : AT(ADDR(.data.cacheline_aligned) - LOAD_OFFSET) { |
268 | *(.data.cacheline_aligned) | 269 | *(.data.cacheline_aligned) |
269 | } | 270 | } |