summaryrefslogtreecommitdiffstats
path: root/src/usr/vfs/vfsrp.C
diff options
context:
space:
mode:
Diffstat (limited to 'src/usr/vfs/vfsrp.C')
-rw-r--r--src/usr/vfs/vfsrp.C9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/usr/vfs/vfsrp.C b/src/usr/vfs/vfsrp.C
index 6284edd5a..63f2a15e7 100644
--- a/src/usr/vfs/vfsrp.C
+++ b/src/usr/vfs/vfsrp.C
@@ -182,6 +182,10 @@ errlHndl_t VfsRp::_init()
iv_hashPageTableSize);
// skip the hash page table
iv_pnor_vaddr += iv_hashPageTableSize;
+
+ // Compute offset to the unprotected payload virtual address range.
+ // This offset should be subtracted from the secure address
+ iv_unprotectedOffset = VMM_VADDR_SPNOR_DELTA+VMM_VADDR_SPNOR_DELTA;
}
#endif
@@ -365,7 +369,8 @@ void VfsRp::msgHandler()
}
}
#endif
- memcpy((void *)paddr, (void *)(iv_pnor_vaddr+vaddr),
+ memcpy((void *)paddr, (void *)(iv_pnor_vaddr
+ -iv_unprotectedOffset+vaddr),
PAGE_SIZE);
mm_icache_invalidate((void*)paddr,PAGE_SIZE/8);
msg->data[1] = 0;
@@ -762,7 +767,7 @@ errlHndl_t VfsRp::verify_page(uint64_t i_vaddr, uint64_t i_baseOffset,
uint64_t i_hashPageTableOffset) const
{
errlHndl_t l_errl = nullptr;
- uint64_t l_pnorVaddr = iv_pnor_vaddr + i_vaddr;
+ uint64_t l_pnorVaddr = iv_pnor_vaddr-iv_unprotectedOffset+i_vaddr;
// Get current hash page table entry
TRACDCOMP(g_trac_vfs, "VfsRp::verify_page Current Page vaddr = 0x%llX, index = %d, bin file offset = 0x%llX",
OpenPOWER on IntegriCloud