qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] sparc-softmmu with sun prom image?
@ 2009-05-06 20:10 Brian Wheeler
  2009-05-07  2:41 ` Robert Reif
  0 siblings, 1 reply; 3+ messages in thread
From: Brian Wheeler @ 2009-05-06 20:10 UTC (permalink / raw)
  To: qemu-devel

I grabbed a prom image from my SS10 and it mostly works, but the idprom
stuff seems to be broken.  Has anyone tried this?  When I run 'printenv'
at the ok prompt it gives me a data access error and when I turned on
the debuging of unmapped memory, it would try to read at an offset just
above the allocated ram.

Brian

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [Qemu-devel] sparc-softmmu with sun prom image?
  2009-05-06 20:10 [Qemu-devel] sparc-softmmu with sun prom image? Brian Wheeler
@ 2009-05-07  2:41 ` Robert Reif
  2009-05-07 17:34   ` Blue Swirl
  0 siblings, 1 reply; 3+ messages in thread
From: Robert Reif @ 2009-05-07  2:41 UTC (permalink / raw)
  To: Brian Wheeler; +Cc: qemu-devel

[-- Attachment #1: Type: text/plain, Size: 1664 bytes --]

Brian Wheeler wrote:
> I grabbed a prom image from my SS10 and it mostly works, but the idprom
> stuff seems to be broken.  Has anyone tried this?  When I run 'printenv'
> at the ok prompt it gives me a data access error and when I turned on
> the debuging of unmapped memory, it would try to read at an offset just
> above the allocated ram.
>
> Brian
>
>
>   
Here is a patch I did about a month ago when more OpenBios
parameters were added to nvram.  The format used by
OpenBios is different from OpenBoot so the added parameters
made running an OpenBoot PROM image worse than before.

This patch lets you load nvram from a file rather than letting
qemu fill it with OpenBios parameters.  Use a file with all zeros
except for the idprom area.  I have a small program to generate
an nvram image with idprom for an SS-10. Start OpenBoot and run
set-defaults just like you would with a new NVRAM chip.  You
will then be able to run printenv without a crash.  You could also
get the nvram image from a real machine.

I never submitted this patch because there in no simple way
to save the nvram contents at program exit.  There are no
destructor functions for either QEMUMachine or a QEMU
hardware device.  Is anyone else interested in adding
destructor functions to devices or machines?  Is this even
feasible?

I also have a small patch for eccmemctl and a large patch
for better SuperSPARC CPU support that I'm sitting on.  They
help a little with getting an SS-10 OpenBoot PROM working
better but there is still a long way to go.  The biggest piece
missing from QEMU is probably sbus emulation.  This will
be needed before OpenBoot could be used to load an OS.

[-- Attachment #2: nvram.diff.txt --]
[-- Type: text/plain, Size: 4940 bytes --]

Index: vl.c
===================================================================
--- vl.c	(revision 6967)
+++ vl.c	(working copy)
@@ -189,6 +189,7 @@
 
 const char *bios_dir = CONFIG_QEMU_SHAREDIR;
 const char *bios_name = NULL;
+const char *nvram_name = NULL;
 static void *ioport_opaque[MAX_IOPORTS];
 static IOPortReadFunc *ioport_read_table[3][MAX_IOPORTS];
 static IOPortWriteFunc *ioport_write_table[3][MAX_IOPORTS];
@@ -4658,6 +4659,9 @@
             case QEMU_OPTION_bios:
                 bios_name = optarg;
                 break;
+            case QEMU_OPTION_nvram:
+                nvram_name = optarg;
+                break;
             case QEMU_OPTION_S:
                 autostart = 0;
                 break;
Index: qemu-options.hx
===================================================================
--- qemu-options.hx	(revision 6967)
+++ qemu-options.hx	(working copy)
@@ -1265,6 +1265,13 @@
 Set the filename for the BIOS.
 ETEXI
 
+DEF("nvram", HAS_ARG, QEMU_OPTION_nvram, \
+    "-nvram file      set the filename for the NVRAM\n")
+STEXI
+@item -nvram @var{file}
+Set the filename for the NVRAM.
+ETEXI
+
 #ifdef USE_KQEMU
 DEF("kernel-kqemu", 0, QEMU_OPTION_kernel_kqemu, \
     "-kernel-kqemu   enable KQEMU full virtualization (default is user mode only)\n")
Index: sysemu.h
===================================================================
--- sysemu.h	(revision 6967)
+++ sysemu.h	(working copy)
@@ -11,6 +11,7 @@
 /* vl.c */
 extern const char *bios_name;
 extern const char *bios_dir;
+extern const char *nvram_name;
 
 extern int vm_running;
 extern const char *qemu_name;
Index: hw/sun4m.c
===================================================================
--- hw/sun4m.c	(revision 6967)
+++ hw/sun4m.c	(working copy)
@@ -536,32 +536,49 @@
     kernel_size = sun4m_load_kernel(kernel_filename, initrd_filename,
                                     RAM_size);
 
-    nvram_init(nvram, (uint8_t *)&nd_table[0].macaddr, kernel_cmdline,
-               boot_device, RAM_size, kernel_size, graphic_width,
-               graphic_height, graphic_depth, hwdef->nvram_machine_id,
-               "Sun4m");
+    if (nvram_name == NULL) {
+        nvram_init(nvram, (uint8_t *)&nd_table[0].macaddr, kernel_cmdline,
+                   boot_device, RAM_size, kernel_size, graphic_width,
+                   graphic_height, graphic_depth, hwdef->nvram_machine_id,
+                   "Sun4m");
+    } else {
+        uint8_t image[0x1ff0];
 
+        if (get_image_size(nvram_name) == sizeof(image)) {
+            load_image(nvram_name, image);
+
+            for (i = 0; i < sizeof(image); i++)
+                m48t59_write(nvram, i, image[i]);
+        } else {
+            fprintf(stderr, "qemu: invalid or missing NVRAM image %s\n",
+                    nvram_name);
+            exit(1);
+        }
+    }
+
     if (hwdef->ecc_base)
         ecc_init(hwdef->ecc_base, slavio_irq[hwdef->ecc_irq],
                  hwdef->ecc_version);
 
-    fw_cfg = fw_cfg_init(0, 0, CFG_ADDR, CFG_ADDR + 2);
-    fw_cfg_add_i32(fw_cfg, FW_CFG_ID, 1);
-    fw_cfg_add_i64(fw_cfg, FW_CFG_RAM_SIZE, (uint64_t)ram_size);
-    fw_cfg_add_i16(fw_cfg, FW_CFG_MACHINE_ID, hwdef->machine_id);
-    fw_cfg_add_i16(fw_cfg, FW_CFG_SUN4M_DEPTH, graphic_depth);
-    fw_cfg_add_i32(fw_cfg, FW_CFG_KERNEL_ADDR, KERNEL_LOAD_ADDR);
-    fw_cfg_add_i32(fw_cfg, FW_CFG_KERNEL_SIZE, kernel_size);
-    if (kernel_cmdline) {
-        fw_cfg_add_i32(fw_cfg, FW_CFG_KERNEL_CMDLINE, CMDLINE_ADDR);
-        pstrcpy_targphys(CMDLINE_ADDR, TARGET_PAGE_SIZE, kernel_cmdline);
-    } else {
-        fw_cfg_add_i32(fw_cfg, FW_CFG_KERNEL_CMDLINE, 0);
+    if (nvram_name == NULL) {
+        fw_cfg = fw_cfg_init(0, 0, CFG_ADDR, CFG_ADDR + 2);
+        fw_cfg_add_i32(fw_cfg, FW_CFG_ID, 1);
+        fw_cfg_add_i64(fw_cfg, FW_CFG_RAM_SIZE, (uint64_t)ram_size);
+        fw_cfg_add_i16(fw_cfg, FW_CFG_MACHINE_ID, hwdef->machine_id);
+        fw_cfg_add_i16(fw_cfg, FW_CFG_SUN4M_DEPTH, graphic_depth);
+        fw_cfg_add_i32(fw_cfg, FW_CFG_KERNEL_ADDR, KERNEL_LOAD_ADDR);
+        fw_cfg_add_i32(fw_cfg, FW_CFG_KERNEL_SIZE, kernel_size);
+        if (kernel_cmdline) {
+            fw_cfg_add_i32(fw_cfg, FW_CFG_KERNEL_CMDLINE, CMDLINE_ADDR);
+            pstrcpy_targphys(CMDLINE_ADDR, TARGET_PAGE_SIZE, kernel_cmdline);
+        } else {
+            fw_cfg_add_i32(fw_cfg, FW_CFG_KERNEL_CMDLINE, 0);
+        }
+        fw_cfg_add_i32(fw_cfg, FW_CFG_INITRD_ADDR, INITRD_LOAD_ADDR);
+        fw_cfg_add_i32(fw_cfg, FW_CFG_INITRD_SIZE, 0); // not used
+        fw_cfg_add_i16(fw_cfg, FW_CFG_BOOT_DEVICE, boot_device[0]);
+        qemu_register_boot_set(fw_cfg_boot_set, fw_cfg);
     }
-    fw_cfg_add_i32(fw_cfg, FW_CFG_INITRD_ADDR, INITRD_LOAD_ADDR);
-    fw_cfg_add_i32(fw_cfg, FW_CFG_INITRD_SIZE, 0); // not used
-    fw_cfg_add_i16(fw_cfg, FW_CFG_BOOT_DEVICE, boot_device[0]);
-    qemu_register_boot_set(fw_cfg_boot_set, fw_cfg);
 }
 
 enum {

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [Qemu-devel] sparc-softmmu with sun prom image?
  2009-05-07  2:41 ` Robert Reif
@ 2009-05-07 17:34   ` Blue Swirl
  0 siblings, 0 replies; 3+ messages in thread
From: Blue Swirl @ 2009-05-07 17:34 UTC (permalink / raw)
  To: Robert Reif; +Cc: qemu-devel

On 5/7/09, Robert Reif <reif@earthlink.net> wrote:
> Brian Wheeler wrote:
>
> > I grabbed a prom image from my SS10 and it mostly works, but the idprom
> > stuff seems to be broken.  Has anyone tried this?  When I run 'printenv'
> > at the ok prompt it gives me a data access error and when I turned on
> > the debuging of unmapped memory, it would try to read at an offset just
> > above the allocated ram.
> >
> > Brian
> >
> >
> >
> >
>  Here is a patch I did about a month ago when more OpenBios
>  parameters were added to nvram.  The format used by
>  OpenBios is different from OpenBoot so the added parameters
>  made running an OpenBoot PROM image worse than before.
>
>  This patch lets you load nvram from a file rather than letting
>  qemu fill it with OpenBios parameters.  Use a file with all zeros
>  except for the idprom area.  I have a small program to generate
>  an nvram image with idprom for an SS-10. Start OpenBoot and run
>  set-defaults just like you would with a new NVRAM chip.  You
>  will then be able to run printenv without a crash.  You could also
>  get the nvram image from a real machine.
>
>  I never submitted this patch because there in no simple way
>  to save the nvram contents at program exit.  There are no
>  destructor functions for either QEMUMachine or a QEMU
>  hardware device.  Is anyone else interested in adding
>  destructor functions to devices or machines?  Is this even
>  feasible?

I think this is similar issue but somewhat separate to VM
snapshotting. The user can load an initial VM snapshot, snapshot load
and save can be commanded from monitor and by default, at least the
disk image is updated, unless in snapshot mode.

IMHO NVRAM (and PC CMOS, pflash etc.) should act the same way. Maybe
qcow etc could be reused?

>  I also have a small patch for eccmemctl and a large patch
>  for better SuperSPARC CPU support that I'm sitting on.  They
>  help a little with getting an SS-10 OpenBoot PROM working
>  better but there is still a long way to go.  The biggest piece
>  missing from QEMU is probably sbus emulation.  This will
>  be needed before OpenBoot could be used to load an OS.

What's missing from Sbus emulation? I know probing and slot
enable/disable does not work, are there other known issues?

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2009-05-07 17:34 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-05-06 20:10 [Qemu-devel] sparc-softmmu with sun prom image? Brian Wheeler
2009-05-07  2:41 ` Robert Reif
2009-05-07 17:34   ` Blue Swirl

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).