Add CFE runtime detection

git-svn-id: svn://svn.openwrt.org/openwrt/trunk@6641 3c298f89-4303-0410-b956-a3cf2f4a3e73
master
Florian Fainelli 2007-03-22 22:43:11 +00:00
parent 20cf5f8f68
commit 2c6347fcbc
1 changed files with 34 additions and 0 deletions

View File

@ -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();
}