diff options
Diffstat (limited to 'target/linux/brcm47xx/patches-2.6.38/016-MIPS-BCM47xx-Remove-CFE-console.patch')
| -rw-r--r-- | target/linux/brcm47xx/patches-2.6.38/016-MIPS-BCM47xx-Remove-CFE-console.patch | 141 | 
1 files changed, 141 insertions, 0 deletions
| diff --git a/target/linux/brcm47xx/patches-2.6.38/016-MIPS-BCM47xx-Remove-CFE-console.patch b/target/linux/brcm47xx/patches-2.6.38/016-MIPS-BCM47xx-Remove-CFE-console.patch new file mode 100644 index 000000000..69f3a9beb --- /dev/null +++ b/target/linux/brcm47xx/patches-2.6.38/016-MIPS-BCM47xx-Remove-CFE-console.patch @@ -0,0 +1,141 @@ +From 5219981646071abb6731634bf47781a53e248764 Mon Sep 17 00:00:00 2001 +From: Hauke Mehrtens <hauke@hauke-m.de> +Date: Sun, 18 Jul 2010 15:11:26 +0200 +Subject: [PATCH 6/6] MIPS: BCM47xx: Remove CFE console + +Do not use the CFE console. It causes hangs on some devices like the +Buffalo WHR-HP-G54. +This was reported in https://dev.openwrt.org/ticket/4061 and +https://forum.openwrt.org/viewtopic.php?id=17063 + +Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> +--- + arch/mips/Kconfig        |    1 - + arch/mips/bcm47xx/prom.c |   82 +++------------------------------------------ + 2 files changed, 6 insertions(+), 77 deletions(-) + +--- a/arch/mips/Kconfig ++++ b/arch/mips/Kconfig +@@ -100,7 +100,6 @@ config BCM47XX + 	select SSB_B43_PCI_BRIDGE if PCI + 	select SSB_PCICORE_HOSTMODE if PCI + 	select GENERIC_GPIO +-	select SYS_HAS_EARLY_PRINTK + 	select CFE + 	help + 	 Support for BCM47XX based boards +--- a/arch/mips/bcm47xx/prom.c ++++ b/arch/mips/bcm47xx/prom.c +@@ -31,96 +31,28 @@ + #include <asm/fw/cfe/cfe_api.h> + #include <asm/fw/cfe/cfe_error.h> +  +-static int cfe_cons_handle; +- + const char *get_system_type(void) + { + 	return "Broadcom BCM47XX"; + } +  +-void prom_putchar(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]; +-		} +-	} ++ ++	cfe_eptseal = (uint32_t) fw_arg3; ++	cfe_handle = (uint32_t) fw_arg0; ++	cfe_ept = (uint32_t) fw_arg2; +  + 	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) ; ++		return -1; + 	} +  + 	cfe_init(cfe_handle, cfe_ept); +-} +- +-static __init void prom_init_console(void) +-{ +-	/* Initialize CFE console */ +-	cfe_cons_handle = cfe_getstdhandle(CFE_STDHANDLE_CONSOLE); +-} +- +-static __init void prom_init_cmdline(void) +-{ +-	static char buf[COMMAND_LINE_SIZE] __initdata; +- +-	/* Get the kernel command line from CFE */ +-	if (cfe_getenv("LINUX_CMDLINE", buf, COMMAND_LINE_SIZE) >= 0) { +-		buf[COMMAND_LINE_SIZE - 1] = 0; +-		strcpy(arcs_cmdline, buf); +-	} +- +-	/* Force a console handover by adding a console= argument if needed, +-	 * as CFE is not available anymore later in the boot process. */ +-	if ((strstr(arcs_cmdline, "console=")) == NULL) { +-		/* Try to read the default serial port used by CFE */ +-		if ((cfe_getenv("BOOT_CONSOLE", buf, COMMAND_LINE_SIZE) < 0) +-		    || (strncmp("uart", buf, 4))) +-			/* Default to uart0 */ +-			strcpy(buf, "uart0"); +- +-		/* Compute the new command line */ +-		snprintf(arcs_cmdline, COMMAND_LINE_SIZE, "%s console=ttyS%c,115200", +-			 arcs_cmdline, buf[4]); +-	} ++	return 0; + } +  + static __init void prom_init_mem(void) +@@ -161,8 +93,6 @@ static __init void prom_init_mem(void) + void __init prom_init(void) + { + 	prom_init_cfe(); +-	prom_init_console(); +-	prom_init_cmdline(); + 	prom_init_mem(); + } +  | 
