Skip to contentSkip to conversation

platform: openpiton: Add PMU initialization

PATCH In review Manuel Hernández Méndez 3 participants 6 messages Jul 21, 2025 – Aug 26, 2025

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 platform: openpiton: Add PMU initialization

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.

---
 platform/fpga/openpiton/platform.c | 39 ++++++++++++++++++++++++++++++
 1 file changed, 39 insertions(+)
platform/fpga/openpiton/platform.c +39 -0
index d2cf3e32..08136859 100644
@@ -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 = {
Signature · 7 lines
2.34.1


-- 
opensbi mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/opensbi
#1 lore raw

Hi,

Quoted 3 lines · 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.

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.

Quoted 19 lines
---
 platform/fpga/openpiton/platform.c | 39 ++++++++++++++++++++++++++++++
 1 file changed, 39 insertions(+)
platform/fpga/openpiton/platform.c +1 -0
index d2cf3e32..08136859 100644
@@ -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);

platform/fpga/openpiton/platform.c static int openpiton_timer_init(void) · line 167

Quoted 10 lines
platform/fpga/openpiton/platform.c +8 -0
 }
 
+/*
+ * 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

Quoted 40 lines
platform/fpga/openpiton/platform.c +30 -0
+	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 = {
Signature · 3 lines
opensbi mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/opensbi
#2 lore raw

PATCH 1/1 platform: openpiton: Move openpiton platform from fpga to generic

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.

---
 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%)
platform/fpga/openpiton/Kconfig deleted +0 -10
deleted file mode 100644
index bc9c86ee..00000000
@@ -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
platform/fpga/openpiton/configs/defconfig deleted +0 -0
deleted file mode 100644
index e69de29b..00000000
platform/fpga/openpiton/objects.mk deleted +0 -41

41 lines not on this page · raw message

platform/generic/Kconfig +4 -0
index a24d6ab2..7559a4bd 100644
@@ -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
platform/generic/configs/defconfig +1 -0
index c7a6531e..4b93d0bc 100644
@@ -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
platform/generic/openhwgroup/objects.mk new file +8 -0
new file mode 100644
index 00000000..ab6ca79d
@@ -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
platform/generic/openhwgroup/openpiton.c renamed from platform/fpga/openpiton/platform.c +23 -25

60 lines not on this page · raw message

Signature · 7 lines
2.34.1


-- 
opensbi mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/opensbi
#3 lore raw

PATCH v2 1/1 platform: openpiton: Move openpiton platform from fpga to generic

In reply to Samuel Holland

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.

---
 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%)
platform/fpga/openpiton/Kconfig deleted +0 -10
deleted file mode 100644
index bc9c86ee..00000000
@@ -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
platform/fpga/openpiton/configs/defconfig deleted +0 -0
deleted file mode 100644
index e69de29b..00000000
platform/fpga/openpiton/objects.mk deleted +0 -41

41 lines not on this page · raw message

platform/generic/Kconfig +4 -0
index a24d6ab2..7559a4bd 100644
@@ -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
platform/generic/configs/defconfig +1 -0
index c7a6531e..4b93d0bc 100644
@@ -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
platform/generic/openhwgroup/objects.mk new file +8 -0
new file mode 100644
index 00000000..ab6ca79d
@@ -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
platform/generic/openhwgroup/openpiton.c renamed from platform/fpga/openpiton/platform.c +18 -25

55 lines not on this page · raw message

Signature · 7 lines
2.34.1


-- 
opensbi mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/opensbi
Reviewed-by on v2 1/1 Applied
#4 lore raw

Re: [PATCH v2] platform: openpiton: Move openpiton platform from fpga to generic

Quoted 7 lines · 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.

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.

Applied this patch to the riscv/opensbi repo.

Thanks,
Anup

Quoted 194 lines
---
 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%)
platform/fpga/openpiton/Kconfig deleted +0 -10
deleted file mode 100644
index bc9c86ee..00000000
@@ -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
platform/fpga/openpiton/configs/defconfig deleted +0 -0
deleted file mode 100644
index e69de29b..00000000
platform/fpga/openpiton/objects.mk deleted +0 -41
deleted file mode 100644
index 1a0ce0c7..00000000
@@ -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
platform/generic/Kconfig +4 -0
index a24d6ab2..7559a4bd 100644
@@ -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
platform/generic/configs/defconfig +1 -0
index c7a6531e..4b93d0bc 100644
@@ -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
platform/generic/openhwgroup/objects.mk new file +8 -0
new file mode 100644
index 00000000..ab6ca79d
@@ -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
platform/generic/openhwgroup/openpiton.c renamed from platform/fpga/openpiton/platform.c +18 -26
similarity index 82%
rename from platform/fpga/openpiton/platform.c
rename to platform/generic/openhwgroup/openpiton.c
index faa299ce..94567abb 100644
@@ -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
[email protected]
http://lists.infradead.org/mailman/listinfo/opensbi

Signature · 3 lines
opensbi mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/opensbi
#5 lore raw

Re: [PATCH v2] platform: openpiton: Move openpiton platform from fpga to generic

Quoted 11 lines · Anup Patel
Quoted 7 lines · 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.

Quoted 8 lines

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.

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

Quoted 198 lines

Thanks,
Anup

Quoted 194 lines
---
 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%)
platform/fpga/openpiton/Kconfig deleted +0 -10
deleted file mode 100644
index bc9c86ee..00000000
@@ -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
platform/fpga/openpiton/configs/defconfig deleted +0 -0
deleted file mode 100644
index e69de29b..00000000
platform/fpga/openpiton/objects.mk deleted +0 -41
deleted file mode 100644
index 1a0ce0c7..00000000
@@ -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
platform/generic/Kconfig +4 -0
index a24d6ab2..7559a4bd 100644
@@ -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
platform/generic/configs/defconfig +1 -0
index c7a6531e..4b93d0bc 100644
@@ -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
platform/generic/openhwgroup/objects.mk new file +8 -0
new file mode 100644
index 00000000..ab6ca79d
@@ -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
platform/generic/openhwgroup/openpiton.c renamed from platform/fpga/openpiton/platform.c +18 -26
similarity index 82%
rename from platform/fpga/openpiton/platform.c
rename to platform/generic/openhwgroup/openpiton.c
index faa299ce..94567abb 100644
@@ -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
[email protected]
http://lists.infradead.org/mailman/listinfo/opensbi

Signature · 3 lines
opensbi mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/opensbi