Browse Source

Add CFE runtime detection

SVN-Revision: 6641
Florian Fainelli 19 years ago
parent
commit
dd5488dd3f
1 changed files with 34 additions and 0 deletions
  1. 34 0
      target/linux/adm5120-2.6/files/arch/mips/adm5120/prom.c

+ 34 - 0
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();
 }