[coreboot-gerrit] Patch set updated for coreboot: a6ac2f6 MP Spec: Correct the Virtual Wire assignment

Mike Loptien (mike.loptien@se-eng.com) gerrit at coreboot.org
Thu Jun 12 18:51:21 CEST 2014


Mike Loptien (mike.loptien at se-eng.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/5977

-gerrit

commit a6ac2f6dd039e119e9b7124d3ccfcc7ebe6bb787
Author: Mike Loptien <mike.loptien at se-eng.com>
Date:   Wed Jun 11 14:20:48 2014 -0600

    MP Spec: Correct the Virtual Wire assignment
    
    Virtual Wire mode is set by writing 0 to the the MPTable
    Feature2 bit field 'IMCR'.  The virtualwire variable was
    initially defined as writing a 1 to this bit field which
    would actually set PIC mode instead of Virtual Wire mode.
    However, nearly every mainboard called the MPTables with
    virtualwire = 0, which actually had the effect of setting
    Virtual Wire mode. I am correcting the definition but
    leaving the call to write the MPTables with virtualwire = 0,
    which is how most mainboards are already setting the tables
    up.
    
    See the MP Spec table 4-1 for more details:
    	Bit 7: IMCRP. When the IMCR presence bit is
    	set, the IMCR is present and PIC Mode is
    	implemented; otherwise, Virtual Wire Mode is
    	implemented.
    
    http://download.intel.com/design/archives/processors/pro/docs/24201606.pdf
    
    Change-Id: I039d88134aabd55166c2b68aa842bacbfcc0f42b
    Signed-off-by: Mike Loptien <mike.loptien at se-eng.com>
---
 src/arch/x86/boot/mpspec.c             | 2 +-
 src/arch/x86/include/arch/smp/mpspec.h | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/arch/x86/boot/mpspec.c b/src/arch/x86/boot/mpspec.c
index e66535a..cd2b142 100644
--- a/src/arch/x86/boot/mpspec.c
+++ b/src/arch/x86/boot/mpspec.c
@@ -89,7 +89,7 @@ static void *smp_write_floating_table_physaddr(unsigned long addr, unsigned long
 	mf->mpf_specification = 4;
 	mf->mpf_checksum = 0;
 	mf->mpf_feature1 = 0;
-	mf->mpf_feature2 = virtualwire?MP_FEATURE_VIRTUALWIRE:0;
+	mf->mpf_feature2 = virtualwire?MP_FEATURE_PIC:MP_FEATURE_VIRTUALWIRE;
 	mf->mpf_feature3 = 0;
 	mf->mpf_feature4 = 0;
 	mf->mpf_feature5 = 0;
diff --git a/src/arch/x86/include/arch/smp/mpspec.h b/src/arch/x86/include/arch/smp/mpspec.h
index fe3ce68..725718a 100644
--- a/src/arch/x86/include/arch/smp/mpspec.h
+++ b/src/arch/x86/include/arch/smp/mpspec.h
@@ -52,8 +52,8 @@ struct intel_mp_floating
 	unsigned char mpf_checksum;	/* Checksum (makes sum 0)	*/
 	unsigned char mpf_feature1;	/* Standard or configuration ? 	*/
 	unsigned char mpf_feature2;	/* Bit7 set for IMCR|PIC	*/
-#define MP_FEATURE_VIRTUALWIRE (1 << 7)
-#define MP_FEATURE_PIC         (0 << 7)
+#define MP_FEATURE_VIRTUALWIRE (0 << 7)
+#define MP_FEATURE_PIC         (1 << 7)
 	unsigned char mpf_feature3;	/* Unused (0)			*/
 	unsigned char mpf_feature4;	/* Unused (0)			*/
 	unsigned char mpf_feature5;	/* Unused (0)			*/



More information about the coreboot-gerrit mailing list