Commit edcda265 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'fixes' of master.kernel.org:/home/rmk/linux-2.6-arm

* 'fixes' of master.kernel.org:/home/rmk/linux-2.6-arm:
  ARM: pm: ensure ARMv7 CPUs save and restore the TLS register
  ARM: pm: proc-v7: fix missing struct processor pointers for suspend code
  ARM: 6969/1: plat-iop: fix build error
  ARM: 6961/1: zImage: Add build-time check for correctly-sized proc_type entries
  ARM: SMP: wait for CPU to be marked active
  ARM: 6963/1: Thumb-2: Relax relocation requirements for non-function symbols
  ARM: 6962/1: mach-h720x: fix build error
  ARM: 6959/1: SMP build fix for entry-macro-multi.S
parents 9c317b3b 111b20d0
...@@ -597,6 +597,8 @@ __common_mmu_cache_on: ...@@ -597,6 +597,8 @@ __common_mmu_cache_on:
sub pc, lr, r0, lsr #32 @ properly flush pipeline sub pc, lr, r0, lsr #32 @ properly flush pipeline
#endif #endif
#define PROC_ENTRY_SIZE (4*5)
/* /*
* Here follow the relocatable cache support functions for the * Here follow the relocatable cache support functions for the
* various processors. This is a generic hook for locating an * various processors. This is a generic hook for locating an
...@@ -624,7 +626,7 @@ call_cache_fn: adr r12, proc_types ...@@ -624,7 +626,7 @@ call_cache_fn: adr r12, proc_types
ARM( addeq pc, r12, r3 ) @ call cache function ARM( addeq pc, r12, r3 ) @ call cache function
THUMB( addeq r12, r3 ) THUMB( addeq r12, r3 )
THUMB( moveq pc, r12 ) @ call cache function THUMB( moveq pc, r12 ) @ call cache function
add r12, r12, #4*5 add r12, r12, #PROC_ENTRY_SIZE
b 1b b 1b
/* /*
...@@ -794,6 +796,16 @@ proc_types: ...@@ -794,6 +796,16 @@ proc_types:
.size proc_types, . - proc_types .size proc_types, . - proc_types
/*
* If you get a "non-constant expression in ".if" statement"
* error from the assembler on this line, check that you have
* not accidentally written a "b" instruction where you should
* have written W(b).
*/
.if (. - proc_types) % PROC_ENTRY_SIZE != 0
.error "The size of one or more proc_types entries is wrong."
.endif
/* /*
* Turn off the Cache and MMU. ARMv3 does not support * Turn off the Cache and MMU. ARMv3 does not support
* reading the control register, but ARMv4 does. * reading the control register, but ARMv4 does.
......
...@@ -13,6 +13,9 @@ ...@@ -13,6 +13,9 @@
* Do not include any C declarations in this file - it is included by * Do not include any C declarations in this file - it is included by
* assembler source. * assembler source.
*/ */
#ifndef __ASM_ASSEMBLER_H__
#define __ASM_ASSEMBLER_H__
#ifndef __ASSEMBLY__ #ifndef __ASSEMBLY__
#error "Only include this from assembly code" #error "Only include this from assembly code"
#endif #endif
...@@ -290,3 +293,4 @@ ...@@ -290,3 +293,4 @@
.macro ldrusr, reg, ptr, inc, cond=al, rept=1, abort=9001f .macro ldrusr, reg, ptr, inc, cond=al, rept=1, abort=9001f
usracc ldr, \reg, \ptr, \inc, \cond, \rept, \abort usracc ldr, \reg, \ptr, \inc, \cond, \rept, \abort
.endm .endm
#endif /* __ASM_ASSEMBLER_H__ */
#include <asm/assembler.h>
/* /*
* Interrupt handling. Preserves r7, r8, r9 * Interrupt handling. Preserves r7, r8, r9
*/ */
......
...@@ -193,8 +193,17 @@ apply_relocate(Elf32_Shdr *sechdrs, const char *strtab, unsigned int symindex, ...@@ -193,8 +193,17 @@ apply_relocate(Elf32_Shdr *sechdrs, const char *strtab, unsigned int symindex,
offset -= 0x02000000; offset -= 0x02000000;
offset += sym->st_value - loc; offset += sym->st_value - loc;
/* only Thumb addresses allowed (no interworking) */ /*
if (!(offset & 1) || * For function symbols, only Thumb addresses are
* allowed (no interworking).
*
* For non-function symbols, the destination
* has no specific ARM/Thumb disposition, so
* the branch is resolved under the assumption
* that interworking is not required.
*/
if ((ELF32_ST_TYPE(sym->st_info) == STT_FUNC &&
!(offset & 1)) ||
offset <= (s32)0xff000000 || offset <= (s32)0xff000000 ||
offset >= (s32)0x01000000) { offset >= (s32)0x01000000) {
pr_err("%s: section %u reloc %u sym '%s': relocation %u out of range (%#lx -> %#x)\n", pr_err("%s: section %u reloc %u sym '%s': relocation %u out of range (%#lx -> %#x)\n",
......
...@@ -318,9 +318,13 @@ asmlinkage void __cpuinit secondary_start_kernel(void) ...@@ -318,9 +318,13 @@ asmlinkage void __cpuinit secondary_start_kernel(void)
smp_store_cpu_info(cpu); smp_store_cpu_info(cpu);
/* /*
* OK, now it's safe to let the boot CPU continue * OK, now it's safe to let the boot CPU continue. Wait for
* the CPU migration code to notice that the CPU is online
* before we continue.
*/ */
set_cpu_online(cpu, true); set_cpu_online(cpu, true);
while (!cpu_active(cpu))
cpu_relax();
/* /*
* OK, it's off to the idle thread for us * OK, it's off to the idle thread for us
......
...@@ -6,12 +6,14 @@ config ARCH_H7201 ...@@ -6,12 +6,14 @@ config ARCH_H7201
bool "gms30c7201" bool "gms30c7201"
depends on ARCH_H720X depends on ARCH_H720X
select CPU_H7201 select CPU_H7201
select ZONE_DMA
help help
Say Y here if you are using the Hynix GMS30C7201 Reference Board Say Y here if you are using the Hynix GMS30C7201 Reference Board
config ARCH_H7202 config ARCH_H7202
bool "hms30c7202" bool "hms30c7202"
select CPU_H7202 select CPU_H7202
select ZONE_DMA
depends on ARCH_H720X depends on ARCH_H720X
help help
Say Y here if you are using the Hynix HMS30C7202 Reference Board Say Y here if you are using the Hynix HMS30C7202 Reference Board
......
...@@ -210,19 +210,21 @@ cpu_v7_name: ...@@ -210,19 +210,21 @@ cpu_v7_name:
/* Suspend/resume support: derived from arch/arm/mach-s5pv210/sleep.S */ /* Suspend/resume support: derived from arch/arm/mach-s5pv210/sleep.S */
.globl cpu_v7_suspend_size .globl cpu_v7_suspend_size
.equ cpu_v7_suspend_size, 4 * 8 .equ cpu_v7_suspend_size, 4 * 9
#ifdef CONFIG_PM_SLEEP #ifdef CONFIG_PM_SLEEP
ENTRY(cpu_v7_do_suspend) ENTRY(cpu_v7_do_suspend)
stmfd sp!, {r4 - r11, lr} stmfd sp!, {r4 - r11, lr}
mrc p15, 0, r4, c13, c0, 0 @ FCSE/PID mrc p15, 0, r4, c13, c0, 0 @ FCSE/PID
mrc p15, 0, r5, c13, c0, 1 @ Context ID mrc p15, 0, r5, c13, c0, 1 @ Context ID
mrc p15, 0, r6, c13, c0, 3 @ User r/o thread ID
stmia r0!, {r4 - r6}
mrc p15, 0, r6, c3, c0, 0 @ Domain ID mrc p15, 0, r6, c3, c0, 0 @ Domain ID
mrc p15, 0, r7, c2, c0, 0 @ TTB 0 mrc p15, 0, r7, c2, c0, 0 @ TTB 0
mrc p15, 0, r8, c2, c0, 1 @ TTB 1 mrc p15, 0, r8, c2, c0, 1 @ TTB 1
mrc p15, 0, r9, c1, c0, 0 @ Control register mrc p15, 0, r9, c1, c0, 0 @ Control register
mrc p15, 0, r10, c1, c0, 1 @ Auxiliary control register mrc p15, 0, r10, c1, c0, 1 @ Auxiliary control register
mrc p15, 0, r11, c1, c0, 2 @ Co-processor access control mrc p15, 0, r11, c1, c0, 2 @ Co-processor access control
stmia r0, {r4 - r11} stmia r0, {r6 - r11}
ldmfd sp!, {r4 - r11, pc} ldmfd sp!, {r4 - r11, pc}
ENDPROC(cpu_v7_do_suspend) ENDPROC(cpu_v7_do_suspend)
...@@ -230,9 +232,11 @@ ENTRY(cpu_v7_do_resume) ...@@ -230,9 +232,11 @@ ENTRY(cpu_v7_do_resume)
mov ip, #0 mov ip, #0
mcr p15, 0, ip, c8, c7, 0 @ invalidate TLBs mcr p15, 0, ip, c8, c7, 0 @ invalidate TLBs
mcr p15, 0, ip, c7, c5, 0 @ invalidate I cache mcr p15, 0, ip, c7, c5, 0 @ invalidate I cache
ldmia r0, {r4 - r11} ldmia r0!, {r4 - r6}
mcr p15, 0, r4, c13, c0, 0 @ FCSE/PID mcr p15, 0, r4, c13, c0, 0 @ FCSE/PID
mcr p15, 0, r5, c13, c0, 1 @ Context ID mcr p15, 0, r5, c13, c0, 1 @ Context ID
mcr p15, 0, r6, c13, c0, 3 @ User r/o thread ID
ldmia r0, {r6 - r11}
mcr p15, 0, r6, c3, c0, 0 @ Domain ID mcr p15, 0, r6, c3, c0, 0 @ Domain ID
mcr p15, 0, r7, c2, c0, 0 @ TTB 0 mcr p15, 0, r7, c2, c0, 0 @ TTB 0
mcr p15, 0, r8, c2, c0, 1 @ TTB 1 mcr p15, 0, r8, c2, c0, 1 @ TTB 1
...@@ -418,9 +422,9 @@ ENTRY(v7_processor_functions) ...@@ -418,9 +422,9 @@ ENTRY(v7_processor_functions)
.word cpu_v7_dcache_clean_area .word cpu_v7_dcache_clean_area
.word cpu_v7_switch_mm .word cpu_v7_switch_mm
.word cpu_v7_set_pte_ext .word cpu_v7_set_pte_ext
.word 0 .word cpu_v7_suspend_size
.word 0 .word cpu_v7_do_suspend
.word 0 .word cpu_v7_do_resume
.size v7_processor_functions, . - v7_processor_functions .size v7_processor_functions, . - v7_processor_functions
.section ".rodata" .section ".rodata"
......
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
*/ */
#include <linux/init.h> #include <linux/init.h>
#include <asm/traps.h> #include <asm/traps.h>
#include <asm/ptrace.h>
static int cp6_trap(struct pt_regs *regs, unsigned int instr) static int cp6_trap(struct pt_regs *regs, unsigned int instr)
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment