From b6e9021b162ebe73d67a4d75c3e304fb2727860d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ky=C3=B6sti=20M=C3=A4lkki?= Date: Sun, 4 Dec 2016 22:17:37 +0200 Subject: [PATCH] intel 82801dx/gx/ix: Commit SMM relocation code to DRAM MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Make sure relocation code reaches DRAM before issuing any SMIs. Snooping and cache coherency may have undefined behaviour as CPUs do not have uniform MTRR layout yet. Change-Id: I47a7d684e05ff8c1c2f1f6a5bf8c0bbc561d9eac Signed-off-by: Kyösti Mälkki Reviewed-on: https://review.coreboot.org/17712 Tested-by: build bot (Jenkins) Reviewed-by: Aaron Durbin --- src/southbridge/intel/i82801dx/smi.c | 1 + src/southbridge/intel/i82801gx/smi.c | 1 + src/southbridge/intel/i82801ix/smi.c | 1 + 3 files changed, 3 insertions(+) diff --git a/src/southbridge/intel/i82801dx/smi.c b/src/southbridge/intel/i82801dx/smi.c index e8b8ce7a62..71ef5fd8ee 100644 --- a/src/southbridge/intel/i82801dx/smi.c +++ b/src/southbridge/intel/i82801dx/smi.c @@ -252,6 +252,7 @@ static void smm_relocate(void) /* copy the SMM relocation code */ memcpy((void *)0x38000, &smm_relocation_start, &smm_relocation_end - &smm_relocation_start); + wbinvd(); printk(BIOS_DEBUG, "\n"); dump_smi_status(reset_smi_status()); diff --git a/src/southbridge/intel/i82801gx/smi.c b/src/southbridge/intel/i82801gx/smi.c index 01fbbfbcb7..3487aabd56 100644 --- a/src/southbridge/intel/i82801gx/smi.c +++ b/src/southbridge/intel/i82801gx/smi.c @@ -252,6 +252,7 @@ static void smm_relocate(void) /* copy the SMM relocation code */ memcpy((void *)0x38000, &smm_relocation_start, &smm_relocation_end - &smm_relocation_start); + wbinvd(); printk(BIOS_DEBUG, "\n"); dump_smi_status(reset_smi_status()); diff --git a/src/southbridge/intel/i82801ix/smi.c b/src/southbridge/intel/i82801ix/smi.c index dd0915a90f..358a1a9ee7 100644 --- a/src/southbridge/intel/i82801ix/smi.c +++ b/src/southbridge/intel/i82801ix/smi.c @@ -256,6 +256,7 @@ static void smm_relocate(void) /* copy the SMM relocation code */ memcpy((void *)0x38000, &smm_relocation_start, &smm_relocation_end - &smm_relocation_start); + wbinvd(); printk(BIOS_DEBUG, "\n"); dump_smi_status(reset_smi_status());