From 2216a64aeb711bf755850181b7b455971ee9f089 Mon Sep 17 00:00:00 2001 From: Muhammed Efe Cetin Date: Sat, 15 Aug 2026 21:06:47 +0200 Subject: [PATCH 1/2] board: unifiy NanoPi R6S, R6C and M6 boards at single image --- config/boards/nanopi-m6.conf | 95 ---- config/boards/nanopi-r6c.csc | 121 ----- config/boards/nanopi-r6s.conf | 121 ----- config/boards/nanopi6-series.conf | 100 ++++ .../defconfig/nanopi-m6-rk3588s_defconfig | 92 ---- .../defconfig/nanopi-m6-spi-rk3588s_defconfig | 97 ---- ...ase-PCIe-LTSSM-timeout-for-cold-boot.patch | 12 +- ...-before-dm-as-spl_board_init-works-l.patch | 39 ++ ...d-common-nanopi6-series-board-config.patch | 444 ++++++++++++++++++ .../rk3588s-nanopi-m6-spi-u-boot.dtsi | 0 .../dt_uboot/rk3588s-nanopi-m6-u-boot.dtsi | 0 .../rk3588s-nanopi-m6-spi.dts | 0 .../rk3588s-nanopi-m6.dts | 0 ...general-fix-btrfs-zstd-decompression.patch | 30 +- ...i-nor-Add-support-for-Zbit-ZB25LQ128.patch | 8 +- 15 files changed, 612 insertions(+), 547 deletions(-) delete mode 100644 config/boards/nanopi-m6.conf delete mode 100644 config/boards/nanopi-r6c.csc delete mode 100644 config/boards/nanopi-r6s.conf create mode 100644 config/boards/nanopi6-series.conf delete mode 100644 patch/u-boot/v2025.10/defconfig/nanopi-m6-rk3588s_defconfig delete mode 100644 patch/u-boot/v2025.10/defconfig/nanopi-m6-spi-rk3588s_defconfig create mode 100644 patch/u-boot/v2026.07/board_nanopi6-series/0001-allow-fdt-fixups-before-dm-as-spl_board_init-works-l.patch create mode 100644 patch/u-boot/v2026.07/board_nanopi6-series/0002-add-common-nanopi6-series-board-config.patch rename patch/u-boot/{v2025.10 => v2026.07}/dt_uboot/rk3588s-nanopi-m6-spi-u-boot.dtsi (100%) rename patch/u-boot/{v2025.10 => v2026.07}/dt_uboot/rk3588s-nanopi-m6-u-boot.dtsi (100%) rename patch/u-boot/{v2025.10 => v2026.07}/dt_upstream_rockchip/rk3588s-nanopi-m6-spi.dts (100%) rename patch/u-boot/{v2025.10 => v2026.07}/dt_upstream_rockchip/rk3588s-nanopi-m6.dts (100%) diff --git a/config/boards/nanopi-m6.conf b/config/boards/nanopi-m6.conf deleted file mode 100644 index a23e9da173fe..000000000000 --- a/config/boards/nanopi-m6.conf +++ /dev/null @@ -1,95 +0,0 @@ -# Rockchip RK3588S octa core 8GB RAM SoC eMMC USB3 USB2 1x GbE 1x M2-E 1x M2-M -BOARD_NAME="NanoPi M6" -BOARD_VENDOR="friendlyelec" -BOARDFAMILY="rockchip-rk3588" -BOARD_MAINTAINER="efectn" -INTRODUCED="2024" -BOOTCONFIG="nanopi-m6-rk3588s_defconfig" # vendor name, not standard, see hook below, set BOOT_SOC below to compensate -BOOT_SOC="rk3588" -KERNEL_TARGET="current,edge,vendor" -KERNEL_TEST_TARGET="vendor,current" -FULL_DESKTOP="yes" -BOOT_LOGO="desktop" -IMAGE_PARTITION_TABLE="gpt" -BOOT_FDT_FILE="rockchip/rk3588s-nanopi-m6.dtb" -BOOT_SCENARIO="spl-blobs" -BOOT_SUPPORT_SPI="yes" -BOOT_SPI_RKSPI_LOADER="yes" - -DEFAULT_OVERLAYS="nanopi-m6-display-dsi1-yx35" # Enable YX35 LCD - -function post_family_tweaks__nanopim6_naming_udev_audios() { - display_alert "$BOARD" "Renaming NanoPi M6 HDMI audio" "info" - - mkdir -p $SDCARD/etc/udev/rules.d/ - - cat <<- EOF > $SDCARD/etc/udev/rules.d/90-naming-audios.rules - SUBSYSTEM=="sound", ENV{ID_PATH}=="platform-hdmi0-sound", ENV{SOUND_DESCRIPTION}="HDMI0 Audio" - EOF -} - -function post_family_tweaks__nanopim6_naming_udev_network_interfaces() { - display_alert "$BOARD" "Renaming NanoPi M6 network interface to LAN" "info" - - mkdir -p $SDCARD/etc/udev/rules.d/ - cat <<- EOF > "${SDCARD}/etc/udev/rules.d/70-persistent-net.rules" - SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", KERNELS=="fe1c0000.ethernet", NAME:="lan" - EOF -} - -function pre_config_uboot_target__nanopi_m6_patch_uboot_bootconfig_hack_for_spi() { - display_alert "u-boot for ${BOARD}" "u-boot: hack bootconfig for spi image" "info" - - if [[ $target_make == *"nanopi-m6-spi-rk3588s_defconfig"* ]]; then - BOOTCONFIG="nanopi-m6-spi-rk3588s_defconfig" - target_make=${target_make/nanopi-m6-spi-rk3588s_defconfig/} - else - BOOTCONFIG="nanopi-m6-rk3588s_defconfig" - target_make=${target_make/nanopi-m6-rk3588s_defconfig/} - fi -} - -function post_config_uboot_target__nanopi_m6_keep_spi_bootconfig() { - display_alert "u-boot for ${BOARD}" "u-boot: hack bootconfig for spi image" "info" - - if [[ $BOOTCONFIG == "nanopi-m6-spi-rk3588s_defconfig" ]]; then - cp .config ${uboottempdir}/.config.spi - fi -} - -function pre_package_uboot_image__nanopi_m6_copy_spiconfig_to_package() { - if [[ -f "${uboottempdir}/.config.spi" ]]; then - run_host_command_logged cp ${uboottempdir}/.config.spi "$uboottempdir/usr/lib/u-boot/nanopi-m6-spi-rk3588s_defconfig" - run_host_command_logged rm ${uboottempdir}/.config.spi - fi -} - -function post_family_config__nanopi_m6_use_mainline_uboot() { - display_alert "$BOARD" "Mainline U-Boot overrides for $BOARD - $BRANCH" "info" - - declare -g BOOTCONFIG="nanopi-m6-rk3588s_defconfig" - declare -g BOOTCONFIG_SPI="nanopi-m6-spi-rk3588s_defconfig" - declare -g BOOTDELAY=1 - declare -g BOOTSOURCE="https://github.com/u-boot/u-boot.git" - declare -g BOOTBRANCH="tag:v2025.10" - declare -g BOOTPATCHDIR="v2025.10" - declare -g BOOTDIR="u-boot-${BOARD}" - declare -g UBOOT_TARGET_MAP="BL31=${RKBIN_DIR}/${BL31_BLOB} ROCKCHIP_TPL=${RKBIN_DIR}/${DDR_BLOB} $BOOTCONFIG_SPI;;u-boot-rockchip-spi.bin - BL31=${RKBIN_DIR}/${BL31_BLOB} ROCKCHIP_TPL=${RKBIN_DIR}/${DDR_BLOB} $BOOTCONFIG;;u-boot-rockchip.bin" - unset uboot_custom_postprocess # disable stuff from rockchip64_common; we're using binman here which does all the work already -} - -function pre_config_uboot_target__nanopi_m6_patch_rockchip_common_boot_order() { - declare -a rockchip_uboot_targets=("mmc1" "nvme" "mmc0" "scsi" "usb" "pxe" "dhcp" "spi") - local efi_mgr_file="boot/bootmeth_efi_mgr.c" - - display_alert "u-boot for ${BOARD}/${BRANCH}" "u-boot: adjust boot targets and bootmeths" "info" - sed -i -e "s/#define BOOT_TARGETS.*/#define BOOT_TARGETS \"${rockchip_uboot_targets[*]}\"/" include/configs/rockchip-common.h - - if [[ -f "${efi_mgr_file}" ]]; then - sed -i 's/plat->flags = BOOTMETHF_GLOBAL;/plat->flags = 0;/g' "${efi_mgr_file}" - display_alert "u-boot" "Patched ${efi_mgr_file} successfully" "info" - else - display_alert "u-boot" "File ${efi_mgr_file} not found!" "warning" - fi -} diff --git a/config/boards/nanopi-r6c.csc b/config/boards/nanopi-r6c.csc deleted file mode 100644 index 786d2578f0aa..000000000000 --- a/config/boards/nanopi-r6c.csc +++ /dev/null @@ -1,121 +0,0 @@ -# Rockchip RK3588S octa core 8GB RAM SoC eMMC 1x NVMe 1x USB3 1x USB2 1x 2.5GbE 1x GbE -BOARD_NAME="NanoPi R6C" -BOARD_VENDOR="friendlyelec" -BOARDFAMILY="rockchip-rk3588" -BOARD_MAINTAINER="ColorfulRhino" -INTRODUCED="2023" -BOOTCONFIG="nanopi-r6c-rk3588s_defconfig" # Mainline defconfig, enables booting from NVMe -BOOT_SOC="rk3588" -KERNEL_TARGET="current,edge,vendor" -FULL_DESKTOP="yes" -BOOT_LOGO="desktop" -IMAGE_PARTITION_TABLE="gpt" -BOOT_FDT_FILE="rockchip/rk3588s-nanopi-r6c.dtb" -BOOT_SCENARIO="spl-blobs" -declare -g UEFI_EDK2_BOARD_ID="nanopi-r6c" # This _only_ used for uefi-edk2-rk3588 extension - -function post_family_tweaks__nanopi_r6c_naming_audios() { - display_alert "$BOARD" "Renaming NanoPi R6C HDMI audio interface to human-readable form" "info" - - mkdir -p $SDCARD/etc/udev/rules.d/ - cat <<- EOF > $SDCARD/etc/udev/rules.d/90-naming-audios.rules - SUBSYSTEM=="sound", ENV{ID_PATH}=="platform-hdmi0-sound", ENV{SOUND_DESCRIPTION}="HDMI0 Audio"' - EOF -} - -function post_family_tweaks__nanopi_r6c_naming_udev_network_interfaces() { - display_alert "$BOARD" "Renaming NanoPi R6C network interfaces to 'wan1' and 'lan1'" "info" - - mkdir -p $SDCARD/etc/udev/rules.d/ - cat <<- EOF > "${SDCARD}/etc/udev/rules.d/70-persistent-net.rules" - SUBSYSTEM=="net", ACTION=="add", KERNELS=="fe1c0000.ethernet", NAME:="wan1" - SUBSYSTEM=="net", ACTION=="add", KERNELS=="0003:31:00.0", NAME:="lan1" - EOF -} - -# Mainline U-Boot -function post_family_config__nanopi_r6c_use_mainline_uboot() { - display_alert "$BOARD" "Using mainline U-Boot for $BOARD / $BRANCH" "info" - - declare -g BOOTDELAY=1 # Wait for UART interrupt to enter UMS/RockUSB mode etc - declare -g BOOTSOURCE="https://github.com/u-boot/u-boot.git" # We ❤️ Mainline U-Boot - declare -g BOOTBRANCH="tag:v2026.01" - declare -g BOOTPATCHDIR="v2026.01" - declare -g BOOTDIR="u-boot-${BOARD}" # do not share u-boot directory - declare -g UBOOT_TARGET_MAP="BL31=${RKBIN_DIR}/${BL31_BLOB} ROCKCHIP_TPL=${RKBIN_DIR}/${DDR_BLOB};;u-boot-rockchip.bin" - unset uboot_custom_postprocess write_uboot_platform write_uboot_platform_mtd # disable stuff from rockchip64_common; we're using binman here which does all the work already - - # Just use the binman-provided u-boot-rockchip.bin, which is ready-to-go - function write_uboot_platform() { - dd "if=$1/u-boot-rockchip.bin" "of=$2" bs=32k seek=1 conv=notrunc status=none - } -} - -function pre_config_uboot_target__r6c_patch_uboot_dtsi_for_ums() { - display_alert "u-boot for ${BOARD}" "u-boot: add to u-boot dtsi for UMS" "info" # avoid a patch, just append to the dtsi file - cat <<- EOD >> arch/arm/dts/rk3588s-nanopi-r6c-u-boot.dtsi - &u2phy0 { status = "okay"; }; - &u2phy0_otg { status = "okay"; }; - &usbdp_phy0 { status = "okay"; }; - &usb_host0_xhci { dr_mode = "peripheral"; maximum-speed = "high-speed"; status = "okay"; }; - EOD -} - -# The upstream DTs (kernel 6.13 / u-boot 2025.01) are in flux and different -# let's just patch to normalize the SD and eMMC order as in mainline Linux DT: https://github.com/torvalds/linux/blob/master/arch/arm64/boot/dts/rockchip/rk3588s-nanopi-r6.dtsi#L14-L15 -function pre_config_uboot_target__r6c_patch_uboot_dtsi_for_sd_emmc_order() { - display_alert "u-boot for ${BOARD}" "u-boot: add to u-boot dtsi for SD=mmc0 and eMMC=mmc1" "info" - cat <<- EOD >> arch/arm/dts/rk3588s-nanopi-r6c-u-boot.dtsi - / { aliases { mmc0 = &sdmmc; mmc1 = &sdhci; }; }; - EOD -} - -# "rockchip-common: boot SD card first, then NVMe, then mmc" -# include/configs/rockchip-common.h -# -#define BOOT_TARGETS "mmc1 mmc0 nvme scsi usb pxe dhcp spi" -# +#define BOOT_TARGETS "mmc0 nvme mmc1 scsi usb pxe dhcp spi" -# On R6C, mmc1 is the eMMC, mmc0 is the SD card slot -function pre_config_uboot_target__r6c_patch_rockchip_common_boot_order() { - declare -a rockchip_uboot_targets=("mmc0" "nvme" "mmc1" "scsi" "usb" "pxe" "dhcp" "spi") # for future make-this-generic delight - display_alert "u-boot for ${BOARD}/${BRANCH}" "u-boot: adjust boot order to '${rockchip_uboot_targets[*]}'" "info" - sed -i -e "s/#define BOOT_TARGETS.*/#define BOOT_TARGETS \"${rockchip_uboot_targets[*]}\"/" include/configs/rockchip-common.h - regular_git diff -u include/configs/rockchip-common.h || true -} - -function post_config_uboot_target__extra_configs_for_r6c_mainline() { - display_alert "u-boot for ${BOARD}/${BRANCH}" "u-boot: enable board-specific configs" "info" - run_host_command_logged scripts/config --enable CONFIG_DM_PMIC_FAN53555 - run_host_command_logged scripts/config --enable CONFIG_CMD_MISC - - display_alert "u-boot for ${BOARD}/${BRANCH}" "u-boot: enable EFI debugging commands" "info" - run_host_command_logged scripts/config --enable CMD_EFIDEBUG - run_host_command_logged scripts/config --enable CMD_NVEDIT_EFI - - display_alert "u-boot for ${BOARD}/${BRANCH}" "u-boot: enable more filesystems support" "info" - run_host_command_logged scripts/config --enable CONFIG_CMD_BTRFS - - display_alert "u-boot for ${BOARD}/${BRANCH}" "u-boot: enable more compression support" "info" - run_host_command_logged scripts/config --enable CONFIG_LZO - run_host_command_logged scripts/config --enable CONFIG_BZIP2 - run_host_command_logged scripts/config --enable CONFIG_ZSTD - - display_alert "u-boot for ${BOARD}/${BRANCH}" "u-boot: enable gpio LED support" "info" - run_host_command_logged scripts/config --enable CONFIG_LED - run_host_command_logged scripts/config --enable CONFIG_LED_GPIO - - display_alert "u-boot for ${BOARD}/${BRANCH}" "u-boot: enable networking cmds" "info" - run_host_command_logged scripts/config --enable CONFIG_CMD_NFS - run_host_command_logged scripts/config --enable CONFIG_CMD_WGET - run_host_command_logged scripts/config --enable CONFIG_CMD_DNS - run_host_command_logged scripts/config --enable CONFIG_PROT_TCP - run_host_command_logged scripts/config --enable CONFIG_PROT_TCP_SACK - - # UMS, RockUSB, gadget stuff - display_alert "u-boot for ${BOARD}/${BRANCH}" "u-boot: enable UMS/RockUSB gadget" "info" - declare -a enable_configs=("CONFIG_CMD_USB_MASS_STORAGE" "CONFIG_USB_GADGET" "USB_GADGET_DOWNLOAD" "CONFIG_USB_FUNCTION_ROCKUSB" "CONFIG_USB_FUNCTION_ACM" "CONFIG_CMD_ROCKUSB" "CONFIG_CMD_USB_MASS_STORAGE") - for config in "${enable_configs[@]}"; do - run_host_command_logged scripts/config --enable "${config}" - done - # Auto-enabled by the above, force off... - run_host_command_logged scripts/config --disable USB_FUNCTION_FASTBOOT -} diff --git a/config/boards/nanopi-r6s.conf b/config/boards/nanopi-r6s.conf deleted file mode 100644 index cb88c4c0e487..000000000000 --- a/config/boards/nanopi-r6s.conf +++ /dev/null @@ -1,121 +0,0 @@ -# Rockchip RK3588S octa core 8GB RAM SoC eMMC USB3 USB2 1x GbE 2x 2.5GbE -BOARD_NAME="NanoPi R6S" -BOARD_VENDOR="friendlyelec" -BOARDFAMILY="rockchip-rk3588" -BOARD_MAINTAINER="efectn" -INTRODUCED="2023" -BOOTCONFIG="nanopi-r6s-rk3588s_defconfig" # Mainline defconfig -BOOT_SOC="rk3588" -KERNEL_TARGET="current,edge,vendor" -KERNEL_TEST_TARGET="vendor,current" -FULL_DESKTOP="yes" -BOOT_LOGO="desktop" -IMAGE_PARTITION_TABLE="gpt" -BOOT_FDT_FILE="rockchip/rk3588s-nanopi-r6s.dtb" -BOOT_SCENARIO="spl-blobs" -declare -g UEFI_EDK2_BOARD_ID="nanopi-r6s" # This _only_ used for uefi-edk2-rk3588 extension - -function post_family_tweaks__nanopir6s_naming_udev_audios() { - display_alert "$BOARD" "Renaming NanoPi R6S HDMI audio" "info" - - mkdir -p $SDCARD/etc/udev/rules.d/ - - cat <<- EOF > $SDCARD/etc/udev/rules.d/90-naming-audios.rules - SUBSYSTEM=="sound", ENV{ID_PATH}=="platform-hdmi0-sound", ENV{SOUND_DESCRIPTION}="HDMI0 Audio" - EOF -} - -function post_family_tweaks__nanopir6s_naming_udev_network_interfaces() { - display_alert "$BOARD" "Renaming NanoPi R6S network interfaces to WAN LAN1 LAN2" "info" - - mkdir -p $SDCARD/etc/udev/rules.d/ - cat <<- EOF > "${SDCARD}/etc/udev/rules.d/70-persistent-net.rules" - SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", KERNELS=="fe1c0000.ethernet", NAME:="lan2" - SUBSYSTEM=="net", ACTION=="add", DRIVERS=="r8169", KERNELS=="0003:31:00.0", NAME:="wan" - SUBSYSTEM=="net", ACTION=="add", DRIVERS=="r8169", KERNELS=="0004:41:00.0", NAME:="lan1" - EOF -} - -# Mainline U-Boot -function post_family_config__nanopi_r6s_use_mainline_uboot() { - display_alert "$BOARD" "Using mainline U-Boot for $BOARD / $BRANCH" "info" - - declare -g BOOTDELAY=1 - declare -g BOOTSOURCE="https://github.com/u-boot/u-boot.git" - declare -g BOOTBRANCH="tag:v2025.10" - declare -g BOOTPATCHDIR="v2025.10" - declare -g BOOTDIR="u-boot-${BOARD}" - declare -g UBOOT_TARGET_MAP="BL31=${RKBIN_DIR}/${BL31_BLOB} ROCKCHIP_TPL=${RKBIN_DIR}/${DDR_BLOB};;u-boot-rockchip.bin" - unset uboot_custom_postprocess write_uboot_platform write_uboot_platform_mtd # disable stuff from rockchip64_common; we're using binman here which does all the work already - - # Just use the binman-provided u-boot-rockchip.bin, which is ready-to-go - function write_uboot_platform() { - dd "if=$1/u-boot-rockchip.bin" "of=$2" bs=32k seek=1 conv=notrunc status=none - } -} - -function pre_config_uboot_target__r6s_patch_uboot_dtsi_for_ums() { - display_alert "u-boot for ${BOARD}" "u-boot: add to u-boot dtsi for UMS" "info" # avoid a patch, just append to the dtsi file - cat <<- EOD >> arch/arm/dts/rk3588s-nanopi-r6s-u-boot.dtsi - &u2phy0 { status = "okay"; }; - &u2phy0_otg { status = "okay"; }; - &usbdp_phy0 { status = "okay"; }; - &usb_host0_xhci { dr_mode = "peripheral"; maximum-speed = "high-speed"; status = "okay"; }; - EOD -} - -# The upstream DTs (kernel 6.13 / u-boot 2025.01) are in flux and different -# let's just patch to normalize the SD and eMMC order as in mainline Linux DT: https://github.com/torvalds/linux/blob/master/arch/arm64/boot/dts/rockchip/rk3588s-nanopi-r6.dtsi#L14-L15 -function pre_config_uboot_target__r6s_patch_uboot_dtsi_for_sd_emmc_order() { - display_alert "u-boot for ${BOARD}" "u-boot: add to u-boot dtsi for SD=mmc0 and eMMC=mmc1" "info" - cat <<- EOD >> arch/arm/dts/rk3588s-nanopi-r6s-u-boot.dtsi - / { aliases { mmc0 = &sdmmc; mmc1 = &sdhci; }; }; - EOD -} - -# "rockchip-common: boot SD card first, then NVMe, then mmc" -# include/configs/rockchip-common.h -# -#define BOOT_TARGETS "mmc1 mmc0 nvme scsi usb pxe dhcp spi" -# +#define BOOT_TARGETS "mmc0 nvme mmc1 scsi usb pxe dhcp spi" -# On R6S, mmc1 is the eMMC, mmc0 is the SD card slot -function pre_config_uboot_target__r6s_patch_rockchip_common_boot_order() { - declare -a rockchip_uboot_targets=("mmc0" "nvme" "mmc1" "scsi" "usb" "pxe" "dhcp" "spi") # for future make-this-generic delight - display_alert "u-boot for ${BOARD}/${BRANCH}" "u-boot: adjust boot order to '${rockchip_uboot_targets[*]}'" "info" - sed -i -e "s/#define BOOT_TARGETS.*/#define BOOT_TARGETS \"${rockchip_uboot_targets[*]}\"/" include/configs/rockchip-common.h - regular_git diff -u include/configs/rockchip-common.h || true -} - -function post_config_uboot_target__extra_configs_for_r6s_mainline() { - display_alert "u-boot for ${BOARD}/${BRANCH}" "u-boot: enable board-specific configs" "info" - run_host_command_logged scripts/config --enable CONFIG_DM_PMIC_FAN53555 - run_host_command_logged scripts/config --enable CONFIG_CMD_MISC - - display_alert "u-boot for ${BOARD}/${BRANCH}" "u-boot: enable EFI debugging commands" "info" - run_host_command_logged scripts/config --enable CMD_EFIDEBUG - run_host_command_logged scripts/config --enable CMD_NVEDIT_EFI - - display_alert "u-boot for ${BOARD}/${BRANCH}" "u-boot: enable more compression support" "info" - run_host_command_logged scripts/config --enable CONFIG_LZO - run_host_command_logged scripts/config --enable CONFIG_BZIP2 - run_host_command_logged scripts/config --enable CONFIG_ZSTD - - display_alert "u-boot for ${BOARD}/${BRANCH}" "u-boot: enable gpio LED support" "info" - run_host_command_logged scripts/config --enable CONFIG_LED - run_host_command_logged scripts/config --enable CONFIG_LED_GPIO - - display_alert "u-boot for ${BOARD}/${BRANCH}" "u-boot: enable networking cmds" "info" - run_host_command_logged scripts/config --enable CONFIG_CMD_NFS - run_host_command_logged scripts/config --enable CONFIG_CMD_WGET - run_host_command_logged scripts/config --enable CONFIG_CMD_DNS - run_host_command_logged scripts/config --enable CONFIG_PROT_TCP - run_host_command_logged scripts/config --enable CONFIG_PROT_TCP_SACK - - # UMS, RockUSB, gadget stuff - display_alert "u-boot for ${BOARD}/${BRANCH}" "u-boot: enable UMS/RockUSB gadget" "info" - declare -a enable_configs=("CONFIG_CMD_USB_MASS_STORAGE" "CONFIG_USB_GADGET" "USB_GADGET_DOWNLOAD" "CONFIG_USB_FUNCTION_ROCKUSB" "CONFIG_USB_FUNCTION_ACM" "CONFIG_CMD_ROCKUSB" "CONFIG_CMD_USB_MASS_STORAGE") - for config in "${enable_configs[@]}"; do - run_host_command_logged scripts/config --enable "${config}" - done - # Auto-enabled by the above, force off... - run_host_command_logged scripts/config --disable USB_FUNCTION_FASTBOOT -} diff --git a/config/boards/nanopi6-series.conf b/config/boards/nanopi6-series.conf new file mode 100644 index 000000000000..6438711f5467 --- /dev/null +++ b/config/boards/nanopi6-series.conf @@ -0,0 +1,100 @@ +# FriendlyElec RK3588S NanoPi R6S, R6C and M6 common image +BOARD_NAME="NanoPi 6 series (R6S/R6C/M6)" +BOARD_VENDOR="friendlyelec" +BOARDFAMILY="rockchip-rk3588" +BOARD_MAINTAINER="efectn" +INTRODUCED="2026" +BOOTCONFIG="nanopi6-series-rk3588s_defconfig" +BOOT_SOC="rk3588" +KERNEL_TARGET="current,edge,vendor" +KERNEL_TEST_TARGET="vendor,current" +FULL_DESKTOP="yes" +BOOT_LOGO="desktop" +BOOT_SCENARIO="spl-blobs" +BOOT_SUPPORT_SPI="yes" +BOOT_SPI_RKSPI_LOADER="yes" +IMAGE_PARTITION_TABLE="gpt" + +# U-Boot selects the matching kernel DTB at runtime from the SARADC HW-ID. +# Keep this unset so the boot flow uses the fdtfile provided by board C code. +unset BOOT_FDT_FILE + +function post_family_tweaks__nanopi6_series_naming_udev() { + display_alert "$BOARD" "Adding NanoPi 6-series audio and network names" "info" + + mkdir -p "$SDCARD/etc/udev/rules.d/" + cat <<- 'EOF' > "$SDCARD/etc/udev/rules.d/90-nanopi6-audio.rules" + SUBSYSTEM=="sound", ENV{ID_PATH}=="platform-hdmi0-sound", ENV{SOUND_DESCRIPTION}="HDMI0 Audio" + EOF + + cat <<- 'EOF' > "$SDCARD/etc/udev/rules.d/70-nanopi6-network.rules" + IMPORT{cmdline}="nanopi6_model" + + SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", KERNELS=="fe1c0000.ethernet", ENV{nanopi6_model}=="r6s", NAME:="lan2" + SUBSYSTEM=="net", ACTION=="add", DRIVERS=="r8169", KERNELS=="0003:31:00.0", ENV{nanopi6_model}=="r6s", NAME:="wan" + SUBSYSTEM=="net", ACTION=="add", DRIVERS=="r8169", KERNELS=="0004:41:00.0", ENV{nanopi6_model}=="r6s", NAME:="lan1" + + SUBSYSTEM=="net", ACTION=="add", KERNELS=="fe1c0000.ethernet", ENV{nanopi6_model}=="r6c", NAME:="wan1" + SUBSYSTEM=="net", ACTION=="add", KERNELS=="0003:31:00.0", ENV{nanopi6_model}=="r6c", NAME:="lan1" + + SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", KERNELS=="fe1c0000.ethernet", ENV{nanopi6_model}=="m6", NAME:="lan" + EOF +} + +function post_family_config__nanopi6_series_use_mainline_uboot() { + display_alert "$BOARD" "Using unified NanoPi 6 series U-Boot for $BRANCH" "info" + + declare -g BOOTDELAY=1 + declare -g BOOTSOURCE="https://github.com/u-boot/u-boot.git" + declare -g BOOTBRANCH="tag:v2026.07" + declare -g BOOTPATCHDIR="v2026.07" + declare -g BOOTDIR="u-boot-${BOARD}" + declare -g UBOOT_TARGET_MAP="BL31=${RKBIN_DIR}/${BL31_BLOB} ROCKCHIP_TPL=${RKBIN_DIR}/${DDR_BLOB};;u-boot-rockchip.bin u-boot-rockchip-spi.bin" + unset uboot_custom_postprocess write_uboot_platform write_uboot_platform_mtd + + function write_uboot_platform() { + dd "if=$1/u-boot-rockchip.bin" "of=$2" bs=32k seek=1 conv=notrunc status=none + } + + function write_uboot_platform_mtd() { + flashcp -v -p "$1/u-boot-rockchip-spi.bin" /dev/mtd0 + } +} + +function pre_config_uboot_target__nanopi6_series_patch_ums_dtsi() { + display_alert "u-boot for ${BOARD}" "enable UMS on the OTG port" "info" + cat <<- EOD >> arch/arm/dts/rk3588s-nanopi6-series-u-boot.dtsi + &u2phy0 { status = "okay"; }; + &u2phy0_otg { status = "okay"; }; + &usbdp_phy0 { status = "okay"; }; + &usb_host0_xhci { dr_mode = "peripheral"; maximum-speed = "high-speed"; status = "okay"; }; + EOD +} + +function pre_config_uboot_target__nanopi6_series_patch_efi_bootmeth() { + local efi_mgr_file="boot/bootmeth_efi_mgr.c" + + if [[ -f "${efi_mgr_file}" ]]; then + display_alert "u-boot for ${BOARD}" "make EFI bootmeth board-local" "info" + sed -i 's/plat->flags = BOOTMETHF_GLOBAL;/plat->flags = 0;/g' "${efi_mgr_file}" + else + display_alert "u-boot for ${BOARD}" "${efi_mgr_file} not found" "warning" + fi +} + +function post_config_uboot_target__nanopi6_series_extra_configs() { + display_alert "u-boot for ${BOARD}/${BRANCH}" "enable common NanoPi 6 recovery features" "info" + declare -a enable_configs=( + CONFIG_DM_PMIC_FAN53555 CONFIG_CMD_MISC CMD_EFIDEBUG CMD_NVEDIT_EFI + CONFIG_CMD_BTRFS CONFIG_LZO CONFIG_BZIP2 CONFIG_ZSTD CONFIG_CMD_NFS + CONFIG_CMD_WGET CONFIG_CMD_DNS CONFIG_PROT_TCP CONFIG_PROT_TCP_SACK + CONFIG_CMD_MII CONFIG_NET_LWIP CONFIG_CMD_USB_MASS_STORAGE + CONFIG_USB_GADGET USB_GADGET_DOWNLOAD CONFIG_USB_FUNCTION_ROCKUSB + CONFIG_USB_FUNCTION_ACM CONFIG_CMD_ROCKUSB + ) + local config + for config in "${enable_configs[@]}"; do + run_host_command_logged scripts/config --enable "${config}" + done + run_host_command_logged scripts/config --disable USB_FUNCTION_FASTBOOT +} diff --git a/patch/u-boot/v2025.10/defconfig/nanopi-m6-rk3588s_defconfig b/patch/u-boot/v2025.10/defconfig/nanopi-m6-rk3588s_defconfig deleted file mode 100644 index 5c162cee2b79..000000000000 --- a/patch/u-boot/v2025.10/defconfig/nanopi-m6-rk3588s_defconfig +++ /dev/null @@ -1,92 +0,0 @@ -CONFIG_ARM=y -CONFIG_SKIP_LOWLEVEL_INIT=y -CONFIG_COUNTER_FREQUENCY=24000000 -CONFIG_ARCH_ROCKCHIP=y -CONFIG_SF_DEFAULT_SPEED=24000000 -CONFIG_SF_DEFAULT_MODE=0x2000 -CONFIG_DEFAULT_DEVICE_TREE="rockchip/rk3588s-nanopi-m6" -CONFIG_ROCKCHIP_RK3588=y -CONFIG_SPL_SERIAL=y -CONFIG_TARGET_EVB_RK3588=y -CONFIG_SYS_LOAD_ADDR=0xc00800 -CONFIG_SF_DEFAULT_BUS=5 -CONFIG_DEBUG_UART_BASE=0xFEB50000 -CONFIG_DEBUG_UART_CLOCK=24000000 -CONFIG_SPL_SPI=y -CONFIG_PCI=y -CONFIG_DEBUG_UART=y -CONFIG_AHCI=y -CONFIG_FIT=y -CONFIG_FIT_VERBOSE=y -CONFIG_SPL_FIT_SIGNATURE=y -CONFIG_SPL_LOAD_FIT=y -CONFIG_LEGACY_IMAGE_FORMAT=y -CONFIG_DEFAULT_FDT_FILE="rockchip/rk3588s-nanopi-m6.dtb" -# CONFIG_DISPLAY_CPUINFO is not set -CONFIG_DISPLAY_BOARDINFO_LATE=y -CONFIG_SPL_MAX_SIZE=0x40000 -# CONFIG_SPL_RAW_IMAGE_SUPPORT is not set -CONFIG_SPL_SPI_LOAD=y -CONFIG_SYS_SPI_U_BOOT_OFFS=0x60000 -CONFIG_SPL_ATF=y -CONFIG_CMD_GPIO=y -CONFIG_CMD_GPT=y -CONFIG_CMD_I2C=y -CONFIG_CMD_MMC=y -CONFIG_CMD_PCI=y -CONFIG_CMD_USB=y -# CONFIG_CMD_SETEXPR is not set -CONFIG_CMD_REGULATOR=y -# CONFIG_SPL_DOS_PARTITION is not set -CONFIG_SPL_OF_CONTROL=y -CONFIG_OF_LIVE=y -CONFIG_OF_SPL_REMOVE_PROPS="clock-names interrupt-parent assigned-clocks assigned-clock-rates assigned-clock-parents" -CONFIG_SPL_DM_SEQ_ALIAS=y -CONFIG_SPL_REGMAP=y -CONFIG_SPL_SYSCON=y -CONFIG_AHCI_PCI=y -CONFIG_DWC_AHCI=y -CONFIG_SPL_CLK=y -CONFIG_ROCKCHIP_GPIO=y -CONFIG_SYS_I2C_ROCKCHIP=y -CONFIG_MISC=y -CONFIG_SUPPORT_EMMC_RPMB=y -CONFIG_MMC_DW=y -CONFIG_MMC_DW_ROCKCHIP=y -CONFIG_MMC_SDHCI=y -CONFIG_MMC_SDHCI_SDMA=y -CONFIG_MMC_SDHCI_ROCKCHIP=y -CONFIG_PHY_REALTEK=y -CONFIG_DM_ETH=y -CONFIG_DM_MDIO=y -CONFIG_PHY_GIGE=y -CONFIG_ETH_DESIGNWARE=y -CONFIG_RGMII=y -CONFIG_MII=y -CONFIG_GMAC_ROCKCHIP=y -CONFIG_DWC_ETH_QOS=y -CONFIG_DWC_ETH_QOS_ROCKCHIP=y -CONFIG_RTL8169=y -CONFIG_PHYLIB=y -CONFIG_NVME_PCI=y -CONFIG_PCIE_DW_ROCKCHIP=y -CONFIG_PHY_ROCKCHIP_INNO_USB2=y -CONFIG_PHY_ROCKCHIP_NANENG_COMBOPHY=y -CONFIG_PHY_ROCKCHIP_USBDP=y -CONFIG_SPL_PINCTRL=y -CONFIG_PWM_ROCKCHIP=y -CONFIG_SPL_RAM=y -CONFIG_SCSI=y -CONFIG_BAUDRATE=1500000 -CONFIG_DEBUG_UART_SHIFT=2 -CONFIG_SYS_NS16550_MEM32=y -CONFIG_SYSRESET=y -CONFIG_USB=y -CONFIG_USB_XHCI_HCD=y -CONFIG_USB_EHCI_HCD=y -CONFIG_USB_EHCI_GENERIC=y -CONFIG_USB_OHCI_HCD=y -CONFIG_USB_OHCI_GENERIC=y -CONFIG_USB_DWC3=y -CONFIG_USB_DWC3_GENERIC=y -CONFIG_ERRNO_STR=y diff --git a/patch/u-boot/v2025.10/defconfig/nanopi-m6-spi-rk3588s_defconfig b/patch/u-boot/v2025.10/defconfig/nanopi-m6-spi-rk3588s_defconfig deleted file mode 100644 index 3f4829a88b12..000000000000 --- a/patch/u-boot/v2025.10/defconfig/nanopi-m6-spi-rk3588s_defconfig +++ /dev/null @@ -1,97 +0,0 @@ -CONFIG_ARM=y -CONFIG_SKIP_LOWLEVEL_INIT=y -CONFIG_COUNTER_FREQUENCY=24000000 -CONFIG_ARCH_ROCKCHIP=y -CONFIG_SF_DEFAULT_SPEED=24000000 -CONFIG_SF_DEFAULT_MODE=0x2000 -CONFIG_DEFAULT_DEVICE_TREE="rockchip/rk3588s-nanopi-m6-spi" -CONFIG_ROCKCHIP_RK3588=y -CONFIG_ROCKCHIP_SPI_IMAGE=y -CONFIG_SPL_SERIAL=y -CONFIG_TARGET_EVB_RK3588=y -CONFIG_SYS_LOAD_ADDR=0xc00800 -CONFIG_SF_DEFAULT_BUS=5 -CONFIG_DEBUG_UART_BASE=0xFEB50000 -CONFIG_DEBUG_UART_CLOCK=24000000 -CONFIG_SPL_SPI_FLASH_SUPPORT=y -CONFIG_SPL_SPI=y -CONFIG_PCI=y -CONFIG_DEBUG_UART=y -CONFIG_AHCI=y -CONFIG_FIT=y -CONFIG_FIT_VERBOSE=y -CONFIG_SPL_FIT_SIGNATURE=y -CONFIG_SPL_LOAD_FIT=y -CONFIG_LEGACY_IMAGE_FORMAT=y -CONFIG_DEFAULT_FDT_FILE="rockchip/rk3588s-nanopi-m6.dtb" -# CONFIG_DISPLAY_CPUINFO is not set -CONFIG_DISPLAY_BOARDINFO_LATE=y -CONFIG_SPL_MAX_SIZE=0x40000 -# CONFIG_SPL_RAW_IMAGE_SUPPORT is not set -CONFIG_SPL_SPI_LOAD=y -CONFIG_SYS_SPI_U_BOOT_OFFS=0x60000 -CONFIG_SPL_ATF=y -CONFIG_CMD_GPIO=y -CONFIG_CMD_GPT=y -CONFIG_CMD_I2C=y -CONFIG_CMD_MMC=y -CONFIG_CMD_PCI=y -CONFIG_CMD_USB=y -# CONFIG_CMD_SETEXPR is not set -CONFIG_CMD_REGULATOR=y -# CONFIG_SPL_DOS_PARTITION is not set -CONFIG_SPL_OF_CONTROL=y -CONFIG_OF_LIVE=y -CONFIG_OF_SPL_REMOVE_PROPS="clock-names interrupt-parent assigned-clocks assigned-clock-rates assigned-clock-parents" -CONFIG_SPL_DM_SEQ_ALIAS=y -CONFIG_SPL_REGMAP=y -CONFIG_SPL_SYSCON=y -CONFIG_AHCI_PCI=y -CONFIG_DWC_AHCI=y -CONFIG_SPL_CLK=y -CONFIG_ROCKCHIP_GPIO=y -CONFIG_SYS_I2C_ROCKCHIP=y -CONFIG_MISC=y -CONFIG_SUPPORT_EMMC_RPMB=y -CONFIG_MMC_DW=y -CONFIG_MMC_DW_ROCKCHIP=y -CONFIG_SPI_FLASH_SFDP_SUPPORT=y -CONFIG_SPI_FLASH_XMC=y -CONFIG_SPI_FLASH_XTX=y -CONFIG_SPI_FLASH_MTD=y -CONFIG_SPI_FLASH_WINBOND=y -CONFIG_PHY_REALTEK=y -CONFIG_DM_ETH=y -CONFIG_DM_MDIO=y -CONFIG_PHY_GIGE=y -CONFIG_ETH_DESIGNWARE=y -CONFIG_RGMII=y -CONFIG_MII=y -CONFIG_GMAC_ROCKCHIP=y -CONFIG_DWC_ETH_QOS=y -CONFIG_DWC_ETH_QOS_ROCKCHIP=y -CONFIG_RTL8169=y -CONFIG_PHYLIB=y -CONFIG_NVME_PCI=y -CONFIG_PCIE_DW_ROCKCHIP=y -CONFIG_PHY_ROCKCHIP_INNO_USB2=y -CONFIG_PHY_ROCKCHIP_NANENG_COMBOPHY=y -CONFIG_PHY_ROCKCHIP_USBDP=y -CONFIG_SPL_PINCTRL=y -CONFIG_PWM_ROCKCHIP=y -CONFIG_SPL_RAM=y -CONFIG_SCSI=y -CONFIG_BAUDRATE=1500000 -CONFIG_DEBUG_UART_SHIFT=2 -CONFIG_SYS_NS16550_MEM32=y -CONFIG_ROCKCHIP_SFC=y -CONFIG_SYSRESET=y -CONFIG_USB=y -CONFIG_USB_XHCI_HCD=y -CONFIG_USB_EHCI_HCD=y -CONFIG_USB_EHCI_GENERIC=y -CONFIG_USB_OHCI_HCD=y -CONFIG_USB_OHCI_GENERIC=y -CONFIG_USB_DWC3=y -CONFIG_USB_DWC3_GENERIC=y -CONFIG_ERRNO_STR=y diff --git a/patch/u-boot/v2026.07/0001-pci-pcie_dw_rockchip-increase-PCIe-LTSSM-timeout-for-cold-boot.patch b/patch/u-boot/v2026.07/0001-pci-pcie_dw_rockchip-increase-PCIe-LTSSM-timeout-for-cold-boot.patch index 51f5c07cdd30..83457d5d3316 100644 --- a/patch/u-boot/v2026.07/0001-pci-pcie_dw_rockchip-increase-PCIe-LTSSM-timeout-for-cold-boot.patch +++ b/patch/u-boot/v2026.07/0001-pci-pcie_dw_rockchip-increase-PCIe-LTSSM-timeout-for-cold-boot.patch @@ -1,7 +1,8 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Robert Pahle -Date: Wed, 06 May 2026 00:00:00 +0000 -Subject: [PATCH] pci: pcie_dw_rockchip: increase PCIe retry count for Rock 5B cold boot +Date: Wed, 6 May 2026 00:00:00 +0000 +Subject: pci: pcie_dw_rockchip: increase PCIe retry count for Rock 5B cold + boot On RK3588 (Rock 5B), NVMe drives fail to enumerate after a cold boot (complete power loss) because the PCIe link does not train within the @@ -10,7 +11,7 @@ retains power and is already initialized when LTSSM starts. Increase the retry count from 10 to 25 (2.5s total at 100ms per retry). The pre-PERST stabilization delay remains at 100ms so warm-boot -performance is unaffected — the extra time is only consumed when the +performance is unaffected -- the extra time is only consumed when the link fails to come up on the first few attempts, which only occurs on a cold boot where the NVMe needs time to stabilize after power-on. @@ -20,7 +21,7 @@ Signed-off-by: Robert Pahle 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/pci/pcie_dw_rockchip.c b/drivers/pci/pcie_dw_rockchip.c -index 208aa30463a..11c4480f4b0 100644 +index 111111111111..222222222222 100644 --- a/drivers/pci/pcie_dw_rockchip.c +++ b/drivers/pci/pcie_dw_rockchip.c @@ -269,14 +269,14 @@ static int rk_pcie_link_up(struct rk_pcie *priv) @@ -40,3 +41,6 @@ index 208aa30463a..11c4480f4b0 100644 dev_err(priv->dw.dev, "PCIe-%d Link Fail\n", dev_seq(priv->dw.dev)); return -EIO; +-- +Armbian + diff --git a/patch/u-boot/v2026.07/board_nanopi6-series/0001-allow-fdt-fixups-before-dm-as-spl_board_init-works-l.patch b/patch/u-boot/v2026.07/board_nanopi6-series/0001-allow-fdt-fixups-before-dm-as-spl_board_init-works-l.patch new file mode 100644 index 000000000000..d1fbe6ba7153 --- /dev/null +++ b/patch/u-boot/v2026.07/board_nanopi6-series/0001-allow-fdt-fixups-before-dm-as-spl_board_init-works-l.patch @@ -0,0 +1,39 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Muhammed Efe Cetin +Date: Sat, 15 Aug 2026 19:00:24 +0200 +Subject: allow fdt fixups before dm as spl_board_init works later + +--- + common/spl/spl.c | 9 +++++++++ + 1 file changed, 9 insertions(+) + +diff --git a/common/spl/spl.c b/common/spl/spl.c +index 111111111111..222222222222 100644 +--- a/common/spl/spl.c ++++ b/common/spl/spl.c +@@ -48,6 +48,11 @@ DECLARE_BINMAN_MAGIC_SYM; + + u32 *boot_params_ptr = NULL; + ++/* Board-specific control-FDT fixups which must run before DM discovers it. */ ++__weak void spl_board_fixup_fdt(void) ++{ ++} ++ + #if CONFIG_IS_ENABLED(BINMAN_UBOOT_SYMBOLS) + /* See spl.h for information about this */ + #if defined(CONFIG_SPL_BUILD) +@@ -510,6 +515,10 @@ static int spl_common_init(bool setup_malloc) + return ret; + } + } ++ ++ if (CONFIG_IS_ENABLED(BOARD_INIT)) ++ spl_board_fixup_fdt(); ++ + if (CONFIG_IS_ENABLED(DM)) { + bootstage_start(BOOTSTAGE_ID_ACCUM_DM_SPL, + xpl_phase() == PHASE_TPL ? "dm tpl" : "dm_spl"); +-- +Armbian + diff --git a/patch/u-boot/v2026.07/board_nanopi6-series/0002-add-common-nanopi6-series-board-config.patch b/patch/u-boot/v2026.07/board_nanopi6-series/0002-add-common-nanopi6-series-board-config.patch new file mode 100644 index 000000000000..b3afd489ed21 --- /dev/null +++ b/patch/u-boot/v2026.07/board_nanopi6-series/0002-add-common-nanopi6-series-board-config.patch @@ -0,0 +1,444 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Muhammed Efe Cetin +Date: Sat, 15 Aug 2026 19:27:10 +0200 +Subject: add common nanopi6 series board config + +--- + arch/arm/dts/rk3588s-nanopi6-series-u-boot.dtsi | 26 ++ + arch/arm/mach-rockchip/rk3588/Kconfig | 6 + + board/friendlyelec/nanopi6-series-rk3588s/Kconfig | 12 + + board/friendlyelec/nanopi6-series-rk3588s/Makefile | 3 + + board/friendlyelec/nanopi6-series-rk3588s/nanopi6-series-rk3588s.c | 147 ++++++++++ + configs/nanopi6-series-rk3588s_defconfig | 126 ++++++++ + dts/upstream/src/arm64/rockchip/rk3588s-nanopi6-series.dts | 33 +++ + include/configs/nanopi6-series-rk3588s.h | 12 + + 8 files changed, 365 insertions(+) + +diff --git a/arch/arm/dts/rk3588s-nanopi6-series-u-boot.dtsi b/arch/arm/dts/rk3588s-nanopi6-series-u-boot.dtsi +new file mode 100644 +index 000000000000..111111111111 +--- /dev/null ++++ b/arch/arm/dts/rk3588s-nanopi6-series-u-boot.dtsi +@@ -0,0 +1,26 @@ ++// SPDX-License-Identifier: (GPL-2.0+ OR MIT) ++ ++#include "rk3588s-u-boot.dtsi" ++ ++/ { ++ chosen { ++ u-boot,spl-boot-order = "same-as-spl", &sdmmc; ++ }; ++}; ++ ++&saradc { ++ bootph-pre-ram; ++ vdd-microvolts = <1800000>; ++}; ++ ++&fspim0_pins { ++ bootph-pre-ram; ++ bootph-some-ram; ++}; ++ ++&sfc { ++ flash@0 { ++ bootph-pre-ram; ++ bootph-some-ram; ++ }; ++}; +diff --git a/arch/arm/mach-rockchip/rk3588/Kconfig b/arch/arm/mach-rockchip/rk3588/Kconfig +index 111111111111..222222222222 100644 +--- a/arch/arm/mach-rockchip/rk3588/Kconfig ++++ b/arch/arm/mach-rockchip/rk3588/Kconfig +@@ -174,6 +174,11 @@ config TARGET_NANOPI_R6S_RK3588S + 12-pin GPIO FPC connector, a fan connector, IR receiver as well + as some buttons and LEDs. + ++config TARGET_NANOPI6_SERIES_RK3588S ++ bool "FriendlyElec NanoPi 6 series RK3588S boards" ++ help ++ Common U-Boot image for FriendlyElec NanoPi R6S, R6C and M6 boards. ++ + config TARGET_NOVA_RK3588 + bool "Indiedroid Nova RK3588" + help +@@ -425,6 +430,7 @@ source "board/friendlyelec/cm3588-nas-rk3588/Kconfig" + source "board/friendlyelec/nanopc-t6-rk3588/Kconfig" + source "board/friendlyelec/nanopi-r6c-rk3588s/Kconfig" + source "board/friendlyelec/nanopi-r6s-rk3588s/Kconfig" ++source "board/friendlyelec/nanopi6-series-rk3588s/Kconfig" + source "board/gameforce/ace-rk3588s/Kconfig" + source "board/hardkernel/odroid_m2/Kconfig" + source "board/indiedroid/nova/Kconfig" +diff --git a/board/friendlyelec/nanopi6-series-rk3588s/Kconfig b/board/friendlyelec/nanopi6-series-rk3588s/Kconfig +new file mode 100644 +index 000000000000..111111111111 +--- /dev/null ++++ b/board/friendlyelec/nanopi6-series-rk3588s/Kconfig +@@ -0,0 +1,12 @@ ++if TARGET_NANOPI6_SERIES_RK3588S ++ ++config SYS_BOARD ++ default "nanopi6-series-rk3588s" ++ ++config SYS_VENDOR ++ default "friendlyelec" ++ ++config SYS_CONFIG_NAME ++ default "nanopi6-series-rk3588s" ++ ++endif +diff --git a/board/friendlyelec/nanopi6-series-rk3588s/Makefile b/board/friendlyelec/nanopi6-series-rk3588s/Makefile +new file mode 100644 +index 000000000000..111111111111 +--- /dev/null ++++ b/board/friendlyelec/nanopi6-series-rk3588s/Makefile +@@ -0,0 +1,3 @@ ++# SPDX-License-Identifier: GPL-2.0+ ++ ++obj-y += nanopi6-series-rk3588s.o +diff --git a/board/friendlyelec/nanopi6-series-rk3588s/nanopi6-series-rk3588s.c b/board/friendlyelec/nanopi6-series-rk3588s/nanopi6-series-rk3588s.c +new file mode 100644 +index 000000000000..111111111111 +--- /dev/null ++++ b/board/friendlyelec/nanopi6-series-rk3588s/nanopi6-series-rk3588s.c +@@ -0,0 +1,147 @@ ++// SPDX-License-Identifier: GPL-2.0+ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++DECLARE_GLOBAL_DATA_PTR; // Necessary for gd->fdt_blob access in spl_board_fixup_fdt() ++ ++#define HW_ID_CHANNEL 5 // ADC channel used to detect the board model in NanoPi 6 series boards ++ ++// RK3588 BootROM boot source ID for SPI flash ++#define RK3588_BROM_BOOTSOURCE_FSPI_M0 3 ++ ++struct board_model { ++ unsigned int low; ++ unsigned int high; ++ const char *fdtfile; ++ const char *cmdline_arg; ++}; ++ ++// List of supported board models with their ADC voltage ranges, FDT file names, and kernel command line arguments. ++static const struct board_model board_models[] = { ++ { 604, 844, "rockchip/rk3588s-nanopi-r6s.dtb", "nanopi6_model=r6s" }, // 8Gb variant ++ { 848, 1096, "rockchip/rk3588s-nanopi-r6s.dtb", "nanopi6_model=r6s" }, // 4Gb variant ++ ++ { 1100, 1368, "rockchip/rk3588s-nanopi-r6c.dtb", "nanopi6_model=r6c" }, // 8Gb variant ++ { 1372, 1644, "rockchip/rk3588s-nanopi-r6c.dtb", "nanopi6_model=r6c" }, // 4Gb variant ++ ++ { 2704, 2932, "rockchip/rk3588s-nanopi-m6.dtb", "nanopi6_model=m6" }, ++}; ++ ++static const struct board_model *get_board_model(void) ++{ ++ unsigned int val; ++ int i, ret; ++ ++ ret = adc_channel_single_shot("adc@fec10000", HW_ID_CHANNEL, &val); ++ if (ret) ++ return NULL; ++ ++ for (i = 0; i < ARRAY_SIZE(board_models); i++) { ++ unsigned int min = board_models[i].low; ++ unsigned int max = board_models[i].high; ++ ++ if (min <= val && val <= max) ++ return &board_models[i]; ++ } ++ ++ return NULL; ++} ++ ++// Return the boot source ID from the RK3588 BootROM. This is used to determine if the board booted from SPI or eMMC/SD. ++static unsigned int bootrom_boot_source(void) ++{ ++ return readl(BROM_BOOTSOURCE_ID_ADDR); ++} ++ ++// Return true if the board bootes is NanoPi M6, based on the detected board model. ++static bool is_m6(const struct board_model *model) ++{ ++ return model && !strcmp(model->cmdline_arg, "nanopi6_model=m6"); ++} ++ ++// Return true if the board booted from SPI, based on the BootROM boot source ID. ++static bool booted_from_spi(void) ++{ ++ return bootrom_boot_source() == RK3588_BROM_BOOTSOURCE_FSPI_M0; ++} ++ ++// Return true if the board booted from M6 with SPI flash, based on the detected board model and BootROM boot source ID. ++static bool booted_from_m6_spi(const struct board_model *model) ++{ ++ return is_m6(model) && booted_from_spi(); ++} ++ ++// Board-specific control-FDT fixups which must run before DM discovers it. ++// Otherwise, DM may probe the SPI controller and fail if the board booted from eMMC/SD. ++void spl_board_fixup_fdt(void) ++{ ++ void *blob = (void *)gd->fdt_blob; ++ bool from_spi = booted_from_spi(); ++ ++ if (!blob) ++ return; ++ ++ // Only probe the SPI controller if the board booted from it, otherwise disable it in the FDT. ++ do_fixup_by_path(blob, "/mmc@fe2e0000", "status", ++ from_spi ? "disabled" : "okay", ++ from_spi ? sizeof("disabled") : sizeof("okay"), 1); ++ do_fixup_by_path(blob, "/spi@fe2b0000", "status", ++ from_spi ? "okay" : "disabled", ++ from_spi ? sizeof("okay") : sizeof("disabled"), 1); ++} ++ ++// Board-specific SPL initialization, called after DM is initialized. ++// Left-empty on purpose. ++void spl_board_init(void) ++{ ++} ++ ++// Set some board-specific environment variables based on the detected model and boot source. ++// Used to set kernel FDT file name, bootargs, and boot order for the board. ++int rk_board_late_init(void) ++{ ++ const struct board_model *model = get_board_model(); ++ const char *boot_targets; ++ const char *fdtfile; ++ ++ // NanoPi R6S/R6C use SD=mmc0 and eMMC=mmc1; M6 uses the opposite aliases. ++ if (is_m6(model)) ++ boot_targets = "mmc1 nvme mmc0 scsi usb pxe dhcp spi"; ++ else ++ boot_targets = "mmc0 nvme mmc1 scsi usb pxe dhcp spi"; ++ env_set("boot_targets", boot_targets); ++ ++ env_set("extraboardargs", model ? model->cmdline_arg : NULL); ++ ++ // Set the FDT file name for the board model, if not detected use R6S. ++ fdtfile = model ? model->fdtfile : "rockchip/rk3588s-nanopi-r6s.dtb"; ++ env_set("fdtfile", fdtfile); ++ ++ return 0; ++} ++ ++// Choose the correct FIT configuration name based on the detected board model and boot source. ++// Used to choose U-Boot's FIT configuration when loading the image. ++int board_fit_config_name_match(const char *name) ++{ ++ const struct board_model *model = get_board_model(); ++ const char *fit_name; ++ ++ if (!model) ++ return -EINVAL; ++ ++ /* Keep SFC active in U-Boot proper when SPL loaded it from M6 FSPI-M0. */ ++ fit_name = booted_from_m6_spi(model) ? ++ "rockchip/rk3588s-nanopi-m6-spi.dtb" : model->fdtfile; ++ if (!strcmp(name, fit_name)) ++ return 0; ++ ++ return -EINVAL; ++} +diff --git a/configs/nanopi6-series-rk3588s_defconfig b/configs/nanopi6-series-rk3588s_defconfig +new file mode 100644 +index 000000000000..111111111111 +--- /dev/null ++++ b/configs/nanopi6-series-rk3588s_defconfig +@@ -0,0 +1,126 @@ ++CONFIG_ARM=y ++CONFIG_SKIP_LOWLEVEL_INIT=y ++CONFIG_SYS_HAS_NONCACHED_MEMORY=y ++CONFIG_COUNTER_FREQUENCY=24000000 ++CONFIG_ARCH_ROCKCHIP=y ++CONFIG_SF_DEFAULT_SPEED=24000000 ++CONFIG_SF_DEFAULT_MODE=0x2000 ++CONFIG_DEFAULT_DEVICE_TREE="rockchip/rk3588s-nanopi6-series" ++CONFIG_ROCKCHIP_RK3588=y ++CONFIG_ROCKCHIP_SPI_IMAGE=y ++CONFIG_SPL_SERIAL=y ++CONFIG_TARGET_NANOPI6_SERIES_RK3588S=y ++CONFIG_SYS_LOAD_ADDR=0xc00800 ++CONFIG_SF_DEFAULT_BUS=5 ++CONFIG_DEBUG_UART_BASE=0xFEB50000 ++CONFIG_DEBUG_UART_CLOCK=24000000 ++CONFIG_SPL_SPI_FLASH_SUPPORT=y ++CONFIG_SPL_SPI=y ++CONFIG_PCI=y ++CONFIG_DEBUG_UART=y ++CONFIG_AHCI=y ++CONFIG_FIT=y ++CONFIG_FIT_VERBOSE=y ++CONFIG_SPL_FIT_SIGNATURE=y ++CONFIG_SPL_LOAD_FIT=y ++CONFIG_LEGACY_IMAGE_FORMAT=y ++CONFIG_DEFAULT_FDT_FILE="rockchip/rk3588s-nanopi6-series.dtb" ++# CONFIG_DISPLAY_CPUINFO is not set ++CONFIG_DISPLAY_BOARDINFO_LATE=y ++CONFIG_SPL_MAX_SIZE=0x40000 ++# CONFIG_SPL_RAW_IMAGE_SUPPORT is not set ++CONFIG_SPL_SPI_LOAD=y ++CONFIG_SYS_SPI_U_BOOT_OFFS=0x60000 ++CONFIG_SPL_ATF=y ++CONFIG_SPL_BOARD_INIT=y ++CONFIG_BOARD_LATE_INIT=y ++CONFIG_CMD_ADC=y ++CONFIG_CMD_GPIO=y ++CONFIG_CMD_GPT=y ++CONFIG_CMD_I2C=y ++CONFIG_CMD_MMC=y ++CONFIG_CMD_PCI=y ++CONFIG_CMD_USB=y ++CONFIG_CMD_ROCKUSB=y ++# CONFIG_CMD_SETEXPR is not set ++CONFIG_CMD_REGULATOR=y ++# CONFIG_SPL_DOS_PARTITION is not set ++CONFIG_SPL_OF_CONTROL=y ++CONFIG_OF_LIVE=y ++CONFIG_OF_LIST="rockchip/rk3588s-nanopi6-series rockchip/rk3588s-nanopi-r6s rockchip/rk3588s-nanopi-r6c rockchip/rk3588s-nanopi-m6 rockchip/rk3588s-nanopi-m6-spi" ++CONFIG_OF_SPL_REMOVE_PROPS="clock-names interrupt-parent assigned-clocks assigned-clock-rates assigned-clock-parents" ++CONFIG_ENV_RELOC_GD_ENV_ADDR=y ++CONFIG_SPL_DM_SEQ_ALIAS=y ++CONFIG_SPL_REGMAP=y ++CONFIG_SPL_SYSCON=y ++CONFIG_AHCI_PCI=y ++CONFIG_DWC_AHCI=y ++CONFIG_SPL_ADC=y ++CONFIG_BUTTON=y ++CONFIG_BUTTON_ADC=y ++CONFIG_SPL_CLK=y ++CONFIG_ROCKCHIP_GPIO=y ++CONFIG_SYS_I2C_ROCKCHIP=y ++CONFIG_LED=y ++CONFIG_LED_GPIO=y ++CONFIG_MISC=y ++CONFIG_SUPPORT_EMMC_RPMB=y ++CONFIG_MMC_DW=y ++CONFIG_MMC_DW_ROCKCHIP=y ++CONFIG_MMC_SDHCI=y ++CONFIG_MMC_SDHCI_SDMA=y ++CONFIG_MMC_SDHCI_ROCKCHIP=y ++CONFIG_SPI_FLASH_SFDP_SUPPORT=y ++CONFIG_SPI_FLASH_MACRONIX=y ++CONFIG_SPI_FLASH_WINBOND=y ++CONFIG_SPI_FLASH_XMC=y ++CONFIG_SPI_FLASH_XTX=y ++CONFIG_SPI_FLASH_MTD=y ++CONFIG_PHY_REALTEK=y ++CONFIG_DM_ETH=y ++CONFIG_DM_MDIO=y ++CONFIG_PHY_GIGE=y ++CONFIG_ETH_DESIGNWARE=y ++CONFIG_RGMII=y ++CONFIG_MII=y ++CONFIG_GMAC_ROCKCHIP=y ++CONFIG_DWC_ETH_QOS=y ++CONFIG_DWC_ETH_QOS_ROCKCHIP=y ++CONFIG_RTL8169=y ++CONFIG_PHYLIB=y ++CONFIG_NVME_PCI=y ++CONFIG_PCIE_DW_ROCKCHIP=y ++CONFIG_PHY_ROCKCHIP_INNO_USB2=y ++CONFIG_PHY_ROCKCHIP_NANENG_COMBOPHY=y ++CONFIG_PHY_ROCKCHIP_USBDP=y ++CONFIG_SPL_PINCTRL=y ++CONFIG_DM_PMIC=y ++CONFIG_PMIC_RK8XX=y ++CONFIG_REGULATOR_RK8XX=y ++CONFIG_PWM_ROCKCHIP=y ++CONFIG_SPL_RAM=y ++CONFIG_SCSI=y ++CONFIG_BAUDRATE=1500000 ++CONFIG_DEBUG_UART_SHIFT=2 ++CONFIG_SYS_NS16550_MEM32=y ++CONFIG_ROCKCHIP_SFC=y ++CONFIG_ROCKCHIP_SPI=y ++CONFIG_SYSRESET=y ++CONFIG_USB=y ++CONFIG_USB_XHCI_HCD=y ++CONFIG_USB_EHCI_HCD=y ++CONFIG_USB_EHCI_GENERIC=y ++CONFIG_USB_OHCI_HCD=y ++CONFIG_USB_OHCI_GENERIC=y ++CONFIG_USB_DWC3=y ++CONFIG_USB_DWC3_GENERIC=y ++CONFIG_USB_GADGET=y ++CONFIG_USB_GADGET_DOWNLOAD=y ++CONFIG_USB_FUNCTION_ROCKUSB=y ++CONFIG_USB_HOST_ETHER=y ++CONFIG_USB_ETHER_ASIX=y ++CONFIG_USB_ETHER_ASIX88179=y ++CONFIG_USB_ETHER_MCS7830=y ++CONFIG_USB_ETHER_RTL8152=y ++CONFIG_USB_ETHER_SMSC95XX=y ++CONFIG_ERRNO_STR=y +diff --git a/dts/upstream/src/arm64/rockchip/rk3588s-nanopi6-series.dts b/dts/upstream/src/arm64/rockchip/rk3588s-nanopi6-series.dts +new file mode 100644 +index 000000000000..111111111111 +--- /dev/null ++++ b/dts/upstream/src/arm64/rockchip/rk3588s-nanopi6-series.dts +@@ -0,0 +1,33 @@ ++// SPDX-License-Identifier: (GPL-2.0+ OR MIT) ++ ++/dts-v1/; ++ ++#include "rk3588s-nanopi-r6s.dts" ++ ++/ { ++ model = "FriendlyElec NanoPi 6 series (U-Boot)"; ++ compatible = "friendlyelec,nanopi6-series", "rockchip,rk3588s"; ++ ++}; ++ ++/* ++ * M6 eMMC and FSPI-M0 share pins. The pre-DM SPL hook selects exactly one ++ * controller after reading the BootROM source. ++ */ ++&sdhci { ++ status = "disabled"; ++}; ++ ++&sfc { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&fspim0_pins>; ++ status = "disabled"; ++ ++ flash@0 { ++ compatible = "jedec,spi-nor"; ++ reg = <0>; ++ spi-max-frequency = <50000000>; ++ spi-rx-bus-width = <4>; ++ spi-tx-bus-width = <1>; ++ }; ++}; +diff --git a/include/configs/nanopi6-series-rk3588s.h b/include/configs/nanopi6-series-rk3588s.h +new file mode 100644 +index 000000000000..111111111111 +--- /dev/null ++++ b/include/configs/nanopi6-series-rk3588s.h +@@ -0,0 +1,12 @@ ++/* SPDX-License-Identifier: GPL-2.0+ */ ++ ++#ifndef __NANOPI6_SERIES_RK3588S_H ++#define __NANOPI6_SERIES_RK3588S_H ++ ++#define ROCKCHIP_DEVICE_SETTINGS \ ++ "stdout=serial,vidconsole\0" \ ++ "stderr=serial,vidconsole\0" ++ ++#include ++ ++#endif /* __NANOPI6_SERIES_RK3588S_H */ +-- +Armbian + diff --git a/patch/u-boot/v2025.10/dt_uboot/rk3588s-nanopi-m6-spi-u-boot.dtsi b/patch/u-boot/v2026.07/dt_uboot/rk3588s-nanopi-m6-spi-u-boot.dtsi similarity index 100% rename from patch/u-boot/v2025.10/dt_uboot/rk3588s-nanopi-m6-spi-u-boot.dtsi rename to patch/u-boot/v2026.07/dt_uboot/rk3588s-nanopi-m6-spi-u-boot.dtsi diff --git a/patch/u-boot/v2025.10/dt_uboot/rk3588s-nanopi-m6-u-boot.dtsi b/patch/u-boot/v2026.07/dt_uboot/rk3588s-nanopi-m6-u-boot.dtsi similarity index 100% rename from patch/u-boot/v2025.10/dt_uboot/rk3588s-nanopi-m6-u-boot.dtsi rename to patch/u-boot/v2026.07/dt_uboot/rk3588s-nanopi-m6-u-boot.dtsi diff --git a/patch/u-boot/v2025.10/dt_upstream_rockchip/rk3588s-nanopi-m6-spi.dts b/patch/u-boot/v2026.07/dt_upstream_rockchip/rk3588s-nanopi-m6-spi.dts similarity index 100% rename from patch/u-boot/v2025.10/dt_upstream_rockchip/rk3588s-nanopi-m6-spi.dts rename to patch/u-boot/v2026.07/dt_upstream_rockchip/rk3588s-nanopi-m6-spi.dts diff --git a/patch/u-boot/v2025.10/dt_upstream_rockchip/rk3588s-nanopi-m6.dts b/patch/u-boot/v2026.07/dt_upstream_rockchip/rk3588s-nanopi-m6.dts similarity index 100% rename from patch/u-boot/v2025.10/dt_upstream_rockchip/rk3588s-nanopi-m6.dts rename to patch/u-boot/v2026.07/dt_upstream_rockchip/rk3588s-nanopi-m6.dts diff --git a/patch/u-boot/v2026.07/general-fix-btrfs-zstd-decompression.patch b/patch/u-boot/v2026.07/general-fix-btrfs-zstd-decompression.patch index 085ea9281c69..e3c6d5ecb97e 100644 --- a/patch/u-boot/v2026.07/general-fix-btrfs-zstd-decompression.patch +++ b/patch/u-boot/v2026.07/general-fix-btrfs-zstd-decompression.patch @@ -1,7 +1,7 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Igor Velkov -Date: Thu, 10 Apr 2026 00:00:00 +0000 -Subject: [PATCH] fs: btrfs: fix zstd decompression for BTRFS extents +Date: Fri, 10 Apr 2026 00:00:00 +0000 +Subject: fs: btrfs: fix zstd decompression for BTRFS extents The generic zstd_decompress() wrapper in lib/zstd/zstd.c works for FIT images but fails for BTRFS filesystem extents due to three issues: @@ -47,14 +47,15 @@ also call their library functions directly without generic wrappers. Signed-off-by: Igor Velkov --- - fs/btrfs/compression.c | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++++---- + fs/btrfs/compression.c | 76 +++++++++- 1 file changed, 72 insertions(+), 4 deletions(-) diff --git a/fs/btrfs/compression.c b/fs/btrfs/compression.c +index 111111111111..222222222222 100644 --- a/fs/btrfs/compression.c +++ b/fs/btrfs/compression.c -@@ -137,12 +137,80 @@ - +@@ -137,12 +137,80 @@ static u32 decompress_zlib(const u8 *_cbuf, u32 clen, u8 *dbuf, u32 dlen) + static u32 decompress_zstd(const u8 *cbuf, u32 clen, u8 *dbuf, u32 dlen) { - struct abuf in, out; @@ -64,12 +65,9 @@ diff --git a/fs/btrfs/compression.c b/fs/btrfs/compression.c + unsigned long long fcs; + u8 *tmp = NULL; + u8 *out_buf = dbuf; - -- abuf_init_set(&in, (u8 *)cbuf, clen); -- abuf_init_set(&out, dbuf, dlen); ++ + out_len = dlen; - -- return zstd_decompress(&in, &out); ++ + /* + * Find the actual compressed frame size. BTRFS stores compressed + * extents padded to sector boundaries, but zstd_decompress_dctx() @@ -110,7 +108,9 @@ diff --git a/fs/btrfs/compression.c b/fs/btrfs/compression.c + free(tmp); + return -1; + } -+ + +- abuf_init_set(&in, (u8 *)cbuf, clen); +- abuf_init_set(&out, dbuf, dlen); + ret = zstd_decompress_dctx(ctx, out_buf, out_len, cbuf, clen); + free(workspace); + @@ -133,8 +133,12 @@ diff --git a/fs/btrfs/compression.c b/fs/btrfs/compression.c + memcpy(dbuf, tmp, ret); + free(tmp); + } -+ + +- return zstd_decompress(&in, &out); + return ret; } - + u32 btrfs_decompress(u8 type, const char *c, u32 clen, char *d, u32 dlen) +-- +Armbian + diff --git a/patch/u-boot/v2026.07/mtd-spi-nor-Add-support-for-Zbit-ZB25LQ128.patch b/patch/u-boot/v2026.07/mtd-spi-nor-Add-support-for-Zbit-ZB25LQ128.patch index 38ee31ec9f4b..8474e06e87d7 100644 --- a/patch/u-boot/v2026.07/mtd-spi-nor-Add-support-for-Zbit-ZB25LQ128.patch +++ b/patch/u-boot/v2026.07/mtd-spi-nor-Add-support-for-Zbit-ZB25LQ128.patch @@ -1,7 +1,7 @@ -From 76eac0547ffa41dd059f8b45122ec0c769e86dfa Mon Sep 17 00:00:00 2001 +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Ricardo Pardini Date: Wed, 8 Jul 2026 23:21:21 +0200 -Subject: [PATCH] mtd: spi-nor: Add support for Zbit ZB25LQ128 +Subject: mtd: spi-nor: Add support for Zbit ZB25LQ128 Add support for Zbit ZB25LQ128 (128M-bit) Serial Flash memory. Used on the Seeed reComputer rk3576 DevKit board. @@ -14,7 +14,7 @@ Signed-off-by: Ricardo Pardini 1 file changed, 2 insertions(+) diff --git a/drivers/mtd/spi/spi-nor-ids.c b/drivers/mtd/spi/spi-nor-ids.c -index c0fa98424aa..0ad85b4c21d 100644 +index 111111111111..222222222222 100644 --- a/drivers/mtd/spi/spi-nor-ids.c +++ b/drivers/mtd/spi/spi-nor-ids.c @@ -720,6 +720,8 @@ const struct flash_info spi_nor_ids[] = { @@ -27,5 +27,5 @@ index c0fa98424aa..0ad85b4c21d 100644 { }, }; -- -2.55.0 +Armbian From 6c703d765df5c82a56cb7ac35932b75bb73dec7f Mon Sep 17 00:00:00 2001 From: Muhammed Efe Cetin Date: Sun, 16 Aug 2026 01:34:40 +0200 Subject: [PATCH 2/2] board: add NanoPi M6V2 board to nanopi6-series --- config/boards/nanopi6-series.conf | 3 +- .../dt/rk3588s-nanopi-m6v2.dts | 86 +++++++++++++++++++ .../dt/rk3588s-nanopi-m6v2.dts | 86 +++++++++++++++++++ .../rockchip64-7.1/dt/rk3588s-nanopi-m6v2.dts | 86 +++++++++++++++++++ .../rockchip64-7.2/dt/rk3588s-nanopi-m6v2.dts | 86 +++++++++++++++++++ ...03-add-support-for-NanoPi-M6V2-board.patch | 74 ++++++++++++++++ .../rk3588s-nanopi-m6v2-spi-u-boot.dtsi | 1 + .../dt_uboot/rk3588s-nanopi-m6v2-u-boot.dtsi | 1 + .../rk3588s-nanopi-m6v2-spi.dts | 28 ++++++ .../rk3588s-nanopi-m6v2.dts | 86 +++++++++++++++++++ 10 files changed, 536 insertions(+), 1 deletion(-) create mode 100644 patch/kernel/archive/rockchip64-6.12/dt/rk3588s-nanopi-m6v2.dts create mode 100644 patch/kernel/archive/rockchip64-6.18/dt/rk3588s-nanopi-m6v2.dts create mode 100644 patch/kernel/archive/rockchip64-7.1/dt/rk3588s-nanopi-m6v2.dts create mode 100644 patch/kernel/archive/rockchip64-7.2/dt/rk3588s-nanopi-m6v2.dts create mode 100644 patch/u-boot/v2026.07/board_nanopi6-series/0003-add-support-for-NanoPi-M6V2-board.patch create mode 100644 patch/u-boot/v2026.07/dt_uboot/rk3588s-nanopi-m6v2-spi-u-boot.dtsi create mode 100644 patch/u-boot/v2026.07/dt_uboot/rk3588s-nanopi-m6v2-u-boot.dtsi create mode 100644 patch/u-boot/v2026.07/dt_upstream_rockchip/rk3588s-nanopi-m6v2-spi.dts create mode 100644 patch/u-boot/v2026.07/dt_upstream_rockchip/rk3588s-nanopi-m6v2.dts diff --git a/config/boards/nanopi6-series.conf b/config/boards/nanopi6-series.conf index 6438711f5467..d5a55c7abcdf 100644 --- a/config/boards/nanopi6-series.conf +++ b/config/boards/nanopi6-series.conf @@ -1,4 +1,4 @@ -# FriendlyElec RK3588S NanoPi R6S, R6C and M6 common image +# FriendlyElec RK3588S NanoPi R6S, R6C, M6/M6V2 common image BOARD_NAME="NanoPi 6 series (R6S/R6C/M6)" BOARD_VENDOR="friendlyelec" BOARDFAMILY="rockchip-rk3588" @@ -38,6 +38,7 @@ function post_family_tweaks__nanopi6_series_naming_udev() { SUBSYSTEM=="net", ACTION=="add", KERNELS=="0003:31:00.0", ENV{nanopi6_model}=="r6c", NAME:="lan1" SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", KERNELS=="fe1c0000.ethernet", ENV{nanopi6_model}=="m6", NAME:="lan" + SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", KERNELS=="fe1c0000.ethernet", ENV{nanopi6_model}=="m6v2", NAME:="lan" EOF } diff --git a/patch/kernel/archive/rockchip64-6.12/dt/rk3588s-nanopi-m6v2.dts b/patch/kernel/archive/rockchip64-6.12/dt/rk3588s-nanopi-m6v2.dts new file mode 100644 index 000000000000..b520c4771f0a --- /dev/null +++ b/patch/kernel/archive/rockchip64-6.12/dt/rk3588s-nanopi-m6v2.dts @@ -0,0 +1,86 @@ +// SPDX-License-Identifier: (GPL-2.0+ OR MIT) + +/dts-v1/; + +#include "rk3588s-nanopi-m6.dts" + +/delete-node/ &rt5616; + +/ { + model = "FriendlyElec NanoPi M6 v2"; + compatible = "friendlyelec,nanopi-m6v2", "rockchip,rk3588s"; + + /delete-node/ analog-sound; + + analog-sound { + compatible = "simple-audio-card"; + pinctrl-names = "default"; + pinctrl-0 = <&hp_det>; + + simple-audio-card,name = "everest,es8389-codec"; + simple-audio-card,format = "i2s"; + simple-audio-card,mclk-fs = <256>; + simple-audio-card,hp-det-gpios = <&gpio1 RK_PC4 GPIO_ACTIVE_LOW>; + + simple-audio-card,widgets = + "Headphone", "Headphones", + "Microphone", "Microphone Jack"; + simple-audio-card,routing = + "Headphones", "HPOL", + "Headphones", "HPOR", + "INPUT1", "Microphone Jack", + "INPUT2", "Microphone Jack"; + + simple-audio-card,cpu { + sound-dai = <&i2s0_8ch>; + }; + + simple-audio-card,codec { + sound-dai = <&es8389>; + }; + }; + + gpio-keys { + compatible = "gpio-keys"; + pinctrl-names = "default"; + pinctrl-0 = <&user_btn>; + + user-button { + debounce-interval = <20>; + gpios = <&gpio0 RK_PD3 GPIO_ACTIVE_LOW>; + label = "USER_BTN"; + linux,code = ; + wakeup-source; + }; + }; +}; + +&i2c7 { + es8389: audio-codec@10 { + compatible = "everest,es8389"; + reg = <0x10>; + assigned-clocks = <&cru I2S0_8CH_MCLKOUT>; + assigned-clock-rates = <12288000>; + clocks = <&cru I2S0_8CH_MCLKOUT>; + clock-names = "mclk"; + pinctrl-names = "default"; + pinctrl-0 = <&i2s0_mclk>; + #sound-dai-cells = <0>; + }; +}; + +&i2s0_8ch { + /delete-node/ port; +}; + +&rgmii_phy1 { + compatible = "ethernet-phy-ieee802.3-c22"; +}; + +&pinctrl { + gpio-keys { + user_btn: user-btn { + rockchip,pins = <0 RK_PD3 RK_FUNC_GPIO &pcfg_pull_up>; + }; + }; +}; diff --git a/patch/kernel/archive/rockchip64-6.18/dt/rk3588s-nanopi-m6v2.dts b/patch/kernel/archive/rockchip64-6.18/dt/rk3588s-nanopi-m6v2.dts new file mode 100644 index 000000000000..b520c4771f0a --- /dev/null +++ b/patch/kernel/archive/rockchip64-6.18/dt/rk3588s-nanopi-m6v2.dts @@ -0,0 +1,86 @@ +// SPDX-License-Identifier: (GPL-2.0+ OR MIT) + +/dts-v1/; + +#include "rk3588s-nanopi-m6.dts" + +/delete-node/ &rt5616; + +/ { + model = "FriendlyElec NanoPi M6 v2"; + compatible = "friendlyelec,nanopi-m6v2", "rockchip,rk3588s"; + + /delete-node/ analog-sound; + + analog-sound { + compatible = "simple-audio-card"; + pinctrl-names = "default"; + pinctrl-0 = <&hp_det>; + + simple-audio-card,name = "everest,es8389-codec"; + simple-audio-card,format = "i2s"; + simple-audio-card,mclk-fs = <256>; + simple-audio-card,hp-det-gpios = <&gpio1 RK_PC4 GPIO_ACTIVE_LOW>; + + simple-audio-card,widgets = + "Headphone", "Headphones", + "Microphone", "Microphone Jack"; + simple-audio-card,routing = + "Headphones", "HPOL", + "Headphones", "HPOR", + "INPUT1", "Microphone Jack", + "INPUT2", "Microphone Jack"; + + simple-audio-card,cpu { + sound-dai = <&i2s0_8ch>; + }; + + simple-audio-card,codec { + sound-dai = <&es8389>; + }; + }; + + gpio-keys { + compatible = "gpio-keys"; + pinctrl-names = "default"; + pinctrl-0 = <&user_btn>; + + user-button { + debounce-interval = <20>; + gpios = <&gpio0 RK_PD3 GPIO_ACTIVE_LOW>; + label = "USER_BTN"; + linux,code = ; + wakeup-source; + }; + }; +}; + +&i2c7 { + es8389: audio-codec@10 { + compatible = "everest,es8389"; + reg = <0x10>; + assigned-clocks = <&cru I2S0_8CH_MCLKOUT>; + assigned-clock-rates = <12288000>; + clocks = <&cru I2S0_8CH_MCLKOUT>; + clock-names = "mclk"; + pinctrl-names = "default"; + pinctrl-0 = <&i2s0_mclk>; + #sound-dai-cells = <0>; + }; +}; + +&i2s0_8ch { + /delete-node/ port; +}; + +&rgmii_phy1 { + compatible = "ethernet-phy-ieee802.3-c22"; +}; + +&pinctrl { + gpio-keys { + user_btn: user-btn { + rockchip,pins = <0 RK_PD3 RK_FUNC_GPIO &pcfg_pull_up>; + }; + }; +}; diff --git a/patch/kernel/archive/rockchip64-7.1/dt/rk3588s-nanopi-m6v2.dts b/patch/kernel/archive/rockchip64-7.1/dt/rk3588s-nanopi-m6v2.dts new file mode 100644 index 000000000000..b520c4771f0a --- /dev/null +++ b/patch/kernel/archive/rockchip64-7.1/dt/rk3588s-nanopi-m6v2.dts @@ -0,0 +1,86 @@ +// SPDX-License-Identifier: (GPL-2.0+ OR MIT) + +/dts-v1/; + +#include "rk3588s-nanopi-m6.dts" + +/delete-node/ &rt5616; + +/ { + model = "FriendlyElec NanoPi M6 v2"; + compatible = "friendlyelec,nanopi-m6v2", "rockchip,rk3588s"; + + /delete-node/ analog-sound; + + analog-sound { + compatible = "simple-audio-card"; + pinctrl-names = "default"; + pinctrl-0 = <&hp_det>; + + simple-audio-card,name = "everest,es8389-codec"; + simple-audio-card,format = "i2s"; + simple-audio-card,mclk-fs = <256>; + simple-audio-card,hp-det-gpios = <&gpio1 RK_PC4 GPIO_ACTIVE_LOW>; + + simple-audio-card,widgets = + "Headphone", "Headphones", + "Microphone", "Microphone Jack"; + simple-audio-card,routing = + "Headphones", "HPOL", + "Headphones", "HPOR", + "INPUT1", "Microphone Jack", + "INPUT2", "Microphone Jack"; + + simple-audio-card,cpu { + sound-dai = <&i2s0_8ch>; + }; + + simple-audio-card,codec { + sound-dai = <&es8389>; + }; + }; + + gpio-keys { + compatible = "gpio-keys"; + pinctrl-names = "default"; + pinctrl-0 = <&user_btn>; + + user-button { + debounce-interval = <20>; + gpios = <&gpio0 RK_PD3 GPIO_ACTIVE_LOW>; + label = "USER_BTN"; + linux,code = ; + wakeup-source; + }; + }; +}; + +&i2c7 { + es8389: audio-codec@10 { + compatible = "everest,es8389"; + reg = <0x10>; + assigned-clocks = <&cru I2S0_8CH_MCLKOUT>; + assigned-clock-rates = <12288000>; + clocks = <&cru I2S0_8CH_MCLKOUT>; + clock-names = "mclk"; + pinctrl-names = "default"; + pinctrl-0 = <&i2s0_mclk>; + #sound-dai-cells = <0>; + }; +}; + +&i2s0_8ch { + /delete-node/ port; +}; + +&rgmii_phy1 { + compatible = "ethernet-phy-ieee802.3-c22"; +}; + +&pinctrl { + gpio-keys { + user_btn: user-btn { + rockchip,pins = <0 RK_PD3 RK_FUNC_GPIO &pcfg_pull_up>; + }; + }; +}; diff --git a/patch/kernel/archive/rockchip64-7.2/dt/rk3588s-nanopi-m6v2.dts b/patch/kernel/archive/rockchip64-7.2/dt/rk3588s-nanopi-m6v2.dts new file mode 100644 index 000000000000..b520c4771f0a --- /dev/null +++ b/patch/kernel/archive/rockchip64-7.2/dt/rk3588s-nanopi-m6v2.dts @@ -0,0 +1,86 @@ +// SPDX-License-Identifier: (GPL-2.0+ OR MIT) + +/dts-v1/; + +#include "rk3588s-nanopi-m6.dts" + +/delete-node/ &rt5616; + +/ { + model = "FriendlyElec NanoPi M6 v2"; + compatible = "friendlyelec,nanopi-m6v2", "rockchip,rk3588s"; + + /delete-node/ analog-sound; + + analog-sound { + compatible = "simple-audio-card"; + pinctrl-names = "default"; + pinctrl-0 = <&hp_det>; + + simple-audio-card,name = "everest,es8389-codec"; + simple-audio-card,format = "i2s"; + simple-audio-card,mclk-fs = <256>; + simple-audio-card,hp-det-gpios = <&gpio1 RK_PC4 GPIO_ACTIVE_LOW>; + + simple-audio-card,widgets = + "Headphone", "Headphones", + "Microphone", "Microphone Jack"; + simple-audio-card,routing = + "Headphones", "HPOL", + "Headphones", "HPOR", + "INPUT1", "Microphone Jack", + "INPUT2", "Microphone Jack"; + + simple-audio-card,cpu { + sound-dai = <&i2s0_8ch>; + }; + + simple-audio-card,codec { + sound-dai = <&es8389>; + }; + }; + + gpio-keys { + compatible = "gpio-keys"; + pinctrl-names = "default"; + pinctrl-0 = <&user_btn>; + + user-button { + debounce-interval = <20>; + gpios = <&gpio0 RK_PD3 GPIO_ACTIVE_LOW>; + label = "USER_BTN"; + linux,code = ; + wakeup-source; + }; + }; +}; + +&i2c7 { + es8389: audio-codec@10 { + compatible = "everest,es8389"; + reg = <0x10>; + assigned-clocks = <&cru I2S0_8CH_MCLKOUT>; + assigned-clock-rates = <12288000>; + clocks = <&cru I2S0_8CH_MCLKOUT>; + clock-names = "mclk"; + pinctrl-names = "default"; + pinctrl-0 = <&i2s0_mclk>; + #sound-dai-cells = <0>; + }; +}; + +&i2s0_8ch { + /delete-node/ port; +}; + +&rgmii_phy1 { + compatible = "ethernet-phy-ieee802.3-c22"; +}; + +&pinctrl { + gpio-keys { + user_btn: user-btn { + rockchip,pins = <0 RK_PD3 RK_FUNC_GPIO &pcfg_pull_up>; + }; + }; +}; diff --git a/patch/u-boot/v2026.07/board_nanopi6-series/0003-add-support-for-NanoPi-M6V2-board.patch b/patch/u-boot/v2026.07/board_nanopi6-series/0003-add-support-for-NanoPi-M6V2-board.patch new file mode 100644 index 000000000000..9254b61de6a7 --- /dev/null +++ b/patch/u-boot/v2026.07/board_nanopi6-series/0003-add-support-for-NanoPi-M6V2-board.patch @@ -0,0 +1,74 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Muhammed Efe Cetin +Date: Sat, 15 Aug 2026 21:27:41 +0200 +Subject: add support for NanoPi M6V2 board + +--- + board/friendlyelec/nanopi6-series-rk3588s/nanopi6-series-rk3588s.c | 13 +++++++--- + configs/nanopi6-series-rk3588s_defconfig | 3 ++- + 2 files changed, 11 insertions(+), 5 deletions(-) + +diff --git a/board/friendlyelec/nanopi6-series-rk3588s/nanopi6-series-rk3588s.c b/board/friendlyelec/nanopi6-series-rk3588s/nanopi6-series-rk3588s.c +index 111111111111..222222222222 100644 +--- a/board/friendlyelec/nanopi6-series-rk3588s/nanopi6-series-rk3588s.c ++++ b/board/friendlyelec/nanopi6-series-rk3588s/nanopi6-series-rk3588s.c +@@ -32,6 +32,7 @@ static const struct board_model board_models[] = { + { 1372, 1644, "rockchip/rk3588s-nanopi-r6c.dtb", "nanopi6_model=r6c" }, // 4Gb variant + + { 2704, 2932, "rockchip/rk3588s-nanopi-m6.dtb", "nanopi6_model=m6" }, ++ { 3184, 3444, "rockchip/rk3588s-nanopi-m6v2.dtb", "nanopi6_model=m6v2" }, + }; + + static const struct board_model *get_board_model(void) +@@ -60,10 +61,10 @@ static unsigned int bootrom_boot_source(void) + return readl(BROM_BOOTSOURCE_ID_ADDR); + } + +-// Return true if the board bootes is NanoPi M6, based on the detected board model. ++// Return true if the board bootes is NanoPi M6/M6V2, based on the detected board model. + static bool is_m6(const struct board_model *model) + { +- return model && !strcmp(model->cmdline_arg, "nanopi6_model=m6"); ++ return model && (!strcmp(model->cmdline_arg, "nanopi6_model=m6") || !strcmp(model->cmdline_arg, "nanopi6_model=m6v2")); + } + + // Return true if the board booted from SPI, based on the BootROM boot source ID. +@@ -138,8 +139,12 @@ int board_fit_config_name_match(const char *name) + return -EINVAL; + + /* Keep SFC active in U-Boot proper when SPL loaded it from M6 FSPI-M0. */ +- fit_name = booted_from_m6_spi(model) ? +- "rockchip/rk3588s-nanopi-m6-spi.dtb" : model->fdtfile; ++ if (booted_from_m6_spi(model)) { ++ fit_name = !strcmp(model->cmdline_arg, "nanopi6_model=m6v2") ? ++ "rockchip/rk3588s-nanopi-m6v2-spi.dtb" : "rockchip/rk3588s-nanopi-m6-spi.dtb"; ++ } else { ++ fit_name = model->fdtfile; ++ } + if (!strcmp(name, fit_name)) + return 0; + +diff --git a/configs/nanopi6-series-rk3588s_defconfig b/configs/nanopi6-series-rk3588s_defconfig +index 111111111111..222222222222 100644 +--- a/configs/nanopi6-series-rk3588s_defconfig ++++ b/configs/nanopi6-series-rk3588s_defconfig +@@ -47,7 +47,7 @@ CONFIG_CMD_REGULATOR=y + # CONFIG_SPL_DOS_PARTITION is not set + CONFIG_SPL_OF_CONTROL=y + CONFIG_OF_LIVE=y +-CONFIG_OF_LIST="rockchip/rk3588s-nanopi6-series rockchip/rk3588s-nanopi-r6s rockchip/rk3588s-nanopi-r6c rockchip/rk3588s-nanopi-m6 rockchip/rk3588s-nanopi-m6-spi" ++CONFIG_OF_LIST="rockchip/rk3588s-nanopi6-series rockchip/rk3588s-nanopi-r6s rockchip/rk3588s-nanopi-r6c rockchip/rk3588s-nanopi-m6 rockchip/rk3588s-nanopi-m6-spi rockchip/rk3588s-nanopi-m6v2 rockchip/rk3588s-nanopi-m6v2-spi" + CONFIG_OF_SPL_REMOVE_PROPS="clock-names interrupt-parent assigned-clocks assigned-clock-rates assigned-clock-parents" + CONFIG_ENV_RELOC_GD_ENV_ADDR=y + CONFIG_SPL_DM_SEQ_ALIAS=y +@@ -77,6 +77,7 @@ CONFIG_SPI_FLASH_XMC=y + CONFIG_SPI_FLASH_XTX=y + CONFIG_SPI_FLASH_MTD=y + CONFIG_PHY_REALTEK=y ++CONFIG_PHY_MOTORCOMM=y + CONFIG_DM_ETH=y + CONFIG_DM_MDIO=y + CONFIG_PHY_GIGE=y +-- +Armbian + diff --git a/patch/u-boot/v2026.07/dt_uboot/rk3588s-nanopi-m6v2-spi-u-boot.dtsi b/patch/u-boot/v2026.07/dt_uboot/rk3588s-nanopi-m6v2-spi-u-boot.dtsi new file mode 100644 index 000000000000..8049264b0180 --- /dev/null +++ b/patch/u-boot/v2026.07/dt_uboot/rk3588s-nanopi-m6v2-spi-u-boot.dtsi @@ -0,0 +1 @@ +#include "rk3588s-nanopi-m6-spi-u-boot.dtsi" diff --git a/patch/u-boot/v2026.07/dt_uboot/rk3588s-nanopi-m6v2-u-boot.dtsi b/patch/u-boot/v2026.07/dt_uboot/rk3588s-nanopi-m6v2-u-boot.dtsi new file mode 100644 index 000000000000..28098558b292 --- /dev/null +++ b/patch/u-boot/v2026.07/dt_uboot/rk3588s-nanopi-m6v2-u-boot.dtsi @@ -0,0 +1 @@ +#include "rk3588s-nanopi-m6-u-boot.dtsi" diff --git a/patch/u-boot/v2026.07/dt_upstream_rockchip/rk3588s-nanopi-m6v2-spi.dts b/patch/u-boot/v2026.07/dt_upstream_rockchip/rk3588s-nanopi-m6v2-spi.dts new file mode 100644 index 000000000000..a4e83651e423 --- /dev/null +++ b/patch/u-boot/v2026.07/dt_upstream_rockchip/rk3588s-nanopi-m6v2-spi.dts @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: (GPL-2.0+ OR MIT) + +/dts-v1/; + +#include "rk3588s-nanopi-m6v2.dts" + +/ { + model = "FriendlyElec NanoPi M6 v2 (SPI)"; + compatible = "friendlyelec,nanopi-m6v2", "rockchip,rk3588s"; +}; + +&sdhci { + status = "disabled"; +}; + +&sfc { + pinctrl-names = "default"; + pinctrl-0 = <&fspim0_pins>; + status = "okay"; + + flash@0 { + compatible = "jedec,spi-nor"; + reg = <0x0>; + spi-max-frequency = <50000000>; + spi-rx-bus-width = <4>; + spi-tx-bus-width = <1>; + }; +}; diff --git a/patch/u-boot/v2026.07/dt_upstream_rockchip/rk3588s-nanopi-m6v2.dts b/patch/u-boot/v2026.07/dt_upstream_rockchip/rk3588s-nanopi-m6v2.dts new file mode 100644 index 000000000000..b520c4771f0a --- /dev/null +++ b/patch/u-boot/v2026.07/dt_upstream_rockchip/rk3588s-nanopi-m6v2.dts @@ -0,0 +1,86 @@ +// SPDX-License-Identifier: (GPL-2.0+ OR MIT) + +/dts-v1/; + +#include "rk3588s-nanopi-m6.dts" + +/delete-node/ &rt5616; + +/ { + model = "FriendlyElec NanoPi M6 v2"; + compatible = "friendlyelec,nanopi-m6v2", "rockchip,rk3588s"; + + /delete-node/ analog-sound; + + analog-sound { + compatible = "simple-audio-card"; + pinctrl-names = "default"; + pinctrl-0 = <&hp_det>; + + simple-audio-card,name = "everest,es8389-codec"; + simple-audio-card,format = "i2s"; + simple-audio-card,mclk-fs = <256>; + simple-audio-card,hp-det-gpios = <&gpio1 RK_PC4 GPIO_ACTIVE_LOW>; + + simple-audio-card,widgets = + "Headphone", "Headphones", + "Microphone", "Microphone Jack"; + simple-audio-card,routing = + "Headphones", "HPOL", + "Headphones", "HPOR", + "INPUT1", "Microphone Jack", + "INPUT2", "Microphone Jack"; + + simple-audio-card,cpu { + sound-dai = <&i2s0_8ch>; + }; + + simple-audio-card,codec { + sound-dai = <&es8389>; + }; + }; + + gpio-keys { + compatible = "gpio-keys"; + pinctrl-names = "default"; + pinctrl-0 = <&user_btn>; + + user-button { + debounce-interval = <20>; + gpios = <&gpio0 RK_PD3 GPIO_ACTIVE_LOW>; + label = "USER_BTN"; + linux,code = ; + wakeup-source; + }; + }; +}; + +&i2c7 { + es8389: audio-codec@10 { + compatible = "everest,es8389"; + reg = <0x10>; + assigned-clocks = <&cru I2S0_8CH_MCLKOUT>; + assigned-clock-rates = <12288000>; + clocks = <&cru I2S0_8CH_MCLKOUT>; + clock-names = "mclk"; + pinctrl-names = "default"; + pinctrl-0 = <&i2s0_mclk>; + #sound-dai-cells = <0>; + }; +}; + +&i2s0_8ch { + /delete-node/ port; +}; + +&rgmii_phy1 { + compatible = "ethernet-phy-ieee802.3-c22"; +}; + +&pinctrl { + gpio-keys { + user_btn: user-btn { + rockchip,pins = <0 RK_PD3 RK_FUNC_GPIO &pcfg_pull_up>; + }; + }; +};