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

Anup Patel anup at brainfault.org
Tue Aug 26 04:25:09 PDT 2025


On Wed, Aug 13, 2025 at 5:01 PM Manuel Hernández Méndez
<maherme.dev at 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 at 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 at 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 at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/opensbi



More information about the opensbi mailing list