This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Translation error at level1 in armv8 A72 cortex

Hi,

I am trying to enable MMU on LS1046ARDB using baremetal boot code . We are translating 1GB of DRAM as NORMAL READ WRITE memory . We are able to load entries into translation tables successfully . But as soon as MMU is enabled the execution is crashing and we are getting translation error at level 1 indicated in IFSC Field of ESR_EL3 Register.(Error code : 0x86000005)

Attached below is the assembly code we are using to set up Translation tables and enable MMU.

Are we missing anything? Any suggestions would be appreciated.

 

Thanks,

Faizanbaig Inamdar

7658.MMU.txt
/*
 * This file was automatically generated using arm64-pgtable-tool.
 * See: https://github.com/ashwio/arm64-pgtable-tool
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 *
 * This code programs the following translation table structure:
 *
 *         level 1 table @ 0x80000000
 *         [#   2]---------------------------\
 *                 level 2 table @ 0x80001000
 *                 [# 128] 0x000090000000-0x0000901fffff, RW_Data, DRAM
 *                 [# 129] 0x000090200000-0x0000903fffff, RW_Data, DRAM
 *                 [# 130] 0x000090400000-0x0000905fffff, RW_Data, DRAM
 *                 [# 131] 0x000090600000-0x0000907fffff, RW_Data, DRAM
 *                 [# 132] 0x000090800000-0x0000909fffff, RW_Data, DRAM
 *                 [# 133] 0x000090a00000-0x000090bfffff, RW_Data, DRAM
 *                 [# 134] 0x000090c00000-0x000090dfffff, RW_Data, DRAM
 *                 [# 135] 0x000090e00000-0x000090ffffff, RW_Data, DRAM
 *                 [# 136] 0x000091000000-0x0000911fffff, RW_Data, DRAM
 *                 [# 137] 0x000091200000-0x0000913fffff, RW_Data, DRAM
 *                 [# 138] 0x000091400000-0x0000915fffff, RW_Data, DRAM
 *                 [# 139] 0x000091600000-0x0000917fffff, RW_Data, DRAM
 *                 [# 140] 0x000091800000-0x0000919fffff, RW_Data, DRAM
 *                 [# 141] 0x000091a00000-0x000091bfffff, RW_Data, DRAM
 *                 [# 142] 0x000091c00000-0x000091dfffff, RW_Data, DRAM
 *                 [# 143] 0x000091e00000-0x000091ffffff, RW_Data, DRAM
 *                 [# 144] 0x000092000000-0x0000921fffff, RW_Data, DRAM
 *                 [# 145] 0x000092200000-0x0000923fffff, RW_Data, DRAM
 *                 [# 146] 0x000092400000-0x0000925fffff, RW_Data, DRAM
 *                 [# 147] 0x000092600000-0x0000927fffff, RW_Data, DRAM
 *                 [# 148] 0x000092800000-0x0000929fffff, RW_Data, DRAM
 *                 [# 149] 0x000092a00000-0x000092bfffff, RW_Data, DRAM
 *                 [# 150] 0x000092c00000-0x000092dfffff, RW_Data, DRAM
 *                 [# 151] 0x000092e00000-0x000092ffffff, RW_Data, DRAM
 *                 [# 152] 0x000093000000-0x0000931fffff, RW_Data, DRAM
 *                 [# 153] 0x000093200000-0x0000933fffff, RW_Data, DRAM
 *                 [# 154] 0x000093400000-0x0000935fffff, RW_Data, DRAM
 *                 [# 155] 0x000093600000-0x0000937fffff, RW_Data, DRAM
 *                 [# 156] 0x000093800000-0x0000939fffff, RW_Data, DRAM
 *                 [# 157] 0x000093a00000-0x000093bfffff, RW_Data, DRAM
 *                 [# 158] 0x000093c00000-0x000093dfffff, RW_Data, DRAM
 *                 [# 159] 0x000093e00000-0x000093ffffff, RW_Data, DRAM
 *                 [# 160] 0x000094000000-0x0000941fffff, RW_Data, DRAM
 *                 [# 161] 0x000094200000-0x0000943fffff, RW_Data, DRAM
 *                 [# 162] 0x000094400000-0x0000945fffff, RW_Data, DRAM
 *                 [# 163] 0x000094600000-0x0000947fffff, RW_Data, DRAM
 *                 [# 164] 0x000094800000-0x0000949fffff, RW_Data, DRAM
 *                 [# 165] 0x000094a00000-0x000094bfffff, RW_Data, DRAM
 *                 [# 166] 0x000094c00000-0x000094dfffff, RW_Data, DRAM
 *                 [# 167] 0x000094e00000-0x000094ffffff, RW_Data, DRAM
 *                 [# 168] 0x000095000000-0x0000951fffff, RW_Data, DRAM
 *                 [# 169] 0x000095200000-0x0000953fffff, RW_Data, DRAM
 *                 [# 170] 0x000095400000-0x0000955fffff, RW_Data, DRAM
 *                 [# 171] 0x000095600000-0x0000957fffff, RW_Data, DRAM
 *                 [# 172] 0x000095800000-0x0000959fffff, RW_Data, DRAM
 *                 [# 173] 0x000095a00000-0x000095bfffff, RW_Data, DRAM
 *                 [# 174] 0x000095c00000-0x000095dfffff, RW_Data, DRAM
 *                 [# 175] 0x000095e00000-0x000095ffffff, RW_Data, DRAM
 *                 [# 176] 0x000096000000-0x0000961fffff, RW_Data, DRAM
 *                 [# 177] 0x000096200000-0x0000963fffff, RW_Data, DRAM
 *                 [# 178] 0x000096400000-0x0000965fffff, RW_Data, DRAM
 *                 [# 179] 0x000096600000-0x0000967fffff, RW_Data, DRAM
 *                 [# 180] 0x000096800000-0x0000969fffff, RW_Data, DRAM
 *                 [# 181] 0x000096a00000-0x000096bfffff, RW_Data, DRAM
 *                 [# 182] 0x000096c00000-0x000096dfffff, RW_Data, DRAM
 *                 [# 183] 0x000096e00000-0x000096ffffff, RW_Data, DRAM
 *                 [# 184] 0x000097000000-0x0000971fffff, RW_Data, DRAM
 *                 [# 185] 0x000097200000-0x0000973fffff, RW_Data, DRAM
 *                 [# 186] 0x000097400000-0x0000975fffff, RW_Data, DRAM
 *                 [# 187] 0x000097600000-0x0000977fffff, RW_Data, DRAM
 *                 [# 188] 0x000097800000-0x0000979fffff, RW_Data, DRAM
 *                 [# 189] 0x000097a00000-0x000097bfffff, RW_Data, DRAM
 *                 [# 190] 0x000097c00000-0x000097dfffff, RW_Data, DRAM
 *                 [# 191] 0x000097e00000-0x000097ffffff, RW_Data, DRAM
 *                 [# 192] 0x000098000000-0x0000981fffff, RW_Data, DRAM
 *                 [# 193] 0x000098200000-0x0000983fffff, RW_Data, DRAM
 *                 [# 194] 0x000098400000-0x0000985fffff, RW_Data, DRAM
 *                 [# 195] 0x000098600000-0x0000987fffff, RW_Data, DRAM
 *                 [# 196] 0x000098800000-0x0000989fffff, RW_Data, DRAM
 *                 [# 197] 0x000098a00000-0x000098bfffff, RW_Data, DRAM
 *                 [# 198] 0x000098c00000-0x000098dfffff, RW_Data, DRAM
 *                 [# 199] 0x000098e00000-0x000098ffffff, RW_Data, DRAM
 *                 [# 200] 0x000099000000-0x0000991fffff, RW_Data, DRAM
 *                 [# 201] 0x000099200000-0x0000993fffff, RW_Data, DRAM
 *                 [# 202] 0x000099400000-0x0000995fffff, RW_Data, DRAM
 *                 [# 203] 0x000099600000-0x0000997fffff, RW_Data, DRAM
 *                 [# 204] 0x000099800000-0x0000999fffff, RW_Data, DRAM
 *                 [# 205] 0x000099a00000-0x000099bfffff, RW_Data, DRAM
 *                 [# 206] 0x000099c00000-0x000099dfffff, RW_Data, DRAM
 *                 [# 207] 0x000099e00000-0x000099ffffff, RW_Data, DRAM
 *                 [# 208] 0x00009a000000-0x00009a1fffff, RW_Data, DRAM
 *                 [# 209] 0x00009a200000-0x00009a3fffff, RW_Data, DRAM
 *                 [# 210] 0x00009a400000-0x00009a5fffff, RW_Data, DRAM
 *                 [# 211] 0x00009a600000-0x00009a7fffff, RW_Data, DRAM
 *                 [# 212] 0x00009a800000-0x00009a9fffff, RW_Data, DRAM
 *                 [# 213] 0x00009aa00000-0x00009abfffff, RW_Data, DRAM
 *                 [# 214] 0x00009ac00000-0x00009adfffff, RW_Data, DRAM
 *                 [# 215] 0x00009ae00000-0x00009affffff, RW_Data, DRAM
 *                 [# 216] 0x00009b000000-0x00009b1fffff, RW_Data, DRAM
 *                 [# 217] 0x00009b200000-0x00009b3fffff, RW_Data, DRAM
 *                 [# 218] 0x00009b400000-0x00009b5fffff, RW_Data, DRAM
 *                 [# 219] 0x00009b600000-0x00009b7fffff, RW_Data, DRAM
 *                 [# 220] 0x00009b800000-0x00009b9fffff, RW_Data, DRAM
 *                 [# 221] 0x00009ba00000-0x00009bbfffff, RW_Data, DRAM
 *                 [# 222] 0x00009bc00000-0x00009bdfffff, RW_Data, DRAM
 *                 [# 223] 0x00009be00000-0x00009bffffff, RW_Data, DRAM
 *                 [# 224] 0x00009c000000-0x00009c1fffff, RW_Data, DRAM
 *                 [# 225] 0x00009c200000-0x00009c3fffff, RW_Data, DRAM
 *                 [# 226] 0x00009c400000-0x00009c5fffff, RW_Data, DRAM
 *                 [# 227] 0x00009c600000-0x00009c7fffff, RW_Data, DRAM
 *                 [# 228] 0x00009c800000-0x00009c9fffff, RW_Data, DRAM
 *                 [# 229] 0x00009ca00000-0x00009cbfffff, RW_Data, DRAM
 *                 [# 230] 0x00009cc00000-0x00009cdfffff, RW_Data, DRAM
 *                 [# 231] 0x00009ce00000-0x00009cffffff, RW_Data, DRAM
 *                 [# 232] 0x00009d000000-0x00009d1fffff, RW_Data, DRAM
 *                 [# 233] 0x00009d200000-0x00009d3fffff, RW_Data, DRAM
 *                 [# 234] 0x00009d400000-0x00009d5fffff, RW_Data, DRAM
 *                 [# 235] 0x00009d600000-0x00009d7fffff, RW_Data, DRAM
 *                 [# 236] 0x00009d800000-0x00009d9fffff, RW_Data, DRAM
 *                 [# 237] 0x00009da00000-0x00009dbfffff, RW_Data, DRAM
 *                 [# 238] 0x00009dc00000-0x00009ddfffff, RW_Data, DRAM
 *                 [# 239] 0x00009de00000-0x00009dffffff, RW_Data, DRAM
 *                 [# 240] 0x00009e000000-0x00009e1fffff, RW_Data, DRAM
 *                 [# 241] 0x00009e200000-0x00009e3fffff, RW_Data, DRAM
 *                 [# 242] 0x00009e400000-0x00009e5fffff, RW_Data, DRAM
 *                 [# 243] 0x00009e600000-0x00009e7fffff, RW_Data, DRAM
 *                 [# 244] 0x00009e800000-0x00009e9fffff, RW_Data, DRAM
 *                 [# 245] 0x00009ea00000-0x00009ebfffff, RW_Data, DRAM
 *                 [# 246] 0x00009ec00000-0x00009edfffff, RW_Data, DRAM
 *                 [# 247] 0x00009ee00000-0x00009effffff, RW_Data, DRAM
 *                 [# 248] 0x00009f000000-0x00009f1fffff, RW_Data, DRAM
 *                 [# 249] 0x00009f200000-0x00009f3fffff, RW_Data, DRAM
 *                 [# 250] 0x00009f400000-0x00009f5fffff, RW_Data, DRAM
 *                 [# 251] 0x00009f600000-0x00009f7fffff, RW_Data, DRAM
 *                 [# 252] 0x00009f800000-0x00009f9fffff, RW_Data, DRAM
 *                 [# 253] 0x00009fa00000-0x00009fbfffff, RW_Data, DRAM
 *                 [# 254] 0x00009fc00000-0x00009fdfffff, RW_Data, DRAM
 *                 [# 255] 0x00009fe00000-0x00009fffffff, RW_Data, DRAM
 *                 [# 256] 0x0000a0000000-0x0000a01fffff, RW_Data, DRAM
 *                 [# 257] 0x0000a0200000-0x0000a03fffff, RW_Data, DRAM
 *                 [# 258] 0x0000a0400000-0x0000a05fffff, RW_Data, DRAM
 *                 [# 259] 0x0000a0600000-0x0000a07fffff, RW_Data, DRAM
 *                 [# 260] 0x0000a0800000-0x0000a09fffff, RW_Data, DRAM
 *                 [# 261] 0x0000a0a00000-0x0000a0bfffff, RW_Data, DRAM
 *                 [# 262] 0x0000a0c00000-0x0000a0dfffff, RW_Data, DRAM
 *                 [# 263] 0x0000a0e00000-0x0000a0ffffff, RW_Data, DRAM
 *                 [# 264] 0x0000a1000000-0x0000a11fffff, RW_Data, DRAM
 *                 [# 265] 0x0000a1200000-0x0000a13fffff, RW_Data, DRAM
 *                 [# 266] 0x0000a1400000-0x0000a15fffff, RW_Data, DRAM
 *                 [# 267] 0x0000a1600000-0x0000a17fffff, RW_Data, DRAM
 *                 [# 268] 0x0000a1800000-0x0000a19fffff, RW_Data, DRAM
 *                 [# 269] 0x0000a1a00000-0x0000a1bfffff, RW_Data, DRAM
 *                 [# 270] 0x0000a1c00000-0x0000a1dfffff, RW_Data, DRAM
 *                 [# 271] 0x0000a1e00000-0x0000a1ffffff, RW_Data, DRAM
 *                 [# 272] 0x0000a2000000-0x0000a21fffff, RW_Data, DRAM
 *                 [# 273] 0x0000a2200000-0x0000a23fffff, RW_Data, DRAM
 *                 [# 274] 0x0000a2400000-0x0000a25fffff, RW_Data, DRAM
 *                 [# 275] 0x0000a2600000-0x0000a27fffff, RW_Data, DRAM
 *                 [# 276] 0x0000a2800000-0x0000a29fffff, RW_Data, DRAM
 *                 [# 277] 0x0000a2a00000-0x0000a2bfffff, RW_Data, DRAM
 *                 [# 278] 0x0000a2c00000-0x0000a2dfffff, RW_Data, DRAM
 *                 [# 279] 0x0000a2e00000-0x0000a2ffffff, RW_Data, DRAM
 *                 [# 280] 0x0000a3000000-0x0000a31fffff, RW_Data, DRAM
 *                 [# 281] 0x0000a3200000-0x0000a33fffff, RW_Data, DRAM
 *                 [# 282] 0x0000a3400000-0x0000a35fffff, RW_Data, DRAM
 *                 [# 283] 0x0000a3600000-0x0000a37fffff, RW_Data, DRAM
 *                 [# 284] 0x0000a3800000-0x0000a39fffff, RW_Data, DRAM
 *                 [# 285] 0x0000a3a00000-0x0000a3bfffff, RW_Data, DRAM
 *                 [# 286] 0x0000a3c00000-0x0000a3dfffff, RW_Data, DRAM
 *                 [# 287] 0x0000a3e00000-0x0000a3ffffff, RW_Data, DRAM
 *                 [# 288] 0x0000a4000000-0x0000a41fffff, RW_Data, DRAM
 *                 [# 289] 0x0000a4200000-0x0000a43fffff, RW_Data, DRAM
 *                 [# 290] 0x0000a4400000-0x0000a45fffff, RW_Data, DRAM
 *                 [# 291] 0x0000a4600000-0x0000a47fffff, RW_Data, DRAM
 *                 [# 292] 0x0000a4800000-0x0000a49fffff, RW_Data, DRAM
 *                 [# 293] 0x0000a4a00000-0x0000a4bfffff, RW_Data, DRAM
 *                 [# 294] 0x0000a4c00000-0x0000a4dfffff, RW_Data, DRAM
 *                 [# 295] 0x0000a4e00000-0x0000a4ffffff, RW_Data, DRAM
 *                 [# 296] 0x0000a5000000-0x0000a51fffff, RW_Data, DRAM
 *                 [# 297] 0x0000a5200000-0x0000a53fffff, RW_Data, DRAM
 *                 [# 298] 0x0000a5400000-0x0000a55fffff, RW_Data, DRAM
 *                 [# 299] 0x0000a5600000-0x0000a57fffff, RW_Data, DRAM
 *                 [# 300] 0x0000a5800000-0x0000a59fffff, RW_Data, DRAM
 *                 [# 301] 0x0000a5a00000-0x0000a5bfffff, RW_Data, DRAM
 *                 [# 302] 0x0000a5c00000-0x0000a5dfffff, RW_Data, DRAM
 *                 [# 303] 0x0000a5e00000-0x0000a5ffffff, RW_Data, DRAM
 *                 [# 304] 0x0000a6000000-0x0000a61fffff, RW_Data, DRAM
 *                 [# 305] 0x0000a6200000-0x0000a63fffff, RW_Data, DRAM
 *                 [# 306] 0x0000a6400000-0x0000a65fffff, RW_Data, DRAM
 *                 [# 307] 0x0000a6600000-0x0000a67fffff, RW_Data, DRAM
 *                 [# 308] 0x0000a6800000-0x0000a69fffff, RW_Data, DRAM
 *                 [# 309] 0x0000a6a00000-0x0000a6bfffff, RW_Data, DRAM
 *                 [# 310] 0x0000a6c00000-0x0000a6dfffff, RW_Data, DRAM
 *                 [# 311] 0x0000a6e00000-0x0000a6ffffff, RW_Data, DRAM
 *                 [# 312] 0x0000a7000000-0x0000a71fffff, RW_Data, DRAM
 *                 [# 313] 0x0000a7200000-0x0000a73fffff, RW_Data, DRAM
 *                 [# 314] 0x0000a7400000-0x0000a75fffff, RW_Data, DRAM
 *                 [# 315] 0x0000a7600000-0x0000a77fffff, RW_Data, DRAM
 *                 [# 316] 0x0000a7800000-0x0000a79fffff, RW_Data, DRAM
 *                 [# 317] 0x0000a7a00000-0x0000a7bfffff, RW_Data, DRAM
 *                 [# 318] 0x0000a7c00000-0x0000a7dfffff, RW_Data, DRAM
 *                 [# 319] 0x0000a7e00000-0x0000a7ffffff, RW_Data, DRAM
 *                 [# 320] 0x0000a8000000-0x0000a81fffff, RW_Data, DRAM
 *                 [# 321] 0x0000a8200000-0x0000a83fffff, RW_Data, DRAM
 *                 [# 322] 0x0000a8400000-0x0000a85fffff, RW_Data, DRAM
 *                 [# 323] 0x0000a8600000-0x0000a87fffff, RW_Data, DRAM
 *                 [# 324] 0x0000a8800000-0x0000a89fffff, RW_Data, DRAM
 *                 [# 325] 0x0000a8a00000-0x0000a8bfffff, RW_Data, DRAM
 *                 [# 326] 0x0000a8c00000-0x0000a8dfffff, RW_Data, DRAM
 *                 [# 327] 0x0000a8e00000-0x0000a8ffffff, RW_Data, DRAM
 *                 [# 328] 0x0000a9000000-0x0000a91fffff, RW_Data, DRAM
 *                 [# 329] 0x0000a9200000-0x0000a93fffff, RW_Data, DRAM
 *                 [# 330] 0x0000a9400000-0x0000a95fffff, RW_Data, DRAM
 *                 [# 331] 0x0000a9600000-0x0000a97fffff, RW_Data, DRAM
 *                 [# 332] 0x0000a9800000-0x0000a99fffff, RW_Data, DRAM
 *                 [# 333] 0x0000a9a00000-0x0000a9bfffff, RW_Data, DRAM
 *                 [# 334] 0x0000a9c00000-0x0000a9dfffff, RW_Data, DRAM
 *                 [# 335] 0x0000a9e00000-0x0000a9ffffff, RW_Data, DRAM
 *                 [# 336] 0x0000aa000000-0x0000aa1fffff, RW_Data, DRAM
 *                 [# 337] 0x0000aa200000-0x0000aa3fffff, RW_Data, DRAM
 *                 [# 338] 0x0000aa400000-0x0000aa5fffff, RW_Data, DRAM
 *                 [# 339] 0x0000aa600000-0x0000aa7fffff, RW_Data, DRAM
 *                 [# 340] 0x0000aa800000-0x0000aa9fffff, RW_Data, DRAM
 *                 [# 341] 0x0000aaa00000-0x0000aabfffff, RW_Data, DRAM
 *                 [# 342] 0x0000aac00000-0x0000aadfffff, RW_Data, DRAM
 *                 [# 343] 0x0000aae00000-0x0000aaffffff, RW_Data, DRAM
 *                 [# 344] 0x0000ab000000-0x0000ab1fffff, RW_Data, DRAM
 *                 [# 345] 0x0000ab200000-0x0000ab3fffff, RW_Data, DRAM
 *                 [# 346] 0x0000ab400000-0x0000ab5fffff, RW_Data, DRAM
 *                 [# 347] 0x0000ab600000-0x0000ab7fffff, RW_Data, DRAM
 *                 [# 348] 0x0000ab800000-0x0000ab9fffff, RW_Data, DRAM
 *                 [# 349] 0x0000aba00000-0x0000abbfffff, RW_Data, DRAM
 *                 [# 350] 0x0000abc00000-0x0000abdfffff, RW_Data, DRAM
 *                 [# 351] 0x0000abe00000-0x0000abffffff, RW_Data, DRAM
 *                 [# 352] 0x0000ac000000-0x0000ac1fffff, RW_Data, DRAM
 *                 [# 353] 0x0000ac200000-0x0000ac3fffff, RW_Data, DRAM
 *                 [# 354] 0x0000ac400000-0x0000ac5fffff, RW_Data, DRAM
 *                 [# 355] 0x0000ac600000-0x0000ac7fffff, RW_Data, DRAM
 *                 [# 356] 0x0000ac800000-0x0000ac9fffff, RW_Data, DRAM
 *                 [# 357] 0x0000aca00000-0x0000acbfffff, RW_Data, DRAM
 *                 [# 358] 0x0000acc00000-0x0000acdfffff, RW_Data, DRAM
 *                 [# 359] 0x0000ace00000-0x0000acffffff, RW_Data, DRAM
 *                 [# 360] 0x0000ad000000-0x0000ad1fffff, RW_Data, DRAM
 *                 [# 361] 0x0000ad200000-0x0000ad3fffff, RW_Data, DRAM
 *                 [# 362] 0x0000ad400000-0x0000ad5fffff, RW_Data, DRAM
 *                 [# 363] 0x0000ad600000-0x0000ad7fffff, RW_Data, DRAM
 *                 [# 364] 0x0000ad800000-0x0000ad9fffff, RW_Data, DRAM
 *                 [# 365] 0x0000ada00000-0x0000adbfffff, RW_Data, DRAM
 *                 [# 366] 0x0000adc00000-0x0000addfffff, RW_Data, DRAM
 *                 [# 367] 0x0000ade00000-0x0000adffffff, RW_Data, DRAM
 *                 [# 368] 0x0000ae000000-0x0000ae1fffff, RW_Data, DRAM
 *                 [# 369] 0x0000ae200000-0x0000ae3fffff, RW_Data, DRAM
 *                 [# 370] 0x0000ae400000-0x0000ae5fffff, RW_Data, DRAM
 *                 [# 371] 0x0000ae600000-0x0000ae7fffff, RW_Data, DRAM
 *                 [# 372] 0x0000ae800000-0x0000ae9fffff, RW_Data, DRAM
 *                 [# 373] 0x0000aea00000-0x0000aebfffff, RW_Data, DRAM
 *                 [# 374] 0x0000aec00000-0x0000aedfffff, RW_Data, DRAM
 *                 [# 375] 0x0000aee00000-0x0000aeffffff, RW_Data, DRAM
 *                 [# 376] 0x0000af000000-0x0000af1fffff, RW_Data, DRAM
 *                 [# 377] 0x0000af200000-0x0000af3fffff, RW_Data, DRAM
 *                 [# 378] 0x0000af400000-0x0000af5fffff, RW_Data, DRAM
 *                 [# 379] 0x0000af600000-0x0000af7fffff, RW_Data, DRAM
 *                 [# 380] 0x0000af800000-0x0000af9fffff, RW_Data, DRAM
 *                 [# 381] 0x0000afa00000-0x0000afbfffff, RW_Data, DRAM
 *                 [# 382] 0x0000afc00000-0x0000afdfffff, RW_Data, DRAM
 *                 [# 383] 0x0000afe00000-0x0000afffffff, RW_Data, DRAM
 *                 [# 384] 0x0000b0000000-0x0000b01fffff, RW_Data, DRAM
 *                 [# 385] 0x0000b0200000-0x0000b03fffff, RW_Data, DRAM
 *                 [# 386] 0x0000b0400000-0x0000b05fffff, RW_Data, DRAM
 *                 [# 387] 0x0000b0600000-0x0000b07fffff, RW_Data, DRAM
 *                 [# 388] 0x0000b0800000-0x0000b09fffff, RW_Data, DRAM
 *                 [# 389] 0x0000b0a00000-0x0000b0bfffff, RW_Data, DRAM
 *                 [# 390] 0x0000b0c00000-0x0000b0dfffff, RW_Data, DRAM
 *                 [# 391] 0x0000b0e00000-0x0000b0ffffff, RW_Data, DRAM
 *                 [# 392] 0x0000b1000000-0x0000b11fffff, RW_Data, DRAM
 *                 [# 393] 0x0000b1200000-0x0000b13fffff, RW_Data, DRAM
 *                 [# 394] 0x0000b1400000-0x0000b15fffff, RW_Data, DRAM
 *                 [# 395] 0x0000b1600000-0x0000b17fffff, RW_Data, DRAM
 *                 [# 396] 0x0000b1800000-0x0000b19fffff, RW_Data, DRAM
 *                 [# 397] 0x0000b1a00000-0x0000b1bfffff, RW_Data, DRAM
 *                 [# 398] 0x0000b1c00000-0x0000b1dfffff, RW_Data, DRAM
 *                 [# 399] 0x0000b1e00000-0x0000b1ffffff, RW_Data, DRAM
 *                 [# 400] 0x0000b2000000-0x0000b21fffff, RW_Data, DRAM
 *                 [# 401] 0x0000b2200000-0x0000b23fffff, RW_Data, DRAM
 *                 [# 402] 0x0000b2400000-0x0000b25fffff, RW_Data, DRAM
 *                 [# 403] 0x0000b2600000-0x0000b27fffff, RW_Data, DRAM
 *                 [# 404] 0x0000b2800000-0x0000b29fffff, RW_Data, DRAM
 *                 [# 405] 0x0000b2a00000-0x0000b2bfffff, RW_Data, DRAM
 *                 [# 406] 0x0000b2c00000-0x0000b2dfffff, RW_Data, DRAM
 *                 [# 407] 0x0000b2e00000-0x0000b2ffffff, RW_Data, DRAM
 *                 [# 408] 0x0000b3000000-0x0000b31fffff, RW_Data, DRAM
 *                 [# 409] 0x0000b3200000-0x0000b33fffff, RW_Data, DRAM
 *                 [# 410] 0x0000b3400000-0x0000b35fffff, RW_Data, DRAM
 *                 [# 411] 0x0000b3600000-0x0000b37fffff, RW_Data, DRAM
 *                 [# 412] 0x0000b3800000-0x0000b39fffff, RW_Data, DRAM
 *                 [# 413] 0x0000b3a00000-0x0000b3bfffff, RW_Data, DRAM
 *                 [# 414] 0x0000b3c00000-0x0000b3dfffff, RW_Data, DRAM
 *                 [# 415] 0x0000b3e00000-0x0000b3ffffff, RW_Data, DRAM
 *                 [# 416] 0x0000b4000000-0x0000b41fffff, RW_Data, DRAM
 *                 [# 417] 0x0000b4200000-0x0000b43fffff, RW_Data, DRAM
 *                 [# 418] 0x0000b4400000-0x0000b45fffff, RW_Data, DRAM
 *                 [# 419] 0x0000b4600000-0x0000b47fffff, RW_Data, DRAM
 *                 [# 420] 0x0000b4800000-0x0000b49fffff, RW_Data, DRAM
 *                 [# 421] 0x0000b4a00000-0x0000b4bfffff, RW_Data, DRAM
 *                 [# 422] 0x0000b4c00000-0x0000b4dfffff, RW_Data, DRAM
 *                 [# 423] 0x0000b4e00000-0x0000b4ffffff, RW_Data, DRAM
 *                 [# 424] 0x0000b5000000-0x0000b51fffff, RW_Data, DRAM
 *                 [# 425] 0x0000b5200000-0x0000b53fffff, RW_Data, DRAM
 *                 [# 426] 0x0000b5400000-0x0000b55fffff, RW_Data, DRAM
 *                 [# 427] 0x0000b5600000-0x0000b57fffff, RW_Data, DRAM
 *                 [# 428] 0x0000b5800000-0x0000b59fffff, RW_Data, DRAM
 *                 [# 429] 0x0000b5a00000-0x0000b5bfffff, RW_Data, DRAM
 *                 [# 430] 0x0000b5c00000-0x0000b5dfffff, RW_Data, DRAM
 *                 [# 431] 0x0000b5e00000-0x0000b5ffffff, RW_Data, DRAM
 *                 [# 432] 0x0000b6000000-0x0000b61fffff, RW_Data, DRAM
 *                 [# 433] 0x0000b6200000-0x0000b63fffff, RW_Data, DRAM
 *                 [# 434] 0x0000b6400000-0x0000b65fffff, RW_Data, DRAM
 *                 [# 435] 0x0000b6600000-0x0000b67fffff, RW_Data, DRAM
 *                 [# 436] 0x0000b6800000-0x0000b69fffff, RW_Data, DRAM
 *                 [# 437] 0x0000b6a00000-0x0000b6bfffff, RW_Data, DRAM
 *                 [# 438] 0x0000b6c00000-0x0000b6dfffff, RW_Data, DRAM
 *                 [# 439] 0x0000b6e00000-0x0000b6ffffff, RW_Data, DRAM
 *                 [# 440] 0x0000b7000000-0x0000b71fffff, RW_Data, DRAM
 *                 [# 441] 0x0000b7200000-0x0000b73fffff, RW_Data, DRAM
 *                 [# 442] 0x0000b7400000-0x0000b75fffff, RW_Data, DRAM
 *                 [# 443] 0x0000b7600000-0x0000b77fffff, RW_Data, DRAM
 *                 [# 444] 0x0000b7800000-0x0000b79fffff, RW_Data, DRAM
 *                 [# 445] 0x0000b7a00000-0x0000b7bfffff, RW_Data, DRAM
 *                 [# 446] 0x0000b7c00000-0x0000b7dfffff, RW_Data, DRAM
 *                 [# 447] 0x0000b7e00000-0x0000b7ffffff, RW_Data, DRAM
 *                 [# 448] 0x0000b8000000-0x0000b81fffff, RW_Data, DRAM
 *                 [# 449] 0x0000b8200000-0x0000b83fffff, RW_Data, DRAM
 *                 [# 450] 0x0000b8400000-0x0000b85fffff, RW_Data, DRAM
 *                 [# 451] 0x0000b8600000-0x0000b87fffff, RW_Data, DRAM
 *                 [# 452] 0x0000b8800000-0x0000b89fffff, RW_Data, DRAM
 *                 [# 453] 0x0000b8a00000-0x0000b8bfffff, RW_Data, DRAM
 *                 [# 454] 0x0000b8c00000-0x0000b8dfffff, RW_Data, DRAM
 *                 [# 455] 0x0000b8e00000-0x0000b8ffffff, RW_Data, DRAM
 *                 [# 456] 0x0000b9000000-0x0000b91fffff, RW_Data, DRAM
 *                 [# 457] 0x0000b9200000-0x0000b93fffff, RW_Data, DRAM
 *                 [# 458] 0x0000b9400000-0x0000b95fffff, RW_Data, DRAM
 *                 [# 459] 0x0000b9600000-0x0000b97fffff, RW_Data, DRAM
 *                 [# 460] 0x0000b9800000-0x0000b99fffff, RW_Data, DRAM
 *                 [# 461] 0x0000b9a00000-0x0000b9bfffff, RW_Data, DRAM
 *                 [# 462] 0x0000b9c00000-0x0000b9dfffff, RW_Data, DRAM
 *                 [# 463] 0x0000b9e00000-0x0000b9ffffff, RW_Data, DRAM
 *                 [# 464] 0x0000ba000000-0x0000ba1fffff, RW_Data, DRAM
 *                 [# 465] 0x0000ba200000-0x0000ba3fffff, RW_Data, DRAM
 *                 [# 466] 0x0000ba400000-0x0000ba5fffff, RW_Data, DRAM
 *                 [# 467] 0x0000ba600000-0x0000ba7fffff, RW_Data, DRAM
 *                 [# 468] 0x0000ba800000-0x0000ba9fffff, RW_Data, DRAM
 *                 [# 469] 0x0000baa00000-0x0000babfffff, RW_Data, DRAM
 *                 [# 470] 0x0000bac00000-0x0000badfffff, RW_Data, DRAM
 *                 [# 471] 0x0000bae00000-0x0000baffffff, RW_Data, DRAM
 *                 [# 472] 0x0000bb000000-0x0000bb1fffff, RW_Data, DRAM
 *                 [# 473] 0x0000bb200000-0x0000bb3fffff, RW_Data, DRAM
 *                 [# 474] 0x0000bb400000-0x0000bb5fffff, RW_Data, DRAM
 *                 [# 475] 0x0000bb600000-0x0000bb7fffff, RW_Data, DRAM
 *                 [# 476] 0x0000bb800000-0x0000bb9fffff, RW_Data, DRAM
 *                 [# 477] 0x0000bba00000-0x0000bbbfffff, RW_Data, DRAM
 *                 [# 478] 0x0000bbc00000-0x0000bbdfffff, RW_Data, DRAM
 *                 [# 479] 0x0000bbe00000-0x0000bbffffff, RW_Data, DRAM
 *                 [# 480] 0x0000bc000000-0x0000bc1fffff, RW_Data, DRAM
 *                 [# 481] 0x0000bc200000-0x0000bc3fffff, RW_Data, DRAM
 *                 [# 482] 0x0000bc400000-0x0000bc5fffff, RW_Data, DRAM
 *                 [# 483] 0x0000bc600000-0x0000bc7fffff, RW_Data, DRAM
 *                 [# 484] 0x0000bc800000-0x0000bc9fffff, RW_Data, DRAM
 *                 [# 485] 0x0000bca00000-0x0000bcbfffff, RW_Data, DRAM
 *                 [# 486] 0x0000bcc00000-0x0000bcdfffff, RW_Data, DRAM
 *                 [# 487] 0x0000bce00000-0x0000bcffffff, RW_Data, DRAM
 *                 [# 488] 0x0000bd000000-0x0000bd1fffff, RW_Data, DRAM
 *                 [# 489] 0x0000bd200000-0x0000bd3fffff, RW_Data, DRAM
 *                 [# 490] 0x0000bd400000-0x0000bd5fffff, RW_Data, DRAM
 *                 [# 491] 0x0000bd600000-0x0000bd7fffff, RW_Data, DRAM
 *                 [# 492] 0x0000bd800000-0x0000bd9fffff, RW_Data, DRAM
 *                 [# 493] 0x0000bda00000-0x0000bdbfffff, RW_Data, DRAM
 *                 [# 494] 0x0000bdc00000-0x0000bddfffff, RW_Data, DRAM
 *                 [# 495] 0x0000bde00000-0x0000bdffffff, RW_Data, DRAM
 *                 [# 496] 0x0000be000000-0x0000be1fffff, RW_Data, DRAM
 *                 [# 497] 0x0000be200000-0x0000be3fffff, RW_Data, DRAM
 *                 [# 498] 0x0000be400000-0x0000be5fffff, RW_Data, DRAM
 *                 [# 499] 0x0000be600000-0x0000be7fffff, RW_Data, DRAM
 *                 [# 500] 0x0000be800000-0x0000be9fffff, RW_Data, DRAM
 *                 [# 501] 0x0000bea00000-0x0000bebfffff, RW_Data, DRAM
 *                 [# 502] 0x0000bec00000-0x0000bedfffff, RW_Data, DRAM
 *                 [# 503] 0x0000bee00000-0x0000beffffff, RW_Data, DRAM
 *                 [# 504] 0x0000bf000000-0x0000bf1fffff, RW_Data, DRAM
 *                 [# 505] 0x0000bf200000-0x0000bf3fffff, RW_Data, DRAM
 *                 [# 506] 0x0000bf400000-0x0000bf5fffff, RW_Data, DRAM
 *                 [# 507] 0x0000bf600000-0x0000bf7fffff, RW_Data, DRAM
 *                 [# 508] 0x0000bf800000-0x0000bf9fffff, RW_Data, DRAM
 *                 [# 509] 0x0000bfa00000-0x0000bfbfffff, RW_Data, DRAM
 *                 [# 510] 0x0000bfc00000-0x0000bfdfffff, RW_Data, DRAM
 *                 [# 511] 0x0000bfe00000-0x0000bfffffff, RW_Data, DRAM
 *         [#   3] 0x0000c0000000-0x0000ffffffff, RW_Data, DRAM
 *
 * The following command line arguments were passed to arm64-pgtable-tool:
 *
 *      -i examples/dram.txt
 *      -ttb 0x80000000
 *      -el 3
 *      -tg 4K
 *      -tsz 32
 *
 * This memory map requires a total of 3 translation tables.
 * Each table occupies 4K of memory (0x1000 bytes).
 * The buffer pointed to by 0x80000000 must therefore be 3x 4K = 0x3000 bytes long.
 * It is the programmer's responsibility to guarantee this.
 *
 * The programmer must also ensure that the virtual memory region containing the
 * translation tables is itself marked as NORMAL in the memory map file.
 */

    .section .data.mmu
    .balign 2

    mmu_lock: .4byte 0                   // lock to ensure only 1 CPU runs init
    #define LOCKED 1

    mmu_init: .4byte 0                   // whether init has been run
    #define INITIALISED 1

    .section .text.mmu_on
    .balign 2
    .global mmu_on
    .type mmu_on, @function

mmu_on:
zero_out_tables:

    LDR     x2, =0x80000000              // address of first table
    LDR     x3, =0x3000                  // combined length of all tables
    LSR     x3, x3, #5                   // number of required STP instructions
    FMOV    d0, xzr                      // clear q0
1:
    STP     q0, q0, [x2], #32            // zero out 4 table entries at a time
    SUBS    x3, x3, #1
    B.NE    1b

load_descriptor_templates:

    LDR     x2, =0x40000000000705        // Device block
    LDR     x3, =0x40000000000707        // Device page
    LDR     x4, =0x40000000000701        // RW data block
    LDR     x5, =0x40000000000703        // RW data page
    LDR     x20, =0x781                  // code block
    LDR     x21, =0x783                  // code page
    

program_table_0:

    LDR     x8, =0x80000000              // base address of this table
    LDR     x9, =0x40000000              // chunk size

program_table_0_entry_2:

    LDR     x10, =2                      // idx
    LDR     x11, =0x80001000             // next-level table address
    ORR     x11, x11, #0x3               // next-level table descriptor
    STR     x11, [x8, x10, lsl #3]       // write entry into table

program_table_0_entry_3:

    LDR     x10, =3                      // idx
    LDR     x11, =1                      // number of contiguous entries
    LDR     x12, =0xc0000000             // output address of entry[idx]
1:
    ORR     x12, x12, x4                 // merge output address with template
    STR     X12, [x8, x10, lsl #3]       // write entry into table
    ADD     x10, x10, #1                 // prepare for next entry idx+1
    ADD     x12, x12, x9                 // add chunk to address
    SUBS    x11, x11, #1                 // loop as required
    B.NE    1b
program_table_1:

    LDR     x8, =0x80001000              // base address of this table
    LDR     x9, =0x200000                // chunk size

program_table_1_entry_128_to_511:

    LDR     x10, =128                    // idx
    LDR     x11, =384                    // number of contiguous entries
    LDR     x12, =0x90000000             // output address of entry[idx]
1:
    ORR     x12, x12, x4                 // merge output address with template
    STR     X12, [x8, x10, lsl #3]       // write entry into table
    ADD     x10, x10, #1                 // prepare for next entry idx+1
    ADD     x12, x12, x9                 // add chunk to address
    SUBS    x11, x11, #1                 // loop as required
    B.NE    1b
program_table_2:

    LDR     x8, =0x80002000              // base address of this table
    LDR     x9, =0x200000                // chunk size

program_table_2_entry_0_to_127:

    LDR     x10, =0                      // idx
    LDR     x11, =128                    // number of contiguous entries
    LDR     x12, =0xc0000000             // output address of entry[idx]
1:
    ORR     x12, x12, x4                 // merge output address with template
    STR     X12, [x8, x10, lsl #3]       // write entry into table
    ADD     x10, x10, #1                 // prepare for next entry idx+1
    ADD     x12, x12, x9                 // add chunk to address
    SUBS    x11, x11, #1                 // loop as required
    B.NE    1b

init_done:

    MOV     w2, #INITIALISED
    STR     w2, [x1]

end:

    LDR     x1, =0x80000000              // program ttbr0 on this CPU
    MSR     ttbr0_el3, x1
    LDR     x1, =0xff                    // program mair on this CPU
    MSR     mair_el3, x1
    LDR     x1, =0x80803520              // program tcr on this CPU
    MSR     tcr_el3, x1
    ISB
    MRS     x2, tcr_el3                  // verify CPU supports desired config
    CMP     x2, x1
    B.NE    .
    LDR     x1, =0x1005                  // program sctlr on this CPU
    MSR     sctlr_el3, x1
    ISB                                  // synchronize context on this CPU
    RET                                  // done!

Parents
  • The mmu table is set with 4KB page size, 32 bits (4GB)  address space, and the L1 table is the start level of table lookup.

    And after looking into the page table entries, address range 0x8000_0000~0x8fff_ffff is not mapped (invalid), address range 0x9000_0000~0xbfff_ffff is mapped with L2 block entries as Normal WBWA cacheable. The 1GB starting from 0xc000_0000 is also mapped as L1 1GB block Normal WBWA cacheable.

    If the code

        MSR     sctlr_el3, x1
        ISB                                  // synchronize context on this CPU
        RET      

    locates in address range 0x8000_0000~0x8fff_ffff, then it is normal a L1 translation fault will be reported.

Reply
  • The mmu table is set with 4KB page size, 32 bits (4GB)  address space, and the L1 table is the start level of table lookup.

    And after looking into the page table entries, address range 0x8000_0000~0x8fff_ffff is not mapped (invalid), address range 0x9000_0000~0xbfff_ffff is mapped with L2 block entries as Normal WBWA cacheable. The 1GB starting from 0xc000_0000 is also mapped as L1 1GB block Normal WBWA cacheable.

    If the code

        MSR     sctlr_el3, x1
        ISB                                  // synchronize context on this CPU
        RET      

    locates in address range 0x8000_0000~0x8fff_ffff, then it is normal a L1 translation fault will be reported.

Children
No data