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
