Add CFE runtime detection
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@6641 3c298f89-4303-0410-b956-a3cf2f4a3e73master
parent
20cf5f8f68
commit
2c6347fcbc
|
@ -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();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue