[PATCH] platform: Remove kendryte/k210 platform

Anup Patel anup at brainfault.org
Sat May 9 00:37:26 PDT 2026


On Thu, Apr 9, 2026 at 10:23 AM Anup Patel <anup.patel at oss.qualcomm.com> wrote:
>
> The kendryte/k210 platform does not have MMU support in S-mode hence
> only NOMMU kernel which runs in M-mode can be used on this platform.
>
> As of now, there is no clear use-case of supporting OpenSBI for
> kendryte/k210 platform.
>
> Signed-off-by: Anup Patel <anup.patel at oss.qualcomm.com>

Applied this patch to the riscv/opensbi repo.

Thanks,
Anup

> ---
>  README.md                                |   1 -
>  docs/platform/platform.md                |   3 -
>  platform/kendryte/k210/Kconfig           |  10 --
>  platform/kendryte/k210/configs/defconfig |   0
>  platform/kendryte/k210/k210.dts          |  70 ---------
>  platform/kendryte/k210/objects.mk        |  25 ----
>  platform/kendryte/k210/platform.c        | 176 -----------------------
>  platform/kendryte/k210/platform.h        |  50 -------
>  scripts/create-binary-archive.sh         |   1 -
>  9 files changed, 336 deletions(-)
>  delete mode 100644 platform/kendryte/k210/Kconfig
>  delete mode 100644 platform/kendryte/k210/configs/defconfig
>  delete mode 100644 platform/kendryte/k210/k210.dts
>  delete mode 100644 platform/kendryte/k210/objects.mk
>  delete mode 100644 platform/kendryte/k210/platform.c
>  delete mode 100644 platform/kendryte/k210/platform.h
>
> diff --git a/README.md b/README.md
> index fd40be0b..c19bfdde 100644
> --- a/README.md
> +++ b/README.md
> @@ -402,6 +402,5 @@ make I=<install_directory> install_docs
>  [Firmware Documentation]: docs/firmware/fw.md
>  [Domain Support]: docs/domain_support.md
>  [Doxygen manual]: http://www.doxygen.nl/manual/index.html
> -[Kendryte standalone SDK]: https://github.com/kendryte/kendryte-standalone-sdk
>  [third party notices]: ThirdPartyNotices.md
>  [reproducible builds]: https://reproducible-builds.org
> diff --git a/docs/platform/platform.md b/docs/platform/platform.md
> index b77112ff..9e78dac2 100644
> --- a/docs/platform/platform.md
> +++ b/docs/platform/platform.md
> @@ -18,9 +18,6 @@ OpenSBI currently supports the following virtual and hardware platforms:
>    machine. More details on this platform can be found in the file
>    *[sifive_fu540.md]*.
>
> -* **Kendryte K210 SoC**: Platform support for the Kendryte K210 SoC used on
> -  boards such as the Kendryte KD233 or the Sipeed MAIX Dock.
> -
>  * **Andes AE350 SoC**: Platform support for the Andes's SoC (AE350). More
>    details on this platform can be found in the file *[andes-ae350.md]*.
>
> diff --git a/platform/kendryte/k210/Kconfig b/platform/kendryte/k210/Kconfig
> deleted file mode 100644
> index 5bf59731..00000000
> --- a/platform/kendryte/k210/Kconfig
> +++ /dev/null
> @@ -1,10 +0,0 @@
> -# SPDX-License-Identifier: BSD-2-Clause
> -
> -config PLATFORM_KENDRYTE_K210
> -       bool
> -       select FDT
> -       select IPI_MSWI
> -       select IRQCHIP_PLIC
> -       select SERIAL_SIFIVE
> -       select TIMER_MTIMER
> -       default y
> diff --git a/platform/kendryte/k210/configs/defconfig b/platform/kendryte/k210/configs/defconfig
> deleted file mode 100644
> index e69de29b..00000000
> diff --git a/platform/kendryte/k210/k210.dts b/platform/kendryte/k210/k210.dts
> deleted file mode 100644
> index bcd075bf..00000000
> --- a/platform/kendryte/k210/k210.dts
> +++ /dev/null
> @@ -1,70 +0,0 @@
> -/*
> - * SPDX-License-Identifier: BSD-2-Clause
> - *
> - * Copyright (c) 2019 Western Digital Corporation or its affiliates.
> - *
> - * Authors:
> - *   Damien Le Moal <damien.lemoal at wdc.com>
> - */
> -
> -/dts-v1/;
> -/ {
> -       #address-cells = <2>;
> -       #size-cells = <2>;
> -       compatible = "kendryte,k210";
> -
> -       chosen {
> -                bootargs = "console=hvc0 earlycon=sbi";
> -       };
> -
> -       cpus {
> -               #address-cells = <1>;
> -               #size-cells = <0>;
> -               cpu0: cpu at 0 {
> -                       device_type = "cpu";
> -                       clock-frequency = <390000000>;
> -                       i-cache-size = <32768>;
> -                       d-cache-size = <32768>;
> -                       mmu-type = "none";
> -                       reg = <0>;
> -                       riscv,isa = "rv64imafdc";
> -                       status = "okay";
> -                       cpu0_intc: interrupt-controller {
> -                               #interrupt-cells = <1>;
> -                               compatible = "riscv,cpu-intc";
> -                               interrupt-controller;
> -                       };
> -               };
> -               cpu1: cpu at 1 {
> -                       device_type = "cpu";
> -                       clock-frequency = <390000000>;
> -                       d-cache-size = <32768>;
> -                       i-cache-size = <32768>;
> -                       mmu-type = "none";
> -                       reg = <1>;
> -                       riscv,isa = "rv64imafdc";
> -                       status = "okay";
> -                       cpu1_intc: interrupt-controller {
> -                               #interrupt-cells = <1>;
> -                               compatible = "riscv,cpu-intc";
> -                               interrupt-controller;
> -                       };
> -               };
> -       };
> -
> -       memory at 80000000 {
> -               /* Bank 0: 4 MB, Bank 1: 2 MB, AI chip SRAM: 2MB */
> -               device_type = "memory";
> -               reg = <0x00000000 0x80000000 0x00000000 0x00800000>;
> -       };
> -
> -       plic0: interrupt-controller at C000000 {
> -               #interrupt-cells = <1>;
> -               compatible = "riscv,plic0";
> -               interrupt-controller;
> -               interrupts-extended =
> -                       <&cpu0_intc 11 &cpu0_intc 9
> -                        &cpu1_intc 11 &cpu1_intc 9>;
> -               reg = <0x0 0xc000000 0x0 0x4000000>;
> -       };
> -};
> diff --git a/platform/kendryte/k210/objects.mk b/platform/kendryte/k210/objects.mk
> deleted file mode 100644
> index efac3d2f..00000000
> --- a/platform/kendryte/k210/objects.mk
> +++ /dev/null
> @@ -1,25 +0,0 @@
> -#
> -# SPDX-License-Identifier: BSD-2-Clause
> -#
> -# Copyright (c) 2019 Western Digital Corporation or its affiliates.
> -#
> -# Authors:
> -#   Damien Le Moal <damien.lemoal at wdc.com>
> -#
> -
> -# Compiler flags
> -platform-cppflags-y =
> -platform-cflags-y =
> -platform-asflags-y =
> -platform-ldflags-y =
> -
> -# Objects to build
> -platform-objs-y += platform.o
> -
> -platform-objs-y += k210.o
> -platform-varprefix-k210.o = dt_k210
> -platform-padding-k210.o = 2048
> -
> -# Blobs to build
> -FW_PAYLOAD=y
> -FW_PAYLOAD_ALIGN=0x1000
> diff --git a/platform/kendryte/k210/platform.c b/platform/kendryte/k210/platform.c
> deleted file mode 100644
> index 0b76104c..00000000
> --- a/platform/kendryte/k210/platform.c
> +++ /dev/null
> @@ -1,176 +0,0 @@
> -/*
> - * SPDX-License-Identifier: BSD-2-Clause
> - *
> - * Copyright (c) 2019 Western Digital Corporation or its affiliates.
> - *
> - * Authors:
> - *   Damien Le Moal <damien.lemoal at wdc.com>
> - */
> -
> -#include <sbi/riscv_asm.h>
> -#include <sbi/riscv_encoding.h>
> -#include <sbi/sbi_const.h>
> -#include <sbi/sbi_platform.h>
> -#include <sbi/sbi_system.h>
> -#include <sbi_utils/fdt/fdt_helper.h>
> -#include <sbi_utils/fdt/fdt_fixup.h>
> -#include <sbi_utils/ipi/aclint_mswi.h>
> -#include <sbi_utils/irqchip/plic.h>
> -#include <sbi_utils/serial/sifive-uart.h>
> -#include <sbi_utils/timer/aclint_mtimer.h>
> -#include "platform.h"
> -
> -extern const char dt_k210_start[];
> -
> -unsigned long fw_platform_init(unsigned long arg0, unsigned long arg1,
> -                               unsigned long arg2, unsigned long arg3,
> -                               unsigned long arg4)
> -{
> -       return (unsigned long)&dt_k210_start[0];
> -}
> -
> -static struct plic_data plic = {
> -       .unique_id = 0,
> -       .addr = K210_PLIC_BASE_ADDR,
> -       .size = K210_PLIC_BASE_SIZE,
> -       .num_src = K210_PLIC_NUM_SOURCES,
> -       .context_map = {
> -               [0] = { 0, 1 },
> -               [1] = { 2, 3 },
> -       },
> -};
> -
> -static struct aclint_mswi_data mswi = {
> -       .addr = K210_ACLINT_MSWI_ADDR,
> -       .size = ACLINT_MSWI_SIZE,
> -       .first_hartid = 0,
> -       .hart_count = K210_HART_COUNT,
> -};
> -
> -static struct aclint_mtimer_data mtimer = {
> -       .mtime_freq = K210_ACLINT_MTIMER_FREQ,
> -       .mtime_addr = K210_ACLINT_MTIMER_ADDR +
> -                     ACLINT_DEFAULT_MTIME_OFFSET,
> -       .mtime_size = ACLINT_DEFAULT_MTIME_SIZE,
> -       .mtimecmp_addr = K210_ACLINT_MTIMER_ADDR +
> -                        ACLINT_DEFAULT_MTIMECMP_OFFSET,
> -       .mtimecmp_size = ACLINT_DEFAULT_MTIMECMP_SIZE,
> -       .first_hartid = 0,
> -       .hart_count = K210_HART_COUNT,
> -       .has_64bit_mmio = true,
> -};
> -
> -static u32 k210_get_clk_freq(void)
> -{
> -       u32 clksel0, pll0;
> -       u64 pll0_freq, clkr0, clkf0, clkod0, div;
> -
> -       /*
> -        * If the clock selector is not set, use the base frequency.
> -        * Otherwise, use PLL0 frequency with a frequency divisor.
> -        */
> -       clksel0 = k210_read_sysreg(K210_CLKSEL0);
> -       if (!(clksel0 & 0x1))
> -               return K210_CLK0_FREQ;
> -
> -       /*
> -        * Get PLL0 frequency:
> -        * freq = base frequency * clkf0 / (clkr0 * clkod0)
> -        */
> -       pll0 = k210_read_sysreg(K210_PLL0);
> -       clkr0 = 1 + (pll0 & 0x0000000f);
> -       clkf0 = 1 + ((pll0 & 0x000003f0) >> 4);
> -       clkod0 = 1 + ((pll0 & 0x00003c00) >> 10);
> -       pll0_freq = clkf0 * K210_CLK0_FREQ / (clkr0 * clkod0);
> -
> -       /* Get the frequency divisor from the clock selector */
> -       div = 2ULL << ((clksel0 & 0x00000006) >> 1);
> -
> -       return pll0_freq / div;
> -}
> -
> -static int k210_system_reset_check(u32 type, u32 reason)
> -{
> -       return 1;
> -}
> -
> -static void k210_system_reset(u32 type, u32 reason)
> -{
> -       u32 val;
> -
> -       val = k210_read_sysreg(K210_RESET);
> -       val |= K210_RESET_MASK;
> -       k210_write_sysreg(val, K210_RESET);
> -
> -       while (1);
> -}
> -
> -static struct sbi_system_reset_device k210_reset = {
> -       .name = "kendryte_k210_reset",
> -       .system_reset_check = k210_system_reset_check,
> -       .system_reset = k210_system_reset
> -};
> -
> -static int k210_early_init(bool cold_boot)
> -{
> -       int rc;
> -
> -       if (!cold_boot)
> -               return 0;
> -
> -       sbi_system_reset_add_device(&k210_reset);
> -
> -       rc = sifive_uart_init(K210_UART_BASE_ADDR, k210_get_clk_freq(),
> -                             K210_UART_BAUDRATE);
> -       if (rc)
> -               return rc;
> -
> -       return aclint_mswi_cold_init(&mswi);
> -}
> -
> -static int k210_final_init(bool cold_boot)
> -{
> -       void *fdt;
> -
> -       if (!cold_boot)
> -               return 0;
> -
> -       fdt = fdt_get_address_rw();
> -
> -       fdt_cpu_fixup(fdt);
> -       fdt_fixups(fdt);
> -
> -       return 0;
> -}
> -
> -static int k210_irqchip_init(void)
> -{
> -       return plic_cold_irqchip_init(&plic);
> -}
> -
> -static int k210_timer_init(void)
> -{
> -       return aclint_mtimer_cold_init(&mtimer, NULL);
> -}
> -
> -const struct sbi_platform_operations platform_ops = {
> -       .early_init     = k210_early_init,
> -
> -       .final_init     = k210_final_init,
> -
> -       .irqchip_init = k210_irqchip_init,
> -
> -       .timer_init        = k210_timer_init,
> -};
> -
> -const struct sbi_platform platform = {
> -       .opensbi_version        = OPENSBI_VERSION,
> -       .platform_version       = SBI_PLATFORM_VERSION(0x0, 0x01),
> -       .name                   = "Kendryte K210",
> -       .features               = 0,
> -       .hart_count             = K210_HART_COUNT,
> -       .hart_stack_size        = SBI_PLATFORM_DEFAULT_HART_STACK_SIZE,
> -       .heap_size              =
> -                       SBI_PLATFORM_DEFAULT_HEAP_SIZE(K210_HART_COUNT),
> -       .platform_ops_addr      = (unsigned long)&platform_ops
> -};
> diff --git a/platform/kendryte/k210/platform.h b/platform/kendryte/k210/platform.h
> deleted file mode 100644
> index 9417403d..00000000
> --- a/platform/kendryte/k210/platform.h
> +++ /dev/null
> @@ -1,50 +0,0 @@
> -/*
> - * SPDX-License-Identifier: BSD-2-Clause
> - *
> - * Copyright (c) 2019 Western Digital Corporation or its affiliates.
> - *
> - * Authors:
> - *   Damien Le Moal <damien.lemoal at wdc.com>
> - */
> -#ifndef _K210_PLATFORM_H_
> -#define _K210_PLATFORM_H_
> -
> -#include <sbi/riscv_io.h>
> -
> -#define K210_HART_COUNT                2
> -
> -#define K210_UART_BAUDRATE     115200
> -#define K210_ACLINT_MTIMER_FREQ        7800000
> -#define K210_CLK0_FREQ         26000000UL
> -#define K210_PLIC_NUM_SOURCES  65
> -
> -/* Registers base address */
> -#define K210_SYSCTL_BASE_ADDR  0x50440000ULL
> -#define K210_UART_BASE_ADDR    0x38000000ULL
> -#define K210_CLINT_BASE_ADDR   0x02000000ULL
> -#define K210_ACLINT_MSWI_ADDR  \
> -               (K210_CLINT_BASE_ADDR + CLINT_MSWI_OFFSET)
> -#define K210_ACLINT_MTIMER_ADDR \
> -               (K210_CLINT_BASE_ADDR + CLINT_MTIMER_OFFSET)
> -#define K210_PLIC_BASE_ADDR    0x0C000000ULL
> -#define K210_PLIC_BASE_SIZE    (0x200000ULL + (K210_HART_COUNT * 0x1000))
> -
> -/* Registers */
> -#define K210_PLL0              0x08
> -#define K210_CLKSEL0           0x20
> -#define K210_RESET             0x30
> -
> -/* Register bit masks */
> -#define K210_RESET_MASK                0x01
> -
> -static inline u32 k210_read_sysreg(u32 reg)
> -{
> -       return readl((volatile void *)(K210_SYSCTL_BASE_ADDR + reg));
> -}
> -
> -static inline void k210_write_sysreg(u32 val, u32 reg)
> -{
> -       writel(val, (volatile void *)(K210_SYSCTL_BASE_ADDR + reg));
> -}
> -
> -#endif /* _K210_PLATFORM_H_ */
> diff --git a/scripts/create-binary-archive.sh b/scripts/create-binary-archive.sh
> index 6ea4c9c5..7f211788 100755
> --- a/scripts/create-binary-archive.sh
> +++ b/scripts/create-binary-archive.sh
> @@ -100,7 +100,6 @@ build_opensbi() {
>         64)
>                 # Setup 64-bit platform list
>                 BUILD_PLATFORM_SUBDIR+=("nuclei/ux600")
> -               BUILD_PLATFORM_SUBDIR+=("kendryte/k210")
>                 BUILD_PLATFORM_SUBDIR+=("generic")
>                 ;;
>         *)
> --
> 2.43.0
>



More information about the opensbi mailing list