cpu/intel: Fix clearing MTRR for clang 64bit
Clang generates R_X86_64_32S symbols that get truncated. TESTED: - prodrive/hermes boots with GCC and clang - MTRR are properly cleared (tested by filling in both MTRR_FIX_64K_00000 and MTRR_FIX_4K_F8000 before clearing) Change-Id: I6a5139f7029b6f35b44377f105dded06f6d9cbf9 Signed-off-by: Arthur Heymans <arthur@aheymans.xyz> Reviewed-on: https://review.coreboot.org/c/coreboot/+/69388 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Angel Pons <th3fanbus@gmail.com>
This commit is contained in:
parent
1c9a8d8083
commit
2834d98f52
|
@ -32,15 +32,16 @@ wait_for_sipi:
|
||||||
post_code(POST_SOC_CLEAR_FIXED_MTRRS)
|
post_code(POST_SOC_CLEAR_FIXED_MTRRS)
|
||||||
|
|
||||||
/* Clear/disable fixed MTRRs */
|
/* Clear/disable fixed MTRRs */
|
||||||
mov $fixed_mtrr_list_size, %ebx
|
mov $fixed_mtrr_list, %ebx
|
||||||
xor %eax, %eax
|
xor %eax, %eax
|
||||||
xor %edx, %edx
|
xor %edx, %edx
|
||||||
|
|
||||||
clear_fixed_mtrr:
|
clear_fixed_mtrr:
|
||||||
add $-2, %ebx
|
movzwl (%ebx), %ecx
|
||||||
movzwl fixed_mtrr_list(%ebx), %ecx
|
|
||||||
wrmsr
|
wrmsr
|
||||||
jnz clear_fixed_mtrr
|
add $2, %ebx
|
||||||
|
cmp $fixed_mtrr_list_end, %ebx
|
||||||
|
jl clear_fixed_mtrr
|
||||||
|
|
||||||
/* Figure out how many MTRRs we have, and clear them out */
|
/* Figure out how many MTRRs we have, and clear them out */
|
||||||
mov $MTRR_CAP_MSR, %ecx
|
mov $MTRR_CAP_MSR, %ecx
|
||||||
|
@ -202,6 +203,6 @@ fixed_mtrr_list:
|
||||||
.word MTRR_FIX_4K_E8000
|
.word MTRR_FIX_4K_E8000
|
||||||
.word MTRR_FIX_4K_F0000
|
.word MTRR_FIX_4K_F0000
|
||||||
.word MTRR_FIX_4K_F8000
|
.word MTRR_FIX_4K_F8000
|
||||||
fixed_mtrr_list_size = . - fixed_mtrr_list
|
fixed_mtrr_list_end:
|
||||||
|
|
||||||
_cache_as_ram_setup_end:
|
_cache_as_ram_setup_end:
|
||||||
|
|
|
@ -43,15 +43,16 @@ wait_for_sipi:
|
||||||
|
|
||||||
post_code(POST_SOC_CLEAR_FIXED_MTRRS)
|
post_code(POST_SOC_CLEAR_FIXED_MTRRS)
|
||||||
/* Clear/disable fixed MTRRs */
|
/* Clear/disable fixed MTRRs */
|
||||||
mov $fixed_mtrr_list_size, %ebx
|
mov $fixed_mtrr_list, %ebx
|
||||||
xor %eax, %eax
|
xor %eax, %eax
|
||||||
xor %edx, %edx
|
xor %edx, %edx
|
||||||
|
|
||||||
clear_fixed_mtrr:
|
clear_fixed_mtrr:
|
||||||
add $-2, %ebx
|
movzwl (%ebx), %ecx
|
||||||
movzwl fixed_mtrr_list(%ebx), %ecx
|
|
||||||
wrmsr
|
wrmsr
|
||||||
jnz clear_fixed_mtrr
|
add $2, %ebx
|
||||||
|
cmp $fixed_mtrr_list_end, %ebx
|
||||||
|
jl clear_fixed_mtrr
|
||||||
|
|
||||||
/* Zero out all variable range MTRRs. */
|
/* Zero out all variable range MTRRs. */
|
||||||
movl $MTRR_CAP_MSR, %ecx
|
movl $MTRR_CAP_MSR, %ecx
|
||||||
|
@ -256,6 +257,6 @@ fixed_mtrr_list:
|
||||||
.word MTRR_FIX_4K_E8000
|
.word MTRR_FIX_4K_E8000
|
||||||
.word MTRR_FIX_4K_F0000
|
.word MTRR_FIX_4K_F0000
|
||||||
.word MTRR_FIX_4K_F8000
|
.word MTRR_FIX_4K_F8000
|
||||||
fixed_mtrr_list_size = . - fixed_mtrr_list
|
fixed_mtrr_list_end:
|
||||||
|
|
||||||
_cache_as_ram_setup_end:
|
_cache_as_ram_setup_end:
|
||||||
|
|
|
@ -28,15 +28,16 @@ cache_as_ram:
|
||||||
jz ap_init
|
jz ap_init
|
||||||
|
|
||||||
/* Clear/disable fixed MTRRs */
|
/* Clear/disable fixed MTRRs */
|
||||||
mov $fixed_mtrr_list_size, %ebx
|
mov $fixed_mtrr_list, %ebx
|
||||||
xor %eax, %eax
|
xor %eax, %eax
|
||||||
xor %edx, %edx
|
xor %edx, %edx
|
||||||
|
|
||||||
clear_fixed_mtrr:
|
clear_fixed_mtrr:
|
||||||
add $-2, %ebx
|
movzwl (%ebx), %ecx
|
||||||
movzwl fixed_mtrr_list(%ebx), %ecx
|
|
||||||
wrmsr
|
wrmsr
|
||||||
jnz clear_fixed_mtrr
|
add $2, %ebx
|
||||||
|
cmp $fixed_mtrr_list_end, %ebx
|
||||||
|
jl clear_fixed_mtrr
|
||||||
|
|
||||||
/* Figure out how many MTRRs we have, and clear them out */
|
/* Figure out how many MTRRs we have, and clear them out */
|
||||||
mov $MTRR_CAP_MSR, %ecx
|
mov $MTRR_CAP_MSR, %ecx
|
||||||
|
@ -402,6 +403,6 @@ fixed_mtrr_list:
|
||||||
.word MTRR_FIX_4K_E8000
|
.word MTRR_FIX_4K_E8000
|
||||||
.word MTRR_FIX_4K_F0000
|
.word MTRR_FIX_4K_F0000
|
||||||
.word MTRR_FIX_4K_F8000
|
.word MTRR_FIX_4K_F8000
|
||||||
fixed_mtrr_list_size = . - fixed_mtrr_list
|
fixed_mtrr_list_end:
|
||||||
|
|
||||||
_cache_as_ram_setup_end:
|
_cache_as_ram_setup_end:
|
||||||
|
|
|
@ -101,15 +101,16 @@ no_reset:
|
||||||
post_code(POST_SOC_NO_RESET)
|
post_code(POST_SOC_NO_RESET)
|
||||||
|
|
||||||
/* Clear/disable fixed MTRRs */
|
/* Clear/disable fixed MTRRs */
|
||||||
mov $fixed_mtrr_list_size, %ebx
|
mov $fixed_mtrr_list, %ebx
|
||||||
xor %eax, %eax
|
xor %eax, %eax
|
||||||
xor %edx, %edx
|
xor %edx, %edx
|
||||||
|
|
||||||
clear_fixed_mtrr:
|
clear_fixed_mtrr:
|
||||||
add $-2, %ebx
|
movzwl (%ebx), %ecx
|
||||||
movzwl fixed_mtrr_list(%ebx), %ecx
|
|
||||||
wrmsr
|
wrmsr
|
||||||
jnz clear_fixed_mtrr
|
add $2, %ebx
|
||||||
|
cmp $fixed_mtrr_list_end, %ebx
|
||||||
|
jl clear_fixed_mtrr
|
||||||
|
|
||||||
post_code(POST_SOC_CLEAR_FIXED_MTRRS)
|
post_code(POST_SOC_CLEAR_FIXED_MTRRS)
|
||||||
|
|
||||||
|
@ -317,7 +318,7 @@ fixed_mtrr_list:
|
||||||
.word MTRR_FIX_4K_E8000
|
.word MTRR_FIX_4K_E8000
|
||||||
.word MTRR_FIX_4K_F0000
|
.word MTRR_FIX_4K_F0000
|
||||||
.word MTRR_FIX_4K_F8000
|
.word MTRR_FIX_4K_F8000
|
||||||
fixed_mtrr_list_size = . - fixed_mtrr_list
|
fixed_mtrr_list_end:
|
||||||
|
|
||||||
#if CONFIG(INTEL_CAR_NEM)
|
#if CONFIG(INTEL_CAR_NEM)
|
||||||
.global car_nem
|
.global car_nem
|
||||||
|
|
Loading…
Reference in New Issue