From c08fdf3decc6a61a9020a7df484d92473f7223e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ky=C3=B6sti=20M=C3=A4lkki?= Date: Tue, 3 Dec 2019 08:04:31 +0200 Subject: binaryPI: Fix failing AP startup MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fix regression with commit 5639736 binaryPI: Drop CAR teardown without POSTCAR_STAGE Occassionally (maybe 1 boot in 10) SMP lapic_cpu_init() fails with following errors in the logs of pcengines/apu2: CPU 0x03 would not start! CPU 0x03 did not initialize! The CPU number is sometimes 0x02, never seen 0x01. Work-around also suggests something to do with cache coherency and MTRRs that is really at fault. As a work-around return the BSP CAR teardown to use wbinvd instead of invd. These platforms do not support S3 resume so this is the easy work-around for the time being. Change-Id: I3dac8785aaf4af5c7c105ec9dd0b95156b7cca21 Signed-off-by: Kyösti Mälkki Reviewed-on: https://review.coreboot.org/c/coreboot/+/37438 Tested-by: build bot (Jenkins) Reviewed-by: Michał Żygowski Reviewed-by: Arthur Heymans Reviewed-by: Angel Pons --- src/vendorcode/amd/pi/00630F01/binaryPI/gcccar.inc | 3 ++- src/vendorcode/amd/pi/00660F01/binaryPI/gcccar.inc | 3 ++- src/vendorcode/amd/pi/00730F01/binaryPI/gcccar.inc | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/vendorcode/amd/pi/00630F01/binaryPI/gcccar.inc b/src/vendorcode/amd/pi/00630F01/binaryPI/gcccar.inc index 4d903e686f..cecf5ca230 100644 --- a/src/vendorcode/amd/pi/00630F01/binaryPI/gcccar.inc +++ b/src/vendorcode/amd/pi/00630F01/binaryPI/gcccar.inc @@ -904,7 +904,8 @@ fam15_disable_stack_remote_read_exit: btr $INVD_WBINVD, %eax # Disable INVD -> WBINVD conversion _WRMSR - invd + # An invd here sometimes breaks AP CPU startup ? + wbinvd #.if (bh == 01h) || (bh == 03h) ; Is this TN or KV? cmp $01, %bh diff --git a/src/vendorcode/amd/pi/00660F01/binaryPI/gcccar.inc b/src/vendorcode/amd/pi/00660F01/binaryPI/gcccar.inc index b208cc14ca..88e1a7d1be 100644 --- a/src/vendorcode/amd/pi/00660F01/binaryPI/gcccar.inc +++ b/src/vendorcode/amd/pi/00660F01/binaryPI/gcccar.inc @@ -639,7 +639,8 @@ fam15_disable_stack_remote_read_exit: btr $INVD_WBINVD, %eax # Disable INVD -> WBINVD conversion _WRMSR - invd + # An invd here sometimes breaks AP CPU startup ? + wbinvd # #.if (bh == 01h) || (bh == 03h) ; Is this TN or KM? # cmp $01, %bh diff --git a/src/vendorcode/amd/pi/00730F01/binaryPI/gcccar.inc b/src/vendorcode/amd/pi/00730F01/binaryPI/gcccar.inc index 7d86a31c69..c246b99395 100644 --- a/src/vendorcode/amd/pi/00730F01/binaryPI/gcccar.inc +++ b/src/vendorcode/amd/pi/00730F01/binaryPI/gcccar.inc @@ -603,7 +603,8 @@ fam16_disable_stack_remote_read_exit: btr $INVD_WBINVD, %eax # Disable INVD -> WBINVD conversion _WRMSR - invd + # An invd here sometimes breaks AP CPU startup + wbinvd #Do Standard Family 16 work mov $HWCR, %ecx # MSR:C001_0015h -- cgit v1.2.3