arch/x86: Clean up bootblock assembly
We have identical gdtptr16 and gdtptr. The reference in gdtptr_offset calculation is not accounted for when considering --gc-sections, so to support linking gdt_init.S separately add dummy use of gdtptr symbol. Realmode execution already accessed gdt that was located outside [_start16bit,_estart16bit] region. Remove latter symbol as the former was not really a start of region, but entry point symbol. With the romcc bootblock solution, entry32.inc may have been linked into romstage before, but the !ENV_BOOTBLOCK case seems obsolete now. Change-Id: I0a3f6aeb217ca4e38b936b8c9ec8b0b69732cbb9 Signed-off-by: Kyösti Mälkki <kyosti.malkki@gmail.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/47964 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Arthur Heymans <arthur@aheymans.xyz>
This commit is contained in:
parent
5283c337bf
commit
dc873cc0c6
|
@ -1,6 +1,6 @@
|
||||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||||
|
|
||||||
gdtptr16_offset = gdtptr16 & 0xffff;
|
gdtptr_offset = gdtptr & 0xffff;
|
||||||
nullidt_offset = nullidt & 0xffff;
|
nullidt_offset = nullidt & 0xffff;
|
||||||
|
|
||||||
/* Symbol _start16bit must be aligned to 4kB to start AP CPUs with
|
/* Symbol _start16bit must be aligned to 4kB to start AP CPUs with
|
||||||
|
|
|
@ -108,7 +108,7 @@ _start16bit:
|
||||||
movw $nullidt_offset, %bx
|
movw $nullidt_offset, %bx
|
||||||
subw %ax, %bx
|
subw %ax, %bx
|
||||||
lidt %cs:(%bx)
|
lidt %cs:(%bx)
|
||||||
movw $gdtptr16_offset, %bx
|
movw $gdtptr_offset, %bx
|
||||||
subw %ax, %bx
|
subw %ax, %bx
|
||||||
lgdtl %cs:(%bx)
|
lgdtl %cs:(%bx)
|
||||||
|
|
||||||
|
@ -127,11 +127,8 @@ _start16bit:
|
||||||
* The gdt is defined in entry32.inc, it has a 4 Gb code segment
|
* The gdt is defined in entry32.inc, it has a 4 Gb code segment
|
||||||
* at 0x08, and a 4 GB data segment at 0x10;
|
* at 0x08, and a 4 GB data segment at 0x10;
|
||||||
*/
|
*/
|
||||||
.align 4
|
__gdtptr:
|
||||||
.globl gdtptr16
|
.long gdtptr
|
||||||
gdtptr16:
|
|
||||||
.word gdt_end - gdt -1 /* compute the table limit */
|
|
||||||
.long gdt /* we know the offset */
|
|
||||||
|
|
||||||
.align 4
|
.align 4
|
||||||
.globl nullidt
|
.globl nullidt
|
||||||
|
@ -139,7 +136,3 @@ nullidt:
|
||||||
.word 0 /* limit */
|
.word 0 /* limit */
|
||||||
.long 0
|
.long 0
|
||||||
.word 0
|
.word 0
|
||||||
|
|
||||||
.globl _estart16bit
|
|
||||||
_estart16bit:
|
|
||||||
.code32
|
|
||||||
|
|
|
@ -8,29 +8,11 @@
|
||||||
|
|
||||||
.code32
|
.code32
|
||||||
/*
|
/*
|
||||||
* When we come here we are in protected mode. We expand
|
* When we come here we are in protected mode.
|
||||||
* the stack and copies the data segment from ROM to the
|
|
||||||
* memory.
|
|
||||||
*
|
|
||||||
* After that, we call the chipset bootstrap routine that
|
|
||||||
* does what is left of the chipset initialization.
|
|
||||||
*
|
|
||||||
* NOTE aligned to 4 so that we are sure that the prefetch
|
* NOTE aligned to 4 so that we are sure that the prefetch
|
||||||
* cache will be reloaded.
|
* cache will be reloaded.
|
||||||
*
|
|
||||||
* In the bootblock there is already a ljmp to __protected_start and
|
|
||||||
* the reset vector jumps to symbol _start16bit in entry16.inc from
|
|
||||||
* the reset vectors's symbol which is _start. Therefore, don't
|
|
||||||
* expose the _start symbol for bootblock.
|
|
||||||
*/
|
*/
|
||||||
.align 4
|
.align 4
|
||||||
#if !ENV_BOOTBLOCK
|
|
||||||
.globl _start
|
|
||||||
_start:
|
|
||||||
#endif
|
|
||||||
|
|
||||||
lgdt %cs:gdtptr
|
|
||||||
ljmp $ROM_CODE_SEG, $__protected_start
|
|
||||||
|
|
||||||
__protected_start:
|
__protected_start:
|
||||||
/* Save the BIST value */
|
/* Save the BIST value */
|
||||||
|
|
|
@ -102,7 +102,7 @@ SECTIONS
|
||||||
|
|
||||||
#if ENV_BOOTBLOCK
|
#if ENV_BOOTBLOCK
|
||||||
|
|
||||||
gdtptr16_offset = gdtptr16 & 0xffff;
|
gdtptr_offset = gdtptr & 0xffff;
|
||||||
nullidt_offset = nullidt & 0xffff;
|
nullidt_offset = nullidt & 0xffff;
|
||||||
|
|
||||||
SECTIONS {
|
SECTIONS {
|
||||||
|
|
Loading…
Reference in New Issue