aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/brcm47xx/patches-3.10/081-MIPS-BCM47XX-Remove-CFE-support.patch
diff options
context:
space:
mode:
authorHauke Mehrtens <hauke@openwrt.org>2013-10-06 23:55:35 +0000
committerHauke Mehrtens <hauke@openwrt.org>2013-10-06 23:55:35 +0000
commite4c5404c56a497c113c0bb4344a34349055db1bd (patch)
tree1ea4d49631253f3a332f7e09a4031d45c1c14fee /target/linux/brcm47xx/patches-3.10/081-MIPS-BCM47XX-Remove-CFE-support.patch
parentcd2b261f51e3181ccd63899e26cdb0a91002fc75 (diff)
downloadmaster-187ad058-e4c5404c56a497c113c0bb4344a34349055db1bd.tar.gz
master-187ad058-e4c5404c56a497c113c0bb4344a34349055db1bd.tar.bz2
master-187ad058-e4c5404c56a497c113c0bb4344a34349055db1bd.zip
brcm47xx: update early printk patches
Early printk was disabled because it caused hangs on some devices, the old patches were using the CFE console now we use the normal serial console, it is at a constant address. Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@38309 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux/brcm47xx/patches-3.10/081-MIPS-BCM47XX-Remove-CFE-support.patch')
-rw-r--r--target/linux/brcm47xx/patches-3.10/081-MIPS-BCM47XX-Remove-CFE-support.patch151
1 files changed, 151 insertions, 0 deletions
diff --git a/target/linux/brcm47xx/patches-3.10/081-MIPS-BCM47XX-Remove-CFE-support.patch b/target/linux/brcm47xx/patches-3.10/081-MIPS-BCM47XX-Remove-CFE-support.patch
new file mode 100644
index 0000000000..1537db5158
--- /dev/null
+++ b/target/linux/brcm47xx/patches-3.10/081-MIPS-BCM47XX-Remove-CFE-support.patch
@@ -0,0 +1,151 @@
+commit 808fe9c2fa81a6b3e20fe813d5410e7fd6606efa
+Author: Hauke Mehrtens <hauke@hauke-m.de>
+Date: Sun Jul 18 15:11:26 2010 +0200
+
+ MIPS: BCM47XX: Remove CFE support
+
+ bcm47xx only uses the CFE code for early print to a console, but that
+ is also possible with a early print serial 8250 driver.
+
+ The CFE api init causes hangs somewhere in prom_init_cfe() on some
+ devices like the Buffalo WHR-HP-G54 and the Asus WL-520GU.
+ This was reported in https://dev.openwrt.org/ticket/4061 and
+ https://forum.openwrt.org/viewtopic.php?id=17063
+
+ This will remove all the CFE handling code from bcm47xx.
+
+ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
+
+--- a/arch/mips/Kconfig
++++ b/arch/mips/Kconfig
+@@ -112,13 +112,11 @@ config BCM47XX
+ select CEVT_R4K
+ select CSRC_R4K
+ select DMA_NONCOHERENT
+- select FW_CFE
+ select HW_HAS_PCI
+ select IRQ_CPU
+ select NO_EXCEPT_FILL
+ select SYS_SUPPORTS_32BIT_KERNEL
+ select SYS_SUPPORTS_LITTLE_ENDIAN
+- select SYS_HAS_EARLY_PRINTK
+ help
+ Support for BCM47XX based boards
+
+--- a/arch/mips/bcm47xx/prom.c
++++ b/arch/mips/bcm47xx/prom.c
+@@ -30,12 +30,9 @@
+ #include <linux/spinlock.h>
+ #include <linux/smp.h>
+ #include <asm/bootinfo.h>
+-#include <asm/fw/cfe/cfe_api.h>
+-#include <asm/fw/cfe/cfe_error.h>
+ #include <bcm47xx.h>
+ #include <bcm47xx_board.h>
+
+-static int cfe_cons_handle;
+
+ static char bcm47xx_system_type[20] = "Broadcom BCM47XX";
+
+@@ -52,91 +49,6 @@ __init void bcm47xx_set_system_type(u16
+ chip_id);
+ }
+
+-void prom_putchar(char c)
+-{
+- while (cfe_write(cfe_cons_handle, &c, 1) == 0)
+- ;
+-}
+-
+-static __init void 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_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]);
+- }
+-}
+-
+ static __init void prom_init_mem(void)
+ {
+ unsigned long mem;
+@@ -184,9 +96,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();
+ }
+