ARC: allow selection of MMU page size
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
@@ -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
@@ -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
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
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 buildRemove 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_4kCan you use
BR2_ARC_PAGE_SIZE_4Kinstead? I know theBR2_arcoption 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_archs38Can 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
PATCH 1/1 ARC: allow selection of MMU page size
In reply to Alexey BrodkinQuoted 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.
Signed-off-by Alexey Brodkin <[email protected]>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
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 symbolBR2_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
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
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_archs38Why? 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