diff options
| -rw-r--r-- | target/linux/adm5120-2.6/files/arch/mips/adm5120/prom.c | 34 | 
1 files changed, 34 insertions, 0 deletions
| 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();  } | 
