target: Add rockchip target
authorRISCi_ATOM <bob@bobcall.me>
Mon, 9 Jan 2023 17:43:48 +0000 (12:43 -0500)
committerRISCi_ATOM <bob@bobcall.me>
Mon, 9 Jan 2023 17:43:48 +0000 (12:43 -0500)
This adds initial support for the rockchip target, including the TPE-R1400.
arm-trusted-firmware and uboot for this target needs a little bit of work to support
other targets.

40 files changed:
package/boot/arm-trusted-firmware-rockchip/Makefile [new file with mode: 0755]
package/boot/uboot-rockchip/Makefile [new file with mode: 0755]
package/boot/uboot-rockchip/patches/001-scripts-remove-dependency-on-swig.patch [new file with mode: 0755]
package/boot/uboot-rockchip/patches/002-spl-remove-dtoc-of-pdata-generation.patch [new file with mode: 0755]
package/boot/uboot-rockchip/patches/003-fixup-compatible-old-dtc.patch [new file with mode: 0755]
package/boot/uboot-rockchip/patches/100-rockchip-rk3328-Add-support-for-FriendlyARM-NanoPi-R.patch [new file with mode: 0755]
package/boot/uboot-rockchip/patches/101-rockchip-rk3328-Add-support-for-ThinkPenguin-TPE-R1400.patch [new file with mode: 0755]
package/boot/uboot-rockchip/src/of-platdata/nanopi-r2s-rk3328/dt-platdata.c [new file with mode: 0755]
package/boot/uboot-rockchip/src/of-platdata/nanopi-r2s-rk3328/dt-structs-gen.h [new file with mode: 0755]
package/boot/uboot-rockchip/src/of-platdata/tpe-r1400-rk3328/dt-platdata.c [new file with mode: 0755]
package/boot/uboot-rockchip/src/of-platdata/tpe-r1400-rk3328/dt-structs-gen.h [new file with mode: 0755]
target/linux/rockchip/Makefile [new file with mode: 0755]
target/linux/rockchip/armv8/base-files/etc/board.d/01_leds [new file with mode: 0755]
target/linux/rockchip/armv8/base-files/etc/board.d/02_network [new file with mode: 0755]
target/linux/rockchip/armv8/base-files/etc/hotplug.d/net/40-net-smp-affinity [new file with mode: 0755]
target/linux/rockchip/armv8/base-files/etc/modules.d/10-bcmdhd [new file with mode: 0755]
target/linux/rockchip/armv8/base-files/etc/modules.d/10-ledtrig-netdev [new file with mode: 0755]
target/linux/rockchip/armv8/base-files/etc/modules.d/10-rtl8812au [new file with mode: 0755]
target/linux/rockchip/armv8/base-files/etc/modules.d/10-rtl8821cu [new file with mode: 0755]
target/linux/rockchip/armv8/base-files/etc/modules.d/10-rtl8822bu [new file with mode: 0755]
target/linux/rockchip/armv8/base-files/lib/preinit/79_move_config [new file with mode: 0755]
target/linux/rockchip/armv8/base-files/lib/upgrade/platform.sh [new file with mode: 0755]
target/linux/rockchip/armv8/config-default [new file with mode: 0755]
target/linux/rockchip/armv8/target.mk [new file with mode: 0755]
target/linux/rockchip/config-4.14 [new file with mode: 0755]
target/linux/rockchip/image/Makefile [new file with mode: 0755]
target/linux/rockchip/image/armv8.mk [new file with mode: 0755]
target/linux/rockchip/image/mmc.bootscript [new file with mode: 0755]
target/linux/rockchip/image/nanopi-r2s.bootscript [new file with mode: 0755]
target/linux/rockchip/image/tpe-r1400.bootscript [new file with mode: 0755]
target/linux/rockchip/patches-4.14/001-rockchip-rk3328-Add-support-for-FriendlyARM-NanoPi-R.patch [new file with mode: 0755]
target/linux/rockchip/patches-4.14/002-net-usb-r8152-add-LED-configuration-from-OF.patch [new file with mode: 0644]
target/linux/rockchip/patches-4.14/003-dt-bindings-net-add-RTL8152-binding-documentation.patch [new file with mode: 0755]
target/linux/rockchip/patches-4.14/004-arm64-dts-rockchip-Add-txpbl-node-for-RK3399-RK3328.patch [new file with mode: 0755]
target/linux/rockchip/patches-4.14/005-rockchip-rk3328-add-compatible-to-NanoPi-R2S-etherne.patch [new file with mode: 0755]
target/linux/rockchip/patches-4.14/006-rockchip-rk3328-Add-support-for-ThinkPenguin-TPE-R1400.patch [new file with mode: 0755]
target/linux/rockchip/patches-4.14/100-rockchip-use-system-LED-for-OpenWrt.patch [new file with mode: 0755]
target/linux/rockchip/patches-4.14/101-dts-rockchip-add-usb3-controller-node-for-RK3328-SoCs.patch [new file with mode: 0755]
target/linux/rockchip/patches-4.14/102-rockchip-enable-LAN-port-on-NanoPi-R2S.patch [new file with mode: 0755]
target/linux/rockchip/patches-4.14/103-arm64-rockchip-add-OF-node-for-USB-eth-on-NanoPi-R2S.patch [new file with mode: 0755]

diff --git a/package/boot/arm-trusted-firmware-rockchip/Makefile b/package/boot/arm-trusted-firmware-rockchip/Makefile
new file mode 100755 (executable)
index 0000000..a290c65
--- /dev/null
@@ -0,0 +1,51 @@
+#
+# Copyright (C) 2017 Hauke Mehrtens
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=arm-trusted-firmware-rockchip
+PKG_RELEASE:=1
+
+PKG_SOURCE_PROTO:=git
+PKG_SOURCE_URL=https://github.com/ARM-software/arm-trusted-firmware
+PKG_SOURCE_DATE:=2021-10-13
+PKG_SOURCE_VERSION:=fa1e016766fa5e289bcb0071d79dfb803d31be71
+PKG_MIRROR_HASH:=0e5b7ca16861270f6c8924c8e2451208477e38febac6a6cb0e0d4f9388122462
+
+PKG_LICENSE:=BSD-3-Clause
+PKG_LICENSE_FILES:=license.md
+
+PKG_MAINTAINER:=Hauke Mehrtens <hauke@hauke-m.de>
+
+include $(INCLUDE_DIR)/package.mk
+
+
+define Package/arm-trusted-firmware-rockchip
+    SECTION:=boot
+    CATEGORY:=Boot Loaders
+    TITLE:=ARM Trusted Firmware for Rockchip
+    DEPENDS:=@TARGET_rockchip_armv8
+endef
+
+export GCC_HONOUR_COPTS=s
+
+MAKE_VARS = \
+       CROSS_COMPILE="$(TARGET_CROSS)"
+
+MAKE_FLAGS += \
+       PLAT=rk3328 \
+       bl31
+
+define Build/InstallDev
+       $(INSTALL_DIR) $(STAGING_DIR_IMAGE)
+       $(CP) $(PKG_BUILD_DIR)/build/rk3328/release/bl31/bl31.elf $(STAGING_DIR_IMAGE)/rk3328_bl31.elf
+endef
+
+define Package/arm-trusted-firmware-rockchip/install
+endef
+
+$(eval $(call BuildPackage,arm-trusted-firmware-rockchip))
diff --git a/package/boot/uboot-rockchip/Makefile b/package/boot/uboot-rockchip/Makefile
new file mode 100755 (executable)
index 0000000..d62173d
--- /dev/null
@@ -0,0 +1,106 @@
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+include $(TOPDIR)/rules.mk
+include $(INCLUDE_DIR)/kernel.mk
+
+PKG_VERSION:=2020.07
+PKG_RELEASE:=3
+
+PKG_HASH:=c1f5bf9ee6bb6e648edbf19ce2ca9452f614b08a9f886f1a566aa42e8cf05f6a
+
+PKG_MAINTAINER:=Tobias Maedel <openwrt@tbspace.de>
+
+include $(INCLUDE_DIR)/u-boot.mk
+include $(INCLUDE_DIR)/package.mk
+
+define U-Boot/Default
+  BUILD_TARGET:=rockchip
+  UENV:=default
+  HIDDEN:=1
+endef
+
+
+# RK3328 boards
+
+define U-Boot/nanopi-r2s-rk3328
+  BUILD_SUBTARGET:=armv8
+  NAME:=NanoPi R2S
+  BUILD_DEVICES:= \
+    friendlyarm_nanopi-r2s
+  DEPENDS:=+PACKAGE_u-boot-nanopi-r2s-rk3328:arm-trusted-firmware-rockchip
+  PKG_BUILD_DEPENDS:=arm-trusted-firmware-rockchip
+  ATF:=rk3328_bl31.elf
+  OF_PLATDATA:=$(1)
+endef
+
+define U-Boot/tpe-r1400-rk3328
+  BUILD_SUBTARGET:=armv8
+  NAME:=TPE-R1400
+  BUILD_DEVICES:= \
+    thinkpenguin_tpe-r1400
+  DEPENDS:=+PACKAGE_u-boot-tpe-r1400-rk3328:arm-trusted-firmware-rockchip
+  PKG_BUILD_DEPENDS:=arm-trusted-firmware-rockchip
+  ATF:=rk3328_bl31.elf
+  OF_PLATDATA:=$(1)
+endef
+
+# RK3399 boards
+
+define U-Boot/rock-pi-4-rk3399
+  BUILD_SUBTARGET:=armv8
+  NAME:=Rock Pi 4
+  BUILD_DEVICES:= \
+    radxa_rock-pi-4
+  DEPENDS:=+PACKAGE_u-boot-rock-pi-4-rk3399:arm-trusted-firmware-rockchip
+  PKG_BUILD_DEPENDS:=arm-trusted-firmware-rockchip
+  ATF:=rk3399_bl31.elf
+endef
+
+define U-Boot/rockpro64-rk3399
+  BUILD_SUBTARGET:=armv8
+  NAME:=RockPro64
+  BUILD_DEVICES:= \
+    pine64_rockpro64
+  DEPENDS:=+PACKAGE_u-boot-rockpro64-rk3399:arm-trusted-firmware-rockchip
+  PKG_BUILD_DEPENDS:=arm-trusted-firmware-rockchip
+  ATF:=rk3399_bl31.elf
+endef
+
+UBOOT_TARGETS := \
+  rock-pi-4-rk3399 \
+  rockpro64-rk3399 \
+  nanopi-r2s-rk3328 \
+  tpe-r1400-rk3328
+
+UBOOT_CONFIGURE_VARS += USE_PRIVATE_LIBGCC=yes
+
+UBOOT_MAKE_FLAGS += \
+  BL31=$(STAGING_DIR_IMAGE)/$(ATF)
+
+define Build/Configure
+       $(call Build/Configure/U-Boot)
+
+ifneq ($(OF_PLATDATA),)
+       mkdir -p $(PKG_BUILD_DIR)/tpl/dts
+       mkdir -p $(PKG_BUILD_DIR)/include/generated
+
+       $(CP) $(PKG_BUILD_DIR)/of-platdata/$(OF_PLATDATA)/dt-platdata.c $(PKG_BUILD_DIR)/tpl/dts/dt-platdata.c
+       $(CP) $(PKG_BUILD_DIR)/of-platdata/$(OF_PLATDATA)/dt-structs-gen.h $(PKG_BUILD_DIR)/include/generated/dt-structs-gen.h
+endif
+
+       $(SED) 's#CONFIG_MKIMAGE_DTC_PATH=.*#CONFIG_MKIMAGE_DTC_PATH="$(PKG_BUILD_DIR)/scripts/dtc/dtc"#g' $(PKG_BUILD_DIR)/.config
+       echo 'CONFIG_IDENT_STRING=" OpenWrt"' >> $(PKG_BUILD_DIR)/.config
+endef
+
+define Build/InstallDev
+       $(INSTALL_DIR) $(STAGING_DIR_IMAGE)
+       $(CP) $(PKG_BUILD_DIR)/idbloader.img $(STAGING_DIR_IMAGE)/$(BUILD_VARIANT)-idbloader.img
+       $(CP) $(PKG_BUILD_DIR)/u-boot.itb $(STAGING_DIR_IMAGE)/$(BUILD_VARIANT)-u-boot.itb
+endef
+
+define Package/u-boot/install/default
+endef
+
+$(eval $(call BuildPackage/U-Boot))
diff --git a/package/boot/uboot-rockchip/patches/001-scripts-remove-dependency-on-swig.patch b/package/boot/uboot-rockchip/patches/001-scripts-remove-dependency-on-swig.patch
new file mode 100755 (executable)
index 0000000..0505589
--- /dev/null
@@ -0,0 +1,24 @@
+From b137ca16b54c67d76714ea5a0138741959b0dc29 Mon Sep 17 00:00:00 2001
+From: David Bauer <mail@david-bauer.net>
+Date: Mon, 13 Jul 2020 23:37:37 +0200
+Subject: [PATCH] scripts: remove dependency on swig
+
+Don't build the libfdt tool, as it has a dependency on swig (which
+OpenWrt does not ship).
+
+This requires more hacks, as of-platdata generation does not work
+without it.
+
+Signed-off-by: David Bauer <mail@david-bauer.net>
+---
+ scripts/dtc/Makefile | 2 --
+ 1 file changed, 2 deletions(-)
+
+--- a/scripts/dtc/Makefile
++++ b/scripts/dtc/Makefile
+@@ -18,5 +18,3 @@ HOSTCFLAGS_dtc-parser.tab.o := -I$(src)
+ # dependencies on generated files need to be listed explicitly
+ $(obj)/dtc-lexer.lex.o: $(obj)/dtc-parser.tab.h
+-# Added for U-Boot
+-subdir-$(CONFIG_PYLIBFDT) += pylibfdt
diff --git a/package/boot/uboot-rockchip/patches/002-spl-remove-dtoc-of-pdata-generation.patch b/package/boot/uboot-rockchip/patches/002-spl-remove-dtoc-of-pdata-generation.patch
new file mode 100755 (executable)
index 0000000..4161c46
--- /dev/null
@@ -0,0 +1,32 @@
+From 55273cf6079ddd3b006da69f0113c2c66c03f17e Mon Sep 17 00:00:00 2001
+From: David Bauer <mail@david-bauer.net>
+Date: Tue, 14 Jul 2020 22:44:22 +0200
+Subject: [PATCH] spl: remove dtoc of-pdata generation
+
+Remove the dtoc of-pdata generation. This generation is dependant on
+libpython-dev. As OpenWrt does not ship with this dependency, use
+pre-generated pdata files and remove the generation from the
+build-process.
+
+This only affects RK3328 boards.
+
+Signed-off-by: David Bauer <mail@david-bauer.net>
+---
+ scripts/Makefile.spl | 6 ------
+ 1 file changed, 6 deletions(-)
+
+--- a/scripts/Makefile.spl
++++ b/scripts/Makefile.spl
+@@ -320,12 +320,6 @@ PHONY += dts_dir
+ dts_dir:
+       $(shell [ -d $(obj)/dts ] || mkdir -p $(obj)/dts)
+-include/generated/dt-structs-gen.h: $(obj)/$(SPL_BIN).dtb dts_dir FORCE
+-      $(call if_changed,dtoch)
+-
+-$(obj)/dts/dt-platdata.c: $(obj)/$(SPL_BIN).dtb dts_dir FORCE
+-      $(call if_changed,dtocc)
+-
+ ifdef CONFIG_SAMSUNG
+ ifdef CONFIG_VAR_SIZE_SPL
+ VAR_SIZE_PARAM = --vs
diff --git a/package/boot/uboot-rockchip/patches/003-fixup-compatible-old-dtc.patch b/package/boot/uboot-rockchip/patches/003-fixup-compatible-old-dtc.patch
new file mode 100755 (executable)
index 0000000..0d727ce
--- /dev/null
@@ -0,0 +1,62 @@
+--- a/scripts/Kbuild.include
++++ b/scripts/Kbuild.include
+@@ -175,6 +175,11 @@ ld-version = $(shell $(LD) --version | $
+ # Usage:  $(call ld-ifversion, -ge, 22252, y)
+ ld-ifversion = $(shell [ $(ld-version) $(1) $(2) ] && echo $(3) || echo $(4))
++# dtc-option
++# Usage:  DTC_FLAGS += $(call dtc-option,-Wno-unit_address_vs_reg)
++dtc-option = $(call try-run,\
++      echo '/dts-v1/; / {};' | $(DTC) $(1),$(1),$(2))
++
+ ######
+ ###
+--- a/scripts/Makefile.extrawarn
++++ b/scripts/Makefile.extrawarn
+@@ -55,5 +55,4 @@ ifeq ("$(strip $(warning))","")
+ endif
+ KBUILD_CFLAGS += $(warning)
+-
+ endif
+--- a/scripts/Makefile.lib
++++ b/scripts/Makefile.lib
+@@ -271,24 +271,24 @@ cmd_gzip = (cat $(filter-out FORCE,$^) |
+ # Disable noisy checks by default
+ ifeq ($(findstring 1,$(KBUILD_ENABLE_EXTRA_GCC_CHECKS)),)
+-DTC_FLAGS += -Wno-unit_address_vs_reg \
+-      -Wno-unit_address_format \
+-      -Wno-avoid_unnecessary_addr_size \
+-      -Wno-alias_paths \
+-      -Wno-graph_child_address \
+-      -Wno-graph_port \
+-      -Wno-unique_unit_address \
+-      -Wno-simple_bus_reg \
+-      -Wno-pci_device_reg
++DTC_FLAGS += $(call dtc-option,-Wno-unit_address_vs_reg) \
++      $(call dtc-option,-Wno-unit_address_format) \
++      $(call dtc-option,-Wno-avoid_unnecessary_addr_size) \
++      $(call dtc-option,-Wno-alias_paths) \
++      $(call dtc-option,-Wno-graph_child_address) \
++      $(call dtc-option,-Wno-graph_port) \
++      $(call dtc-option,-Wno-unique_unit_address) \
++      $(call dtc-option,-Wno-simple_bus_reg) \
++      $(call dtc-option,-Wno-pci_device_reg)
+ # U-Boot specific disables
+-DTC_FLAGS += -Wno-pci_bridge \
+-        -Wno-pci_device_bus_num
++DTC_FLAGS += $(call dtc-option,-Wno-pci_bridge) \
++      $(call dtc-option,-Wno-pci_device_bus_num)
+ endif
+ ifneq ($(findstring 2,$(KBUILD_ENABLE_EXTRA_GCC_CHECKS)),)
+-DTC_FLAGS += -Wnode_name_chars_strict \
+-      -Wproperty_name_chars_strict
++DTC_FLAGS += $(call dtc-option,-Wnode_name_chars_strict) \
++      $(call dtc-option,-Wproperty_name_chars_strict)
+ endif
+ DTC_FLAGS += $(DTC_FLAGS_$(basetarget))
diff --git a/package/boot/uboot-rockchip/patches/100-rockchip-rk3328-Add-support-for-FriendlyARM-NanoPi-R.patch b/package/boot/uboot-rockchip/patches/100-rockchip-rk3328-Add-support-for-FriendlyARM-NanoPi-R.patch
new file mode 100755 (executable)
index 0000000..bc65fb6
--- /dev/null
@@ -0,0 +1,530 @@
+From 67f4c228c2bf515386cd54073104dc2e6eae85ea Mon Sep 17 00:00:00 2001
+From: David Bauer <mail@david-bauer.net>
+Date: Fri, 10 Jul 2020 14:58:30 +0200
+Subject: [PATCH] rockchip: rk3328: Add support for FriendlyARM NanoPi R2S
+
+This adds support for the NanoPi R2S from FriendlyArm.
+
+Rockchip RK3328 SoC
+1GB DDR4 RAM
+Gigabit Ethernet (WAN)
+Gigabit Ethernet (USB3) (LAN)
+USB 2.0 Host Port
+MicroSD slot
+Reset button
+WAN - LAN - SYS LED
+
+Signed-off-by: David Bauer <mail@david-bauer.net>
+---
+ arch/arm/dts/Makefile                      |   1 +
+ arch/arm/dts/rk3328-nanopi-r2s-u-boot.dtsi |  34 +++
+ arch/arm/dts/rk3328-nanopi-r2s.dts         | 334 +++++++++++++++++++++
+ board/rockchip/evb_rk3328/MAINTAINERS      |   7 +
+ configs/nanopi-r2s-rk3328_defconfig        |  99 ++++++
+ 5 files changed, 475 insertions(+)
+ create mode 100644 arch/arm/dts/rk3328-nanopi-r2s-u-boot.dtsi
+ create mode 100644 arch/arm/dts/rk3328-nanopi-r2s.dts
+ create mode 100644 configs/nanopi-r2s-rk3328_defconfig
+
+--- a/arch/arm/dts/Makefile
++++ b/arch/arm/dts/Makefile
+@@ -106,6 +106,7 @@ dtb-$(CONFIG_ROCKCHIP_RK3308) += \
+ dtb-$(CONFIG_ROCKCHIP_RK3328) += \
+       rk3328-evb.dtb \
++      rk3328-nanopi-r2s.dtb \
+       rk3328-roc-cc.dtb \
+       rk3328-rock64.dtb \
+       rk3328-rock-pi-e.dtb
+--- /dev/null
++++ b/arch/arm/dts/rk3328-nanopi-r2s-u-boot.dtsi
+@@ -0,0 +1,34 @@
++// SPDX-License-Identifier: GPL-2.0+
++/*
++ * (C) Copyright 2018-2019 Rockchip Electronics Co., Ltd
++ * (C) Copyright 2020 David Bauer
++ */
++
++#include "rk3328-u-boot.dtsi"
++#include "rk3328-sdram-ddr4-666.dtsi"
++/ {
++      chosen {
++              u-boot,spl-boot-order = "same-as-spl", &sdmmc, &emmc;
++      };
++};
++
++&gpio0 {
++      u-boot,dm-spl;
++};
++
++&pinctrl {
++      u-boot,dm-spl;
++};
++
++&sdmmc0m1_gpio {
++      u-boot,dm-spl;
++};
++
++&pcfg_pull_up_4ma {
++      u-boot,dm-spl;
++};
++
++/* Need this and all the pinctrl/gpio stuff above to set pinmux */
++&vcc_sd {
++      u-boot,dm-spl;
++};
+--- /dev/null
++++ b/arch/arm/dts/rk3328-nanopi-r2s.dts
+@@ -0,0 +1,334 @@
++// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
++/*
++ * Copyright (c) 2020 David Bauer <mail@david-bauer.net>
++ */
++
++/dts-v1/;
++
++#include <dt-bindings/input/input.h>
++#include <dt-bindings/gpio/gpio.h>
++#include "rk3328.dtsi"
++
++/ {
++      model = "FriendlyARM NanoPi R2S";
++      compatible = "friendlyarm,nanopi-r2s", "rockchip,rk3328";
++
++      chosen {
++              stdout-path = "serial2:1500000n8";
++      };
++
++      gmac_clkin: external-gmac-clock {
++              compatible = "fixed-clock";
++              clock-frequency = <125000000>;
++              clock-output-names = "gmac_clkin";
++              #clock-cells = <0>;
++      };
++
++      vcc_sd: sdmmc-regulator {
++              compatible = "regulator-fixed";
++              gpio = <&gpio0 RK_PD6 GPIO_ACTIVE_LOW>;
++              pinctrl-names = "default";
++              pinctrl-0 = <&sdmmc0m1_gpio>;
++              regulator-name = "vcc_sd";
++              regulator-min-microvolt = <3300000>;
++              regulator-max-microvolt = <3300000>;
++              vin-supply = <&vcc_io>;
++      };
++
++      vcc_sdio: sdmmcio-regulator {
++              compatible = "regulator-gpio";
++              gpios = <&gpio1 RK_PD4 GPIO_ACTIVE_HIGH>;
++              enable-active-high;
++              states = <1800000 0x1
++                        3300000 0x0>;
++              pinctrl-names = "default";
++              pinctrl-0 = <&sdio_vcc_pin>;
++              regulator-always-on;
++              regulator-min-microvolt = <1800000>;
++              regulator-max-microvolt = <3300000>;
++              regulator-name = "vcc_sdio";
++              regulator-settling-time-us = <5000>;
++              regulator-type = "voltage";
++              vin-supply = <&vcc_io>;
++      };
++
++      vcc_sys: vcc-sys {
++              compatible = "regulator-fixed";
++              regulator-name = "vcc_sys";
++              regulator-always-on;
++              regulator-boot-on;
++              regulator-min-microvolt = <5000000>;
++              regulator-max-microvolt = <5000000>;
++      };
++
++      leds {
++              compatible = "gpio-leds";
++
++              pinctrl-names = "default";
++              pinctrl-0 = <&led_pins>;
++
++              sys {
++                      gpios = <&gpio0 RK_PA2 GPIO_ACTIVE_HIGH>;
++                      label = "nanopi-r2s:red:sys";
++              };
++
++              lan {
++                      gpios = <&gpio2 RK_PB7 GPIO_ACTIVE_HIGH>;
++                      label = "nanopi-r2s:green:lan";
++              };
++
++              wan {
++                      gpios = <&gpio2 RK_PC2 GPIO_ACTIVE_HIGH>;
++                      label = "nanopi-r2s:green:wan";
++              };
++      };
++
++      gpio_keys {
++              compatible = "gpio-keys-polled";
++              poll-interval = <100>;
++
++              pinctrl-names = "default";
++              pinctrl-0 = <&button_pins>;
++
++              reset {
++                      label = "Reset Button";
++                      gpios = <&gpio0 RK_PA0 GPIO_ACTIVE_LOW>;
++                      linux,code = <KEY_RESTART>;
++                      debounce-interval = <50>;
++              };
++      };
++};
++
++&cpu0 {
++      cpu-supply = <&vdd_arm>;
++};
++
++&cpu1 {
++      cpu-supply = <&vdd_arm>;
++};
++
++&cpu2 {
++      cpu-supply = <&vdd_arm>;
++};
++
++&cpu3 {
++      cpu-supply = <&vdd_arm>;
++};
++
++&gmac2io {
++      assigned-clocks = <&cru SCLK_MAC2IO>, <&cru SCLK_MAC2IO_EXT>;
++      assigned-clock-parents = <&gmac_clkin>, <&gmac_clkin>;
++      clock_in_out = "input";
++      phy-supply = <&vcc_io>;
++      phy-handle = <&rtl8211e>;
++      phy-mode = "rgmii";
++      pinctrl-names = "default";
++      pinctrl-0 = <&rgmiim1_pins>;
++      snps,aal;
++      snps,reset-gpio = <&gpio1 RK_PC2 GPIO_ACTIVE_LOW>;
++      snps,reset-active-low;
++      snps,reset-delays-us = <0 10000 50000>;
++      tx_delay = <0x24>;
++      rx_delay = <0x18>;
++      status = "okay";
++
++      mdio {
++              compatible = "snps,dwmac-mdio";
++              #address-cells = <1>;
++              #size-cells = <0>;
++
++              rtl8211e: ethernet-phy@0 {
++                      reg = <0>;
++              };
++      };
++};
++
++&i2c1 {
++      status = "okay";
++
++      rk805: rk805@18 {
++              compatible = "rockchip,rk805";
++              reg = <0x18>;
++              interrupt-parent = <&gpio2>;
++              interrupts = <6 IRQ_TYPE_LEVEL_LOW>;
++              #clock-cells = <1>;
++              clock-output-names = "xin32k", "rk805-clkout2";
++              gpio-controller;
++              #gpio-cells = <2>;
++              pinctrl-names = "default";
++              pinctrl-0 = <&pmic_int_l>;
++              rockchip,system-power-controller;
++              wakeup-source;
++
++              vcc1-supply = <&vcc_sys>;
++              vcc2-supply = <&vcc_sys>;
++              vcc3-supply = <&vcc_sys>;
++              vcc4-supply = <&vcc_sys>;
++              vcc5-supply = <&vcc_io>;
++              vcc6-supply = <&vcc_sys>;
++
++              regulators {
++                      vdd_logic: DCDC_REG1 {
++                              regulator-name = "vdd_logic";
++                              regulator-min-microvolt = <712500>;
++                              regulator-max-microvolt = <1450000>;
++                              regulator-ramp-delay = <12500>;
++                              regulator-always-on;
++                              regulator-boot-on;
++                              regulator-state-mem {
++                                      regulator-on-in-suspend;
++                                      regulator-suspend-microvolt = <1000000>;
++                              };
++                      };
++
++                      vdd_arm: DCDC_REG2 {
++                              regulator-name = "vdd_arm";
++                              regulator-min-microvolt = <712500>;
++                              regulator-max-microvolt = <1450000>;
++                              regulator-ramp-delay = <12500>;
++                              regulator-always-on;
++                              regulator-boot-on;
++                              regulator-state-mem {
++                                      regulator-on-in-suspend;
++                                      regulator-suspend-microvolt = <950000>;
++                              };
++                      };
++
++                      vcc_ddr: DCDC_REG3 {
++                              regulator-name = "vcc_ddr";
++                              regulator-always-on;
++                              regulator-boot-on;
++                              regulator-state-mem {
++                                      regulator-on-in-suspend;
++                              };
++                      };
++
++                      vcc_io: DCDC_REG4 {
++                              regulator-name = "vcc_io";
++                              regulator-min-microvolt = <3300000>;
++                              regulator-max-microvolt = <3300000>;
++                              regulator-always-on;
++                              regulator-boot-on;
++                              regulator-state-mem {
++                                      regulator-on-in-suspend;
++                                      regulator-suspend-microvolt = <3300000>;
++                              };
++                      };
++
++                      vcc_18: LDO_REG1 {
++                              regulator-name = "vcc_18";
++                              regulator-min-microvolt = <1800000>;
++                              regulator-max-microvolt = <1800000>;
++                              regulator-always-on;
++                              regulator-boot-on;
++                              regulator-state-mem {
++                                      regulator-on-in-suspend;
++                                      regulator-suspend-microvolt = <1800000>;
++                              };
++                      };
++
++                      vcc18_emmc: LDO_REG2 {
++                              regulator-name = "vcc18_emmc";
++                              regulator-min-microvolt = <1800000>;
++                              regulator-max-microvolt = <1800000>;
++                              regulator-always-on;
++                              regulator-boot-on;
++                              regulator-state-mem {
++                                      regulator-on-in-suspend;
++                                      regulator-suspend-microvolt = <1800000>;
++                              };
++                      };
++
++                      vdd_10: LDO_REG3 {
++                              regulator-name = "vdd_10";
++                              regulator-min-microvolt = <1000000>;
++                              regulator-max-microvolt = <1000000>;
++                              regulator-always-on;
++                              regulator-boot-on;
++                              regulator-state-mem {
++                                      regulator-on-in-suspend;
++                                      regulator-suspend-microvolt = <1000000>;
++                              };
++                      };
++              };
++      };
++};
++
++&io_domains {
++      status = "okay";
++
++      vccio1-supply = <&vcc_io>;
++      vccio2-supply = <&vcc18_emmc>;
++      vccio3-supply = <&vcc_sdio>;
++      vccio4-supply = <&vcc_18>;
++      vccio5-supply = <&vcc_io>;
++      vccio6-supply = <&vcc_io>;
++      pmuio-supply = <&vcc_io>;
++};
++
++&pinctrl {
++      leds {
++              led_pins: led-pins {
++                      rockchip,pins = <0 RK_PA2 RK_FUNC_GPIO &pcfg_pull_none>,
++                                                      <2 RK_PB7 RK_FUNC_GPIO &pcfg_pull_none>,
++                                                      <2 RK_PC2 RK_FUNC_GPIO &pcfg_pull_none>;
++              };
++      };
++
++      button {
++              button_pins: button-pins {
++                      rockchip,pins = <0 RK_PA0 RK_FUNC_GPIO &pcfg_pull_none>;
++              };
++      };
++
++      pmic {
++              pmic_int_l: pmic-int-l {
++                      rockchip,pins = <2 RK_PA6 RK_FUNC_GPIO &pcfg_pull_up>;
++              };
++      };
++
++      sd {
++              sdio_vcc_pin: sdio-vcc-pin {
++                      rockchip,pins = <1 RK_PD4 RK_FUNC_GPIO &pcfg_pull_up>;
++              };
++      };
++};
++
++&sdmmc {
++      bus-width = <4>;
++      cap-mmc-highspeed;
++      cap-sd-highspeed;
++      disable-wp;
++      max-frequency = <150000000>;
++      pinctrl-names = "default";
++      pinctrl-0 = <&sdmmc0_clk &sdmmc0_cmd &sdmmc0_dectn &sdmmc0_bus4>;
++      vmmc-supply = <&vcc_sd>;
++      vqmmc-supply = <&vcc_sdio>;
++      status = "okay";
++};
++
++&tsadc {
++      rockchip,hw-tshut-mode = <0>;
++      rockchip,hw-tshut-polarity = <0>;
++      status = "okay";
++};
++
++&uart2 {
++      status = "okay";
++};
++
++&u2phy {
++      status = "okay";
++
++      u2phy_host: host-port {
++              status = "okay";
++      };
++};
++
++&usb_host0_ehci {
++      status = "okay";
++};
++
++&usb_host0_ohci {
++      status = "okay";
++};
+--- a/board/rockchip/evb_rk3328/MAINTAINERS
++++ b/board/rockchip/evb_rk3328/MAINTAINERS
+@@ -5,6 +5,13 @@ F:      board/rockchip/evb_rk3328
+ F:      include/configs/evb_rk3328.h
+ F:      configs/evb-rk3328_defconfig
++NANOPI-R2S-RK3328
++M:      David Bauer <mail@david-bauer.net>
++S:      Maintained
++F:      configs/nanopi-r2s-rk3328_defconfig
++F:      arch/arm/dts/rk3328-nanopi-r2s-u-boot.dtsi
++F:      arch/arm/dts/rk3328-nanopi-r2s.dts
++
+ ROC-RK3328-CC
+ M:      Loic Devulder <ldevulder@suse.com>
+ M:      Chen-Yu Tsai <wens@csie.org>
+--- /dev/null
++++ b/configs/nanopi-r2s-rk3328_defconfig
+@@ -0,0 +1,99 @@
++CONFIG_ARM=y
++CONFIG_ARCH_ROCKCHIP=y
++CONFIG_SYS_TEXT_BASE=0x00200000
++CONFIG_SPL_GPIO_SUPPORT=y
++CONFIG_ENV_OFFSET=0x3F8000
++CONFIG_ROCKCHIP_RK3328=y
++CONFIG_TPL_ROCKCHIP_COMMON_BOARD=y
++CONFIG_TPL_LIBCOMMON_SUPPORT=y
++CONFIG_TPL_LIBGENERIC_SUPPORT=y
++CONFIG_SPL_DRIVERS_MISC_SUPPORT=y
++CONFIG_SPL_STACK_R_ADDR=0x600000
++CONFIG_NR_DRAM_BANKS=1
++CONFIG_DEBUG_UART_BASE=0xFF130000
++CONFIG_DEBUG_UART_CLOCK=24000000
++CONFIG_SMBIOS_PRODUCT_NAME="nanopi_r2s_rk3328"
++CONFIG_DEBUG_UART=y
++CONFIG_TPL_SYS_MALLOC_F_LEN=0x800
++# CONFIG_ANDROID_BOOT_IMAGE is not set
++CONFIG_FIT=y
++CONFIG_FIT_VERBOSE=y
++CONFIG_SPL_LOAD_FIT=y
++CONFIG_DEFAULT_FDT_FILE="rockchip/rk3328-nanopi-r2s.dtb"
++CONFIG_MISC_INIT_R=y
++# CONFIG_DISPLAY_CPUINFO is not set
++CONFIG_DISPLAY_BOARDINFO_LATE=y
++# CONFIG_SPL_RAW_IMAGE_SUPPORT is not set
++CONFIG_TPL_SYS_MALLOC_SIMPLE=y
++CONFIG_SPL_STACK_R=y
++CONFIG_SPL_I2C_SUPPORT=y
++CONFIG_SPL_POWER_SUPPORT=y
++CONFIG_SPL_ATF=y
++CONFIG_SPL_ATF_NO_PLATFORM_PARAM=y
++CONFIG_CMD_BOOTZ=y
++CONFIG_CMD_GPT=y
++CONFIG_CMD_MMC=y
++CONFIG_CMD_USB=y
++# CONFIG_CMD_SETEXPR is not set
++CONFIG_CMD_TIME=y
++CONFIG_SPL_OF_CONTROL=y
++CONFIG_TPL_OF_CONTROL=y
++CONFIG_DEFAULT_DEVICE_TREE="rk3328-nanopi-r2s"
++CONFIG_OF_SPL_REMOVE_PROPS="clock-names interrupt-parent assigned-clocks assigned-clock-rates assigned-clock-parents"
++CONFIG_TPL_OF_PLATDATA=y
++CONFIG_ENV_IS_IN_MMC=y
++CONFIG_SYS_RELOC_GD_ENV_ADDR=y
++CONFIG_NET_RANDOM_ETHADDR=y
++CONFIG_TPL_DM=y
++CONFIG_REGMAP=y
++CONFIG_SPL_REGMAP=y
++CONFIG_TPL_REGMAP=y
++CONFIG_SYSCON=y
++CONFIG_SPL_SYSCON=y
++CONFIG_TPL_SYSCON=y
++CONFIG_CLK=y
++CONFIG_SPL_CLK=y
++CONFIG_FASTBOOT_BUF_ADDR=0x800800
++CONFIG_FASTBOOT_CMD_OEM_FORMAT=y
++CONFIG_ROCKCHIP_GPIO=y
++CONFIG_SYS_I2C_ROCKCHIP=y
++CONFIG_MMC_DW=y
++CONFIG_MMC_DW_ROCKCHIP=y
++CONFIG_SF_DEFAULT_SPEED=20000000
++CONFIG_DM_ETH=y
++CONFIG_ETH_DESIGNWARE=y
++CONFIG_GMAC_ROCKCHIP=y
++CONFIG_PINCTRL=y
++CONFIG_SPL_PINCTRL=y
++CONFIG_DM_PMIC=y
++CONFIG_PMIC_RK8XX=y
++CONFIG_SPL_DM_REGULATOR=y
++CONFIG_REGULATOR_PWM=y
++CONFIG_DM_REGULATOR_FIXED=y
++CONFIG_SPL_DM_REGULATOR_FIXED=y
++CONFIG_REGULATOR_RK8XX=y
++CONFIG_PWM_ROCKCHIP=y
++CONFIG_RAM=y
++CONFIG_SPL_RAM=y
++CONFIG_TPL_RAM=y
++CONFIG_DM_RESET=y
++CONFIG_BAUDRATE=1500000
++CONFIG_DEBUG_UART_SHIFT=2
++CONFIG_SYSRESET=y
++# CONFIG_TPL_SYSRESET is not set
++CONFIG_USB=y
++CONFIG_USB_XHCI_HCD=y
++CONFIG_USB_XHCI_DWC3=y
++CONFIG_USB_EHCI_HCD=y
++CONFIG_USB_EHCI_GENERIC=y
++CONFIG_USB_OHCI_HCD=y
++CONFIG_USB_OHCI_GENERIC=y
++CONFIG_USB_DWC2=y
++CONFIG_USB_DWC3=y
++# CONFIG_USB_DWC3_GADGET is not set
++CONFIG_USB_GADGET=y
++CONFIG_USB_GADGET_DWC2_OTG=y
++CONFIG_SPL_TINY_MEMSET=y
++CONFIG_TPL_TINY_MEMSET=y
++CONFIG_ERRNO_STR=y
++CONFIG_SMBIOS_MANUFACTURER="pine64"
diff --git a/package/boot/uboot-rockchip/patches/101-rockchip-rk3328-Add-support-for-ThinkPenguin-TPE-R1400.patch b/package/boot/uboot-rockchip/patches/101-rockchip-rk3328-Add-support-for-ThinkPenguin-TPE-R1400.patch
new file mode 100755 (executable)
index 0000000..bb054de
--- /dev/null
@@ -0,0 +1,486 @@
+--- a/arch/arm/dts/Makefile
++++ b/arch/arm/dts/Makefile
+@@ -107,6 +107,7 @@ dtb-$(CONFIG_ROCKCHIP_RK3308) += \
+ dtb-$(CONFIG_ROCKCHIP_RK3328) += \
+       rk3328-evb.dtb \
+       rk3328-nanopi-r2s.dtb \
++      rk3328-tpe-r1400.dtb \
+       rk3328-roc-cc.dtb \
+       rk3328-rock64.dtb \
+       rk3328-rock-pi-e.dtb
+--- /dev/null
++++ b/arch/arm/dts/rk3328-tpe-r1400-u-boot.dtsi
+@@ -0,0 +1,34 @@
++// SPDX-License-Identifier: GPL-2.0+
++/*
++ * (C) Copyright 2018-2019 Rockchip Electronics Co., Ltd
++ * (C) Copyright 2020 David Bauer
++ */
++
++#include "rk3328-u-boot.dtsi"
++#include "rk3328-sdram-ddr4-666.dtsi"
++/ {
++      chosen {
++              u-boot,spl-boot-order = "same-as-spl", &sdmmc, &emmc;
++      };
++};
++
++&gpio0 {
++      u-boot,dm-spl;
++};
++
++&pinctrl {
++      u-boot,dm-spl;
++};
++
++&sdmmc0m1_gpio {
++      u-boot,dm-spl;
++};
++
++&pcfg_pull_up_4ma {
++      u-boot,dm-spl;
++};
++
++/* Need this and all the pinctrl/gpio stuff above to set pinmux */
++&vcc_sd {
++      u-boot,dm-spl;
++};
+--- /dev/null
++++ b/arch/arm/dts/rk3328-tpe-r1400.dts
+@@ -0,0 +1,334 @@
++// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
++/*
++ * Copyright (c) 2020 David Bauer <mail@david-bauer.net>
++ */
++
++/dts-v1/;
++
++#include <dt-bindings/input/input.h>
++#include <dt-bindings/gpio/gpio.h>
++#include "rk3328.dtsi"
++
++/ {
++      model = "ThinkPenguin TPE-R1400";
++      compatible = "thinkpenguin,tpe-r1400", "rockchip,rk3328";
++
++      chosen {
++              stdout-path = "serial2:1500000n8";
++      };
++
++      gmac_clkin: external-gmac-clock {
++              compatible = "fixed-clock";
++              clock-frequency = <125000000>;
++              clock-output-names = "gmac_clkin";
++              #clock-cells = <0>;
++      };
++
++      vcc_sd: sdmmc-regulator {
++              compatible = "regulator-fixed";
++              gpio = <&gpio0 RK_PD6 GPIO_ACTIVE_LOW>;
++              pinctrl-names = "default";
++              pinctrl-0 = <&sdmmc0m1_gpio>;
++              regulator-name = "vcc_sd";
++              regulator-min-microvolt = <3300000>;
++              regulator-max-microvolt = <3300000>;
++              vin-supply = <&vcc_io>;
++      };
++
++      vcc_sdio: sdmmcio-regulator {
++              compatible = "regulator-gpio";
++              gpios = <&gpio1 RK_PD4 GPIO_ACTIVE_HIGH>;
++              enable-active-high;
++              states = <1800000 0x1
++                        3300000 0x0>;
++              pinctrl-names = "default";
++              pinctrl-0 = <&sdio_vcc_pin>;
++              regulator-always-on;
++              regulator-min-microvolt = <1800000>;
++              regulator-max-microvolt = <3300000>;
++              regulator-name = "vcc_sdio";
++              regulator-settling-time-us = <5000>;
++              regulator-type = "voltage";
++              vin-supply = <&vcc_io>;
++      };
++
++      vcc_sys: vcc-sys {
++              compatible = "regulator-fixed";
++              regulator-name = "vcc_sys";
++              regulator-always-on;
++              regulator-boot-on;
++              regulator-min-microvolt = <5000000>;
++              regulator-max-microvolt = <5000000>;
++      };
++
++      leds {
++              compatible = "gpio-leds";
++
++              pinctrl-names = "default";
++              pinctrl-0 = <&led_pins>;
++
++              sys {
++                      gpios = <&gpio0 RK_PA2 GPIO_ACTIVE_HIGH>;
++                      label = "tpe-r1400:red:sys";
++              };
++
++              lan {
++                      gpios = <&gpio2 RK_PB7 GPIO_ACTIVE_HIGH>;
++                      label = "tpe-r1400:green:lan";
++              };
++
++              wan {
++                      gpios = <&gpio2 RK_PC2 GPIO_ACTIVE_HIGH>;
++                      label = "tpe-r1400:green:wan";
++              };
++      };
++
++      gpio_keys {
++              compatible = "gpio-keys-polled";
++              poll-interval = <100>;
++
++              pinctrl-names = "default";
++              pinctrl-0 = <&button_pins>;
++
++              reset {
++                      label = "Reset Button";
++                      gpios = <&gpio0 RK_PA0 GPIO_ACTIVE_LOW>;
++                      linux,code = <KEY_RESTART>;
++                      debounce-interval = <50>;
++              };
++      };
++};
++
++&cpu0 {
++      cpu-supply = <&vdd_arm>;
++};
++
++&cpu1 {
++      cpu-supply = <&vdd_arm>;
++};
++
++&cpu2 {
++      cpu-supply = <&vdd_arm>;
++};
++
++&cpu3 {
++      cpu-supply = <&vdd_arm>;
++};
++
++&gmac2io {
++      assigned-clocks = <&cru SCLK_MAC2IO>, <&cru SCLK_MAC2IO_EXT>;
++      assigned-clock-parents = <&gmac_clkin>, <&gmac_clkin>;
++      clock_in_out = "input";
++      phy-supply = <&vcc_io>;
++      phy-handle = <&rtl8211e>;
++      phy-mode = "rgmii";
++      pinctrl-names = "default";
++      pinctrl-0 = <&rgmiim1_pins>;
++      snps,aal;
++      snps,reset-gpio = <&gpio1 RK_PC2 GPIO_ACTIVE_LOW>;
++      snps,reset-active-low;
++      snps,reset-delays-us = <0 10000 50000>;
++      tx_delay = <0x24>;
++      rx_delay = <0x18>;
++      status = "okay";
++
++      mdio {
++              compatible = "snps,dwmac-mdio";
++              #address-cells = <1>;
++              #size-cells = <0>;
++
++              rtl8211e: ethernet-phy@0 {
++                      reg = <0>;
++              };
++      };
++};
++
++&i2c1 {
++      status = "okay";
++
++      rk805: rk805@18 {
++              compatible = "rockchip,rk805";
++              reg = <0x18>;
++              interrupt-parent = <&gpio2>;
++              interrupts = <6 IRQ_TYPE_LEVEL_LOW>;
++              #clock-cells = <1>;
++              clock-output-names = "xin32k", "rk805-clkout2";
++              gpio-controller;
++              #gpio-cells = <2>;
++              pinctrl-names = "default";
++              pinctrl-0 = <&pmic_int_l>;
++              rockchip,system-power-controller;
++              wakeup-source;
++
++              vcc1-supply = <&vcc_sys>;
++              vcc2-supply = <&vcc_sys>;
++              vcc3-supply = <&vcc_sys>;
++              vcc4-supply = <&vcc_sys>;
++              vcc5-supply = <&vcc_io>;
++              vcc6-supply = <&vcc_sys>;
++
++              regulators {
++                      vdd_logic: DCDC_REG1 {
++                              regulator-name = "vdd_logic";
++                              regulator-min-microvolt = <712500>;
++                              regulator-max-microvolt = <1450000>;
++                              regulator-ramp-delay = <12500>;
++                              regulator-always-on;
++                              regulator-boot-on;
++                              regulator-state-mem {
++                                      regulator-on-in-suspend;
++                                      regulator-suspend-microvolt = <1000000>;
++                              };
++                      };
++
++                      vdd_arm: DCDC_REG2 {
++                              regulator-name = "vdd_arm";
++                              regulator-min-microvolt = <712500>;
++                              regulator-max-microvolt = <1450000>;
++                              regulator-ramp-delay = <12500>;
++                              regulator-always-on;
++                              regulator-boot-on;
++                              regulator-state-mem {
++                                      regulator-on-in-suspend;
++                                      regulator-suspend-microvolt = <950000>;
++                              };
++                      };
++
++                      vcc_ddr: DCDC_REG3 {
++                              regulator-name = "vcc_ddr";
++                              regulator-always-on;
++                              regulator-boot-on;
++                              regulator-state-mem {
++                                      regulator-on-in-suspend;
++                              };
++                      };
++
++                      vcc_io: DCDC_REG4 {
++                              regulator-name = "vcc_io";
++                              regulator-min-microvolt = <3300000>;
++                              regulator-max-microvolt = <3300000>;
++                              regulator-always-on;
++                              regulator-boot-on;
++                              regulator-state-mem {
++                                      regulator-on-in-suspend;
++                                      regulator-suspend-microvolt = <3300000>;
++                              };
++                      };
++
++                      vcc_18: LDO_REG1 {
++                              regulator-name = "vcc_18";
++                              regulator-min-microvolt = <1800000>;
++                              regulator-max-microvolt = <1800000>;
++                              regulator-always-on;
++                              regulator-boot-on;
++                              regulator-state-mem {
++                                      regulator-on-in-suspend;
++                                      regulator-suspend-microvolt = <1800000>;
++                              };
++                      };
++
++                      vcc18_emmc: LDO_REG2 {
++                              regulator-name = "vcc18_emmc";
++                              regulator-min-microvolt = <1800000>;
++                              regulator-max-microvolt = <1800000>;
++                              regulator-always-on;
++                              regulator-boot-on;
++                              regulator-state-mem {
++                                      regulator-on-in-suspend;
++                                      regulator-suspend-microvolt = <1800000>;
++                              };
++                      };
++
++                      vdd_10: LDO_REG3 {
++                              regulator-name = "vdd_10";
++                              regulator-min-microvolt = <1000000>;
++                              regulator-max-microvolt = <1000000>;
++                              regulator-always-on;
++                              regulator-boot-on;
++                              regulator-state-mem {
++                                      regulator-on-in-suspend;
++                                      regulator-suspend-microvolt = <1000000>;
++                              };
++                      };
++              };
++      };
++};
++
++&io_domains {
++      status = "okay";
++
++      vccio1-supply = <&vcc_io>;
++      vccio2-supply = <&vcc18_emmc>;
++      vccio3-supply = <&vcc_sdio>;
++      vccio4-supply = <&vcc_18>;
++      vccio5-supply = <&vcc_io>;
++      vccio6-supply = <&vcc_io>;
++      pmuio-supply = <&vcc_io>;
++};
++
++&pinctrl {
++      leds {
++              led_pins: led-pins {
++                      rockchip,pins = <0 RK_PA2 RK_FUNC_GPIO &pcfg_pull_none>,
++                                                      <2 RK_PB7 RK_FUNC_GPIO &pcfg_pull_none>,
++                                                      <2 RK_PC2 RK_FUNC_GPIO &pcfg_pull_none>;
++              };
++      };
++
++      button {
++              button_pins: button-pins {
++                      rockchip,pins = <0 RK_PA0 RK_FUNC_GPIO &pcfg_pull_none>;
++              };
++      };
++
++      pmic {
++              pmic_int_l: pmic-int-l {
++                      rockchip,pins = <2 RK_PA6 RK_FUNC_GPIO &pcfg_pull_up>;
++              };
++      };
++
++      sd {
++              sdio_vcc_pin: sdio-vcc-pin {
++                      rockchip,pins = <1 RK_PD4 RK_FUNC_GPIO &pcfg_pull_up>;
++              };
++      };
++};
++
++&sdmmc {
++      bus-width = <4>;
++      cap-mmc-highspeed;
++      cap-sd-highspeed;
++      disable-wp;
++      max-frequency = <150000000>;
++      pinctrl-names = "default";
++      pinctrl-0 = <&sdmmc0_clk &sdmmc0_cmd &sdmmc0_dectn &sdmmc0_bus4>;
++      vmmc-supply = <&vcc_sd>;
++      vqmmc-supply = <&vcc_sdio>;
++      status = "okay";
++};
++
++&tsadc {
++      rockchip,hw-tshut-mode = <0>;
++      rockchip,hw-tshut-polarity = <0>;
++      status = "okay";
++};
++
++&uart2 {
++      status = "okay";
++};
++
++&u2phy {
++      status = "okay";
++
++      u2phy_host: host-port {
++              status = "okay";
++      };
++};
++
++&usb_host0_ehci {
++      status = "okay";
++};
++
++&usb_host0_ohci {
++      status = "okay";
++};
+--- /dev/null
++++ b/configs/tpe-r1400-rk3328_defconfig
+@@ -0,0 +1,99 @@
++CONFIG_ARM=y
++CONFIG_ARCH_ROCKCHIP=y
++CONFIG_SYS_TEXT_BASE=0x00200000
++CONFIG_SPL_GPIO_SUPPORT=y
++CONFIG_ENV_OFFSET=0x3F8000
++CONFIG_ROCKCHIP_RK3328=y
++CONFIG_TPL_ROCKCHIP_COMMON_BOARD=y
++CONFIG_TPL_LIBCOMMON_SUPPORT=y
++CONFIG_TPL_LIBGENERIC_SUPPORT=y
++CONFIG_SPL_DRIVERS_MISC_SUPPORT=y
++CONFIG_SPL_STACK_R_ADDR=0x600000
++CONFIG_NR_DRAM_BANKS=1
++CONFIG_DEBUG_UART_BASE=0xFF130000
++CONFIG_DEBUG_UART_CLOCK=24000000
++CONFIG_SMBIOS_PRODUCT_NAME="tpe_r1400_rk3328"
++CONFIG_DEBUG_UART=y
++CONFIG_TPL_SYS_MALLOC_F_LEN=0x800
++# CONFIG_ANDROID_BOOT_IMAGE is not set
++CONFIG_FIT=y
++CONFIG_FIT_VERBOSE=y
++CONFIG_SPL_LOAD_FIT=y
++CONFIG_DEFAULT_FDT_FILE="rockchip/rk3328-tpe-r1400.dtb"
++CONFIG_MISC_INIT_R=y
++# CONFIG_DISPLAY_CPUINFO is not set
++CONFIG_DISPLAY_BOARDINFO_LATE=y
++# CONFIG_SPL_RAW_IMAGE_SUPPORT is not set
++CONFIG_TPL_SYS_MALLOC_SIMPLE=y
++CONFIG_SPL_STACK_R=y
++CONFIG_SPL_I2C_SUPPORT=y
++CONFIG_SPL_POWER_SUPPORT=y
++CONFIG_SPL_ATF=y
++CONFIG_SPL_ATF_NO_PLATFORM_PARAM=y
++CONFIG_CMD_BOOTZ=y
++CONFIG_CMD_GPT=y
++CONFIG_CMD_MMC=y
++CONFIG_CMD_USB=y
++# CONFIG_CMD_SETEXPR is not set
++CONFIG_CMD_TIME=y
++CONFIG_SPL_OF_CONTROL=y
++CONFIG_TPL_OF_CONTROL=y
++CONFIG_DEFAULT_DEVICE_TREE="rk3328-tpe-r1400"
++CONFIG_OF_SPL_REMOVE_PROPS="clock-names interrupt-parent assigned-clocks assigned-clock-rates assigned-clock-parents"
++CONFIG_TPL_OF_PLATDATA=y
++CONFIG_ENV_IS_IN_MMC=y
++CONFIG_SYS_RELOC_GD_ENV_ADDR=y
++CONFIG_NET_RANDOM_ETHADDR=y
++CONFIG_TPL_DM=y
++CONFIG_REGMAP=y
++CONFIG_SPL_REGMAP=y
++CONFIG_TPL_REGMAP=y
++CONFIG_SYSCON=y
++CONFIG_SPL_SYSCON=y
++CONFIG_TPL_SYSCON=y
++CONFIG_CLK=y
++CONFIG_SPL_CLK=y
++CONFIG_FASTBOOT_BUF_ADDR=0x800800
++CONFIG_FASTBOOT_CMD_OEM_FORMAT=y
++CONFIG_ROCKCHIP_GPIO=y
++CONFIG_SYS_I2C_ROCKCHIP=y
++CONFIG_MMC_DW=y
++CONFIG_MMC_DW_ROCKCHIP=y
++CONFIG_SF_DEFAULT_SPEED=20000000
++CONFIG_DM_ETH=y
++CONFIG_ETH_DESIGNWARE=y
++CONFIG_GMAC_ROCKCHIP=y
++CONFIG_PINCTRL=y
++CONFIG_SPL_PINCTRL=y
++CONFIG_DM_PMIC=y
++CONFIG_PMIC_RK8XX=y
++CONFIG_SPL_DM_REGULATOR=y
++CONFIG_REGULATOR_PWM=y
++CONFIG_DM_REGULATOR_FIXED=y
++CONFIG_SPL_DM_REGULATOR_FIXED=y
++CONFIG_REGULATOR_RK8XX=y
++CONFIG_PWM_ROCKCHIP=y
++CONFIG_RAM=y
++CONFIG_SPL_RAM=y
++CONFIG_TPL_RAM=y
++CONFIG_DM_RESET=y
++CONFIG_BAUDRATE=1500000
++CONFIG_DEBUG_UART_SHIFT=2
++CONFIG_SYSRESET=y
++# CONFIG_TPL_SYSRESET is not set
++CONFIG_USB=y
++CONFIG_USB_XHCI_HCD=y
++CONFIG_USB_XHCI_DWC3=y
++CONFIG_USB_EHCI_HCD=y
++CONFIG_USB_EHCI_GENERIC=y
++CONFIG_USB_OHCI_HCD=y
++CONFIG_USB_OHCI_GENERIC=y
++CONFIG_USB_DWC2=y
++CONFIG_USB_DWC3=y
++# CONFIG_USB_DWC3_GADGET is not set
++CONFIG_USB_GADGET=y
++CONFIG_USB_GADGET_DWC2_OTG=y
++CONFIG_SPL_TINY_MEMSET=y
++CONFIG_TPL_TINY_MEMSET=y
++CONFIG_ERRNO_STR=y
++CONFIG_SMBIOS_MANUFACTURER="pine64"
diff --git a/package/boot/uboot-rockchip/src/of-platdata/nanopi-r2s-rk3328/dt-platdata.c b/package/boot/uboot-rockchip/src/of-platdata/nanopi-r2s-rk3328/dt-platdata.c
new file mode 100755 (executable)
index 0000000..fa42c1a
--- /dev/null
@@ -0,0 +1,149 @@
+/*
+ * DO NOT MODIFY
+ *
+ * This file was generated by dtoc from a .dtb (device tree binary) file.
+ */
+
+#include <common.h>
+#include <dm.h>
+#include <dt-structs.h>
+
+static const struct dtd_rockchip_rk3328_grf dtv_syscon_at_ff100000 = {
+       .reg                    = {0xff100000, 0x1000},
+};
+U_BOOT_DEVICE(syscon_at_ff100000) = {
+       .name           = "rockchip_rk3328_grf",
+       .platdata       = &dtv_syscon_at_ff100000,
+       .platdata_size  = sizeof(dtv_syscon_at_ff100000),
+};
+
+static const struct dtd_rockchip_rk3328_cru dtv_clock_controller_at_ff440000 = {
+       .reg                    = {0xff440000, 0x1000},
+       .rockchip_grf           = 0x3a,
+};
+U_BOOT_DEVICE(clock_controller_at_ff440000) = {
+       .name           = "rockchip_rk3328_cru",
+       .platdata       = &dtv_clock_controller_at_ff440000,
+       .platdata_size  = sizeof(dtv_clock_controller_at_ff440000),
+};
+
+static const struct dtd_rockchip_rk3328_uart dtv_serial_at_ff130000 = {
+       .clock_frequency        = 0x16e3600,
+       .clocks                 = {
+                       {&dtv_clock_controller_at_ff440000, {40}},
+                       {&dtv_clock_controller_at_ff440000, {212}},},
+       .dma_names              = {"tx", "rx"},
+       .dmas                   = {0x10, 0x6, 0x10, 0x7},
+       .interrupts             = {0x0, 0x39, 0x4},
+       .pinctrl_0              = 0x26,
+       .pinctrl_names          = "default",
+       .reg                    = {0xff130000, 0x100},
+       .reg_io_width           = 0x4,
+       .reg_shift              = 0x2,
+};
+U_BOOT_DEVICE(serial_at_ff130000) = {
+       .name           = "rockchip_rk3328_uart",
+       .platdata       = &dtv_serial_at_ff130000,
+       .platdata_size  = sizeof(dtv_serial_at_ff130000),
+};
+
+static const struct dtd_rockchip_rk3328_dw_mshc dtv_mmc_at_ff500000 = {
+       .bus_width              = 0x4,
+       .cap_mmc_highspeed      = true,
+       .cap_sd_highspeed       = true,
+       .clocks                 = {
+                       {&dtv_clock_controller_at_ff440000, {317}},
+                       {&dtv_clock_controller_at_ff440000, {33}},
+                       {&dtv_clock_controller_at_ff440000, {74}},
+                       {&dtv_clock_controller_at_ff440000, {78}},},
+       .disable_wp             = true,
+       .fifo_depth             = 0x100,
+       .interrupts             = {0x0, 0xc, 0x4},
+       .max_frequency          = 0x8f0d180,
+       .pinctrl_0              = {0x47, 0x48, 0x49, 0x4a},
+       .pinctrl_names          = "default",
+       .reg                    = {0xff500000, 0x4000},
+       .u_boot_spl_fifo_mode   = true,
+       .vmmc_supply            = 0x4b,
+       .vqmmc_supply           = 0x1e,
+};
+U_BOOT_DEVICE(mmc_at_ff500000) = {
+       .name           = "rockchip_rk3328_dw_mshc",
+       .platdata       = &dtv_mmc_at_ff500000,
+       .platdata_size  = sizeof(dtv_mmc_at_ff500000),
+};
+
+static const struct dtd_rockchip_rk3328_pinctrl dtv_pinctrl = {
+       .ranges                 = true,
+       .rockchip_grf           = 0x3a,
+};
+U_BOOT_DEVICE(pinctrl) = {
+       .name           = "rockchip_rk3328_pinctrl",
+       .platdata       = &dtv_pinctrl,
+       .platdata_size  = sizeof(dtv_pinctrl),
+};
+
+static const struct dtd_rockchip_gpio_bank dtv_gpio0_at_ff210000 = {
+       .clocks                 = {
+                       {&dtv_clock_controller_at_ff440000, {200}},},
+       .gpio_controller        = true,
+       .interrupt_controller   = true,
+       .interrupts             = {0x0, 0x33, 0x4},
+       .reg                    = {0xff210000, 0x100},
+};
+U_BOOT_DEVICE(gpio0_at_ff210000) = {
+       .name           = "rockchip_gpio_bank",
+       .platdata       = &dtv_gpio0_at_ff210000,
+       .platdata_size  = sizeof(dtv_gpio0_at_ff210000),
+};
+
+static const struct dtd_regulator_fixed dtv_sdmmc_regulator = {
+       .gpio                   = {0x60, 0x1e, 0x1},
+       .pinctrl_0              = 0x61,
+       .pinctrl_names          = "default",
+       .regulator_max_microvolt = 0x325aa0,
+       .regulator_min_microvolt = 0x325aa0,
+       .regulator_name         = "vcc_sd",
+       .vin_supply             = 0x1c,
+};
+U_BOOT_DEVICE(sdmmc_regulator) = {
+       .name           = "regulator_fixed",
+       .platdata       = &dtv_sdmmc_regulator,
+       .platdata_size  = sizeof(dtv_sdmmc_regulator),
+};
+
+static const struct dtd_rockchip_rk3328_dmc dtv_dmc = {
+       .reg                    = {0xff400000, 0x1000, 0xff780000, 0x3000, 0xff100000, 0x1000, 0xff440000, 0x1000,
+               0xff720000, 0x1000, 0xff798000, 0x1000},
+       .rockchip_sdram_params  = {0x1, 0xa, 0x2, 0x1, 0x0, 0x0, 0x11, 0x0,
+               0x11, 0x0, 0x0, 0x94291288, 0x0, 0x27, 0x462, 0x15,
+               0x242, 0xff, 0x14d, 0x0, 0x1, 0x0, 0x0, 0x0,
+               0x43049010, 0x64, 0x28003b, 0xd0, 0x20053, 0xd4, 0x220000, 0xd8,
+               0x100, 0xdc, 0x40000, 0xe0, 0x0, 0xe4, 0x110000, 0xe8,
+               0x420, 0xec, 0x400, 0xf4, 0xf011f, 0x100, 0x9060b06, 0x104,
+               0x20209, 0x108, 0x505040a, 0x10c, 0x40400c, 0x110, 0x5030206, 0x114,
+               0x3030202, 0x120, 0x3030b03, 0x124, 0x20208, 0x180, 0x1000040, 0x184,
+               0x0, 0x190, 0x7030003, 0x198, 0x5001100, 0x1a0, 0xc0400003, 0x240,
+               0x6000604, 0x244, 0x201, 0x250, 0xf00, 0x490, 0x1, 0xffffffff,
+               0xffffffff, 0xffffffff, 0xffffffff, 0x4, 0xc, 0x28, 0xa, 0x2c,
+               0x0, 0x30, 0x9, 0xffffffff, 0xffffffff, 0x77, 0x88, 0x79,
+               0x79, 0x87, 0x97, 0x87, 0x78, 0x77, 0x78, 0x87,
+               0x88, 0x87, 0x87, 0x77, 0x78, 0x78, 0x78, 0x78,
+               0x78, 0x78, 0x78, 0x78, 0x78, 0x69, 0x9, 0x77,
+               0x78, 0x77, 0x78, 0x77, 0x78, 0x77, 0x78, 0x77,
+               0x79, 0x9, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
+               0x78, 0x78, 0x78, 0x69, 0x9, 0x77, 0x78, 0x77,
+               0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x79, 0x9,
+               0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
+               0x78, 0x69, 0x9, 0x77, 0x78, 0x77, 0x78, 0x77,
+               0x78, 0x77, 0x78, 0x77, 0x79, 0x9, 0x78, 0x78,
+               0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x69,
+               0x9, 0x77, 0x78, 0x77, 0x77, 0x77, 0x77, 0x77,
+               0x77, 0x77, 0x79, 0x9},
+};
+U_BOOT_DEVICE(dmc) = {
+       .name           = "rockchip_rk3328_dmc",
+       .platdata       = &dtv_dmc,
+       .platdata_size  = sizeof(dtv_dmc),
+};
+
diff --git a/package/boot/uboot-rockchip/src/of-platdata/nanopi-r2s-rk3328/dt-structs-gen.h b/package/boot/uboot-rockchip/src/of-platdata/nanopi-r2s-rk3328/dt-structs-gen.h
new file mode 100755 (executable)
index 0000000..8829162
--- /dev/null
@@ -0,0 +1,72 @@
+/*
+ * DO NOT MODIFY
+ *
+ * This file was generated by dtoc from a .dtb (device tree binary) file.
+ */
+
+#include <stdbool.h>
+#include <linux/libfdt.h>
+struct dtd_regulator_fixed {
+       fdt32_t         gpio[3];
+       fdt32_t         pinctrl_0;
+       const char *    pinctrl_names;
+       fdt32_t         regulator_max_microvolt;
+       fdt32_t         regulator_min_microvolt;
+       const char *    regulator_name;
+       fdt32_t         vin_supply;
+};
+struct dtd_rockchip_gpio_bank {
+       struct phandle_1_arg clocks[1];
+       bool            gpio_controller;
+       bool            interrupt_controller;
+       fdt32_t         interrupts[3];
+       fdt64_t         reg[2];
+};
+struct dtd_rockchip_rk3328_cru {
+       fdt64_t         reg[2];
+       fdt32_t         rockchip_grf;
+};
+struct dtd_rockchip_rk3328_dmc {
+       fdt64_t         reg[12];
+       fdt32_t         rockchip_sdram_params[196];
+};
+struct dtd_rockchip_rk3328_dw_mshc {
+       fdt32_t         bus_width;
+       bool            cap_mmc_highspeed;
+       bool            cap_sd_highspeed;
+       struct phandle_1_arg clocks[4];
+       bool            disable_wp;
+       fdt32_t         fifo_depth;
+       fdt32_t         interrupts[3];
+       fdt32_t         max_frequency;
+       fdt32_t         pinctrl_0[4];
+       const char *    pinctrl_names;
+       fdt64_t         reg[2];
+       bool            u_boot_spl_fifo_mode;
+       fdt32_t         vmmc_supply;
+       fdt32_t         vqmmc_supply;
+};
+struct dtd_rockchip_rk3328_grf {
+       fdt64_t         reg[2];
+};
+struct dtd_rockchip_rk3328_pinctrl {
+       bool            ranges;
+       fdt32_t         rockchip_grf;
+};
+struct dtd_rockchip_rk3328_uart {
+       fdt32_t         clock_frequency;
+       struct phandle_1_arg clocks[2];
+       const char *    dma_names[2];
+       fdt32_t         dmas[4];
+       fdt32_t         interrupts[3];
+       fdt32_t         pinctrl_0;
+       const char *    pinctrl_names;
+       fdt64_t         reg[2];
+       fdt32_t         reg_io_width;
+       fdt32_t         reg_shift;
+};
+#define dtd_syscon dtd_rockchip_rk3328_cru
+#define dtd_simple_mfd dtd_rockchip_rk3328_grf
+#define dtd_snps_dw_apb_uart dtd_rockchip_rk3328_uart
+#define dtd_rockchip_cru dtd_rockchip_rk3328_cru
+#define dtd_rockchip_rk3288_dw_mshc dtd_rockchip_rk3328_dw_mshc
diff --git a/package/boot/uboot-rockchip/src/of-platdata/tpe-r1400-rk3328/dt-platdata.c b/package/boot/uboot-rockchip/src/of-platdata/tpe-r1400-rk3328/dt-platdata.c
new file mode 100755 (executable)
index 0000000..fa42c1a
--- /dev/null
@@ -0,0 +1,149 @@
+/*
+ * DO NOT MODIFY
+ *
+ * This file was generated by dtoc from a .dtb (device tree binary) file.
+ */
+
+#include <common.h>
+#include <dm.h>
+#include <dt-structs.h>
+
+static const struct dtd_rockchip_rk3328_grf dtv_syscon_at_ff100000 = {
+       .reg                    = {0xff100000, 0x1000},
+};
+U_BOOT_DEVICE(syscon_at_ff100000) = {
+       .name           = "rockchip_rk3328_grf",
+       .platdata       = &dtv_syscon_at_ff100000,
+       .platdata_size  = sizeof(dtv_syscon_at_ff100000),
+};
+
+static const struct dtd_rockchip_rk3328_cru dtv_clock_controller_at_ff440000 = {
+       .reg                    = {0xff440000, 0x1000},
+       .rockchip_grf           = 0x3a,
+};
+U_BOOT_DEVICE(clock_controller_at_ff440000) = {
+       .name           = "rockchip_rk3328_cru",
+       .platdata       = &dtv_clock_controller_at_ff440000,
+       .platdata_size  = sizeof(dtv_clock_controller_at_ff440000),
+};
+
+static const struct dtd_rockchip_rk3328_uart dtv_serial_at_ff130000 = {
+       .clock_frequency        = 0x16e3600,
+       .clocks                 = {
+                       {&dtv_clock_controller_at_ff440000, {40}},
+                       {&dtv_clock_controller_at_ff440000, {212}},},
+       .dma_names              = {"tx", "rx"},
+       .dmas                   = {0x10, 0x6, 0x10, 0x7},
+       .interrupts             = {0x0, 0x39, 0x4},
+       .pinctrl_0              = 0x26,
+       .pinctrl_names          = "default",
+       .reg                    = {0xff130000, 0x100},
+       .reg_io_width           = 0x4,
+       .reg_shift              = 0x2,
+};
+U_BOOT_DEVICE(serial_at_ff130000) = {
+       .name           = "rockchip_rk3328_uart",
+       .platdata       = &dtv_serial_at_ff130000,
+       .platdata_size  = sizeof(dtv_serial_at_ff130000),
+};
+
+static const struct dtd_rockchip_rk3328_dw_mshc dtv_mmc_at_ff500000 = {
+       .bus_width              = 0x4,
+       .cap_mmc_highspeed      = true,
+       .cap_sd_highspeed       = true,
+       .clocks                 = {
+                       {&dtv_clock_controller_at_ff440000, {317}},
+                       {&dtv_clock_controller_at_ff440000, {33}},
+                       {&dtv_clock_controller_at_ff440000, {74}},
+                       {&dtv_clock_controller_at_ff440000, {78}},},
+       .disable_wp             = true,
+       .fifo_depth             = 0x100,
+       .interrupts             = {0x0, 0xc, 0x4},
+       .max_frequency          = 0x8f0d180,
+       .pinctrl_0              = {0x47, 0x48, 0x49, 0x4a},
+       .pinctrl_names          = "default",
+       .reg                    = {0xff500000, 0x4000},
+       .u_boot_spl_fifo_mode   = true,
+       .vmmc_supply            = 0x4b,
+       .vqmmc_supply           = 0x1e,
+};
+U_BOOT_DEVICE(mmc_at_ff500000) = {
+       .name           = "rockchip_rk3328_dw_mshc",
+       .platdata       = &dtv_mmc_at_ff500000,
+       .platdata_size  = sizeof(dtv_mmc_at_ff500000),
+};
+
+static const struct dtd_rockchip_rk3328_pinctrl dtv_pinctrl = {
+       .ranges                 = true,
+       .rockchip_grf           = 0x3a,
+};
+U_BOOT_DEVICE(pinctrl) = {
+       .name           = "rockchip_rk3328_pinctrl",
+       .platdata       = &dtv_pinctrl,
+       .platdata_size  = sizeof(dtv_pinctrl),
+};
+
+static const struct dtd_rockchip_gpio_bank dtv_gpio0_at_ff210000 = {
+       .clocks                 = {
+                       {&dtv_clock_controller_at_ff440000, {200}},},
+       .gpio_controller        = true,
+       .interrupt_controller   = true,
+       .interrupts             = {0x0, 0x33, 0x4},
+       .reg                    = {0xff210000, 0x100},
+};
+U_BOOT_DEVICE(gpio0_at_ff210000) = {
+       .name           = "rockchip_gpio_bank",
+       .platdata       = &dtv_gpio0_at_ff210000,
+       .platdata_size  = sizeof(dtv_gpio0_at_ff210000),
+};
+
+static const struct dtd_regulator_fixed dtv_sdmmc_regulator = {
+       .gpio                   = {0x60, 0x1e, 0x1},
+       .pinctrl_0              = 0x61,
+       .pinctrl_names          = "default",
+       .regulator_max_microvolt = 0x325aa0,
+       .regulator_min_microvolt = 0x325aa0,
+       .regulator_name         = "vcc_sd",
+       .vin_supply             = 0x1c,
+};
+U_BOOT_DEVICE(sdmmc_regulator) = {
+       .name           = "regulator_fixed",
+       .platdata       = &dtv_sdmmc_regulator,
+       .platdata_size  = sizeof(dtv_sdmmc_regulator),
+};
+
+static const struct dtd_rockchip_rk3328_dmc dtv_dmc = {
+       .reg                    = {0xff400000, 0x1000, 0xff780000, 0x3000, 0xff100000, 0x1000, 0xff440000, 0x1000,
+               0xff720000, 0x1000, 0xff798000, 0x1000},
+       .rockchip_sdram_params  = {0x1, 0xa, 0x2, 0x1, 0x0, 0x0, 0x11, 0x0,
+               0x11, 0x0, 0x0, 0x94291288, 0x0, 0x27, 0x462, 0x15,
+               0x242, 0xff, 0x14d, 0x0, 0x1, 0x0, 0x0, 0x0,
+               0x43049010, 0x64, 0x28003b, 0xd0, 0x20053, 0xd4, 0x220000, 0xd8,
+               0x100, 0xdc, 0x40000, 0xe0, 0x0, 0xe4, 0x110000, 0xe8,
+               0x420, 0xec, 0x400, 0xf4, 0xf011f, 0x100, 0x9060b06, 0x104,
+               0x20209, 0x108, 0x505040a, 0x10c, 0x40400c, 0x110, 0x5030206, 0x114,
+               0x3030202, 0x120, 0x3030b03, 0x124, 0x20208, 0x180, 0x1000040, 0x184,
+               0x0, 0x190, 0x7030003, 0x198, 0x5001100, 0x1a0, 0xc0400003, 0x240,
+               0x6000604, 0x244, 0x201, 0x250, 0xf00, 0x490, 0x1, 0xffffffff,
+               0xffffffff, 0xffffffff, 0xffffffff, 0x4, 0xc, 0x28, 0xa, 0x2c,
+               0x0, 0x30, 0x9, 0xffffffff, 0xffffffff, 0x77, 0x88, 0x79,
+               0x79, 0x87, 0x97, 0x87, 0x78, 0x77, 0x78, 0x87,
+               0x88, 0x87, 0x87, 0x77, 0x78, 0x78, 0x78, 0x78,
+               0x78, 0x78, 0x78, 0x78, 0x78, 0x69, 0x9, 0x77,
+               0x78, 0x77, 0x78, 0x77, 0x78, 0x77, 0x78, 0x77,
+               0x79, 0x9, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
+               0x78, 0x78, 0x78, 0x69, 0x9, 0x77, 0x78, 0x77,
+               0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x79, 0x9,
+               0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
+               0x78, 0x69, 0x9, 0x77, 0x78, 0x77, 0x78, 0x77,
+               0x78, 0x77, 0x78, 0x77, 0x79, 0x9, 0x78, 0x78,
+               0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x69,
+               0x9, 0x77, 0x78, 0x77, 0x77, 0x77, 0x77, 0x77,
+               0x77, 0x77, 0x79, 0x9},
+};
+U_BOOT_DEVICE(dmc) = {
+       .name           = "rockchip_rk3328_dmc",
+       .platdata       = &dtv_dmc,
+       .platdata_size  = sizeof(dtv_dmc),
+};
+
diff --git a/package/boot/uboot-rockchip/src/of-platdata/tpe-r1400-rk3328/dt-structs-gen.h b/package/boot/uboot-rockchip/src/of-platdata/tpe-r1400-rk3328/dt-structs-gen.h
new file mode 100755 (executable)
index 0000000..8829162
--- /dev/null
@@ -0,0 +1,72 @@
+/*
+ * DO NOT MODIFY
+ *
+ * This file was generated by dtoc from a .dtb (device tree binary) file.
+ */
+
+#include <stdbool.h>
+#include <linux/libfdt.h>
+struct dtd_regulator_fixed {
+       fdt32_t         gpio[3];
+       fdt32_t         pinctrl_0;
+       const char *    pinctrl_names;
+       fdt32_t         regulator_max_microvolt;
+       fdt32_t         regulator_min_microvolt;
+       const char *    regulator_name;
+       fdt32_t         vin_supply;
+};
+struct dtd_rockchip_gpio_bank {
+       struct phandle_1_arg clocks[1];
+       bool            gpio_controller;
+       bool            interrupt_controller;
+       fdt32_t         interrupts[3];
+       fdt64_t         reg[2];
+};
+struct dtd_rockchip_rk3328_cru {
+       fdt64_t         reg[2];
+       fdt32_t         rockchip_grf;
+};
+struct dtd_rockchip_rk3328_dmc {
+       fdt64_t         reg[12];
+       fdt32_t         rockchip_sdram_params[196];
+};
+struct dtd_rockchip_rk3328_dw_mshc {
+       fdt32_t         bus_width;
+       bool            cap_mmc_highspeed;
+       bool            cap_sd_highspeed;
+       struct phandle_1_arg clocks[4];
+       bool            disable_wp;
+       fdt32_t         fifo_depth;
+       fdt32_t         interrupts[3];
+       fdt32_t         max_frequency;
+       fdt32_t         pinctrl_0[4];
+       const char *    pinctrl_names;
+       fdt64_t         reg[2];
+       bool            u_boot_spl_fifo_mode;
+       fdt32_t         vmmc_supply;
+       fdt32_t         vqmmc_supply;
+};
+struct dtd_rockchip_rk3328_grf {
+       fdt64_t         reg[2];
+};
+struct dtd_rockchip_rk3328_pinctrl {
+       bool            ranges;
+       fdt32_t         rockchip_grf;
+};
+struct dtd_rockchip_rk3328_uart {
+       fdt32_t         clock_frequency;
+       struct phandle_1_arg clocks[2];
+       const char *    dma_names[2];
+       fdt32_t         dmas[4];
+       fdt32_t         interrupts[3];
+       fdt32_t         pinctrl_0;
+       const char *    pinctrl_names;
+       fdt64_t         reg[2];
+       fdt32_t         reg_io_width;
+       fdt32_t         reg_shift;
+};
+#define dtd_syscon dtd_rockchip_rk3328_cru
+#define dtd_simple_mfd dtd_rockchip_rk3328_grf
+#define dtd_snps_dw_apb_uart dtd_rockchip_rk3328_uart
+#define dtd_rockchip_cru dtd_rockchip_rk3328_cru
+#define dtd_rockchip_rk3288_dw_mshc dtd_rockchip_rk3328_dw_mshc
diff --git a/target/linux/rockchip/Makefile b/target/linux/rockchip/Makefile
new file mode 100755 (executable)
index 0000000..498e40c
--- /dev/null
@@ -0,0 +1,24 @@
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+include $(TOPDIR)/rules.mk
+
+BOARD:=rockchip
+BOARDNAME:=Rockchip
+FEATURES:=ext4 audio usb usbgadget display gpio fpu rootfs-part boot-part squashfs
+SUBTARGETS:=armv8
+
+KERNEL_PATCHVER=4.14
+
+define Target/Description
+       Build firmware image for Rockchip SoC devices.
+endef
+
+include $(INCLUDE_DIR)/target.mk
+
+DEFAULT_PACKAGES += uboot-envtools partx-utils e2fsprogs mkf2fs kmod-gpio-button-hotplug
+
+KERNELNAME:=Image dtbs
+
+$(eval $(call BuildTarget))
diff --git a/target/linux/rockchip/armv8/base-files/etc/board.d/01_leds b/target/linux/rockchip/armv8/base-files/etc/board.d/01_leds
new file mode 100755 (executable)
index 0000000..44f50a8
--- /dev/null
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+. /lib/functions/leds.sh
+. /lib/functions/uci-defaults.sh
+
+board=$(board_name)
+boardname="${board##*,}"
+
+board_config_update
+
+case $board in
+thinkpenguin,tpe-r1400)
+       ucidef_set_led_netdev "wan" "WAN" "$boardname:green:wan" "eth0"
+       ucidef_set_led_netdev "lan" "LAN" "$boardname:green:lan" "eth1"
+       ;;
+esac
+
+board_config_flush
+
+exit 0
diff --git a/target/linux/rockchip/armv8/base-files/etc/board.d/02_network b/target/linux/rockchip/armv8/base-files/etc/board.d/02_network
new file mode 100755 (executable)
index 0000000..4248f27
--- /dev/null
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+. /lib/functions/uci-defaults.sh
+
+board_config_update
+
+case "$(board_name)" in
+"friendlyarm,nanopi-r2" \
+|"friendlyarm,nanopi-r2s" \
+|"thinkpenguin,tpe-r1400")
+    ucidef_set_interfaces_lan_wan "eth1" "eth0"
+        ;;
+"friendlyarm,nanopi-neo3")
+    ucidef_set_interface_wan 'eth0'
+    ;;
+*)
+       ucidef_set_interface_wan 'eth0'
+        ;;
+esac
+
+board_config_flush
+
+exit 0
diff --git a/target/linux/rockchip/armv8/base-files/etc/hotplug.d/net/40-net-smp-affinity b/target/linux/rockchip/armv8/base-files/etc/hotplug.d/net/40-net-smp-affinity
new file mode 100755 (executable)
index 0000000..4471625
--- /dev/null
@@ -0,0 +1,30 @@
+#!/bin/sh
+
+[ "$ACTION" = add ] || exit
+
+get_device_irq() {
+       local device="$1"
+
+       local line=$(grep -m 1 "${device}\$" /proc/interrupts)
+       echo ${line} | sed 's/:.*//'
+}
+
+set_interface_core() {
+       local core_mask="$1"
+       local interface="$2"
+       local device="$3"
+
+       [ -z "${device}" ] && device="$interface"
+
+       local irq=$(get_device_irq "$device")
+
+       echo "${core_mask}" > /proc/irq/${irq}/smp_affinity
+}
+
+case "$(board_name)" in
+friendlyarm,nanopi-r2s)
+       set_interface_core 2 "eth0"
+       set_interface_core 4 "eth1" "xhci-hcd:usb3"
+       ;;
+esac
+
diff --git a/target/linux/rockchip/armv8/base-files/etc/modules.d/10-bcmdhd b/target/linux/rockchip/armv8/base-files/etc/modules.d/10-bcmdhd
new file mode 100755 (executable)
index 0000000..383470a
--- /dev/null
@@ -0,0 +1 @@
+bcmdhd op_mode=0x0002
diff --git a/target/linux/rockchip/armv8/base-files/etc/modules.d/10-ledtrig-netdev b/target/linux/rockchip/armv8/base-files/etc/modules.d/10-ledtrig-netdev
new file mode 100755 (executable)
index 0000000..3b9f805
--- /dev/null
@@ -0,0 +1 @@
+ledtrig-netdev
diff --git a/target/linux/rockchip/armv8/base-files/etc/modules.d/10-rtl8812au b/target/linux/rockchip/armv8/base-files/etc/modules.d/10-rtl8812au
new file mode 100755 (executable)
index 0000000..df32c13
--- /dev/null
@@ -0,0 +1 @@
+rtl8812au
diff --git a/target/linux/rockchip/armv8/base-files/etc/modules.d/10-rtl8821cu b/target/linux/rockchip/armv8/base-files/etc/modules.d/10-rtl8821cu
new file mode 100755 (executable)
index 0000000..d3eab79
--- /dev/null
@@ -0,0 +1 @@
+rtl8821CU
diff --git a/target/linux/rockchip/armv8/base-files/etc/modules.d/10-rtl8822bu b/target/linux/rockchip/armv8/base-files/etc/modules.d/10-rtl8822bu
new file mode 100755 (executable)
index 0000000..f7ffc0d
--- /dev/null
@@ -0,0 +1 @@
+rtl8822bu
diff --git a/target/linux/rockchip/armv8/base-files/lib/preinit/79_move_config b/target/linux/rockchip/armv8/base-files/lib/preinit/79_move_config
new file mode 100755 (executable)
index 0000000..96e636e
--- /dev/null
@@ -0,0 +1,16 @@
+move_config() {
+       local partdev
+
+       . /lib/upgrade/common.sh
+
+       if export_bootdevice && export_partdevice partdev 1; then
+               if mount -o rw,noatime "/dev/$partdev" /mnt; then
+                       if [ -f "/mnt/$BACKUP_FILE" ]; then
+                               mv -f "/mnt/$BACKUP_FILE" /
+                       fi
+                       umount /mnt
+               fi
+       fi
+}
+
+boot_hook_add preinit_mount_root move_config
diff --git a/target/linux/rockchip/armv8/base-files/lib/upgrade/platform.sh b/target/linux/rockchip/armv8/base-files/lib/upgrade/platform.sh
new file mode 100755 (executable)
index 0000000..faed066
--- /dev/null
@@ -0,0 +1,86 @@
+platform_check_image() {
+       local diskdev partdev diff
+
+       export_bootdevice && export_partdevice diskdev 0 || {
+               echo "Unable to determine upgrade device"
+               return 1
+       }
+
+       get_partitions "/dev/$diskdev" bootdisk
+
+       #extract the boot sector from the image
+       get_image "$@" | dd of=/tmp/image.bs count=1 bs=512b 2>/dev/null
+
+       get_partitions /tmp/image.bs image
+
+       #compare tables
+       diff="$(grep -F -x -v -f /tmp/partmap.bootdisk /tmp/partmap.image)"
+
+       rm -f /tmp/image.bs /tmp/partmap.bootdisk /tmp/partmap.image
+
+       if [ -n "$diff" ]; then
+               echo "Partition layout has changed. Full image will be written."
+               ask_bool 0 "Abort" && exit 1
+               return 0
+       fi
+}
+
+platform_copy_config() {
+       local partdev
+
+       if export_partdevice partdev 1; then
+               mount -o rw,noatime "/dev/$partdev" /mnt
+               cp -af "$UPGRADE_BACKUP" "/mnt/$BACKUP_FILE"
+               umount /mnt
+       fi
+}
+
+platform_do_upgrade() {
+       local diskdev partdev diff
+
+       export_bootdevice && export_partdevice diskdev 0 || {
+               echo "Unable to determine upgrade device"
+               return 1
+       }
+
+       sync
+
+       if [ "$UPGRADE_OPT_SAVE_PARTITIONS" = "1" ]; then
+               get_partitions "/dev/$diskdev" bootdisk
+
+               #extract the boot sector from the image
+               get_image "$@" | dd of=/tmp/image.bs count=1 bs=512b
+
+               get_partitions /tmp/image.bs image
+
+               #compare tables
+               diff="$(grep -F -x -v -f /tmp/partmap.bootdisk /tmp/partmap.image)"
+       else
+               diff=1
+       fi
+
+       if [ -n "$diff" ]; then
+               get_image "$@" | dd of="/dev/$diskdev" bs=4096 conv=fsync
+
+               # Separate removal and addtion is necessary; otherwise, partition 1
+               # will be missing if it overlaps with the old partition 2
+               partx -d - "/dev/$diskdev"
+               partx -a - "/dev/$diskdev"
+
+               return 0
+       fi
+
+       #iterate over each partition from the image and write it to the boot disk
+       while read part start size; do
+               if export_partdevice partdev $part; then
+                       echo "Writing image to /dev/$partdev..."
+                       get_image "$@" | dd of="/dev/$partdev" ibs="512" obs=1M skip="$start" count="$size" conv=fsync
+               else
+                       echo "Unable to find partition $part device, skipped."
+               fi
+       done < /tmp/partmap.image
+
+       #copy partition uuid
+       echo "Writing new UUID to /dev/$diskdev..."
+       get_image "$@" | dd of="/dev/$diskdev" bs=1 skip=440 count=4 seek=440 conv=fsync
+}
diff --git a/target/linux/rockchip/armv8/config-default b/target/linux/rockchip/armv8/config-default
new file mode 100755 (executable)
index 0000000..e69de29
diff --git a/target/linux/rockchip/armv8/target.mk b/target/linux/rockchip/armv8/target.mk
new file mode 100755 (executable)
index 0000000..a5e60a6
--- /dev/null
@@ -0,0 +1,8 @@
+ARCH:=aarch64
+SUBTARGET:=armv8
+BOARDNAME:=RK33xx boards (64 bit)
+
+define Target/Description
+       Build firmware image for Rockchip RK33xx devices.
+       This firmware features a 64 bit kernel.
+endef
diff --git a/target/linux/rockchip/config-4.14 b/target/linux/rockchip/config-4.14
new file mode 100755 (executable)
index 0000000..6955a4a
--- /dev/null
@@ -0,0 +1,675 @@
+CONFIG_64BIT=y
+# CONFIG_ACPI is not set
+CONFIG_ARCH_CLOCKSOURCE_DATA=y
+CONFIG_ARCH_DMA_ADDR_T_64BIT=y
+CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
+CONFIG_ARCH_HAS_DEBUG_VIRTUAL=y
+CONFIG_ARCH_HAS_ELF_RANDOMIZE=y
+CONFIG_ARCH_HAS_FORTIFY_SOURCE=y
+CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y
+CONFIG_ARCH_HAS_GIGANTIC_PAGE=y
+CONFIG_ARCH_HAS_HOLES_MEMORYMODEL=y
+CONFIG_ARCH_HAS_KCOV=y
+CONFIG_ARCH_HAS_RESET_CONTROLLER=y
+CONFIG_ARCH_HAS_SET_MEMORY=y
+CONFIG_ARCH_HAS_SG_CHAIN=y
+CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
+CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
+CONFIG_ARCH_HAS_TICK_BROADCAST=y
+CONFIG_ARCH_HIBERNATION_POSSIBLE=y
+CONFIG_ARCH_MMAP_RND_BITS=18
+CONFIG_ARCH_MMAP_RND_BITS_MAX=24
+CONFIG_ARCH_MMAP_RND_BITS_MIN=18
+CONFIG_ARCH_MMAP_RND_COMPAT_BITS=11
+CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=11
+# CONFIG_ARCH_OPTIONAL_KERNEL_RWX is not set
+# CONFIG_ARCH_OPTIONAL_KERNEL_RWX_DEFAULT is not set
+CONFIG_ARCH_PHYS_ADDR_T_64BIT=y
+CONFIG_ARCH_PROC_KCORE_TEXT=y
+CONFIG_ARCH_ROCKCHIP=y
+CONFIG_ARCH_SELECT_MEMORY_MODEL=y
+CONFIG_ARCH_SPARSEMEM_DEFAULT=y
+CONFIG_ARCH_SPARSEMEM_ENABLE=y
+CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y
+CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y
+CONFIG_ARCH_SUPPORTS_MEMORY_FAILURE=y
+CONFIG_ARCH_SUPPORTS_NUMA_BALANCING=y
+CONFIG_ARCH_SUPPORTS_UPROBES=y
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
+CONFIG_ARCH_USE_CMPXCHG_LOCKREF=y
+CONFIG_ARCH_WANT_COMPAT_IPC_PARSE_VERSION=y
+CONFIG_ARCH_WANT_FRAME_POINTERS=y
+CONFIG_ARCH_WANT_HUGE_PMD_SHARE=y
+CONFIG_ARC_EMAC_CORE=y
+CONFIG_ARM64=y
+# CONFIG_ARM64_16K_PAGES is not set
+CONFIG_ARM64_4K_PAGES=y
+# CONFIG_ARM64_64K_PAGES is not set
+CONFIG_ARM64_CONT_SHIFT=4
+# CONFIG_ARM64_CRYPTO is not set
+# CONFIG_CRYPTO_DEV_ROCKCHIP is not set
+CONFIG_ARM64_ERRATUM_1188873=y
+CONFIG_ARM64_ERRATUM_1742098=y
+CONFIG_ARM64_ERRATUM_819472=y
+CONFIG_ARM64_ERRATUM_824069=y
+CONFIG_ARM64_ERRATUM_826319=y
+CONFIG_ARM64_ERRATUM_827319=y
+CONFIG_ARM64_ERRATUM_832075=y
+CONFIG_ARM64_ERRATUM_843419=y
+CONFIG_ARM64_ERRATUM_845719=y
+CONFIG_ARM64_ERRATUM_858921=y
+CONFIG_ARM64_HW_AFDBM=y
+# CONFIG_ARM64_LSE_ATOMICS is not set
+CONFIG_ARM64_MODULE_CMODEL_LARGE=y
+CONFIG_ARM64_PAGE_SHIFT=12
+CONFIG_ARM64_PAN=y
+# CONFIG_ARM64_PMEM is not set
+# CONFIG_ARM64_PTDUMP_CORE is not set
+# CONFIG_ARM64_PTDUMP_DEBUGFS is not set
+# CONFIG_ARM64_RANDOMIZE_TEXT_OFFSET is not set
+CONFIG_ARM64_SSBD=y
+# CONFIG_ARM64_SW_TTBR0_PAN is not set
+CONFIG_ARM64_UAO=y
+CONFIG_ARM64_VA_BITS=39
+CONFIG_ARM64_VA_BITS_39=y
+# CONFIG_ARM64_VA_BITS_48 is not set
+CONFIG_ARM64_VHE=y
+# CONFIG_ARMV8_DEPRECATED is not set
+CONFIG_ARM_AMBA=y
+CONFIG_ARM_ARCH_TIMER=y
+CONFIG_ARM_ARCH_TIMER_EVTSTREAM=y
+CONFIG_ARM_ARCH_TIMER_OOL_WORKAROUND=y
+CONFIG_ARM_CPUIDLE=y
+CONFIG_ARM_GIC=y
+CONFIG_ARM_GIC_V2M=y
+CONFIG_ARM_GIC_V3=y
+CONFIG_ARM_GIC_V3_ITS=y
+CONFIG_ARM_MHU=y
+CONFIG_ARM_PSCI_FW=y
+# CONFIG_ARM_RK3399_DMC_DEVFREQ is not set
+CONFIG_ARM_SCPI_POWER_DOMAIN=y
+CONFIG_ARM_SCPI_PROTOCOL=y
+CONFIG_ARM_SMMU=y
+CONFIG_ARM_SMMU_V3=y
+CONFIG_AUDIT_ARCH_COMPAT_GENERIC=y
+# CONFIG_BCM_FLEXRM_MBOX is not set
+CONFIG_BLK_DEV_BSG=y
+CONFIG_BLK_DEV_BSGLIB=y
+# CONFIG_BLK_DEV_INITRD is not set
+CONFIG_BLK_DEV_INTEGRITY=y
+CONFIG_BLK_DEV_LOOP=y
+CONFIG_BLK_DEV_NVME=y
+CONFIG_BLK_DEV_PCIESSD_MTIP32XX=y
+CONFIG_BLK_DEV_SD=y
+CONFIG_BLK_MQ_PCI=y
+CONFIG_BLK_SCSI_REQUEST=y
+CONFIG_BLOCK_COMPAT=y
+CONFIG_BOUNCE=y
+CONFIG_BRCMSTB_GISB_ARB=y
+CONFIG_BSD_PROCESS_ACCT=y
+CONFIG_BSD_PROCESS_ACCT_V3=y
+CONFIG_CHARGER_GPIO=y
+CONFIG_CLKDEV_LOOKUP=y
+CONFIG_CLKSRC_MMIO=y
+CONFIG_CLONE_BACKWARDS=y
+CONFIG_CMA=y
+CONFIG_CMA_ALIGNMENT=8
+CONFIG_CMA_AREAS=7
+# CONFIG_CMA_DEBUG is not set
+# CONFIG_CMA_DEBUGFS is not set
+CONFIG_CMA_SIZE_MBYTES=5
+# CONFIG_CMA_SIZE_SEL_MAX is not set
+CONFIG_CMA_SIZE_SEL_MBYTES=y
+# CONFIG_CMA_SIZE_SEL_MIN is not set
+# CONFIG_CMA_SIZE_SEL_PERCENTAGE is not set
+CONFIG_COMMON_CLK=y
+CONFIG_COMMON_CLK_RK808=y
+CONFIG_COMMON_CLK_SCPI=y
+CONFIG_COMPAT=y
+CONFIG_COMPAT_BINFMT_ELF=y
+CONFIG_COMPAT_NETLINK_MESSAGES=y
+CONFIG_COMPAT_OLD_SIGACTION=y
+CONFIG_CONFIGFS_FS=y
+CONFIG_CONSOLE_TRANSLATIONS=y
+CONFIG_CPUFREQ_DT=y
+CONFIG_CPUFREQ_DT_PLATDEV=y
+# CONFIG_CPU_BIG_ENDIAN is not set
+CONFIG_CPU_FREQ=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
+CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL=y
+CONFIG_CPU_FREQ_GOV_ATTR_SET=y
+# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set
+# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=y
+CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y
+# CONFIG_CPU_FREQ_GOV_USERSPACE is not set
+CONFIG_CPU_FREQ_STAT=y
+# CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set
+CONFIG_CPU_IDLE=y
+# CONFIG_CPU_IDLE_GOV_LADDER is not set
+CONFIG_CPU_IDLE_GOV_MENU=y
+CONFIG_CPU_IDLE_MULTIPLE_DRIVERS=y
+CONFIG_CPU_PM=y
+CONFIG_CPU_RMAP=y
+CONFIG_CPU_THERMAL=y
+CONFIG_CRASH_DUMP=y
+CONFIG_CRC16=y
+# CONFIG_CRC32_SARWATE is not set
+CONFIG_CRC32_SLICEBY8=y
+CONFIG_CRC_T10DIF=y
+CONFIG_CROSS_MEMORY_ATTACH=y
+CONFIG_CRYPTO_AEAD=y
+CONFIG_CRYPTO_AEAD2=y
+CONFIG_CRYPTO_CRC32=y
+CONFIG_CRYPTO_CRC32C=y
+CONFIG_CRYPTO_CRCT10DIF=y
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_HASH2=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_MANAGER2=y
+CONFIG_CRYPTO_NULL2=y
+CONFIG_CRYPTO_RNG2=y
+CONFIG_CRYPTO_WORKQUEUE=y
+CONFIG_DCACHE_WORD_ACCESS=y
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEVFREQ_GOV_PASSIVE is not set
+CONFIG_DEVFREQ_GOV_PERFORMANCE=y
+CONFIG_DEVFREQ_GOV_POWERSAVE=y
+CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=y
+CONFIG_DEVFREQ_GOV_USERSPACE=y
+# CONFIG_DEVFREQ_THERMAL is not set
+CONFIG_DEVMEM=y
+# CONFIG_DEVPORT is not set
+CONFIG_DEVTMPFS=y
+CONFIG_DEVTMPFS_MOUNT=y
+CONFIG_DMADEVICES=y
+CONFIG_DMA_CMA=y
+CONFIG_DMA_ENGINE=y
+CONFIG_DMA_OF=y
+CONFIG_DMA_SHARED_BUFFER=y
+CONFIG_DNOTIFY=y
+CONFIG_DTC=y
+CONFIG_DT_IDLE_STATES=y
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_DWMAC_DWC_QOS_ETH=y
+CONFIG_DWMAC_GENERIC=y
+CONFIG_DWMAC_ROCKCHIP=y
+CONFIG_EDAC_SUPPORT=y
+CONFIG_EMAC_ROCKCHIP=y
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_EXT4_FS=y
+CONFIG_EXT4_FS_POSIX_ACL=y
+CONFIG_EXTCON=y
+# CONFIG_F2FS_CHECK_FS is not set
+CONFIG_F2FS_FS=y
+# CONFIG_F2FS_FS_SECURITY is not set
+CONFIG_F2FS_FS_XATTR=y
+CONFIG_F2FS_STAT_FS=y
+CONFIG_FANOTIFY=y
+CONFIG_FHANDLE=y
+CONFIG_FIXED_PHY=y
+CONFIG_FIX_EARLYCON_MEM=y
+# CONFIG_FORTIFY_SOURCE is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FRAME_WARN=2048
+CONFIG_FS_MBCACHE=y
+CONFIG_FS_POSIX_ACL=y
+CONFIG_GENERIC_ALLOCATOR=y
+CONFIG_GENERIC_ARCH_TOPOLOGY=y
+CONFIG_GENERIC_BUG=y
+CONFIG_GENERIC_BUG_RELATIVE_POINTERS=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
+CONFIG_GENERIC_CPU_AUTOPROBE=y
+CONFIG_GENERIC_CPU_VULNERABILITIES=y
+CONFIG_GENERIC_CSUM=y
+CONFIG_GENERIC_EARLY_IOREMAP=y
+CONFIG_GENERIC_IDLE_POLL_SETUP=y
+CONFIG_GENERIC_IO=y
+CONFIG_GENERIC_IRQ_CHIP=y
+CONFIG_GENERIC_IRQ_EFFECTIVE_AFF_MASK=y
+CONFIG_GENERIC_IRQ_MIGRATION=y
+CONFIG_GENERIC_IRQ_SHOW=y
+CONFIG_GENERIC_IRQ_SHOW_LEVEL=y
+CONFIG_GENERIC_MSI_IRQ=y
+CONFIG_GENERIC_MSI_IRQ_DOMAIN=y
+CONFIG_GENERIC_PCI_IOMAP=y
+CONFIG_GENERIC_PHY=y
+CONFIG_GENERIC_PINCONF=y
+CONFIG_GENERIC_SCHED_CLOCK=y
+CONFIG_GENERIC_SMP_IDLE_THREAD=y
+CONFIG_GENERIC_STRNCPY_FROM_USER=y
+CONFIG_GENERIC_STRNLEN_USER=y
+CONFIG_GENERIC_TIME_VSYSCALL=y
+CONFIG_GPIOLIB=y
+CONFIG_GPIO_DWAPB=y
+CONFIG_GPIO_GENERIC=y
+CONFIG_GPIO_GENERIC_PLATFORM=y
+# CONFIG_GRO_CELLS is not set
+CONFIG_HANDLE_DOMAIN_IRQ=y
+# CONFIG_HARDENED_USERCOPY is not set
+CONFIG_HARDEN_BRANCH_PREDICTOR=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_HAS_DMA=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT_MAP=y
+# CONFIG_HAVE_64BIT_ALIGNED_ACCESS is not set
+CONFIG_HAVE_ALIGNED_STRUCT_PAGE=y
+CONFIG_HAVE_ARCH_AUDITSYSCALL=y
+CONFIG_HAVE_ARCH_BITREVERSE=y
+CONFIG_HAVE_ARCH_HUGE_VMAP=y
+CONFIG_HAVE_ARCH_JUMP_LABEL=y
+CONFIG_HAVE_ARCH_KASAN=y
+CONFIG_HAVE_ARCH_KGDB=y
+CONFIG_HAVE_ARCH_MMAP_RND_COMPAT_BITS=y
+CONFIG_HAVE_ARCH_PFN_VALID=y
+CONFIG_HAVE_ARCH_SECCOMP_FILTER=y
+CONFIG_HAVE_ARCH_TRACEHOOK=y
+CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y
+CONFIG_HAVE_ARCH_VMAP_STACK=y
+CONFIG_HAVE_ARM_SMCCC=y
+# CONFIG_HAVE_BOOTMEM_INFO_NODE is not set
+CONFIG_HAVE_CC_STACKPROTECTOR=y
+CONFIG_HAVE_CLK=y
+CONFIG_HAVE_CLK_PREPARE=y
+CONFIG_HAVE_CMPXCHG_DOUBLE=y
+CONFIG_HAVE_CMPXCHG_LOCAL=y
+CONFIG_HAVE_CONTEXT_TRACKING=y
+CONFIG_HAVE_C_RECORDMCOUNT=y
+CONFIG_HAVE_DEBUG_BUGVERBOSE=y
+CONFIG_HAVE_DEBUG_KMEMLEAK=y
+CONFIG_HAVE_DMA_API_DEBUG=y
+CONFIG_HAVE_DMA_CONTIGUOUS=y
+CONFIG_HAVE_DYNAMIC_FTRACE=y
+CONFIG_HAVE_EBPF_JIT=y
+CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
+CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
+CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
+CONFIG_HAVE_FUNCTION_TRACER=y
+CONFIG_HAVE_GENERIC_DMA_COHERENT=y
+CONFIG_HAVE_GENERIC_GUP=y
+CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y
+CONFIG_HAVE_MEMBLOCK=y
+CONFIG_HAVE_MEMORY_PRESENT=y
+CONFIG_HAVE_NET_DSA=y
+CONFIG_HAVE_PATA_PLATFORM=y
+CONFIG_HAVE_PERF_EVENTS=y
+CONFIG_HAVE_PERF_REGS=y
+CONFIG_HAVE_PERF_USER_STACK_DUMP=y
+CONFIG_HAVE_RCU_TABLE_FREE=y
+CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
+CONFIG_HAVE_SYSCALL_TRACEPOINTS=y
+CONFIG_HAVE_UID16=y
+CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y
+CONFIG_HID=y
+CONFIG_HID_GENERIC=y
+CONFIG_HOLES_IN_ZONE=y
+CONFIG_HOTPLUG_CPU=y
+CONFIG_HOTPLUG_PCI=y
+# CONFIG_HOTPLUG_PCI_CPCI is not set
+# CONFIG_HOTPLUG_PCI_PCIE is not set
+# CONFIG_HOTPLUG_PCI_SHPC is not set
+# CONFIG_HUGETLBFS is not set
+CONFIG_HWMON=y
+CONFIG_HWSPINLOCK=y
+CONFIG_HW_CONSOLE=y
+CONFIG_HZ=250
+# CONFIG_HZ_100 is not set
+CONFIG_HZ_250=y
+CONFIG_I2C=y
+CONFIG_I2C_ALGOBIT=y
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_CHARDEV=y
+CONFIG_I2C_COMPAT=y
+CONFIG_I2C_GPIO=y
+CONFIG_I2C_HELPER_AUTO=y
+CONFIG_I2C_RK3X=y
+CONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000
+CONFIG_INPUT=y
+CONFIG_INPUT_EVDEV=y
+CONFIG_INPUT_FF_MEMLESS=y
+CONFIG_INPUT_KEYBOARD=y
+CONFIG_INPUT_LEDS=y
+CONFIG_INPUT_MATRIXKMAP=y
+# CONFIG_INPUT_MISC is not set
+# CONFIG_INPUT_RK805_PWRKEY is not set
+CONFIG_IOMMU_API=y
+CONFIG_IOMMU_DMA=y
+CONFIG_IOMMU_HELPER=y
+CONFIG_IOMMU_IOVA=y
+CONFIG_IOMMU_IO_PGTABLE=y
+# CONFIG_IOMMU_IO_PGTABLE_ARMV7S is not set
+CONFIG_IOMMU_IO_PGTABLE_LPAE=y
+# CONFIG_IOMMU_IO_PGTABLE_LPAE_SELFTEST is not set
+CONFIG_IOMMU_SUPPORT=y
+# CONFIG_IO_STRICT_DEVMEM is not set
+CONFIG_IRQCHIP=y
+CONFIG_IRQ_DOMAIN=y
+CONFIG_IRQ_DOMAIN_HIERARCHY=y
+CONFIG_IRQ_FORCED_THREADING=y
+CONFIG_IRQ_TIME_ACCOUNTING=y
+CONFIG_IRQ_WORK=y
+CONFIG_JBD2=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JUMP_LABEL=y
+CONFIG_KALLSYMS=y
+CONFIG_KSM=y
+# CONFIG_LEDS_BRIGHTNESS_HW_CHANGED is not set
+CONFIG_LEDS_GPIO=y
+CONFIG_LEDS_PWM=y
+CONFIG_LEDS_SYSCON=y
+CONFIG_LEDS_TRIGGER_CPU=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+CONFIG_LEDS_TRIGGER_PANIC=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=16
+CONFIG_LIBCRC32C=y
+CONFIG_LIBFDT=y
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_LOCK_SPIN_ON_OWNER=y
+CONFIG_LOG_BUF_SHIFT=19
+CONFIG_MAGIC_SYSRQ=y
+CONFIG_MAGIC_SYSRQ_SERIAL=y
+CONFIG_MAILBOX=y
+# CONFIG_MAILBOX_TEST is not set
+CONFIG_MANDATORY_FILE_LOCKING=y
+CONFIG_MDIO_BITBANG=y
+CONFIG_MDIO_BUS=y
+CONFIG_MDIO_BUS_MUX=y
+CONFIG_MDIO_BUS_MUX_GPIO=y
+CONFIG_MDIO_BUS_MUX_MMIOREG=y
+CONFIG_MDIO_DEVICE=y
+CONFIG_MDIO_GPIO=y
+CONFIG_MEMORY_ISOLATION=y
+CONFIG_MFD_CORE=y
+CONFIG_MFD_RK808=y
+CONFIG_MFD_SYSCON=y
+CONFIG_MIGRATION=y
+CONFIG_MITIGATE_SPECTRE_BRANCH_HISTORY=y
+CONFIG_MMC=y
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_BLOCK_MINORS=32
+CONFIG_MMC_DW=y
+# CONFIG_MMC_DW_EXYNOS is not set
+# CONFIG_MMC_DW_K3 is not set
+# CONFIG_MMC_DW_PCI is not set
+CONFIG_MMC_DW_PLTFM=y
+CONFIG_MMC_DW_ROCKCHIP=y
+CONFIG_MMC_SDHCI=y
+CONFIG_MMC_SDHCI_OF_ARASAN=y
+# CONFIG_MMC_SDHCI_PCI is not set
+CONFIG_MMC_SDHCI_PLTFM=y
+# CONFIG_MMC_TIFM_SD is not set
+CONFIG_MODULES_USE_ELF_RELA=y
+CONFIG_MQ_IOSCHED_DEADLINE=y
+# CONFIG_MTD_CFI is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_SPI_NOR_USE_4K_SECTORS=y
+CONFIG_MTD_SPLIT_FIRMWARE=y
+CONFIG_MUTEX_SPIN_ON_OWNER=y
+CONFIG_NEED_DMA_MAP_STATE=y
+CONFIG_NEED_SG_DMA_LENGTH=y
+CONFIG_NET_FLOW_LIMIT=y
+CONFIG_NLS=y
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NOP_USB_XCEIV=y
+CONFIG_NO_BOOTMEM=y
+CONFIG_NO_HZ_COMMON=y
+CONFIG_NO_HZ_IDLE=y
+CONFIG_NR_CPUS=256
+# CONFIG_NUMA is not set
+CONFIG_NVMEM=y
+CONFIG_NVME_CORE=y
+CONFIG_OF=y
+CONFIG_OF_ADDRESS=y
+CONFIG_OF_ADDRESS_PCI=y
+CONFIG_OF_DYNAMIC=y
+CONFIG_OF_EARLY_FLATTREE=y
+CONFIG_OF_FLATTREE=y
+CONFIG_OF_GPIO=y
+CONFIG_OF_IOMMU=y
+CONFIG_OF_IRQ=y
+CONFIG_OF_MDIO=y
+CONFIG_OF_NET=y
+CONFIG_OF_OVERLAY=y
+CONFIG_OF_PCI=y
+CONFIG_OF_PCI_IRQ=y
+CONFIG_OF_RESERVED_MEM=y
+CONFIG_OF_RESOLVE=y
+CONFIG_OLD_SIGSUSPEND3=y
+CONFIG_PADATA=y
+# CONFIG_PANIC_ON_OOPS is not set
+CONFIG_PANIC_ON_OOPS_VALUE=0
+CONFIG_PANIC_TIMEOUT=0
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_PARTITION_PERCPU=y
+CONFIG_PCI=y
+CONFIG_PCIEAER=y
+CONFIG_PCIEASPM=y
+# CONFIG_PCIEASPM_DEBUG is not set
+CONFIG_PCIEASPM_DEFAULT=y
+# CONFIG_PCIEASPM_PERFORMANCE is not set
+# CONFIG_PCIEASPM_POWERSAVE is not set
+# CONFIG_PCIEASPM_POWER_SUPERSAVE is not set
+CONFIG_PCIEPORTBUS=y
+CONFIG_PCIE_PME=y
+CONFIG_PCIE_ROCKCHIP=y
+CONFIG_PCI_BUS_ADDR_T_64BIT=y
+CONFIG_PCI_DOMAINS=y
+CONFIG_PCI_DOMAINS_GENERIC=y
+CONFIG_PCI_MSI=y
+CONFIG_PCI_MSI_IRQ_DOMAIN=y
+CONFIG_PCI_STUB=y
+CONFIG_PGTABLE_LEVELS=3
+CONFIG_PHYLIB=y
+CONFIG_PHYS_ADDR_T_64BIT=y
+# CONFIG_PHY_QCOM_USB_HS is not set
+# CONFIG_PHY_QCOM_USB_HSIC is not set
+CONFIG_PHY_ROCKCHIP_DP=y
+CONFIG_PHY_ROCKCHIP_EMMC=y
+CONFIG_PHY_ROCKCHIP_INNO_USB2=y
+CONFIG_PHY_ROCKCHIP_PCIE=y
+CONFIG_PHY_ROCKCHIP_TYPEC=y
+CONFIG_PHY_ROCKCHIP_USB=y
+# CONFIG_PHY_TUSB1210 is not set
+CONFIG_PINCTRL=y
+# CONFIG_PINCTRL_RK805 is not set
+CONFIG_PINCTRL_ROCKCHIP=y
+# CONFIG_PINCTRL_SINGLE is not set
+CONFIG_PL330_DMA=y
+CONFIG_PLATFORM_MHU=y
+CONFIG_PM=y
+CONFIG_PM_CLK=y
+# CONFIG_PM_DEBUG is not set
+CONFIG_PM_DEVFREQ=y
+# CONFIG_PM_DEVFREQ_EVENT is not set
+CONFIG_PM_GENERIC_DOMAINS=y
+CONFIG_PM_GENERIC_DOMAINS_OF=y
+CONFIG_PM_OPP=y
+CONFIG_POWER_AVS=y
+CONFIG_POWER_RESET=y
+CONFIG_POWER_SUPPLY=y
+CONFIG_PREEMPT=y
+CONFIG_PREEMPT_COUNT=y
+# CONFIG_PREEMPT_NONE is not set
+CONFIG_PREEMPT_RCU=y
+CONFIG_PRINTK_TIME=y
+# CONFIG_PRINT_QUOTA_WARNING is not set
+CONFIG_PROC_PAGE_MONITOR=y
+# CONFIG_PROC_STRIPPED is not set
+CONFIG_PROC_VMCORE=y
+CONFIG_PWM=y
+CONFIG_PWM_ROCKCHIP=y
+CONFIG_PWM_SYSFS=y
+# CONFIG_QFMT_V1 is not set
+# CONFIG_QFMT_V2 is not set
+CONFIG_QUOTA=y
+CONFIG_QUOTACTL=y
+# CONFIG_QUOTA_NETLINK_INTERFACE is not set
+CONFIG_RADIX_TREE_MULTIORDER=y
+CONFIG_RAID_ATTRS=y
+# CONFIG_RANDOMIZE_BASE is not set
+CONFIG_RANDOM_TRUST_BOOTLOADER=y
+CONFIG_RAS=y
+CONFIG_RATIONAL=y
+CONFIG_RCU_CPU_STALL_TIMEOUT=21
+# CONFIG_RCU_EXPERT is not set
+CONFIG_RCU_NEED_SEGCBLIST=y
+CONFIG_RCU_STALL_COMMON=y
+CONFIG_RCU_TRACE=y
+CONFIG_REALTEK_PHY=y
+CONFIG_REFCOUNT_FULL=y
+CONFIG_REGMAP=y
+CONFIG_REGMAP_I2C=y
+CONFIG_REGMAP_IRQ=y
+CONFIG_REGMAP_MMIO=y
+CONFIG_REGMAP_SPI=y
+CONFIG_REGULATOR=y
+CONFIG_REGULATOR_FAN53555=y
+CONFIG_REGULATOR_FIXED_VOLTAGE=y
+CONFIG_REGULATOR_GPIO=y
+CONFIG_REGULATOR_PWM=y
+CONFIG_REGULATOR_RK808=y
+CONFIG_RESET_CONTROLLER=y
+CONFIG_RFS_ACCEL=y
+CONFIG_ROCKCHIP_EFUSE=y
+CONFIG_ROCKCHIP_GRF=y
+CONFIG_ROCKCHIP_IODOMAIN=y
+CONFIG_ROCKCHIP_IOMMU=y
+CONFIG_ROCKCHIP_MBOX=y
+CONFIG_ROCKCHIP_PHY=y
+CONFIG_ROCKCHIP_PM_DOMAINS=y
+CONFIG_ROCKCHIP_THERMAL=y
+CONFIG_ROCKCHIP_TIMER=y
+CONFIG_RPS=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_DRV_RK808=y
+CONFIG_RTC_I2C_AND_SPI=y
+CONFIG_RTC_NVMEM=y
+CONFIG_RWSEM_SPIN_ON_OWNER=y
+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
+# CONFIG_SCHED_INFO is not set
+CONFIG_SCHED_MC=y
+CONFIG_SCSI=y
+# CONFIG_SCSI_LOWLEVEL is not set
+# CONFIG_SCSI_PROC_FS is not set
+CONFIG_SCSI_SAS_ATTRS=y
+CONFIG_SCSI_SAS_HOST_SMP=y
+CONFIG_SCSI_SAS_LIBSAS=y
+# CONFIG_SECURITY_DMESG_RESTRICT is not set
+CONFIG_SENSORS_ARM_SCPI=y
+CONFIG_SERIAL_8250_DEPRECATED_OPTIONS=y
+CONFIG_SERIAL_8250_DW=y
+CONFIG_SERIAL_8250_EXAR=y
+CONFIG_SERIAL_8250_EXTENDED=y
+CONFIG_SERIAL_8250_FSL=y
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_PCI=y
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+CONFIG_SERIAL_8250_SHARE_IRQ=y
+# CONFIG_SERIAL_AMBA_PL011 is not set
+CONFIG_SERIAL_DEV_BUS=y
+CONFIG_SERIAL_DEV_CTRL_TTYPORT=y
+CONFIG_SERIAL_OF_PLATFORM=y
+CONFIG_SERIO=y
+CONFIG_SERIO_AMBAKMI=y
+CONFIG_SERIO_LIBPS2=y
+# CONFIG_SGL_ALLOC is not set
+CONFIG_SG_POOL=y
+CONFIG_SIMPLE_PM_BUS=y
+CONFIG_SLUB_DEBUG=y
+CONFIG_SMP=y
+CONFIG_SPARSEMEM=y
+CONFIG_SPARSEMEM_EXTREME=y
+CONFIG_SPARSEMEM_MANUAL=y
+CONFIG_SPARSEMEM_VMEMMAP=y
+CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y
+CONFIG_SPARSE_IRQ=y
+CONFIG_SPI=y
+CONFIG_SPI_BITBANG=y
+CONFIG_SPI_DYNAMIC=y
+CONFIG_SPI_MASTER=y
+CONFIG_SPI_ROCKCHIP=y
+CONFIG_SPI_SPIDEV=y
+# CONFIG_SQUASHFS_DECOMP_MULTI_PERCPU is not set
+CONFIG_SQUASHFS_DECOMP_SINGLE=y
+# CONFIG_SQUASHFS_EMBEDDED is not set
+CONFIG_SQUASHFS_FILE_CACHE=y
+# CONFIG_SQUASHFS_FILE_DIRECT is not set
+CONFIG_SRAM=y
+CONFIG_SRCU=y
+# CONFIG_STAGING is not set
+CONFIG_STMMAC_ETH=y
+CONFIG_STMMAC_PLATFORM=y
+CONFIG_STRICT_DEVMEM=y
+# CONFIG_STRIP_ASM_SYMS is not set
+# CONFIG_SWAP is not set
+CONFIG_SWIOTLB=y
+CONFIG_SWPHY=y
+CONFIG_SYNC_FILE=y
+CONFIG_SYSCTL_EXCEPTION_TRACE=y
+CONFIG_SYSFS_SYSCALL=y
+CONFIG_SYSVIPC_COMPAT=y
+CONFIG_SYS_SUPPORTS_HUGETLBFS=y
+CONFIG_TASKS_RCU=y
+# CONFIG_TEXTSEARCH is not set
+CONFIG_THERMAL=y
+CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
+CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=0
+CONFIG_THERMAL_EMULATION=y
+CONFIG_THERMAL_GOV_POWER_ALLOCATOR=y
+CONFIG_THERMAL_GOV_STEP_WISE=y
+CONFIG_THERMAL_HWMON=y
+CONFIG_THERMAL_OF=y
+CONFIG_THREAD_INFO_IN_TASK=y
+CONFIG_TICK_CPU_ACCOUNTING=y
+CONFIG_TIMER_OF=y
+CONFIG_TIMER_PROBE=y
+CONFIG_TRACE_CLOCK=y
+CONFIG_TRANSPARENT_HUGEPAGE=y
+CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y
+# CONFIG_TRANSPARENT_HUGEPAGE_MADVISE is not set
+CONFIG_TRANSPARENT_HUGE_PAGECACHE=y
+CONFIG_TREE_SRCU=y
+# CONFIG_UEVENT_HELPER is not set
+CONFIG_UNINLINE_SPIN_UNLOCK=y
+CONFIG_UNIX_SCM=y
+CONFIG_UNMAP_KERNEL_AT_EL0=y
+CONFIG_USB=y
+CONFIG_USB_COMMON=y
+CONFIG_USB_DWC3=y
+CONFIG_USB_DWC3_HOST=y
+CONFIG_USB_DWC3_OF_SIMPLE=y
+# CONFIG_USB_DWC3_ULPI is not set
+# CONFIG_USB_EHCI_HCD is not set
+CONFIG_USB_HID=y
+CONFIG_USB_OHCI_HCD=y
+CONFIG_USB_OHCI_HCD_PLATFORM=y
+CONFIG_USB_PHY=y
+CONFIG_USB_STORAGE=y
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ULPI=y
+CONFIG_USB_ULPI_BUS=y
+CONFIG_USB_ULPI_VIEWPORT=y
+CONFIG_USB_XHCI_HCD=y
+CONFIG_USB_XHCI_PLATFORM=y
+# CONFIG_USERIO is not set
+# CONFIG_VFIO is not set
+CONFIG_VMAP_STACK=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_VT_HW_CONSOLE_BINDING=y
+# CONFIG_WATCHDOG is not set
+CONFIG_XPS=y
+CONFIG_XZ_DEC_ARM=y
+CONFIG_XZ_DEC_ARMTHUMB=y
+CONFIG_XZ_DEC_BCJ=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_ZLIB_INFLATE=y
+# CONFIG_DRM_ROCKCHIP is not set
+# CONFIG_SND_SOC_ROCKCHIP is not set
+# CONFIG_ROCKCHIP_SARADC is not set
diff --git a/target/linux/rockchip/image/Makefile b/target/linux/rockchip/image/Makefile
new file mode 100755 (executable)
index 0000000..3c17e96
--- /dev/null
@@ -0,0 +1,61 @@
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+include $(TOPDIR)/rules.mk
+include $(INCLUDE_DIR)/image.mk
+
+DEVICE_VARS += UBOOT_DEVICE_NAME
+
+define Build/Compile
+       $(CP) $(LINUX_DIR)/COPYING $(KDIR)/COPYING.linux
+endef
+
+### Image scripts ###
+define Build/boot-common
+       # This creates a new folder copies the dtb (as rockchip.dtb) 
+       # and the kernel image (as kernel.img)
+       rm -fR $@.boot
+       mkdir -p $@.boot
+
+       $(CP) $(DTS_DIR)/$(DEVICE_DTS).dtb $@.boot/rockchip.dtb
+       $(CP) $(IMAGE_KERNEL) $@.boot/kernel.img
+endef
+
+define Build/boot-script
+       # Make an U-boot image and copy it to the boot partition
+       mkimage -A arm -O linux -T script -C none -a 0 -e 0 -d $(if $(1),$(1),mmc).bootscript $@.boot/boot.scr
+endef
+
+define Build/pine64-img
+       # Creates the final SD/eMMC images, 
+       # combining boot partition, root partition as well as the u-boot bootloader
+
+       # Generate a new partition table in $@ with 32 MiB of 
+       # alignment padding for the idbloader and u-boot to fit:
+       # http://opensource.rock-chips.com/wiki_Boot_option#Boot_flow
+       #
+       # U-Boot SPL expects the U-Boot ITB to be located at sector 0x4000 (8 MiB) on the MMC storage
+       $(SCRIPT_DIR)/gen_image_generic.sh \
+               $@ \
+               $(CONFIG_TARGET_KERNEL_PARTSIZE) $@.boot \
+               $(CONFIG_TARGET_ROOTFS_PARTSIZE) $(IMAGE_ROOTFS) \
+               32768
+
+       # Copy the idbloader and the u-boot image to the image at sector 0x40 and 0x4000
+       dd if="$(STAGING_DIR_IMAGE)"/$(UBOOT_DEVICE_NAME)-idbloader.img of="$@" seek=64 conv=notrunc
+       dd if="$(STAGING_DIR_IMAGE)"/$(UBOOT_DEVICE_NAME)-u-boot.itb of="$@" seek=16384 conv=notrunc
+endef
+
+### Devices ###
+define Device/Default
+  PROFILES := Default
+  KERNEL := kernel-bin
+  IMAGES := sysupgrade.img.gz
+  SUPPORTED_DEVICES := $(subst _,$(comma),$(1))
+  DEVICE_DTS = rockchip/$$(SOC)-$(lastword $(subst _, ,$(1)))
+endef
+
+include $(SUBTARGET).mk
+
+$(eval $(call BuildImage))
diff --git a/target/linux/rockchip/image/armv8.mk b/target/linux/rockchip/image/armv8.mk
new file mode 100755 (executable)
index 0000000..ad4db95
--- /dev/null
@@ -0,0 +1,26 @@
+# 
+# Copyright (C) 2020 Tobias Maedel
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+define Device/friendlyarm_nanopi-r2s
+  DEVICE_TITLE := FriendlyARM NanoPi R2S
+  SOC := rk3328
+  UBOOT_DEVICE_NAME := nanopi-r2s-rk3328
+  IMAGE/sysupgrade.img.gz := boot-common | boot-script nanopi-r2s | pine64-img | gzip | append-metadata
+  DEVICE_PACKAGES := kmod-usb-net-rtl8152
+endef
+
+TARGET_DEVICES += friendlyarm_nanopi-r2s
+
+define Device/thinkpenguin_tpe-r1400
+  DEVICE_TITLE := ThinkPenguin TPE-R1400
+  SOC := rk3328
+  UBOOT_DEVICE_NAME := tpe-r1400-rk3328
+  IMAGE/sysupgrade.img.gz := boot-common | boot-script tpe-r1400 | pine64-img | gzip | append-metadata
+  DEVICE_PACKAGES := kmod-usb-net-rtl8152
+endef
+
+TARGET_DEVICES += thinkpenguin_tpe-r1400
diff --git a/target/linux/rockchip/image/mmc.bootscript b/target/linux/rockchip/image/mmc.bootscript
new file mode 100755 (executable)
index 0000000..b70a62c
--- /dev/null
@@ -0,0 +1,8 @@
+part uuid mmc ${devnum}:2 uuid
+
+setenv bootargs "console=ttyS2,1500000 console=tty1 earlycon=uart8250,mmio32,0xff1a0000 root=PARTUUID=${uuid} rw rootwait"
+
+load mmc ${devnum}:1 ${fdt_addr_r} rockchip.dtb
+load mmc ${devnum}:1 ${kernel_addr_r} kernel.img
+
+booti ${kernel_addr_r} - ${fdt_addr_r}
diff --git a/target/linux/rockchip/image/nanopi-r2s.bootscript b/target/linux/rockchip/image/nanopi-r2s.bootscript
new file mode 100755 (executable)
index 0000000..5198881
--- /dev/null
@@ -0,0 +1,8 @@
+part uuid mmc ${devnum}:2 uuid
+
+setenv bootargs "console=ttyS2,1500000 earlycon=uart8250,mmio32,0xff130000 root=PARTUUID=${uuid} rw rootwait"
+
+load mmc ${devnum}:1 ${fdt_addr_r} rockchip.dtb
+load mmc ${devnum}:1 ${kernel_addr_r} kernel.img
+
+booti ${kernel_addr_r} - ${fdt_addr_r}
diff --git a/target/linux/rockchip/image/tpe-r1400.bootscript b/target/linux/rockchip/image/tpe-r1400.bootscript
new file mode 100755 (executable)
index 0000000..5198881
--- /dev/null
@@ -0,0 +1,8 @@
+part uuid mmc ${devnum}:2 uuid
+
+setenv bootargs "console=ttyS2,1500000 earlycon=uart8250,mmio32,0xff130000 root=PARTUUID=${uuid} rw rootwait"
+
+load mmc ${devnum}:1 ${fdt_addr_r} rockchip.dtb
+load mmc ${devnum}:1 ${kernel_addr_r} kernel.img
+
+booti ${kernel_addr_r} - ${fdt_addr_r}
diff --git a/target/linux/rockchip/patches-4.14/001-rockchip-rk3328-Add-support-for-FriendlyARM-NanoPi-R.patch b/target/linux/rockchip/patches-4.14/001-rockchip-rk3328-Add-support-for-FriendlyARM-NanoPi-R.patch
new file mode 100755 (executable)
index 0000000..2b83448
--- /dev/null
@@ -0,0 +1,404 @@
+From 0720be5371c806c1b89936984a321248fa739bea Mon Sep 17 00:00:00 2001
+From: David Bauer <mail@david-bauer.net>
+Date: Fri, 10 Jul 2020 15:57:46 +0200
+Subject: [PATCH] rockchip: rk3328: Add support for FriendlyARM NanoPi R2S
+
+This adds support for the NanoPi R2S from FriendlyARM.
+
+Rockchip RK3328 SoC
+1GB DDR4 RAM
+Gigabit Ethernet (WAN)
+Gigabit Ethernet (USB3) (LAN)
+USB 2.0 Host Port
+MicroSD slot
+Reset button
+WAN - LAN - SYS LED
+
+Signed-off-by: David Bauer <mail@david-bauer.net>
+---
+ arch/arm64/boot/dts/rockchip/Makefile         |   1 +
+ .../boot/dts/rockchip/rk3328-nanopi-r2s.dts   | 368 ++++++++++++++++++
+ 2 files changed, 369 insertions(+)
+ create mode 100644 arch/arm64/boot/dts/rockchip/rk3328-nanopi-r2s.dts
+
+--- a/arch/arm64/boot/dts/rockchip/Makefile
++++ b/arch/arm64/boot/dts/rockchip/Makefile
+@@ -7,6 +7,7 @@ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3368-or
+ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3368-px5-evb.dtb
+ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3368-r88.dtb
+ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-evb.dtb
++dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3328-nanopi-r2s.dtb
+ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-firefly.dtb
+ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-gru-kevin.dtb
+ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-puma-haikou.dtb
+--- /dev/null
++++ b/arch/arm64/boot/dts/rockchip/rk3328-nanopi-r2s.dts
+@@ -0,0 +1,368 @@
++// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
++/*
++ * Copyright (c) 2020 David Bauer <mail@david-bauer.net>
++ */
++
++/dts-v1/;
++
++#include <dt-bindings/input/input.h>
++#include <dt-bindings/gpio/gpio.h>
++#include "rk3328.dtsi"
++
++/ {
++      model = "FriendlyElec NanoPi R2S";
++      compatible = "friendlyarm,nanopi-r2s", "rockchip,rk3328";
++
++      chosen {
++              stdout-path = "serial2:1500000n8";
++      };
++
++      gmac_clk: gmac-clock {
++              compatible = "fixed-clock";
++              clock-frequency = <125000000>;
++              clock-output-names = "gmac_clk";
++              #clock-cells = <0>;
++      };
++
++      keys {
++              compatible = "gpio-keys";
++              pinctrl-0 = <&reset_button_pin>;
++              pinctrl-names = "default";
++
++              reset {
++                      label = "reset";
++                      gpios = <&gpio0 RK_PA0 GPIO_ACTIVE_LOW>;
++                      linux,code = <KEY_RESTART>;
++                      debounce-interval = <50>;
++              };
++      };
++
++      leds {
++              compatible = "gpio-leds";
++              pinctrl-0 = <&lan_led_pin>,  <&sys_led_pin>, <&wan_led_pin>;
++              pinctrl-names = "default";
++
++              lan_led: led-0 {
++                      gpios = <&gpio2 RK_PB7 GPIO_ACTIVE_HIGH>;
++                      label = "nanopi-r2s:green:lan";
++              };
++
++              sys_led: led-1 {
++                      gpios = <&gpio0 RK_PA2 GPIO_ACTIVE_HIGH>;
++                      label = "nanopi-r2s:red:sys";
++              };
++
++              wan_led: led-2 {
++                      gpios = <&gpio2 RK_PC2 GPIO_ACTIVE_HIGH>;
++                      label = "nanopi-r2s:green:wan";
++              };
++      };
++
++      vcc_io_sdio: sdmmcio-regulator {
++              compatible = "regulator-gpio";
++              enable-active-high;
++              gpios = <&gpio1 RK_PD4 GPIO_ACTIVE_HIGH>;
++              pinctrl-0 = <&sdio_vcc_pin>;
++              pinctrl-names = "default";
++              regulator-name = "vcc_io_sdio";
++              regulator-always-on;
++              regulator-min-microvolt = <1800000>;
++              regulator-max-microvolt = <3300000>;
++              regulator-settling-time-us = <5000>;
++              regulator-type = "voltage";
++              startup-delay-us = <2000>;
++              states = <1800000 0x1
++                        3300000 0x0>;
++              vin-supply = <&vcc_io_33>;
++      };
++
++      vcc_sd: sdmmc-regulator {
++              compatible = "regulator-fixed";
++              gpio = <&gpio0 RK_PD6 GPIO_ACTIVE_LOW>;
++              pinctrl-0 = <&sdmmc0m1_gpio>;
++              pinctrl-names = "default";
++              regulator-name = "vcc_sd";
++              regulator-boot-on;
++              regulator-min-microvolt = <3300000>;
++              regulator-max-microvolt = <3300000>;
++              vin-supply = <&vcc_io_33>;
++      };
++
++      vdd_5v: vdd-5v {
++              compatible = "regulator-fixed";
++              regulator-name = "vdd_5v";
++              regulator-always-on;
++              regulator-boot-on;
++              regulator-min-microvolt = <5000000>;
++              regulator-max-microvolt = <5000000>;
++      };
++};
++
++&cpu0 {
++      cpu-supply = <&vdd_arm>;
++};
++
++&cpu1 {
++      cpu-supply = <&vdd_arm>;
++};
++
++&cpu2 {
++      cpu-supply = <&vdd_arm>;
++};
++
++&cpu3 {
++      cpu-supply = <&vdd_arm>;
++};
++
++&gmac2io {
++      assigned-clocks = <&cru SCLK_MAC2IO>, <&cru SCLK_MAC2IO_EXT>;
++      assigned-clock-parents = <&gmac_clk>, <&gmac_clk>;
++      clock_in_out = "input";
++      phy-handle = <&rtl8211e>;
++      phy-mode = "rgmii";
++      phy-supply = <&vcc_io_33>;
++      pinctrl-0 = <&rgmiim1_pins>;
++      pinctrl-names = "default";
++      rx_delay = <0x18>;
++      snps,aal;
++      tx_delay = <0x24>;
++      status = "okay";
++
++      mdio {
++              compatible = "snps,dwmac-mdio";
++              #address-cells = <1>;
++              #size-cells = <0>;
++
++              rtl8211e: ethernet-phy@1 {
++                      reg = <1>;
++                      pinctrl-0 = <&eth_phy_reset_pin>;
++                      pinctrl-names = "default";
++                      reset-assert-us = <10000>;
++                      reset-deassert-us = <50000>;
++                      reset-gpios = <&gpio1 RK_PC2 GPIO_ACTIVE_LOW>;
++              };
++      };
++};
++
++&i2c1 {
++      status = "okay";
++
++      rk805: pmic@18 {
++              compatible = "rockchip,rk805";
++              reg = <0x18>;
++              interrupt-parent = <&gpio1>;
++              interrupts = <24 IRQ_TYPE_LEVEL_LOW>;
++              #clock-cells = <1>;
++              clock-output-names = "xin32k", "rk805-clkout2";
++              gpio-controller;
++              #gpio-cells = <2>;
++              pinctrl-0 = <&pmic_int_l>;
++              pinctrl-names = "default";
++              rockchip,system-power-controller;
++              wakeup-source;
++
++              vcc1-supply = <&vdd_5v>;
++              vcc2-supply = <&vdd_5v>;
++              vcc3-supply = <&vdd_5v>;
++              vcc4-supply = <&vdd_5v>;
++              vcc5-supply = <&vcc_io_33>;
++              vcc6-supply = <&vdd_5v>;
++
++              regulators {
++                      vdd_log: DCDC_REG1 {
++                              regulator-name = "vdd_log";
++                              regulator-always-on;
++                              regulator-boot-on;
++                              regulator-min-microvolt = <712500>;
++                              regulator-max-microvolt = <1450000>;
++                              regulator-ramp-delay = <12500>;
++
++                              regulator-state-mem {
++                                      regulator-on-in-suspend;
++                                      regulator-suspend-microvolt = <1000000>;
++                              };
++                      };
++
++                      vdd_arm: DCDC_REG2 {
++                              regulator-name = "vdd_arm";
++                              regulator-always-on;
++                              regulator-boot-on;
++                              regulator-min-microvolt = <712500>;
++                              regulator-max-microvolt = <1450000>;
++                              regulator-ramp-delay = <12500>;
++
++                              regulator-state-mem {
++                                      regulator-on-in-suspend;
++                                      regulator-suspend-microvolt = <950000>;
++                              };
++                      };
++
++                      vcc_ddr: DCDC_REG3 {
++                              regulator-name = "vcc_ddr";
++                              regulator-always-on;
++                              regulator-boot-on;
++
++                              regulator-state-mem {
++                                      regulator-on-in-suspend;
++                              };
++                      };
++
++                      vcc_io_33: DCDC_REG4 {
++                              regulator-name = "vcc_io_33";
++                              regulator-always-on;
++                              regulator-boot-on;
++                              regulator-min-microvolt = <3300000>;
++                              regulator-max-microvolt = <3300000>;
++
++                              regulator-state-mem {
++                                      regulator-on-in-suspend;
++                                      regulator-suspend-microvolt = <3300000>;
++                              };
++                      };
++
++                      vcc_18: LDO_REG1 {
++                              regulator-name = "vcc_18";
++                              regulator-always-on;
++                              regulator-boot-on;
++                              regulator-min-microvolt = <1800000>;
++                              regulator-max-microvolt = <1800000>;
++
++                              regulator-state-mem {
++                                      regulator-on-in-suspend;
++                                      regulator-suspend-microvolt = <1800000>;
++                              };
++                      };
++
++                      vcc18_emmc: LDO_REG2 {
++                              regulator-name = "vcc18_emmc";
++                              regulator-always-on;
++                              regulator-boot-on;
++                              regulator-min-microvolt = <1800000>;
++                              regulator-max-microvolt = <1800000>;
++
++                              regulator-state-mem {
++                                      regulator-on-in-suspend;
++                                      regulator-suspend-microvolt = <1800000>;
++                              };
++                      };
++
++                      vdd_10: LDO_REG3 {
++                              regulator-name = "vdd_10";
++                              regulator-always-on;
++                              regulator-boot-on;
++                              regulator-min-microvolt = <1000000>;
++                              regulator-max-microvolt = <1000000>;
++
++                              regulator-state-mem {
++                                      regulator-on-in-suspend;
++                                      regulator-suspend-microvolt = <1000000>;
++                              };
++                      };
++              };
++      };
++};
++
++&io_domains {
++      pmuio-supply = <&vcc_io_33>;
++      vccio1-supply = <&vcc_io_33>;
++      vccio2-supply = <&vcc18_emmc>;
++      vccio3-supply = <&vcc_io_sdio>;
++      vccio4-supply = <&vcc_18>;
++      vccio5-supply = <&vcc_io_33>;
++      vccio6-supply = <&vcc_io_33>;
++      status = "okay";
++};
++
++&pinctrl {
++      button {
++              reset_button_pin: reset-button-pin {
++                      rockchip,pins = <0 RK_PA0 RK_FUNC_GPIO &pcfg_pull_none>;
++              };
++      };
++
++      ethernet-phy {
++              eth_phy_reset_pin: eth-phy-reset-pin {
++                      rockchip,pins = <1 RK_PC2 RK_FUNC_GPIO &pcfg_pull_down>;
++              };
++      };
++
++      leds {
++              lan_led_pin: lan-led-pin {
++                      rockchip,pins = <2 RK_PB7 RK_FUNC_GPIO &pcfg_pull_none>;
++              };
++
++              sys_led_pin: sys-led-pin {
++                      rockchip,pins = <0 RK_PA2 RK_FUNC_GPIO &pcfg_pull_none>;
++              };
++
++              wan_led_pin: wan-led-pin {
++                      rockchip,pins = <2 RK_PC2 RK_FUNC_GPIO &pcfg_pull_none>;
++              };
++      };
++
++      pmic {
++              pmic_int_l: pmic-int-l {
++                      rockchip,pins = <1 RK_PD0 RK_FUNC_GPIO &pcfg_pull_up>;
++              };
++      };
++
++      sd {
++              sdio_vcc_pin: sdio-vcc-pin {
++                      rockchip,pins = <1 RK_PD4 RK_FUNC_GPIO &pcfg_pull_up>;
++              };
++      };
++};
++
++&pwm2 {
++      status = "okay";
++};
++
++&sdmmc {
++      bus-width = <4>;
++      cap-sd-highspeed;
++      disable-wp;
++      pinctrl-0 = <&sdmmc0_clk>, <&sdmmc0_cmd>, <&sdmmc0_dectn>, <&sdmmc0_bus4>;
++      pinctrl-names = "default";
++      sd-uhs-sdr12;
++      sd-uhs-sdr25;
++      sd-uhs-sdr50;
++      sd-uhs-sdr104;
++      vmmc-supply = <&vcc_sd>;
++      vqmmc-supply = <&vcc_io_sdio>;
++      status = "okay";
++};
++
++&tsadc {
++      rockchip,hw-tshut-mode = <0>;
++      rockchip,hw-tshut-polarity = <0>;
++      status = "okay";
++};
++
++&u2phy {
++      status = "okay";
++};
++
++&u2phy_host {
++      status = "okay";
++};
++
++&u2phy_otg {
++      status = "okay";
++};
++
++&uart2 {
++      status = "okay";
++};
++
++&usb20_otg {
++      status = "okay";
++      dr_mode = "host";
++};
++
++&usb_host0_ehci {
++      status = "okay";
++};
++
++&usb_host0_ohci {
++      status = "okay";
++};
diff --git a/target/linux/rockchip/patches-4.14/002-net-usb-r8152-add-LED-configuration-from-OF.patch b/target/linux/rockchip/patches-4.14/002-net-usb-r8152-add-LED-configuration-from-OF.patch
new file mode 100644 (file)
index 0000000..140e7bf
--- /dev/null
@@ -0,0 +1,74 @@
+From 82985725e071f2a5735052f18e109a32aeac3a0b Mon Sep 17 00:00:00 2001
+From: David Bauer <mail@david-bauer.net>
+Date: Sun, 26 Jul 2020 02:38:31 +0200
+Subject: [PATCH] net: usb: r8152: add LED configuration from OF
+
+This adds the ability to configure the LED configuration register using
+OF. This way, the correct value for board specific LED configuration can
+be determined.
+
+Signed-off-by: David Bauer <mail@david-bauer.net>
+---
+ drivers/net/usb/r8152.c | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+--- a/drivers/net/usb/r8152.c
++++ b/drivers/net/usb/r8152.c
+@@ -15,6 +15,7 @@
+ #include <linux/mii.h>
+ #include <linux/ethtool.h>
+ #include <linux/usb.h>
++#include <linux/of.h>
+ #include <linux/crc32.h>
+ #include <linux/if_vlan.h>
+ #include <linux/uaccess.h>
+@@ -3974,6 +3975,22 @@ static void rtl_tally_reset(struct r8152
+       ocp_write_word(tp, MCU_TYPE_PLA, PLA_RSTTALLY, ocp_data);
+ }
++static int r8152_led_configuration(struct r8152 *tp)
++{
++      u32 led_data;
++      int ret;
++
++      ret = of_property_read_u32(tp->udev->dev.of_node, "realtek,led-data",
++                                                              &led_data);
++
++      if (ret)
++              return ret;
++      
++      ocp_write_word(tp, MCU_TYPE_PLA, PLA_LEDSEL, led_data);
++
++      return 0;
++}
++
+ static void r8152b_init(struct r8152 *tp)
+ {
+       u32 ocp_data;
+@@ -4015,6 +4032,8 @@ static void r8152b_init(struct r8152 *tp
+       ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_USB_CTRL);
+       ocp_data &= ~(RX_AGG_DISABLE | RX_ZERO_EN);
+       ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data);
++
++      r8152_led_configuration(tp);
+ }
+ static void r8153_init(struct r8152 *tp)
+@@ -4138,6 +4157,8 @@ static void r8153_init(struct r8152 *tp)
+               tp->coalesce = COALESCE_SLOW;
+               break;
+       }
++
++      r8152_led_configuration(tp);
+ }
+ static void r8153b_init(struct r8152 *tp)
+@@ -4201,6 +4222,8 @@ static void r8153b_init(struct r8152 *tp
+       rtl_tally_reset(tp);
+       tp->coalesce = 15000;   /* 15 us */
++
++      r8152_led_configuration(tp);
+ }
+ static int rtl8152_pre_reset(struct usb_interface *intf)
diff --git a/target/linux/rockchip/patches-4.14/003-dt-bindings-net-add-RTL8152-binding-documentation.patch b/target/linux/rockchip/patches-4.14/003-dt-bindings-net-add-RTL8152-binding-documentation.patch
new file mode 100755 (executable)
index 0000000..be262b9
--- /dev/null
@@ -0,0 +1,54 @@
+From 3ee05f4aa64fc86af3be5bc176ba5808de9260a7 Mon Sep 17 00:00:00 2001
+From: David Bauer <mail@david-bauer.net>
+Date: Sun, 26 Jul 2020 15:30:33 +0200
+Subject: [PATCH] dt-bindings: net: add RTL8152 binding documentation
+
+Add binding documentation for the Realtek RTL8152 / RTL8153 USB ethernet
+adapters.
+
+Signed-off-by: David Bauer <mail@david-bauer.net>
+---
+ .../bindings/net/realtek,rtl8152.yaml         | 36 +++++++++++++++++++
+ 1 file changed, 36 insertions(+)
+ create mode 100644 Documentation/devicetree/bindings/net/realtek,rtl8152.yaml
+
+--- /dev/null
++++ b/Documentation/devicetree/bindings/net/realtek,rtl8152.yaml
+@@ -0,0 +1,36 @@
++# SPDX-License-Identifier: GPL-2.0
++%YAML 1.2
++---
++$id: http://devicetree.org/schemas/net/realtek,rtl8152.yaml#
++$schema: http://devicetree.org/meta-schemas/core.yaml#
++
++title: Realtek RTL8152/RTL8153 series USB ethernet
++
++maintainers:
++  - David Bauer <mail@david-bauer.net>
++
++properties:
++  compatible:
++    oneOf:
++      - items:
++          - enum:
++              - realtek,rtl8152
++              - realtek,rtl8153
++
++  reg:
++    description: The device number on the USB bus
++
++  realtek,led-data:
++    description: Value to be written to the LED configuration register.
++
++required:
++  - compatible
++  - reg
++
++examples:
++  - |
++    usb-eth@2 {
++      compatible = "realtek,rtl8153";
++      reg = <2>;
++      realtek,led-data = <0x87>;
++    };
+\ No newline at end of file
diff --git a/target/linux/rockchip/patches-4.14/004-arm64-dts-rockchip-Add-txpbl-node-for-RK3399-RK3328.patch b/target/linux/rockchip/patches-4.14/004-arm64-dts-rockchip-Add-txpbl-node-for-RK3399-RK3328.patch
new file mode 100755 (executable)
index 0000000..451f246
--- /dev/null
@@ -0,0 +1,54 @@
+From 8a469ee35606ba65448d54e5a2a23302f7e79e3c Mon Sep 17 00:00:00 2001
+From: Carlos de Paula <me@carlosedp.com>
+Date: Tue, 18 Feb 2020 17:10:37 -0500
+Subject: [PATCH] arm64: dts: rockchip: Add txpbl node for RK3399/RK3328
+
+Some rockchip SoCs like the RK3399 and RK3328 exhibit an issue
+where tx checksumming does not work with packets larger than 1498.
+
+The default Programmable Buffer Length for TX in these GMAC's is
+not suitable for MTUs higher than 1498. The workaround is to disable
+TX offloading with 'ethtool -K eth0 tx off rx off' causing performance
+impacts as it disables hardware checksumming.
+
+This patch sets snps,txpbl to 0x4 which is a safe number tested ok for
+the most popular MTU value of 1500.
+
+For reference, see https://lkml.org/lkml/2019/4/1/1382.
+
+Signed-off-by: Carlos de Paula <me@carlosedp.com>
+Link: https://lore.kernel.org/r/20200218221040.10955-1-me@carlosedp.com
+Signed-off-by: Heiko Stuebner <heiko@sntech.de>
+---
+ arch/arm64/boot/dts/rockchip/rk3328.dtsi | 2 ++
+ arch/arm64/boot/dts/rockchip/rk3399.dtsi | 1 +
+ 2 files changed, 3 insertions(+)
+
+--- a/arch/arm64/boot/dts/rockchip/rk3328.dtsi
++++ b/arch/arm64/boot/dts/rockchip/rk3328.dtsi
+@@ -729,6 +729,7 @@
+               resets = <&cru SRST_GMAC2IO_A>;
+               reset-names = "stmmaceth";
+               rockchip,grf = <&grf>;
++              snps,txpbl = <0x4>;
+               status = "disabled";
+       };
+@@ -750,6 +751,7 @@
+               reset-names = "stmmaceth", "mac-phy";
+               phy-mode = "rmii";
+               phy-handle = <&phy>;
++              snps,txpbl = <0x4>;
+               status = "disabled";
+               mdio {
+--- a/arch/arm64/boot/dts/rockchip/rk3399.dtsi
++++ b/arch/arm64/boot/dts/rockchip/rk3399.dtsi
+@@ -290,6 +290,7 @@
+               resets = <&cru SRST_A_GMAC>;
+               reset-names = "stmmaceth";
+               rockchip,grf = <&grf>;
++              snps,txpbl = <0x4>;
+               status = "disabled";
+       };
diff --git a/target/linux/rockchip/patches-4.14/005-rockchip-rk3328-add-compatible-to-NanoPi-R2S-etherne.patch b/target/linux/rockchip/patches-4.14/005-rockchip-rk3328-add-compatible-to-NanoPi-R2S-etherne.patch
new file mode 100755 (executable)
index 0000000..897a42f
--- /dev/null
@@ -0,0 +1,25 @@
+From bc6c96d850419e71dbc9b0094ccc9b668ba9be43 Mon Sep 17 00:00:00 2001
+From: David Bauer <mail@david-bauer.net>
+Date: Mon, 28 Sep 2020 22:54:52 +0200
+Subject: [PATCH] rockchip: rk3328: add compatible to NanoPi R2S ethernet PHY
+
+This adds the compatible property to the NanoPi R2S ethernet PHY node.
+Otherwise, the PHY might not be probed, as the PHY ID reads all 0xff
+when it is still in reset.
+
+Signed-off-by: David Bauer <mail@david-bauer.net>
+---
+ arch/arm64/boot/dts/rockchip/rk3328-nanopi-r2s.dts | 2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/arch/arm64/boot/dts/rockchip/rk3328-nanopi-r2s.dts
++++ b/arch/arm64/boot/dts/rockchip/rk3328-nanopi-r2s.dts
+@@ -134,6 +134,8 @@
+               #size-cells = <0>;
+               rtl8211e: ethernet-phy@1 {
++                      compatible = "ethernet-phy-id001c.c915",
++                                   "ethernet-phy-ieee802.3-c22";
+                       reg = <1>;
+                       pinctrl-0 = <&eth_phy_reset_pin>;
+                       pinctrl-names = "default";
diff --git a/target/linux/rockchip/patches-4.14/006-rockchip-rk3328-Add-support-for-ThinkPenguin-TPE-R1400.patch b/target/linux/rockchip/patches-4.14/006-rockchip-rk3328-Add-support-for-ThinkPenguin-TPE-R1400.patch
new file mode 100755 (executable)
index 0000000..87b28b7
--- /dev/null
@@ -0,0 +1,424 @@
+--- /dev/null
++++ b/arch/arm64/boot/dts/rockchip/rk3328-tpe-r1400.dts
+@@ -0,0 +1,411 @@
++// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
++/*
++ * Copyright (c) 2020 David Bauer <mail@david-bauer.net>
++ */
++
++/dts-v1/;
++
++#include <dt-bindings/input/input.h>
++#include <dt-bindings/gpio/gpio.h>
++#include "rk3328.dtsi"
++
++/ {
++      model = "ThinkPenguin TPE-R1400";
++      compatible = "thinkpenguin,tpe-r1400", "rockchip,rk3328";
++
++      aliases {
++              led-boot = &sys_led;
++              led-failsafe = &sys_led;
++              led-running = &sys_led;
++              led-upgrade = &sys_led;
++      };
++
++      chosen {
++              stdout-path = "serial2:1500000n8";
++      };
++
++      gmac_clk: gmac-clock {
++              compatible = "fixed-clock";
++              clock-frequency = <125000000>;
++              clock-output-names = "gmac_clk";
++              #clock-cells = <0>;
++      };
++
++      keys {
++              compatible = "gpio-keys";
++              pinctrl-0 = <&reset_button_pin>;
++              pinctrl-names = "default";
++
++              reset {
++                      label = "reset";
++                      gpios = <&gpio0 RK_PA0 GPIO_ACTIVE_LOW>;
++                      linux,code = <KEY_RESTART>;
++                      debounce-interval = <50>;
++              };
++      };
++
++      vcc_rtl8153: vcc-rtl8153-regulator {
++              compatible = "regulator-fixed";
++              gpio = <&gpio2 RK_PC6 GPIO_ACTIVE_HIGH>;
++              pinctrl-names = "default";
++              pinctrl-0 = <&rtl8153_en_drv>;
++              regulator-always-on;
++              regulator-name = "vcc_rtl8153";
++              regulator-min-microvolt = <5000000>;
++              regulator-max-microvolt = <5000000>;
++              enable-active-high;
++      };
++
++      leds {
++              compatible = "gpio-leds";
++              pinctrl-0 = <&lan_led_pin>,  <&sys_led_pin>, <&wan_led_pin>;
++              pinctrl-names = "default";
++
++              lan_led: led-0 {
++                      gpios = <&gpio2 RK_PB7 GPIO_ACTIVE_HIGH>;
++                      label = "tpe-r1400:green:lan";
++              };
++
++              sys_led: led-1 {
++                      gpios = <&gpio0 RK_PA2 GPIO_ACTIVE_HIGH>;
++                      label = "tpe-r1400:red:sys";
++              };
++
++              wan_led: led-2 {
++                      gpios = <&gpio2 RK_PC2 GPIO_ACTIVE_HIGH>;
++                      label = "tpe-r1400:green:wan";
++              };
++      };
++
++      vcc_io_sdio: sdmmcio-regulator {
++              compatible = "regulator-gpio";
++              enable-active-high;
++              gpios = <&gpio1 RK_PD4 GPIO_ACTIVE_HIGH>;
++              pinctrl-0 = <&sdio_vcc_pin>;
++              pinctrl-names = "default";
++              regulator-name = "vcc_io_sdio";
++              regulator-always-on;
++              regulator-min-microvolt = <1800000>;
++              regulator-max-microvolt = <3300000>;
++              regulator-settling-time-us = <5000>;
++              regulator-type = "voltage";
++              startup-delay-us = <2000>;
++              states = <1800000 0x1
++                        3300000 0x0>;
++              vin-supply = <&vcc_io_33>;
++      };
++
++      vcc_sd: sdmmc-regulator {
++              compatible = "regulator-fixed";
++              gpio = <&gpio0 RK_PD6 GPIO_ACTIVE_LOW>;
++              pinctrl-0 = <&sdmmc0m1_gpio>;
++              pinctrl-names = "default";
++              regulator-name = "vcc_sd";
++              regulator-boot-on;
++              regulator-min-microvolt = <3300000>;
++              regulator-max-microvolt = <3300000>;
++              vin-supply = <&vcc_io_33>;
++      };
++
++      vdd_5v: vdd-5v {
++              compatible = "regulator-fixed";
++              regulator-name = "vdd_5v";
++              regulator-always-on;
++              regulator-boot-on;
++              regulator-min-microvolt = <5000000>;
++              regulator-max-microvolt = <5000000>;
++      };
++};
++
++&cpu0 {
++      cpu-supply = <&vdd_arm>;
++};
++
++&cpu1 {
++      cpu-supply = <&vdd_arm>;
++};
++
++&cpu2 {
++      cpu-supply = <&vdd_arm>;
++};
++
++&cpu3 {
++      cpu-supply = <&vdd_arm>;
++};
++
++&gmac2io {
++      assigned-clocks = <&cru SCLK_MAC2IO>, <&cru SCLK_MAC2IO_EXT>;
++      assigned-clock-parents = <&gmac_clk>, <&gmac_clk>;
++      clock_in_out = "input";
++      phy-handle = <&rtl8211e>;
++      phy-mode = "rgmii";
++      phy-supply = <&vcc_io_33>;
++      pinctrl-0 = <&rgmiim1_pins>;
++      pinctrl-names = "default";
++      rx_delay = <0x18>;
++      snps,aal;
++      tx_delay = <0x24>;
++      status = "okay";
++
++      mdio {
++              compatible = "snps,dwmac-mdio";
++              #address-cells = <1>;
++              #size-cells = <0>;
++
++              rtl8211e: ethernet-phy@1 {
++                      compatible = "ethernet-phy-id001c.c915",
++                                   "ethernet-phy-ieee802.3-c22";
++                      reg = <1>;
++                      pinctrl-0 = <&eth_phy_reset_pin>;
++                      pinctrl-names = "default";
++                      reset-assert-us = <10000>;
++                      reset-deassert-us = <50000>;
++                      reset-gpios = <&gpio1 RK_PC2 GPIO_ACTIVE_LOW>;
++              };
++      };
++};
++
++&i2c1 {
++      status = "okay";
++
++      rk805: pmic@18 {
++              compatible = "rockchip,rk805";
++              reg = <0x18>;
++              interrupt-parent = <&gpio1>;
++              interrupts = <24 IRQ_TYPE_LEVEL_LOW>;
++              #clock-cells = <1>;
++              clock-output-names = "xin32k", "rk805-clkout2";
++              gpio-controller;
++              #gpio-cells = <2>;
++              pinctrl-0 = <&pmic_int_l>;
++              pinctrl-names = "default";
++              rockchip,system-power-controller;
++              wakeup-source;
++
++              vcc1-supply = <&vdd_5v>;
++              vcc2-supply = <&vdd_5v>;
++              vcc3-supply = <&vdd_5v>;
++              vcc4-supply = <&vdd_5v>;
++              vcc5-supply = <&vcc_io_33>;
++              vcc6-supply = <&vdd_5v>;
++
++              regulators {
++                      vdd_log: DCDC_REG1 {
++                              regulator-name = "vdd_log";
++                              regulator-always-on;
++                              regulator-boot-on;
++                              regulator-min-microvolt = <712500>;
++                              regulator-max-microvolt = <1450000>;
++                              regulator-ramp-delay = <12500>;
++
++                              regulator-state-mem {
++                                      regulator-on-in-suspend;
++                                      regulator-suspend-microvolt = <1000000>;
++                              };
++                      };
++
++                      vdd_arm: DCDC_REG2 {
++                              regulator-name = "vdd_arm";
++                              regulator-always-on;
++                              regulator-boot-on;
++                              regulator-min-microvolt = <712500>;
++                              regulator-max-microvolt = <1450000>;
++                              regulator-ramp-delay = <12500>;
++
++                              regulator-state-mem {
++                                      regulator-on-in-suspend;
++                                      regulator-suspend-microvolt = <950000>;
++                              };
++                      };
++
++                      vcc_ddr: DCDC_REG3 {
++                              regulator-name = "vcc_ddr";
++                              regulator-always-on;
++                              regulator-boot-on;
++
++                              regulator-state-mem {
++                                      regulator-on-in-suspend;
++                              };
++                      };
++
++                      vcc_io_33: DCDC_REG4 {
++                              regulator-name = "vcc_io_33";
++                              regulator-always-on;
++                              regulator-boot-on;
++                              regulator-min-microvolt = <3300000>;
++                              regulator-max-microvolt = <3300000>;
++
++                              regulator-state-mem {
++                                      regulator-on-in-suspend;
++                                      regulator-suspend-microvolt = <3300000>;
++                              };
++                      };
++
++                      vcc_18: LDO_REG1 {
++                              regulator-name = "vcc_18";
++                              regulator-always-on;
++                              regulator-boot-on;
++                              regulator-min-microvolt = <1800000>;
++                              regulator-max-microvolt = <1800000>;
++
++                              regulator-state-mem {
++                                      regulator-on-in-suspend;
++                                      regulator-suspend-microvolt = <1800000>;
++                              };
++                      };
++
++                      vcc18_emmc: LDO_REG2 {
++                              regulator-name = "vcc18_emmc";
++                              regulator-always-on;
++                              regulator-boot-on;
++                              regulator-min-microvolt = <1800000>;
++                              regulator-max-microvolt = <1800000>;
++
++                              regulator-state-mem {
++                                      regulator-on-in-suspend;
++                                      regulator-suspend-microvolt = <1800000>;
++                              };
++                      };
++
++                      vdd_10: LDO_REG3 {
++                              regulator-name = "vdd_10";
++                              regulator-always-on;
++                              regulator-boot-on;
++                              regulator-min-microvolt = <1000000>;
++                              regulator-max-microvolt = <1000000>;
++
++                              regulator-state-mem {
++                                      regulator-on-in-suspend;
++                                      regulator-suspend-microvolt = <1000000>;
++                              };
++                      };
++              };
++      };
++
++      usb {
++              rtl8153_en_drv: rtl8153-en-drv {
++                      rockchip,pins = <2 RK_PC6 RK_FUNC_GPIO &pcfg_pull_none>;
++              };
++      };
++};
++
++&io_domains {
++      pmuio-supply = <&vcc_io_33>;
++      vccio1-supply = <&vcc_io_33>;
++      vccio2-supply = <&vcc18_emmc>;
++      vccio3-supply = <&vcc_io_sdio>;
++      vccio4-supply = <&vcc_18>;
++      vccio5-supply = <&vcc_io_33>;
++      vccio6-supply = <&vcc_io_33>;
++      status = "okay";
++};
++
++&pinctrl {
++      button {
++              reset_button_pin: reset-button-pin {
++                      rockchip,pins = <0 RK_PA0 RK_FUNC_GPIO &pcfg_pull_none>;
++              };
++      };
++
++      ethernet-phy {
++              eth_phy_reset_pin: eth-phy-reset-pin {
++                      rockchip,pins = <1 RK_PC2 RK_FUNC_GPIO &pcfg_pull_down>;
++              };
++      };
++
++      leds {
++              lan_led_pin: lan-led-pin {
++                      rockchip,pins = <2 RK_PB7 RK_FUNC_GPIO &pcfg_pull_none>;
++              };
++
++              sys_led_pin: sys-led-pin {
++                      rockchip,pins = <0 RK_PA2 RK_FUNC_GPIO &pcfg_pull_none>;
++              };
++
++              wan_led_pin: wan-led-pin {
++                      rockchip,pins = <2 RK_PC2 RK_FUNC_GPIO &pcfg_pull_none>;
++              };
++      };
++
++      pmic {
++              pmic_int_l: pmic-int-l {
++                      rockchip,pins = <1 RK_PD0 RK_FUNC_GPIO &pcfg_pull_up>;
++              };
++      };
++
++      sd {
++              sdio_vcc_pin: sdio-vcc-pin {
++                      rockchip,pins = <1 RK_PD4 RK_FUNC_GPIO &pcfg_pull_up>;
++              };
++      };
++};
++
++&pwm2 {
++      status = "okay";
++};
++
++&sdmmc {
++      bus-width = <4>;
++      cap-sd-highspeed;
++      disable-wp;
++      pinctrl-0 = <&sdmmc0_clk>, <&sdmmc0_cmd>, <&sdmmc0_dectn>, <&sdmmc0_bus4>;
++      pinctrl-names = "default";
++      sd-uhs-sdr12;
++      sd-uhs-sdr25;
++      sd-uhs-sdr50;
++      sd-uhs-sdr104;
++      vmmc-supply = <&vcc_sd>;
++      vqmmc-supply = <&vcc_io_sdio>;
++      status = "okay";
++};
++
++&tsadc {
++      rockchip,hw-tshut-mode = <0>;
++      rockchip,hw-tshut-polarity = <0>;
++      status = "okay";
++};
++
++&u2phy {
++      status = "okay";
++};
++
++&u2phy_host {
++      status = "okay";
++};
++
++&u2phy_otg {
++      status = "okay";
++};
++
++&uart2 {
++      status = "okay";
++};
++
++&usb20_otg {
++      status = "okay";
++      dr_mode = "host";
++};
++
++&usb_host0_ehci {
++      status = "okay";
++};
++
++&usb_host0_ohci {
++      status = "okay";
++};
++
++&usbdrd3 {
++      status = "okay";
++};
++
++&usbdrd_dwc3 {
++      dr_mode = "host";
++      status = "okay";
++
++      usb-eth@2 {
++              compatible = "realtek,rtl8153";
++              reg = <2>;
++
++              realtek,led-data = <0x87>;
++      };
++};
+--- a/arch/arm64/boot/dts/rockchip/Makefile
++++ b/arch/arm64/boot/dts/rockchip/Makefile
+@@ -8,6 +8,7 @@ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3368-px
+ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3368-r88.dtb
+ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-evb.dtb
+ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3328-nanopi-r2s.dtb
++dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3328-tpe-r1400.dtb
+ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-firefly.dtb
+ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-gru-kevin.dtb
+ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-puma-haikou.dtb
diff --git a/target/linux/rockchip/patches-4.14/100-rockchip-use-system-LED-for-OpenWrt.patch b/target/linux/rockchip/patches-4.14/100-rockchip-use-system-LED-for-OpenWrt.patch
new file mode 100755 (executable)
index 0000000..7f9af85
--- /dev/null
@@ -0,0 +1,31 @@
+From 6731d2c9039fbe1ecf21915eab3acee0a999508a Mon Sep 17 00:00:00 2001
+From: David Bauer <mail@david-bauer.net>
+Date: Fri, 10 Jul 2020 21:38:20 +0200
+Subject: [PATCH] rockchip: use system LED for OpenWrt
+
+Use the SYS LED on the casing for showing system status.
+
+This patch is kept seperate from the NanoPi R2S support patch, as i plan
+on submitting the device support upstream.
+
+Signed-off-by: David Bauer <mail@david-bauer.net>
+---
+ arch/arm64/boot/dts/rockchip/rk3328-nanopi-r2s.dts | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+--- a/arch/arm64/boot/dts/rockchip/rk3328-nanopi-r2s.dts
++++ b/arch/arm64/boot/dts/rockchip/rk3328-nanopi-r2s.dts
+@@ -13,6 +13,13 @@
+       model = "FriendlyElec NanoPi R2S";
+       compatible = "friendlyarm,nanopi-r2s", "rockchip,rk3328";
++      aliases {
++              led-boot = &sys_led;
++              led-failsafe = &sys_led;
++              led-running = &sys_led;
++              led-upgrade = &sys_led;
++      };
++
+       chosen {
+               stdout-path = "serial2:1500000n8";
+       };
diff --git a/target/linux/rockchip/patches-4.14/101-dts-rockchip-add-usb3-controller-node-for-RK3328-SoCs.patch b/target/linux/rockchip/patches-4.14/101-dts-rockchip-add-usb3-controller-node-for-RK3328-SoCs.patch
new file mode 100755 (executable)
index 0000000..e486e42
--- /dev/null
@@ -0,0 +1,62 @@
+From: William Wu <william.wu@rock-chips.com>
+
+RK3328 has one USB 3.0 OTG controller which uses DWC_USB3
+core's general architecture. It can act as static xHCI host
+controller, static device controller, USB 3.0/2.0 OTG basing
+on ID of USB3.0 PHY.
+
+Signed-off-by: William Wu <william.wu@rock-chips.com>
+Signed-off-by: Leonidas P. Papadakos <papadakospan@gmail.com>
+
+---
+
+NOTE: This binding still has issues. From the original thread:
+
+the rk3328 usb3-phy has an issue with detecting any plugin events
+after a previous device got removed - see the inno-usb3-phy driver
+in the vendor kernel.
+
+The current state is good-enough for enabling the USB3 attached LAN
+port of the NanoPi R2S. However, it might explode depending on your
+use-case. You've been warned.
+
+---
+ arch/arm64/boot/dts/rockchip/rk3328.dtsi | 27 ++++++++++++++++++++++++
+ 1 file changed, 27 insertions(+)
+
+--- a/arch/arm64/boot/dts/rockchip/rk3328.dtsi
++++ b/arch/arm64/boot/dts/rockchip/rk3328.dtsi
+@@ -810,6 +810,33 @@
+               status = "disabled";
+       };
++      usbdrd3: usb@ff600000 {
++              compatible = "rockchip,rk3328-dwc3", "rockchip,rk3399-dwc3";
++              clocks = <&cru SCLK_USB3OTG_REF>, <&cru SCLK_USB3OTG_SUSPEND>,
++                       <&cru ACLK_USB3OTG>;
++              clock-names = "ref_clk", "suspend_clk",
++                            "bus_clk";
++              #address-cells = <2>;
++              #size-cells = <2>;
++              ranges;
++              status = "disabled";
++
++              usbdrd_dwc3: dwc3@ff600000 {
++                      compatible = "snps,dwc3";
++                      reg = <0x0 0xff600000 0x0 0x100000>;
++                      interrupts = <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>;
++                      dr_mode = "otg";
++                      phy_type = "utmi_wide";
++                      snps,dis_enblslpm_quirk;
++                      snps,dis-u2-freeclk-exists-quirk;
++                      snps,dis_u2_susphy_quirk;
++                      snps,dis_u3_susphy_quirk;
++                      snps,dis-del-phy-power-chg-quirk;
++                      snps,dis-tx-ipgap-linecheck-quirk;
++                      status = "disabled";
++              };
++      };
++
+       gic: interrupt-controller@ff811000 {
+               compatible = "arm,gic-400";
+               #interrupt-cells = <3>;
diff --git a/target/linux/rockchip/patches-4.14/102-rockchip-enable-LAN-port-on-NanoPi-R2S.patch b/target/linux/rockchip/patches-4.14/102-rockchip-enable-LAN-port-on-NanoPi-R2S.patch
new file mode 100755 (executable)
index 0000000..243c1ac
--- /dev/null
@@ -0,0 +1,60 @@
+From 0fc3b9b7619c4878f73a6a7989863f0d1a3fd392 Mon Sep 17 00:00:00 2001
+From: David Bauer <mail@david-bauer.net>
+Date: Fri, 10 Jul 2020 21:12:16 +0200
+Subject: [PATCH] rockchip: enabled LAN port on NanoPi R2S
+
+Enable the USB3 port on the FriendlyARM NanoPi R2S.
+This is required for the USB3 attached LAN port to work.
+
+Signed-off-by: David Bauer <mail@david-bauer.net>
+---
+ .../boot/dts/rockchip/rk3328-nanopi-r2s.dts   | 27 +++++++++++++++++++
+ 1 file changed, 27 insertions(+)
+
+--- a/arch/arm64/boot/dts/rockchip/rk3328-nanopi-r2s.dts
++++ b/arch/arm64/boot/dts/rockchip/rk3328-nanopi-r2s.dts
+@@ -44,6 +44,18 @@
+               };
+       };
++      vcc_rtl8153: vcc-rtl8153-regulator {
++              compatible = "regulator-fixed";
++              gpio = <&gpio2 RK_PC6 GPIO_ACTIVE_HIGH>;
++              pinctrl-names = "default";
++              pinctrl-0 = <&rtl8153_en_drv>;
++              regulator-always-on;
++              regulator-name = "vcc_rtl8153";
++              regulator-min-microvolt = <5000000>;
++              regulator-max-microvolt = <5000000>;
++              enable-active-high;
++      };
++
+       leds {
+               compatible = "gpio-leds";
+               pinctrl-0 = <&lan_led_pin>,  <&sys_led_pin>, <&wan_led_pin>;
+@@ -269,6 +281,12 @@
+                       };
+               };
+       };
++
++      usb {
++              rtl8153_en_drv: rtl8153-en-drv {
++                      rockchip,pins = <2 RK_PC6 RK_FUNC_GPIO &pcfg_pull_none>;
++              };
++      };
+ };
+ &io_domains {
+@@ -375,3 +393,12 @@
+ &usb_host0_ohci {
+       status = "okay";
+ };
++
++&usbdrd3 {
++      status = "okay";
++};
++
++&usbdrd_dwc3 {
++      dr_mode = "host";
++      status = "okay";
++};
diff --git a/target/linux/rockchip/patches-4.14/103-arm64-rockchip-add-OF-node-for-USB-eth-on-NanoPi-R2S.patch b/target/linux/rockchip/patches-4.14/103-arm64-rockchip-add-OF-node-for-USB-eth-on-NanoPi-R2S.patch
new file mode 100755 (executable)
index 0000000..e318f31
--- /dev/null
@@ -0,0 +1,28 @@
+From 2795c8b31a686bdb8338f9404d18ef7a154f0d75 Mon Sep 17 00:00:00 2001
+From: David Bauer <mail@david-bauer.net>
+Date: Sun, 26 Jul 2020 13:32:59 +0200
+Subject: [PATCH] arm64: rockchip: add OF node for USB eth on NanoPi R2S
+
+This adds the OF node for the USB3 ethernet adapter on the FriendlyARM
+NanoPi R2S. Add the correct value for the RTL8153 LED configuration
+register to match the blink behavior of the other port on the device.
+
+Signed-off-by: David Bauer <mail@david-bauer.net>
+---
+ arch/arm64/boot/dts/rockchip/rk3328-nanopi-r2s.dts | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+--- a/arch/arm64/boot/dts/rockchip/rk3328-nanopi-r2s.dts
++++ b/arch/arm64/boot/dts/rockchip/rk3328-nanopi-r2s.dts
+@@ -401,4 +401,11 @@
+ &usbdrd_dwc3 {
+       dr_mode = "host";
+       status = "okay";
++
++      usb-eth@2 {
++              compatible = "realtek,rtl8153";
++              reg = <2>;
++
++              realtek,led-data = <0x87>;
++      };
+ };