Depending on the number of available BATs for mapping the different
kernel areas, it might be needed to increase the alignment of _etext
and/or of data areas.

This patchs allows the user to do it via Kconfig.

Signed-off-by: Christophe Leroy <christophe.le...@c-s.fr>
---
 arch/powerpc/Kconfig | 32 ++++++++++++++++++++++++++++++--
 1 file changed, 30 insertions(+), 2 deletions(-)

diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
index ffcf4d7a1186..bab9dab815d9 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -728,16 +728,44 @@ config THREAD_SHIFT
          Used to define the stack size. The default is almost always what you
          want. Only change this if you know what you are doing.
 
+config ETEXT_SHIFT_BOOL
+       bool "Set custom etext alignment" if STRICT_KERNEL_RWX && PPC_BOOK3S_32
+       depends on ADVANCED_OPTIONS
+       help
+         This option allows you to set the kernel end of text alignment. When
+         RAM is mapped by blocks, the alignment needs to fit the size and
+         number of possible blocks. The default should be OK for most configs.
+
+         Say N here unless you know what you are doing.
+
 config ETEXT_SHIFT
-       int
+       int "_etext shift" if ETEXT_SHIFT_BOOL
+       range 17 28 if STRICT_KERNEL_RWX && PPC_BOOK3S_32
        default 17 if STRICT_KERNEL_RWX && PPC_BOOK3S_32
        default PPC_PAGE_SHIFT
+       help
+         On Book3S 32 (603+), IBATs are used to map kernel text.
+         Smaller is the alignment, greater is the number of necessary IBATs.
+
+config DATA_SHIFT_BOOL
+       bool "Set custom data alignment" if STRICT_KERNEL_RWX && PPC_BOOK3S_32
+       depends on ADVANCED_OPTIONS
+       help
+         This option allows you to set the kernel data alignment. When
+         RAM is mapped by blocks, the alignment needs to fit the size and
+         number of possible blocks. The default should be OK for most configs.
+
+         Say N here unless you know what you are doing.
 
 config DATA_SHIFT
-       int
+       int "Data shift" if DATA_SHIFT_BOOL
        default 24 if STRICT_KERNEL_RWX && PPC64
+       range 17 28 if STRICT_KERNEL_RWX && PPC_BOOK3S_32
        default 22 if STRICT_KERNEL_RWX && PPC_BOOK3S_32
        default PPC_PAGE_SHIFT
+       help
+         On Book3S 32 (603+), DBATs are used to map kernel text and rodata RO.
+         Smaller is the alignment, greater is the number of necessary DBATs.
 
 config FORCE_MAX_ZONEORDER
        int "Maximum zone order"
-- 
2.13.3

Reply via email to