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 GB of device mappings 42 .quad .L_TT_TYPE_TABLE + 0f // Unmapped device memory, and pVM firmware 43 .fill 510, 8, 0x0 // 510 GB of remaining VA space 44 45 /* level 2 */ 460: .fill 510, 8, 0x0 47 .quad .L_BLOCK_MEM_XIP | 0x7fc00000 // pVM firmware image 48 .quad .L_BLOCK_MEM | 0x7fe00000 // Writable memory for stack, heap &c. 49