]>
Commit | Line | Data |
---|---|---|
08dbd0f8 | 1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
499236d9 RK |
2 | /* |
3 | * Memory layout definitions for the Hexagon architecture | |
4 | * | |
7c6a5df4 | 5 | * Copyright (c) 2010-2013, The Linux Foundation. All rights reserved. |
499236d9 RK |
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 | /* | |
8f5a0b9d RK |
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. | |
499236d9 RK |
25 | */ |
26 | ||
8f5a0b9d RK |
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 | |
499236d9 RK |
36 | #endif |
37 | ||
8f5a0b9d RK |
38 | #define PHYS_PFN_OFFSET (PHYS_OFFSET >> PAGE_SHIFT) |
39 | #define ARCH_PFN_OFFSET PHYS_PFN_OFFSET | |
40 | ||
499236d9 RK |
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 | ||
e470d932 | 54 | #define MIN_KERNEL_SEG (PAGE_OFFSET >> PGDIR_SHIFT) /* L1 shift is 22 bits */ |
499236d9 RK |
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 | ||
5c883b46 | 62 | #define VMALLOC_START ((unsigned long) __va(high_memory + VMALLOC_OFFSET)) |
499236d9 RK |
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 */ |