Skip to contentSkip to conversation

ARC: allow selection of MMU page size

PATCH New Alexey Brodkin 3 participants 6 messages Jul 16, 2015 – Jul 17, 2015

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 ARC: allow selection of MMU page size

Modern ARC cores (those sporting MMU of version 3 and 4) allow selection of different page sizes (4, 8 or 16 kB) during ASIC design creation. And it's important to build a toolchain with page size setting that matches hardware.

Otherwise user-space applications will fail on execution due to unexpected data layout/alignment etc.

c: Anton Kolesov <[email protected]>
Cc: Thomas Petazzoni <[email protected]>

---
 arch/Config.in.arc       | 30 ++++++++++++++++++++++++++++++
 package/uclibc/uclibc.mk |  8 ++++++++
 2 files changed, 38 insertions(+)
arch/Config.in.arc +30 -0
index b48a90f..e960eb8 100644
@@ -40,3 +40,33 @@ config BR2_GCC_TARGET_CPU
 	default "arc700" if BR2_arc750d
 	default "arc700" if BR2_arc770d
 	default "archs"	 if BR2_archs38
+
+choice
+	prompt "MMU Page Size"
+	default BR2_arc_page_size_8k
+	help
+	    MMU starting from version 3 (could be found in ARC 770) and now
+	    version 4 (could be found in ARC HS38) allows selection of page
+	    size during ASIC design creation. And it's important to build
+	    a toolchain with page size setting that matches hardware.
+	    Otherwise user-space applications will fail on execution due to
+	    unexpected data layout/alignment.
+
+config BR2_arc_page_size_4k
+	bool "4KB"
+	depends on BR2_arc770d || BR2_archs38
+
+config BR2_arc_page_size_8k
+	bool "8KB"
+
+config BR2_arc_page_size_16k
+	bool "16KB"
+	depends on BR2_arc770d || BR2_archs38
+
+endchoice
+
+config BR2_ARC_PAGE_SIZE
+	string
+	default "4K" if BR2_arc_page_size_4k
+	default "8K" if BR2_arc_page_size_8k
+	default "16K" if BR2_arc_page_size_16k
package/uclibc/uclibc.mk +8 -0
index 9dfafad..a2ba230 100644
@@ -70,6 +70,13 @@ 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
+
+UCLIBC_ARC_PAGE_SIZE = CONFIG_ARC_PAGE_SIZE_$(call qstrip,$(BR2_ARC_PAGE_SIZE))
+define UCLIBC_ARC_PAGE_SIZE_CONFIG
+	$(SED) '/CONFIG_ARC_PAGE_SIZE_*/d' $(@D)/.config
+	$(call KCONFIG_ENABLE_OPT,$(UCLIBC_ARC_PAGE_SIZE),$(@D)/.config)
+endef
+
 endif # arc
 
 #
@@ -367,6 +374,7 @@ define UCLIBC_KCONFIG_FIXUP_CMDS
 	$(call KCONFIG_SET_OPT,SHARED_LIB_LOADER_PREFIX,"/lib",$(@D)/.config)
 	$(UCLIBC_MMU_CONFIG)
 	$(UCLIBC_ARC_TYPE_CONFIG)
+	$(UCLIBC_ARC_PAGE_SIZE_CONFIG)
 	$(UCLIBC_ARM_ABI_CONFIG)
 	$(UCLIBC_ARM_BX_CONFIG)
 	$(UCLIBC_MIPS_ABI_CONFIG)
Signature · 1 line
2.4.3
#1 lore raw

PATCH 1/1 ARC: allow selection of MMU page size

Dear Alexey Brodkin,

arch/Config.in.arc config BR2_GCC_TARGET_CPU · line 50

Quoted 7 lines · Alexey Brodkin
arch/Config.in.arc +7 -0
+choice
+	prompt "MMU Page Size"
+	default BR2_arc_page_size_8k
+	help
+	    MMU starting from version 3 (could be found in ARC 770) and now
+	    version 4 (could be found in ARC HS38) allows selection of page
+	    size during ASIC design creation. And it's important to build

Remove the "And".

arch/Config.in.arc config BR2_GCC_TARGET_CPU · line 51

Quoted 1 line
arch/Config.in.arc +1 -0
+	    a toolchain with page size setting that matches hardware.

"with a page size matching the hardware configuration"

arch/Config.in.arc config BR2_GCC_TARGET_CPU · line 52

Quoted 1 line
arch/Config.in.arc +1 -0
+	    Otherwise user-space applications will fail on execution due to

"will fail at runtime"

arch/Config.in.arc config BR2_GCC_TARGET_CPU · line 53

Quoted 1 line
arch/Config.in.arc +1 -0
+	    unexpected data layout/alignment.

What is the impact for people using external toolchains?

Review

Quoted 2 lines
(quoted diff) +2 -0
+
+config BR2_arc_page_size_4k

Can you use BR2_ARC_PAGE_SIZE_4K instead? I know the BR2_arc option is lower-case, but for most architectures options are upper-case, even if the core selection is lower-case. I think lower-case options is more an accident of the past rather than a real policy.

arch/Config.in.arc config BR2_GCC_TARGET_CPU · line 64

Quoted 9 lines
arch/Config.in.arc +9 -0
+	bool "4KB"
+	depends on BR2_arc770d || BR2_archs38
+
+config BR2_arc_page_size_8k
+	bool "8KB"
+
+config BR2_arc_page_size_16k
+	bool "16KB"
+	depends on BR2_arc770d || BR2_archs38

Can you quickly comment on why 4 KB / 16 KB have dependencies on specific ARC cores and not 8 KB ?

Can you respin with those changes?

Thanks!

Thomas

Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
#2 lore raw

PATCH 1/1 ARC: allow selection of MMU page size

Hi Thomas,

Quoted 14 lines · Thomas Petazzoni

Dear Alexey Brodkin,

arch/Config.in.arc config BR2_GCC_TARGET_CPU · line 50

Quoted 7 lines · Alexey Brodkin
arch/Config.in.arc +7 -0
+choice
+	prompt "MMU Page Size"
+	default BR2_arc_page_size_8k
+	help
+	    MMU starting from version 3 (could be found in ARC 770) and now
+	    version 4 (could be found in ARC HS38) allows selection of page
+	    size during ASIC design creation. And it's important to build

Remove the "And".

Quoted 7 lines

arch/Config.in.arc config BR2_GCC_TARGET_CPU · line 51

Quoted 1 line
arch/Config.in.arc +1 -0
+	    a toolchain with page size setting that matches hardware.

"with a page size matching the hardware configuration"

arch/Config.in.arc config BR2_GCC_TARGET_CPU · line 52

Quoted 1 line
arch/Config.in.arc +1 -0
+	    Otherwise user-space applications will fail on execution due to

"will fail at runtime"

Thanks for pointing to that.

Quoted 3 lines

arch/Config.in.arc config BR2_GCC_TARGET_CPU · line 53

Quoted 1 line
arch/Config.in.arc +1 -0
+	    unexpected data layout/alignment.

What is the impact for people using external toolchains?

Well people have to use toolchain which page size matches HW. That means you need to know which value is set in both toolchain and HW.

By default in either substances 8k is used and most of the time people will use it.

Still even in case of external toolchain we nay check for PAGE_SHIFT value in "sysroot/usr/include/bits/uClibc_page.h".

PAGE_SHIFT=12 -> PAGE_SIZE=4k
PAGE_SHIFT=13 -> PAGE_SIZE=8k (default)
PAGE_SHIFT=14 -> PAGE_SIZE=16k

Quoted 7 lines

Review

Quoted 2 lines
(quoted diff) +2 -0
+
+config BR2_arc_page_size_4k

Can you use BR2_ARC_PAGE_SIZE_4K instead? I know the BR2_arc option is lower-case, but for most architectures options are upper-case, even if the core selection is lower-case. I think lower-case options is more an accident of the past rather than a real policy.

OK, will do.

Quoted 4 lines
Quoted 4 lines
arch/Config.in.arc +4 -0
+	bool "4KB"
+	depends on BR2_arc770d || BR2_archs38
+
+config BR2_arc_page_size_8k
Quoted 8 lines

arch/Config.in.arc config BR2_GCC_TARGET_CPU · line 64

Quoted 5 lines
arch/Config.in.arc +5 -0
+	bool "8KB"
+
+config BR2_arc_page_size_16k
+	bool "16KB"
+	depends on BR2_arc770d || BR2_archs38

Can you quickly comment on why 4 KB / 16 KB have dependencies on specific ARC cores and not 8 KB ?

8K page was the only option on earlier ARC cores like ARC 750D. Starting from ARC 770D it's possible to select page size from 3 options:
4, 8 and 16k. But still 8k is its default value and most often that's what people use.

Do you want that comment

Quoted 1 line

Can you respin with those changes?

Sure, will do shortly.\

-Alexey

#3 lore raw

PATCH 1/1 ARC: allow selection of MMU page size

In reply to Alexey Brodkin
Quoted 21 lines · Alexey Brodkin

Modern ARC cores (those sporting MMU of version 3 and 4) allow selection of different page sizes (4, 8 or 16 kB) during ASIC design creation. And it's important to build a toolchain with page size setting that matches hardware.

Otherwise user-space applications will fail on execution due to unexpected data layout/alignment etc.

c: Anton Kolesov <[email protected]>
Cc: Thomas Petazzoni <[email protected]>

---
 arch/Config.in.arc       | 30 ++++++++++++++++++++++++++++++
 package/uclibc/uclibc.mk |  8 ++++++++
 2 files changed, 38 insertions(+)
arch/Config.in.arc +0 -0
index b48a90f..e960eb8 100644

arch/Config.in.arc config BR2_GCC_TARGET_CPU · line 45

Quoted 6 lines
arch/Config.in.arc +3 -0
@@ -40,3 +40,33 @@ config BR2_GCC_TARGET_CPU
 	default "arc700" if BR2_arc750d
 	default "arc700" if BR2_arc770d
 	default "archs"	 if BR2_archs38
+
+choice
+	prompt "MMU Page Size"

It is not really current policy, but wouldn't it make more sense to do

	prompt "MMU Page Size" if BR2_arc770d || BR2_archs38

? (i.e., only show it when there's anything to choose).

Also perhaps it makes sense to add a new symbol
BR2_ARC_SUPPORTS_PAGE_SIZE_SELECTION or similar instead of specifying the individual processors.

Regards,
Arnout

Quoted 19 lines
arch/Config.in.arc +19 -0
+	default BR2_arc_page_size_8k
+	help
+	    MMU starting from version 3 (could be found in ARC 770) and now
+	    version 4 (could be found in ARC HS38) allows selection of page
+	    size during ASIC design creation. And it's important to build
+	    a toolchain with page size setting that matches hardware.
+	    Otherwise user-space applications will fail on execution due to
+	    unexpected data layout/alignment.
+
+config BR2_arc_page_size_4k
+	bool "4KB"
+	depends on BR2_arc770d || BR2_archs38
+
+config BR2_arc_page_size_8k
+	bool "8KB"
+
+config BR2_arc_page_size_16k
+	bool "16KB"
+	depends on BR2_arc770d || BR2_archs38

[snip]

Signature · 6 lines
Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7493 020B C7E3 8618 8DEC 222C 82EB F404 F9AC 0DDF
#4 lore raw

PATCH 1/1 ARC: allow selection of MMU page size

Arnout,

Quoted 6 lines · Arnout Vandecappelle

arch/Config.in.arc config BR2_GCC_TARGET_CPU · line 45

Quoted 2 lines
arch/Config.in.arc +2 -0
+choice
+	prompt "MMU Page Size"

It is not really current policy, but wouldn't it make more sense to do

	prompt "MMU Page Size" if BR2_arc770d || BR2_archs38

Why? In the patch submitted by Alexey, the 8K option is available for all cores.

Thomas

Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
#5 lore raw

PATCH 1/1 ARC: allow selection of MMU page size

Hi Thomas, Arnout,

Quoted 9 lines · Thomas Petazzoni

Arnout,

Quoted 5 lines · Arnout Vandecappelle

arch/Config.in.arc config BR2_GCC_TARGET_CPU · line 45

Quoted 2 lines
arch/Config.in.arc +2 -0
+choice
+	prompt "MMU Page Size"

It is not really current policy, but wouldn't it make more sense to do

Quoted 4 lines
Quoted 1 line
	prompt "MMU Page Size" if BR2_arc770d || BR2_archs38

Why? In the patch submitted by Alexey, the 8K option is available for all cores.

Indeed there's no reason to select page size for MMUv2 (read ARC 750D), but IMHO it's good to let user know what's current page size.

Because software built for ARC 750D will run perfectly fine on ARC770D if it has the same page size (and by default it is 8k).

That's why I decided to leave a "Page Size" entry in configuration utility even though it could not be modified for ARC 750D.

-Alexey