cpu/qemu-x86/cache_as_ram_bootblock: Fix wrong instruction

The shld instruction does an arithmetic shift left on 64bit operants,
but it's not the instruction we want, because what it actually does is
shifting by cl, and storing the result in address 32.

This wasn't noticed with QEMU as the DRAM is up and address 32 is valid.
On real hardware when CAR is running this instruction causes a crash.

Replace the instruction with the correct 64bit arithmetic left shift.

Change-Id: Iedad9f4b693b1ea05898456eac2050a9389f6f19
Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/45820
Reviewed-by: Christian Walter <christian.walter@9elements.com>
Reviewed-by: Arthur Heymans <arthur@aheymans.xyz>
Reviewed-by: Angel Pons <th3fanbus@gmail.com>
Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
Patrick Rudolph 2020-09-29 13:32:06 +02:00 committed by Patrick Georgi
parent e298391337
commit 7a04222903
1 changed files with 1 additions and 1 deletions

View File

@ -33,7 +33,7 @@ cache_as_ram:
/* Restore the BIST result and timestamps. */
#if defined(__x86_64__)
movd %mm2, %rdi
shld %rdi, 32
shlq $32, %rdi
movd %mm1, %rsi
or %rsi, %rdi