ARC: allow selection of MMU page size
authorAlexey Brodkin <Alexey.Brodkin@synopsys.com>
Fri, 17 Jul 2015 09:11:42 +0000 (12:11 +0300)
committerThomas Petazzoni <thomas.petazzoni@free-electrons.com>
Sat, 18 Jul 2015 12:07:35 +0000 (14:07 +0200)
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.

[Thomas: slightly improve help text, fix indentation of help text.]

Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
Cc: Anton Kolesov <akolesov@synopsys.com>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Cc: Arnout Vandecappelle <arnout@mind.be>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
arch/Config.in.arc
package/uclibc/uclibc.mk

index b48a90ff07c7d4a7412d225a483c0fd3a9dfb432..7e0ad08425cbbc9db95383ed7ea354b85ee790e1 100644 (file)
@@ -40,3 +40,41 @@ 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 (found in ARC 770) and now
+         version 4 (found in ARC HS38) allows the selection of the
+         page size during ASIC design creation.
+
+         The following options are available for MMU v3 and v4: 4kB,
+         8kB and 16 kB.
+
+         The default is 8 kB (that really matches the only page size
+         in MMU v2).  It is important to build a toolchain with page
+         size matching the hardware configuration. Otherwise
+         user-space applications will fail at runtime.
+
+config BR2_ARC_PAGE_SIZE_4K
+       bool "4KB"
+       depends on BR2_arc770d || BR2_archs38
+
+config BR2_ARC_PAGE_SIZE_8K
+       bool "8KB"
+       help
+         This is the one and only option available for MMUv2 and
+         default value for MMU v3 and v4.
+
+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
index 9dfafad457e8887ba8bc09e0f4e01a9b2241ae6d..a2ba23017b4e54034e7d2bbd3ab3fe31ab81bbac 100644 (file)
@@ -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)