diff options
author | Arthur Heymans <arthur@aheymans.xyz> | 2022-11-08 15:06:42 +0100 |
---|---|---|
committer | Felix Held <felix-coreboot@felixheld.de> | 2022-12-16 17:20:32 +0000 |
commit | 2834d98f523e5580642fdf92723045edb3a8b0ec (patch) | |
tree | 83225e03cd7f7c2fa70149ac8af6a5f045dd9bd0 /src/cpu | |
parent | 1c9a8d8083f04090a5caedfbb05c32d61b035897 (diff) |
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>
Diffstat (limited to 'src/cpu')
-rw-r--r-- | src/cpu/intel/car/core2/cache_as_ram.S | 11 | ||||
-rw-r--r-- | src/cpu/intel/car/non-evict/cache_as_ram.S | 11 | ||||
-rw-r--r-- | src/cpu/intel/car/p4-netburst/cache_as_ram.S | 11 |
3 files changed, 18 insertions, 15 deletions
diff --git a/src/cpu/intel/car/core2/cache_as_ram.S b/src/cpu/intel/car/core2/cache_as_ram.S index fffe3f80b4..b9104e624e 100644 --- a/src/cpu/intel/car/core2/cache_as_ram.S +++ b/src/cpu/intel/car/core2/cache_as_ram.S @@ -32,15 +32,16 @@ wait_for_sipi: post_code(POST_SOC_CLEAR_FIXED_MTRRS) /* Clear/disable fixed MTRRs */ - mov $fixed_mtrr_list_size, %ebx + mov $fixed_mtrr_list, %ebx xor %eax, %eax xor %edx, %edx clear_fixed_mtrr: - add $-2, %ebx - movzwl fixed_mtrr_list(%ebx), %ecx + movzwl (%ebx), %ecx 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 */ mov $MTRR_CAP_MSR, %ecx @@ -202,6 +203,6 @@ fixed_mtrr_list: .word MTRR_FIX_4K_E8000 .word MTRR_FIX_4K_F0000 .word MTRR_FIX_4K_F8000 -fixed_mtrr_list_size = . - fixed_mtrr_list +fixed_mtrr_list_end: _cache_as_ram_setup_end: diff --git a/src/cpu/intel/car/non-evict/cache_as_ram.S b/src/cpu/intel/car/non-evict/cache_as_ram.S index 2ac660c9aa..d47fa725f1 100644 --- a/src/cpu/intel/car/non-evict/cache_as_ram.S +++ b/src/cpu/intel/car/non-evict/cache_as_ram.S @@ -43,15 +43,16 @@ wait_for_sipi: post_code(POST_SOC_CLEAR_FIXED_MTRRS) /* Clear/disable fixed MTRRs */ - mov $fixed_mtrr_list_size, %ebx + mov $fixed_mtrr_list, %ebx xor %eax, %eax xor %edx, %edx clear_fixed_mtrr: - add $-2, %ebx - movzwl fixed_mtrr_list(%ebx), %ecx + movzwl (%ebx), %ecx wrmsr - jnz clear_fixed_mtrr + add $2, %ebx + cmp $fixed_mtrr_list_end, %ebx + jl clear_fixed_mtrr /* Zero out all variable range MTRRs. */ movl $MTRR_CAP_MSR, %ecx @@ -256,6 +257,6 @@ fixed_mtrr_list: .word MTRR_FIX_4K_E8000 .word MTRR_FIX_4K_F0000 .word MTRR_FIX_4K_F8000 -fixed_mtrr_list_size = . - fixed_mtrr_list +fixed_mtrr_list_end: _cache_as_ram_setup_end: diff --git a/src/cpu/intel/car/p4-netburst/cache_as_ram.S b/src/cpu/intel/car/p4-netburst/cache_as_ram.S index 01abdf884f..efd0d17d54 100644 --- a/src/cpu/intel/car/p4-netburst/cache_as_ram.S +++ b/src/cpu/intel/car/p4-netburst/cache_as_ram.S @@ -28,15 +28,16 @@ cache_as_ram: jz ap_init /* Clear/disable fixed MTRRs */ - mov $fixed_mtrr_list_size, %ebx + mov $fixed_mtrr_list, %ebx xor %eax, %eax xor %edx, %edx clear_fixed_mtrr: - add $-2, %ebx - movzwl fixed_mtrr_list(%ebx), %ecx + movzwl (%ebx), %ecx 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 */ mov $MTRR_CAP_MSR, %ecx @@ -402,6 +403,6 @@ fixed_mtrr_list: .word MTRR_FIX_4K_E8000 .word MTRR_FIX_4K_F0000 .word MTRR_FIX_4K_F8000 -fixed_mtrr_list_size = . - fixed_mtrr_list +fixed_mtrr_list_end: _cache_as_ram_setup_end: |