aboutsummaryrefslogtreecommitdiff
path: root/src/arch/x86/c_start.S
diff options
context:
space:
mode:
authorAaron Durbin <adurbin@chromium.org>2018-04-20 01:39:30 -0600
committerAaron Durbin <adurbin@chromium.org>2018-04-26 15:17:08 +0000
commit4b032e457f1377fc06d12214b0450eae48653565 (patch)
treedcf00137ed645aba00a2721b2d75bc46afcb7d8f /src/arch/x86/c_start.S
parente74ba1984dc545c7199c1e90b9ffaa33a44bee5e (diff)
arch/x86: allow idt to be available to link in all stages
Add Kconfig IDT_IN_EVERY_STAGE to optionally specify having the interrupt handling code available to all stages. In order to do this the idt setup is moved to a C module. The vecX entries are made global so that a table of references to all the interrupt vector entry points can be used to dynamically initialize the idt. The ramification for ramstage is that exceptions are initialized later (lib/hardwaremain.c). Not all stages initialize exceptions when this Kconfig variable is selected, but bootblock for the C, stages using assembly_entry.S, and of course ramstage do. Anything left out just needs a call to exception_init() at the right location. BUG=b:72728953 Change-Id: I4146a040e5e43bed7ccc6cb0a7dc2271f1e7b7fa Signed-off-by: Aaron Durbin <adurbin@chromium.org> Reviewed-on: https://review.coreboot.org/25761 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Furquan Shaikh <furquan@google.com>
Diffstat (limited to 'src/arch/x86/c_start.S')
-rw-r--r--src/arch/x86/c_start.S32
1 files changed, 1 insertions, 31 deletions
diff --git a/src/arch/x86/c_start.S b/src/arch/x86/c_start.S
index 6cea5c3167..6426ef3693 100644
--- a/src/arch/x86/c_start.S
+++ b/src/arch/x86/c_start.S
@@ -81,28 +81,6 @@ _start:
push $0
push $0
- /* Initialize the Interrupt Descriptor table */
- leal _idt, %edi
- leal vec0, %ebx
- movl $(0x10 << 16), %eax /* cs selector */
-
-1: movw %bx, %ax
- movl %ebx, %edx
- movw $0x8E00, %dx /* Interrupt gate - dpl=0, present */
- movl %eax, 0(%edi)
- movl %edx, 4(%edi)
- addl $6, %ebx
- addl $8, %edi
- cmpl $_idt_end, %edi
- jne 1b
-
- /* Load the Interrupt descriptor table */
-#ifndef __x86_64__
- lidt idtarg
-#else
- // FIXME port table to x64 - lidt idtarg
-#endif
-
/*
* Now we are finished. Memory is up, data is copied and
* bss is cleared. Now we call the main routine and
@@ -145,7 +123,7 @@ gdb_stub_breakpoint:
jmp int_hand
#endif
- .globl gdt, gdt_end, idtarg
+ .globl gdt, gdt_end
gdtaddr:
.word gdt_end - gdt - 1
@@ -227,14 +205,6 @@ gdt:
#endif
gdt_end:
-idtarg:
- .word _idt_end - _idt - 1 /* limit */
- .long _idt
- .word 0
-_idt:
- .fill 20, 8, 0 # idt is uninitialized
-_idt_end:
-
.section ".text._start", "ax", @progbits
#ifdef __x86_64__
SetCodeSelector: