diff mbox

[v2,1/2] MIPS: add support for XBurst cores

Message ID 20161021094557.41859-1-Vincent.Riera@imgtec.com
State Superseded
Headers show

Commit Message

Vicente Olivert Riera Oct. 21, 2016, 9:45 a.m. UTC
- There isn't any matching -march option for this core family, so we
  need to stick with the generic mips32r2.
- Add an option to the toolchain wrapper to avoid an FPU bug.

Related: http://www.ingenic.com/en/?xburst.html

Signed-off-by: Vicente Olivert Riera <Vincent.Riera@imgtec.com>

---
Changes v1 -> v2:
 - Do not add -mmxu to the wrapper.
---
 arch/Config.in.mips            | 5 +++++
 toolchain/toolchain-wrapper.c  | 3 +++
 toolchain/toolchain-wrapper.mk | 5 +++++
 3 files changed, 13 insertions(+)

Comments

Arnout Vandecappelle Oct. 21, 2016, 6:22 p.m. UTC | #1
On 21-10-16 11:45, Vicente Olivert Riera wrote:
> - There isn't any matching -march option for this core family, so we
>   need to stick with the generic mips32r2.
> - Add an option to the toolchain wrapper to avoid an FPU bug.

 You commit log should explain in more detail that this is actually a generic
mips32r2 core, but it has a hardware bug that has to be worked around.

> 
> Related: http://www.ingenic.com/en/?xburst.html
> 
> Signed-off-by: Vicente Olivert Riera <Vincent.Riera@imgtec.com>
> 
> ---
> Changes v1 -> v2:
>  - Do not add -mmxu to the wrapper.
> ---
>  arch/Config.in.mips            | 5 +++++
>  toolchain/toolchain-wrapper.c  | 3 +++
>  toolchain/toolchain-wrapper.mk | 5 +++++
>  3 files changed, 13 insertions(+)
> 
> diff --git a/arch/Config.in.mips b/arch/Config.in.mips
> index 3662fed..3075d3f 100644
> --- a/arch/Config.in.mips
> +++ b/arch/Config.in.mips
> @@ -63,6 +63,10 @@ config BR2_mips_p5600
>  	bool "P5600"
>  	depends on !BR2_ARCH_IS_64
>  	select BR2_MIPS_CPU_MIPS32R5
> +config BR2_mips_xburst
> +	bool "XBurst"
> +	depends on !BR2_ARCH_IS_64
> +	select BR2_MIPS_CPU_MIPS32R2

 Since this is a special case, it makes sense to add a help text here to explain
the details and add a reference. Like it's done for BR2_x86_x1000.

>  config BR2_mips_64
>  	bool "Generic MIPS64"
>  	depends on BR2_ARCH_IS_64
> @@ -137,6 +141,7 @@ config BR2_GCC_TARGET_ARCH
>  	default "m5101"		if BR2_mips_m5101
>  	default "m6201"		if BR2_mips_m6201
>  	default "p5600"		if BR2_mips_p5600
> +	default "mips32r2"	if BR2_mips_xburst
>  	default "mips64"	if BR2_mips_64
>  	default "mips64r2"	if BR2_mips_64r2
>  	default "mips64r5"	if BR2_mips_64r5
> diff --git a/toolchain/toolchain-wrapper.c b/toolchain/toolchain-wrapper.c
> index 925d013..d59629b 100644
> --- a/toolchain/toolchain-wrapper.c
> +++ b/toolchain/toolchain-wrapper.c
> @@ -66,6 +66,9 @@ static char *predef_args[] = {
>  #ifdef BR_OMIT_LOCK_PREFIX
>  	"-Wa,-momit-lock-prefix=yes",
>  #endif
> +#ifdef BR_NO_FUSED_MADD
> +	"-mno-fused-madd",
> +#endif

 So this is definitely NOT what we want. We want it in TARGET_FLAGS, i.e. we
want it in a series together with http://patchwork.ozlabs.org/patch/683830/
At least I do :-)

 Regards,
 Arnout

>  #ifdef BR_BINFMT_FLAT
>  	"-Wl,-elf2flt",
>  #endif
> diff --git a/toolchain/toolchain-wrapper.mk b/toolchain/toolchain-wrapper.mk
> index af39071..dc3210d 100644
> --- a/toolchain/toolchain-wrapper.mk
> +++ b/toolchain/toolchain-wrapper.mk
> @@ -26,6 +26,11 @@ ifeq ($(BR2_x86_x1000),y)
>  TOOLCHAIN_WRAPPER_ARGS += -DBR_OMIT_LOCK_PREFIX
>  endif
>  
> +# Avoid FPU bug on XBurst CPUs
> +ifeq ($(BR2_mips_xburst),y)
> +TOOLCHAIN_WRAPPER_ARGS += -DBR_NO_FUSED_MADD
> +endif
> +
>  ifeq ($(BR2_CCACHE_USE_BASEDIR),y)
>  TOOLCHAIN_WRAPPER_ARGS += -DBR_CCACHE_BASEDIR='"$(BASE_DIR)"'
>  endif
>
diff mbox

Patch

diff --git a/arch/Config.in.mips b/arch/Config.in.mips
index 3662fed..3075d3f 100644
--- a/arch/Config.in.mips
+++ b/arch/Config.in.mips
@@ -63,6 +63,10 @@  config BR2_mips_p5600
 	bool "P5600"
 	depends on !BR2_ARCH_IS_64
 	select BR2_MIPS_CPU_MIPS32R5
+config BR2_mips_xburst
+	bool "XBurst"
+	depends on !BR2_ARCH_IS_64
+	select BR2_MIPS_CPU_MIPS32R2
 config BR2_mips_64
 	bool "Generic MIPS64"
 	depends on BR2_ARCH_IS_64
@@ -137,6 +141,7 @@  config BR2_GCC_TARGET_ARCH
 	default "m5101"		if BR2_mips_m5101
 	default "m6201"		if BR2_mips_m6201
 	default "p5600"		if BR2_mips_p5600
+	default "mips32r2"	if BR2_mips_xburst
 	default "mips64"	if BR2_mips_64
 	default "mips64r2"	if BR2_mips_64r2
 	default "mips64r5"	if BR2_mips_64r5
diff --git a/toolchain/toolchain-wrapper.c b/toolchain/toolchain-wrapper.c
index 925d013..d59629b 100644
--- a/toolchain/toolchain-wrapper.c
+++ b/toolchain/toolchain-wrapper.c
@@ -66,6 +66,9 @@  static char *predef_args[] = {
 #ifdef BR_OMIT_LOCK_PREFIX
 	"-Wa,-momit-lock-prefix=yes",
 #endif
+#ifdef BR_NO_FUSED_MADD
+	"-mno-fused-madd",
+#endif
 #ifdef BR_BINFMT_FLAT
 	"-Wl,-elf2flt",
 #endif
diff --git a/toolchain/toolchain-wrapper.mk b/toolchain/toolchain-wrapper.mk
index af39071..dc3210d 100644
--- a/toolchain/toolchain-wrapper.mk
+++ b/toolchain/toolchain-wrapper.mk
@@ -26,6 +26,11 @@  ifeq ($(BR2_x86_x1000),y)
 TOOLCHAIN_WRAPPER_ARGS += -DBR_OMIT_LOCK_PREFIX
 endif
 
+# Avoid FPU bug on XBurst CPUs
+ifeq ($(BR2_mips_xburst),y)
+TOOLCHAIN_WRAPPER_ARGS += -DBR_NO_FUSED_MADD
+endif
+
 ifeq ($(BR2_CCACHE_USE_BASEDIR),y)
 TOOLCHAIN_WRAPPER_ARGS += -DBR_CCACHE_BASEDIR='"$(BASE_DIR)"'
 endif