aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike Frysinger <vapier.adi@gmail.com>2008-10-27 23:03:09 -0400
committerBryan Wu <cooloney@kernel.org>2008-10-27 23:03:09 -0400
commit6ad2b84cf014d91a9dffa3f8edb008430fbdb445 (patch)
treeedf7a13c83fbcba75fa1465c2a4cbffb08c42960
parentfe8015ce2588e3ffe65284a2883703355804276e (diff)
Blackfin arch: add an option to allow people to stick exception stack into L1 scratch
allow people to stick exception stack into L1 scratch and make sure it gets placed into .bss sections rather than .data Signed-off-by: Mike Frysinger <vapier.adi@gmail.com> Signed-off-by: Bryan Wu <cooloney@kernel.org>
-rw-r--r--arch/blackfin/Kconfig11
-rw-r--r--arch/blackfin/mach-common/entry.S21
2 files changed, 26 insertions, 6 deletions
diff --git a/arch/blackfin/Kconfig b/arch/blackfin/Kconfig
index ac76baac1df3..e37e993431b9 100644
--- a/arch/blackfin/Kconfig
+++ b/arch/blackfin/Kconfig
@@ -667,6 +667,17 @@ config APP_STACK_L1
667 667
668 Currently only works with FLAT binaries. 668 Currently only works with FLAT binaries.
669 669
670config EXCEPTION_L1_SCRATCH
671 bool "Locate exception stack in L1 Scratch Memory"
672 default n
673 depends on !APP_STACK_L1 && !SYSCALL_TAB_L1
674 help
675 Whenever an exception occurs, use the L1 Scratch memory for
676 stack storage. You cannot place the stacks of FLAT binaries
677 in L1 when using this option.
678
679 If you don't use L1 Scratch, then you should say Y here.
680
670comment "Speed Optimizations" 681comment "Speed Optimizations"
671config BFIN_INS_LOWOVERHEAD 682config BFIN_INS_LOWOVERHEAD
672 bool "ins[bwl] low overhead, higher interrupt latency" 683 bool "ins[bwl] low overhead, higher interrupt latency"
diff --git a/arch/blackfin/mach-common/entry.S b/arch/blackfin/mach-common/entry.S
index bde6dc4e2614..ad4049882291 100644
--- a/arch/blackfin/mach-common/entry.S
+++ b/arch/blackfin/mach-common/entry.S
@@ -1539,14 +1539,23 @@ ENTRY(_sys_call_table)
1539 .endr 1539 .endr
1540END(_sys_call_table) 1540END(_sys_call_table)
1541 1541
1542_exception_stack:
1543 .rept 1024
1544 .long 0;
1545 .endr
1546_exception_stack_top:
1547
1548#if ANOMALY_05000261 1542#if ANOMALY_05000261
1549/* Used by the assembly entry point to work around an anomaly. */ 1543/* Used by the assembly entry point to work around an anomaly. */
1550_last_cplb_fault_retx: 1544_last_cplb_fault_retx:
1551 .long 0; 1545 .long 0;
1552#endif 1546#endif
1547
1548#ifdef CONFIG_EXCEPTION_L1_SCRATCH
1549/* .section .l1.bss.scratch */
1550.set _exception_stack_top, L1_SCRATCH_START + L1_SCRATCH_LENGTH
1551#else
1552#ifdef CONFIG_SYSCALL_TAB_L1
1553.section .l1.bss
1554#else
1555.bss
1556#endif
1557_exception_stack:
1558.size _exception_stack, 1024 * 4
1559.set _exception_stack_top, _exception_stack + 1024 * 4
1560.size _exception_stack_top, 0
1561#endif