From fa6fd6bf86e97140cf3c991f605cf04a0b24ab50 Mon Sep 17 00:00:00 2001
From: Abner Chang <abner.chang@hpe.com>
Date: Sat, 29 Jun 2019 16:18:04 +0800
Subject: include: Move callbacks in sbi_platform to separate struct

Move platform opensbi functions to sbi_platform_operations structure.
Both sbi_platform and sbi_platform_operations structures are maintained
by platform vendors.

Signed-off-by: Abner Chang <abner.chang@hpe.com>
Acked-by: Anup Patel <anup.patel@wdc.com>
---
 include/sbi/sbi_platform.h        | 123 +++++++++++++++++++++-----------------
 platform/ariane-fpga/platform.c   |  16 +++--
 platform/kendryte/k210/platform.c |  25 ++++----
 platform/qemu/sifive_u/platform.c |  48 ++++++++-------
 platform/qemu/virt/platform.c     |  48 ++++++++-------
 platform/sifive/fu540/platform.c  |  48 ++++++++-------
 platform/template/platform.c      |  62 +++++++++----------
 7 files changed, 198 insertions(+), 172 deletions(-)

diff --git a/include/sbi/sbi_platform.h b/include/sbi/sbi_platform.h
index e46acfd..824522e 100644
--- a/include/sbi/sbi_platform.h
+++ b/include/sbi/sbi_platform.h
@@ -18,6 +18,10 @@
 #define SBI_PLATFORM_HART_COUNT_OFFSET (0x48)
 /** Offset of hart_stack_size in struct sbi_platform */
 #define SBI_PLATFORM_HART_STACK_SIZE_OFFSET (0x4c)
+/** Offset of disabled_hart_mask in struct sbi_platform */
+#define SBI_PLATFORM_DISABLED_HART_OFFSET (0x50)
+/** Offset of platform_ops_addr in struct sbi_platform */
+#define SBI_PLATFORM_OPS_OFFSET (0x58)
 
 #ifndef __ASSEMBLY__
 
@@ -45,19 +49,8 @@ enum sbi_platform_features {
 	 SBI_PLATFORM_HAS_SCOUNTEREN | SBI_PLATFORM_HAS_MCOUNTEREN | \
 	 SBI_PLATFORM_HAS_MFAULTS_DELEGATION)
 
-/** Representation of a platform */
-struct sbi_platform {
-	/** Name of the platform */
-	char name[64];
-	/** Supported features */
-	u64 features;
-	/** Total number of HARTs */
-	u32 hart_count;
-	/** Per-HART stack size for exception/interrupt handling */
-	u32 hart_stack_size;
-	/** Mask representing the set of disabled HARTs */
-	u64 disabled_hart_mask;
-
+/** Platform functions */
+struct sbi_platform_operations {
 	/** Platform early initialization */
 	int (*early_init)(bool cold_boot);
 	/** Platform final initialization */
@@ -106,13 +99,33 @@ struct sbi_platform {
 	int (*system_shutdown)(u32 type);
 } __packed;
 
+/** Representation of a platform */
+struct sbi_platform {
+	/** Name of the platform */
+	char name[64];
+	/** Supported features */
+	u64 features;
+	/** Total number of HARTs */
+	u32 hart_count;
+	/** Per-HART stack size for exception/interrupt handling */
+	u32 hart_stack_size;
+	/** Mask representing the set of disabled HARTs */
+	u64 disabled_hart_mask;
+	/** Pointer to sbi platform operations */
+	unsigned long platform_ops_addr;
+} __packed;
+
 /** Get pointer to sbi_platform for sbi_scratch pointer */
 #define sbi_platform_ptr(__s) \
 	((const struct sbi_platform *)((__s)->platform_addr))
 /** Get pointer to sbi_platform for current HART */
 #define sbi_platform_thishart_ptr()                               \
 	((const struct sbi_platform *)(sbi_scratch_thishart_ptr() \
-					       ->platform_addr))
+						>platform_addr))
+/** Get pointer to platform_ops_addr from platform pointer **/
+#define sbi_platform_ops(__p) \
+	((const struct sbi_platform_operations *)(__p)->platform_ops_addr)
+
 /** Check whether the platform supports timer value */
 #define sbi_platform_has_timer_value(__p) \
 	((__p)->features & SBI_PLATFORM_HAS_TIMER_VALUE)
@@ -200,8 +213,8 @@ static inline u32 sbi_platform_hart_stack_size(const struct sbi_platform *plat)
 static inline int sbi_platform_early_init(const struct sbi_platform *plat,
 					  bool cold_boot)
 {
-	if (plat && plat->early_init)
-		return plat->early_init(cold_boot);
+	if (plat && sbi_platform_ops(plat)->early_init)
+		return sbi_platform_ops(plat)->early_init(cold_boot);
 	return 0;
 }
 
@@ -216,8 +229,8 @@ static inline int sbi_platform_early_init(const struct sbi_platform *plat,
 static inline int sbi_platform_final_init(const struct sbi_platform *plat,
 					  bool cold_boot)
 {
-	if (plat && plat->final_init)
-		return plat->final_init(cold_boot);
+	if (plat && sbi_platform_ops(plat)->final_init)
+		return sbi_platform_ops(plat)->final_init(cold_boot);
 	return 0;
 }
 
@@ -232,8 +245,8 @@ static inline int sbi_platform_final_init(const struct sbi_platform *plat,
 static inline u32 sbi_platform_pmp_region_count(const struct sbi_platform *plat,
 						u32 hartid)
 {
-	if (plat && plat->pmp_region_count)
-		return plat->pmp_region_count(hartid);
+	if (plat && sbi_platform_ops(plat)->pmp_region_count)
+		return sbi_platform_ops(plat)->pmp_region_count(hartid);
 	return 0;
 }
 
@@ -251,13 +264,13 @@ static inline u32 sbi_platform_pmp_region_count(const struct sbi_platform *plat,
  * @return 0 on success and negative error code on failure
  */
 static inline int sbi_platform_pmp_region_info(const struct sbi_platform *plat,
-					       u32 hartid, u32 index,
-					       ulong *prot, ulong *addr,
-					       ulong *log2size)
+						u32 hartid, u32 index,
+						ulong *prot, ulong *addr,
+						ulong *log2size)
 {
-	if (plat && plat->pmp_region_info)
-		return plat->pmp_region_info(hartid, index, prot, addr,
-					     log2size);
+	if (plat && sbi_platform_ops(plat)->pmp_region_info)
+		return sbi_platform_ops(plat)->pmp_region_info(hartid, index, prot, addr,
+                                                                              log2size);
 	return 0;
 }
 
@@ -268,10 +281,10 @@ static inline int sbi_platform_pmp_region_info(const struct sbi_platform *plat,
  * @param ch character to write
  */
 static inline void sbi_platform_console_putc(const struct sbi_platform *plat,
-					     char ch)
+						char ch)
 {
-	if (plat && plat->console_putc)
-		plat->console_putc(ch);
+	if (plat && sbi_platform_ops(plat)->console_putc)
+		sbi_platform_ops(plat)->console_putc(ch);
 }
 
 /**
@@ -283,8 +296,8 @@ static inline void sbi_platform_console_putc(const struct sbi_platform *plat,
  */
 static inline int sbi_platform_console_getc(const struct sbi_platform *plat)
 {
-	if (plat && plat->console_getc)
-		return plat->console_getc();
+	if (plat && sbi_platform_ops(plat)->console_getc)
+		return sbi_platform_ops(plat)->console_getc();
 	return -1;
 }
 
@@ -297,8 +310,8 @@ static inline int sbi_platform_console_getc(const struct sbi_platform *plat)
  */
 static inline int sbi_platform_console_init(const struct sbi_platform *plat)
 {
-	if (plat && plat->console_init)
-		return plat->console_init();
+	if (plat && sbi_platform_ops(plat)->console_init)
+		return sbi_platform_ops(plat)->console_init();
 	return 0;
 }
 
@@ -313,8 +326,8 @@ static inline int sbi_platform_console_init(const struct sbi_platform *plat)
 static inline int sbi_platform_irqchip_init(const struct sbi_platform *plat,
 					    bool cold_boot)
 {
-	if (plat && plat->irqchip_init)
-		return plat->irqchip_init(cold_boot);
+	if (plat && sbi_platform_ops(plat)->irqchip_init)
+		return sbi_platform_ops(plat)->irqchip_init(cold_boot);
 	return 0;
 }
 
@@ -327,8 +340,8 @@ static inline int sbi_platform_irqchip_init(const struct sbi_platform *plat,
 static inline void sbi_platform_ipi_send(const struct sbi_platform *plat,
 					 u32 target_hart)
 {
-	if (plat && plat->ipi_send)
-		plat->ipi_send(target_hart);
+	if (plat && sbi_platform_ops(plat)->ipi_send)
+		sbi_platform_ops(plat)->ipi_send(target_hart);
 }
 
 /**
@@ -340,8 +353,8 @@ static inline void sbi_platform_ipi_send(const struct sbi_platform *plat,
 static inline void sbi_platform_ipi_sync(const struct sbi_platform *plat,
 					 u32 target_hart)
 {
-	if (plat && plat->ipi_sync)
-		plat->ipi_sync(target_hart);
+	if (plat && sbi_platform_ops(plat)->ipi_sync)
+		sbi_platform_ops(plat)->ipi_sync(target_hart);
 }
 
 /**
@@ -353,8 +366,8 @@ static inline void sbi_platform_ipi_sync(const struct sbi_platform *plat,
 static inline void sbi_platform_ipi_clear(const struct sbi_platform *plat,
 					  u32 target_hart)
 {
-	if (plat && plat->ipi_clear)
-		plat->ipi_clear(target_hart);
+	if (plat && sbi_platform_ops(plat)->ipi_clear)
+		sbi_platform_ops(plat)->ipi_clear(target_hart);
 }
 
 /**
@@ -368,8 +381,8 @@ static inline void sbi_platform_ipi_clear(const struct sbi_platform *plat,
 static inline int sbi_platform_ipi_init(const struct sbi_platform *plat,
 					bool cold_boot)
 {
-	if (plat && plat->ipi_init)
-		return plat->ipi_init(cold_boot);
+	if (plat && sbi_platform_ops(plat)->ipi_init)
+		return sbi_platform_ops(plat)->ipi_init(cold_boot);
 	return 0;
 }
 
@@ -382,8 +395,8 @@ static inline int sbi_platform_ipi_init(const struct sbi_platform *plat,
  */
 static inline u64 sbi_platform_timer_value(const struct sbi_platform *plat)
 {
-	if (plat && plat->timer_value)
-		return plat->timer_value();
+	if (plat && sbi_platform_ops(plat)->timer_value)
+		return sbi_platform_ops(plat)->timer_value();
 	return 0;
 }
 
@@ -396,8 +409,8 @@ static inline u64 sbi_platform_timer_value(const struct sbi_platform *plat)
 static inline void
 sbi_platform_timer_event_start(const struct sbi_platform *plat, u64 next_event)
 {
-	if (plat && plat->timer_event_start)
-		plat->timer_event_start(next_event);
+	if (plat && sbi_platform_ops(plat)->timer_event_start)
+		sbi_platform_ops(plat)->timer_event_start(next_event);
 }
 
 /**
@@ -408,8 +421,8 @@ sbi_platform_timer_event_start(const struct sbi_platform *plat, u64 next_event)
 static inline void
 sbi_platform_timer_event_stop(const struct sbi_platform *plat)
 {
-	if (plat && plat->timer_event_stop)
-		plat->timer_event_stop();
+	if (plat && sbi_platform_ops(plat)->timer_event_stop)
+		sbi_platform_ops(plat)->timer_event_stop();
 }
 
 /**
@@ -423,8 +436,8 @@ sbi_platform_timer_event_stop(const struct sbi_platform *plat)
 static inline int sbi_platform_timer_init(const struct sbi_platform *plat,
 					  bool cold_boot)
 {
-	if (plat && plat->timer_init)
-		return plat->timer_init(cold_boot);
+	if (plat && sbi_platform_ops(plat)->timer_init)
+		return sbi_platform_ops(plat)->timer_init(cold_boot);
 	return 0;
 }
 
@@ -439,8 +452,8 @@ static inline int sbi_platform_timer_init(const struct sbi_platform *plat,
 static inline int sbi_platform_system_reboot(const struct sbi_platform *plat,
 					     u32 type)
 {
-	if (plat && plat->system_reboot)
-		return plat->system_reboot(type);
+	if (plat && sbi_platform_ops(plat)->system_reboot)
+		return sbi_platform_ops(plat)->system_reboot(type);
 	return 0;
 }
 
@@ -455,8 +468,8 @@ static inline int sbi_platform_system_reboot(const struct sbi_platform *plat,
 static inline int sbi_platform_system_shutdown(const struct sbi_platform *plat,
 					       u32 type)
 {
-	if (plat && plat->system_shutdown)
-		return plat->system_shutdown(type);
+	if (plat && sbi_platform_ops(plat)->system_shutdown)
+		return sbi_platform_ops(plat)->system_shutdown(type);
 	return 0;
 }
 
diff --git a/platform/ariane-fpga/platform.c b/platform/ariane-fpga/platform.c
index 62ab9ea..9dbf333 100644
--- a/platform/ariane-fpga/platform.c
+++ b/platform/ariane-fpga/platform.c
@@ -176,12 +176,7 @@ static int ariane_system_shutdown(u32 type)
 /*
  * Platform descriptor.
  */
-const struct sbi_platform platform = {
-	.name = "ARIANE RISC-V",
-	.features = SBI_ARIANE_FEATURES,
-	.hart_count = ARIANE_HART_COUNT,
-	.hart_stack_size = 4096,
-	.disabled_hart_mask = 0,
+const struct sbi_platform_operations platform_ops = {
 	.early_init = ariane_early_init,
 	.final_init = ariane_final_init,
 	.console_init = ariane_console_init,
@@ -199,3 +194,12 @@ const struct sbi_platform platform = {
 	.system_reboot = ariane_system_reboot,
 	.system_shutdown = ariane_system_shutdown
 };
+
+const struct sbi_platform platform = {
+	.name = "ARIANE RISC-V",
+	.features = SBI_ARIANE_FEATURES,
+	.hart_count = ARIANE_HART_COUNT,
+	.hart_stack_size = 4096,
+	.disabled_hart_mask = 0,
+	.platform_ops_addr = (unsigned long)&platform_ops
+};
diff --git a/platform/kendryte/k210/platform.c b/platform/kendryte/k210/platform.c
index 299b343..f332dab 100644
--- a/platform/kendryte/k210/platform.c
+++ b/platform/kendryte/k210/platform.c
@@ -93,18 +93,10 @@ static int k210_system_shutdown(u32 type)
 	return 0;
 }
 
-const struct sbi_platform platform = {
-
-	.name	  = "Kendryte K210",
-	.features = SBI_PLATFORM_HAS_TIMER_VALUE,
-
-	.hart_count	    = K210_HART_COUNT,
-	.hart_stack_size    = K210_HART_STACK_SIZE,
-	.disabled_hart_mask = 0,
-
-	.console_init = k210_console_init,
-	.console_putc = k210_console_putc,
-	.console_getc = k210_console_getc,
+const struct sbi_platform_operations platform_ops = {
+	.console_init	= k210_console_init,
+	.console_putc	= k210_console_putc,
+	.console_getc	= k210_console_getc,
 
 	.irqchip_init = k210_irqchip_init,
 
@@ -121,3 +113,12 @@ const struct sbi_platform platform = {
 	.system_reboot	 = k210_system_reboot,
 	.system_shutdown = k210_system_shutdown
 };
+
+const struct sbi_platform platform = {
+	.name			= "Kendryte K210",
+	.features		= SBI_PLATFORM_HAS_TIMER_VALUE,
+	.hart_count		= K210_HART_COUNT,
+	.hart_stack_size	= K210_HART_STACK_SIZE,
+	.disabled_hart_mask	= 0,
+	.platform_ops_addr	= (unsigned long)&platform_ops
+};
diff --git a/platform/qemu/sifive_u/platform.c b/platform/qemu/sifive_u/platform.c
index e20d89d..aaacb3f 100644
--- a/platform/qemu/sifive_u/platform.c
+++ b/platform/qemu/sifive_u/platform.c
@@ -127,27 +127,31 @@ static int sifive_u_system_down(u32 type)
 	return 0;
 }
 
+const struct sbi_platform_operations platform_ops = {
+	.pmp_region_count	= sifive_u_pmp_region_count,
+	.pmp_region_info	= sifive_u_pmp_region_info,
+	.final_init		= sifive_u_final_init,
+	.console_putc		= sifive_uart_putc,
+	.console_getc		= sifive_uart_getc,
+	.console_init		= sifive_u_console_init,
+	.irqchip_init		= sifive_u_irqchip_init,
+	.ipi_send		= clint_ipi_send,
+	.ipi_sync		= clint_ipi_sync,
+	.ipi_clear		= clint_ipi_clear,
+	.ipi_init		= sifive_u_ipi_init,
+	.timer_value		= clint_timer_value,
+	.timer_event_stop	= clint_timer_event_stop,
+	.timer_event_start	= clint_timer_event_start,
+	.timer_init		= sifive_u_timer_init,
+	.system_reboot		= sifive_u_system_down,
+	.system_shutdown	= sifive_u_system_down
+};
+
 const struct sbi_platform platform = {
-	.name		    = "QEMU SiFive Unleashed",
-	.features	    = SBI_PLATFORM_DEFAULT_FEATURES,
-	.hart_count	    = SIFIVE_U_HART_COUNT,
-	.hart_stack_size    = SIFIVE_U_HART_STACK_SIZE,
-	.disabled_hart_mask = 0,
-	.pmp_region_count   = sifive_u_pmp_region_count,
-	.pmp_region_info    = sifive_u_pmp_region_info,
-	.final_init	    = sifive_u_final_init,
-	.console_putc	    = sifive_uart_putc,
-	.console_getc	    = sifive_uart_getc,
-	.console_init	    = sifive_u_console_init,
-	.irqchip_init	    = sifive_u_irqchip_init,
-	.ipi_send	    = clint_ipi_send,
-	.ipi_sync	    = clint_ipi_sync,
-	.ipi_clear	    = clint_ipi_clear,
-	.ipi_init	    = sifive_u_ipi_init,
-	.timer_value	    = clint_timer_value,
-	.timer_event_stop   = clint_timer_event_stop,
-	.timer_event_start  = clint_timer_event_start,
-	.timer_init	    = sifive_u_timer_init,
-	.system_reboot	    = sifive_u_system_down,
-	.system_shutdown    = sifive_u_system_down
+	.name			= "QEMU SiFive Unleashed",
+	.features		= SBI_PLATFORM_DEFAULT_FEATURES,
+	.hart_count		= SIFIVE_U_HART_COUNT,
+	.hart_stack_size	= SIFIVE_U_HART_STACK_SIZE,
+	.disabled_hart_mask	= 0,
+	.platform_ops_addr	= (unsigned long)&platform_ops
 };
diff --git a/platform/qemu/virt/platform.c b/platform/qemu/virt/platform.c
index 697549f..dbe593b 100644
--- a/platform/qemu/virt/platform.c
+++ b/platform/qemu/virt/platform.c
@@ -132,27 +132,31 @@ static int virt_system_down(u32 type)
 	return 0;
 }
 
+const struct sbi_platform_operations platform_ops = {
+	.pmp_region_count	= virt_pmp_region_count,
+	.pmp_region_info	= virt_pmp_region_info,
+	.final_init		= virt_final_init,
+	.console_putc		= uart8250_putc,
+	.console_getc		= uart8250_getc,
+	.console_init		= virt_console_init,
+	.irqchip_init		= virt_irqchip_init,
+	.ipi_send		= clint_ipi_send,
+	.ipi_sync		= clint_ipi_sync,
+	.ipi_clear		= clint_ipi_clear,
+	.ipi_init		= virt_ipi_init,
+	.timer_value		= clint_timer_value,
+	.timer_event_stop	= clint_timer_event_stop,
+	.timer_event_start	= clint_timer_event_start,
+	.timer_init		= virt_timer_init,
+	.system_reboot		= virt_system_down,
+	.system_shutdown	= virt_system_down
+};
+
 const struct sbi_platform platform = {
-	.name		    = "QEMU Virt Machine",
-	.features	    = SBI_PLATFORM_DEFAULT_FEATURES,
-	.hart_count	    = VIRT_HART_COUNT,
-	.hart_stack_size    = VIRT_HART_STACK_SIZE,
-	.disabled_hart_mask = 0,
-	.pmp_region_count   = virt_pmp_region_count,
-	.pmp_region_info    = virt_pmp_region_info,
-	.final_init	    = virt_final_init,
-	.console_putc	    = uart8250_putc,
-	.console_getc	    = uart8250_getc,
-	.console_init	    = virt_console_init,
-	.irqchip_init	    = virt_irqchip_init,
-	.ipi_send	    = clint_ipi_send,
-	.ipi_sync	    = clint_ipi_sync,
-	.ipi_clear	    = clint_ipi_clear,
-	.ipi_init	    = virt_ipi_init,
-	.timer_value	    = clint_timer_value,
-	.timer_event_stop   = clint_timer_event_stop,
-	.timer_event_start  = clint_timer_event_start,
-	.timer_init	    = virt_timer_init,
-	.system_reboot	    = virt_system_down,
-	.system_shutdown    = virt_system_down
+	.name			= "QEMU Virt Machine",
+	.features		= SBI_PLATFORM_DEFAULT_FEATURES,
+	.hart_count		= VIRT_HART_COUNT,
+	.hart_stack_size	= VIRT_HART_STACK_SIZE,
+	.disabled_hart_mask	= 0,
+	.platform_ops_addr	= (unsigned long)&platform_ops
 };
diff --git a/platform/sifive/fu540/platform.c b/platform/sifive/fu540/platform.c
index 9e16562..e67f20a 100644
--- a/platform/sifive/fu540/platform.c
+++ b/platform/sifive/fu540/platform.c
@@ -188,27 +188,31 @@ static int fu540_system_down(u32 type)
 	return 0;
 }
 
+const struct sbi_platform_operations platform_ops = {
+	.pmp_region_count	= fu540_pmp_region_count,
+	.pmp_region_info	= fu540_pmp_region_info,
+	.final_init		= fu540_final_init,
+	.console_putc		= sifive_uart_putc,
+	.console_getc		= sifive_uart_getc,
+	.console_init		= fu540_console_init,
+	.irqchip_init		= fu540_irqchip_init,
+	.ipi_send		= clint_ipi_send,
+	.ipi_sync		= clint_ipi_sync,
+	.ipi_clear		= clint_ipi_clear,
+	.ipi_init		= fu540_ipi_init,
+	.timer_value		= clint_timer_value,
+	.timer_event_stop	= clint_timer_event_stop,
+	.timer_event_start	= clint_timer_event_start,
+	.timer_init		= fu540_timer_init,
+	.system_reboot		= fu540_system_down,
+	.system_shutdown	= fu540_system_down
+};
+
 const struct sbi_platform platform = {
-	.name		    = "SiFive Freedom U540",
-	.features	    = SBI_PLATFORM_DEFAULT_FEATURES,
-	.hart_count	    = FU540_HART_COUNT,
-	.hart_stack_size    = FU540_HART_STACK_SIZE,
-	.disabled_hart_mask = FU540_HARITD_DISABLED,
-	.pmp_region_count   = fu540_pmp_region_count,
-	.pmp_region_info    = fu540_pmp_region_info,
-	.final_init	    = fu540_final_init,
-	.console_putc	    = sifive_uart_putc,
-	.console_getc	    = sifive_uart_getc,
-	.console_init	    = fu540_console_init,
-	.irqchip_init	    = fu540_irqchip_init,
-	.ipi_send	    = clint_ipi_send,
-	.ipi_sync	    = clint_ipi_sync,
-	.ipi_clear	    = clint_ipi_clear,
-	.ipi_init	    = fu540_ipi_init,
-	.timer_value	    = clint_timer_value,
-	.timer_event_stop   = clint_timer_event_stop,
-	.timer_event_start  = clint_timer_event_start,
-	.timer_init	    = fu540_timer_init,
-	.system_reboot	    = fu540_system_down,
-	.system_shutdown    = fu540_system_down
+	.name			= "SiFive Freedom U540",
+	.features		= SBI_PLATFORM_DEFAULT_FEATURES,
+	.hart_count		= FU540_HART_COUNT,
+	.hart_stack_size	= FU540_HART_STACK_SIZE,
+	.disabled_hart_mask	= FU540_HARITD_DISABLED,
+	.platform_ops_addr	= (unsigned long)&platform_ops
 };
diff --git a/platform/template/platform.c b/platform/template/platform.c
index b8c627d..2ba549f 100644
--- a/platform/template/platform.c
+++ b/platform/template/platform.c
@@ -12,9 +12,9 @@
  * Include these files as needed.
  * See config.mk PLATFORM_xxx configuration parameters.
  */
-#include <plat/irqchip/plic.h>
-#include <plat/serial/uart8250.h>
-#include <plat/sys/clint.h>
+#include <sbi_utils/irqchip/plic.h>
+#include <sbi_utils/serial/uart8250.h>
+#include <sbi_utils/sys/clint.h>
 
 /*
  * Platform early initialization.
@@ -206,35 +206,31 @@ static int platform_system_shutdown(u32 type)
 /*
  * Platform descriptor.
  */
+const struct sbi_platform_operations platform_ops = {
+	.early_init		= platform_early_init,
+	.final_init		= platform_final_init,
+	.pmp_region_count	= platform_pmp_region_count,
+	.pmp_region_info	= platform_pmp_region_info,
+	.console_putc		= platform_console_putc,
+	.console_getc		= platform_console_getc,
+	.console_init		= platform_console_init,
+	.irqchip_init		= platform_irqchip_init,
+	.ipi_send		= platform_ipi_send,
+	.ipi_sync		= platform_ipi_sync,
+	.ipi_clear		= platform_ipi_clear,
+	.ipi_init		= platform_ipi_init,
+	.timer_value		= platform_timer_value,
+	.timer_event_stop	= platform_timer_event_stop,
+	.timer_event_start	= platform_timer_event_start,
+	.timer_init		= platform_timer_init,
+	.system_reboot		= platform_system_down,
+	.system_shutdown	= platform_system_down
+};
 const struct sbi_platform platform = {
-
-	.name		    = "platform-name",
-	.features	    = SBI_PLATFORM_DEFAULT_FEATURES,
-	.hart_count	    = 1,
-	.hart_stack_size    = 4096,
-	.disabled_hart_mask = 0,
-
-	.early_init = platform_early_init,
-	.final_init = platform_final_init,
-
-	.pmp_region_count = platform_pmp_region_count,
-	.pmp_region_info  = platform_pmp_region_info,
-
-	.console_init = platform_console_init,
-	.console_putc = platform_console_putc,
-	.console_getc = platform_console_getc,
-
-	.irqchip_init = platform_irqchip_init,
-	.ipi_init     = platform_ipi_init,
-	.ipi_send     = platform_ipi_send,
-	.ipi_sync     = platform_ipi_sync,
-	.ipi_clear    = platform_ipi_clear,
-
-	.timer_init	   = platform_timer_init,
-	.timer_value	   = platform_timer_value,
-	.timer_event_start = platform_timer_event_start,
-	.timer_event_stop  = platform_timer_event_stop,
-
-	.system_reboot	 = platform_system_reboot,
-	.system_shutdown = platform_system_shutdown
+	.name			= "platform-name",
+	.features		= SBI_PLATFORM_DEFAULT_FEATURES,
+	.hart_count		= 1,
+	.hart_stack_size	= 4096,
+	.disabled_hart_mask	= 0,
+	.platform_ops_addr	= (unsigned long)&platform_ops
 };
-- 
cgit v1.2.3