[OpenBIOS] [commit] r832 - in trunk/openbios-devel: arch/sparc32 drivers
repository service
svn at openbios.org
Tue Aug 3 22:48:23 CEST 2010
Author: blueswirl
Date: Tue Aug 3 22:48:23 2010
New Revision: 832
URL: http://tracker.coreboot.org/trac/openbios/changeset/832
Log:
sparc32: fix pre-loaded kernel command line
Fix more breakage from r828:
For some reason, QEMU/Sparc32 does not set FW_CFG_CMDLINE_SIZE, so
we have to use FW_CFG_KERNEL_CMDLINE instead.
Setup romvec obp_arg.argv[1] and "boot-file" property.
Remove obsolete command line setup code from obio.c.
Signed-off-by: Blue Swirl <blauwirbel at gmail.com>
Modified:
trunk/openbios-devel/arch/sparc32/openbios.c
trunk/openbios-devel/drivers/obio.c
Modified: trunk/openbios-devel/arch/sparc32/openbios.c
==============================================================================
--- trunk/openbios-devel/arch/sparc32/openbios.c Tue Aug 3 20:39:27 2010 (r831)
+++ trunk/openbios-devel/arch/sparc32/openbios.c Tue Aug 3 22:48:23 2010 (r832)
@@ -20,6 +20,7 @@
#include "libopenbios/sys_info.h"
#include "openbios.h"
#include "boot.h"
+#include "openprom.h"
#include "packages/video.h"
#define NO_QEMU_PROTOS
#include "arch/common/fw_cfg.h"
@@ -134,7 +135,8 @@
arch_init( void )
{
static char cmdline[128];
- int size;
+ int size = 0;
+ const char *kernel_cmdline;
openbios_init();
modules_init();
@@ -154,25 +156,31 @@
#endif
device_end();
+ /* Initialiase openprom romvec */
+ romvec = init_openprom();
+
kernel_size = fw_cfg_read_i32(FW_CFG_KERNEL_SIZE);
if (kernel_size)
kernel_image = fw_cfg_read_i32(FW_CFG_KERNEL_ADDR);
- size = fw_cfg_read_i32(FW_CFG_CMDLINE_SIZE);
- if (size) {
- fw_cfg_read(FW_CFG_CMDLINE_DATA, cmdline, size);
- }
+ kernel_cmdline = (const char *) fw_cfg_read_i32(FW_CFG_KERNEL_CMDLINE);
+ if (kernel_cmdline) {
+ size = strlen(kernel_cmdline);
+ memcpy(cmdline, kernel_cmdline, size);
+ obp_arg.argv[1] = cmdline;
+ }
cmdline[size] = '\0';
qemu_cmdline = (uint32_t)cmdline;
- boot_device = fw_cfg_read_i16(FW_CFG_BOOT_DEVICE);
-
- /* Initialiase openprom romvec */
- romvec = init_openprom();
+ /* Setup nvram variables */
+ push_str("/options");
+ fword("find-device");
+ push_str(cmdline);
+ fword("encode-string");
+ push_str("boot-file");
+ fword("property");
- /* Setup nvram variables */
- push_str("/options");
- fword("find-device");
+ boot_device = fw_cfg_read_i16(FW_CFG_BOOT_DEVICE);
switch (boot_device) {
case 'a':
@@ -194,11 +202,6 @@
push_str("boot-device");
fword("property");
- push_str("");
- fword("encode-string");
- push_str("boot-file");
- fword("property");
-
/* Set up other properties */
push_str("/chosen");
fword("find-device");
Modified: trunk/openbios-devel/drivers/obio.c
==============================================================================
--- trunk/openbios-devel/drivers/obio.c Tue Aug 3 20:39:27 2010 (r831)
+++ trunk/openbios-devel/drivers/obio.c Tue Aug 3 22:48:23 2010 (r832)
@@ -38,12 +38,6 @@
*/
#define SUN4M_NCPU 4
-/* The kernel may want to examine the arguments, so hold a copy in OBP's
- * mapped memory.
- */
-#define OBIO_CMDLINE_MAX 256
-static char obio_cmdline[OBIO_CMDLINE_MAX];
-
/* DECLARE data structures for the nodes. */
DECLARE_UNNAMED_NODE( ob_obio, INSTALL_OPEN, sizeof(int) );
@@ -651,14 +645,12 @@
const char *stdin, *stdout;
unsigned int i;
char nographic;
- uint32_t size = 0;
uint16_t machine_id;
const struct cpudef *cpu;
const struct machdef *mach;
char buf[256];
uint32_t temp;
phandle_t chosen;
- const char *kernel_cmdline;
ob_new_obio_device("eeprom", NULL);
@@ -691,21 +683,6 @@
for(;;);
}
- kernel_size = fw_cfg_read_i32(FW_CFG_KERNEL_SIZE);
- if (kernel_size)
- kernel_image = fw_cfg_read_i32(FW_CFG_KERNEL_ADDR);
- kernel_cmdline = (const char *) fw_cfg_read_i32(FW_CFG_KERNEL_CMDLINE);
- if (kernel_cmdline) {
- size = strlen(kernel_cmdline);
- if (size > OBIO_CMDLINE_MAX - 1)
- size = OBIO_CMDLINE_MAX - 1;
- memcpy(&obio_cmdline, kernel_cmdline, size);
- }
- obio_cmdline[size] = '\0';
- qemu_cmdline = (uint32_t) &obio_cmdline;
- cmdline_size = size;
- boot_device = fw_cfg_read_i16(FW_CFG_BOOT_DEVICE);
-
fw_cfg_read(FW_CFG_NOGRAPHIC, &nographic, 1);
graphic_depth = fw_cfg_read_i16(FW_CFG_SUN4M_DEPTH);
More information about the OpenBIOS
mailing list