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/bootinfo.h>
|
||||||
#include <asm/addrspace.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 setup_prom_printf(int);
|
||||||
void prom_printf(char *, ...);
|
void prom_printf(char *, ...);
|
||||||
void prom_meminit(void);
|
void prom_meminit(void);
|
||||||
|
|
||||||
|
/* we assume we don't know the boot loader by default */
|
||||||
|
int boot_loader_type = UNKNOWN;
|
||||||
|
|
||||||
#define ADM5120_ENVC 1
|
#define ADM5120_ENVC 1
|
||||||
|
|
||||||
char *adm5120_envp[2*ADM5120_ENVC] = {"memsize","0x001000000"};
|
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 */
|
/* init command line, register a default kernel command line */
|
||||||
strcpy(&(arcs_cmdline[0]), "console=ttyS0,115200 rootfstype=squashfs,jffs2 init=/etc/preinit");
|
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 */
|
/* init memory map */
|
||||||
prom_meminit();
|
prom_meminit();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue