summary refs log tree commit diff
path: root/arch/arc/Kconfig
diff options
context:
space:
mode:
authorVineet Gupta <vgupta@synopsys.com>2015-03-09 18:53:49 +0530
committerVineet Gupta <vgupta@synopsys.com>2015-10-28 19:49:04 +0530
commit45890f6d34e70d9dd194bd1729eba3ff72cabf78 (patch)
tree11ebe206ba2fe233edc91d49e334dcef46dcf890 /arch/arc/Kconfig
parent6101be5ad439806c70b54bdd083e7db9e3affb3d (diff)
downloadlinux-45890f6d34e70d9dd194bd1729eba3ff72cabf78.tar.gz
ARC: mm: HIGHMEM: kmap API implementation
Implement kmap* API for ARC.

This enables
 - permanent kernel maps (pkmaps): :kmap() API
 - fixmap : kmap_atomic()

We use a very simple/uniform approach for both (unlike some of the other
arches). So fixmap doesn't use the customary compile time address stuff.
The important semantic is sleep'ability (pkmap) vs. not (fixmap) which
the API guarantees.

Note that this patch only enables highmem for subsequent PAE40 support
as there is no real highmem for ARC in pure 32-bit paradigm as explained
below.

ARC has 2:2 address split of the 32-bit address space with lower half
being translated (virtual) while upper half unstranslated
(0x8000_0000 to 0xFFFF_FFFF). kernel itself is linked at base of
unstranslated space (i.e. 0x8000_0000 onwards), which is mapped to say
DDR 0x0 by external Bus Glue logic (outside the core). So kernel can
potentially access 1.75G worth of memory directly w/o need for highmem.
(the top 256M is taken by uncached peripheral space from 0xF000_0000 to
0xFFFF_FFFF)

In PAE40, hardware can address memory beyond 4G (0x1_0000_0000) while
the logical/virtual addresses remain 32-bits. Thus highmem is required
for kernel proper to be able to access these pages for it's own purposes
(user space is agnostic to this anyways).

Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
Diffstat (limited to 'arch/arc/Kconfig')
-rw-r--r--arch/arc/Kconfig7
1 files changed, 7 insertions, 0 deletions
diff --git a/arch/arc/Kconfig b/arch/arc/Kconfig
index cc938967282b..fd9632f4ddc8 100644
--- a/arch/arc/Kconfig
+++ b/arch/arc/Kconfig
@@ -446,6 +446,13 @@ config LINUX_LINK_BASE
 	  Linux needs to be scooted a bit.
 	  If you don't know what the above means, leave this setting alone.
 
+config HIGHMEM
+	bool "High Memory Support"
+	help
+	  With ARC 2G:2G address split, only upper 2G is directly addressable by
+	  kernel. Enable this to potentially allow access to rest of 2G and PAE
+	  in future
+
 config ARC_CURR_IN_REG
 	bool "Dedicate Register r25 for current_task pointer"
 	default y