diff mbox

[v2,2/2] arm/mach-imx: enable big endian mode

Message ID 1453913976-30619-3-git-send-email-johannes@sipsolutions.net
State New
Headers show

Commit Message

Johannes Berg Jan. 27, 2016, 4:59 p.m. UTC
Enable ARM big-endian mode on mach-imx. This requires adding some
byte swapping in the debug functions (which otherwise hang forever)
and of course the secondary core bringup.

Tested (on top of 4.4) on i.MX6 HummingBoard quad-core (IMX6Q).

The patch is pretty much as suggested by Arnd Bergmann, thanks!

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
---
 arch/arm/include/debug/imx.S | 3 +++
 arch/arm/mach-imx/Kconfig    | 1 +
 arch/arm/mach-imx/headsmp.S  | 2 ++
 3 files changed, 6 insertions(+)

Comments

Shawn Guo Feb. 2, 2016, 5:33 a.m. UTC | #1
On Wed, Jan 27, 2016 at 05:59:36PM +0100, Johannes Berg wrote:
> Enable ARM big-endian mode on mach-imx. This requires adding some
> byte swapping in the debug functions (which otherwise hang forever)
> and of course the secondary core bringup.
> 
> Tested (on top of 4.4) on i.MX6 HummingBoard quad-core (IMX6Q).
> 
> The patch is pretty much as suggested by Arnd Bergmann, thanks!
> 
> Signed-off-by: Johannes Berg <johannes@sipsolutions.net>

We conventionally use "ARM: imx: ..." as the subject for IMX platform
patches.

> ---
>  arch/arm/include/debug/imx.S | 3 +++
>  arch/arm/mach-imx/Kconfig    | 1 +
>  arch/arm/mach-imx/headsmp.S  | 2 ++
>  3 files changed, 6 insertions(+)
> 
> diff --git a/arch/arm/include/debug/imx.S b/arch/arm/include/debug/imx.S
> index 619d8cc1ac12..92c44760d656 100644
> --- a/arch/arm/include/debug/imx.S
> +++ b/arch/arm/include/debug/imx.S
> @@ -11,6 +11,7 @@
>   *
>   */
>  
> +#include <asm/assembler.h>
>  #include "imx-uart.h"
>  
>  /*
> @@ -34,6 +35,7 @@
>  		.endm
>  
>  		.macro	senduart,rd,rx
> +		ARM_BE8(rev \rd, \rd)
>  		str	\rd, [\rx, #0x40]	@ TXDATA
>  		.endm
>  
> @@ -42,6 +44,7 @@
>  
>  		.macro	busyuart,rd,rx
>  1002:		ldr	\rd, [\rx, #0x98]	@ SR2
> +		ARM_BE8(rev \rd, \rd)
>  		tst	\rd, #1 << 3		@ TXDC
>  		beq	1002b			@ wait until transmit done
>  		.endm
> diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig
> index 15df34fbdf44..607e0fedbf1c 100644
> --- a/arch/arm/mach-imx/Kconfig
> +++ b/arch/arm/mach-imx/Kconfig
> @@ -9,6 +9,7 @@ menuconfig ARCH_MXC
>  	select PM_OPP if PM
>  	select SOC_BUS
>  	select SRAM
> +	select ARCH_SUPPORTS_BIG_ENDIAN

It should be added in alphabetical order.

I fixed these two minor things and applied both patches.

Shawn

>  	help
>  	  Support for Freescale MXC/iMX-based family of processors
>  
> diff --git a/arch/arm/mach-imx/headsmp.S b/arch/arm/mach-imx/headsmp.S
> index b5e976816b63..6c28d28b3c64 100644
> --- a/arch/arm/mach-imx/headsmp.S
> +++ b/arch/arm/mach-imx/headsmp.S
> @@ -12,6 +12,7 @@
>  
>  #include <linux/linkage.h>
>  #include <linux/init.h>
> +#include <asm/assembler.h>
>  
>  diag_reg_offset:
>  	.word	g_diag_reg - .
> @@ -25,6 +26,7 @@ diag_reg_offset:
>  	.endm
>  
>  ENTRY(v7_secondary_startup)
> +ARM_BE8(setend be)			@ go BE8 if entered LE
>  	set_diag_reg
>  	b	secondary_startup
>  ENDPROC(v7_secondary_startup)
> -- 
> 2.6.2
> 
>
Johannes Berg Feb. 2, 2016, 8:16 a.m. UTC | #2
On Tue, 2016-02-02 at 13:33 +0800, Shawn Guo wrote:

> We conventionally use "ARM: imx: ..." as the subject for IMX platform
> patches.

Fair enough. I thought I saw this style used in the git log, but I may
very well be mistaken :)

> > +++ b/arch/arm/mach-imx/Kconfig
> > @@ -9,6 +9,7 @@ menuconfig ARCH_MXC
> >  	select PM_OPP if PM
> >  	select SOC_BUS
> >  	select SRAM
> > +	select ARCH_SUPPORTS_BIG_ENDIAN
> 
> It should be added in alphabetical order.

Heh, ok.

> I fixed these two minor things and applied both patches.

Great, thanks!

johannes
diff mbox

Patch

diff --git a/arch/arm/include/debug/imx.S b/arch/arm/include/debug/imx.S
index 619d8cc1ac12..92c44760d656 100644
--- a/arch/arm/include/debug/imx.S
+++ b/arch/arm/include/debug/imx.S
@@ -11,6 +11,7 @@ 
  *
  */
 
+#include <asm/assembler.h>
 #include "imx-uart.h"
 
 /*
@@ -34,6 +35,7 @@ 
 		.endm
 
 		.macro	senduart,rd,rx
+		ARM_BE8(rev \rd, \rd)
 		str	\rd, [\rx, #0x40]	@ TXDATA
 		.endm
 
@@ -42,6 +44,7 @@ 
 
 		.macro	busyuart,rd,rx
 1002:		ldr	\rd, [\rx, #0x98]	@ SR2
+		ARM_BE8(rev \rd, \rd)
 		tst	\rd, #1 << 3		@ TXDC
 		beq	1002b			@ wait until transmit done
 		.endm
diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig
index 15df34fbdf44..607e0fedbf1c 100644
--- a/arch/arm/mach-imx/Kconfig
+++ b/arch/arm/mach-imx/Kconfig
@@ -9,6 +9,7 @@  menuconfig ARCH_MXC
 	select PM_OPP if PM
 	select SOC_BUS
 	select SRAM
+	select ARCH_SUPPORTS_BIG_ENDIAN
 	help
 	  Support for Freescale MXC/iMX-based family of processors
 
diff --git a/arch/arm/mach-imx/headsmp.S b/arch/arm/mach-imx/headsmp.S
index b5e976816b63..6c28d28b3c64 100644
--- a/arch/arm/mach-imx/headsmp.S
+++ b/arch/arm/mach-imx/headsmp.S
@@ -12,6 +12,7 @@ 
 
 #include <linux/linkage.h>
 #include <linux/init.h>
+#include <asm/assembler.h>
 
 diag_reg_offset:
 	.word	g_diag_reg - .
@@ -25,6 +26,7 @@  diag_reg_offset:
 	.endm
 
 ENTRY(v7_secondary_startup)
+ARM_BE8(setend be)			@ go BE8 if entered LE
 	set_diag_reg
 	b	secondary_startup
 ENDPROC(v7_secondary_startup)