From 8107ba4c06251523e2f33ab42168e628322ce72d Mon Sep 17 00:00:00 2001
From: florian <florian@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Date: Thu, 22 Mar 2007 22:43:11 +0000
Subject: Add CFE runtime detection

git-svn-id: svn://svn.openwrt.org/openwrt/trunk@6641 3c298f89-4303-0410-b956-a3cf2f4a3e73
---
 .../adm5120-2.6/files/arch/mips/adm5120/prom.c     | 34 ++++++++++++++++++++++
 1 file changed, 34 insertions(+)

(limited to 'target/linux/adm5120-2.6/files/arch')

diff --git a/target/linux/adm5120-2.6/files/arch/mips/adm5120/prom.c b/target/linux/adm5120-2.6/files/arch/mips/adm5120/prom.c
index 2ba3311c5..9067fcd97 100644
--- a/target/linux/adm5120-2.6/files/arch/mips/adm5120/prom.c
+++ b/target/linux/adm5120-2.6/files/arch/mips/adm5120/prom.c
@@ -29,10 +29,19 @@
 #include <asm/bootinfo.h>
 #include <asm/addrspace.h>
 
+/* boot loaders specific definitions */
+#define CFE_EPTSEAL 0x43464531
+#define CFE 1
+#define MYLOADER 2
+#define UNKNOWN 0
+
 void setup_prom_printf(int);
 void prom_printf(char *, ...);
 void prom_meminit(void);
 
+/* we assume we don't know the boot loader by default */
+int boot_loader_type = UNKNOWN;
+
 #define ADM5120_ENVC           1
 
 char *adm5120_envp[2*ADM5120_ENVC] = {"memsize","0x001000000"};
@@ -108,6 +117,31 @@ void __init prom_init(void)
 	/* init command line, register a default kernel command line */
 	strcpy(&(arcs_cmdline[0]), "console=ttyS0,115200 rootfstype=squashfs,jffs2 init=/etc/preinit");
 
+	/* check for CFE by finding the CFE magic number */
+	int *prom_vec = (int *) fw_arg3;
+	int argc = fw_arg0;
+	unsigned int cfe_eptseal;
+
+	if (argc < 0)
+		cfe_eptseal = (uint32_t)(unsigned long)prom_vec;
+	else {
+		if ((int32_t)(long)prom_vec < 0)
+			 /*
+			  * Old loaders all it gives us is the handle,
+			  * so assume the seal.
+			  */
+			cfe_eptseal = CFE_EPTSEAL;
+		else
+			/*
+			 * Newer loaders bundle the handle/ept/eptseal
+			 */
+			cfe_eptseal = (unsigned int)((uint32_t *)prom_vec)[3];
+	}
+	if (cfe_eptseal == CFE_EPTSEAL) {
+		boot_loader_type = CFE;
+		printk("adm5120 : CFE boot loader\n");
+	}
+
 	/* init memory map */
 	prom_meminit();
 }
-- 
cgit v1.2.3