interrupt_controller: gicv3_its: add get_msi_addr API

Add get_msi_addr() callback to ITS API to retrieve the GITS_TRANSLATER
physical address to be set in the MSI message address field.

Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
diff --git a/drivers/interrupt_controller/intc_gicv3_its.c b/drivers/interrupt_controller/intc_gicv3_its.c
index 491305b..e9ab069 100644
--- a/drivers/interrupt_controller/intc_gicv3_its.c
+++ b/drivers/interrupt_controller/intc_gicv3_its.c
@@ -561,6 +561,13 @@
 	return atomic_inc(&nlpi_intid);
 }
 
+static uint32_t gicv3_its_get_msi_addr(const struct device *dev)
+{
+	const struct gicv3_its_config *cfg = (const struct gicv3_its_config *)dev->config;
+
+	return cfg->base_addr + GITS_TRANSLATER;
+}
+
 #define ITS_RDIST_MAP(n)									  \
 	{											  \
 		const struct device *dev = DEVICE_DT_INST_GET(n);				  \
@@ -651,6 +658,7 @@
 	.setup_deviceid = gicv3_its_init_device_id,
 	.map_intid = gicv3_its_map_intid,
 	.send_int = gicv3_its_send_int,
+	.get_msi_addr = gicv3_its_get_msi_addr,
 };
 
 #define GICV3_ITS_INIT(n)						       \
diff --git a/include/drivers/interrupt_controller/gicv3_its.h b/include/drivers/interrupt_controller/gicv3_its.h
index fc4971c..dfc3659 100644
--- a/include/drivers/interrupt_controller/gicv3_its.h
+++ b/include/drivers/interrupt_controller/gicv3_its.h
@@ -22,12 +22,14 @@
 typedef int (*its_api_map_intid_t)(const struct device *dev, uint32_t device_id,
 				   uint32_t event_id, unsigned int intid);
 typedef int (*its_api_send_int_t)(const struct device *dev, uint32_t device_id, uint32_t event_id);
+typedef uint32_t (*its_api_get_msi_addr_t)(const struct device *dev);
 
 __subsystem struct its_driver_api {
 	its_api_alloc_intid_t alloc_intid;
 	its_api_setup_deviceid_t setup_deviceid;
 	its_api_map_intid_t map_intid;
 	its_api_send_int_t send_int;
+	its_api_get_msi_addr_t get_msi_addr;
 };
 
 static inline int its_alloc_intid(const struct device *dev)
@@ -64,4 +66,12 @@
 	return api->send_int(dev, device_id, event_id);
 }
 
+static inline uint32_t its_get_msi_addr(const struct device *dev)
+{
+	const struct its_driver_api *api =
+		(const struct its_driver_api *)dev->api;
+
+	return api->get_msi_addr(dev);
+}
+
 #endif /* ZEPHYR_INCLUDE_DRIVERS_GICV3_ITS_H_ */