All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 1/2] MIPS: BCM47XX: Remove CFE support
@ 2013-09-24 22:36 Hauke Mehrtens
  2013-09-24 22:36 ` [PATCH v3 2/2] MIPS: BCM47XX: add EARLY_PRINTK_8250 support Hauke Mehrtens
  2013-12-01 20:26 ` [PATCH v3 1/2] MIPS: BCM47XX: Remove CFE support Aaro Koskinen
  0 siblings, 2 replies; 4+ messages in thread
From: Hauke Mehrtens @ 2013-09-24 22:36 UTC (permalink / raw)
  To: ralf; +Cc: sergei.shtylyov, zajec5, linux-mips, Hauke Mehrtens

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>
---
 arch/mips/Kconfig        |    2 -
 arch/mips/bcm47xx/prom.c |   91 ----------------------------------------------
 2 files changed, 93 deletions(-)

diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
index e70cf31..f73cb81 100644
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
@@ -111,14 +111,12 @@ config BCM47XX
 	select CEVT_R4K
 	select CSRC_R4K
 	select DMA_NONCOHERENT
-	select FW_CFE
 	select HW_HAS_PCI
 	select IRQ_CPU
 	select SYS_HAS_CPU_MIPS32_R1
 	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
 
diff --git a/arch/mips/bcm47xx/prom.c b/arch/mips/bcm47xx/prom.c
index 53b9a3fb..99c3ce2 100644
--- 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)
 		 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();
 }
 
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH v3 2/2] MIPS: BCM47XX: add EARLY_PRINTK_8250 support
  2013-09-24 22:36 [PATCH v3 1/2] MIPS: BCM47XX: Remove CFE support Hauke Mehrtens
@ 2013-09-24 22:36 ` Hauke Mehrtens
  2013-12-01 20:26   ` Aaro Koskinen
  2013-12-01 20:26 ` [PATCH v3 1/2] MIPS: BCM47XX: Remove CFE support Aaro Koskinen
  1 sibling, 1 reply; 4+ messages in thread
From: Hauke Mehrtens @ 2013-09-24 22:36 UTC (permalink / raw)
  To: ralf; +Cc: sergei.shtylyov, zajec5, linux-mips, Hauke Mehrtens

The BCM47xx SoCs have a 8250 serial compatible console at address
0x18000300 and an other at 0x18000400. On most devices 0x18000300 is
wired to some pins on the board, we should use that.
This is the smae for the AI (bcma) and the SB (ssb) bus, this is some
offset on the chip common core.

Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
---
 arch/mips/Kconfig        |    2 ++
 arch/mips/bcm47xx/prom.c |    9 +++++++++
 2 files changed, 11 insertions(+)

diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
index f73cb81..02a3a66 100644
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
@@ -117,6 +117,8 @@ config BCM47XX
 	select NO_EXCEPT_FILL
 	select SYS_SUPPORTS_32BIT_KERNEL
 	select SYS_SUPPORTS_LITTLE_ENDIAN
+	select SYS_HAS_EARLY_PRINTK
+	select EARLY_PRINTK_8250 if EARLY_PRINTK
 	help
 	 Support for BCM47XX based boards
 
diff --git a/arch/mips/bcm47xx/prom.c b/arch/mips/bcm47xx/prom.c
index 99c3ce2..0af808d 100644
--- a/arch/mips/bcm47xx/prom.c
+++ b/arch/mips/bcm47xx/prom.c
@@ -28,6 +28,8 @@
 #include <linux/types.h>
 #include <linux/kernel.h>
 #include <linux/spinlock.h>
+#include <linux/ssb/ssb_driver_chipcommon.h>
+#include <linux/ssb/ssb_regs.h>
 #include <linux/smp.h>
 #include <asm/bootinfo.h>
 #include <bcm47xx.h>
@@ -94,9 +96,16 @@ static __init void prom_init_mem(void)
 	add_memory_region(0, mem, BOOT_MEM_RAM);
 }
 
+/*
+ * This is the first serial on the chip common core, it is at this position
+ * for sb (ssb) and ai (bcma) bus.
+ */
+#define BCM47XX_SERIAL_ADDR (SSB_ENUM_BASE + SSB_CHIPCO_UART0_DATA)
+
 void __init prom_init(void)
 {
 	prom_init_mem();
+	setup_8250_early_printk_port(CKSEG1ADDR(BCM47XX_SERIAL_ADDR), 0, 0);
 }
 
 void __init prom_free_prom_memory(void)
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH v3 1/2] MIPS: BCM47XX: Remove CFE support
  2013-09-24 22:36 [PATCH v3 1/2] MIPS: BCM47XX: Remove CFE support Hauke Mehrtens
  2013-09-24 22:36 ` [PATCH v3 2/2] MIPS: BCM47XX: add EARLY_PRINTK_8250 support Hauke Mehrtens
@ 2013-12-01 20:26 ` Aaro Koskinen
  1 sibling, 0 replies; 4+ messages in thread
From: Aaro Koskinen @ 2013-12-01 20:26 UTC (permalink / raw)
  To: Hauke Mehrtens; +Cc: ralf, sergei.shtylyov, zajec5, linux-mips

Hi,

On Wed, Sep 25, 2013 at 12:36:55AM +0200, Hauke Mehrtens wrote:
> 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>

Tested-by: Aaro Koskinen <aaro.koskinen@iki.fi>

A.

> ---
>  arch/mips/Kconfig        |    2 -
>  arch/mips/bcm47xx/prom.c |   91 ----------------------------------------------
>  2 files changed, 93 deletions(-)
> 
> diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
> index e70cf31..f73cb81 100644
> --- a/arch/mips/Kconfig
> +++ b/arch/mips/Kconfig
> @@ -111,14 +111,12 @@ config BCM47XX
>  	select CEVT_R4K
>  	select CSRC_R4K
>  	select DMA_NONCOHERENT
> -	select FW_CFE
>  	select HW_HAS_PCI
>  	select IRQ_CPU
>  	select SYS_HAS_CPU_MIPS32_R1
>  	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
>  
> diff --git a/arch/mips/bcm47xx/prom.c b/arch/mips/bcm47xx/prom.c
> index 53b9a3fb..99c3ce2 100644
> --- 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)
>  		 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();
>  }
>  
> -- 
> 1.7.10.4
> 
> 

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH v3 2/2] MIPS: BCM47XX: add EARLY_PRINTK_8250 support
  2013-09-24 22:36 ` [PATCH v3 2/2] MIPS: BCM47XX: add EARLY_PRINTK_8250 support Hauke Mehrtens
@ 2013-12-01 20:26   ` Aaro Koskinen
  0 siblings, 0 replies; 4+ messages in thread
From: Aaro Koskinen @ 2013-12-01 20:26 UTC (permalink / raw)
  To: Hauke Mehrtens; +Cc: ralf, sergei.shtylyov, zajec5, linux-mips

Hi,

On Wed, Sep 25, 2013 at 12:36:56AM +0200, Hauke Mehrtens wrote:
> The BCM47xx SoCs have a 8250 serial compatible console at address
> 0x18000300 and an other at 0x18000400. On most devices 0x18000300 is
> wired to some pins on the board, we should use that.
> This is the smae for the AI (bcma) and the SB (ssb) bus, this is some
> offset on the chip common core.
> 
> Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>

Tested-by: Aaro Koskinen <aaro.koskinen@iki.fi>

A.

> ---
>  arch/mips/Kconfig        |    2 ++
>  arch/mips/bcm47xx/prom.c |    9 +++++++++
>  2 files changed, 11 insertions(+)
> 
> diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
> index f73cb81..02a3a66 100644
> --- a/arch/mips/Kconfig
> +++ b/arch/mips/Kconfig
> @@ -117,6 +117,8 @@ config BCM47XX
>  	select NO_EXCEPT_FILL
>  	select SYS_SUPPORTS_32BIT_KERNEL
>  	select SYS_SUPPORTS_LITTLE_ENDIAN
> +	select SYS_HAS_EARLY_PRINTK
> +	select EARLY_PRINTK_8250 if EARLY_PRINTK
>  	help
>  	 Support for BCM47XX based boards
>  
> diff --git a/arch/mips/bcm47xx/prom.c b/arch/mips/bcm47xx/prom.c
> index 99c3ce2..0af808d 100644
> --- a/arch/mips/bcm47xx/prom.c
> +++ b/arch/mips/bcm47xx/prom.c
> @@ -28,6 +28,8 @@
>  #include <linux/types.h>
>  #include <linux/kernel.h>
>  #include <linux/spinlock.h>
> +#include <linux/ssb/ssb_driver_chipcommon.h>
> +#include <linux/ssb/ssb_regs.h>
>  #include <linux/smp.h>
>  #include <asm/bootinfo.h>
>  #include <bcm47xx.h>
> @@ -94,9 +96,16 @@ static __init void prom_init_mem(void)
>  	add_memory_region(0, mem, BOOT_MEM_RAM);
>  }
>  
> +/*
> + * This is the first serial on the chip common core, it is at this position
> + * for sb (ssb) and ai (bcma) bus.
> + */
> +#define BCM47XX_SERIAL_ADDR (SSB_ENUM_BASE + SSB_CHIPCO_UART0_DATA)
> +
>  void __init prom_init(void)
>  {
>  	prom_init_mem();
> +	setup_8250_early_printk_port(CKSEG1ADDR(BCM47XX_SERIAL_ADDR), 0, 0);
>  }
>  
>  void __init prom_free_prom_memory(void)
> -- 
> 1.7.10.4
> 
> 

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2013-12-01 20:26 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-09-24 22:36 [PATCH v3 1/2] MIPS: BCM47XX: Remove CFE support Hauke Mehrtens
2013-09-24 22:36 ` [PATCH v3 2/2] MIPS: BCM47XX: add EARLY_PRINTK_8250 support Hauke Mehrtens
2013-12-01 20:26   ` Aaro Koskinen
2013-12-01 20:26 ` [PATCH v3 1/2] MIPS: BCM47XX: Remove CFE support Aaro Koskinen

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.