public inbox for opensbi@lists.infradead.org
 help / color / mirror / Atom feed
* [PATCH] platform: openpiton: Add PMU initialization
@ 2025-07-21 16:09 Manuel Hernández Méndez
  2025-07-21 18:36 ` Samuel Holland
  0 siblings, 1 reply; 6+ messages in thread
From: Manuel Hernández Méndez @ 2025-07-21 16:09 UTC (permalink / raw)
  To: opensbi; +Cc: Manuel Hernández Méndez

The OpenPiton framework has a generic PMU that is not used by OpenSBI.
Due to OpenSBI’s build system we cannot directly reuse the generic
platform functions, so simply copy them to the OpenPiton platform.

Signed-off-by: Manuel Hernández Méndez <maherme.dev@gmail.com>
---
 platform/fpga/openpiton/platform.c | 39 ++++++++++++++++++++++++++++++
 1 file changed, 39 insertions(+)

diff --git a/platform/fpga/openpiton/platform.c b/platform/fpga/openpiton/platform.c
index d2cf3e32..08136859 100644
--- a/platform/fpga/openpiton/platform.c
+++ b/platform/fpga/openpiton/platform.c
@@ -11,6 +11,7 @@
 #include <sbi/sbi_platform.h>
 #include <sbi_utils/fdt/fdt_helper.h>
 #include <sbi_utils/fdt/fdt_fixup.h>
+#include <sbi_utils/fdt/fdt_pmu.h>
 #include <sbi_utils/ipi/aclint_mswi.h>
 #include <sbi_utils/irqchip/plic.h>
 #include <sbi_utils/serial/uart8250.h>
@@ -156,6 +157,42 @@ static int openpiton_timer_init(void)
 	return aclint_mtimer_cold_init(&mtimer, NULL);
 }
 
+/*
+ * Initialize openpiton pmu during cold boot.
+ */
+int openpiton_pmu_init(void)
+{
+	int rc;
+
+	rc = fdt_pmu_setup(fdt_get_address());
+	if (rc && rc != SBI_ENOENT)
+		return rc;
+
+	return 0;
+}
+
+uint64_t openpiton_pmu_xlate_to_mhpmevent(uint32_t event_idx, uint64_t data)
+{
+	uint64_t evt_val = 0;
+
+	/* data is valid only for raw events and is equal to event selector */
+	if (event_idx == SBI_PMU_EVENT_RAW_IDX ||
+		event_idx == SBI_PMU_EVENT_RAW_V2_IDX)
+		evt_val = data;
+	else {
+		/**
+		 * Generic platform follows the SBI specification recommendation
+		 * i.e. zero extended event_idx is used as mhpmevent value for
+		 * hardware general/cache events if platform does't define one.
+		 */
+		evt_val = fdt_pmu_get_select_value(event_idx);
+		if (!evt_val)
+			evt_val = (uint64_t)event_idx;
+	}
+
+	return evt_val;
+}
+
 /*
  * Platform descriptor.
  */
@@ -165,6 +202,8 @@ const struct sbi_platform_operations platform_ops = {
 	.irqchip_init = openpiton_irqchip_init,
 	.ipi_init = openpiton_ipi_init,
 	.timer_init = openpiton_timer_init,
+	.pmu_init = openpiton_pmu_init,
+	.pmu_xlate_to_mhpmevent = openpiton_pmu_xlate_to_mhpmevent,
 };
 
 const struct sbi_platform platform = {
-- 
2.34.1


-- 
opensbi mailing list
opensbi@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/opensbi

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH] platform: openpiton: Add PMU initialization
  2025-07-21 16:09 [PATCH] platform: openpiton: Add PMU initialization Manuel Hernández Méndez
@ 2025-07-21 18:36 ` Samuel Holland
  2025-08-13 10:42   ` [PATCH] platform: openpiton: Move openpiton platform from fpga to generic Manuel Hernández Méndez
  2025-08-13 10:47   ` [PATCH v2] " Manuel Hernández Méndez
  0 siblings, 2 replies; 6+ messages in thread
From: Samuel Holland @ 2025-07-21 18:36 UTC (permalink / raw)
  To: Manuel Hernández Méndez, opensbi

Hi,

On 2025-07-21 11:09 AM, Manuel Hernández Méndez wrote:
> The OpenPiton framework has a generic PMU that is not used by OpenSBI.
> Due to OpenSBI’s build system we cannot directly reuse the generic
> platform functions, so simply copy them to the OpenPiton platform.

Since you must be using a FDT for the new PMU functions to work, is there
anything preventing you from using that FDT with the generic platform? The
generic platform is where new features are added; the other platforms get only
minimal maintenance and testing. So it might be better to migrate OpenPiton to
the generic platform if possible.

If firmware size is a concern, we can create a slimmed-down defconfig -- a
generic platform build with a limited set of drivers is only about 13 KiB larger
than a fpga/openpiton build.

> Signed-off-by: Manuel Hernández Méndez <maherme.dev@gmail.com>
> ---
>  platform/fpga/openpiton/platform.c | 39 ++++++++++++++++++++++++++++++
>  1 file changed, 39 insertions(+)
> 
> diff --git a/platform/fpga/openpiton/platform.c b/platform/fpga/openpiton/platform.c
> index d2cf3e32..08136859 100644
> --- a/platform/fpga/openpiton/platform.c
> +++ b/platform/fpga/openpiton/platform.c
> @@ -11,6 +11,7 @@
>  #include <sbi/sbi_platform.h>
>  #include <sbi_utils/fdt/fdt_helper.h>
>  #include <sbi_utils/fdt/fdt_fixup.h>
> +#include <sbi_utils/fdt/fdt_pmu.h>
>  #include <sbi_utils/ipi/aclint_mswi.h>
>  #include <sbi_utils/irqchip/plic.h>
>  #include <sbi_utils/serial/uart8250.h>
> @@ -156,6 +157,42 @@ static int openpiton_timer_init(void)
>  	return aclint_mtimer_cold_init(&mtimer, NULL);
>  }
>  
> +/*
> + * Initialize openpiton pmu during cold boot.
> + */
> +int openpiton_pmu_init(void)
> +{
> +	int rc;
> +
> +	rc = fdt_pmu_setup(fdt_get_address());

You would also need a defconfig change enabling CONFIG_FDT_PMU for this function
call to do anything.

Regards,
Samuel

> +	if (rc && rc != SBI_ENOENT)
> +		return rc;
> +
> +	return 0;
> +}
> +
> +uint64_t openpiton_pmu_xlate_to_mhpmevent(uint32_t event_idx, uint64_t data)
> +{
> +	uint64_t evt_val = 0;
> +
> +	/* data is valid only for raw events and is equal to event selector */
> +	if (event_idx == SBI_PMU_EVENT_RAW_IDX ||
> +		event_idx == SBI_PMU_EVENT_RAW_V2_IDX)
> +		evt_val = data;
> +	else {
> +		/**
> +		 * Generic platform follows the SBI specification recommendation
> +		 * i.e. zero extended event_idx is used as mhpmevent value for
> +		 * hardware general/cache events if platform does't define one.
> +		 */
> +		evt_val = fdt_pmu_get_select_value(event_idx);
> +		if (!evt_val)
> +			evt_val = (uint64_t)event_idx;
> +	}
> +
> +	return evt_val;
> +}
> +
>  /*
>   * Platform descriptor.
>   */
> @@ -165,6 +202,8 @@ const struct sbi_platform_operations platform_ops = {
>  	.irqchip_init = openpiton_irqchip_init,
>  	.ipi_init = openpiton_ipi_init,
>  	.timer_init = openpiton_timer_init,
> +	.pmu_init = openpiton_pmu_init,
> +	.pmu_xlate_to_mhpmevent = openpiton_pmu_xlate_to_mhpmevent,
>  };
>  
>  const struct sbi_platform platform = {


-- 
opensbi mailing list
opensbi@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/opensbi

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH] platform: openpiton: Move openpiton platform from fpga to generic
  2025-07-21 18:36 ` Samuel Holland
@ 2025-08-13 10:42   ` Manuel Hernández Méndez
  2025-08-13 10:47   ` [PATCH v2] " Manuel Hernández Méndez
  1 sibling, 0 replies; 6+ messages in thread
From: Manuel Hernández Méndez @ 2025-08-13 10:42 UTC (permalink / raw)
  To: opensbi; +Cc: Manuel Hernández Méndez

The OpenPiton framework has a generic PMU that is not used by OpenSBI.
Due to OpenSBI’s build system we cannot directly reuse the generic
platform functions, so move the OpenPiton platform to generic. Also due
to the generic platform is where new features are added.

Signed-off-by: Manuel Hernández Méndez <maherme.dev@gmail.com>
---
 platform/fpga/openpiton/Kconfig               | 10 ----
 platform/fpga/openpiton/configs/defconfig     |  0
 platform/fpga/openpiton/objects.mk            | 41 ----------------
 platform/generic/Kconfig                      |  4 ++
 platform/generic/configs/defconfig            |  1 +
 platform/generic/openhwgroup/objects.mk       |  8 ++++
 .../openhwgroup/openpiton.c}                  | 48 +++++++++----------
 7 files changed, 36 insertions(+), 76 deletions(-)
 delete mode 100644 platform/fpga/openpiton/Kconfig
 delete mode 100644 platform/fpga/openpiton/configs/defconfig
 delete mode 100644 platform/fpga/openpiton/objects.mk
 create mode 100644 platform/generic/openhwgroup/objects.mk
 rename platform/{fpga/openpiton/platform.c => generic/openhwgroup/openpiton.c} (82%)

diff --git a/platform/fpga/openpiton/Kconfig b/platform/fpga/openpiton/Kconfig
deleted file mode 100644
index bc9c86ee..00000000
--- a/platform/fpga/openpiton/Kconfig
+++ /dev/null
@@ -1,10 +0,0 @@
-# SPDX-License-Identifier: BSD-2-Clause
-
-config PLATFORM_OPENPITON_FPGA
-	bool
-	select FDT
-	select IPI_MSWI
-	select IRQCHIP_PLIC
-	select SERIAL_UART8250
-	select TIMER_MTIMER
-	default y
diff --git a/platform/fpga/openpiton/configs/defconfig b/platform/fpga/openpiton/configs/defconfig
deleted file mode 100644
index e69de29b..00000000
diff --git a/platform/fpga/openpiton/objects.mk b/platform/fpga/openpiton/objects.mk
deleted file mode 100644
index 1a0ce0c7..00000000
--- a/platform/fpga/openpiton/objects.mk
+++ /dev/null
@@ -1,41 +0,0 @@
-#
-# SPDX-License-Identifier: BSD-2-Clause
-#
-# Copyright (c) 2020 Western Digital Corporation or its affiliates.
-#
-
-# Compiler flags
-platform-cppflags-y =
-platform-cflags-y =
-platform-asflags-y =
-platform-ldflags-y =
-
-# Objects to build
-platform-objs-y += platform.o
-
-PLATFORM_RISCV_XLEN = 64
-
-# Blobs to build
-FW_JUMP=n
-
-ifeq ($(PLATFORM_RISCV_XLEN), 32)
- # This needs to be 4MB aligned for 32-bit support
- FW_JUMP_ADDR=0x80400000
- else
- # This needs to be 2MB aligned for 64-bit support
- FW_JUMP_ADDR=0x80200000
- endif
-FW_JUMP_FDT_ADDR=0x82200000
-
-# Firmware with payload configuration.
-FW_PAYLOAD=y
-
-ifeq ($(PLATFORM_RISCV_XLEN), 32)
-# This needs to be 4MB aligned for 32-bit support
-  FW_PAYLOAD_OFFSET=0x400000
-else
-# This needs to be 2MB aligned for 64-bit support
-  FW_PAYLOAD_OFFSET=0x200000
-endif
-FW_PAYLOAD_FDT_ADDR=0x82200000
-FW_PAYLOAD_ALIGN=0x1000
diff --git a/platform/generic/Kconfig b/platform/generic/Kconfig
index a24d6ab2..7559a4bd 100644
--- a/platform/generic/Kconfig
+++ b/platform/generic/Kconfig
@@ -36,6 +36,10 @@ config PLATFORM_ANDES_AE350
 	select ANDES_PMA
 	default n
 
+config PLATFORM_OPENHWGROUP_OPENPITON
+	bool "OpenHWGroup Openpiton support"
+	default n
+
 config PLATFORM_RENESAS_RZFIVE
 	bool "Renesas RZ/Five support"
 	select ANDES_PMA
diff --git a/platform/generic/configs/defconfig b/platform/generic/configs/defconfig
index c7a6531e..4b93d0bc 100644
--- a/platform/generic/configs/defconfig
+++ b/platform/generic/configs/defconfig
@@ -7,6 +7,7 @@ CONFIG_PLATFORM_SOPHGO_SG2042=y
 CONFIG_PLATFORM_STARFIVE_JH7110=y
 CONFIG_PLATFORM_THEAD=y
 CONFIG_PLATFORM_MIPS_P8700=y
+CONFIG_PLATFORM_OPENHWGROUP_OPENPITON=y
 CONFIG_FDT_CPPC=y
 CONFIG_FDT_CPPC_RPMI=y
 CONFIG_FDT_GPIO=y
diff --git a/platform/generic/openhwgroup/objects.mk b/platform/generic/openhwgroup/objects.mk
new file mode 100644
index 00000000..ab6ca79d
--- /dev/null
+++ b/platform/generic/openhwgroup/objects.mk
@@ -0,0 +1,8 @@
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Copyright (c) 2020 Western Digital Corporation or its affiliates.
+#
+
+carray-platform_override_modules-$(CONFIG_PLATFORM_OPENHWGROUP_OPENPITON) += openhwgroup_openpiton
+platform-objs-$(CONFIG_PLATFORM_OPENHWGROUP_OPENPITON) += openhwgroup/openpiton.o
diff --git a/platform/fpga/openpiton/platform.c b/platform/generic/openhwgroup/openpiton.c
similarity index 82%
rename from platform/fpga/openpiton/platform.c
rename to platform/generic/openhwgroup/openpiton.c
index faa299ce..6417f130 100644
--- a/platform/fpga/openpiton/platform.c
+++ b/platform/generic/openhwgroup/openpiton.c
@@ -3,12 +3,12 @@
  * Copyright (c) 2020 Western Digital Corporation or its affiliates.
  */
 
-#include <sbi/riscv_asm.h>
-#include <sbi/riscv_encoding.h>
-#include <sbi/riscv_io.h>
-#include <sbi/sbi_const.h>
-#include <sbi/sbi_hart.h>
-#include <sbi/sbi_platform.h>
+#include <platform_override.h>
+//#include <sbi/riscv_asm.h>
+//#include <sbi/riscv_encoding.h>
+//#include <sbi/riscv_io.h>
+//#include <sbi/sbi_const.h>
+//#include <sbi/sbi_hart.h>
 #include <sbi_utils/fdt/fdt_helper.h>
 #include <sbi_utils/fdt/fdt_fixup.h>
 #include <sbi_utils/ipi/aclint_mswi.h>
@@ -156,25 +156,23 @@ static int openpiton_timer_init(void)
 	return aclint_mtimer_cold_init(&mtimer, NULL);
 }
 
-/*
- * Platform descriptor.
- */
-const struct sbi_platform_operations platform_ops = {
-	.early_init = openpiton_early_init,
-	.final_init = openpiton_final_init,
-	.irqchip_init = openpiton_irqchip_init,
-	.ipi_init = openpiton_ipi_init,
-	.timer_init = openpiton_timer_init,
+static int openhwgroup_openpiton_platform_init(const void *fdt, int nodeoff, const struct fdt_match *match)
+{
+	generic_platform_ops.early_init = openpiton_early_init;
+	generic_platform_ops.timer_init = openpiton_timer_init;
+	generic_platform_ops.ipi_init = openpiton_ipi_init;
+	generic_platform_ops.irqchip_init = openpiton_irqchip_init;
+	generic_platform_ops.final_init = openpiton_final_init;
+
+	return 0;
+}
+
+static const struct fdt_match openhwgroup_openpiton_match[] = {
+	{ .compatible = "openpiton,cva6platform" },
+	{ },
 };
 
-const struct sbi_platform platform = {
-	.opensbi_version = OPENSBI_VERSION,
-	.platform_version = SBI_PLATFORM_VERSION(0x0, 0x01),
-	.name = "OPENPITON RISC-V",
-	.features = SBI_PLATFORM_DEFAULT_FEATURES,
-	.hart_count = OPENPITON_DEFAULT_HART_COUNT,
-	.hart_stack_size = SBI_PLATFORM_DEFAULT_HART_STACK_SIZE,
-	.heap_size =
-		SBI_PLATFORM_DEFAULT_HEAP_SIZE(OPENPITON_DEFAULT_HART_COUNT),
-	.platform_ops_addr = (unsigned long)&platform_ops
+const struct fdt_driver openhwgroup_openpiton = {
+	.match_table = openhwgroup_openpiton_match,
+	.init = openhwgroup_openpiton_platform_init,
 };
-- 
2.34.1


-- 
opensbi mailing list
opensbi@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/opensbi

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH v2] platform: openpiton: Move openpiton platform from fpga to generic
  2025-07-21 18:36 ` Samuel Holland
  2025-08-13 10:42   ` [PATCH] platform: openpiton: Move openpiton platform from fpga to generic Manuel Hernández Méndez
@ 2025-08-13 10:47   ` Manuel Hernández Méndez
  2025-08-26 11:25     ` Anup Patel
  1 sibling, 1 reply; 6+ messages in thread
From: Manuel Hernández Méndez @ 2025-08-13 10:47 UTC (permalink / raw)
  To: opensbi; +Cc: Manuel Hernández Méndez

The OpenPiton framework has a generic PMU that is not used by OpenSBI.
Due to OpenSBI’s build system we cannot directly reuse the generic
platform functions, so move the OpenPiton platform to generic. Also due
to the generic platform is where new features are added.

Signed-off-by: Manuel Hernández Méndez <maherme.dev@gmail.com>
---
 platform/fpga/openpiton/Kconfig               | 10 -----
 platform/fpga/openpiton/configs/defconfig     |  0
 platform/fpga/openpiton/objects.mk            | 41 ------------------
 platform/generic/Kconfig                      |  4 ++
 platform/generic/configs/defconfig            |  1 +
 platform/generic/openhwgroup/objects.mk       |  8 ++++
 .../openhwgroup/openpiton.c}                  | 43 ++++++++-----------
 7 files changed, 31 insertions(+), 76 deletions(-)
 delete mode 100644 platform/fpga/openpiton/Kconfig
 delete mode 100644 platform/fpga/openpiton/configs/defconfig
 delete mode 100644 platform/fpga/openpiton/objects.mk
 create mode 100644 platform/generic/openhwgroup/objects.mk
 rename platform/{fpga/openpiton/platform.c => generic/openhwgroup/openpiton.c} (82%)

diff --git a/platform/fpga/openpiton/Kconfig b/platform/fpga/openpiton/Kconfig
deleted file mode 100644
index bc9c86ee..00000000
--- a/platform/fpga/openpiton/Kconfig
+++ /dev/null
@@ -1,10 +0,0 @@
-# SPDX-License-Identifier: BSD-2-Clause
-
-config PLATFORM_OPENPITON_FPGA
-	bool
-	select FDT
-	select IPI_MSWI
-	select IRQCHIP_PLIC
-	select SERIAL_UART8250
-	select TIMER_MTIMER
-	default y
diff --git a/platform/fpga/openpiton/configs/defconfig b/platform/fpga/openpiton/configs/defconfig
deleted file mode 100644
index e69de29b..00000000
diff --git a/platform/fpga/openpiton/objects.mk b/platform/fpga/openpiton/objects.mk
deleted file mode 100644
index 1a0ce0c7..00000000
--- a/platform/fpga/openpiton/objects.mk
+++ /dev/null
@@ -1,41 +0,0 @@
-#
-# SPDX-License-Identifier: BSD-2-Clause
-#
-# Copyright (c) 2020 Western Digital Corporation or its affiliates.
-#
-
-# Compiler flags
-platform-cppflags-y =
-platform-cflags-y =
-platform-asflags-y =
-platform-ldflags-y =
-
-# Objects to build
-platform-objs-y += platform.o
-
-PLATFORM_RISCV_XLEN = 64
-
-# Blobs to build
-FW_JUMP=n
-
-ifeq ($(PLATFORM_RISCV_XLEN), 32)
- # This needs to be 4MB aligned for 32-bit support
- FW_JUMP_ADDR=0x80400000
- else
- # This needs to be 2MB aligned for 64-bit support
- FW_JUMP_ADDR=0x80200000
- endif
-FW_JUMP_FDT_ADDR=0x82200000
-
-# Firmware with payload configuration.
-FW_PAYLOAD=y
-
-ifeq ($(PLATFORM_RISCV_XLEN), 32)
-# This needs to be 4MB aligned for 32-bit support
-  FW_PAYLOAD_OFFSET=0x400000
-else
-# This needs to be 2MB aligned for 64-bit support
-  FW_PAYLOAD_OFFSET=0x200000
-endif
-FW_PAYLOAD_FDT_ADDR=0x82200000
-FW_PAYLOAD_ALIGN=0x1000
diff --git a/platform/generic/Kconfig b/platform/generic/Kconfig
index a24d6ab2..7559a4bd 100644
--- a/platform/generic/Kconfig
+++ b/platform/generic/Kconfig
@@ -36,6 +36,10 @@ config PLATFORM_ANDES_AE350
 	select ANDES_PMA
 	default n
 
+config PLATFORM_OPENHWGROUP_OPENPITON
+	bool "OpenHWGroup Openpiton support"
+	default n
+
 config PLATFORM_RENESAS_RZFIVE
 	bool "Renesas RZ/Five support"
 	select ANDES_PMA
diff --git a/platform/generic/configs/defconfig b/platform/generic/configs/defconfig
index c7a6531e..4b93d0bc 100644
--- a/platform/generic/configs/defconfig
+++ b/platform/generic/configs/defconfig
@@ -7,6 +7,7 @@ CONFIG_PLATFORM_SOPHGO_SG2042=y
 CONFIG_PLATFORM_STARFIVE_JH7110=y
 CONFIG_PLATFORM_THEAD=y
 CONFIG_PLATFORM_MIPS_P8700=y
+CONFIG_PLATFORM_OPENHWGROUP_OPENPITON=y
 CONFIG_FDT_CPPC=y
 CONFIG_FDT_CPPC_RPMI=y
 CONFIG_FDT_GPIO=y
diff --git a/platform/generic/openhwgroup/objects.mk b/platform/generic/openhwgroup/objects.mk
new file mode 100644
index 00000000..ab6ca79d
--- /dev/null
+++ b/platform/generic/openhwgroup/objects.mk
@@ -0,0 +1,8 @@
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Copyright (c) 2020 Western Digital Corporation or its affiliates.
+#
+
+carray-platform_override_modules-$(CONFIG_PLATFORM_OPENHWGROUP_OPENPITON) += openhwgroup_openpiton
+platform-objs-$(CONFIG_PLATFORM_OPENHWGROUP_OPENPITON) += openhwgroup/openpiton.o
diff --git a/platform/fpga/openpiton/platform.c b/platform/generic/openhwgroup/openpiton.c
similarity index 82%
rename from platform/fpga/openpiton/platform.c
rename to platform/generic/openhwgroup/openpiton.c
index faa299ce..94567abb 100644
--- a/platform/fpga/openpiton/platform.c
+++ b/platform/generic/openhwgroup/openpiton.c
@@ -3,12 +3,7 @@
  * Copyright (c) 2020 Western Digital Corporation or its affiliates.
  */
 
-#include <sbi/riscv_asm.h>
-#include <sbi/riscv_encoding.h>
-#include <sbi/riscv_io.h>
-#include <sbi/sbi_const.h>
-#include <sbi/sbi_hart.h>
-#include <sbi/sbi_platform.h>
+#include <platform_override.h>
 #include <sbi_utils/fdt/fdt_helper.h>
 #include <sbi_utils/fdt/fdt_fixup.h>
 #include <sbi_utils/ipi/aclint_mswi.h>
@@ -156,25 +151,23 @@ static int openpiton_timer_init(void)
 	return aclint_mtimer_cold_init(&mtimer, NULL);
 }
 
-/*
- * Platform descriptor.
- */
-const struct sbi_platform_operations platform_ops = {
-	.early_init = openpiton_early_init,
-	.final_init = openpiton_final_init,
-	.irqchip_init = openpiton_irqchip_init,
-	.ipi_init = openpiton_ipi_init,
-	.timer_init = openpiton_timer_init,
+static int openhwgroup_openpiton_platform_init(const void *fdt, int nodeoff, const struct fdt_match *match)
+{
+	generic_platform_ops.early_init = openpiton_early_init;
+	generic_platform_ops.timer_init = openpiton_timer_init;
+	generic_platform_ops.ipi_init = openpiton_ipi_init;
+	generic_platform_ops.irqchip_init = openpiton_irqchip_init;
+	generic_platform_ops.final_init = openpiton_final_init;
+
+	return 0;
+}
+
+static const struct fdt_match openhwgroup_openpiton_match[] = {
+	{ .compatible = "openpiton,cva6platform" },
+	{ },
 };
 
-const struct sbi_platform platform = {
-	.opensbi_version = OPENSBI_VERSION,
-	.platform_version = SBI_PLATFORM_VERSION(0x0, 0x01),
-	.name = "OPENPITON RISC-V",
-	.features = SBI_PLATFORM_DEFAULT_FEATURES,
-	.hart_count = OPENPITON_DEFAULT_HART_COUNT,
-	.hart_stack_size = SBI_PLATFORM_DEFAULT_HART_STACK_SIZE,
-	.heap_size =
-		SBI_PLATFORM_DEFAULT_HEAP_SIZE(OPENPITON_DEFAULT_HART_COUNT),
-	.platform_ops_addr = (unsigned long)&platform_ops
+const struct fdt_driver openhwgroup_openpiton = {
+	.match_table = openhwgroup_openpiton_match,
+	.init = openhwgroup_openpiton_platform_init,
 };
-- 
2.34.1


-- 
opensbi mailing list
opensbi@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/opensbi

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH v2] platform: openpiton: Move openpiton platform from fpga to generic
  2025-08-13 10:47   ` [PATCH v2] " Manuel Hernández Méndez
@ 2025-08-26 11:25     ` Anup Patel
  2025-08-26 11:42       ` Anup Patel
  0 siblings, 1 reply; 6+ messages in thread
From: Anup Patel @ 2025-08-26 11:25 UTC (permalink / raw)
  To: Manuel Hernández Méndez; +Cc: opensbi

On Wed, Aug 13, 2025 at 5:01 PM Manuel Hernández Méndez
<maherme.dev@gmail.com> wrote:
>
> The OpenPiton framework has a generic PMU that is not used by OpenSBI.
> Due to OpenSBI’s build system we cannot directly reuse the generic
> platform functions, so move the OpenPiton platform to generic. Also due
> to the generic platform is where new features are added.
>
> Signed-off-by: Manuel Hernández Méndez <maherme.dev@gmail.com>

Overall, this movement is in right direction. If you already have DT nodes
for timer, clint, and plic in the OpenPiton FDT passed to OpenSBI then
generic/openhwgroup/openpiton.c can be further simplified but this can
be done as separate patch.

Reviewed-by: Anup Patel <anup@brainfault.org>

Applied this patch to the riscv/opensbi repo.

Thanks,
Anup

> ---
>  platform/fpga/openpiton/Kconfig               | 10 -----
>  platform/fpga/openpiton/configs/defconfig     |  0
>  platform/fpga/openpiton/objects.mk            | 41 ------------------
>  platform/generic/Kconfig                      |  4 ++
>  platform/generic/configs/defconfig            |  1 +
>  platform/generic/openhwgroup/objects.mk       |  8 ++++
>  .../openhwgroup/openpiton.c}                  | 43 ++++++++-----------
>  7 files changed, 31 insertions(+), 76 deletions(-)
>  delete mode 100644 platform/fpga/openpiton/Kconfig
>  delete mode 100644 platform/fpga/openpiton/configs/defconfig
>  delete mode 100644 platform/fpga/openpiton/objects.mk
>  create mode 100644 platform/generic/openhwgroup/objects.mk
>  rename platform/{fpga/openpiton/platform.c => generic/openhwgroup/openpiton.c} (82%)
>
> diff --git a/platform/fpga/openpiton/Kconfig b/platform/fpga/openpiton/Kconfig
> deleted file mode 100644
> index bc9c86ee..00000000
> --- a/platform/fpga/openpiton/Kconfig
> +++ /dev/null
> @@ -1,10 +0,0 @@
> -# SPDX-License-Identifier: BSD-2-Clause
> -
> -config PLATFORM_OPENPITON_FPGA
> -       bool
> -       select FDT
> -       select IPI_MSWI
> -       select IRQCHIP_PLIC
> -       select SERIAL_UART8250
> -       select TIMER_MTIMER
> -       default y
> diff --git a/platform/fpga/openpiton/configs/defconfig b/platform/fpga/openpiton/configs/defconfig
> deleted file mode 100644
> index e69de29b..00000000
> diff --git a/platform/fpga/openpiton/objects.mk b/platform/fpga/openpiton/objects.mk
> deleted file mode 100644
> index 1a0ce0c7..00000000
> --- a/platform/fpga/openpiton/objects.mk
> +++ /dev/null
> @@ -1,41 +0,0 @@
> -#
> -# SPDX-License-Identifier: BSD-2-Clause
> -#
> -# Copyright (c) 2020 Western Digital Corporation or its affiliates.
> -#
> -
> -# Compiler flags
> -platform-cppflags-y =
> -platform-cflags-y =
> -platform-asflags-y =
> -platform-ldflags-y =
> -
> -# Objects to build
> -platform-objs-y += platform.o
> -
> -PLATFORM_RISCV_XLEN = 64
> -
> -# Blobs to build
> -FW_JUMP=n
> -
> -ifeq ($(PLATFORM_RISCV_XLEN), 32)
> - # This needs to be 4MB aligned for 32-bit support
> - FW_JUMP_ADDR=0x80400000
> - else
> - # This needs to be 2MB aligned for 64-bit support
> - FW_JUMP_ADDR=0x80200000
> - endif
> -FW_JUMP_FDT_ADDR=0x82200000
> -
> -# Firmware with payload configuration.
> -FW_PAYLOAD=y
> -
> -ifeq ($(PLATFORM_RISCV_XLEN), 32)
> -# This needs to be 4MB aligned for 32-bit support
> -  FW_PAYLOAD_OFFSET=0x400000
> -else
> -# This needs to be 2MB aligned for 64-bit support
> -  FW_PAYLOAD_OFFSET=0x200000
> -endif
> -FW_PAYLOAD_FDT_ADDR=0x82200000
> -FW_PAYLOAD_ALIGN=0x1000
> diff --git a/platform/generic/Kconfig b/platform/generic/Kconfig
> index a24d6ab2..7559a4bd 100644
> --- a/platform/generic/Kconfig
> +++ b/platform/generic/Kconfig
> @@ -36,6 +36,10 @@ config PLATFORM_ANDES_AE350
>         select ANDES_PMA
>         default n
>
> +config PLATFORM_OPENHWGROUP_OPENPITON
> +       bool "OpenHWGroup Openpiton support"
> +       default n
> +
>  config PLATFORM_RENESAS_RZFIVE
>         bool "Renesas RZ/Five support"
>         select ANDES_PMA
> diff --git a/platform/generic/configs/defconfig b/platform/generic/configs/defconfig
> index c7a6531e..4b93d0bc 100644
> --- a/platform/generic/configs/defconfig
> +++ b/platform/generic/configs/defconfig
> @@ -7,6 +7,7 @@ CONFIG_PLATFORM_SOPHGO_SG2042=y
>  CONFIG_PLATFORM_STARFIVE_JH7110=y
>  CONFIG_PLATFORM_THEAD=y
>  CONFIG_PLATFORM_MIPS_P8700=y
> +CONFIG_PLATFORM_OPENHWGROUP_OPENPITON=y
>  CONFIG_FDT_CPPC=y
>  CONFIG_FDT_CPPC_RPMI=y
>  CONFIG_FDT_GPIO=y
> diff --git a/platform/generic/openhwgroup/objects.mk b/platform/generic/openhwgroup/objects.mk
> new file mode 100644
> index 00000000..ab6ca79d
> --- /dev/null
> +++ b/platform/generic/openhwgroup/objects.mk
> @@ -0,0 +1,8 @@
> +#
> +# SPDX-License-Identifier: BSD-2-Clause
> +#
> +# Copyright (c) 2020 Western Digital Corporation or its affiliates.
> +#
> +
> +carray-platform_override_modules-$(CONFIG_PLATFORM_OPENHWGROUP_OPENPITON) += openhwgroup_openpiton
> +platform-objs-$(CONFIG_PLATFORM_OPENHWGROUP_OPENPITON) += openhwgroup/openpiton.o
> diff --git a/platform/fpga/openpiton/platform.c b/platform/generic/openhwgroup/openpiton.c
> similarity index 82%
> rename from platform/fpga/openpiton/platform.c
> rename to platform/generic/openhwgroup/openpiton.c
> index faa299ce..94567abb 100644
> --- a/platform/fpga/openpiton/platform.c
> +++ b/platform/generic/openhwgroup/openpiton.c
> @@ -3,12 +3,7 @@
>   * Copyright (c) 2020 Western Digital Corporation or its affiliates.
>   */
>
> -#include <sbi/riscv_asm.h>
> -#include <sbi/riscv_encoding.h>
> -#include <sbi/riscv_io.h>
> -#include <sbi/sbi_const.h>
> -#include <sbi/sbi_hart.h>
> -#include <sbi/sbi_platform.h>
> +#include <platform_override.h>
>  #include <sbi_utils/fdt/fdt_helper.h>
>  #include <sbi_utils/fdt/fdt_fixup.h>
>  #include <sbi_utils/ipi/aclint_mswi.h>
> @@ -156,25 +151,23 @@ static int openpiton_timer_init(void)
>         return aclint_mtimer_cold_init(&mtimer, NULL);
>  }
>
> -/*
> - * Platform descriptor.
> - */
> -const struct sbi_platform_operations platform_ops = {
> -       .early_init = openpiton_early_init,
> -       .final_init = openpiton_final_init,
> -       .irqchip_init = openpiton_irqchip_init,
> -       .ipi_init = openpiton_ipi_init,
> -       .timer_init = openpiton_timer_init,
> +static int openhwgroup_openpiton_platform_init(const void *fdt, int nodeoff, const struct fdt_match *match)
> +{
> +       generic_platform_ops.early_init = openpiton_early_init;
> +       generic_platform_ops.timer_init = openpiton_timer_init;
> +       generic_platform_ops.ipi_init = openpiton_ipi_init;
> +       generic_platform_ops.irqchip_init = openpiton_irqchip_init;
> +       generic_platform_ops.final_init = openpiton_final_init;
> +
> +       return 0;
> +}
> +
> +static const struct fdt_match openhwgroup_openpiton_match[] = {
> +       { .compatible = "openpiton,cva6platform" },
> +       { },
>  };
>
> -const struct sbi_platform platform = {
> -       .opensbi_version = OPENSBI_VERSION,
> -       .platform_version = SBI_PLATFORM_VERSION(0x0, 0x01),
> -       .name = "OPENPITON RISC-V",
> -       .features = SBI_PLATFORM_DEFAULT_FEATURES,
> -       .hart_count = OPENPITON_DEFAULT_HART_COUNT,
> -       .hart_stack_size = SBI_PLATFORM_DEFAULT_HART_STACK_SIZE,
> -       .heap_size =
> -               SBI_PLATFORM_DEFAULT_HEAP_SIZE(OPENPITON_DEFAULT_HART_COUNT),
> -       .platform_ops_addr = (unsigned long)&platform_ops
> +const struct fdt_driver openhwgroup_openpiton = {
> +       .match_table = openhwgroup_openpiton_match,
> +       .init = openhwgroup_openpiton_platform_init,
>  };
> --
> 2.34.1
>
>
> --
> opensbi mailing list
> opensbi@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/opensbi

-- 
opensbi mailing list
opensbi@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/opensbi

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v2] platform: openpiton: Move openpiton platform from fpga to generic
  2025-08-26 11:25     ` Anup Patel
@ 2025-08-26 11:42       ` Anup Patel
  0 siblings, 0 replies; 6+ messages in thread
From: Anup Patel @ 2025-08-26 11:42 UTC (permalink / raw)
  To: Manuel Hernández Méndez; +Cc: opensbi

On Tue, Aug 26, 2025 at 4:55 PM Anup Patel <anup@brainfault.org> wrote:
>
> On Wed, Aug 13, 2025 at 5:01 PM Manuel Hernández Méndez
> <maherme.dev@gmail.com> wrote:
> >
> > The OpenPiton framework has a generic PMU that is not used by OpenSBI.
> > Due to OpenSBI’s build system we cannot directly reuse the generic
> > platform functions, so move the OpenPiton platform to generic. Also due
> > to the generic platform is where new features are added.
> >
> > Signed-off-by: Manuel Hernández Méndez <maherme.dev@gmail.com>
>
> Overall, this movement is in right direction. If you already have DT nodes
> for timer, clint, and plic in the OpenPiton FDT passed to OpenSBI then
> generic/openhwgroup/openpiton.c can be further simplified but this can
> be done as separate patch.
>
> Reviewed-by: Anup Patel <anup@brainfault.org>
>
> Applied this patch to the riscv/opensbi repo.

I forgot to mention. I have taken care of generic platform compilation
error for RV32 with this patch and also updated documentation to
reflect the platform movement.

Thanks,
Anup

>
> Thanks,
> Anup
>
> > ---
> >  platform/fpga/openpiton/Kconfig               | 10 -----
> >  platform/fpga/openpiton/configs/defconfig     |  0
> >  platform/fpga/openpiton/objects.mk            | 41 ------------------
> >  platform/generic/Kconfig                      |  4 ++
> >  platform/generic/configs/defconfig            |  1 +
> >  platform/generic/openhwgroup/objects.mk       |  8 ++++
> >  .../openhwgroup/openpiton.c}                  | 43 ++++++++-----------
> >  7 files changed, 31 insertions(+), 76 deletions(-)
> >  delete mode 100644 platform/fpga/openpiton/Kconfig
> >  delete mode 100644 platform/fpga/openpiton/configs/defconfig
> >  delete mode 100644 platform/fpga/openpiton/objects.mk
> >  create mode 100644 platform/generic/openhwgroup/objects.mk
> >  rename platform/{fpga/openpiton/platform.c => generic/openhwgroup/openpiton.c} (82%)
> >
> > diff --git a/platform/fpga/openpiton/Kconfig b/platform/fpga/openpiton/Kconfig
> > deleted file mode 100644
> > index bc9c86ee..00000000
> > --- a/platform/fpga/openpiton/Kconfig
> > +++ /dev/null
> > @@ -1,10 +0,0 @@
> > -# SPDX-License-Identifier: BSD-2-Clause
> > -
> > -config PLATFORM_OPENPITON_FPGA
> > -       bool
> > -       select FDT
> > -       select IPI_MSWI
> > -       select IRQCHIP_PLIC
> > -       select SERIAL_UART8250
> > -       select TIMER_MTIMER
> > -       default y
> > diff --git a/platform/fpga/openpiton/configs/defconfig b/platform/fpga/openpiton/configs/defconfig
> > deleted file mode 100644
> > index e69de29b..00000000
> > diff --git a/platform/fpga/openpiton/objects.mk b/platform/fpga/openpiton/objects.mk
> > deleted file mode 100644
> > index 1a0ce0c7..00000000
> > --- a/platform/fpga/openpiton/objects.mk
> > +++ /dev/null
> > @@ -1,41 +0,0 @@
> > -#
> > -# SPDX-License-Identifier: BSD-2-Clause
> > -#
> > -# Copyright (c) 2020 Western Digital Corporation or its affiliates.
> > -#
> > -
> > -# Compiler flags
> > -platform-cppflags-y =
> > -platform-cflags-y =
> > -platform-asflags-y =
> > -platform-ldflags-y =
> > -
> > -# Objects to build
> > -platform-objs-y += platform.o
> > -
> > -PLATFORM_RISCV_XLEN = 64
> > -
> > -# Blobs to build
> > -FW_JUMP=n
> > -
> > -ifeq ($(PLATFORM_RISCV_XLEN), 32)
> > - # This needs to be 4MB aligned for 32-bit support
> > - FW_JUMP_ADDR=0x80400000
> > - else
> > - # This needs to be 2MB aligned for 64-bit support
> > - FW_JUMP_ADDR=0x80200000
> > - endif
> > -FW_JUMP_FDT_ADDR=0x82200000
> > -
> > -# Firmware with payload configuration.
> > -FW_PAYLOAD=y
> > -
> > -ifeq ($(PLATFORM_RISCV_XLEN), 32)
> > -# This needs to be 4MB aligned for 32-bit support
> > -  FW_PAYLOAD_OFFSET=0x400000
> > -else
> > -# This needs to be 2MB aligned for 64-bit support
> > -  FW_PAYLOAD_OFFSET=0x200000
> > -endif
> > -FW_PAYLOAD_FDT_ADDR=0x82200000
> > -FW_PAYLOAD_ALIGN=0x1000
> > diff --git a/platform/generic/Kconfig b/platform/generic/Kconfig
> > index a24d6ab2..7559a4bd 100644
> > --- a/platform/generic/Kconfig
> > +++ b/platform/generic/Kconfig
> > @@ -36,6 +36,10 @@ config PLATFORM_ANDES_AE350
> >         select ANDES_PMA
> >         default n
> >
> > +config PLATFORM_OPENHWGROUP_OPENPITON
> > +       bool "OpenHWGroup Openpiton support"
> > +       default n
> > +
> >  config PLATFORM_RENESAS_RZFIVE
> >         bool "Renesas RZ/Five support"
> >         select ANDES_PMA
> > diff --git a/platform/generic/configs/defconfig b/platform/generic/configs/defconfig
> > index c7a6531e..4b93d0bc 100644
> > --- a/platform/generic/configs/defconfig
> > +++ b/platform/generic/configs/defconfig
> > @@ -7,6 +7,7 @@ CONFIG_PLATFORM_SOPHGO_SG2042=y
> >  CONFIG_PLATFORM_STARFIVE_JH7110=y
> >  CONFIG_PLATFORM_THEAD=y
> >  CONFIG_PLATFORM_MIPS_P8700=y
> > +CONFIG_PLATFORM_OPENHWGROUP_OPENPITON=y
> >  CONFIG_FDT_CPPC=y
> >  CONFIG_FDT_CPPC_RPMI=y
> >  CONFIG_FDT_GPIO=y
> > diff --git a/platform/generic/openhwgroup/objects.mk b/platform/generic/openhwgroup/objects.mk
> > new file mode 100644
> > index 00000000..ab6ca79d
> > --- /dev/null
> > +++ b/platform/generic/openhwgroup/objects.mk
> > @@ -0,0 +1,8 @@
> > +#
> > +# SPDX-License-Identifier: BSD-2-Clause
> > +#
> > +# Copyright (c) 2020 Western Digital Corporation or its affiliates.
> > +#
> > +
> > +carray-platform_override_modules-$(CONFIG_PLATFORM_OPENHWGROUP_OPENPITON) += openhwgroup_openpiton
> > +platform-objs-$(CONFIG_PLATFORM_OPENHWGROUP_OPENPITON) += openhwgroup/openpiton.o
> > diff --git a/platform/fpga/openpiton/platform.c b/platform/generic/openhwgroup/openpiton.c
> > similarity index 82%
> > rename from platform/fpga/openpiton/platform.c
> > rename to platform/generic/openhwgroup/openpiton.c
> > index faa299ce..94567abb 100644
> > --- a/platform/fpga/openpiton/platform.c
> > +++ b/platform/generic/openhwgroup/openpiton.c
> > @@ -3,12 +3,7 @@
> >   * Copyright (c) 2020 Western Digital Corporation or its affiliates.
> >   */
> >
> > -#include <sbi/riscv_asm.h>
> > -#include <sbi/riscv_encoding.h>
> > -#include <sbi/riscv_io.h>
> > -#include <sbi/sbi_const.h>
> > -#include <sbi/sbi_hart.h>
> > -#include <sbi/sbi_platform.h>
> > +#include <platform_override.h>
> >  #include <sbi_utils/fdt/fdt_helper.h>
> >  #include <sbi_utils/fdt/fdt_fixup.h>
> >  #include <sbi_utils/ipi/aclint_mswi.h>
> > @@ -156,25 +151,23 @@ static int openpiton_timer_init(void)
> >         return aclint_mtimer_cold_init(&mtimer, NULL);
> >  }
> >
> > -/*
> > - * Platform descriptor.
> > - */
> > -const struct sbi_platform_operations platform_ops = {
> > -       .early_init = openpiton_early_init,
> > -       .final_init = openpiton_final_init,
> > -       .irqchip_init = openpiton_irqchip_init,
> > -       .ipi_init = openpiton_ipi_init,
> > -       .timer_init = openpiton_timer_init,
> > +static int openhwgroup_openpiton_platform_init(const void *fdt, int nodeoff, const struct fdt_match *match)
> > +{
> > +       generic_platform_ops.early_init = openpiton_early_init;
> > +       generic_platform_ops.timer_init = openpiton_timer_init;
> > +       generic_platform_ops.ipi_init = openpiton_ipi_init;
> > +       generic_platform_ops.irqchip_init = openpiton_irqchip_init;
> > +       generic_platform_ops.final_init = openpiton_final_init;
> > +
> > +       return 0;
> > +}
> > +
> > +static const struct fdt_match openhwgroup_openpiton_match[] = {
> > +       { .compatible = "openpiton,cva6platform" },
> > +       { },
> >  };
> >
> > -const struct sbi_platform platform = {
> > -       .opensbi_version = OPENSBI_VERSION,
> > -       .platform_version = SBI_PLATFORM_VERSION(0x0, 0x01),
> > -       .name = "OPENPITON RISC-V",
> > -       .features = SBI_PLATFORM_DEFAULT_FEATURES,
> > -       .hart_count = OPENPITON_DEFAULT_HART_COUNT,
> > -       .hart_stack_size = SBI_PLATFORM_DEFAULT_HART_STACK_SIZE,
> > -       .heap_size =
> > -               SBI_PLATFORM_DEFAULT_HEAP_SIZE(OPENPITON_DEFAULT_HART_COUNT),
> > -       .platform_ops_addr = (unsigned long)&platform_ops
> > +const struct fdt_driver openhwgroup_openpiton = {
> > +       .match_table = openhwgroup_openpiton_match,
> > +       .init = openhwgroup_openpiton_platform_init,
> >  };
> > --
> > 2.34.1
> >
> >
> > --
> > opensbi mailing list
> > opensbi@lists.infradead.org
> > http://lists.infradead.org/mailman/listinfo/opensbi

-- 
opensbi mailing list
opensbi@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/opensbi

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2025-08-26 11:49 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-07-21 16:09 [PATCH] platform: openpiton: Add PMU initialization Manuel Hernández Méndez
2025-07-21 18:36 ` Samuel Holland
2025-08-13 10:42   ` [PATCH] platform: openpiton: Move openpiton platform from fpga to generic Manuel Hernández Méndez
2025-08-13 10:47   ` [PATCH v2] " Manuel Hernández Méndez
2025-08-26 11:25     ` Anup Patel
2025-08-26 11:42       ` Anup Patel

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox