feat(rme): add dev mem map/unmap tests
- Add tests for RMI_DEV_MEM_MAP and
RMI_DEV_MEM_UNMAP commands as per RMM Specification 1.1-alp12.
- Add RNDR and RNDRRS registers' definitions.
- Redefine RNDR and RNDRRS read functions as:
DEFINE_RENAME_SYSREG_READ_FUNC(rndr, RNDR)
DEFINE_RENAME_SYSREG_READ_FUNC(rndrrs, RNDRRS)
Change-Id: Ieecc41dd6d3011bb63101bc38d527a8f57e0ef4a
Signed-off-by: AlexeiFedorov <Alexei.Fedorov@arm.com>
diff --git a/include/lib/aarch64/arch.h b/include/lib/aarch64/arch.h
index d9009dd..2a9d0d2 100644
--- a/include/lib/aarch64/arch.h
+++ b/include/lib/aarch64/arch.h
@@ -1819,4 +1819,10 @@
#define SYSREG_ID_apgakeyhi_el1 SYSREG_ESR(3, 0, 2, 3, 1)
#define SYSREG_ID_mpamidr_el1 SYSREG_ESR(3, 0, 10, 4, 4)
+/* RNDR definition */
+#define RNDR S3_3_C2_C4_0
+
+/* RNDRRS definition */
+#define RNDRRS S3_3_C2_C4_1
+
#endif /* ARCH_H */
diff --git a/include/lib/aarch64/arch_helpers.h b/include/lib/aarch64/arch_helpers.h
index ed705bf..f562018 100644
--- a/include/lib/aarch64/arch_helpers.h
+++ b/include/lib/aarch64/arch_helpers.h
@@ -483,8 +483,8 @@
}
/* Armv8.5 FEAT_RNG Registers */
-DEFINE_SYSREG_READ_FUNC(rndr)
-DEFINE_SYSREG_READ_FUNC(rndrrs)
+DEFINE_RENAME_SYSREG_READ_FUNC(rndr, RNDR)
+DEFINE_RENAME_SYSREG_READ_FUNC(rndrrs, RNDRRS)
/* GICv3 System Registers */
DEFINE_RENAME_SYSREG_RW_FUNCS(icc_sre_el1, ICC_SRE_EL1)
diff --git a/include/runtime_services/host_realm_managment/host_da_helper.h b/include/runtime_services/host_realm_managment/host_da_helper.h
new file mode 100644
index 0000000..602c0f5
--- /dev/null
+++ b/include/runtime_services/host_realm_managment/host_da_helper.h
@@ -0,0 +1,15 @@
+/*
+ * Copyright (c) 2025, Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#ifndef HOST_DA_HELPER_H
+#define HOST_DA_HELPER_H
+
+#include <host_realm_rmi.h>
+
+u_register_t host_dev_mem_map(struct realm *realm, u_register_t dev_pa,
+ long map_level, u_register_t *dev_ipa);
+
+#endif /* HOST_DA_HELPER_H */
diff --git a/include/runtime_services/host_realm_managment/host_realm_rmi.h b/include/runtime_services/host_realm_managment/host_realm_rmi.h
index 571f129..20054bd 100644
--- a/include/runtime_services/host_realm_managment/host_realm_rmi.h
+++ b/include/runtime_services/host_realm_managment/host_realm_rmi.h
@@ -324,14 +324,24 @@
#define RMI_RTT_SET_RIPAS SMC64_RMI_FID(U(0x19))
/*
- * FID: 0xC4000172
+ * arg0 == RD address
+ * arg1 == map address
+ * arg2 == level
+ * arg3 == PA of the target device memory
*/
-#define SMC_RMI_DEV_MAP SMC64_RMI_FID(U(0x22))
+#define SMC_RMI_DEV_MEM_MAP SMC64_RMI_FID(U(0x22))
/*
- * FID: 0xC4000173
+ * arg0 == RD address
+ * arg1 == map address
+ * arg2 == level
+ *
+ * ret1 == Address (PA) of the device memory granule, if ret0 == RMI_SUCCESS
+ * Otherwise, undefined.
+ * ret2 == Top of the non-live address region. Only valid
+ * if ret0 == RMI_SUCCESS or ret0 == (RMI_ERROR_RTT, x)
*/
-#define SMC_RMI_DEV_UNMAP SMC64_RMI_FID(U(0x23))
+#define SMC_RMI_DEV_MEM_UNMAP SMC64_RMI_FID(U(0x23))
/*
* FID: 0xC4000174
@@ -528,11 +538,13 @@
#define RMI_UNASSIGNED UL(0)
#define RMI_ASSIGNED UL(1)
#define RMI_TABLE UL(2)
+#define RMI_ASSIGNED_DEV UL(3)
/* RmmRipas enumeration representing realm IPA state */
#define RMI_EMPTY UL(0)
#define RMI_RAM UL(1)
#define RMI_DESTROYED UL(2)
+#define RMI_DEV UL(3)
/* RmiPmuOverflowStatus enumeration representing PMU overflow status */
#define RMI_PMU_OVERFLOW_NOT_ACTIVE 0U
@@ -636,6 +648,7 @@
#define RMI_RETURN_STATUS(ret) ((ret) & 0xFF)
#define RMI_RETURN_INDEX(ret) (((ret) >> 8U) & 0xFF)
#define RTT_MAX_LEVEL (3L)
+#define RTT_MIN_DEV_BLOCK_LEVEL (2L)
#define RTT_MIN_LEVEL (0L)
#define RTT_MIN_LEVEL_LPA2 (-1L)
#define ALIGN_DOWN(x, a) ((uint64_t)(x) & ~(((uint64_t)(a)) - 1ULL))
@@ -1225,4 +1238,10 @@
u_register_t host_rmi_pdev_stop(u_register_t pdev_ptr);
u_register_t host_rmi_pdev_destroy(u_register_t pdev_ptr);
+u_register_t host_rmi_dev_mem_map(u_register_t rd, u_register_t map_addr,
+ u_register_t level, u_register_t dev_mem_addr);
+u_register_t host_rmi_dev_mem_unmap(u_register_t rd, u_register_t map_addr,
+ u_register_t level, u_register_t *pa,
+ u_register_t *top);
+
#endif /* HOST_REALM_RMI_H */