Skip to contentSkip to conversation

arc: introduce more CPU versions for selection

PATCH New Alexey Brodkin 3 participants 12 messages Oct 30, 2014 – Nov 2, 2014

lore
Share & tools
lore
#0 lore raw

cover arc: introduce more CPU versions for selection

To simplify selection of proper configuration of tools for users this series adds a number of ARC CPUs in Buildroot configuration utility.

So from now on there're following CPUs available for selection:
* ARC 750D - ARC ISAv1 CPU with MMU
* ARC 770D - ARC ISAv1 CPU with MMU and additional features like atomic options
* ARC HS38 - ARC ISAv2 CPU with MMU

Note that ARC HS38 already supported by current arc-2014.08 tools.

Alexey Brodkin (3):
arc: add explicit selection of CPU templates ARC 750D and ARC770D
uclibc: add explicit setup of ARC-specific options
arc: add support of ARC HS38 core

 arch/Config.in.arc       | 25 +++++++++++++++++++++++--
 package/uclibc/Config.in |  7 +++++++
 package/uclibc/uclibc.mk | 12 ++++++++++++
 3 files changed, 42 insertions(+), 2 deletions(-)
Signature · 1 line
1.9.3
#1 lore raw

PATCH 1/3 arc: add explicit selection of CPU templates ARC 750D and ARC770D

This separation allows to specify unique options and features for each CPU.

For example ARC 770D has LLOCK/SCOND instructions built-in by default. Also this new scheme simplifies selection of proper configuration for users - preconfigured options now match templates for ARC CPUs.

Cc Thomas Petazzoni <[email protected]>
Cc Anton Kolesov <[email protected]>
---
 arch/Config.in.arc | 21 +++++++++++++++++++--
 1 file changed, 19 insertions(+), 2 deletions(-)
arch/Config.in.arc +19 -2
index fcb5d7d..b31b141 100644
@@ -1,6 +1,22 @@
-# Choise of atomic instructions presence
+choice
+	prompt "Target CPU"
+	depends on BR2_arc
+	default BR2_arc770d
+	help
+	    Specific CPU to use
+
+config BR2_arc750d
+	bool "ARC 750D"
+
+config BR2_arc770d
+	bool "ARC 770D"
+
+endchoice
+
+# Choice of atomic instructions presence
 config BR2_ARC_ATOMIC_EXT
 	bool "Atomic extension (LLOCK/SCOND instructions)"
+	default y if BR2_arc770d
 
 config BR2_ARCH_HAS_ATOMICS
 	default y if BR2_ARC_ATOMIC_EXT
@@ -18,4 +34,5 @@ config BR2_ENDIAN
 	default "BIG"	 if BR2_arceb
 
 config BR2_GCC_TARGET_CPU
-	default "arc700"
+	default "arc700" if BR2_arc750d
+	default "arc700" if BR2_arc770d
Signature · 1 line
1.9.3
#2 lore raw

PATCH 1/3 arc: add explicit selection of CPU templates ARC 750D and ARC770D

Alexey, All,

On 2014-10-30 16:57 +0300, Alexey Brodkin spake thusly:

Quoted 4 lines

This separation allows to specify unique options and features for each CPU.

For example ARC 770D has LLOCK/SCOND instructions built-in by default.

"built-in by default": does that mean some cores might not have atomics? Does it make sense to disable atomics for 770D at all, or should they always be enabled?

If it makes sense to disable atomics for 770D, then this code has my:

    Reviewed-by: "Yann E. MORIN" <[email protected]>

However, if it does not make sense to disable atomics for 770D, then we should do it a little bit differently, like (untested):

    choice
        bool "Target CPU"

    config BR2_arc750d
        bool "ARC 750D"
        select BR2_ARC_MAYBE_ATOMIC_EXT

    config BR2_arc770d
        bool "ARC 770D"
        select BR2_ARC_ATOMIC_EXT

    endchoice

    config BR2_ARC_MAYBE_ATOMIC_EXT
        bool

    config BR2_ARC_ATOMIC_EXT
        bool
        prompt "Atomic extension (LLOCK/SCOND instructions)" if BR2_ARC_MAYBE_ATOMICS

    config BR2_ARCH_HAS_ATOMICS
        default y if BR2_ARC_ATOMIC_EXT

Regards,
Yann E. MORIN.

Quoted 53 lines

Also this new scheme simplifies selection of proper configuration for users - preconfigured options now match templates for ARC CPUs.

Cc Thomas Petazzoni <[email protected]>
Cc Anton Kolesov <[email protected]>
---
 arch/Config.in.arc | 21 +++++++++++++++++++--
 1 file changed, 19 insertions(+), 2 deletions(-)
arch/Config.in.arc +19 -2
index fcb5d7d..b31b141 100644
@@ -1,6 +1,22 @@
-# Choise of atomic instructions presence
+choice
+	prompt "Target CPU"
+	depends on BR2_arc
+	default BR2_arc770d
+	help
+	    Specific CPU to use
+
+config BR2_arc750d
+	bool "ARC 750D"
+
+config BR2_arc770d
+	bool "ARC 770D"
+
+endchoice
+
+# Choice of atomic instructions presence
 config BR2_ARC_ATOMIC_EXT
 	bool "Atomic extension (LLOCK/SCOND instructions)"
+	default y if BR2_arc770d
 
 config BR2_ARCH_HAS_ATOMICS
 	default y if BR2_ARC_ATOMIC_EXT
@@ -18,4 +34,5 @@ config BR2_ENDIAN
 	default "BIG"	 if BR2_arceb
 
 config BR2_GCC_TARGET_CPU
-	default "arc700"
+	default "arc700" if BR2_arc750d
+	default "arc700" if BR2_arc770d
Signature · 6 lines
1.9.3

_______________________________________________
buildroot mailing list
buildroot at busybox.net
http://lists.busybox.net/mailman/listinfo/buildroot
Signature · 6 lines
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'
#3 lore raw

PATCH 1/3 arc: add explicit selection of CPU templates ARC 750D and ARC770D

Alexey, All,

On 2014-11-01 20:55 +0100, Yann E. MORIN spake thusly:

Quoted 7 lines

On 2014-10-30 16:57 +0300, Alexey Brodkin spake thusly:

Quoted 4 lines

This separation allows to specify unique options and features for each CPU.

For example ARC 770D has LLOCK/SCOND instructions built-in by default.

"built-in by default": does that mean some cores might not have atomics?

[--SNIP--]

OK, I was dequeuing from the bottom, so I got to read your previous explanations after I reviewed this version of the series.

Forget what I say, and just considered this to be:

Regards,
Yann E. MORIN.

Signature · 6 lines
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'
#4 lore raw

PATCH 1/3 arc: add explicit selection of CPU templates ARC 750D and ARC770D

In reply to Alexey Brodkin
Quoted 10 lines
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line

"Alexey" == Alexey Brodkin <[email protected]> writes:

This separation allows to specify unique options and features for each CPU.

For example ARC 770D has LLOCK/SCOND instructions built-in by default. Also this new scheme simplifies selection of proper configuration for users - preconfigured options now match templates for ARC CPUs.

Committed, thanks.

Signature · 1 line
Bye, Peter Korsgaard
#5 lore raw

PATCH 2/3 uclibc: add explicit setup of ARC-specific options

In reply to Alexey Brodkin

As with other architectures for ARC we need to have an ability to set specific options in uClibc.

In particular this is required for selection of ARC ISA version.

Cc Thomas Petazzoni <[email protected]>
Cc Anton Kolesov <[email protected]>
---
 package/uclibc/Config.in |  6 ++++++
 package/uclibc/uclibc.mk | 12 ++++++++++++
 2 files changed, 18 insertions(+)
package/uclibc/Config.in +6 -0
index d319ae7..c68558f 100644
@@ -194,6 +194,12 @@ config BR2_UCLIBC_TARGET_ARCH
 	default i386	   if BR2_i386
 	default x86_64	   if BR2_x86_64
 
+config BR2_UCLIBC_ARC_TYPE
+	string
+	depends on BR2_UCLIBC_TARGET_ARCH = "arc"
+	default ARC_CPU_700	if BR2_arc750d
+	default ARC_CPU_700	if BR2_arc770d
+
 config BR2_UCLIBC_ARM_BX
 	bool
 	depends on BR2_UCLIBC_TARGET_ARCH = "arm"
package/uclibc/uclibc.mk +12 -0
index b2ecce3..8f990c7 100644
@@ -57,6 +57,17 @@ UCLIBC_LOCALES = $(foreach locale,$(GENERATE_LOCALE),\
 endif
 
 #
+# ARC definitions
+#
+
+ifeq ($(UCLIBC_TARGET_ARCH),arc)
+UCLIBC_ARC_TYPE = CONFIG_$(call qstrip,$(BR2_UCLIBC_ARC_TYPE))
+define UCLIBC_ARC_TYPE_CONFIG
+	$(call KCONFIG_ENABLE_OPT,$(UCLIBC_ARC_TYPE),$(@D)/.config)
+endef
+endif # arc
+
+#
 # ARM definitions
 #
 
@@ -410,6 +421,7 @@ define UCLIBC_KCONFIG_FIXUP_CMDS
 	$(call KCONFIG_SET_OPT,DEVEL_PREFIX,"/usr",$(@D)/.config)
 	$(call KCONFIG_SET_OPT,SHARED_LIB_LOADER_PREFIX,"/lib",$(@D)/.config)
 	$(UCLIBC_MMU_CONFIG)
+	$(UCLIBC_ARC_TYPE_CONFIG)
 	$(UCLIBC_ARM_ABI_CONFIG)
 	$(UCLIBC_ARM_BX_CONFIG)
 	$(UCLIBC_MIPS_ABI_CONFIG)
Signature · 1 line
1.9.3
#6 lore raw

PATCH 2/3 uclibc: add explicit setup of ARC-specific options

Alexey, All,

On 2014-10-30 16:57 +0300, Alexey Brodkin spake thusly:

Quoted 19 lines

As with other architectures for ARC we need to have an ability to set specific options in uClibc.

In particular this is required for selection of ARC ISA version.

Cc Thomas Petazzoni <[email protected]>
Cc Anton Kolesov <[email protected]>
---
 package/uclibc/Config.in |  6 ++++++
 package/uclibc/uclibc.mk | 12 ++++++++++++
 2 files changed, 18 insertions(+)
package/uclibc/Config.in +0 -0
index d319ae7..c68558f 100644

package/uclibc/Config.in config BR2_UCLIBC_TARGET_ARCH · line 201

Quoted 8 lines
package/uclibc/Config.in +5 -0
@@ -194,6 +194,12 @@ config BR2_UCLIBC_TARGET_ARCH
 	default i386	   if BR2_i386
 	default x86_64	   if BR2_x86_64
 
+config BR2_UCLIBC_ARC_TYPE
+	string
+	depends on BR2_UCLIBC_TARGET_ARCH = "arc"
+	default ARC_CPU_700	if BR2_arc750d
+	default ARC_CPU_700	if BR2_arc770d

I know you just followed the existing style of the options around, but since this option is a "string", the default values must be enclosed between double quotes, like:

    default "ARC_CPU_700" if BR2_arc750d

The fact that it works is that we are lucky there are no symbol named ARC_CPU_700, otherwise its value would be used, not the string "ARC_CPU_700".

I would prefer we get proper kconfig code, even though the rest of the code around is not correct. Maybe a preliminary patch to fix that? ;-)

Otherwise, looks good to me.

Regards,
Yann E. MORIN.

Quoted 40 lines
package/uclibc/Config.in +0 -0
 config BR2_UCLIBC_ARM_BX
 	bool
 	depends on BR2_UCLIBC_TARGET_ARCH = "arm"
package/uclibc/uclibc.mk +12 -0
index b2ecce3..8f990c7 100644
@@ -57,6 +57,17 @@ UCLIBC_LOCALES = $(foreach locale,$(GENERATE_LOCALE),\
 endif
 
 #
+# ARC definitions
+#
+
+ifeq ($(UCLIBC_TARGET_ARCH),arc)
+UCLIBC_ARC_TYPE = CONFIG_$(call qstrip,$(BR2_UCLIBC_ARC_TYPE))
+define UCLIBC_ARC_TYPE_CONFIG
+	$(call KCONFIG_ENABLE_OPT,$(UCLIBC_ARC_TYPE),$(@D)/.config)
+endef
+endif # arc
+
+#
 # ARM definitions
 #
 
@@ -410,6 +421,7 @@ define UCLIBC_KCONFIG_FIXUP_CMDS
 	$(call KCONFIG_SET_OPT,DEVEL_PREFIX,"/usr",$(@D)/.config)
 	$(call KCONFIG_SET_OPT,SHARED_LIB_LOADER_PREFIX,"/lib",$(@D)/.config)
 	$(UCLIBC_MMU_CONFIG)
+	$(UCLIBC_ARC_TYPE_CONFIG)
 	$(UCLIBC_ARM_ABI_CONFIG)
 	$(UCLIBC_ARM_BX_CONFIG)
 	$(UCLIBC_MIPS_ABI_CONFIG)
Signature · 6 lines
1.9.3

_______________________________________________
buildroot mailing list
buildroot at busybox.net
http://lists.busybox.net/mailman/listinfo/buildroot
Signature · 6 lines
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'
#7 lore raw

PATCH 2/3 uclibc: add explicit setup of ARC-specific options

In reply to Alexey Brodkin
Quoted 8 lines
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line

"Alexey" == Alexey Brodkin <[email protected]> writes:

As with other architectures for ARC we need to have an ability to set specific options in uClibc.

In particular this is required for selection of ARC ISA version.

Committed with quotes added as noted by Yann, thanks.

Signature · 1 line
Bye, Peter Korsgaard
#8 lore raw

PATCH 3/3 arc: add support of ARC HS38 core

In reply to Alexey Brodkin

Synopsys has recently announced its new ARC HS38 core that is capable of running Linux -
http://www.synopsys.com/dw/ipdir.php?ds=arc-hs38-processor

ARC HS38 is based on ARCv2 ISA and requires special settings of gcc and libc.

Also in case of HS38 atomic extensions (LLOCK/SCOND instructions) are built-in by default, so enabling atomic extensions in Buildroot as well.

This commit adds support of the core in buildroot.

Cc Thomas Petazzoni <[email protected]>
Cc Anton Kolesov <[email protected]>
---
 arch/Config.in.arc       | 6 +++++-
 package/uclibc/Config.in | 1 +
 2 files changed, 6 insertions(+), 1 deletion(-)
arch/Config.in.arc +5 -1
index b31b141..b48a90f 100644
@@ -11,12 +11,15 @@ config BR2_arc750d
 config BR2_arc770d
 	bool "ARC 770D"
 
+config BR2_archs38
+	bool "ARC HS38"
+
 endchoice
 
 # Choice of atomic instructions presence
 config BR2_ARC_ATOMIC_EXT
 	bool "Atomic extension (LLOCK/SCOND instructions)"
-	default y if BR2_arc770d
+	default y if BR2_arc770d || BR2_archs38
 
 config BR2_ARCH_HAS_ATOMICS
 	default y if BR2_ARC_ATOMIC_EXT
@@ -36,3 +39,4 @@ config BR2_ENDIAN
 config BR2_GCC_TARGET_CPU
 	default "arc700" if BR2_arc750d
 	default "arc700" if BR2_arc770d
+	default "archs"	 if BR2_archs38
package/uclibc/Config.in +1 -0
index c68558f..40a268b 100644
@@ -199,6 +199,7 @@ config BR2_UCLIBC_ARC_TYPE
 	depends on BR2_UCLIBC_TARGET_ARCH = "arc"
 	default ARC_CPU_700	if BR2_arc750d
 	default ARC_CPU_700	if BR2_arc770d
+	default ARC_CPU_HS	if BR2_archs38
 
 config BR2_UCLIBC_ARM_BX
 	bool
Signature · 1 line
1.9.3
#9 lore raw

PATCH 3/3 arc: add support of ARC HS38 core

Alexey, All,

On 2014-10-30 16:57 +0300, Alexey Brodkin spake thusly:

Quoted 9 lines

Synopsys has recently announced its new ARC HS38 core that is capable of running Linux -
http://www.synopsys.com/dw/ipdir.php?ds=arc-hs38-processor

ARC HS38 is based on ARCv2 ISA and requires special settings of gcc and libc.

Also in case of HS38 atomic extensions (LLOCK/SCOND instructions) are built-in by default, so enabling atomic extensions in Buildroot as well.

Ditto as for the first patch: are atomics configurable? Ditto the proposal if not.

Quoted 42 lines

This commit adds support of the core in buildroot.

Cc Thomas Petazzoni <[email protected]>
Cc Anton Kolesov <[email protected]>
---
 arch/Config.in.arc       | 6 +++++-
 package/uclibc/Config.in | 1 +
 2 files changed, 6 insertions(+), 1 deletion(-)
arch/Config.in.arc +5 -1
index b31b141..b48a90f 100644
@@ -11,12 +11,15 @@ config BR2_arc750d
 config BR2_arc770d
 	bool "ARC 770D"
 
+config BR2_archs38
+	bool "ARC HS38"
+
 endchoice
 
 # Choice of atomic instructions presence
 config BR2_ARC_ATOMIC_EXT
 	bool "Atomic extension (LLOCK/SCOND instructions)"
-	default y if BR2_arc770d
+	default y if BR2_arc770d || BR2_archs38
 
 config BR2_ARCH_HAS_ATOMICS
 	default y if BR2_ARC_ATOMIC_EXT
@@ -36,3 +39,4 @@ config BR2_ENDIAN
 config BR2_GCC_TARGET_CPU
 	default "arc700" if BR2_arc750d
 	default "arc700" if BR2_arc770d
+	default "archs"	 if BR2_archs38
package/uclibc/Config.in +0 -0
index c68558f..40a268b 100644

package/uclibc/Config.in config BR2_UCLIBC_ARC_TYPE · line 202

Quoted 4 lines
package/uclibc/Config.in +1 -0
@@ -199,6 +199,7 @@ config BR2_UCLIBC_ARC_TYPE
 	depends on BR2_UCLIBC_TARGET_ARCH = "arc"
 	default ARC_CPU_700	if BR2_arc750d
 	default ARC_CPU_700	if BR2_arc770d
+	default ARC_CPU_HS	if BR2_archs38

Ditto: this is a string, so values must be enclosed between double quotes.

Regards,
Yann E. MORIN.

Quoted 10 lines
package/uclibc/Config.in +0 -0
 config BR2_UCLIBC_ARM_BX
 	bool
Signature · 6 lines
1.9.3

_______________________________________________
buildroot mailing list
buildroot at busybox.net
http://lists.busybox.net/mailman/listinfo/buildroot
Signature · 6 lines
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'
#10 lore raw

PATCH 3/3 arc: add support of ARC HS38 core

Alexey, All,

On 2014-11-01 22:47 +0100, Yann E. MORIN spake thusly:

Quoted 5 lines

On 2014-10-30 16:57 +0300, Alexey Brodkin spake thusly:

Quoted 4 lines

Synopsys has recently announced its new ARC HS38 core that is capable of running Linux -
http://www.synopsys.com/dw/ipdir.php?ds=arc-hs38-processor

Quoted 8 lines
Quoted 5 lines

ARC HS38 is based on ARCv2 ISA and requires special settings of gcc and libc.

Also in case of HS38 atomic extensions (LLOCK/SCOND instructions) are built-in by default, so enabling atomic extensions in Buildroot as well.

Ditto as for the first patch: are atomics configurable? Ditto the proposal if not.

Ditto: I just read your previous explanations, so just forget about that part. Still the comment below stands...

[--SNIP--]

Quoted 4 lines
Quoted 4 lines
package/uclibc/Config.in +0 -0
index c68558f..40a268b 100644
Quoted 8 lines

package/uclibc/Config.in config BR2_UCLIBC_ARC_TYPE · line 202

Quoted 5 lines
package/uclibc/Config.in +1 -0
@@ -199,6 +199,7 @@ config BR2_UCLIBC_ARC_TYPE
 	depends on BR2_UCLIBC_TARGET_ARCH = "arc"
 	default ARC_CPU_700	if BR2_arc750d
 	default ARC_CPU_700	if BR2_arc770d
+	default ARC_CPU_HS	if BR2_archs38

Ditto: this is a string, so values must be enclosed between double quotes.

Regards,
Yann E. MORIN.

Signature · 6 lines
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'
#11 lore raw

PATCH 3/3 arc: add support of ARC HS38 core

In reply to Alexey Brodkin
Quoted 6 lines
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line

"Alexey" == Alexey Brodkin <[email protected]> writes:

Synopsys has recently announced its new ARC HS38 core that is capable of running Linux -
http://www.synopsys.com/dw/ipdir.php?ds=arc-hs38-processor

Quoted 7 lines

ARC HS38 is based on ARCv2 ISA and requires special settings of gcc and libc.

Also in case of HS38 atomic extensions (LLOCK/SCOND instructions) are built-in by default, so enabling atomic extensions in Buildroot as well.

This commit adds support of the core in buildroot.

Committed with quotes added as noted by Yann, thanks.

Signature · 1 line
Bye, Peter Korsgaard