aboutsummaryrefslogtreecommitdiff
path: root/src/soc/amd/common/block/cpu/car/exit_car.S
diff options
context:
space:
mode:
authorMarshall Dawson <marshalldawson3rd@gmail.com>2017-08-09 19:59:20 -0600
committerAaron Durbin <adurbin@chromium.org>2017-09-27 16:31:21 +0000
commitd61e832e53029fd135c877514d3d2d38167aafd6 (patch)
treec371292595cb6cdebfea26f4cd803f677e717c3e /src/soc/amd/common/block/cpu/car/exit_car.S
parent18b477ea4108335eb6d5a4b6f39578cbe5525ac1 (diff)
soc/amd/stoneyridge: Revert CAR teardown wbinvd
Change the cache-as-ram teardown to use invd instead of wbinvd. Save the return and recover the call's return address in chipset_teardown_car. CAR teardown had been modified to use wbinvd to send CAR contents to DRAM backing prior to teardown. This allowed CAR variables, stack, and local variables to be preserved while running the AMD_DISABLE_STACK macro. Using the wbinvd instruction has the side effect of sending all dirty cache contents to DRAM and not only our CAR data. This would likely cause corruption, e.g. during S3 resume. Stoney Ridge now uses a postcar stage and this is no longer a requirement. BUG=b:64768556 Change-Id: I8e6bcb3947f508b1db1a42fd0714bba70074837a Signed-off-by: Marshall Dawson <marshalldawson3rd@gmail.com> Reviewed-on: https://review.coreboot.org/20967 Reviewed-by: Aaron Durbin <adurbin@chromium.org> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Diffstat (limited to 'src/soc/amd/common/block/cpu/car/exit_car.S')
-rw-r--r--src/soc/amd/common/block/cpu/car/exit_car.S3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/soc/amd/common/block/cpu/car/exit_car.S b/src/soc/amd/common/block/cpu/car/exit_car.S
index ac36cb0e4f..f9d056e599 100644
--- a/src/soc/amd/common/block/cpu/car/exit_car.S
+++ b/src/soc/amd/common/block/cpu/car/exit_car.S
@@ -20,6 +20,7 @@
.globl chipset_teardown_car
chipset_teardown_car:
+ pop %esp
/* Disable cache */
movl %cr0, %eax
@@ -33,4 +34,4 @@ chipset_teardown_car:
andl $(~(CR0_CD | CR0_NW)), %eax
movl %eax, %cr0
- ret
+ jmp *%esp