The Core2Duo CAR code did set up the stack incorrectly. In combination
with a wrong calling convention of stage1_phase1() this caused stage1 to assume BIST had failed. Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net> Acked-by: Ronald G. Minnich <rminnich@gmail.com> git-svn-id: svn://coreboot.org/repository/coreboot-v3@1057 f3766cd6-281f-0410-b1cd-43a5c92072e9
This commit is contained in:
parent
675731bf42
commit
5a6f83c735
2 changed files with 15 additions and 5 deletions
|
|
@ -3,6 +3,7 @@
|
|||
*
|
||||
* Copyright (C) 2000,2007 Ronald G. Minnich <rminnich@gmail.com>
|
||||
* Copyright (C) 2007-2008 coresystems GmbH
|
||||
* Copyright (C) 2008 Carl-Daniel Hailfinger
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
|
@ -159,17 +160,26 @@ clear_mtrrs:
|
|||
movl $(CACHE_AS_RAM_BASE + CACHE_AS_RAM_SIZE - 4), %eax
|
||||
movl %eax, %esp
|
||||
|
||||
/* Restore the BIST result */
|
||||
/* Store zero for the pointer to the global variables. */
|
||||
pushl $0
|
||||
|
||||
/* Restore the BIST result. */
|
||||
movl %ebp, %eax
|
||||
|
||||
/* We need to set ebp? No need. */
|
||||
movl %esp, %ebp
|
||||
|
||||
/* Second parameter: init_detected */
|
||||
/* Store zero for the unused init_detected parameter. */
|
||||
pushl $0
|
||||
|
||||
/* First parameter: bist */
|
||||
pushl %eax
|
||||
|
||||
#if 0
|
||||
/* this will be interpreted as failed bist */
|
||||
port80_post(0x23)
|
||||
#endif
|
||||
|
||||
call stage1_phase1
|
||||
/* We will not go back. */
|
||||
|
||||
port80_post(0x2f)
|
||||
error:
|
||||
|
|
|
|||
|
|
@ -187,7 +187,7 @@ static int run_address_multiboot(void *f, struct multiboot_info *mbi)
|
|||
* that we are restarting after some sort of reconfiguration. Note that we could use it on geode but
|
||||
* do not at present.
|
||||
*/
|
||||
void __attribute__((stdcall)) stage1_phase1(u32 bist, u32 init_detected)
|
||||
void __attribute__((stdcall,regparm(0))) stage1_phase1(u32 bist, u32 init_detected)
|
||||
{
|
||||
struct global_vars globvars;
|
||||
int ret;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue