Quit pretending that IPAs aren't identity mapped.

Information about memory sharing will be stored in the page table
entries rather than introducing a new data structure as that adds
complexity and new potential for memory management issues.

The information includes tracking whether memory is owned by a VM. If a
region of memory is borrowed by another, the memory can only be passed
back the the owner and this is checked by looking in the page table.
Identity mapping is needed so we know where to look in the table as,
otherwise, searching for a physical address is impractical.

Change-Id: I417376b3ecd31bc07518ac5c51b9fb7df2f4b3e1
diff --git a/inc/hf/addr.h b/inc/hf/addr.h
index 09a6c09..b67e1c2 100644
--- a/inc/hf/addr.h
+++ b/inc/hf/addr.h
@@ -117,6 +117,14 @@
 }
 
 /**
+ * Casts an intermediate physical address to a physical address.
+ */
+static inline paddr_t pa_from_ipa(ipaddr_t ipa)
+{
+	return pa_init(ipa_addr(ipa));
+}
+
+/**
  * Casts a pointer to a virtual address.
  */
 static inline vaddr_t va_from_ptr(const void *p)