This adds basic support for the Khadas VIM1S [1]. I have tested the
following features when booting from the SD card:

- Distro boot
- SD card
- Ethernet (tested with TFTP)
- GPIO/ADC Buttons [*]
- RTC [*]

Features marked with [*] require v7.2 of dts/upstream. The following
features do not work:

- The eMMC scans properly but I can only read zeros. I've never seen
  this kind of failure before.
- The PWM LED does not seem to work [2].
- USB is not currently supported in upstream Linux, but I do have some
  patches for it locally (adapted from Khadas's tree). I will try to
  submit these at some point.
- I have made no attempt to get HDMI working.

I have submitted the stdout fix upstream as [3].

[1] https://www.khadas.com/vim1s
[2] https://lore.kernel.org/u-boot/[email protected]
[3] 
https://lore.kernel.org/linux-arm-kernel/[email protected]/

Signed-off-by: Sean Anderson <[email protected]>
---

Changes in v2:
- Use our own board instead of reusing q200
- Enable more peripherals (buttons, LEDs, etc.)
- Use defaults where possible (commands, distro boot, etc.)
- Set mac address the same way Khadas does
- Set config/stdout-path so we can find the serial

 .../meson-s4-s905y4-khadas-vim1s-u-boot.dtsi  |  5 ++
 board/amlogic/vim1s/MAINTAINERS               |  7 ++
 board/amlogic/vim1s/Makefile                  |  1 +
 board/amlogic/vim1s/vim1s.c                   | 26 ++++++++
 configs/khadas-vim1s_defconfig                | 66 +++++++++++++++++++
 5 files changed, 105 insertions(+)
 create mode 100644 arch/arm/dts/meson-s4-s905y4-khadas-vim1s-u-boot.dtsi
 create mode 100644 board/amlogic/vim1s/MAINTAINERS
 create mode 100644 board/amlogic/vim1s/Makefile
 create mode 100644 board/amlogic/vim1s/vim1s.c
 create mode 100644 configs/khadas-vim1s_defconfig

diff --git a/arch/arm/dts/meson-s4-s905y4-khadas-vim1s-u-boot.dtsi 
b/arch/arm/dts/meson-s4-s905y4-khadas-vim1s-u-boot.dtsi
new file mode 100644
index 00000000000..9dcc9391eae
--- /dev/null
+++ b/arch/arm/dts/meson-s4-s905y4-khadas-vim1s-u-boot.dtsi
@@ -0,0 +1,5 @@
+/ {
+       chosen {
+               stdout-path = "serial0:921600n8";
+       };
+};
diff --git a/board/amlogic/vim1s/MAINTAINERS b/board/amlogic/vim1s/MAINTAINERS
new file mode 100644
index 00000000000..f774f348e69
--- /dev/null
+++ b/board/amlogic/vim1s/MAINTAINERS
@@ -0,0 +1,7 @@
+VIM1S
+M:     Neil Armstrong <[email protected]>
+R:     Sean Anderson <[email protected]>
+S:     Maintained
+L:     [email protected]
+F:     board/amlogic/vim1s/
+F:     configs/khadas-vim1s_defconfig
diff --git a/board/amlogic/vim1s/Makefile b/board/amlogic/vim1s/Makefile
new file mode 100644
index 00000000000..bc4b9dad861
--- /dev/null
+++ b/board/amlogic/vim1s/Makefile
@@ -0,0 +1 @@
+obj-y := vim1s.o
diff --git a/board/amlogic/vim1s/vim1s.c b/board/amlogic/vim1s/vim1s.c
new file mode 100644
index 00000000000..d58f3b6299d
--- /dev/null
+++ b/board/amlogic/vim1s/vim1s.c
@@ -0,0 +1,26 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (C) 2026 Brivo Inc.
+ */
+
+#include <env.h>
+#include <net-common.h>
+#include <asm/io.h>
+
+#define SYSCTRL_SEC_STATUS_REG18       0xfe010348
+
+int misc_init_r(void)
+{
+       /* This procedure copied from Khadas's downstream fork */
+       u32 val = readl(SYSCTRL_SEC_STATUS_REG18);
+       unsigned char addr[ARP_HLEN] = {
+               0x02,
+               0xad,
+               val >> 24,
+               0x01,
+               (val >> 8) & 0xff,
+               val & 0xff,
+       };
+
+       return eth_env_set_enetaddr("ethaddr", addr);
+}
diff --git a/configs/khadas-vim1s_defconfig b/configs/khadas-vim1s_defconfig
new file mode 100644
index 00000000000..af9d14644e0
--- /dev/null
+++ b/configs/khadas-vim1s_defconfig
@@ -0,0 +1,66 @@
+CONFIG_ARM=y
+CONFIG_SYS_BOARD="vim1s"
+CONFIG_ARCH_MESON=y
+CONFIG_TEXT_BASE=0x0
+CONFIG_SYS_MALLOC_LEN=0x8000000
+CONFIG_NR_DRAM_BANKS=1
+CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y
+CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x00200000
+CONFIG_ENV_SIZE=0x10000
+CONFIG_DM_GPIO=y
+CONFIG_DEFAULT_DEVICE_TREE="amlogic/meson-s4-s905y4-khadas-vim1s"
+CONFIG_OF_LIBFDT_OVERLAY=y
+CONFIG_DM_RESET=y
+CONFIG_MESON_S4=y
+CONFIG_SYS_LOAD_ADDR=0x20000000
+CONFIG_IDENT_STRING=" vim1s"
+CONFIG_REMAKE_ELF=y
+CONFIG_FIT=y
+CONFIG_FIT_SIGNATURE=y
+CONFIG_FIT_VERBOSE=y
+CONFIG_OF_BOARD_SETUP=y
+# CONFIG_DISPLAY_CPUINFO is not set
+CONFIG_MISC_INIT_R=y
+CONFIG_SYS_MAXARGS=32
+CONFIG_CMD_ADC=y
+CONFIG_CMD_CLK=y
+CONFIG_CMD_GPIO=y
+CONFIG_CMD_PWM=y
+CONFIG_CMD_GPT=y
+CONFIG_CMD_I2C=y
+CONFIG_CMD_MMC=y
+CONFIG_CMD_WDT=y
+CONFIG_CMD_RTC=y
+CONFIG_OF_CONTROL=y
+CONFIG_OF_UPSTREAM=y
+CONFIG_SARADC_MESON=y
+CONFIG_BUTTON=y
+CONFIG_BUTTON_ADC=y
+CONFIG_BUTTON_GPIO=y
+CONFIG_DM_I2C=y
+CONFIG_I2C_SET_DEFAULT_BUS_NUM=y
+CONFIG_SYS_I2C_MESON=y
+CONFIG_LED=y
+CONFIG_LED_PWM=y
+CONFIG_MMC_MESON_GX=y
+CONFIG_DM_MDIO=y
+CONFIG_DM_MDIO_MUX=y
+CONFIG_DM_ETH_PHY=y
+CONFIG_ETH_DESIGNWARE_MESON8B=y
+CONFIG_MDIO_MUX_MESON_G12A=y
+CONFIG_PHY_MESON_GXL=y
+CONFIG_PINCTRL=y
+CONFIG_PINCTRL_MESON_S4=y
+CONFIG_DM_REGULATOR=y
+CONFIG_REGULATOR_PWM=y
+CONFIG_DM_REGULATOR_FIXED=y
+CONFIG_DM_REGULATOR_GPIO=y
+CONFIG_DM_PWM=y
+CONFIG_PWM_MESON=y
+CONFIG_DM_RTC=y
+CONFIG_RTC_PCF8563=y
+CONFIG_BAUDRATE=888888
+CONFIG_MESON_SERIAL=y
+CONFIG_WDT=y
+CONFIG_WDT_MESON_GXBB=y
+# CONFIG_TOOLS_MKEFICAPSULE is not set
-- 
2.53.0

Reply via email to