From c0c7231b2d5b33f74776a9a06f48064564a5bee5 Mon Sep 17 00:00:00 2001 From: Mark Cave-Ayland Date: Mon, 28 Jun 2010 17:43:48 +0000 Subject: [PATCH] Fix up SPARC32 boot from CDROM. Signed-off-by: Mark Cave-Ayland git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@806 f158a5a8-5612-0410-a976-696ce0be7e32 --- arch/sparc32/boot.c | 56 ++++++++++++++++++----------------------- arch/sparc32/openbios.c | 3 ++- 2 files changed, 26 insertions(+), 33 deletions(-) diff --git a/arch/sparc32/boot.c b/arch/sparc32/boot.c index 20fd37a..cc04349 100644 --- a/arch/sparc32/boot.c +++ b/arch/sparc32/boot.c @@ -157,38 +157,30 @@ void boot(void) int result; if(!path) { - push_str("boot-device"); - push_str("/options"); - fword("(find-dev)"); - POP(); - fword("get-package-property"); - if (!POP()) { - path = pop_fstr_copy(); - } else { - switch (boot_device) { - case 'a': - path = strdup("/obio/SUNW,fdtwo"); - oldpath = "fd()"; - break; - case 'c': - path = strdup("disk"); - oldpath = "sd(0,0,0):d"; - break; - default: - case 'd': - path = strdup("cdrom"); - // FIXME: hardcoding this looks almost definitely wrong. - // With sd(0,2,0):b we get to see the solaris kernel though - //oldpath = "sd(0,2,0):d"; - oldpath = "sd(0,2,0):b"; - unit = 2; - break; - case 'n': - path = strdup("net"); - oldpath = "le()"; - break; - } - } + /* No path specified, so grab defaults from firmware */ + switch (boot_device) { + case 'a': + path = strdup("/obio/SUNW,fdtwo"); + oldpath = "fd()"; + break; + case 'c': + path = strdup("disk"); + oldpath = "sd(0,0,0):d"; + break; + default: + case 'd': + path = strdup("cdrom"); + // FIXME: hardcoding this looks almost definitely wrong. + // With sd(0,2,0):b we get to see the solaris kernel though + //oldpath = "sd(0,2,0):d"; + oldpath = "sd(0,2,0):b"; + unit = 2; + break; + case 'n': + path = strdup("net"); + oldpath = "le()"; + break; + } } obp_arg.boot_dev_ctrl = 0; diff --git a/arch/sparc32/openbios.c b/arch/sparc32/openbios.c index e94d62a..e7e3858 100644 --- a/arch/sparc32/openbios.c +++ b/arch/sparc32/openbios.c @@ -22,7 +22,6 @@ #include "boot.h" #include "packages/video.h" #define NO_QEMU_PROTOS -#define NO_OPENBIOS_PROTOS #include "arch/common/fw_cfg.h" #define MEMORY_SIZE (128*1024) /* 16K ram for hosted system */ @@ -166,6 +165,8 @@ arch_init( void ) push_str("bootargs"); fword("property"); + boot_device = fw_cfg_read_i16(FW_CFG_BOOT_DEVICE); + bind_func("platform-boot", boot ); }