arch-arm: Check OSH domain as well for cacheability attribute
Make table walks uncacheable if marked as uncacheable in either inner or outer shareable domain Change-Id: I5898a3b91b5b919e0beda6c6fe896394e3ab94df Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com>
This commit is contained in:
@@ -898,7 +898,8 @@ TableWalker::processWalkAArch64()
|
||||
tg = GrainMap_tg0[currState->vtcr.tg0];
|
||||
|
||||
ps = currState->vtcr.ps;
|
||||
currState->isUncacheable = currState->vtcr.irgn0 == 0;
|
||||
currState->isUncacheable = currState->vtcr.irgn0 == 0 ||
|
||||
currState->vtcr.orgn0 == 0;
|
||||
} else {
|
||||
switch (bits(currState->vaddr, top_bit)) {
|
||||
case 0:
|
||||
@@ -907,7 +908,8 @@ TableWalker::processWalkAArch64()
|
||||
tsz = 64 - currState->tcr.t0sz;
|
||||
tg = GrainMap_tg0[currState->tcr.tg0];
|
||||
currState->hpd = currState->tcr.hpd0;
|
||||
currState->isUncacheable = currState->tcr.irgn0 == 0;
|
||||
currState->isUncacheable = currState->tcr.irgn0 == 0 ||
|
||||
currState->tcr.orgn0 == 0;
|
||||
vaddr_fault = checkVAddrSizeFaultAArch64(currState->vaddr,
|
||||
top_bit, tg, tsz, true);
|
||||
|
||||
@@ -920,7 +922,8 @@ TableWalker::processWalkAArch64()
|
||||
tsz = 64 - currState->tcr.t1sz;
|
||||
tg = GrainMap_tg1[currState->tcr.tg1];
|
||||
currState->hpd = currState->tcr.hpd1;
|
||||
currState->isUncacheable = currState->tcr.irgn1 == 0;
|
||||
currState->isUncacheable = currState->tcr.irgn1 == 0 ||
|
||||
currState->tcr.orgn1 == 0;
|
||||
vaddr_fault = checkVAddrSizeFaultAArch64(currState->vaddr,
|
||||
top_bit, tg, tsz, false);
|
||||
|
||||
@@ -944,7 +947,8 @@ TableWalker::processWalkAArch64()
|
||||
tg = GrainMap_tg0[currState->tcr.tg0];
|
||||
currState->hpd = currState->hcr.e2h ?
|
||||
currState->tcr.hpd0 : currState->tcr.hpd;
|
||||
currState->isUncacheable = currState->tcr.irgn0 == 0;
|
||||
currState->isUncacheable = currState->tcr.irgn0 == 0 ||
|
||||
currState->tcr.orgn0 == 0;
|
||||
vaddr_fault = checkVAddrSizeFaultAArch64(currState->vaddr,
|
||||
top_bit, tg, tsz, true);
|
||||
|
||||
@@ -958,7 +962,8 @@ TableWalker::processWalkAArch64()
|
||||
tsz = 64 - currState->tcr.t1sz;
|
||||
tg = GrainMap_tg1[currState->tcr.tg1];
|
||||
currState->hpd = currState->tcr.hpd1;
|
||||
currState->isUncacheable = currState->tcr.irgn1 == 0;
|
||||
currState->isUncacheable = currState->tcr.irgn1 == 0 ||
|
||||
currState->tcr.orgn1 == 0;
|
||||
vaddr_fault = checkVAddrSizeFaultAArch64(currState->vaddr,
|
||||
top_bit, tg, tsz, false);
|
||||
|
||||
@@ -980,7 +985,8 @@ TableWalker::processWalkAArch64()
|
||||
tsz = 64 - currState->tcr.t0sz;
|
||||
tg = GrainMap_tg0[currState->tcr.tg0];
|
||||
currState->hpd = currState->tcr.hpd;
|
||||
currState->isUncacheable = currState->tcr.irgn0 == 0;
|
||||
currState->isUncacheable = currState->tcr.irgn0 == 0 ||
|
||||
currState->tcr.orgn0 == 0;
|
||||
vaddr_fault = checkVAddrSizeFaultAArch64(currState->vaddr,
|
||||
top_bit, tg, tsz, true);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user