1499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo/* 2499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo * Memory layout definitions for the Hexagon architecture 3499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo * 4499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo * Copyright (c) 2010-2011, Code Aurora Forum. All rights reserved. 5499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo * 6499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo * This program is free software; you can redistribute it and/or modify 7499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo * it under the terms of the GNU General Public License version 2 and 8499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo * only version 2 as published by the Free Software Foundation. 9499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo * 10499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo * This program is distributed in the hope that it will be useful, 11499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo * but WITHOUT ANY WARRANTY; without even the implied warranty of 12499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo * GNU General Public License for more details. 14499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo * 15499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo * You should have received a copy of the GNU General Public License 16499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo * along with this program; if not, write to the Free Software 17499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 18499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo * 02110-1301, USA. 19499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo */ 20499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo 21499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo#ifndef _ASM_HEXAGON_MEM_LAYOUT_H 22499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo#define _ASM_HEXAGON_MEM_LAYOUT_H 23499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo 24499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo#include <linux/const.h> 25499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo 26499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo/* 27499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo * Have to do this for ginormous numbers, else they get printed as 28499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo * negative numbers, which the linker no likey when you try to 29499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo * assign it to the location counter. 30499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo */ 31499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo 32499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo#define PAGE_OFFSET _AC(0xc0000000, UL) 33499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo 34499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo/* 35499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo * LOAD_ADDRESS is the physical/linear address of where in memory 36499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo * the kernel gets loaded. The 12 least significant bits must be zero (0) 37499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo * due to limitations on setting the EVB 38499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo * 39499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo */ 40499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo 41499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo#ifndef LOAD_ADDRESS 42499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo#define LOAD_ADDRESS 0x00000000 43499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo#endif 44499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo 45499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo#define TASK_SIZE (PAGE_OFFSET) 46499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo 47499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo/* not sure how these are used yet */ 48499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo#define STACK_TOP TASK_SIZE 49499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo#define STACK_TOP_MAX TASK_SIZE 50499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo 51499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo#ifndef __ASSEMBLY__ 52499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuoenum fixed_addresses { 53499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo FIX_KMAP_BEGIN, 54499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo FIX_KMAP_END, /* check for per-cpuism */ 55499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo __end_of_fixed_addresses 56499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo}; 57499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo 58499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo#define MIN_KERNEL_SEG 0x300 /* From 0xc0000000 */ 59499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuoextern int max_kernel_seg; 60499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo 61499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo/* 62499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo * Start of vmalloc virtual address space for kernel; 63499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo * supposed to be based on the amount of physical memory available 64499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo */ 65499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo 66499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo#define VMALLOC_START (PAGE_OFFSET + VMALLOC_OFFSET + \ 67499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo (unsigned long)high_memory) 68499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo 69499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo/* Gap between physical ram and vmalloc space for guard purposes. */ 70499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo#define VMALLOC_OFFSET PAGE_SIZE 71499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo 72499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo/* 73499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo * Create the space between VMALLOC_START and FIXADDR_TOP backwards 74499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo * from the ... "top". 75499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo * 76499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo * Permanent IO mappings will live at 0xfexx_xxxx 77499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo * Hypervisor occupies the last 16MB page at 0xffxxxxxx 78499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo */ 79499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo 80499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo#define FIXADDR_TOP 0xfe000000 81499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo#define FIXADDR_SIZE (__end_of_fixed_addresses << PAGE_SHIFT) 82499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo#define FIXADDR_START (FIXADDR_TOP - FIXADDR_SIZE) 83499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo 84499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo/* 85499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo * "permanent kernel mappings", defined as long-lasting mappings of 86499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo * high-memory page frames into the kernel address space. 87499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo */ 88499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo 89499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo#define LAST_PKMAP PTRS_PER_PTE 90499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo#define LAST_PKMAP_MASK (LAST_PKMAP - 1) 91499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo#define PKMAP_NR(virt) ((virt - PKMAP_BASE) >> PAGE_SHIFT) 92499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo#define PKMAP_ADDR(nr) (PKMAP_BASE + ((nr) << PAGE_SHIFT)) 93499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo 94499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo/* 95499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo * To the "left" of the fixed map space is the kmap space 96499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo * 97499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo * "Permanent Kernel Mappings"; fancy (or less fancy) PTE table 98499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo * that looks like it's actually walked. 99499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo * Need to check the alignment/shift usage; some archs use 100499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo * PMD_MASK on this value 101499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo */ 102499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo#define PKMAP_BASE (FIXADDR_START-PAGE_SIZE*LAST_PKMAP) 103499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo 104499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo/* 105499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo * 2 pages of guard gap between where vmalloc area ends 106499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo * and pkmap_base begins. 107499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo */ 108499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo#define VMALLOC_END (PKMAP_BASE-PAGE_SIZE*2) 109499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo#endif /* !__ASSEMBLY__ */ 110499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo 111499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo 112499236d9db5a349eeab2e9f2791e2d69c2e4ed53Richard Kuo#endif /* _ASM_HEXAGON_MEM_LAYOUT_H */ 113