diff options
author | Russell King <rmk+kernel@arm.linux.org.uk> | 2012-05-21 10:15:24 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2012-05-21 10:15:24 -0400 |
commit | 4175160b065e74572819a320dcd34129224a4e1c (patch) | |
tree | 3298e2c9a7c7db33bf28617875e5429e17eec61c | |
parent | ddf90a2ff2c4a9da99acc898a4afeab3e4251fcd (diff) | |
parent | 0ec8e7aa8f63f0cacd545fcd7f40f93fde2c0e6e (diff) |
Merge branch 'misc' into for-linus
Conflicts:
arch/arm/kernel/ptrace.c
37 files changed, 269 insertions, 174 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index ed244933b25..ea2b43c52a5 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
@@ -11,6 +11,7 @@ config ARM | |||
11 | select HAVE_OPROFILE if (HAVE_PERF_EVENTS) | 11 | select HAVE_OPROFILE if (HAVE_PERF_EVENTS) |
12 | select HAVE_ARCH_JUMP_LABEL if !XIP_KERNEL | 12 | select HAVE_ARCH_JUMP_LABEL if !XIP_KERNEL |
13 | select HAVE_ARCH_KGDB | 13 | select HAVE_ARCH_KGDB |
14 | select HAVE_ARCH_TRACEHOOK | ||
14 | select HAVE_KPROBES if !XIP_KERNEL | 15 | select HAVE_KPROBES if !XIP_KERNEL |
15 | select HAVE_KRETPROBES if (HAVE_KPROBES) | 16 | select HAVE_KRETPROBES if (HAVE_KPROBES) |
16 | select HAVE_FUNCTION_TRACER if (!XIP_KERNEL) | 17 | select HAVE_FUNCTION_TRACER if (!XIP_KERNEL) |
@@ -30,6 +31,8 @@ config ARM | |||
30 | select HAVE_HW_BREAKPOINT if (PERF_EVENTS && (CPU_V6 || CPU_V6K || CPU_V7)) | 31 | select HAVE_HW_BREAKPOINT if (PERF_EVENTS && (CPU_V6 || CPU_V6K || CPU_V7)) |
31 | select HAVE_C_RECORDMCOUNT | 32 | select HAVE_C_RECORDMCOUNT |
32 | select HAVE_GENERIC_HARDIRQS | 33 | select HAVE_GENERIC_HARDIRQS |
34 | select HARDIRQS_SW_RESEND | ||
35 | select GENERIC_IRQ_PROBE | ||
33 | select GENERIC_IRQ_SHOW | 36 | select GENERIC_IRQ_SHOW |
34 | select CPU_PM if (SUSPEND || CPU_IDLE) | 37 | select CPU_PM if (SUSPEND || CPU_IDLE) |
35 | select GENERIC_PCI_IOMAP | 38 | select GENERIC_PCI_IOMAP |
@@ -126,14 +129,6 @@ config TRACE_IRQFLAGS_SUPPORT | |||
126 | bool | 129 | bool |
127 | default y | 130 | default y |
128 | 131 | ||
129 | config HARDIRQS_SW_RESEND | ||
130 | bool | ||
131 | default y | ||
132 | |||
133 | config GENERIC_IRQ_PROBE | ||
134 | bool | ||
135 | default y | ||
136 | |||
137 | config GENERIC_LOCKBREAK | 132 | config GENERIC_LOCKBREAK |
138 | bool | 133 | bool |
139 | default y | 134 | default y |
@@ -633,7 +628,6 @@ config ARCH_MMP | |||
633 | select CLKDEV_LOOKUP | 628 | select CLKDEV_LOOKUP |
634 | select GENERIC_CLOCKEVENTS | 629 | select GENERIC_CLOCKEVENTS |
635 | select GPIO_PXA | 630 | select GPIO_PXA |
636 | select TICK_ONESHOT | ||
637 | select PLAT_PXA | 631 | select PLAT_PXA |
638 | select SPARSE_IRQ | 632 | select SPARSE_IRQ |
639 | select GENERIC_ALLOCATOR | 633 | select GENERIC_ALLOCATOR |
@@ -717,7 +711,6 @@ config ARCH_PXA | |||
717 | select ARCH_REQUIRE_GPIOLIB | 711 | select ARCH_REQUIRE_GPIOLIB |
718 | select GENERIC_CLOCKEVENTS | 712 | select GENERIC_CLOCKEVENTS |
719 | select GPIO_PXA | 713 | select GPIO_PXA |
720 | select TICK_ONESHOT | ||
721 | select PLAT_PXA | 714 | select PLAT_PXA |
722 | select SPARSE_IRQ | 715 | select SPARSE_IRQ |
723 | select AUTO_ZRELADDR | 716 | select AUTO_ZRELADDR |
@@ -784,7 +777,6 @@ config ARCH_SA1100 | |||
784 | select CPU_FREQ | 777 | select CPU_FREQ |
785 | select GENERIC_CLOCKEVENTS | 778 | select GENERIC_CLOCKEVENTS |
786 | select CLKDEV_LOOKUP | 779 | select CLKDEV_LOOKUP |
787 | select TICK_ONESHOT | ||
788 | select ARCH_REQUIRE_GPIOLIB | 780 | select ARCH_REQUIRE_GPIOLIB |
789 | select HAVE_IDE | 781 | select HAVE_IDE |
790 | select NEED_MACH_MEMORY_H | 782 | select NEED_MACH_MEMORY_H |
@@ -1562,7 +1554,6 @@ config ARM_ARCH_TIMER | |||
1562 | config HAVE_ARM_TWD | 1554 | config HAVE_ARM_TWD |
1563 | bool | 1555 | bool |
1564 | depends on SMP | 1556 | depends on SMP |
1565 | select TICK_ONESHOT | ||
1566 | help | 1557 | help |
1567 | This options enables support for the ARM timer and watchdog unit | 1558 | This options enables support for the ARM timer and watchdog unit |
1568 | 1559 | ||
diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S index dc7e8ce8e6b..5ad33a4df67 100644 --- a/arch/arm/boot/compressed/head.S +++ b/arch/arm/boot/compressed/head.S | |||
@@ -567,6 +567,12 @@ __armv3_mpu_cache_on: | |||
567 | mcr p15, 0, r0, c7, c0, 0 @ invalidate whole cache v3 | 567 | mcr p15, 0, r0, c7, c0, 0 @ invalidate whole cache v3 |
568 | mov pc, lr | 568 | mov pc, lr |
569 | 569 | ||
570 | #ifdef CONFIG_CPU_DCACHE_WRITETHROUGH | ||
571 | #define CB_BITS 0x08 | ||
572 | #else | ||
573 | #define CB_BITS 0x0c | ||
574 | #endif | ||
575 | |||
570 | __setup_mmu: sub r3, r4, #16384 @ Page directory size | 576 | __setup_mmu: sub r3, r4, #16384 @ Page directory size |
571 | bic r3, r3, #0xff @ Align the pointer | 577 | bic r3, r3, #0xff @ Align the pointer |
572 | bic r3, r3, #0x3f00 | 578 | bic r3, r3, #0x3f00 |
@@ -578,17 +584,14 @@ __setup_mmu: sub r3, r4, #16384 @ Page directory size | |||
578 | mov r9, r0, lsr #18 | 584 | mov r9, r0, lsr #18 |
579 | mov r9, r9, lsl #18 @ start of RAM | 585 | mov r9, r9, lsl #18 @ start of RAM |
580 | add r10, r9, #0x10000000 @ a reasonable RAM size | 586 | add r10, r9, #0x10000000 @ a reasonable RAM size |
581 | mov r1, #0x12 | 587 | mov r1, #0x12 @ XN|U + section mapping |
582 | orr r1, r1, #3 << 10 | 588 | orr r1, r1, #3 << 10 @ AP=11 |
583 | add r2, r3, #16384 | 589 | add r2, r3, #16384 |
584 | 1: cmp r1, r9 @ if virt > start of RAM | 590 | 1: cmp r1, r9 @ if virt > start of RAM |
585 | #ifdef CONFIG_CPU_DCACHE_WRITETHROUGH | 591 | cmphs r10, r1 @ && end of RAM > virt |
586 | orrhs r1, r1, #0x08 @ set cacheable | 592 | bic r1, r1, #0x1c @ clear XN|U + C + B |
587 | #else | 593 | orrlo r1, r1, #0x10 @ Set XN|U for non-RAM |
588 | orrhs r1, r1, #0x0c @ set cacheable, bufferable | 594 | orrhs r1, r1, r6 @ set RAM section settings |
589 | #endif | ||
590 | cmp r1, r10 @ if virt > end of RAM | ||
591 | bichs r1, r1, #0x0c @ clear cacheable, bufferable | ||
592 | str r1, [r0], #4 @ 1:1 mapping | 595 | str r1, [r0], #4 @ 1:1 mapping |
593 | add r1, r1, #1048576 | 596 | add r1, r1, #1048576 |
594 | teq r0, r2 | 597 | teq r0, r2 |
@@ -599,7 +602,7 @@ __setup_mmu: sub r3, r4, #16384 @ Page directory size | |||
599 | * so there is no map overlap problem for up to 1 MB compressed kernel. | 602 | * so there is no map overlap problem for up to 1 MB compressed kernel. |
600 | * If the execution is in RAM then we would only be duplicating the above. | 603 | * If the execution is in RAM then we would only be duplicating the above. |
601 | */ | 604 | */ |
602 | mov r1, #0x1e | 605 | orr r1, r6, #0x04 @ ensure B is set for this |
603 | orr r1, r1, #3 << 10 | 606 | orr r1, r1, #3 << 10 |
604 | mov r2, pc | 607 | mov r2, pc |
605 | mov r2, r2, lsr #20 | 608 | mov r2, r2, lsr #20 |
@@ -620,6 +623,7 @@ __arm926ejs_mmu_cache_on: | |||
620 | __armv4_mmu_cache_on: | 623 | __armv4_mmu_cache_on: |
621 | mov r12, lr | 624 | mov r12, lr |
622 | #ifdef CONFIG_MMU | 625 | #ifdef CONFIG_MMU |
626 | mov r6, #CB_BITS | 0x12 @ U | ||
623 | bl __setup_mmu | 627 | bl __setup_mmu |
624 | mov r0, #0 | 628 | mov r0, #0 |
625 | mcr p15, 0, r0, c7, c10, 4 @ drain write buffer | 629 | mcr p15, 0, r0, c7, c10, 4 @ drain write buffer |
@@ -641,6 +645,7 @@ __armv7_mmu_cache_on: | |||
641 | #ifdef CONFIG_MMU | 645 | #ifdef CONFIG_MMU |
642 | mrc p15, 0, r11, c0, c1, 4 @ read ID_MMFR0 | 646 | mrc p15, 0, r11, c0, c1, 4 @ read ID_MMFR0 |
643 | tst r11, #0xf @ VMSA | 647 | tst r11, #0xf @ VMSA |
648 | movne r6, #CB_BITS | 0x02 @ !XN | ||
644 | blne __setup_mmu | 649 | blne __setup_mmu |
645 | mov r0, #0 | 650 | mov r0, #0 |
646 | mcr p15, 0, r0, c7, c10, 4 @ drain write buffer | 651 | mcr p15, 0, r0, c7, c10, 4 @ drain write buffer |
@@ -655,7 +660,7 @@ __armv7_mmu_cache_on: | |||
655 | orr r0, r0, #1 << 25 @ big-endian page tables | 660 | orr r0, r0, #1 << 25 @ big-endian page tables |
656 | #endif | 661 | #endif |
657 | orrne r0, r0, #1 @ MMU enabled | 662 | orrne r0, r0, #1 @ MMU enabled |
658 | movne r1, #-1 | 663 | movne r1, #0xfffffffd @ domain 0 = client |
659 | mcrne p15, 0, r3, c2, c0, 0 @ load page table pointer | 664 | mcrne p15, 0, r3, c2, c0, 0 @ load page table pointer |
660 | mcrne p15, 0, r1, c3, c0, 0 @ load domain access control | 665 | mcrne p15, 0, r1, c3, c0, 0 @ load domain access control |
661 | #endif | 666 | #endif |
@@ -668,6 +673,7 @@ __armv7_mmu_cache_on: | |||
668 | 673 | ||
669 | __fa526_cache_on: | 674 | __fa526_cache_on: |
670 | mov r12, lr | 675 | mov r12, lr |
676 | mov r6, #CB_BITS | 0x12 @ U | ||
671 | bl __setup_mmu | 677 | bl __setup_mmu |
672 | mov r0, #0 | 678 | mov r0, #0 |
673 | mcr p15, 0, r0, c7, c7, 0 @ Invalidate whole cache | 679 | mcr p15, 0, r0, c7, c7, 0 @ Invalidate whole cache |
@@ -682,6 +688,7 @@ __fa526_cache_on: | |||
682 | 688 | ||
683 | __arm6_mmu_cache_on: | 689 | __arm6_mmu_cache_on: |
684 | mov r12, lr | 690 | mov r12, lr |
691 | mov r6, #CB_BITS | 0x12 @ U | ||
685 | bl __setup_mmu | 692 | bl __setup_mmu |
686 | mov r0, #0 | 693 | mov r0, #0 |
687 | mcr p15, 0, r0, c7, c0, 0 @ invalidate whole cache v3 | 694 | mcr p15, 0, r0, c7, c0, 0 @ invalidate whole cache v3 |
diff --git a/arch/arm/common/vic.c b/arch/arm/common/vic.c index 7e288f96ced..e0d538803cc 100644 --- a/arch/arm/common/vic.c +++ b/arch/arm/common/vic.c | |||
@@ -39,6 +39,7 @@ | |||
39 | * struct vic_device - VIC PM device | 39 | * struct vic_device - VIC PM device |
40 | * @irq: The IRQ number for the base of the VIC. | 40 | * @irq: The IRQ number for the base of the VIC. |
41 | * @base: The register base for the VIC. | 41 | * @base: The register base for the VIC. |
42 | * @valid_sources: A bitmask of valid interrupts | ||
42 | * @resume_sources: A bitmask of interrupts for resume. | 43 | * @resume_sources: A bitmask of interrupts for resume. |
43 | * @resume_irqs: The IRQs enabled for resume. | 44 | * @resume_irqs: The IRQs enabled for resume. |
44 | * @int_select: Save for VIC_INT_SELECT. | 45 | * @int_select: Save for VIC_INT_SELECT. |
@@ -50,6 +51,7 @@ | |||
50 | struct vic_device { | 51 | struct vic_device { |
51 | void __iomem *base; | 52 | void __iomem *base; |
52 | int irq; | 53 | int irq; |
54 | u32 valid_sources; | ||
53 | u32 resume_sources; | 55 | u32 resume_sources; |
54 | u32 resume_irqs; | 56 | u32 resume_irqs; |
55 | u32 int_select; | 57 | u32 int_select; |
@@ -164,10 +166,32 @@ static int __init vic_pm_init(void) | |||
164 | late_initcall(vic_pm_init); | 166 | late_initcall(vic_pm_init); |
165 | #endif /* CONFIG_PM */ | 167 | #endif /* CONFIG_PM */ |
166 | 168 | ||
169 | static struct irq_chip vic_chip; | ||
170 | |||
171 | static int vic_irqdomain_map(struct irq_domain *d, unsigned int irq, | ||
172 | irq_hw_number_t hwirq) | ||
173 | { | ||
174 | struct vic_device *v = d->host_data; | ||
175 | |||
176 | /* Skip invalid IRQs, only register handlers for the real ones */ | ||
177 | if (!(v->valid_sources & (1 << hwirq))) | ||
178 | return -ENOTSUPP; | ||
179 | irq_set_chip_and_handler(irq, &vic_chip, handle_level_irq); | ||
180 | irq_set_chip_data(irq, v->base); | ||
181 | set_irq_flags(irq, IRQF_VALID | IRQF_PROBE); | ||
182 | return 0; | ||
183 | } | ||
184 | |||
185 | static struct irq_domain_ops vic_irqdomain_ops = { | ||
186 | .map = vic_irqdomain_map, | ||
187 | .xlate = irq_domain_xlate_onetwocell, | ||
188 | }; | ||
189 | |||
167 | /** | 190 | /** |
168 | * vic_register() - Register a VIC. | 191 | * vic_register() - Register a VIC. |
169 | * @base: The base address of the VIC. | 192 | * @base: The base address of the VIC. |
170 | * @irq: The base IRQ for the VIC. | 193 | * @irq: The base IRQ for the VIC. |
194 | * @valid_sources: bitmask of valid interrupts | ||
171 | * @resume_sources: bitmask of interrupts allowed for resume sources. | 195 | * @resume_sources: bitmask of interrupts allowed for resume sources. |
172 | * @node: The device tree node associated with the VIC. | 196 | * @node: The device tree node associated with the VIC. |
173 | * | 197 | * |
@@ -178,7 +202,8 @@ late_initcall(vic_pm_init); | |||
178 | * This also configures the IRQ domain for the VIC. | 202 | * This also configures the IRQ domain for the VIC. |
179 | */ | 203 | */ |
180 | static void __init vic_register(void __iomem *base, unsigned int irq, | 204 | static void __init vic_register(void __iomem *base, unsigned int irq, |
181 | u32 resume_sources, struct device_node *node) | 205 | u32 valid_sources, u32 resume_sources, |
206 | struct device_node *node) | ||
182 | { | 207 | { |
183 | struct vic_device *v; | 208 | struct vic_device *v; |
184 | 209 | ||
@@ -189,11 +214,12 @@ static void __init vic_register(void __iomem *base, unsigned int irq, | |||
189 | 214 | ||
190 | v = &vic_devices[vic_id]; | 215 | v = &vic_devices[vic_id]; |
191 | v->base = base; | 216 | v->base = base; |
217 | v->valid_sources = valid_sources; | ||
192 | v->resume_sources = resume_sources; | 218 | v->resume_sources = resume_sources; |
193 | v->irq = irq; | 219 | v->irq = irq; |
194 | vic_id++; | 220 | vic_id++; |
195 | v->domain = irq_domain_add_legacy(node, 32, irq, 0, | 221 | v->domain = irq_domain_add_legacy(node, fls(valid_sources), irq, 0, |
196 | &irq_domain_simple_ops, v); | 222 | &vic_irqdomain_ops, v); |
197 | } | 223 | } |
198 | 224 | ||
199 | static void vic_ack_irq(struct irq_data *d) | 225 | static void vic_ack_irq(struct irq_data *d) |
@@ -287,23 +313,6 @@ static void __init vic_clear_interrupts(void __iomem *base) | |||
287 | } | 313 | } |
288 | } | 314 | } |
289 | 315 | ||
290 | static void __init vic_set_irq_sources(void __iomem *base, | ||
291 | unsigned int irq_start, u32 vic_sources) | ||
292 | { | ||
293 | unsigned int i; | ||
294 | |||
295 | for (i = 0; i < 32; i++) { | ||
296 | if (vic_sources & (1 << i)) { | ||
297 | unsigned int irq = irq_start + i; | ||
298 | |||
299 | irq_set_chip_and_handler(irq, &vic_chip, | ||
300 | handle_level_irq); | ||
301 | irq_set_chip_data(irq, base); | ||
302 | set_irq_flags(irq, IRQF_VALID | IRQF_PROBE); | ||
303 | } | ||
304 | } | ||
305 | } | ||
306 | |||
307 | /* | 316 | /* |
308 | * The PL190 cell from ARM has been modified by ST to handle 64 interrupts. | 317 | * The PL190 cell from ARM has been modified by ST to handle 64 interrupts. |
309 | * The original cell has 32 interrupts, while the modified one has 64, | 318 | * The original cell has 32 interrupts, while the modified one has 64, |
@@ -338,8 +347,7 @@ static void __init vic_init_st(void __iomem *base, unsigned int irq_start, | |||
338 | writel(32, base + VIC_PL190_DEF_VECT_ADDR); | 347 | writel(32, base + VIC_PL190_DEF_VECT_ADDR); |
339 | } | 348 | } |
340 | 349 | ||
341 | vic_set_irq_sources(base, irq_start, vic_sources); | 350 | vic_register(base, irq_start, vic_sources, 0, node); |
342 | vic_register(base, irq_start, 0, node); | ||
343 | } | 351 | } |
344 | 352 | ||
345 | void __init __vic_init(void __iomem *base, unsigned int irq_start, | 353 | void __init __vic_init(void __iomem *base, unsigned int irq_start, |
@@ -379,9 +387,7 @@ void __init __vic_init(void __iomem *base, unsigned int irq_start, | |||
379 | 387 | ||
380 | vic_init2(base); | 388 | vic_init2(base); |
381 | 389 | ||
382 | vic_set_irq_sources(base, irq_start, vic_sources); | 390 | vic_register(base, irq_start, vic_sources, resume_sources, node); |
383 | |||
384 | vic_register(base, irq_start, resume_sources, node); | ||
385 | } | 391 | } |
386 | 392 | ||
387 | /** | 393 | /** |
diff --git a/arch/arm/include/asm/cacheflush.h b/arch/arm/include/asm/cacheflush.h index d5d8d5c7268..004c1bc95d2 100644 --- a/arch/arm/include/asm/cacheflush.h +++ b/arch/arm/include/asm/cacheflush.h | |||
@@ -101,7 +101,7 @@ struct cpu_cache_fns { | |||
101 | void (*flush_user_range)(unsigned long, unsigned long, unsigned int); | 101 | void (*flush_user_range)(unsigned long, unsigned long, unsigned int); |
102 | 102 | ||
103 | void (*coherent_kern_range)(unsigned long, unsigned long); | 103 | void (*coherent_kern_range)(unsigned long, unsigned long); |
104 | void (*coherent_user_range)(unsigned long, unsigned long); | 104 | int (*coherent_user_range)(unsigned long, unsigned long); |
105 | void (*flush_kern_dcache_area)(void *, size_t); | 105 | void (*flush_kern_dcache_area)(void *, size_t); |
106 | 106 | ||
107 | void (*dma_map_area)(const void *, size_t, int); | 107 | void (*dma_map_area)(const void *, size_t, int); |
@@ -142,7 +142,7 @@ extern void __cpuc_flush_kern_all(void); | |||
142 | extern void __cpuc_flush_user_all(void); | 142 | extern void __cpuc_flush_user_all(void); |
143 | extern void __cpuc_flush_user_range(unsigned long, unsigned long, unsigned int); | 143 | extern void __cpuc_flush_user_range(unsigned long, unsigned long, unsigned int); |
144 | extern void __cpuc_coherent_kern_range(unsigned long, unsigned long); | 144 | extern void __cpuc_coherent_kern_range(unsigned long, unsigned long); |
145 | extern void __cpuc_coherent_user_range(unsigned long, unsigned long); | 145 | extern int __cpuc_coherent_user_range(unsigned long, unsigned long); |
146 | extern void __cpuc_flush_dcache_area(void *, size_t); | 146 | extern void __cpuc_flush_dcache_area(void *, size_t); |
147 | 147 | ||
148 | /* | 148 | /* |
@@ -249,7 +249,7 @@ extern void flush_cache_page(struct vm_area_struct *vma, unsigned long user_addr | |||
249 | * Harvard caches are synchronised for the user space address range. | 249 | * Harvard caches are synchronised for the user space address range. |
250 | * This is used for the ARM private sys_cacheflush system call. | 250 | * This is used for the ARM private sys_cacheflush system call. |
251 | */ | 251 | */ |
252 | #define flush_cache_user_range(vma,start,end) \ | 252 | #define flush_cache_user_range(start,end) \ |
253 | __cpuc_coherent_user_range((start) & PAGE_MASK, PAGE_ALIGN(end)) | 253 | __cpuc_coherent_user_range((start) & PAGE_MASK, PAGE_ALIGN(end)) |
254 | 254 | ||
255 | /* | 255 | /* |
diff --git a/arch/arm/include/asm/cmpxchg.h b/arch/arm/include/asm/cmpxchg.h index d41d7cbf0ad..7eb18c1d8d6 100644 --- a/arch/arm/include/asm/cmpxchg.h +++ b/arch/arm/include/asm/cmpxchg.h | |||
@@ -229,66 +229,19 @@ static inline unsigned long __cmpxchg_local(volatile void *ptr, | |||
229 | (unsigned long)(n), \ | 229 | (unsigned long)(n), \ |
230 | sizeof(*(ptr)))) | 230 | sizeof(*(ptr)))) |
231 | 231 | ||
232 | #ifndef CONFIG_CPU_V6 /* min ARCH >= ARMv6K */ | 232 | #define cmpxchg64(ptr, o, n) \ |
233 | 233 | ((__typeof__(*(ptr)))atomic64_cmpxchg(container_of((ptr), \ | |
234 | /* | 234 | atomic64_t, \ |
235 | * Note : ARMv7-M (currently unsupported by Linux) does not support | 235 | counter), \ |
236 | * ldrexd/strexd. If ARMv7-M is ever supported by the Linux kernel, it should | 236 | (unsigned long)(o), \ |
237 | * not be allowed to use __cmpxchg64. | 237 | (unsigned long)(n))) |
238 | */ | 238 | |
239 | static inline unsigned long long __cmpxchg64(volatile void *ptr, | 239 | #define cmpxchg64_local(ptr, o, n) \ |
240 | unsigned long long old, | 240 | ((__typeof__(*(ptr)))local64_cmpxchg(container_of((ptr), \ |
241 | unsigned long long new) | 241 | local64_t, \ |
242 | { | 242 | a), \ |
243 | register unsigned long long oldval asm("r0"); | 243 | (unsigned long)(o), \ |
244 | register unsigned long long __old asm("r2") = old; | 244 | (unsigned long)(n))) |
245 | register unsigned long long __new asm("r4") = new; | ||
246 | unsigned long res; | ||
247 | |||
248 | do { | ||
249 | asm volatile( | ||
250 | " @ __cmpxchg8\n" | ||
251 | " ldrexd %1, %H1, [%2]\n" | ||
252 | " mov %0, #0\n" | ||
253 | " teq %1, %3\n" | ||
254 | " teqeq %H1, %H3\n" | ||
255 | " strexdeq %0, %4, %H4, [%2]\n" | ||
256 | : "=&r" (res), "=&r" (oldval) | ||
257 | : "r" (ptr), "Ir" (__old), "r" (__new) | ||
258 | : "memory", "cc"); | ||
259 | } while (res); | ||
260 | |||
261 | return oldval; | ||
262 | } | ||
263 | |||
264 | static inline unsigned long long __cmpxchg64_mb(volatile void *ptr, | ||
265 | unsigned long long old, | ||
266 | unsigned long long new) | ||
267 | { | ||
268 | unsigned long long ret; | ||
269 | |||
270 | smp_mb(); | ||
271 | ret = __cmpxchg64(ptr, old, new); | ||
272 | smp_mb(); | ||
273 | |||
274 | return ret; | ||
275 | } | ||
276 | |||
277 | #define cmpxchg64(ptr,o,n) \ | ||
278 | ((__typeof__(*(ptr)))__cmpxchg64_mb((ptr), \ | ||
279 | (unsigned long long)(o), \ | ||
280 | (unsigned long long)(n))) | ||
281 | |||
282 | #define cmpxchg64_local(ptr,o,n) \ | ||
283 | ((__typeof__(*(ptr)))__cmpxchg64((ptr), \ | ||
284 | (unsigned long long)(o), \ | ||
285 | (unsigned long long)(n))) | ||
286 | |||
287 | #else /* min ARCH = ARMv6 */ | ||
288 | |||
289 | #define cmpxchg64_local(ptr, o, n) __cmpxchg64_local_generic((ptr), (o), (n)) | ||
290 | |||
291 | #endif | ||
292 | 245 | ||
293 | #endif /* __LINUX_ARM_ARCH__ >= 6 */ | 246 | #endif /* __LINUX_ARM_ARCH__ >= 6 */ |
294 | 247 | ||
diff --git a/arch/arm/include/asm/mach/time.h b/arch/arm/include/asm/mach/time.h index f73c908b7fa..6ca945f534a 100644 --- a/arch/arm/include/asm/mach/time.h +++ b/arch/arm/include/asm/mach/time.h | |||
@@ -42,4 +42,9 @@ struct sys_timer { | |||
42 | 42 | ||
43 | extern void timer_tick(void); | 43 | extern void timer_tick(void); |
44 | 44 | ||
45 | struct timespec; | ||
46 | typedef void (*clock_access_fn)(struct timespec *); | ||
47 | extern int register_persistent_clock(clock_access_fn read_boot, | ||
48 | clock_access_fn read_persistent); | ||
49 | |||
45 | #endif | 50 | #endif |
diff --git a/arch/arm/include/asm/pgtable-3level.h b/arch/arm/include/asm/pgtable-3level.h index 759af70f9a0..b24903549d1 100644 --- a/arch/arm/include/asm/pgtable-3level.h +++ b/arch/arm/include/asm/pgtable-3level.h | |||
@@ -69,8 +69,6 @@ | |||
69 | */ | 69 | */ |
70 | #define L_PTE_PRESENT (_AT(pteval_t, 3) << 0) /* Valid */ | 70 | #define L_PTE_PRESENT (_AT(pteval_t, 3) << 0) /* Valid */ |
71 | #define L_PTE_FILE (_AT(pteval_t, 1) << 2) /* only when !PRESENT */ | 71 | #define L_PTE_FILE (_AT(pteval_t, 1) << 2) /* only when !PRESENT */ |
72 | #define L_PTE_BUFFERABLE (_AT(pteval_t, 1) << 2) /* AttrIndx[0] */ | ||
73 | #define L_PTE_CACHEABLE (_AT(pteval_t, 1) << 3) /* AttrIndx[1] */ | ||
74 | #define L_PTE_USER (_AT(pteval_t, 1) << 6) /* AP[1] */ | 72 | #define L_PTE_USER (_AT(pteval_t, 1) << 6) /* AP[1] */ |
75 | #define L_PTE_RDONLY (_AT(pteval_t, 1) << 7) /* AP[2] */ | 73 | #define L_PTE_RDONLY (_AT(pteval_t, 1) << 7) /* AP[2] */ |
76 | #define L_PTE_SHARED (_AT(pteval_t, 3) << 8) /* SH[1:0], inner shareable */ | 74 | #define L_PTE_SHARED (_AT(pteval_t, 3) << 8) /* SH[1:0], inner shareable */ |
diff --git a/arch/arm/include/asm/ptrace.h b/arch/arm/include/asm/ptrace.h index 451808ba121..355ece523f4 100644 --- a/arch/arm/include/asm/ptrace.h +++ b/arch/arm/include/asm/ptrace.h | |||
@@ -249,6 +249,11 @@ static inline unsigned long kernel_stack_pointer(struct pt_regs *regs) | |||
249 | return regs->ARM_sp; | 249 | return regs->ARM_sp; |
250 | } | 250 | } |
251 | 251 | ||
252 | static inline unsigned long user_stack_pointer(struct pt_regs *regs) | ||
253 | { | ||
254 | return regs->ARM_sp; | ||
255 | } | ||
256 | |||
252 | #endif /* __KERNEL__ */ | 257 | #endif /* __KERNEL__ */ |
253 | 258 | ||
254 | #endif /* __ASSEMBLY__ */ | 259 | #endif /* __ASSEMBLY__ */ |
diff --git a/arch/arm/include/asm/syscall.h b/arch/arm/include/asm/syscall.h new file mode 100644 index 00000000000..c334a23ddf7 --- /dev/null +++ b/arch/arm/include/asm/syscall.h | |||
@@ -0,0 +1,93 @@ | |||
1 | /* | ||
2 | * Access to user system call parameters and results | ||
3 | * | ||
4 | * See asm-generic/syscall.h for descriptions of what we must do here. | ||
5 | */ | ||
6 | |||
7 | #ifndef _ASM_ARM_SYSCALL_H | ||
8 | #define _ASM_ARM_SYSCALL_H | ||
9 | |||
10 | #include <linux/err.h> | ||
11 | |||
12 | extern const unsigned long sys_call_table[]; | ||
13 | |||
14 | static inline int syscall_get_nr(struct task_struct *task, | ||
15 | struct pt_regs *regs) | ||
16 | { | ||
17 | return task_thread_info(task)->syscall; | ||
18 | } | ||
19 | |||
20 | static inline void syscall_rollback(struct task_struct *task, | ||
21 | struct pt_regs *regs) | ||
22 | { | ||
23 | regs->ARM_r0 = regs->ARM_ORIG_r0; | ||
24 | } | ||
25 | |||
26 | static inline long syscall_get_error(struct task_struct *task, | ||
27 | struct pt_regs *regs) | ||
28 | { | ||
29 | unsigned long error = regs->ARM_r0; | ||
30 | return IS_ERR_VALUE(error) ? error : 0; | ||
31 | } | ||
32 | |||
33 | static inline long syscall_get_return_value(struct task_struct *task, | ||
34 | struct pt_regs *regs) | ||
35 | { | ||
36 | return regs->ARM_r0; | ||
37 | } | ||
38 | |||
39 | static inline void syscall_set_return_value(struct task_struct *task, | ||
40 | struct pt_regs *regs, | ||
41 | int error, long val) | ||
42 | { | ||
43 | regs->ARM_r0 = (long) error ? error : val; | ||
44 | } | ||
45 | |||
46 | #define SYSCALL_MAX_ARGS 7 | ||
47 | |||
48 | static inline void syscall_get_arguments(struct task_struct *task, | ||
49 | struct pt_regs *regs, | ||
50 | unsigned int i, unsigned int n, | ||
51 | unsigned long *args) | ||
52 | { | ||
53 | if (i + n > SYSCALL_MAX_ARGS) { | ||
54 | unsigned long *args_bad = args + SYSCALL_MAX_ARGS - i; | ||
55 | unsigned int n_bad = n + i - SYSCALL_MAX_ARGS; | ||
56 | pr_warning("%s called with max args %d, handling only %d\n", | ||
57 | __func__, i + n, SYSCALL_MAX_ARGS); | ||
58 | memset(args_bad, 0, n_bad * sizeof(args[0])); | ||
59 | n = SYSCALL_MAX_ARGS - i; | ||
60 | } | ||
61 | |||
62 | if (i == 0) { | ||
63 | args[0] = regs->ARM_ORIG_r0; | ||
64 | args++; | ||
65 | i++; | ||
66 | n--; | ||
67 | } | ||
68 | |||
69 | memcpy(args, ®s->ARM_r0 + i, n * sizeof(args[0])); | ||
70 | } | ||
71 | |||
72 | static inline void syscall_set_arguments(struct task_struct *task, | ||
73 | struct pt_regs *regs, | ||
74 | unsigned int i, unsigned int n, | ||
75 | const unsigned long *args) | ||
76 | { | ||
77 | if (i + n > SYSCALL_MAX_ARGS) { | ||
78 | pr_warning("%s called with max args %d, handling only %d\n", | ||
79 | __func__, i + n, SYSCALL_MAX_ARGS); | ||
80 | n = SYSCALL_MAX_ARGS - i; | ||
81 | } | ||
82 | |||
83 | if (i == 0) { | ||
84 | regs->ARM_ORIG_r0 = args[0]; | ||
85 | args++; | ||
86 | i++; | ||
87 | n--; | ||
88 | } | ||
89 | |||
90 | memcpy(®s->ARM_r0 + i, args, n * sizeof(args[0])); | ||
91 | } | ||
92 | |||
93 | #endif /* _ASM_ARM_SYSCALL_H */ | ||
diff --git a/arch/arm/kernel/head.S b/arch/arm/kernel/head.S index 3bf0c7f8b04..835898e7d70 100644 --- a/arch/arm/kernel/head.S +++ b/arch/arm/kernel/head.S | |||
@@ -277,10 +277,6 @@ __create_page_tables: | |||
277 | mov r3, r3, lsl #PMD_ORDER | 277 | mov r3, r3, lsl #PMD_ORDER |
278 | 278 | ||
279 | add r0, r4, r3 | 279 | add r0, r4, r3 |
280 | rsb r3, r3, #0x4000 @ PTRS_PER_PGD*sizeof(long) | ||
281 | cmp r3, #0x0800 @ limit to 512MB | ||
282 | movhi r3, #0x0800 | ||
283 | add r6, r0, r3 | ||
284 | mov r3, r7, lsr #SECTION_SHIFT | 280 | mov r3, r7, lsr #SECTION_SHIFT |
285 | ldr r7, [r10, #PROCINFO_IO_MMUFLAGS] @ io_mmuflags | 281 | ldr r7, [r10, #PROCINFO_IO_MMUFLAGS] @ io_mmuflags |
286 | orr r3, r7, r3, lsl #SECTION_SHIFT | 282 | orr r3, r7, r3, lsl #SECTION_SHIFT |
@@ -289,13 +285,10 @@ __create_page_tables: | |||
289 | #else | 285 | #else |
290 | orr r3, r3, #PMD_SECT_XN | 286 | orr r3, r3, #PMD_SECT_XN |
291 | #endif | 287 | #endif |
292 | 1: str r3, [r0], #4 | 288 | str r3, [r0], #4 |
293 | #ifdef CONFIG_ARM_LPAE | 289 | #ifdef CONFIG_ARM_LPAE |
294 | str r7, [r0], #4 | 290 | str r7, [r0], #4 |
295 | #endif | 291 | #endif |
296 | add r3, r3, #1 << SECTION_SHIFT | ||
297 | cmp r0, r6 | ||
298 | blo 1b | ||
299 | 292 | ||
300 | #else /* CONFIG_DEBUG_ICEDCC || CONFIG_DEBUG_SEMIHOSTING */ | 293 | #else /* CONFIG_DEBUG_ICEDCC || CONFIG_DEBUG_SEMIHOSTING */ |
301 | /* we don't need any serial debugging mappings */ | 294 | /* we don't need any serial debugging mappings */ |
diff --git a/arch/arm/kernel/ptrace.c b/arch/arm/kernel/ptrace.c index 9650c143afc..14e38261cd3 100644 --- a/arch/arm/kernel/ptrace.c +++ b/arch/arm/kernel/ptrace.c | |||
@@ -24,6 +24,7 @@ | |||
24 | #include <linux/hw_breakpoint.h> | 24 | #include <linux/hw_breakpoint.h> |
25 | #include <linux/regset.h> | 25 | #include <linux/regset.h> |
26 | #include <linux/audit.h> | 26 | #include <linux/audit.h> |
27 | #include <linux/tracehook.h> | ||
27 | 28 | ||
28 | #include <asm/pgtable.h> | 29 | #include <asm/pgtable.h> |
29 | #include <asm/traps.h> | 30 | #include <asm/traps.h> |
@@ -918,8 +919,6 @@ asmlinkage int syscall_trace(int why, struct pt_regs *regs, int scno) | |||
918 | 919 | ||
919 | if (!test_thread_flag(TIF_SYSCALL_TRACE)) | 920 | if (!test_thread_flag(TIF_SYSCALL_TRACE)) |
920 | return scno; | 921 | return scno; |
921 | if (!(current->ptrace & PT_PTRACED)) | ||
922 | return scno; | ||
923 | 922 | ||
924 | current_thread_info()->syscall = scno; | 923 | current_thread_info()->syscall = scno; |
925 | 924 | ||
@@ -930,19 +929,11 @@ asmlinkage int syscall_trace(int why, struct pt_regs *regs, int scno) | |||
930 | ip = regs->ARM_ip; | 929 | ip = regs->ARM_ip; |
931 | regs->ARM_ip = why; | 930 | regs->ARM_ip = why; |
932 | 931 | ||
933 | /* the 0x80 provides a way for the tracing parent to distinguish | 932 | if (why) |
934 | between a syscall stop and SIGTRAP delivery */ | 933 | tracehook_report_syscall_exit(regs, 0); |
935 | ptrace_notify(SIGTRAP | ((current->ptrace & PT_TRACESYSGOOD) | 934 | else if (tracehook_report_syscall_entry(regs)) |
936 | ? 0x80 : 0)); | 935 | current_thread_info()->syscall = -1; |
937 | /* | 936 | |
938 | * this isn't the same as continuing with a signal, but it will do | ||
939 | * for normal use. strace only continues with a signal if the | ||
940 | * stopping signal is not SIGTRAP. -brl | ||
941 | */ | ||
942 | if (current->exit_code) { | ||
943 | send_sig(current->exit_code, current, 1); | ||
944 | current->exit_code = 0; | ||
945 | } | ||
946 | regs->ARM_ip = ip; | 937 | regs->ARM_ip = ip; |
947 | 938 | ||
948 | return current_thread_info()->syscall; | 939 | return current_thread_info()->syscall; |
diff --git a/arch/arm/kernel/signal.c b/arch/arm/kernel/signal.c index d68d1b69468..73d9a420850 100644 --- a/arch/arm/kernel/signal.c +++ b/arch/arm/kernel/signal.c | |||
@@ -589,6 +589,8 @@ handle_signal(unsigned long sig, struct k_sigaction *ka, | |||
589 | */ | 589 | */ |
590 | block_sigmask(ka, sig); | 590 | block_sigmask(ka, sig); |
591 | 591 | ||
592 | tracehook_signal_handler(sig, info, ka, regs, 0); | ||
593 | |||
592 | return 0; | 594 | return 0; |
593 | } | 595 | } |
594 | 596 | ||
diff --git a/arch/arm/kernel/smp_scu.c b/arch/arm/kernel/smp_scu.c index 8f5dd796335..b9f015e843d 100644 --- a/arch/arm/kernel/smp_scu.c +++ b/arch/arm/kernel/smp_scu.c | |||
@@ -11,6 +11,7 @@ | |||
11 | #include <linux/init.h> | 11 | #include <linux/init.h> |
12 | #include <linux/io.h> | 12 | #include <linux/io.h> |
13 | 13 | ||
14 | #include <asm/smp_plat.h> | ||
14 | #include <asm/smp_scu.h> | 15 | #include <asm/smp_scu.h> |
15 | #include <asm/cacheflush.h> | 16 | #include <asm/cacheflush.h> |
16 | #include <asm/cputype.h> | 17 | #include <asm/cputype.h> |
@@ -74,7 +75,7 @@ void scu_enable(void __iomem *scu_base) | |||
74 | int scu_power_mode(void __iomem *scu_base, unsigned int mode) | 75 | int scu_power_mode(void __iomem *scu_base, unsigned int mode) |
75 | { | 76 | { |
76 | unsigned int val; | 77 | unsigned int val; |
77 | int cpu = smp_processor_id(); | 78 | int cpu = cpu_logical_map(smp_processor_id()); |
78 | 79 | ||
79 | if (mode > 3 || mode == 1 || cpu > 3) | 80 | if (mode > 3 || mode == 1 || cpu > 3) |
80 | return -EINVAL; | 81 | return -EINVAL; |
diff --git a/arch/arm/kernel/thumbee.c b/arch/arm/kernel/thumbee.c index aab89976405..7b8403b7666 100644 --- a/arch/arm/kernel/thumbee.c +++ b/arch/arm/kernel/thumbee.c | |||
@@ -20,6 +20,7 @@ | |||
20 | #include <linux/kernel.h> | 20 | #include <linux/kernel.h> |
21 | #include <linux/init.h> | 21 | #include <linux/init.h> |
22 | 22 | ||
23 | #include <asm/cputype.h> | ||
23 | #include <asm/system_info.h> | 24 | #include <asm/system_info.h> |
24 | #include <asm/thread_notify.h> | 25 | #include <asm/thread_notify.h> |
25 | 26 | ||
@@ -67,8 +68,7 @@ static int __init thumbee_init(void) | |||
67 | if (cpu_arch < CPU_ARCH_ARMv7) | 68 | if (cpu_arch < CPU_ARCH_ARMv7) |
68 | return 0; | 69 | return 0; |
69 | 70 | ||
70 | /* processor feature register 0 */ | 71 | pfr0 = read_cpuid_ext(CPUID_EXT_PFR0); |
71 | asm("mrc p15, 0, %0, c0, c1, 0\n" : "=r" (pfr0)); | ||
72 | if ((pfr0 & 0x0000f000) != 0x00001000) | 72 | if ((pfr0 & 0x0000f000) != 0x00001000) |
73 | return 0; | 73 | return 0; |
74 | 74 | ||
diff --git a/arch/arm/kernel/time.c b/arch/arm/kernel/time.c index fe31b22f18f..af2afb01967 100644 --- a/arch/arm/kernel/time.c +++ b/arch/arm/kernel/time.c | |||
@@ -110,6 +110,42 @@ void timer_tick(void) | |||
110 | } | 110 | } |
111 | #endif | 111 | #endif |
112 | 112 | ||
113 | static void dummy_clock_access(struct timespec *ts) | ||
114 | { | ||
115 | ts->tv_sec = 0; | ||
116 | ts->tv_nsec = 0; | ||
117 | } | ||
118 | |||
119 | static clock_access_fn __read_persistent_clock = dummy_clock_access; | ||
120 | static clock_access_fn __read_boot_clock = dummy_clock_access;; | ||
121 | |||
122 | void read_persistent_clock(struct timespec *ts) | ||
123 | { | ||
124 | __read_persistent_clock(ts); | ||
125 | } | ||
126 | |||
127 | void read_boot_clock(struct timespec *ts) | ||
128 | { | ||
129 | __read_boot_clock(ts); | ||
130 | } | ||
131 | |||
132 | int __init register_persistent_clock(clock_access_fn read_boot, | ||
133 | clock_access_fn read_persistent) | ||
134 | { | ||
135 | /* Only allow the clockaccess functions to be registered once */ | ||
136 | if (__read_persistent_clock == dummy_clock_access && | ||
137 | __read_boot_clock == dummy_clock_access) { | ||
138 | if (read_boot) | ||
139 | __read_boot_clock = read_boot; | ||
140 | if (read_persistent) | ||
141 | __read_persistent_clock = read_persistent; | ||
142 | |||
143 | return 0; | ||
144 | } | ||
145 | |||
146 | return -EINVAL; | ||
147 | } | ||
148 | |||
113 | #if defined(CONFIG_PM) && !defined(CONFIG_GENERIC_CLOCKEVENTS) | 149 | #if defined(CONFIG_PM) && !defined(CONFIG_GENERIC_CLOCKEVENTS) |
114 | static int timer_suspend(void) | 150 | static int timer_suspend(void) |
115 | { | 151 | { |
diff --git a/arch/arm/kernel/traps.c b/arch/arm/kernel/traps.c index 778454750a6..3647170e9a1 100644 --- a/arch/arm/kernel/traps.c +++ b/arch/arm/kernel/traps.c | |||
@@ -479,14 +479,14 @@ static int bad_syscall(int n, struct pt_regs *regs) | |||
479 | return regs->ARM_r0; | 479 | return regs->ARM_r0; |
480 | } | 480 | } |
481 | 481 | ||
482 | static inline void | 482 | static inline int |
483 | do_cache_op(unsigned long start, unsigned long end, int flags) | 483 | do_cache_op(unsigned long start, unsigned long end, int flags) |
484 | { | 484 | { |
485 | struct mm_struct *mm = current->active_mm; | 485 | struct mm_struct *mm = current->active_mm; |
486 | struct vm_area_struct *vma; | 486 | struct vm_area_struct *vma; |
487 | 487 | ||
488 | if (end < start || flags) | 488 | if (end < start || flags) |
489 | return; | 489 | return -EINVAL; |
490 | 490 | ||
491 | down_read(&mm->mmap_sem); | 491 | down_read(&mm->mmap_sem); |
492 | vma = find_vma(mm, start); | 492 | vma = find_vma(mm, start); |
@@ -496,9 +496,11 @@ do_cache_op(unsigned long start, unsigned long end, int flags) | |||
496 | if (end > vma->vm_end) | 496 | if (end > vma->vm_end) |
497 | end = vma->vm_end; | 497 | end = vma->vm_end; |
498 | 498 | ||
499 | flush_cache_user_range(vma, start, end); | 499 | up_read(&mm->mmap_sem); |
500 | return flush_cache_user_range(start, end); | ||
500 | } | 501 | } |
501 | up_read(&mm->mmap_sem); | 502 | up_read(&mm->mmap_sem); |
503 | return -EINVAL; | ||
502 | } | 504 | } |
503 | 505 | ||
504 | /* | 506 | /* |
@@ -544,8 +546,7 @@ asmlinkage int arm_syscall(int no, struct pt_regs *regs) | |||
544 | * the specified region). | 546 | * the specified region). |
545 | */ | 547 | */ |
546 | case NR(cacheflush): | 548 | case NR(cacheflush): |
547 | do_cache_op(regs->ARM_r0, regs->ARM_r1, regs->ARM_r2); | 549 | return do_cache_op(regs->ARM_r0, regs->ARM_r1, regs->ARM_r2); |
548 | return 0; | ||
549 | 550 | ||
550 | case NR(usr26): | 551 | case NR(usr26): |
551 | if (!(elf_hwcap & HWCAP_26BIT)) | 552 | if (!(elf_hwcap & HWCAP_26BIT)) |
diff --git a/arch/arm/mach-tegra/timer.c b/arch/arm/mach-tegra/timer.c index 1eed8d4a80e..315672c7bd4 100644 --- a/arch/arm/mach-tegra/timer.c +++ b/arch/arm/mach-tegra/timer.c | |||
@@ -124,7 +124,7 @@ static u64 tegra_rtc_read_ms(void) | |||
124 | } | 124 | } |
125 | 125 | ||
126 | /* | 126 | /* |
127 | * read_persistent_clock - Return time from a persistent clock. | 127 | * tegra_read_persistent_clock - Return time from a persistent clock. |
128 | * | 128 | * |
129 | * Reads the time from a source which isn't disabled during PM, the | 129 | * Reads the time from a source which isn't disabled during PM, the |
130 | * 32k sync timer. Convert the cycles elapsed since last read into | 130 | * 32k sync timer. Convert the cycles elapsed since last read into |
@@ -133,7 +133,7 @@ static u64 tegra_rtc_read_ms(void) | |||
133 | * tegra_rtc driver could be executing to avoid race conditions | 133 | * tegra_rtc driver could be executing to avoid race conditions |
134 | * on the RTC shadow register | 134 | * on the RTC shadow register |
135 | */ | 135 | */ |
136 | void read_persistent_clock(struct timespec *ts) | 136 | static void tegra_read_persistent_clock(struct timespec *ts) |
137 | { | 137 | { |
138 | u64 delta; | 138 | u64 delta; |
139 | struct timespec *tsp = &persistent_ts; | 139 | struct timespec *tsp = &persistent_ts; |
@@ -243,6 +243,7 @@ static void __init tegra_init_timer(void) | |||
243 | tegra_clockevent.irq = tegra_timer_irq.irq; | 243 | tegra_clockevent.irq = tegra_timer_irq.irq; |
244 | clockevents_register_device(&tegra_clockevent); | 244 | clockevents_register_device(&tegra_clockevent); |
245 | tegra_twd_init(); | 245 | tegra_twd_init(); |
246 | register_persistent_clock(NULL, tegra_read_persistent_clock); | ||
246 | } | 247 | } |
247 | 248 | ||
248 | struct sys_timer tegra_timer = { | 249 | struct sys_timer tegra_timer = { |
diff --git a/arch/arm/mm/cache-v3.S b/arch/arm/mm/cache-v3.S index c2301f22610..52e35f32eef 100644 --- a/arch/arm/mm/cache-v3.S +++ b/arch/arm/mm/cache-v3.S | |||
@@ -78,6 +78,7 @@ ENTRY(v3_coherent_kern_range) | |||
78 | * - end - virtual end address | 78 | * - end - virtual end address |
79 | */ | 79 | */ |
80 | ENTRY(v3_coherent_user_range) | 80 | ENTRY(v3_coherent_user_range) |
81 | mov r0, #0 | ||
81 | mov pc, lr | 82 | mov pc, lr |
82 | 83 | ||
83 | /* | 84 | /* |
diff --git a/arch/arm/mm/cache-v4.S b/arch/arm/mm/cache-v4.S index fd9bb7addc8..022135d2b7e 100644 --- a/arch/arm/mm/cache-v4.S +++ b/arch/arm/mm/cache-v4.S | |||
@@ -88,6 +88,7 @@ ENTRY(v4_coherent_kern_range) | |||
88 | * - end - virtual end address | 88 | * - end - virtual end address |
89 | */ | 89 | */ |
90 | ENTRY(v4_coherent_user_range) | 90 | ENTRY(v4_coherent_user_range) |
91 | mov r0, #0 | ||
91 | mov pc, lr | 92 | mov pc, lr |
92 | 93 | ||
93 | /* | 94 | /* |
diff --git a/arch/arm/mm/cache-v4wb.S b/arch/arm/mm/cache-v4wb.S index 4f2c14151cc..8f1eeae340c 100644 --- a/arch/arm/mm/cache-v4wb.S +++ b/arch/arm/mm/cache-v4wb.S | |||
@@ -167,9 +167,9 @@ ENTRY(v4wb_coherent_user_range) | |||
167 | add r0, r0, #CACHE_DLINESIZE | 167 | add r0, r0, #CACHE_DLINESIZE |
168 | cmp r0, r1 | 168 | cmp r0, r1 |
169 | blo 1b | 169 | blo 1b |
170 | mov ip, #0 | 170 | mov r0, #0 |
171 | mcr p15, 0, ip, c7, c5, 0 @ invalidate I cache | 171 | mcr p15, 0, r0, c7, c5, 0 @ invalidate I cache |
172 | mcr p15, 0, ip, c7, c10, 4 @ drain WB | 172 | mcr p15, 0, r0, c7, c10, 4 @ drain WB |
173 | mov pc, lr | 173 | mov pc, lr |
174 | 174 | ||
175 | 175 | ||
diff --git a/arch/arm/mm/cache-v4wt.S b/arch/arm/mm/cache-v4wt.S index 4d7b467631c..b34a5f908a8 100644 --- a/arch/arm/mm/cache-v4wt.S +++ b/arch/arm/mm/cache-v4wt.S | |||
@@ -125,6 +125,7 @@ ENTRY(v4wt_coherent_user_range) | |||
125 | add r0, r0, #CACHE_DLINESIZE | 125 | add r0, r0, #CACHE_DLINESIZE |
126 | cmp r0, r1 | 126 | cmp r0, r1 |
127 | blo 1b | 127 | blo 1b |
128 | mov r0, #0 | ||
128 | mov pc, lr | 129 | mov pc, lr |
129 | 130 | ||
130 | /* | 131 | /* |
diff --git a/arch/arm/mm/cache-v6.S b/arch/arm/mm/cache-v6.S index 74c2e5a33a4..4b10760c56d 100644 --- a/arch/arm/mm/cache-v6.S +++ b/arch/arm/mm/cache-v6.S | |||
@@ -12,6 +12,7 @@ | |||
12 | #include <linux/linkage.h> | 12 | #include <linux/linkage.h> |
13 | #include <linux/init.h> | 13 | #include <linux/init.h> |
14 | #include <asm/assembler.h> | 14 | #include <asm/assembler.h> |
15 | #include <asm/errno.h> | ||
15 | #include <asm/unwind.h> | 16 | #include <asm/unwind.h> |
16 | 17 | ||
17 | #include "proc-macros.S" | 18 | #include "proc-macros.S" |
@@ -135,7 +136,6 @@ ENTRY(v6_coherent_user_range) | |||
135 | 1: | 136 | 1: |
136 | USER( mcr p15, 0, r0, c7, c10, 1 ) @ clean D line | 137 | USER( mcr p15, 0, r0, c7, c10, 1 ) @ clean D line |
137 | add r0, r0, #CACHE_LINE_SIZE | 138 | add r0, r0, #CACHE_LINE_SIZE |
138 | 2: | ||
139 | cmp r0, r1 | 139 | cmp r0, r1 |
140 | blo 1b | 140 | blo 1b |
141 | #endif | 141 | #endif |
@@ -154,13 +154,11 @@ ENTRY(v6_coherent_user_range) | |||
154 | 154 | ||
155 | /* | 155 | /* |
156 | * Fault handling for the cache operation above. If the virtual address in r0 | 156 | * Fault handling for the cache operation above. If the virtual address in r0 |
157 | * isn't mapped, just try the next page. | 157 | * isn't mapped, fail with -EFAULT. |
158 | */ | 158 | */ |
159 | 9001: | 159 | 9001: |
160 | mov r0, r0, lsr #12 | 160 | mov r0, #-EFAULT |
161 | mov r0, r0, lsl #12 | 161 | mov pc, lr |
162 | add r0, r0, #4096 | ||
163 | b 2b | ||
164 | UNWIND(.fnend ) | 162 | UNWIND(.fnend ) |
165 | ENDPROC(v6_coherent_user_range) | 163 | ENDPROC(v6_coherent_user_range) |
166 | ENDPROC(v6_coherent_kern_range) | 164 | ENDPROC(v6_coherent_kern_range) |
diff --git a/arch/arm/mm/cache-v7.S b/arch/arm/mm/cache-v7.S index a655d3da386..39e3fb3db80 100644 --- a/arch/arm/mm/cache-v7.S +++ b/arch/arm/mm/cache-v7.S | |||
@@ -13,6 +13,7 @@ | |||
13 | #include <linux/linkage.h> | 13 | #include <linux/linkage.h> |
14 | #include <linux/init.h> | 14 | #include <linux/init.h> |
15 | #include <asm/assembler.h> | 15 | #include <asm/assembler.h> |
16 | #include <asm/errno.h> | ||
16 | #include <asm/unwind.h> | 17 | #include <asm/unwind.h> |
17 | 18 | ||
18 | #include "proc-macros.S" | 19 | #include "proc-macros.S" |
@@ -198,7 +199,6 @@ ENTRY(v7_coherent_user_range) | |||
198 | add r12, r12, r2 | 199 | add r12, r12, r2 |
199 | cmp r12, r1 | 200 | cmp r12, r1 |
200 | blo 2b | 201 | blo 2b |
201 | 3: | ||
202 | mov r0, #0 | 202 | mov r0, #0 |
203 | ALT_SMP(mcr p15, 0, r0, c7, c1, 6) @ invalidate BTB Inner Shareable | 203 | ALT_SMP(mcr p15, 0, r0, c7, c1, 6) @ invalidate BTB Inner Shareable |
204 | ALT_UP(mcr p15, 0, r0, c7, c5, 6) @ invalidate BTB | 204 | ALT_UP(mcr p15, 0, r0, c7, c5, 6) @ invalidate BTB |
@@ -208,13 +208,11 @@ ENTRY(v7_coherent_user_range) | |||
208 | 208 | ||
209 | /* | 209 | /* |
210 | * Fault handling for the cache operation above. If the virtual address in r0 | 210 | * Fault handling for the cache operation above. If the virtual address in r0 |
211 | * isn't mapped, just try the next page. | 211 | * isn't mapped, fail with -EFAULT. |
212 | */ | 212 | */ |
213 | 9001: | 213 | 9001: |
214 | mov r12, r12, lsr #12 | 214 | mov r0, #-EFAULT |
215 | mov r12, r12, lsl #12 | 215 | mov pc, lr |
216 | add r12, r12, #4096 | ||
217 | b 3b | ||
218 | UNWIND(.fnend ) | 216 | UNWIND(.fnend ) |
219 | ENDPROC(v7_coherent_kern_range) | 217 | ENDPROC(v7_coherent_kern_range) |
220 | ENDPROC(v7_coherent_user_range) | 218 | ENDPROC(v7_coherent_user_range) |
diff --git a/arch/arm/mm/proc-arm1020.S b/arch/arm/mm/proc-arm1020.S index 234951345eb..0650bb87c1e 100644 --- a/arch/arm/mm/proc-arm1020.S +++ b/arch/arm/mm/proc-arm1020.S | |||
@@ -241,6 +241,7 @@ ENTRY(arm1020_coherent_user_range) | |||
241 | cmp r0, r1 | 241 | cmp r0, r1 |
242 | blo 1b | 242 | blo 1b |
243 | mcr p15, 0, ip, c7, c10, 4 @ drain WB | 243 | mcr p15, 0, ip, c7, c10, 4 @ drain WB |
244 | mov r0, #0 | ||
244 | mov pc, lr | 245 | mov pc, lr |
245 | 246 | ||
246 | /* | 247 | /* |
diff --git a/arch/arm/mm/proc-arm1020e.S b/arch/arm/mm/proc-arm1020e.S index c244b06caac..4188478325a 100644 --- a/arch/arm/mm/proc-arm1020e.S +++ b/arch/arm/mm/proc-arm1020e.S | |||
@@ -235,6 +235,7 @@ ENTRY(arm1020e_coherent_user_range) | |||
235 | cmp r0, r1 | 235 | cmp r0, r1 |
236 | blo 1b | 236 | blo 1b |
237 | mcr p15, 0, ip, c7, c10, 4 @ drain WB | 237 | mcr p15, 0, ip, c7, c10, 4 @ drain WB |
238 | mov r0, #0 | ||
238 | mov pc, lr | 239 | mov pc, lr |
239 | 240 | ||
240 | /* | 241 | /* |
diff --git a/arch/arm/mm/proc-arm1022.S b/arch/arm/mm/proc-arm1022.S index 38fe22efd18..33c68824bff 100644 --- a/arch/arm/mm/proc-arm1022.S +++ b/arch/arm/mm/proc-arm1022.S | |||
@@ -224,6 +224,7 @@ ENTRY(arm1022_coherent_user_range) | |||
224 | cmp r0, r1 | 224 | cmp r0, r1 |
225 | blo 1b | 225 | blo 1b |
226 | mcr p15, 0, ip, c7, c10, 4 @ drain WB | 226 | mcr p15, 0, ip, c7, c10, 4 @ drain WB |
227 | mov r0, #0 | ||
227 | mov pc, lr | 228 | mov pc, lr |
228 | 229 | ||
229 | /* | 230 | /* |
diff --git a/arch/arm/mm/proc-arm1026.S b/arch/arm/mm/proc-arm1026.S index 3eb9c3c26c7..fbc1d5fc24d 100644 --- a/arch/arm/mm/proc-arm1026.S +++ b/arch/arm/mm/proc-arm1026.S | |||
@@ -218,6 +218,7 @@ ENTRY(arm1026_coherent_user_range) | |||
218 | cmp r0, r1 | 218 | cmp r0, r1 |
219 | blo 1b | 219 | blo 1b |
220 | mcr p15, 0, ip, c7, c10, 4 @ drain WB | 220 | mcr p15, 0, ip, c7, c10, 4 @ drain WB |
221 | mov r0, #0 | ||
221 | mov pc, lr | 222 | mov pc, lr |
222 | 223 | ||
223 | /* | 224 | /* |
diff --git a/arch/arm/mm/proc-arm920.S b/arch/arm/mm/proc-arm920.S index cb941ae95f6..1a8c138eb89 100644 --- a/arch/arm/mm/proc-arm920.S +++ b/arch/arm/mm/proc-arm920.S | |||
@@ -210,6 +210,7 @@ ENTRY(arm920_coherent_user_range) | |||
210 | cmp r0, r1 | 210 | cmp r0, r1 |
211 | blo 1b | 211 | blo 1b |
212 | mcr p15, 0, r0, c7, c10, 4 @ drain WB | 212 | mcr p15, 0, r0, c7, c10, 4 @ drain WB |
213 | mov r0, #0 | ||
213 | mov pc, lr | 214 | mov pc, lr |
214 | 215 | ||
215 | /* | 216 | /* |
diff --git a/arch/arm/mm/proc-arm922.S b/arch/arm/mm/proc-arm922.S index 4ec0e074dd5..4c44d7e1c3c 100644 --- a/arch/arm/mm/proc-arm922.S +++ b/arch/arm/mm/proc-arm922.S | |||
@@ -212,6 +212,7 @@ ENTRY(arm922_coherent_user_range) | |||
212 | cmp r0, r1 | 212 | cmp r0, r1 |
213 | blo 1b | 213 | blo 1b |
214 | mcr p15, 0, r0, c7, c10, 4 @ drain WB | 214 | mcr p15, 0, r0, c7, c10, 4 @ drain WB |
215 | mov r0, #0 | ||
215 | mov pc, lr | 216 | mov pc, lr |
216 | 217 | ||
217 | /* | 218 | /* |
diff --git a/arch/arm/mm/proc-arm925.S b/arch/arm/mm/proc-arm925.S index 9dccd9a365b..ec5b1180994 100644 --- a/arch/arm/mm/proc-arm925.S +++ b/arch/arm/mm/proc-arm925.S | |||
@@ -258,6 +258,7 @@ ENTRY(arm925_coherent_user_range) | |||
258 | cmp r0, r1 | 258 | cmp r0, r1 |
259 | blo 1b | 259 | blo 1b |
260 | mcr p15, 0, r0, c7, c10, 4 @ drain WB | 260 | mcr p15, 0, r0, c7, c10, 4 @ drain WB |
261 | mov r0, #0 | ||
261 | mov pc, lr | 262 | mov pc, lr |
262 | 263 | ||
263 | /* | 264 | /* |
diff --git a/arch/arm/mm/proc-arm926.S b/arch/arm/mm/proc-arm926.S index 820259b81a1..c31e62c606c 100644 --- a/arch/arm/mm/proc-arm926.S +++ b/arch/arm/mm/proc-arm926.S | |||
@@ -221,6 +221,7 @@ ENTRY(arm926_coherent_user_range) | |||
221 | cmp r0, r1 | 221 | cmp r0, r1 |
222 | blo 1b | 222 | blo 1b |
223 | mcr p15, 0, r0, c7, c10, 4 @ drain WB | 223 | mcr p15, 0, r0, c7, c10, 4 @ drain WB |
224 | mov r0, #0 | ||
224 | mov pc, lr | 225 | mov pc, lr |
225 | 226 | ||
226 | /* | 227 | /* |
diff --git a/arch/arm/mm/proc-arm940.S b/arch/arm/mm/proc-arm940.S index 9fdc0a17097..a613a7dd714 100644 --- a/arch/arm/mm/proc-arm940.S +++ b/arch/arm/mm/proc-arm940.S | |||
@@ -160,7 +160,7 @@ ENTRY(arm940_coherent_user_range) | |||
160 | * - size - region size | 160 | * - size - region size |
161 | */ | 161 | */ |
162 | ENTRY(arm940_flush_kern_dcache_area) | 162 | ENTRY(arm940_flush_kern_dcache_area) |
163 | mov ip, #0 | 163 | mov r0, #0 |
164 | mov r1, #(CACHE_DSEGMENTS - 1) << 4 @ 4 segments | 164 | mov r1, #(CACHE_DSEGMENTS - 1) << 4 @ 4 segments |
165 | 1: orr r3, r1, #(CACHE_DENTRIES - 1) << 26 @ 64 entries | 165 | 1: orr r3, r1, #(CACHE_DENTRIES - 1) << 26 @ 64 entries |
166 | 2: mcr p15, 0, r3, c7, c14, 2 @ clean/flush D index | 166 | 2: mcr p15, 0, r3, c7, c14, 2 @ clean/flush D index |
@@ -168,8 +168,8 @@ ENTRY(arm940_flush_kern_dcache_area) | |||
168 | bcs 2b @ entries 63 to 0 | 168 | bcs 2b @ entries 63 to 0 |
169 | subs r1, r1, #1 << 4 | 169 | subs r1, r1, #1 << 4 |
170 | bcs 1b @ segments 7 to 0 | 170 | bcs 1b @ segments 7 to 0 |
171 | mcr p15, 0, ip, c7, c5, 0 @ invalidate I cache | 171 | mcr p15, 0, r0, c7, c5, 0 @ invalidate I cache |
172 | mcr p15, 0, ip, c7, c10, 4 @ drain WB | 172 | mcr p15, 0, r0, c7, c10, 4 @ drain WB |
173 | mov pc, lr | 173 | mov pc, lr |
174 | 174 | ||
175 | /* | 175 | /* |
diff --git a/arch/arm/mm/proc-arm946.S b/arch/arm/mm/proc-arm946.S index f684cfedcca..9f4f2999fdd 100644 --- a/arch/arm/mm/proc-arm946.S +++ b/arch/arm/mm/proc-arm946.S | |||
@@ -190,6 +190,7 @@ ENTRY(arm946_coherent_user_range) | |||
190 | cmp r0, r1 | 190 | cmp r0, r1 |
191 | blo 1b | 191 | blo 1b |
192 | mcr p15, 0, r0, c7, c10, 4 @ drain WB | 192 | mcr p15, 0, r0, c7, c10, 4 @ drain WB |
193 | mov r0, #0 | ||
193 | mov pc, lr | 194 | mov pc, lr |
194 | 195 | ||
195 | /* | 196 | /* |
diff --git a/arch/arm/mm/proc-feroceon.S b/arch/arm/mm/proc-feroceon.S index ba3c500584a..23a8e4c7f2b 100644 --- a/arch/arm/mm/proc-feroceon.S +++ b/arch/arm/mm/proc-feroceon.S | |||
@@ -232,6 +232,7 @@ ENTRY(feroceon_coherent_user_range) | |||
232 | cmp r0, r1 | 232 | cmp r0, r1 |
233 | blo 1b | 233 | blo 1b |
234 | mcr p15, 0, r0, c7, c10, 4 @ drain WB | 234 | mcr p15, 0, r0, c7, c10, 4 @ drain WB |
235 | mov r0, #0 | ||
235 | mov pc, lr | 236 | mov pc, lr |
236 | 237 | ||
237 | /* | 238 | /* |
diff --git a/arch/arm/mm/proc-mohawk.S b/arch/arm/mm/proc-mohawk.S index cdfedc5b8ad..b0475468c71 100644 --- a/arch/arm/mm/proc-mohawk.S +++ b/arch/arm/mm/proc-mohawk.S | |||
@@ -193,6 +193,7 @@ ENTRY(mohawk_coherent_user_range) | |||
193 | cmp r0, r1 | 193 | cmp r0, r1 |
194 | blo 1b | 194 | blo 1b |
195 | mcr p15, 0, r0, c7, c10, 4 @ drain WB | 195 | mcr p15, 0, r0, c7, c10, 4 @ drain WB |
196 | mov r0, #0 | ||
196 | mov pc, lr | 197 | mov pc, lr |
197 | 198 | ||
198 | /* | 199 | /* |
diff --git a/arch/arm/plat-omap/counter_32k.c b/arch/arm/plat-omap/counter_32k.c index 5068fe5a691..44ae077dbc2 100644 --- a/arch/arm/plat-omap/counter_32k.c +++ b/arch/arm/plat-omap/counter_32k.c | |||
@@ -19,6 +19,7 @@ | |||
19 | #include <linux/io.h> | 19 | #include <linux/io.h> |
20 | #include <linux/clocksource.h> | 20 | #include <linux/clocksource.h> |
21 | 21 | ||
22 | #include <asm/mach/time.h> | ||
22 | #include <asm/sched_clock.h> | 23 | #include <asm/sched_clock.h> |
23 | 24 | ||
24 | #include <plat/hardware.h> | 25 | #include <plat/hardware.h> |
@@ -43,7 +44,7 @@ static u32 notrace omap_32k_read_sched_clock(void) | |||
43 | } | 44 | } |
44 | 45 | ||
45 | /** | 46 | /** |
46 | * read_persistent_clock - Return time from a persistent clock. | 47 | * omap_read_persistent_clock - Return time from a persistent clock. |
47 | * | 48 | * |
48 | * Reads the time from a source which isn't disabled during PM, the | 49 | * Reads the time from a source which isn't disabled during PM, the |
49 | * 32k sync timer. Convert the cycles elapsed since last read into | 50 | * 32k sync timer. Convert the cycles elapsed since last read into |
@@ -52,7 +53,7 @@ static u32 notrace omap_32k_read_sched_clock(void) | |||
52 | static struct timespec persistent_ts; | 53 | static struct timespec persistent_ts; |
53 | static cycles_t cycles, last_cycles; | 54 | static cycles_t cycles, last_cycles; |
54 | static unsigned int persistent_mult, persistent_shift; | 55 | static unsigned int persistent_mult, persistent_shift; |
55 | void read_persistent_clock(struct timespec *ts) | 56 | static void omap_read_persistent_clock(struct timespec *ts) |
56 | { | 57 | { |
57 | unsigned long long nsecs; | 58 | unsigned long long nsecs; |
58 | cycles_t delta; | 59 | cycles_t delta; |
@@ -116,6 +117,7 @@ int __init omap_init_clocksource_32k(void) | |||
116 | printk(err, "32k_counter"); | 117 | printk(err, "32k_counter"); |
117 | 118 | ||
118 | setup_sched_clock(omap_32k_read_sched_clock, 32, 32768); | 119 | setup_sched_clock(omap_32k_read_sched_clock, 32, 32768); |
120 | register_persistent_clock(NULL, omap_read_persistent_clock); | ||
119 | } | 121 | } |
120 | return 0; | 122 | return 0; |
121 | } | 123 | } |
diff --git a/arch/arm/vfp/vfpmodule.c b/arch/arm/vfp/vfpmodule.c index b0197b2c857..586961929e9 100644 --- a/arch/arm/vfp/vfpmodule.c +++ b/arch/arm/vfp/vfpmodule.c | |||
@@ -241,11 +241,11 @@ static void vfp_panic(char *reason, u32 inst) | |||
241 | { | 241 | { |
242 | int i; | 242 | int i; |
243 | 243 | ||
244 | printk(KERN_ERR "VFP: Error: %s\n", reason); | 244 | pr_err("VFP: Error: %s\n", reason); |
245 | printk(KERN_ERR "VFP: EXC 0x%08x SCR 0x%08x INST 0x%08x\n", | 245 | pr_err("VFP: EXC 0x%08x SCR 0x%08x INST 0x%08x\n", |
246 | fmrx(FPEXC), fmrx(FPSCR), inst); | 246 | fmrx(FPEXC), fmrx(FPSCR), inst); |
247 | for (i = 0; i < 32; i += 2) | 247 | for (i = 0; i < 32; i += 2) |
248 | printk(KERN_ERR "VFP: s%2u: 0x%08x s%2u: 0x%08x\n", | 248 | pr_err("VFP: s%2u: 0x%08x s%2u: 0x%08x\n", |
249 | i, vfp_get_float(i), i+1, vfp_get_float(i+1)); | 249 | i, vfp_get_float(i), i+1, vfp_get_float(i+1)); |
250 | } | 250 | } |
251 | 251 | ||
@@ -452,7 +452,7 @@ static int vfp_pm_suspend(void) | |||
452 | 452 | ||
453 | /* if vfp is on, then save state for resumption */ | 453 | /* if vfp is on, then save state for resumption */ |
454 | if (fpexc & FPEXC_EN) { | 454 | if (fpexc & FPEXC_EN) { |
455 | printk(KERN_DEBUG "%s: saving vfp state\n", __func__); | 455 | pr_debug("%s: saving vfp state\n", __func__); |
456 | vfp_save_state(&ti->vfpstate, fpexc); | 456 | vfp_save_state(&ti->vfpstate, fpexc); |
457 | 457 | ||
458 | /* disable, just in case */ | 458 | /* disable, just in case */ |
@@ -664,16 +664,16 @@ static int __init vfp_init(void) | |||
664 | barrier(); | 664 | barrier(); |
665 | vfp_vector = vfp_null_entry; | 665 | vfp_vector = vfp_null_entry; |
666 | 666 | ||
667 | printk(KERN_INFO "VFP support v0.3: "); | 667 | pr_info("VFP support v0.3: "); |
668 | if (VFP_arch) | 668 | if (VFP_arch) |
669 | printk("not present\n"); | 669 | pr_cont("not present\n"); |
670 | else if (vfpsid & FPSID_NODOUBLE) { | 670 | else if (vfpsid & FPSID_NODOUBLE) { |
671 | printk("no double precision support\n"); | 671 | pr_cont("no double precision support\n"); |
672 | } else { | 672 | } else { |
673 | hotcpu_notifier(vfp_hotplug, 0); | 673 | hotcpu_notifier(vfp_hotplug, 0); |
674 | 674 | ||
675 | VFP_arch = (vfpsid & FPSID_ARCH_MASK) >> FPSID_ARCH_BIT; /* Extract the architecture version */ | 675 | VFP_arch = (vfpsid & FPSID_ARCH_MASK) >> FPSID_ARCH_BIT; /* Extract the architecture version */ |
676 | printk("implementor %02x architecture %d part %02x variant %x rev %x\n", | 676 | pr_cont("implementor %02x architecture %d part %02x variant %x rev %x\n", |
677 | (vfpsid & FPSID_IMPLEMENTER_MASK) >> FPSID_IMPLEMENTER_BIT, | 677 | (vfpsid & FPSID_IMPLEMENTER_MASK) >> FPSID_IMPLEMENTER_BIT, |
678 | (vfpsid & FPSID_ARCH_MASK) >> FPSID_ARCH_BIT, | 678 | (vfpsid & FPSID_ARCH_MASK) >> FPSID_ARCH_BIT, |
679 | (vfpsid & FPSID_PART_MASK) >> FPSID_PART_BIT, | 679 | (vfpsid & FPSID_PART_MASK) >> FPSID_PART_BIT, |