[OpenBIOS] r255 - in openbios-devel: arch/ppc/qemu include/openbios modules
svn at openbios.org
svn at openbios.org
Mon Nov 24 13:21:36 CET 2008
Author: stepan
Date: 2008-11-24 13:21:36 +0100 (Mon, 24 Nov 2008)
New Revision: 255
Modified:
openbios-devel/arch/ppc/qemu/init.c
openbios-devel/arch/ppc/qemu/qemu.c
openbios-devel/include/openbios/nvram.h
openbios-devel/modules/nvram.c
Log:
Access to nvram must left shifted by 4.
Initialize device tree (used by PCI patch, to follow).
Signed-off-by: Laurent Vivier <Laurent at lvivier.info>
Acked-by: Stefan Reinauer <stepan at coresystems.de>
Modified: openbios-devel/arch/ppc/qemu/init.c
===================================================================
--- openbios-devel/arch/ppc/qemu/init.c 2008-11-24 12:19:05 UTC (rev 254)
+++ openbios-devel/arch/ppc/qemu/init.c 2008-11-24 12:21:36 UTC (rev 255)
@@ -100,13 +100,12 @@
int autoboot;
devtree_init();
- nvram_init();
modules_init();
+ setup_timers();
#ifdef CONFIG_DRIVER_PCI
ob_pci_init();
#endif
#ifdef CONFIG_DRIVER_IDE
- setup_timers();
ob_ide_init();
#endif
#ifdef CONFIG_DRIVER_ADB
Modified: openbios-devel/arch/ppc/qemu/qemu.c
===================================================================
--- openbios-devel/arch/ppc/qemu/qemu.c 2008-11-24 12:19:05 UTC (rev 254)
+++ openbios-devel/arch/ppc/qemu/qemu.c 2008-11-24 12:21:36 UTC (rev 255)
@@ -21,6 +21,7 @@
#include "openbios/nvram.h"
#include "libc/vsprintf.h"
#include "libc/string.h"
+#include "libc/byteorder.h"
#include "qemu/qemu.h"
#include <stdarg.h>
@@ -29,6 +30,7 @@
// FIXME
unsigned long virt_offset = 0;
+//#define DUMP_NVRAM
void
exit( int status )
@@ -150,57 +152,84 @@
/* briQ specific stuff */
/************************************************************************/
-#define IO_NVRAM_PA_START 0x80860000
-#define IO_NVRAM_PA_END 0x80880000
+#define IO_NVRAM_SIZE 0x00020000
+#define IO_NVRAM_OFFSET 0x00060000
-static char *nvram=(char *)IO_NVRAM_PA_START;
+static char *nvram;
+void macio_nvram_init(char *path, uint32_t addr)
+{
+ phandle_t chosen, aliases;
+ phandle_t dnode;
+ int props[2];
+ char buf[64];
+
+ nvram = (char*)addr + IO_NVRAM_OFFSET;
+ sprintf(buf, "%s/nvram", path);
+ nvram_init(buf);
+ dnode = find_dev(buf);
+ set_int_property(dnode, "#bytes", IO_NVRAM_SIZE >> 4);
+ set_property(dnode, "compatible", "nvram,flash", 12);
+ props[0] = __cpu_to_be32(IO_NVRAM_OFFSET);
+ props[1] = __cpu_to_be32(IO_NVRAM_SIZE);
+ set_property(dnode, "reg", &props, sizeof(props));
+ set_property(dnode, "device_type", "nvram", 6);
+
+ chosen = find_dev("/chosen");
+ set_int_property(chosen, "nvram", dnode);
+
+ aliases = find_dev("/aliases");
+ set_property(aliases, "nvram", buf, strlen(buf) + 1);
+}
+
+#ifdef DUMP_NVRAM
void
dump_nvram(void)
{
- static char hexdigit[] = "0123456789abcdef";
- int i;
- for (i = 0; i < 16*4; i++)
+ int i, j;
+ for (i = 0; i < 10; i++)
{
- printk ("%c", hexdigit[nvram[i<<4] >> 4]);
- printk ("%c", hexdigit[nvram[i<<4] % 16]);
- if (!((i + 1) % 16))
- {
- printk ("\n");
- }
- else
- {
- printk (" ");
- }
- }
+ for (j = 0; j < 16; j++)
+ printk ("%02x ", nvram[(i*16+j)<<4]);
+ printk (" ");
+ for (j = 0; j < 16; j++)
+ if (isprint(nvram[(i*16+j)<<4]))
+ printk("%c", nvram[(i*16+j)<<4]);
+ else
+ printk(".");
+ printk ("\n");
+ }
}
+#endif
int
arch_nvram_size( void )
{
- return (IO_NVRAM_PA_END-IO_NVRAM_PA_START)>>4;
+ return IO_NVRAM_SIZE>>4;
}
void
arch_nvram_put( char *buf )
{
int i;
- for (i=0; i<(IO_NVRAM_PA_END-IO_NVRAM_PA_START)>>4; i++)
+ for (i=0; i<IO_NVRAM_SIZE>>4; i++)
nvram[i<<4]=buf[i];
- // memcpy(nvram, buf, IO_NVRAM_PA_END-IO_NVRAM_PA_START);
+#ifdef DUMP_NVRAM
printk("new nvram:\n");
dump_nvram();
+#endif
}
void
arch_nvram_get( char *buf )
{
int i;
- for (i=0; i<(IO_NVRAM_PA_END-IO_NVRAM_PA_START)>>4; i++)
+ for (i=0; i<IO_NVRAM_SIZE>>4; i++)
buf[i]=nvram[i<<4];
- //memcpy(buf, nvram, IO_NVRAM_PA_END-IO_NVRAM_PA_START);
+#ifdef DUMP_NVRAM
printk("current nvram:\n");
dump_nvram();
+#endif
}
Modified: openbios-devel/include/openbios/nvram.h
===================================================================
--- openbios-devel/include/openbios/nvram.h 2008-11-24 12:19:05 UTC (rev 254)
+++ openbios-devel/include/openbios/nvram.h 2008-11-24 12:21:36 UTC (rev 255)
@@ -21,7 +21,7 @@
extern void arch_nvram_get( char *buf );
extern void arch_nvram_put( char *buf );
-extern void nvram_init( void );
+extern void nvram_init( char *path );
extern void update_nvram( void );
#endif /* _H_NVRAM */
Modified: openbios-devel/modules/nvram.c
===================================================================
--- openbios-devel/modules/nvram.c 2008-11-24 12:19:05 UTC (rev 254)
+++ openbios-devel/modules/nvram.c 2008-11-24 12:21:36 UTC (rev 255)
@@ -18,6 +18,13 @@
#include "openbios/bindings.h"
#include "openbios/nvram.h"
+#ifdef CONFIG_DEBUG_NVRAM
+#define DPRINTF(fmt, args...) \
+do { printk("NVRAM: " fmt , ##args); } while (0)
+#else
+#define DPRINTF(fmt, args...) do {} while(0)
+#endif
+
#define DEF_SYSTEM_SIZE 0xc10
#define NV_SIG_SYSTEM 0x70
@@ -77,10 +84,12 @@
return 1;
}
- if( !(len=nvpart_size(*p)) ) {
+ len=nvpart_size(*p);
+ if( len == 0) {
printk("invalid nvram partition length\n");
return -1;
}
+
*p = (nvpart_t*)((char*)*p + len);
if( *p < end )
return 1;
@@ -219,7 +228,7 @@
uint mark_lo;
} nvram_ibuf_t;
-DECLARE_NODE( nvram, INSTALL_OPEN, sizeof(nvram_ibuf_t), "Tnvram" );
+DECLARE_UNNAMED_NODE( nvram, INSTALL_OPEN, sizeof(nvram_ibuf_t ));
/* ( pos_lo pos_hi -- status ) */
static void
@@ -228,7 +237,7 @@
int pos_hi = POP();
int pos_lo = POP();
- /* printk("NVRAM: seek %08x %08x\n", pos_hi, pos_lo ); */
+ DPRINTF("seek %08x %08x\n", pos_hi, pos_lo );
nd->mark_lo = pos_lo;
nd->mark_hi = pos_hi;
@@ -254,7 +263,7 @@
n++;
}
PUSH(n);
- /* printk("NVRAM: read %08x %x -- %x\n", (int)p, len, n); */
+ DPRINTF("read %08x %x -- %x\n", (int)p, len, n);
}
/* ( addr len -- actual ) */
@@ -270,13 +279,14 @@
n++;
}
PUSH(n);
- /* printk("NVRAM: write %08x %x -- %x\n", (int)p, len, n ); */
+ DPRINTF("write %08x %x -- %x\n", (int)p, len, n );
}
/* ( -- size ) */
static void
nvram_size( __attribute__((unused)) nvram_ibuf_t *nd )
{
+ DPRINTF("nvram_size %d\n", nvram.size);
PUSH( nvram.size );
}
@@ -289,9 +299,9 @@
void
-nvram_init( void )
+nvram_init( char *path )
{
nvconf_init();
- REGISTER_NODE( nvram );
+ REGISTER_NAMED_NODE( nvram, path );
}
More information about the OpenBIOS
mailing list