root/arch/hexagon/include/asm/mem-layout.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* SPDX-License-Identifier: GPL-2.0-only */
   2 /*
   3  * Memory layout definitions for the Hexagon architecture
   4  *
   5  * Copyright (c) 2010-2013, The Linux Foundation. All rights reserved.
   6  */
   7 
   8 #ifndef _ASM_HEXAGON_MEM_LAYOUT_H
   9 #define _ASM_HEXAGON_MEM_LAYOUT_H
  10 
  11 #include <linux/const.h>
  12 
  13 /*
  14  * Have to do this for ginormous numbers, else they get printed as
  15  * negative numbers, which the linker no likey when you try to
  16  * assign it to the location counter.
  17  */
  18 
  19 #define PAGE_OFFSET                     _AC(0xc0000000, UL)
  20 
  21 /*
  22  * Compiling for a platform that needs a crazy physical offset
  23  * (like if the memory starts at 1GB and up) means we need
  24  * an actual PHYS_OFFSET.  Should be set up in head.S.
  25  */
  26 
  27 #ifdef CONFIG_HEXAGON_PHYS_OFFSET
  28 #ifndef __ASSEMBLY__
  29 extern unsigned long    __phys_offset;
  30 #endif
  31 #define PHYS_OFFSET     __phys_offset
  32 #endif
  33 
  34 #ifndef PHYS_OFFSET
  35 #define PHYS_OFFSET     0
  36 #endif
  37 
  38 #define PHYS_PFN_OFFSET (PHYS_OFFSET >> PAGE_SHIFT)
  39 #define ARCH_PFN_OFFSET PHYS_PFN_OFFSET
  40 
  41 #define TASK_SIZE                       (PAGE_OFFSET)
  42 
  43 /*  not sure how these are used yet  */
  44 #define STACK_TOP                       TASK_SIZE
  45 #define STACK_TOP_MAX                   TASK_SIZE
  46 
  47 #ifndef __ASSEMBLY__
  48 enum fixed_addresses {
  49         FIX_KMAP_BEGIN,
  50         FIX_KMAP_END,  /*  check for per-cpuism  */
  51         __end_of_fixed_addresses
  52 };
  53 
  54 #define MIN_KERNEL_SEG (PAGE_OFFSET >> PGDIR_SHIFT)   /* L1 shift is 22 bits */
  55 extern int max_kernel_seg;
  56 
  57 /*
  58  * Start of vmalloc virtual address space for kernel;
  59  * supposed to be based on the amount of physical memory available
  60  */
  61 
  62 #define VMALLOC_START ((unsigned long) __va(high_memory + VMALLOC_OFFSET))
  63 
  64 /* Gap between physical ram and vmalloc space for guard purposes. */
  65 #define VMALLOC_OFFSET PAGE_SIZE
  66 
  67 /*
  68  * Create the space between VMALLOC_START and FIXADDR_TOP backwards
  69  * from the ... "top".
  70  *
  71  * Permanent IO mappings will live at 0xfexx_xxxx
  72  * Hypervisor occupies the last 16MB page at 0xffxxxxxx
  73  */
  74 
  75 #define FIXADDR_TOP     0xfe000000
  76 #define FIXADDR_SIZE    (__end_of_fixed_addresses << PAGE_SHIFT)
  77 #define FIXADDR_START   (FIXADDR_TOP - FIXADDR_SIZE)
  78 
  79 /*
  80  * "permanent kernel mappings", defined as long-lasting mappings of
  81  * high-memory page frames into the kernel address space.
  82  */
  83 
  84 #define LAST_PKMAP      PTRS_PER_PTE
  85 #define LAST_PKMAP_MASK (LAST_PKMAP - 1)
  86 #define PKMAP_NR(virt)  ((virt - PKMAP_BASE) >> PAGE_SHIFT)
  87 #define PKMAP_ADDR(nr)  (PKMAP_BASE + ((nr) << PAGE_SHIFT))
  88 
  89 /*
  90  * To the "left" of the fixed map space is the kmap space
  91  *
  92  * "Permanent Kernel Mappings"; fancy (or less fancy) PTE table
  93  * that looks like it's actually walked.
  94  * Need to check the alignment/shift usage; some archs use
  95  * PMD_MASK on this value
  96  */
  97 #define PKMAP_BASE (FIXADDR_START-PAGE_SIZE*LAST_PKMAP)
  98 
  99 /*
 100  * 2 pages of guard gap between where vmalloc area ends
 101  * and pkmap_base begins.
 102  */
 103 #define VMALLOC_END (PKMAP_BASE-PAGE_SIZE*2)
 104 #endif /*  !__ASSEMBLY__  */
 105 
 106 
 107 #endif /* _ASM_HEXAGON_MEM_LAYOUT_H */

/* [<][>][^][v][top][bottom][index][help] */