1/* 2 * Copyright 2022 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * https://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17.set .L_TT_TYPE_BLOCK, 0x1 18.set .L_TT_TYPE_PAGE, 0x3 19.set .L_TT_TYPE_TABLE, 0x3 20 21/* Access flag. */ 22.set .L_TT_AF, 0x1 << 10 23/* Not global. */ 24.set .L_TT_NG, 0x1 << 11 25.set .L_TT_RO, 0x2 << 6 26.set .L_TT_XN, 0x3 << 53 27 28.set .L_TT_MT_DEV, 0x0 << 2 // MAIR #0 (DEV_nGnRE) 29.set .L_TT_MT_MEM, (0x1 << 2) | (0x3 << 8) // MAIR #1 (MEM_WBWA), inner shareable 30 31.set .L_BLOCK_RO, .L_TT_TYPE_BLOCK | .L_TT_MT_MEM | .L_TT_AF | .L_TT_RO | .L_TT_XN 32.set .L_BLOCK_DEV, .L_TT_TYPE_BLOCK | .L_TT_MT_DEV | .L_TT_AF | .L_TT_XN 33.set .L_BLOCK_MEM, .L_TT_TYPE_BLOCK | .L_TT_MT_MEM | .L_TT_AF | .L_TT_XN | .L_TT_NG 34.set .L_BLOCK_MEM_XIP, .L_TT_TYPE_BLOCK | .L_TT_MT_MEM | .L_TT_AF | .L_TT_NG | .L_TT_RO 35 36.section ".rodata.idmap", "a", %progbits 37.global idmap 38.align 12 39idmap: 40 /* level 1 */ 41 .quad .L_BLOCK_DEV | 0x0 // 1 GiB of device mappings 42 .quad 0x0 // 1 GiB unmapped 43 .quad .L_TT_TYPE_TABLE + 0f // up to 1 GiB of DRAM 44 .fill 509, 8, 0x0 // 509 GiB of remaining VA space 45 46 /* level 2 */ 470: .quad .L_BLOCK_MEM | 0x80000000 // DT provided by VMM 48 .quad .L_BLOCK_MEM_XIP | 0x80200000 // 2 MiB of DRAM containing image 49 .quad .L_BLOCK_MEM | 0x80400000 // 2 MiB of writable DRAM 50 .fill 509, 8, 0x0 51