diff options
author | Alexey Brodkin <abrodkin@synopsys.com> | 2014-12-24 17:00:29 +0300 |
---|---|---|
committer | Alexey Brodkin <abrodkin@synopsys.com> | 2015-01-15 22:38:42 +0300 |
commit | dcb431e723f132d0df63fb1e711042a6bbfc3a6a (patch) | |
tree | d1d734a4f5809d232de35e3fb504b5f00af7cee1 /arch/arc | |
parent | c0e9535e1d582ec089c743b705752392fcf3d9a2 (diff) | |
download | u-boot-dcb431e723f132d0df63fb1e711042a6bbfc3a6a.tar.gz |
arc: add dependences on MMU presence
Depending on MMU presence in CPU there're differences in HW behavior.
For example address of instruction that caused exception is put in
ECR register if MMU exists and in ERET register otherwise.
Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
Signed-off-by: Igor Guryanov <guryanov@synopsys.com>
Diffstat (limited to 'arch/arc')
-rw-r--r-- | arch/arc/config.mk | 4 | ||||
-rw-r--r-- | arch/arc/cpu/arc700/start.S | 18 |
2 files changed, 18 insertions, 4 deletions
diff --git a/arch/arc/config.mk b/arch/arc/config.mk index e408800a91..5321987a56 100644 --- a/arch/arc/config.mk +++ b/arch/arc/config.mk @@ -21,6 +21,10 @@ ifeq ($(CROSS_COMPILE),) CROSS_COMPILE := $(ARC_CROSS_COMPILE) endif +ifdef CONFIG_ARC_MMU_VER +CONFIG_MMU = 1 +endif + PLATFORM_CPPFLAGS += -ffixed-r25 -D__ARC__ -gdwarf-2 # Needed for relocation diff --git a/arch/arc/cpu/arc700/start.S b/arch/arc/cpu/arc700/start.S index 4d505bfb7c..2318282bf4 100644 --- a/arch/arc/cpu/arc700/start.S +++ b/arch/arc/cpu/arc700/start.S @@ -78,6 +78,16 @@ PUSHAX %erbta .endm +.macro SAVE_EXCEPTION_SOURCE +#ifdef CONFIG_MMU + /* If MMU exists exception faulting address is loaded in EFA reg */ + lr %r0, [%efa] +#else + /* Otherwise in ERET (exception return) reg */ + lr %r0, [%eret] +#endif +.endm + .align 4 .globl _start _start: @@ -102,13 +112,13 @@ _start: memory_error: SAVE_ALL_SYS - lr %r0, [%efa] + SAVE_EXCEPTION_SOURCE mov %r1, %sp j do_memory_error instruction_error: SAVE_ALL_SYS - lr %r0, [%efa] + SAVE_EXCEPTION_SOURCE mov %r1, %sp j do_instruction_error @@ -119,7 +129,7 @@ interrupt_handler: EV_MachineCheck: SAVE_ALL_SYS - lr %r0, [%efa] + SAVE_EXCEPTION_SOURCE mov %r1, %sp j do_machine_check_fault @@ -135,7 +145,7 @@ EV_TLBMissD: EV_TLBProtV: SAVE_ALL_SYS - lr %r0, [%efa] + SAVE_EXCEPTION_SOURCE mov %r1, %sp j do_tlb_prot_violation |