[OpenBIOS] [commit] r1170 - in trunk/openbios-devel: drivers include/arch/common

repository service svn at openbios.org
Thu Jul 11 18:49:26 CEST 2013


Author: agraf
Date: Thu Jul 11 18:49:26 2013
New Revision: 1170
URL: http://tracker.coreboot.org/trac/openbios/changeset/1170

Log:
Macio: Fetch nvram offset from fw_cfg if available

We want the hypervisor to tell us where NVRAM lies so that we do not have to
rely on hardcoded addresses for it.

Introduce a new fw_cfg interface that allows us to receive it at runtime.

Signed-off-by: Alexander Graf <agraf at suse.de>

Modified:
   trunk/openbios-devel/drivers/macio.c
   trunk/openbios-devel/include/arch/common/fw_cfg.h

Modified: trunk/openbios-devel/drivers/macio.c
==============================================================================
--- trunk/openbios-devel/drivers/macio.c	Sun Jun 30 05:13:14 2013	(r1169)
+++ trunk/openbios-devel/drivers/macio.c	Thu Jul 11 18:49:26 2013	(r1170)
@@ -43,6 +43,30 @@
                 return NW_IO_NVRAM_SIZE >> NW_IO_NVRAM_SHIFT;
 }
 
+static unsigned long macio_nvram_offset(void)
+{
+	unsigned long r;
+
+	/* Hypervisor tells us where NVRAM lies */
+	r = fw_cfg_read_i32(FW_CFG_PPC_NVRAM_ADDR);
+	if (r)
+		return r;
+
+	/* Fall back to hardcoded addresses */
+	if (is_oldworld())
+		return OW_IO_NVRAM_OFFSET;
+
+	return NW_IO_NVRAM_OFFSET;
+}
+
+static unsigned long macio_nvram_size(void)
+{
+	if (is_oldworld())
+		return OW_IO_NVRAM_SIZE;
+	else
+		return NW_IO_NVRAM_SIZE;
+}
+
 void macio_nvram_init(const char *path, phys_addr_t addr)
 {
 	phandle_t chosen, aliases;
@@ -51,13 +75,9 @@
 	char buf[64];
         unsigned long nvram_size, nvram_offset;
 
-        if (is_oldworld()) {
-                nvram_offset = OW_IO_NVRAM_OFFSET;
-                nvram_size = OW_IO_NVRAM_SIZE;
-        } else {
-                nvram_offset = NW_IO_NVRAM_OFFSET;
-                nvram_size = NW_IO_NVRAM_SIZE;
-        }
+        nvram_offset = macio_nvram_offset();
+        nvram_size = macio_nvram_size();
+
 	nvram = (char*)addr + nvram_offset;
         snprintf(buf, sizeof(buf), "%s/nvram", path);
 	nvram_init(buf);

Modified: trunk/openbios-devel/include/arch/common/fw_cfg.h
==============================================================================
--- trunk/openbios-devel/include/arch/common/fw_cfg.h	Sun Jun 30 05:13:14 2013	(r1169)
+++ trunk/openbios-devel/include/arch/common/fw_cfg.h	Thu Jul 11 18:49:26 2013	(r1170)
@@ -44,6 +44,7 @@
 #define FW_CFG_PPC_IS_KVM	(FW_CFG_ARCH_LOCAL + 0x05)
 #define FW_CFG_PPC_KVM_HC	(FW_CFG_ARCH_LOCAL + 0x06)
 #define FW_CFG_PPC_KVM_PID	(FW_CFG_ARCH_LOCAL + 0x07)
+#define FW_CFG_PPC_NVRAM_ADDR	(FW_CFG_ARCH_LOCAL + 0x08)
 
 #define FW_CFG_INVALID          0xffff
 



More information about the OpenBIOS mailing list