mirror of
https://github.com/fail0verflow/switch-coreboot.git
synced 2025-05-04 01:39:18 -04:00
This reverts commit 042c1461fb
.
It turned out that sending IPIs via broadcast doesn't work on
Sandybridge. We tried to come up with a solution, but didn't
found any so far. So revert the code for now until we have
a working solution.
Change-Id: I7dd1cba5a4c1e4b0af366b20e8263b1f6f4b9714
Signed-off-by: Sven Schnelle <svens@stackframe.org>
Reviewed-on: http://review.coreboot.org/1381
Tested-by: build bot (Jenkins)
Reviewed-by: Ronald G. Minnich <rminnich@gmail.com>
62 lines
1.1 KiB
ArmAsm
62 lines
1.1 KiB
ArmAsm
#include <cpu/x86/mtrr.h>
|
|
#include <cpu/x86/lapic_def.h>
|
|
|
|
.text
|
|
.globl _secondary_start, _secondary_start_end
|
|
.balign 4096
|
|
_secondary_start:
|
|
.code16
|
|
cli
|
|
xorl %eax, %eax
|
|
movl %eax, %cr3 /* Invalidate TLB*/
|
|
|
|
/* On hyper threaded cpus, invalidating the cache here is
|
|
* very very bad. Don't.
|
|
*/
|
|
|
|
/* setup the data segment */
|
|
movw %cs, %ax
|
|
movw %ax, %ds
|
|
|
|
data32 lgdt gdtaddr - _secondary_start
|
|
|
|
movl %cr0, %eax
|
|
andl $0x7FFAFFD1, %eax /* PG,AM,WP,NE,TS,EM,MP = 0 */
|
|
orl $0x60000001, %eax /* CD, NW, PE = 1 */
|
|
movl %eax, %cr0
|
|
|
|
ljmpl $0x10, $__ap_protected_start
|
|
|
|
gdtaddr:
|
|
.word gdt_limit /* the table limit */
|
|
.long gdt /* we know the offset */
|
|
|
|
_secondary_start_end:
|
|
|
|
ap_protected_start:
|
|
.code32
|
|
lgdt gdtaddr
|
|
ljmpl $0x10, $__ap_protected_start
|
|
|
|
__ap_protected_start:
|
|
|
|
movw $0x18, %ax
|
|
movw %ax, %ds
|
|
movw %ax, %es
|
|
movw %ax, %ss
|
|
movw %ax, %fs
|
|
movw %ax, %gs
|
|
|
|
/* Load the Interrupt descriptor table */
|
|
lidt idtarg
|
|
|
|
/* Set the stack pointer, and flag that we are done */
|
|
xorl %eax, %eax
|
|
movl secondary_stack, %esp
|
|
movl %eax, secondary_stack
|
|
|
|
call secondary_cpu_init
|
|
1: hlt
|
|
jmp 1b
|
|
|
|
.code32
|