From c2ee6801e89b3d4f346e075a034e04716b91d0b7 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Sun, 12 Jan 2014 14:28:56 +0100 Subject: 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 Reviewed-on: http://review.coreboot.org/4675 Tested-by: build bot (Jenkins) Reviewed-by: Patrick Georgi --- src/northbridge/intel/sandybridge/raminit.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) (limited to 'src/northbridge') diff --git a/src/northbridge/intel/sandybridge/raminit.c b/src/northbridge/intel/sandybridge/raminit.c index 6e5296563e..07172fc768 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( + 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: -- cgit v1.2.3