[coreboot-gerrit] New patch to review for coreboot: a4db825 sandybridge: Use calls rather than asm to call to MRC.

Vladimir Serbinenko (phcoder@gmail.com) gerrit at coreboot.org
Sun Jan 12 14:30:45 CET 2014


Vladimir Serbinenko (phcoder at gmail.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/4675

-gerrit

commit a4db82528910345dc190b023203517a3c24da114
Author: Vladimir Serbinenko <phcoder at gmail.com>
Date:   Sun Jan 12 14:28:56 2014 +0100

    sandybridge: Use calls rather than asm to call to MRC.
    
    Using asm as it's done currently is unsafe because caller-saved registers
    are not declared as clobbered.
    
    Using real call is nicer.
    
    regparm((1)) ensures that argument is passed in %eax as expected.
    
    Change-Id: I7449182582eaa53d4e473bc834b472edd8ee0d30
    Signed-off-by: Vladimir Serbinenko <phcoder at gmail.com>
---
 src/northbridge/intel/sandybridge/raminit.c | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)

diff --git a/src/northbridge/intel/sandybridge/raminit.c b/src/northbridge/intel/sandybridge/raminit.c
index 333a6b5..07172fc 100644
--- a/src/northbridge/intel/sandybridge/raminit.c
+++ b/src/northbridge/intel/sandybridge/raminit.c
@@ -219,7 +219,7 @@ static void post_system_agent_init(struct pei_data *pei_data)
 void sdram_initialize(struct pei_data *pei_data)
 {
 	struct sys_info sysinfo;
-	unsigned long entry;
+	int (*entry) (struct pei_data *pei_data) __attribute__ ((regparm(1)));
 
 	report_platform_info();
 
@@ -252,13 +252,11 @@ void sdram_initialize(struct pei_data *pei_data)
 
 	/* Locate and call UEFI System Agent binary. */
 	/* TODO make MRC blob (0xab?) defined in cbfs_core.h. */
-	entry = (unsigned long)cbfs_get_file_content(
-			CBFS_DEFAULT_MEDIA, "mrc.bin", 0xab);
+	entry = cbfs_get_file_content(
+		CBFS_DEFAULT_MEDIA, "mrc.bin", 0xab, NULL);
 	if (entry) {
 		int rv;
-		asm volatile (
-			      "call *%%ecx\n\t"
-			      :"=a" (rv) : "c" (entry), "a" (pei_data));
+		rv = entry (pei_data);
 		if (rv) {
 			switch (rv) {
 			case -1:



More information about the coreboot-gerrit mailing list