* [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