table_walker.cc (11588:32cbf6ab7730) table_walker.cc (11938:9efd6816e06a)
1/*
1/*
2 * Copyright (c) 2010, 2012-2016 ARM Limited
2 * Copyright (c) 2010, 2012-2017 ARM Limited
3 * All rights reserved
4 *
5 * The license below extends only to copyright in the software and shall
6 * not be construed as granting a license to any other intellectual
7 * property including but not limited to intellectual property relating
8 * to a hardware implementation of the functionality of the software
9 * licensed hereunder. You may use the software subject to the license
10 * terms below provided that you ensure that this notice is replicated

--- 1326 unchanged lines hidden (view full) ---

1337 te.innerAttrs = attr_lo == 0 ? 1 : 3;
1338 te.nonCacheable = true;
1339 } else {
1340 te.mtype = TlbEntry::MemoryType::Normal;
1341 te.outerAttrs = attr_hi == 1 ? 0 :
1342 attr_hi == 2 ? 2 : 1;
1343 te.innerAttrs = attr_lo == 1 ? 0 :
1344 attr_lo == 2 ? 6 : 5;
3 * All rights reserved
4 *
5 * The license below extends only to copyright in the software and shall
6 * not be construed as granting a license to any other intellectual
7 * property including but not limited to intellectual property relating
8 * to a hardware implementation of the functionality of the software
9 * licensed hereunder. You may use the software subject to the license
10 * terms below provided that you ensure that this notice is replicated

--- 1326 unchanged lines hidden (view full) ---

1337 te.innerAttrs = attr_lo == 0 ? 1 : 3;
1338 te.nonCacheable = true;
1339 } else {
1340 te.mtype = TlbEntry::MemoryType::Normal;
1341 te.outerAttrs = attr_hi == 1 ? 0 :
1342 attr_hi == 2 ? 2 : 1;
1343 te.innerAttrs = attr_lo == 1 ? 0 :
1344 attr_lo == 2 ? 6 : 5;
1345 te.nonCacheable = (attr_hi == 1) || (attr_lo == 1);
1345 // Treat write-through memory as uncacheable, this is safe
1346 // but for performance reasons not optimal.
1347 te.nonCacheable = (attr_hi == 1) || (attr_hi == 2) ||
1348 (attr_lo == 1) || (attr_lo == 2);
1346 }
1347 } else {
1348 uint8_t attrIndx = lDescriptor.attrIndx();
1349
1350 DPRINTF(TLBVerbose, "memAttrsAArch64 AttrIndx:%#x sh:%#x\n", attrIndx, sh);
1351
1352 // Select MAIR
1353 uint64_t mair;

--- 18 unchanged lines hidden (view full) ---

1372 attr_lo = bits(attr, 3, 0);
1373 attr_hi = bits(attr, 7, 4);
1374
1375 // Memory type
1376 te.mtype = attr_hi == 0 ? TlbEntry::MemoryType::Device : TlbEntry::MemoryType::Normal;
1377
1378 // Cacheability
1379 te.nonCacheable = false;
1349 }
1350 } else {
1351 uint8_t attrIndx = lDescriptor.attrIndx();
1352
1353 DPRINTF(TLBVerbose, "memAttrsAArch64 AttrIndx:%#x sh:%#x\n", attrIndx, sh);
1354
1355 // Select MAIR
1356 uint64_t mair;

--- 18 unchanged lines hidden (view full) ---

1375 attr_lo = bits(attr, 3, 0);
1376 attr_hi = bits(attr, 7, 4);
1377
1378 // Memory type
1379 te.mtype = attr_hi == 0 ? TlbEntry::MemoryType::Device : TlbEntry::MemoryType::Normal;
1380
1381 // Cacheability
1382 te.nonCacheable = false;
1380 if (te.mtype == TlbEntry::MemoryType::Device || // Device memory
1381 attr_hi == 0x8 || // Normal memory, Outer Non-cacheable
1382 attr_lo == 0x8) { // Normal memory, Inner Non-cacheable
1383 if (te.mtype == TlbEntry::MemoryType::Device) { // Device memory
1383 te.nonCacheable = true;
1384 }
1384 te.nonCacheable = true;
1385 }
1386 // Treat write-through memory as uncacheable, this is safe
1387 // but for performance reasons not optimal.
1388 switch (attr_hi) {
1389 case 0x1 ... 0x3: // Normal Memory, Outer Write-through transient
1390 case 0x4: // Normal memory, Outer Non-cacheable
1391 case 0x8 ... 0xb: // Normal Memory, Outer Write-through non-transient
1392 te.nonCacheable = true;
1393 }
1394 switch (attr_lo) {
1395 case 0x1 ... 0x3: // Normal Memory, Inner Write-through transient
1396 case 0x9 ... 0xb: // Normal Memory, Inner Write-through non-transient
1397 warn_if(!attr_hi, "Unpredictable behavior");
1398 case 0x4: // Device-nGnRE memory or
1399 // Normal memory, Inner Non-cacheable
1400 case 0x8: // Device-nGRE memory or
1401 // Normal memory, Inner Write-through non-transient
1402 te.nonCacheable = true;
1403 }
1385
1386 te.shareable = sh == 2;
1387 te.outerShareable = (sh & 0x2) ? true : false;
1388 // Attributes formatted according to the 64-bit PAR
1389 te.attributes = ((uint64_t) attr << 56) |
1390 (1 << 11) | // LPAE bit
1391 (te.ns << 9) | // NS bit
1392 (sh << 7);

--- 853 unchanged lines hidden ---
1404
1405 te.shareable = sh == 2;
1406 te.outerShareable = (sh & 0x2) ? true : false;
1407 // Attributes formatted according to the 64-bit PAR
1408 te.attributes = ((uint64_t) attr << 56) |
1409 (1 << 11) | // LPAE bit
1410 (te.ns << 9) | // NS bit
1411 (sh << 7);

--- 853 unchanged lines hidden ---