fix(clang): fix performance-no-int-to-ptr for macros

Change-Id: I1c68e189feccb1a28877c72b734479d24bb5b181
Signed-off-by: Olivier Deprez <olivier.deprez@arm.com>
diff --git a/inc/hf/io.h b/inc/hf/io.h
index 9a146a2..5bc69b5 100644
--- a/inc/hf/io.h
+++ b/inc/hf/io.h
@@ -12,6 +12,7 @@
 #include <stdint.h>
 
 #include "hf/arch/barriers.h"
+#include "hf/arch/types.h"
 
 #include "hf/check.h"
 
@@ -55,19 +56,62 @@
 
 /* Contructors for literals. */
 
-#define IO8_C(addr) ((io8_t){.ptr = (volatile uint8_t *)(addr)})
-#define IO16_C(addr) ((io16_t){.ptr = (volatile uint16_t *)(addr)})
-#define IO32_C(addr) ((io32_t){.ptr = (volatile uint32_t *)(addr)})
-#define IO64_C(addr) ((io64_t){.ptr = (volatile uint64_t *)(addr)})
+static inline io8_t io8_c(uintpaddr_t addr, uintpaddr_t offset)
+{
+	return (io8_t){.ptr = (volatile uint8_t *)(addr + offset)};
+}
 
-#define IO8_ARRAY_C(addr, cnt) \
-	((io8_array_t){.base = (volatile uint8_t *)(addr), .count = (cnt)})
-#define IO16_ARRAY_C(addr, cnt) \
-	((io16_array_t){.base = (volatile uint16_t *)(addr), .count = (cnt)})
-#define IO32_ARRAY_C(addr, cnt) \
-	((io32_array_t){.base = (volatile uint32_t *)(addr), .count = (cnt)})
-#define IO64_ARRAY_C(addr, cnt) \
-	((io64_array_t){.base = (volatile uint64_t *)(addr), .count = (cnt)})
+static inline io8_array_t io8_array_c(uintpaddr_t addr, uintpaddr_t offset,
+				      uint32_t count)
+{
+	return (io8_array_t){.base = (volatile uint8_t *)addr, .count = count};
+}
+
+static inline io16_t io16_c(uintpaddr_t addr, uintpaddr_t offset)
+{
+	return (io16_t){.ptr = (volatile uint16_t *)(addr + offset)};
+}
+
+static inline io16_array_t io16_array_c(uintpaddr_t addr, uintpaddr_t offset,
+					uint32_t count)
+{
+	return (io16_array_t){.base = (volatile uint16_t *)addr,
+			      .count = count};
+}
+
+static inline io32_t io32_c(uintpaddr_t addr, uintpaddr_t offset)
+{
+	return (io32_t){.ptr = (volatile uint32_t *)(addr + offset)};
+}
+
+static inline io32_array_t io32_array_c(uintpaddr_t addr, uintpaddr_t offset,
+					uint32_t count)
+{
+	return (io32_array_t){.base = (volatile uint32_t *)addr,
+			      .count = count};
+}
+
+static inline io64_t io64_c(uintpaddr_t addr, uintpaddr_t offset)
+{
+	return (io64_t){.ptr = (volatile uint64_t *)(addr + offset)};
+}
+
+static inline io64_array_t io64_array_c(uintpaddr_t addr, uintpaddr_t offset,
+					uint32_t count)
+{
+	return (io64_array_t){.base = (volatile uint64_t *)addr,
+			      .count = count};
+}
+
+#define IO8_C(addr) io8_c((addr), 0)
+#define IO16_C(addr) io16_c((addr), 0)
+#define IO32_C(addr) io32_c((addr), 0)
+#define IO64_C(addr) io64_c((addr), 0)
+
+#define IO8_ARRAY_C(addr, cnt) io8_array_c((addr), 0, cnt)
+#define IO16_ARRAY_C(addr, cnt) io16_array_c((addr), 0, cnt)
+#define IO32_ARRAY_C(addr, cnt) io32_array_c((addr), 0, cnt)
+#define IO64_ARRAY_C(addr, cnt) io64_array_c((addr), 0, cnt)
 
 /** Read from memory-mapped IO. */
 
diff --git a/src/arch/aarch64/arm_smmuv3/arm_smmuv3.h b/src/arch/aarch64/arm_smmuv3/arm_smmuv3.h
index d2a2376..e3decd6 100644
--- a/src/arch/aarch64/arm_smmuv3/arm_smmuv3.h
+++ b/src/arch/aarch64/arm_smmuv3/arm_smmuv3.h
@@ -332,32 +332,32 @@
 
 static inline uint32_t mmio_read32(void *addr)
 {
-	return io_read32(IO32_C(addr));
+	return io_read32(IO32_C((uintpaddr_t)addr));
 }
 
-static inline uint32_t mmio_read32_offset(void *addr, uint32_t byte_off)
+static inline uint32_t mmio_read32_offset(void *addr, uint32_t offset)
 {
-	return io_read32(IO32_C((uint8_t *)addr + byte_off));
+	return io_read32(io32_c((uintpaddr_t)addr, offset));
 }
 
 static inline void mmio_write32(void *addr, uint32_t data)
 {
-	io_write32(IO32_C(addr), data);
+	io_write32(IO32_C((uintpaddr_t)addr), data);
 }
 
-static inline void mmio_write32_offset(void *addr, uint32_t byte_off,
+static inline void mmio_write32_offset(void *addr, uint32_t offset,
 				       uint32_t data)
 {
-	io_write32(IO32_C((uint8_t *)addr + byte_off), data);
+	io_write32(io32_c((uintpaddr_t)addr, offset), data);
 }
 
 static inline void mmio_write64(void *addr, uint64_t data)
 {
-	io_write64(IO64_C(addr), data);
+	io_write64(IO64_C((uintpaddr_t)addr), data);
 }
 
-static inline void mmio_write64_offset(void *addr, uint32_t byte_off,
+static inline void mmio_write64_offset(void *addr, uint32_t offset,
 				       uint64_t data)
 {
-	io_write64(IO64_C((uint8_t *)addr + byte_off), data);
+	io_write64(io64_c((uintpaddr_t)addr, offset), data);
 }
diff --git a/test/vmapi/arch/aarch64/gicv3/gicv3.c b/test/vmapi/arch/aarch64/gicv3/gicv3.c
index 2b1c822..682bc4e 100644
--- a/test/vmapi/arch/aarch64/gicv3/gicv3.c
+++ b/test/vmapi/arch/aarch64/gicv3/gicv3.c
@@ -47,7 +47,7 @@
 	const uint32_t mode = MM_MODE_R | MM_MODE_W | MM_MODE_D;
 	hftest_mm_identity_map((void *)GICD_BASE, PAGE_SIZE, mode);
 	hftest_mm_identity_map((void *)GICR_BASE, PAGE_SIZE, mode);
-	hftest_mm_identity_map((void *)SGI_BASE, PAGE_SIZE, mode);
+	hftest_mm_identity_map((void *)IO32_C(SGI_BASE).ptr, PAGE_SIZE, mode);
 
 	exception_setup(irq, NULL);
 	interrupt_gic_setup();