All pastes #1230922 Raw Edit

Someone

public diff v1 · immutable
#1230922 ·published 2008-10-19 12:33 UTC
rendered paste body
Index: target/linux/brcm47xx/patches-2.6.25/900-fix_cfe_detection.patch===================================================================--- target/linux/brcm47xx/patches-2.6.25/900-fix_cfe_detection.patch	(revision 0)+++ target/linux/brcm47xx/patches-2.6.25/900-fix_cfe_detection.patch	(revision 0)@@ -0,0 +1,108 @@+--- a/arch/mips/bcm47xx/prom.c++++ b/arch/mips/bcm47xx/prom.c+@@ -32,6 +32,7 @@+ #include <asm/fw/cfe/cfe_error.h>+ + static int cfe_cons_handle;++static void (* __prom_putchar)(char c);+ + const char *get_system_type(void)+ {+@@ -40,65 +41,40 @@+ + void prom_putchar(char c)+ {++	if (__prom_putchar)++		__prom_putchar(c);++}++++void prom_putchar_cfe(char c)++{+ 	while (cfe_write(cfe_cons_handle, &c, 1) == 0)+ 		;+ }+ +-static __init void prom_init_cfe(void)++static __init int prom_init_cfe(void)+ {+ 	uint32_t cfe_ept;+ 	uint32_t cfe_handle;+ 	uint32_t cfe_eptseal;+-	int argc = fw_arg0;+-	char **envp = (char **) fw_arg2;+-	int *prom_vec = (int *) fw_arg3;+-+-	/*+-	 * Check if a loader was used; if NOT, the 4 arguments are+-	 * what CFE gives us (handle, 0, EPT and EPTSEAL)+-	 */+-	if (argc < 0) {+-		cfe_handle = (uint32_t)argc;+-		cfe_ept = (uint32_t)envp;+-		cfe_eptseal = (uint32_t)prom_vec;+-	} else {+-		if ((int)prom_vec < 0) {+-			/*+-			 * Old loader; all it gives us is the handle,+-			 * so use the "known" entrypoint and assume+-			 * the seal.+-			 */+-			cfe_handle = (uint32_t)prom_vec;+-			cfe_ept = 0xBFC00500;+-			cfe_eptseal = CFE_EPTSEAL;+-		} else {+-			/*+-			 * Newer loaders bundle the handle/ept/eptseal+-			 * Note: prom_vec is in the loader's useg+-			 * which is still alive in the TLB.+-			 */+-			cfe_handle = prom_vec[0];+-			cfe_ept = prom_vec[2];+-			cfe_eptseal = prom_vec[3];+-		}+-	}+ +-	if (cfe_eptseal != CFE_EPTSEAL) {+-		/* too early for panic to do any good */+-		printk(KERN_ERR "CFE's entrypoint seal doesn't match.");+-		while (1) ;+-	}++	cfe_eptseal = (uint32_t) fw_arg3;++	cfe_handle = (uint32_t) fw_arg0;++	cfe_ept = (uint32_t) fw_arg2;++++	if (cfe_eptseal != CFE_EPTSEAL)++		return -1;+ + 	cfe_init(cfe_handle, cfe_ept);++	return 0;+ }+ +-static __init void prom_init_console(void)++static __init void prom_init_console_cfe(void)+ {+ 	/* Initialize CFE console */+ 	cfe_cons_handle = cfe_getstdhandle(CFE_STDHANDLE_CONSOLE);+ }+ +-static __init void prom_init_cmdline(void)++static __init void prom_init_cmdline_cfe(void)+ {+ 	char buf[CL_SIZE];+ +@@ -146,9 +122,12 @@+ + void __init prom_init(void)+ {+-	prom_init_cfe();+-	prom_init_console();+-	prom_init_cmdline();++	if (prom_init_cfe() == 0) {++		prom_init_console_cfe();++		prom_init_cmdline_cfe();++		__prom_putchar = prom_putchar_cfe;++	}+++ 	prom_init_mem();+ }+