From bf78579fa5bda5effd4a66485e31800ad9f91c28 Mon Sep 17 00:00:00 2001 From: Giacomo Travaglini Date: Wed, 21 Feb 2024 10:41:19 +0000 Subject: [PATCH] arch-arm: Change the TlbTestInterface to accept a RequestPtr Now that the Request has been made an Extensible object, it can carry within itself much more data. It makes sense to pass it to the TlbTestInterface as more information about the table walk can be extracted from it. This is also aligning with the testTranslation utility which is expecting a request reference as first argument. Change-Id: I3dbc9a81d6b4bcc1801246ba7eb4136774d8f3c7 Signed-off-by: Giacomo Travaglini Reviewed-by: Andreas Sandberg Reviewed-by: Richard Cooper --- src/arch/arm/table_walker.cc | 6 +++--- src/arch/arm/table_walker.hh | 2 +- src/arch/arm/tlb.hh | 8 ++++---- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/arch/arm/table_walker.cc b/src/arch/arm/table_walker.cc index 79d0d88600..8750e7852c 100644 --- a/src/arch/arm/table_walker.cc +++ b/src/arch/arm/table_walker.cc @@ -2114,7 +2114,7 @@ TableWalker::fetchDescriptor(Addr desc_addr, desc_addr, num_bytes, flags, requestorId); req->taskId(context_switch_task_id::DMA); - Fault fault = testWalk(desc_addr, num_bytes, descriptor.domain(), + Fault fault = testWalk(req, descriptor.domain(), lookup_level); if (fault != NoFault) { @@ -2306,13 +2306,13 @@ TableWalker::pendingChange() } Fault -TableWalker::testWalk(Addr pa, Addr size, TlbEntry::DomainType domain, +TableWalker::testWalk(const RequestPtr &walk_req, TlbEntry::DomainType domain, LookupLevel lookup_level) { if (!test) { return NoFault; } else { - return test->walkCheck(pa, size, currState->vaddr, currState->isSecure, + return test->walkCheck(walk_req, currState->vaddr, currState->isSecure, currState->el != EL0, currState->mode, domain, lookup_level); } diff --git a/src/arch/arm/table_walker.hh b/src/arch/arm/table_walker.hh index f85bd63d74..ee56cb81f1 100644 --- a/src/arch/arm/table_walker.hh +++ b/src/arch/arm/table_walker.hh @@ -1206,7 +1206,7 @@ class TableWalker : public ClockedObject void setTestInterface(TlbTestInterface *ti); - Fault testWalk(Addr pa, Addr size, TlbEntry::DomainType domain, + Fault testWalk(const RequestPtr &walk_req, TlbEntry::DomainType domain, LookupLevel lookup_level); }; diff --git a/src/arch/arm/tlb.hh b/src/arch/arm/tlb.hh index 3f8e649f94..01d945d5dc 100644 --- a/src/arch/arm/tlb.hh +++ b/src/arch/arm/tlb.hh @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010-2013, 2016, 2019-2022 Arm Limited + * Copyright (c) 2010-2013, 2016, 2019-2022, 2024 Arm Limited * All rights reserved * * The license below extends only to copyright in the software and shall @@ -84,8 +84,7 @@ class TlbTestInterface /** * Check if a page table walker access should be forced to fail. * - * @param pa Physical address the walker is accessing - * @param size Walker access size + * @param req walk request bearing a valid phys address * @param va Virtual address that initiated the walk * @param is_secure Access from secure state * @param is_priv Access from a privileged mode (i.e., not EL0) @@ -93,7 +92,8 @@ class TlbTestInterface * @param domain Domain type * @param lookup_level Page table walker level */ - virtual Fault walkCheck(Addr pa, Addr size, Addr va, bool is_secure, + virtual Fault walkCheck(const RequestPtr &walk_req, + Addr va, bool is_secure, Addr is_priv, BaseMMU::Mode mode, TlbEntry::DomainType domain, enums::ArmLookupLevel lookup_level) = 0;