• Vineet Gupta's avatar
    ARC: mm: HIGHMEM: kmap API implementation · 45890f6d
    Vineet Gupta authored
    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: default avatarAlexey Brodkin <abrodkin@synopsys.com>
    Signed-off-by: default avatarVineet Gupta <vgupta@synopsys.com>
    45890f6d
highmem.h 1.46 KB