From 2784df90cdc8a3b03059d2c1022c6895d962d2f5 Mon Sep 17 00:00:00 2001 From: DHDAXCW Date: Sat, 29 Oct 2022 12:27:25 +0000 Subject: [PATCH] uboot-rockchip:tidy up a few things and get ready for the rk356x --- .../Makefile | 28 +- .../pack-firmware.sh | 37 +- .../src/bin/rk35/rk3568_bl31_v1.28.elf | Bin 0 -> 335928 bytes package/boot/uboot-rockchip/Makefile | 144 +- .../014-uboot-add-Radxa-ROCK-3A-board.patch | 83 +- .../015-uboot-add-NanoPi-R5S-board.patch | 8 +- ...CONFIG_USB_OHCI_NEW-et-al-to-Kconfig.patch | 282 +++ .../103-tools-disable-TOOLS_LIBCRYPTO.patch | 21 - ...01-scripts-remove-dependency-on-swig.patch | 24 - ...-spl-remove-dtoc-of-pdata-generation.patch | 28 - ...s-rockchip-Add-GuangMiao-G4C-support.patch | 740 ------- ...-Add-support-for-EmbedFire-DoorNet1.patch} | 1099 ++++----- ...28-Add-support-for-Orangepi-R1-Plus.patch} | 3 +- ...dd-support-for-Orangepi-R1-Plus-LTS.patch} | 3 +- ...dd-support-for-FriendlyARM-NanoPi-R.patch} | 3 +- ...Add-support-for-FriendlyARM-NanoPi-R.patch | 113 + ...-Add-support-for-EmbedFire-DoorNet2.patch} | 1970 ++++++++--------- ...68-Add-support-for-ezpro_mrkaio-m68s.patch | 406 ++++ ...568-Add-support-for-hinlink-opc-h68k.patch | 415 ++++ ...ip-rk3568-Add-support-for-Station-P2.patch | 77 + ...split-doornet2-rk3399-out-of-evb_rk.patch} | 1392 ++++++------ .../patches/900-arm-boot-add-dts-files.patch | 10 - .../src/arch/arm/dts/rk3399-nanopi-r4se.dts | 139 -- .../src/configs/nanopi-r4se-rk3399_defconfig | 65 - .../src/of-platdata/doornet1-rk3328/dt-decl.h | 23 - .../src/of-platdata/doornet1-rk3328/dt-plat.c | 127 -- .../doornet1-rk3328/dt-structs-gen.h | 51 - .../of-platdata/nanopi-r2c-rk3328/dt-decl.h | 23 - .../of-platdata/nanopi-r2c-rk3328/dt-plat.c | 155 -- .../nanopi-r2c-rk3328/dt-structs-gen.h | 51 - .../of-platdata/nanopi-r2s-rk3328/dt-decl.h | 23 - .../of-platdata/nanopi-r2s-rk3328/dt-plat.c | 155 -- .../nanopi-r2s-rk3328/dt-structs-gen.h | 51 - .../orangepi-r1-plus-lts-rk3328/dt-decl.h | 23 - .../orangepi-r1-plus-lts-rk3328/dt-plat.c | 154 -- .../dt-structs-gen.h | 51 - .../orangepi-r1-plus-rk3328/dt-decl.h | 23 - .../orangepi-r1-plus-rk3328/dt-plat.c | 155 -- .../orangepi-r1-plus-rk3328/dt-structs-gen.h | 51 - 39 files changed, 3653 insertions(+), 4553 deletions(-) create mode 100644 package/boot/arm-trusted-firmware-rockchip-vendor/src/bin/rk35/rk3568_bl31_v1.28.elf create mode 100644 package/boot/uboot-rockchip/patches/100-Convert-CONFIG_USB_OHCI_NEW-et-al-to-Kconfig.patch delete mode 100644 package/boot/uboot-rockchip/patches/103-tools-disable-TOOLS_LIBCRYPTO.patch delete mode 100644 package/boot/uboot-rockchip/patches/201-scripts-remove-dependency-on-swig.patch delete mode 100644 package/boot/uboot-rockchip/patches/202-spl-remove-dtoc-of-pdata-generation.patch delete mode 100644 package/boot/uboot-rockchip/patches/301-arm64-dts-rockchip-Add-GuangMiao-G4C-support.patch rename package/boot/uboot-rockchip/patches/{302-rockchip-rk3328-Add-support-for-EmbedFire-DoorNet1.patch => 301-rockchip-rk3328-Add-support-for-EmbedFire-DoorNet1.patch} (95%) rename package/boot/uboot-rockchip/patches/{304-rockchip-rk3328-Add-support-for-Orangepi-R1-Plus.patch => 302-rockchip-rk3328-Add-support-for-Orangepi-R1-Plus.patch} (98%) rename package/boot/uboot-rockchip/patches/{306-rockchip-rk3328-Add-support-for-Orangepi-R1-Plus-LTS.patch => 303-rockchip-rk3328-Add-support-for-Orangepi-R1-Plus-LTS.patch} (98%) rename package/boot/uboot-rockchip/patches/{305-rockchip-rk3328-Add-support-for-FriendlyARM-NanoPi-R.patch => 304-rockchip-rk3328-Add-support-for-FriendlyARM-NanoPi-R.patch} (98%) create mode 100644 package/boot/uboot-rockchip/patches/305-rockchip-rk3399-Add-support-for-FriendlyARM-NanoPi-R.patch rename package/boot/uboot-rockchip/patches/{303-rockchip-rk3399-Add-support-for-EmbedFire-DoorNet2.patch => 306-rockchip-rk3399-Add-support-for-EmbedFire-DoorNet2.patch} (95%) create mode 100644 package/boot/uboot-rockchip/patches/307-rockchip-rk3568-Add-support-for-ezpro_mrkaio-m68s.patch create mode 100644 package/boot/uboot-rockchip/patches/308-rockchip-rk3568-Add-support-for-hinlink-opc-h68k.patch create mode 100644 package/boot/uboot-rockchip/patches/309-rockchip-rk3568-Add-support-for-Station-P2.patch rename package/boot/uboot-rockchip/patches/{307-rockchip-rk3399-split-doornet2-rk3399-out-of-evb_rk.patch => 310-rockchip-rk3399-split-doornet2-rk3399-out-of-evb_rk.patch} (95%) delete mode 100644 package/boot/uboot-rockchip/patches/900-arm-boot-add-dts-files.patch delete mode 100644 package/boot/uboot-rockchip/src/arch/arm/dts/rk3399-nanopi-r4se.dts delete mode 100644 package/boot/uboot-rockchip/src/configs/nanopi-r4se-rk3399_defconfig delete mode 100644 package/boot/uboot-rockchip/src/of-platdata/doornet1-rk3328/dt-decl.h delete mode 100644 package/boot/uboot-rockchip/src/of-platdata/doornet1-rk3328/dt-plat.c delete mode 100644 package/boot/uboot-rockchip/src/of-platdata/doornet1-rk3328/dt-structs-gen.h delete mode 100644 package/boot/uboot-rockchip/src/of-platdata/nanopi-r2c-rk3328/dt-decl.h delete mode 100644 package/boot/uboot-rockchip/src/of-platdata/nanopi-r2c-rk3328/dt-plat.c delete mode 100644 package/boot/uboot-rockchip/src/of-platdata/nanopi-r2c-rk3328/dt-structs-gen.h delete mode 100644 package/boot/uboot-rockchip/src/of-platdata/nanopi-r2s-rk3328/dt-decl.h delete mode 100644 package/boot/uboot-rockchip/src/of-platdata/nanopi-r2s-rk3328/dt-plat.c delete mode 100644 package/boot/uboot-rockchip/src/of-platdata/nanopi-r2s-rk3328/dt-structs-gen.h delete mode 100644 package/boot/uboot-rockchip/src/of-platdata/orangepi-r1-plus-lts-rk3328/dt-decl.h delete mode 100644 package/boot/uboot-rockchip/src/of-platdata/orangepi-r1-plus-lts-rk3328/dt-plat.c delete mode 100644 package/boot/uboot-rockchip/src/of-platdata/orangepi-r1-plus-lts-rk3328/dt-structs-gen.h delete mode 100644 package/boot/uboot-rockchip/src/of-platdata/orangepi-r1-plus-rk3328/dt-decl.h delete mode 100644 package/boot/uboot-rockchip/src/of-platdata/orangepi-r1-plus-rk3328/dt-plat.c delete mode 100644 package/boot/uboot-rockchip/src/of-platdata/orangepi-r1-plus-rk3328/dt-structs-gen.h diff --git a/package/boot/arm-trusted-firmware-rockchip-vendor/Makefile b/package/boot/arm-trusted-firmware-rockchip-vendor/Makefile index 38e8c8567..88e9c070d 100644 --- a/package/boot/arm-trusted-firmware-rockchip-vendor/Makefile +++ b/package/boot/arm-trusted-firmware-rockchip-vendor/Makefile @@ -1,6 +1,6 @@ # SPDX-License-Identifier: GPL-2.0-only # -# Copyright (C) 2021 ImmortalWrt.org +# Copyright (C) 2022 ImmortalWrt.org include $(TOPDIR)/rules.mk @@ -9,9 +9,9 @@ PKG_RELEASE:=$(AUTORELEASE) PKG_SOURCE_PROTO:=git PKG_SOURCE_URL=https://github.com/rockchip-linux/rkbin.git -PKG_SOURCE_DATE:=2021-06-01 -PKG_SOURCE_VERSION:=7d631e0d5b2d373b54d4533580d08fb9bd2eaad4 -PKG_MIRROR_HASH:=3a4794d1d00890401b032a573fca3121935ea036468a67228f203d68b007d916 +PKG_SOURCE_DATE:=2022-08-01 +PKG_SOURCE_VERSION:=b0c100f1a260d807df450019774993c761beb79d +PKG_MIRROR_HASH:=17723ac8f6ec446c759444ee29ba4fe544cebb3785e26d8e10c91c54b9df3f1a PKG_MAINTAINER:=Tianling Shen @@ -37,6 +37,18 @@ define Package/arm-trusted-firmware-rk3399 VARIANT:=rk3399 endef +define Package/arm-trusted-firmware-rk3568 + $(Package/arm-trusted-firmware-rockchip-vendor) + DEPENDS:=@TARGET_rockchip_armv8 + VARIANT:=rk3568 +endef + +define Package/arm-trusted-firmware-rk3588 + $(Package/arm-trusted-firmware-rockchip-vendor) + DEPENDS:=@TARGET_rockchip_armv8 + VARIANT:=rk3588 +endef + define Build/Configure $(SED) 's,$$$$(PKG_BUILD_DIR),$(PKG_BUILD_DIR),g' $(PKG_BUILD_DIR)/trust.ini $(SED) 's,$$$$(VARIANT),$(BUILD_VARIANT),g' $(PKG_BUILD_DIR)/trust.ini @@ -57,5 +69,13 @@ endef define Package/arm-trusted-firmware-rk3399/install endef +define Package/arm-trusted-firmware-rk3568/install +endef + +define Package/arm-trusted-firmware-rk3588/install +endef + $(eval $(call BuildPackage,arm-trusted-firmware-rk3328)) $(eval $(call BuildPackage,arm-trusted-firmware-rk3399)) +$(eval $(call BuildPackage,arm-trusted-firmware-rk3568)) +$(eval $(call BuildPackage,arm-trusted-firmware-rk3588)) diff --git a/package/boot/arm-trusted-firmware-rockchip-vendor/pack-firmware.sh b/package/boot/arm-trusted-firmware-rockchip-vendor/pack-firmware.sh index 6bc9faf33..6dfb89172 100755 --- a/package/boot/arm-trusted-firmware-rockchip-vendor/pack-firmware.sh +++ b/package/boot/arm-trusted-firmware-rockchip-vendor/pack-firmware.sh @@ -8,15 +8,23 @@ STAGING_DIR_IMAGE="$4" case "$VARIANT" in "rk3328") - ATF="rk33/rk322xh_bl31_v1.46.elf" - DDR="rk33/rk3328_ddr_333MHz_v1.17.bin" + ATF="rk33/rk322xh_bl31_v1.49.elf" + DDR="rk33/rk3328_ddr_333MHz_v1.19.bin" LOADER="rk33/rk322xh_miniloader_v2.50.bin" ;; "rk3399") ATF="rk33/rk3399_bl31_v1.35.elf" - DDR="rk33/rk3399_ddr_800MHz_v1.25.bin" + DDR="rk33/rk3399_ddr_800MHz_v1.27.bin" LOADER="rk33/rk3399_miniloader_v1.26.bin" ;; +"rk3568") + ATF="rk35/rk3568_bl31_v1.28.elf" + DDR="rk35/rk3568_ddr_1560MHz_v1.13.bin" + ;; +"rk3588") + ATF="rk35/rk3588_bl31_v1.27.elf" + DDR="rk35/rk3588_ddr_lp4_2112MHz_lp5_2736MHz_v1.08.bin" + ;; *) echo -e "Not compatible with your platform: $VARIANT." exit 1 @@ -25,15 +33,26 @@ esac set -x if [ "$ACTION" == "build" ]; then - mkimage -n "$VARIANT" -T "rksd" -d "$PKG_BUILD_DIR/bin/$DDR" "$PKG_BUILD_DIR/$VARIANT-idbloader.bin" - cat "$PKG_BUILD_DIR/bin/$LOADER" >> "$PKG_BUILD_DIR/$VARIANT-idbloader.bin" - "$PKG_BUILD_DIR/tools/trust_merger" --replace "bl31.elf" "$PKG_BUILD_DIR/bin/$ATF" "$PKG_BUILD_DIR/trust.ini" + case "$VARIANT" in + rk33*) + "$PKG_BUILD_DIR"/tools/mkimage -n "$VARIANT" -T "rksd" -d "$PKG_BUILD_DIR/bin/$DDR" "$PKG_BUILD_DIR/$VARIANT-idbloader.bin" + cat "$PKG_BUILD_DIR/bin/$LOADER" >> "$PKG_BUILD_DIR/$VARIANT-idbloader.bin" + "$PKG_BUILD_DIR/tools/trust_merger" --replace "bl31.elf" "$PKG_BUILD_DIR/bin/$ATF" "$PKG_BUILD_DIR/trust.ini" + ;; + esac elif [ "$ACTION" == "install" ]; then mkdir -p "$STAGING_DIR_IMAGE" cp -fp "$PKG_BUILD_DIR/bin/$ATF" "$STAGING_DIR_IMAGE"/ - cp -fp "$PKG_BUILD_DIR/tools/loaderimage" "$STAGING_DIR_IMAGE"/ - cp -fp "$PKG_BUILD_DIR/$VARIANT-idbloader.bin" "$STAGING_DIR_IMAGE"/ - cp -fp "$PKG_BUILD_DIR/$VARIANT-trust.bin" "$STAGING_DIR_IMAGE"/ + case "$VARIANT" in + rk33*) + cp -fp "$PKG_BUILD_DIR/tools/loaderimage" "$STAGING_DIR_IMAGE"/ + cp -fp "$PKG_BUILD_DIR/$VARIANT-idbloader.bin" "$STAGING_DIR_IMAGE"/ + cp -fp "$PKG_BUILD_DIR/$VARIANT-trust.bin" "$STAGING_DIR_IMAGE"/ + ;; + rk35*) + cp -fp "$PKG_BUILD_DIR/bin/$DDR" "$STAGING_DIR_IMAGE"/ + ;; + esac else echo -e "Unknown operation: $ACTION." exit 1 diff --git a/package/boot/arm-trusted-firmware-rockchip-vendor/src/bin/rk35/rk3568_bl31_v1.28.elf b/package/boot/arm-trusted-firmware-rockchip-vendor/src/bin/rk35/rk3568_bl31_v1.28.elf new file mode 100644 index 0000000000000000000000000000000000000000..459d0662702e4cdc614e7c652f957255b4716467 GIT binary patch literal 335928 zcmeFaeRvedmH%7aGkQV7MsFY?Fw-N+4osX4;Z-=q>KU+&Uy@*<&9dHHGlQ^0P;S;j z*ozHDBf&Z(%I=TBib=p54fy4O`DGIp8;408Be3Jxv9n7gi~N%H#v?&uCnUQD{30dB zx}VcMEe34g^}WC6{&Sz=d4}q)t~zz-ls~Z zk-x3aDoLKP%DJ9O-h)#HMi=|YkN4T~++RPSUc93};8&+(N;N4f*_Vt=8L$ksA2<_7 zOtn8q%I}3op=%rJb)}{yf~GnajE{Hn&yauERs)|R&G;%(gT9HWA>X9b314MumaV#% z^YiG1p&J~3nNx4e2hiI@{<|Ahg$yVERRk>Gz|xbO_Lm$jNGLOKT=Jd!J?g^yGbLm9 zQs({s*>9f5Z|?`-_lJ%D`}heSBhbnC0;&I^KR>%sbw8i&)BEwI^E3h)0gZr0KqH_L z&EWv3f@eXU8Qni|x?)+p%;%QrAOI$GJIRQmEn zQOTb5cMjVsaQwDUsqUgTHuc|_r%$cfz zS7@W1Hr}P|xzW)bUYQeyS{{Wr_#OS;Q~&(yzvSPy_$OGDs7oc`pO?CKhMTB$Pv<#T z;bT`1Sj(fsy}lL4BV60dgUKD@^#DD~CuLya3`tw~rghnt~nDF|3Klg1{7bm3d z(QI9(%=E&h*o_Pys!st<}YeL*#!=sqW}edjuJH+{stt69>qbJf#|rlQ-8b zKR)pt@((kvrS#9k_o{kTF$is|SB<#1{b*mX?r62cmxH$gZ!^@kX;c53e`D@zi_Gbo zt5n$_dGAb6-Ea9+C_{Z^zWjn|~8w z+@9XMH&0avHr~DPApF!oZxGt{c%y3(zc9aMKYgmRM}ig7H(yFABjxg(l_B^=HbRV1 z$XGvZZIp3kd|QJ)#y4M;J!Y!8s!-i5d0S1@6x+0+-{aj>@kZ!%4Z?Fp6?)+-5B&(< zC6&Ayo~NZRq~2Ic+l^|qBCO~`mY!1eK=>4~?S zef!$XNiVc-Qm031)yO`0`=-d`yVvwr?YJZ{k$%rN)UmhM<{_h%DYGQrXQ+7D0raHZ zoO|ju+V{rs?dC=MMrwuMA3OY}r)}te$(-DEWX;|6@qBwhgHkO^pdWZgwHA`bi|hq5 zCVNE>i|i4L{>Lx1M>3>fpNhkWdSiUzoq4KzB{F=y*a&2sv76J8PdQ&z>P?;<%vYrc zr>U}+!K4$Ky|lMTRWIwLO;w@F4CM<&NHfStgzG`m=n5#aWy!mvP0FuI=T@kCHB~v- zIyk<8td+nIcFSC<5=Moc4k|Uvs8DGeo1PgRo#)AG@O{c2QEHx3XMLb7r_Ow-W7OGc zlV4<`Z&|o7d_%`*fs;Q3?|joef*bwI zl$x1{_*GeuIi#5}Yqp-Lj_|vDb@b3fs!;8_&YiyG=6Q6b9qHeN<<93_SZ>bylymdO%B|b9UHBPmGkZVw+-Yz8`_OUoE-dGN zpK@;Ah2;w0r<|L2zMPDE{YB-@=XvFnZ6|^k@ho|QukK#)!EPNk=uPIhj$cRnscC+%70bd#B`?3CBG$*Vx z?YqBuh27tMg({18GADm&LhDxMX_;&BAyU75cXUS-8!q<&|FpG|cZB{OH>b_|cb=`x zK9l@N#p3>6$usS=S3k1&hW^v!iCftxIN_DYO*QM^ zxIg9e^C_mjcv+7BlTtI|eU?g|iLJ2?MQNi#T~^jR8kn!LbD;OkZM!_x%{(Ny)`4A5 zjcN^#jyA>P9S)6lXb2{r&w8PJU4$$0CAbQn%mo+XnIk`frQq1JNwu;D7{hP^?O%*x zM;5~}o?VRBIWXwCTD3k;TNmS7LwOI|O0EUFUuCfy$Ne9a8|Efn(%z5Kg`Kl1IT&%ab{E69Xv&v2zg)WWxIe)N%Ul z(6UEN=@&c*|KdOHpnXRtb8N&1`5KSGL-NI|2h@1`K=Q?D1FH1u0dP8ClumQjio2g* zI1uF7?&qftumQxe6u0& zS751@HxCPrGTz}5mG(1_81?o@SgDaM@sfnGkZZphG0^QGI&UDKVf;PA%DHEKVAwhL zQ@M}k+*{lyJI>d?iF@>ajNW3E?#R7g!t>so=Sx*OqSOn9%yG8;^PtSlcTD)X1<&^C z;GtlNN;D|{sSfOlV3+avLTk@mxZaR8GB_RcaB|llDl~ifox@)|C+nJtq1#Etwu!y- zY?!P+OTi~zW~Wz1Xdg@z{%h1!>9}c+bWF0-(W}rubT@jn8W9`l)x|YVbbQ86i=FH+ z%U_66KM4QgTLj_17GKS`SRKOWKD8U(6&Q3}i;ib)E5U?B#|>_M^?E^~qcM98)>5Ve zdmyyMC+MhguZ7@KC^eF0T|YB$du9nP+yMdq_> z>(nB~^a%6maprpQe|HxdUDnBIX@WP*?aul;6}_lTFd9fC?+G3{mQyBnQ5lEM%YpPy zbIL4!zcS0M^fNhSW_xAuF+_)V(--R{EB#bXnekp3{0;HrgZt|oeh%f7At3eMe(k+H zeITdI)n1t_9f#+-E7ISgOvjq&@a{F%u(DL*d))tbGEj~TL>XhnoZ!h2>%<*S9`k{h zw}?FazqH6pH$GZ7xc49{-N?!-W<^W$m^@Up)Q-tRMazkt>xafmgHUZml^6J7s;Vp(-KSZ`19m`GIHOGT!;*aY$#+SS){tmleaqh@q>3p zcf15HUKzz$9cRpv@L|3bb;>+L8Ro{ZGRMJL$(ob#+H+6zkm%XBDZ@N@zD#agdv9~- z?4!)l+%j1@4nK9bJ7tbh=1IyxcbK(#qGpR4CLZ%1x(eC#+WsDOL}t7`T+q*#S2%R{ zQ$}RweakF&`*}ZQL}ol05!*nF=9t84;(v1Ida)I z9ogBIuM%EaDYx5HH#VTV&Dgz*=U=hYNTw5ivofC?$oQ;~==4cwpWsIzfu(v zyXrN2s^g=hb7j3?{CRXo2Q+CTRa>&S{|L0L@sWNh7sPjMGuJ!ytnsQWFkQ7$ujwvB z&GpL2x}(kf@`0z}FHZbcZJChx@+{T;62Bi3JL-f-r8@fj1s#3uO0_;*l{}-WA3YO! zaCLt~ePO$;R4StUsYpqD=bk-k#44#Dpw5V_kss?+BfGy=y02rUN|=T5zT~44>PLI~4@aATiTx{v)u*tj7|hP{NB#(f41$n zM%=dJ7q=~SR{np~c6OY8LEGiqSQmW2-h&%kHbXz7oDmoQUSbX}RoAGRqPCiscD9*j zsyt5p3)Xk;81+);a99lllu8`7)tJvahP}gs3OzwNi6IX%Z@6u&-ySsVc`C^oCBLI@ zch#e36mlxDZ&flCKRVtx1wE4ejKKKyXG9-@>MqLc$KQf8x|T0#nsmV!KVYtRs@~GU&5?an}KxwSvfzw+`TX zJNr-AU$^e>Kd|ol53FkvFZAlOPIcN&X4_WEttV@bK?DD{Y}&w4?1f#ra6oOex2xg5 z+b&ocWmCt-Nfq|q;`Ikxn{w6__~XRIS85ot^%Tl*Kmn;+JR2+dL6 zL-{?#!K1YQWAax}ZaVkDjrRRPyRIwB-iXJu;QD)FVXtM|{~fk*2wt%X=}zSFm(-6c zb?_t1L6*oSIPE9zRrs^v-=-Y$ee)His`o9rn4=$Dz4^*udPQYTS*3zH!8i3R6FncHbF&{MqrU^x1XO%C43D zOP@76TCiIYpLHe2r*y*?aAJ%_J z>W_bK{Xa4We_$*`9!KG0w;G-=@}A-Pl*ofQJpUB!2@e_HC8E*(o%4?Ype?#OC z5^K%){HY@5?_8TB`nU|*GWU4;smAyI%GJ~JF&2rX%HHzOV~TiDIWka@`mD48o*88S z?8oi2;2^$3JF%uPGTL^agS8&^&9UX~zFVM#^2kFuZDP+Z@DJfX#Xf1uiQk|zB2!85 zKmi|*vj(M3-#F33B0EjYamT@k)zxNB?CO?S7e2``@}wMXy8gsP@fmP%b$z_6pQ4wR zZFSj7U7(j^wyDHUi#`M?V`405To=QMDI0p0Z+O1=ZAq@%=u?vTz++~4m&6BmktaGNdy~?y!Mu3mWcLLcYG*Q~F{R?Qh=e-eyRMq#{h0nY?~c@|JctBpMoJcnux z^mAgW7}~!Qai4lzAw!e6 zclobO-N5yqz_Fe252%T!1|1A1QgaA^lgYLU$OjHVAMR-W{B8O4rRrU!SIi>x~$Kz==QzZh}dfIM6Z_>Y$ z=Q0N%$3a`{sFC&IUAqvZyx1VGEqCoCHpiqN-ky<pyJX89QlFYe8m4~8Y)ck#OO z{r4Wskh`y?Qa>i1f}DrqdDvysUa$upy7TDVuE3M3RWWCXK1+LB7$@}T^rVt+>|`8L zN6qpZ<&1#%8-la#7d@|}50g@?gSv%gyE*aHQE0qH`Ce!X%?x<&F(d z^UI+va@A~3a%hh-CPJr|IY`!#$60S5HYc6hjeSN=9J}r4a?UW8fB;ZOFn zWK919-4y<1&hcbT=05a&Y<>~nXUy-y#)|(Jcu=*D!$$mudQoH?e{Dxlwk#I;7hh5K@npVZe{F}f8MW;6Z=JfTcm?$`AL$wM6D@4G>l2^fj}+dC zX%p`;_kAv@N}YW#7~md>0Q-SI?hwdDhv-9i_cN>J7DtEw4z;gRb}$ z;sXl3Z{!UC9;i8t`vPbK|h&u=-(u#e{Iwq!lt_S<*7sLk*ObaH1;0; z(b}lvb5w?wWc%m!Uny{?W(}lRoyAWf7mG;Q%%ty)$9Ji1c@f8Mn7UWrQjyxl#z_Z+Wtb#LN-8Fg6obwbsiu~fsHpYpK zvlr1Kz8$ojGjZO0BXqIvEis-E2Q8KLtN2%6p}t}*EIt+Tgj*MHJi{}_`dCo|Eq<_+SyiGI$XtAZALQEkkl06? zv!^P~+EJ+mUlV>dZj>`~`-7I?4Gnlvmftz=REsTNp(8)LA7b<-D-i(Jf` zp&>rBPx-o5&9oP+S`(~qrmn2hCBJ==s+WHHD3_rvMO%Jphw_mU_46&X=c7N0I?eQ< zLHV3>Bhm+ZeeEIPF)qCE-1XBh@b5y)>4$kiKg=!@`aXVj;L18Z)Jz*e>Tdz#>%dpm z1lJ00W_}B0n*^5t`^7dU$U;a$~uy0Cg zL9IU#ZQs~`OKo1Fmwkwd(6!)O>|_PJ7fOtbwdgyPZ-B2inX8^-FD2qb#(ZWAF`cFw z`X8asktIQF&c^yht3O#UWjUAIwC6uJ_AjPvZOh6-L(H4)%HJa8JQ+j(x`H!%cFrxI z*tLf>+LIs0uV1sUUgB6sm}f**guZhIfj0c$+5m6Y^DKr>BUl<>`T8eZIU|qP)ma^O{(_jV$>XLy@Np`QoE-y+C3D7P5fP>s%wN z#1icVQ7~`dS(tmpwaBH6gPbchsAn*58q{&pYyE$?@r!lW!Iqla&3ZGIXS#bD!*Mtp#(@xm;T& z>lN7-m$oKCdlJ8cv~`>|9%GNhqwk%wh3?JqTiOowX6YuOy9&Bu&%D^8G0yRQTV*Xx z|H{<43uCif=QFEjDJ_BjVr0eCl8&aZ$y7!-%nerUV;em>?h8=giNsk=wJ)B+@LM9%*QvHhZZM;Obf z#QWxyBnqxn-Tx=QCd!K}NV(Zl@u414i7@=OU&{Kttb@I)^3Z;KzCrS3F8N#hk-^RG z^?l?!b{+bXCvq%05=NHqFx{AuoMrLqZlJF8*&F9$KGiL8g+a#1nr@63752z()|}YI z{o$L!?A=V66~4(xGk1+7$w$ujTjVQ$^(>2g(Fds;oE~=S(a(_><-GY6+_UFWez?!+ z_md^=xqs%Ra%eHf?r%c|op~17yvwnX1>hYR_#M@DVrQ_|iRXv^AHXv^F==i{=M_WiN-fvkZY{dL#BsQ}}cpZ+qU6dyDaM z*Yi(|wJkQ|Eo_IoHa1hEo008eW5HHS){I6%Y|BI0^)miEYZN2V7FpVV2)PrVNn(vh zJh`tgPh3x5zsK(Z@Q9*A7X8RDmSP(Wh5QgN$@szxoOflILquP_xmjd;Y&;!X_)~{( zWC1LQCDFDMS0JYJedM3Lh)UKwuK!P-oUP=%bJ}y)%HaBtN<0Hi!65T4`?%=f8tO^9o_vvsaro#%+)LS7^jdU#8@x%o zHrMzC73k0$!9F{`l;!#$V}3L7;)e?uGr`oaK0!a4PBSm7C})R|n@@wM@c9SH!yd?5 zYitg1_t+eME06>5cI1`z%arQ5#ceP9js<&SgO&D3gHoqr*b%Xro9Tq_r}R?AhJ_F(>Y5 zVo!`v8F`|=L-_4-FKej(1T)uOsnG2_Kg)B;zng0rw+BewJ&GfHzm?A=j@ zByv(7k}`@jyBXO7Ar_9$uv7dSY}G+K+n%Hzuh^CsSaY4KW&I}O#oBV4?Bh7=%f-Bh z2EF*ZMD)=`!T16m;qPPUr8BqN@y0>?1F-{x_z2=di=Xg)&fbW98^liBB{l^5ih0$> zKXT{$iqP*VBWqBxFE>->F2>d=C$^KbxRNjZ5*k9QoifX?uVO!g)HCG$E}<*sEza%` z2lndV$BrCf4^j9R8iFY?`Z;1JUuCU+-Uhl@UgXOwi8=?+B^bF0o;kfseHDBza=L;sw|!{25Y5&jpL5_#iSzkczGgpMNEI zQ183ctCaq6{Xd09)-D!g={}mJD{Cn6^`+eIoI2mmsq-hU$8Z7{uPvE3#QtRCNukAW z%a~0}{gae`&)oEkBjeJ}S9m^#Klht++Iod+vDNFa8-g_sMRrbdeM*^s-vmdogMy*> z0ZEZ{?61d{bD#CSyu5D4LF#ok&h9#hf7H#Mn?(#-o`2EhH}$uYiadDOj(4&3WB_H| z_JGjf49anSJ;a$McDtK-pl#E}{@{c5_TbCW?G|IO+k0Ox8_VDNHfIlW&dIoX>z->E z!1oXvq%u>Sa|Xu8#NRnT2frk3nl;XQdiW4y?^;yS&T@X@6Uv&Id1lAUychZoJ939_!8eQb7@ z71-Es5G$~0cl|uIU_rfFa9fc|M`v+ez&<H zRW6O`xp|dt9zMYNa^-FwbHY*T)?oL~KfA zmWDPPiD77npEQchT?T)HP@}z$~&>w7eub&{_p^qG9$dma*%KSE`{C6pT@z|f+@Dsv_If-NmiK%gSJHRnOv>F#8y)0}O$?GR^<>U&qx?F4ZD21pI7UAW z@Rl=%=#{g!wa61+_sX{}JcsC>7jW&ZmBn4gC{CLS{%lEU=cehZTlygUEA&kAJbx5N zcE{q}=jfdK{CvE_o0DX3_RdX#WqH(@Z4S?KXwsg-f0>=7;jC4`SK9KSXRq!MKFmT3x^K@0AdhcuO{TOjF+R6P1??)J4Y#`q{C`v@4 ze7iw)?i7Cyo=>Zip6q(-qW#q(u-=+l>-Zn=C_Y^n-yeTqKVzQSK`OovHex?Etov-9 zdOTLmdncS>KGJB67`^xP9r;-D%-3w_38h*V+<|3NByuR=rC`wk7{Y8N!bMo3=; zp9uYx*pKx8ZQ=z%`Y!vgKc1l~WK5cA<5kAJ|HZ?7XW_5%OAq!5=D#qLXMRB+CeerE z^x+Bma4CGdd#Ca)3E#PZrnI|>Hjn4X+h4yiy5pK!)xDPaQRYaIvD+;1Z(NyRjkQC5 zk{=x%-4-J2viEsL(vlyNjLws~dMT?)dk^YlnT6 z#3!7X+OannleSqZ@fK&{qxal-Nc>$eZNj%{W&E0AmC}Ph~G1J_?6H4 z2Bh9s(FaMpNCRKFbU?oEBIi-x!iFX{-P6xl?N_~m$2{azzEhwQUKz0$RPKJoaDs3@$5)V#uem;%<9t(qA2iS={ zb#?RbKFQxr9kJ)TsVC2*?OuH8rHm!dx2dJ!wAcagVjXy7Z+;EBM}It9axrbG-@}~b zwsC&{s{e=a#uLZ^n9pIZZ|#6yZrq18`3}M9pTJqx@0N;lrQ!A;wZ8%{~cpu5awDTQhsDi}|foHN^##iE#b9fb1jsTb9ta@Rz69`>&WL zF^+zpi)2Btpa^-||R7ydYeSwg=gL42}%lt9%PrQ2#79y|gv99UG z=Em_=rA#?=CbE|0?2sd?BA3CNCOPl8QvR64wAE`96Q8&O-3Fh}f}2-Y=nH<1Ea%KI z=d#}h5xM;w{gHP@MUUhi_efNgip`r(zG343!E+cMYB~GUP2Stp0hZRBXRVnOT15VH z;2nckvD>o8Xz@&~pIT<|Ozg!V=jh)0tV(~IawlY+kDf*-x0CxQ^*XrjE&>bMWsG@$ zkNUPMMYx>$`?K_GcuqViWXL;vv=QdHw6jvmtEsc>Z25~isW3+$S~=o{Jc-Qd(s9l@wQ z%Tq2k24m&))pGmlT+dXcm08{{z+ZcJYOJXnzDV)EhF_M_T!!L3**;Ws^PfcDB~>ndE@Mj zu{@JJu}!f~dq%LZmv58!mIe7nki~hBpdIcH+N?<^CpJlyxU%83Yh>dD-ae1m4rBPb zpEnfRr^Uw-xm4?>EpzNQd2*ga=D(;jw@-5RfUdjTod?G3CRhj^_&R+OU8}3I?@3ax z_nq!WA2z;sc<PqZ;#HOgXdK!EG?%-NW&K^B!wqC&B%PxO`58&?tA1=^#Kw?6%e0P6d+GyZh zhGL#&o$dG%qFWwrBDYU4h8E}dqts!oF8dL4(cKvV&RZnGuI+}JF2OxXzQl#X;27bz zlGxd`y(qiMm;69i;v%wAah|o0E=AosSuPgL(8VY>en?#hPz6K8BAK-DES@ zsd;>-q17O^9H&gXi4S;Fc*GCh8TjrHA7p8Gq=Pk}Dm+p>@yf;h6*t|~p8><@*N8)) zufwO&J#1o>{m*C#DQDj9G`XhCI?js8y^?Xkzt_Cs5An!mnj8~^6W>4Ds8nL34%+(P!F%jn74z5eWTZ6>l0>=eo zpU~P?oTxo%rkSzQHth*!BEw_Pm-752(>ePhyoR6ToJF0wP+pf*I{MUBccDIk7w;6` z+rQ{Z!|7*ae_lc`UW8Azn0M)=%_wc+gH-aq{en2YkFl*_L3WSR;X~v@y&Q4;Bj-Bf zUgxegWL~dPNyma%!ctZgC!Fa z!R66I@VU)+*>vWJa6!Cr9Cehex3L!n_%23nn70=k#b0vDX3XrlOgFB*=#X*qif*G- z{H17B_#Uy>!9xEOsUM_GiDSwdgIFGIE=>FfezL?K#0OisYI%RuUfREc@u$rui*=&3 zBjai*wV-_==l;01(R1?3WUTG%vpup0=vNC?;9Jt4rkX;vAi@|@u2IghIyB+MT3u65 zzH=rl%rgVJ2K5Ze3qAK+742i+st_CBj{hm&rI6=G#K-?mc%-e$@mn1p#%x-4pAg5U zJIc4i#LpF8zRa3_e--O9@`NAGm&o4cCwh4n<9jqVd7keo`rxl@RctT)>|wvskaJGRv&x<~is$sh!_#XM`I7zV9X+&p zideZx47;xSLQD#2-HE#*X`qN!^-Z1t2wVYjQ$d2tB#1lTrvj{pA zi5C!eRwE)K)^`kIJ+3`soR2AFM#eKL*Hu%UZ%rBt3zu2SDh`OeZ*%uS$Htky%iKtu z!`c62Z*9jq^g+r_r|*NJv#KD`#y5y&FSia!TV8*p9UCm)duGZ#!z628IYY$zE~$x} z8{&M}4v*e!Y(PJ8hNSt0GeHae;Ovl`A@a@-eKVhLcyNYD&JP{Dee$wD5=+@}sp6Xl z)5;z*3g?Nx@IhyYgg?ihcHWbD#)$#8ZSpOXI?jA_(K(@s&N-op&N(5m5gGa~lGr7=mcHXh%K8YsA_m62H-;i7HgYQZpTvjoe5c&=hT@NVG2mL( z;NY@tPP`~ln>5o#c;P_D*OYu;Z`)O>n6n$43!T7O=Y0G%dDom+QH=fQAF!|RN`!TJ znBQW4OMC-&uay0_`hm^xAaP)e@p}IE&KVElobkqIxmI5%ruT6*Le!>FVysVm2ETMu za@V0ve2<4U^f&mn;X&S!O0M)LK0SlDSULU(@tru|K8&;P8WlVLrK&`4jq1jKaqs<; z6HjvAK^ciRnY@#KHFbluc@P;oXkM8}LUSMO3m-%9F8whJt7rMfSI;uk)V0mTyG+iQ z`KgO7-5z;;30hxe1^tdG8*llYELaVxlUR6OGC6l) zkJ*d!@3@?Wr#7=Vv5t2oJ`FEDtP^*`H*-mL&Of^M->|K@c1QL4e$KlKr(c^u3<6(k zFR6@eSnSmu6UWZ4d3!DrE09<+GBft>uDoL?cmzu(CH@tCk=Uh8KLkIg?{(FQ0{V?V z?#8{H*p+Kf1Pgih%;>&ufylu<>>mt5%R*o0MvajQe9r*Br?Rgec!T`z&Z2~z>5AiP zgGD0?cqdkxM25%O>#a`6`hfRuM|w@{ANCIX`eZ*+Fj@xkgjT=xz-*bA>(Ul=>6C&=N!T>bCK|-uAgm zjgd$8v0nkM&r{wTduI=hcBa$LI@&p!rK_Hcq?eNS6!&1Uow$t1(Dnzj_aa+-_l7+7 zMy#U5Km5UszsY+0pZ_qrBaPqpBI)-@MQ;C?^ZYRPl`T8p5p>qOUY2uhG9Ght?mb;;I_0jf zh4xRNt5|E8v@g7x=sD-dZwY?h-fpa}85S%R-x*PA`GL#}?w*R`yLi++!#tOk?@>z` zu|F|vLzJIj5PSn$vUEyfVbEFIlzH==$@%XUw6hv)PB8w>_9cmv=%Mg>8*7}ytceZe zRs3e<6PvGg#aFK!w(xBjYsYRx@U5GpDzRcAa~^&*WAA*&*vC4qynFSAH;veM)naK86oyE@)-9v_u}iG#Ezd} zuFvk1!r#Qy=dquI*zFkQWuNp>$_-JDGf0l!N=$I@BRt2Z5AyBlSdki$bFWdxPRDw!>GUM~n+;>vQOeEo+CR zlla!fofpiPKjqsmGS~f-cM24BUldy0A1rkD&iSUp$e*%#1LVmW$45y=NDb=9Ubm#; zFG;;;c!sa+T%Y1v<|WDBLm4@nD%bCjFZyu;p51fO?mL5X!00>V3m^YzvNqsa-jT_^ zQy6-Vb(hQ)-a5w^Z;y;l;QL6#U4y(+a3giRb=Y7tc;NRok>{SPc6}3Le0ZPKX)jTy zzjv<(1u5|A*UUgXJhEBtSyAEu*&p_ z{T!qX;m_l(E~k!1=VMvkqB8#bFU$T7f$UyzHXa~0TGqwPKdC4_{OG8;Z}gMI;o(Pg zUiiNRI_=h^|ok;$_S zD*Xpy+(#%cduo|lBO%`?e3d-T^DTVFT4g)tEQ zu&^J(3uUq~!GGQt^JQb|S^2DJ3h#RWc{yC8P7k){&k$LSXXW$~`cfxrsjO^%8(aeR zyi;4{IW$H8WqdcYHvdh(N<^V^@@Z@@aRQmko<)XbP0YMIcW5?ySL8>_>=BWZJ9w5M zPwcdDr7FwJx6>B;Q=`6u8B#{%dI54PWfc8Uuix7rtybuj8?QOHq2IAd60S*G508Mpzd(?OPIG7MeU?35L@CQl3TC(LR}nAI| zYYI8j&36PGTP)+J7&phKM{e2}=eCHMn0*uPHcS7M{5W@pEtPxE?~?r21xwybj-umU zzKow|pNzurKCvC6?48qx^a|`pZ+1L59OT#yZ@z+km&n35S@Zt4M*2Z4{h^yikn#71W(}ta0hkxR& zA*3&2{~By{I-2Es12W|GFS`bEY~4CAkTU|`Kz<4w{@uU5;mMXW*4e#%nFr%V;TaM$ zG2><`O21yBPcla0BY1o}@0VxwPOXmByV$yO-x#(s*D>z7*fx$~>&|t#*k*{Qdf0lr zyQyjm%CHiIsR?G;{S41OVF@NtzMn@jMkBD5=UZQdZ#?HJjHD_MHK3_a9$T)YRW1em}IKum&^c(+SF?(8Zo;$kieDlY(p`P#M$%n|B zqFz1a*JbtIv-@6ILdpE_(Vj{g?5~jmL^j`)-Zu-okl#XRH)wx>m0mUP(+U z!aMLQ;=a?*!;7>p?+B@frzPUFFZW1N;$FE1U+mf})(qLWl^cJIkstJ{wMoWE%CpAY zu1W$4i8XVEr)yAr$7n$!Z)&`8l(=j&x~Tk*?24_$AM5h%YmTd*5B?ATzTb0RjXkxr z!QT!LALosNycwC<==(z|vEPwH>Tw1jO8ms(g|&d3yY;XYT!~vfUXIOLMk?5u*hTPb zd=1(bsl$8ryG^2J-=$yQ02lavU4e<5*;Lf=Gw0YpATGc+u?_aSO@2OXRHr7W`1KZSD(Q>=|@ip?1YSAU<{XBKYli$OO>u0l%f=nL*IPQ=rP&wLl2 zlzO0V_mBRmQSQSlI0vTqRvEE1iDP+V>d`au_{RG)htCMT8hCK_n2l|H%YJhBOblI# zv2Q?o+nh02e0f4W7f4KS#*luSj9E^@uY>Q0pZtnB%Q$xU3~Tu^@%x+CUqY(V zoB1|*Ef}og+RZO<@&{!+dq1A=q4y8LPu+C($0_489_ZUlKiat#{%eUrG*2Z)K|KFC zWMeZ}th#cMoULy?$@eK&UFl2vusLH1*T_D%$U~N9S+msjMrkuJ7`a4 zjj2Kp4;)^rxR)`NZ!SoTO3wD*wn~*A=6%GkGFHv2h;8B5$+#)jBf(@|B0#K3VpMz= z-SOYh5eH+z@C4s*5$yep=VpG3s}|iO_=|i5!Nvr$$oQ$VI>7`PO%sdhOY+R1ZcrJs z4D#ffSnzy_R|(F7Vk@eI@;c?&UVKw@y!K(n&n|4O*^3-(G^d#8vAjPWDSW27CO&b7jc%*L zr>m_8-952@&fm@QXh+DG^?bn2A1fzoxj=MWtMK(S&uigJ)-r+k zc&E%}^2D!SL@K_o*s}&J8-JC#g1A}R(T^v#786V4IR! z%!7CMN-e&n9L}E8`W%4eJoUM}g#Z*8w4dYwA#aJGXOitu|jCU2eKFb*A{Y~DkgXm&%ld~1jCAxqJAHRR-7NV|-V;VTIfp&1e^lvYJ?VDlNal9@ zz`056u;7&}B&CnZ@uc)ISx3rPCa04!=E*DV^zMaRGv>*e%qI`QGSW>(+LP^98B3X)pOuug(I8kq z!gXvXWyz0l-9ACJK12ShZyV{oq^tKBX`3|qsFCid#>TC&`6gITBX+uob!%wzl6V%@1G<23fe16m}6BB?}wW$N2YKN z3?8u`Wpclp{B73bTpskqGny*40kZIBXSjhDmq|akE zLzT_~lXM&(S<2;8?%6_B_6l@&a~@LYOZ-)^$-LUr7zFP)cH6`kP@LOS(~njU`SL>K zhmypJ*5KdDeeCK*cSphPcJF@PqPsJ`{Lo78e%7M9ZJyui-Cs+2>fhqsM;6^3=l*lv z{bv^4-OC;TFUY&}Z{VKipW!}^uQLVz#lqiNsP1R14mDoIdBt7$GaH#NW$Z-u|NYg` z9k(F+gT(a1o^5EtHmtJ}oxynHW1Nps`0K|x3ll@WGQKIHIeDs^?`(!*oO_ge6FNhj zm*0qN$r*+xk*^r?CC^q+R=%ecd%}^UIh>0ft200ySv!jE?Zb!JO}*$p@{TfRB%|9& z8GB`+pXhCmPqnU^vgjVgy!T*1WpR8()v^bDl{Zc;e7Slfx?F+{3;L^zt$9_9UVoz-H6c!lVb#l8u$;OLX+k-B4I z+5ep`$(YB`rH?_QeF{1Uzj5rbV5hz`wQP$M(;_}IAwF2yf#pBti!KKD9?4UzlUcg5~8J~LIwFdyjafR3s!ar8E}hi56CRjE*i z_snviMGpw3Tvwvctz2R=)|nti~M&=8&k@H zjH#moV|nFeK}&_=&=$;uSC!+(M88J8^;KooROIgg+F7p3)aTi6Dmc%JlE0ai^?RZ_ zDZjkH?E{$NkKQaYGk9WinfO%GOBrM78*PegbmY*9Ql9m!^LKCKmdnpxWWXqJ{jQ+c z)d_|3yg33rYxG_IK%WtG*HhiMBzMVp#fz?=!2!9%mTU207M3itqx|iYh@I}VOxon{ zobk7v8kFzU5qxx2_&{F_nUlWz%2~(#(8WM(uz~Ez{3Nm?^OKxAjy*+MqSD5icwZPB zDC7H)L+1t>b1zNY>f)$bOY?(v335%)9c& z{=vV1z6t&0d+C2GOaEKYp99^ypdWl6`a=72=yH`WFiYBU*7MMxv~m2h%q*MzVCeT= zNI%Kf!e6A>V>NtO!gc}2A6)&w z7a|T}6N6~LMnM}pc7J1(x$kGZ7hJBk_03^ElvqR5q;0{D_6)V7(IyZ1Tq|wH=#xBG z>)pTGBs|G;d1frXuQ41;t`)f}2Ad#d>Fe4bgMrvgKR7$@1hA*=(g>7+b6WncPKNgg zlbh5OFP83nD{bukclSN$K(T6#QdjVlJ_#n@gSM=v1_irtHpWMccs6TB`w()AugEw2 zQth);T4Fp3`B=R0)BUT;nDaO%3SNC8|G}!o{SBP+j)~slGsJjqY`k>YVr2CVXm_vV z+_wrWlfTPbM_)SlJG-&ok1q&MzrKHwwWL2-r%Ge_YJuPrWRGMK=Nw~2YC)L$+UZYM zH(#n2EMo2oat-YT;q|xn$0l)}TK=Xjf8%M<)NA|Y?`$eHjW*<+788HThu-^(X|q`2 zZw2|OnW{88O)ZFC!S@AOiv+nBpDb2Q+cj!I=Ua>o{fUW9qP+%uJ~Q7rqt&!IpEdB+ z#8@t6T}OU%gloz*UrRcP^afJouK6>h(?}ahYe+vwdIjk%V1iz3{tK>eC2t;dEaDMMZ-+tZS+&d`|TOM1FPhAq*8|-r4LwIL&?&czA?O#cJVeaNx&fn{(jO44iyJvv) z?a0-Au52w}-#bnpq6N(R@0v3fAV*>1G<)#tR>HfPT?fm$V>7<1tOsTN5g}e9Ye4Cj ztO46MjhnHE^=*XjDm51s&WQXy_34MXiZt7g&da%`ALcAl`XGJTTkfpEw?#@S6On8` zR_?9ovN;D5q#x{2H2xZylYZ2E#{C{Z{1*775Al_xYe;V=WgQk@LwXnKmr3s-T}!%& z^e)m)(pyRCx3P|S2%qu@^6F>(AaNDnJC2`~_GJ#QwXo;vPR@THA68vB=zL){!+%v??A3Pio9q1eQtS%E*#)IpGDf< z>6?+eKNCL=7J}igNd?0pQo-=Iq=Mn^Nd?3IBoz$Lkam*(%64o(kg@RO$bkNr8KWBf z=JaV8j)8@pDs{+VmoR%&ElKL`Tf6T7OsB3|A6Ryyq)vJFJ6vL?b9q9hE}$p;)xuwtz5oA?zo)bODT!CI zW*U@z3F4ootYQ4-F6Bo?dB^Z|%6a$*HnN9$F&_p#y|nG8?Id%qv~83i>(Df;@ni2_ zSytSMi}H$8Uzj;h^g(6gz|zn6!#zgqOlbd+caetRGlR_=g#HO=UrU{4c>YMQO8h<7 zLgP{9<5ke@QTZ(fW9DbgEo+QIc$73oTF3WiS4;mGtF1HL80hcTuR64aJ!#2rFbZ2F zj@wL3_Yr(pzG=~9U8$UP)mN#X$GO6Byn{LYxy!qPv|W3zeg8@RZjZ!+f5wBpCW-dgrI4C;s-iryL-2~s}D zTF_HmkaEnGU8^Z4?dR@+bW(53uJO*4fgKG?{l&a%U5MQ+b?G|xa^2_q<-I@W znzCj|_L{h%SwS2H+D_Z-3(5D*418|kN%D-T*y0K2<35hBPCq1m*;#QB4|O>_Ooz_I zi+Et1#&`f<=URA}11`)xV?5Nqf1BcOTIl1LEV5Vc*?>4>E6+Ur6}h|)xfFd9ne1hJ zjL(}R+lWhgXJm5qHJG&_S5c=I8zOZw$gz_6e4U*ZoNA_nuis9XU?k5>Sz|>fCQh-J z{s7;J^V&YgJMre@jIo(?_hs?f@U!>^*yQZ@xGKiJ$Msj(#pV3oP6ZQHf3_0xJ>S1( zJmhRp8hw#7ME%g;W6Jl$C$}W=7fv|eK9w`aRjF$y@ptw(S9EYsUZTB>7?`Y|@SO~7 zh0I|hr`U__*oR$VXzqq)d`*;ZS{N-+^u;75NFLuXFj|g)ftaS*v5&9)#=FqvRHX-kk4S_=h zyWnG;7%Y5fmv293+^_?eTfW4@>sKCHm3=pF#Y}a&10BUbOsI@ork3Zvi=Ml(aN)Of zWNe%mcF9eSU7-D@zmV?%!rvmXt=Ri0F}*ncy{rvnogr(34kOw44QE}T(v$GR|B}21 z@WrEG@2v@(YwTjwRB2gLB;}c*=It4F=Y=1WdN|3skq3v}^}#zs?)spE@p0+7>jSx# zeImi^EM;DSZf+ZLPAr$6^jA@qP4dbB{@`xLFd~>nD-$Q=j4;m@Gv+;vXPAE5*vtqq zW^9@Bw>zaiYl~KY)wTDG)wQcXR9&%y^0#cp>RFe4sCp-)9{#8NT|a5t=AFtjMv^P5tFPMaWBYFMI6Nb?0MOR-z&+%#Y2;%L)trv)=>Y+x|{`QDR22|17vUDeVb= zf}g|?MK+9VY*)%gg%`?N*b-U0SXthjeAc5G#zD?Kij5FD;=c$sA}@l)AgSQvyiZO4 zWsgmG{&!OLY8&&89d7g=JG@rbkk6dhv~5d#c4A9%VM4xX;KQce=J$17fi65t9PW|T ztLlFo%?n+wRQek7@>bW@qZ5hts-dv?hj^FOA@ zyOq3~O>C%QX1vihc-K}Hwp@=rR`(jqc*m-&aig#Ff5LZUl`4IaILx?>6Q;;_Vv08w zPx)8)9e?lmT{9+{#S<8Z-J+X8d{b~51edQ+Zs^MLDT8$tQ!+EZyDOr~2s2#LCEqQu z4b}Aw^VX}3jeQC4ZR3B+-%l9A_hD}$A-LqOH_QsgF}pXi7az?eR%gl?3Hn`AP&i-u z=;2j3FWy(PanG)zYvX-e_I@fMxbgQNy9z14Z+~Ut1@4QuzI|iyt^&hOzq+cV?Ag_; z*8g^Tekk8i>1)Y*7N6ycFJ|$)L!I6Yo<82aY^QI(W9(^b|CadtgtRq|b{?5omDqB~ z_j74W+W9HzIH!%G_if{fY#WbyW5(Pt)&}w=@ApLD)$x^h-$?qm#Udu-$j1N0-n+*~ zSzU|Y`*~(2laN3z6Ci|0W)eV%RFQBAmBN#RaPbNOmA1A_7_6v0M**u;Q6@J)@xo)G zQBWDc3zOrqR6s~u%LGBZRWTS2?P=?TaIwWIA}X<5-tT&znK-CD?fJc*-yiSi^M=pn znSEbt?X}lld+po0)$k1aR{EMc?>ct!KC--{6yUBAp-0)kS8@yHd961>@`LQjjPZi( z52Kv6Uf_{-3pP#Kr)Mr>7JJ0fC^wb%OotEN*BsXVjd|$fJ<^P^a~9vTcZo8Nml=gC zZqQhZXFpl;#Xb99`t$r5pKy=Kv22y8Ltk{?%GsLJI!ovDBCnxU6?oJUUhhrsKb3bg z(Rni^&9lJy>cDq%WnF6U+WfKNf5r;iV}(64aCh!A%#{a!l0SA(sdsD{d;xD~O24wl z$At5I@Hl5kitd1)WRINeGb&5?-OWeR*O&*3y~vsi({HMwV|@KjY&OEXYmpIJaj@+` zM|Gvd9mxOf0xz)97CrRr#!B5-yCAMJ7SJZKxFRp**|5DFR_v!x?2D0pCVgyE=RL<3 z))dp8+-Jc$6?z5dIXun&w|il`v(wf^&bM@_XLfE!9y14R>(wIXl%yQXzYo9Y&vE~s z$(!gufIl()AMm3$b*Dc}e(>-1|CRVe|3}2rue#%p6QAh+oOsShcgKH8JbOU9{bz`W zp0$ho+Z1xB9Njs8kNQOJi?YURa4PqrLqlKEWjR${<@wMeS>0F3J?+g$)CJ}tWIpzk z1sibwS2gzII+~@-!?7|a{gL%1|UWlq|!S!G^-zur>kG&0v9!vg4DKKQ1GA^{ycPi(^$|)G>Y>~bp{l>@GV9Al;&TiQJqg^dQ)`2a$>*>~7Dt@~ilG4$S zut~@LJ%~^A_rgz`cE@Lto_6Z?_p$v3I+|5}F6oKy_75PQcI);R5TEEDY{v@^_ZB`G zV6<>QR+bVS-#!oATmt_m>R9v#%f3CDzF0;2NWpvPE!s^HWVW1pnTswN?>nrMiQPAI z4Z63;B)MPhI^wN;{n%`uftO3c9b1;Uj`3+Ac3PR|)MBSCXHLO=E~6aSX#<1>u+uJy z*=a@3koa0`v`G?Ae_kIf9=n@#XVp)S%Xkq`%W@^G7CUV{cG|!|m08X`76B{Hby+=j z+H&r+D93;OkX^YIX=-e}lf8fZ#(p@q7CS9qCarW2Y7SY#p}RfMu)Y&3EpQ z^-;IfFE-i$PVBO!dDwXeV&kPP1Nb%iS$Ph1alfwM$9e*L379VpzkIJz=NKw|9lh(A zciR=#++OAwGVk|p>q)W@YNeYd&%p6>57&Kq}Tp)srBXyZE|x5 zYqqja#hFohXZ%iMFXxSK=UizO=_7x7vQqRZ1HD8sul2H)BzzR@Ied(MBYcJ{gSUi# z4ju_rUavxx<-}{aiNGRv)w}q*)Uvii+i6GE6Gir-Ly<V< zZ^IvY(Z)0MV$YUHpJ3%u?$1etrxiURBxg@mb#Cw}_t@g-CGC=DVK0^Cx!l8DDK<~{ zr7kaYN%3&jAD-yJcQk4DkxuR--nUL=a=&t>AAQh4T)v~v&9%sk#;4pS@om3C?|U45 zPxAgfOEvbt`L>cJtgqkYS(O_vCofixtl>XFS)Y(@O{^Tr_c#2PQ0HCgDr0+U z*A4aw>NO?)5b^nac{he}XC&zwfvpc^HUgX62OUZcR{oJR@ADRqz$SV2<2OjNm#^Tu zQ16>6ZLsjdj1eB_Dzp$D3Df6PPS9E#l6awcFWOdkM)<``SiJ8huB*iPDEfLE<|ISNdaZnu_rP%SA3<#eKc9=iFU6lrmG%-RHjsze?H(r+Qj@e9@`r-y6qa|6tRa zkIc9Gp~wT?8sJ<3@0lr2R>yPvp3GTMHE*=0p0?Ul;K`S=Xoui%d;Kzpe2dhO(V8=4 zrIG%8hZ;UwOSb*-blHSA=>4)rx=KcC8FrlXA+ZCUy;-&NXU-695PG<$=bz&34w-lS zn+;nZ^4_kdjMfZ0p9L#AkZy>9c@+ZKcSOzBpOa72f=k zdd`-su8vxvBRJ77HXy5oe^_M97Ptf^ne!#)eJ{Z;Z9V&J()?uBoHT4IQTB-W=o8=H zy}i;)9omDzwtH1grL5OSYqb%VI8sta)v8R1Gbn#tgUbBHpRsR~4wkagNu2OfSi-F` zds$`1^Qu_fJl#Q>H^AusqK+dw(6w=W-;oqQxa@!RV4QqU)h= zx*CamY&pm~8Bdd*ySIzR(RZS?y+%lW?|Qj|etTuIR#PcytiDY7QbxQE=_67{kg}y* zpCdWd;I4Z=Va9|hdpoY>e6!R?*;28RB*5sREZn zuc?$dY?7l!-s2+Nky=lf$cSZx2~2i+SE|6~btI)?W47AW>u{&~V!z{cyQn+DdZgga zI5yH->&z7X@j7#}@|DAqmuul)L;Cf$^Ub16>DMY-IqNE`abDgZ^|9aTK)KQ7lzg}j z`dZMdQoV}`774wDHbM`TZPOzPjDm~MQ{a%dsXNH;Ll5qN?@AeiD0ftWCoMBb{x9is z)XyDkE87a-7lZZ{zpPgo4!b{yE+IV8Pd!#Cd?so7?Ph(Ebk~!vAM^?E^=im#>R!(8 z4o9w(yHTYLF;8UJ@~Y!G?p{Xr>h$}L70eGQi*>^hrIZtw6(7*Qw?UI?`go2b)#AYt z;`<V{}{HMUsIA^FeZ@U`*mZG7i+>0u2MevYKWijU$=43^F zKp$^w)%D99=rjSPUv|JzP^7%As}}02ho8OuWit1~*7RCTR(Cl17O8DR%v#z| z$XM><*_U>{_)=wtBM zgyD`BiT4dJZ_$2(9t<6O)3*rQ<9MrQi`-{m{eG=yOBcT#XU}d4F`v-J^+ZOpHu2a{ za}qcU{Mi4R;n9r}?#s?$4p(Gi2bA{8ino{C$v`lU|BUfC0(sq@B)e=W4|QNIRE z0!K_=-{bqu6)m#^ig@ z>mEWo{g4YxholECH5@w)>AaNbMd$Le9_D2};$_{7eS$4s*0j7{9CL0j>r}FS=w&@h zV3Ik4oT-y~q^$)WnLh~+cQ|}vx3KPWFBqt@l&Z}wMJHlk3-Td{Z$G|XzBzn{@a644 zWP;+&j#A`++$~(H48FbjPT|Y=5qYXobet+_6KGqC4Z4i|i>>fLK*Azdv;^P}=4Dy3 zXNLHZWy(FGPgbz4H}-|mz&Q%n$Zw6c$&vitfm{{*mBF55emBscqAS#hAis+V*Wn4# zM};;DJ;YDA(qrG)9Eml+N?pa;V#5XI^XaN_ht9kx3)`o(&$wacbA+vvFvch=Z2vHG z9bq+uRmZ~?eaC!~usITD(XlivY2_|3m2)9?$-lDUk#sq)`r9z_qfOuzy8CH&zaCm3 z>!%0M9lQz{;Q?tE2fCDwzXrSt@XK6G&ezt!iy|`|X`uxYRt)^-@JQ%F^G;xq`sKX7 z@?K<$%=#H&4YrQCQayi>Ip6YUjJ9w(c9HpS`1jJTvi>SzqC>08hnqJ5cjB6?@J;j~ zHA3JQe#xF|w}*8vw?Eh>?Idj>Z6IwC*C}MIk~Wa}nMF^3jGo(un^#h|&{LZm3!8Yc zIhC+Egq=fA&h4rXF1F}d8lz{By5f8+@QB_Qfv-60(X743T$=e6d^giey9myz4?M(N zRq}MV{k#$8cO;HJEd5jB68q?2;(`I@XMwNfJ2}G4mwdFDw81%L(pPgN4qg*JJ0}ia z%al0yTX^l9IC!py#0js%U+2WZdk*4)#0l@669*5T>P0^IOWOOKIC$VQiKBfq=zdNd z^#4fWXh)&{IdQbZ5#qXe>HcC<+T#FW-Mn<7*!;8QPab3O(#VnKA1uGu_HP_%GLI+y z5ZiBzGBG&gA8z}9Gs=A1@|VQ&k2c@1{6;MQX!BLeKgISBA7k#Y{L^CbW6a-L{#mj3 z67yI1i<1|{;!Dhz@CV;z3_+y@5HfY)s8D#{*y32-=K>1iH&2;4c%cm zc0cic*IeHnX6cJ7Rp`6sQ{7?1?R3ePn2&ddmDpj6FEOzh#Og5Yu#=aV4|Ru4vBUi1 z%=@~-rrBYyjWg>B>xOyc_spudfmPD+m9fgg<@xW?C+&Nrf8I-FTVbb4%m`ykFy8l1 ze9v4E%NInhTWOvcZ~j|%SPcJ(6U=$tVKMwaoL~mJ!@QDrBb;OYxH~MSLmQg;{q8V} zCL7g3;Sg* z=??STVg4j@ba&W1J8YQSytq5;Ry*vN+Z@&%w#W|KoNS)o9Tv31W~G?VLC-jyWjqzR zF7iS8jwKh7=OTxG%{(G5pBDDYnX#}}@(2$y`&@ZSUi4{&ZX3_5spl;HLGmifjGsM{ zGX~X;kQFC3N!>t~AijVyC9WejSF_F{D4lyNSnC6h*|%|i2%D6I>&OS4JO<&i7tqUB z+qR<80}M07e$5^$8JF3&nyD72%ut5n%O2Np86!k~E3XZ!lv}V9J7tayj~Zm-uNhBN zRx4X~5m_rV=~!mZAw}-SWG-#m!`#!;mhl?8Ol;iQXpK7?dzi2HRM`p~ee_q+zdGV& z#_AUsyJ0{U0>=UkItUyBgVg&k!7(M(d_n4xabZV|l~3ET&MGSb-j#|m;%UWeVI%O(1YVENre_eES#*ohLSRfNcca>$YCZ@ZYIMdruQmQ{RJW#? z_r_`Ci-o22H0uZpa&}Z~gmM0hjZ+)dhMwkP;IsMhtGy!cL8pblEaUT3Z1zEDDtsdJ z=?zRWUJFb?cum4uKfbrJHQlBqcgQzQ!C5p_%WRr9thZzfWv=_{W@+F4syY;pLPsYY8p5C9$+e_+3qzb12iRXl9gk+yRxRjz}2o4rLnthrL`zL0~bSu-JjROBiBr2~73*k)~;pS^dIwZbNNqI>=*?-k10 zkH8hznNDzLO-vLAAzT?#@?}(`KEGcmvLt7GN0;`>Me|{ z+QK|j_A`B)X5WjpuSR7yW-0Uidz|x2u_e+r%qh_yU+ZNaCQU=!KIu(24_JO{?AWND zPdEQ;`K@tdBWIS(KUjWi%-E=QW|;f%Z*q8T`8h4qY{SnUh&By6MWCNTmR!ibaS4yl8yX8MB`g#R8yE|#lDx67{8(5uVbNGvE@9{#cAe2obBhI2Y%IDp%lxI~kBvi4 zkNKaL->}m^<}t&TKQ{gh%Ql~}{IRiTbGEtG^2f#ajU?+|`%!z*bjyV}eA2A-95HZOeXWnP0EvE~xu zhky4}iELsnC39`&X<5=2qwuxFY2??0);sAJ$a2Z^efW4yc1C;jIB)wY9nV=k*2i+#k0R$aWq)Bm&LH{AR8a}( z#^MCu-VUQ>BBX8sEm7n)O1QM8q?0`e(!SREO>AFb2JLFe z7t$n#+cMn7U+}v|<1Iwy5&QIHQ{=VGbA%=%p^4xvIJ0-LS>#2>pRgOVXEmgAh5}rK zPK^cswaTB>nENGgDFfJIZPSHaXdASXwD~IcCf+vAg|;{Qp@+O@s)4%~dT}oPCb65x z_I*yYx2sn)3M*=P1cF5_wZhT=3@IH-LV?>N5#`g zyre6KPwBhaI`p&W(daGEtqfjTqV$^%fb#_QN=Mm4mbfM)cLfNIThXnbM5eFdZoDbj zM4{bA6}*tUDQ_#O!UpDD?p+~wjEbxjd@4!nz`iAW0mH&av_UoWlz5@VeX;RDXcAwi zk~o9BviDGaNBAxKNUc2lmU}7XH~NsZFHU}k2$!`R`R(WTf!OaLzhy6(6;Ap;@>>!1 zb-h6NO5S1a_rckwtC0_a@0OYrlXl#rR1Z^&R`ZrscJoVjjy$O?8o3P{RoibFAH|la zIfHG#7Q0(Qn}r;U#x#C@&t92BN3_uKYWCl<7I<+K+-vw<8t0My@W_cAb2>cISX0h= zpQlIzzQfqZqwP(Vq4r-d270mLnC(0KrH{lQK9hP`GV<|_Y9BY3B z<*ZeU#%QF)&d|04I!%~YunqgD^hv>4+ELn2@DqEmwB;0jOWgaoQgD-f&^6%s^|3)<_($~O zj7sCbf=8V0ar!0FW`df3TyZCY&8shkz3fAjw)idZE3v%>*H>!Lch4c-Hz01CgtH#f z3eKX3iJbKs{)*o|9H=GNiL)oA+|~57_Vh z7T60y=`9_#Jw^zQLDB?CqjUa~vzu+a#o2a|#d|gAO^>$yx7dgh`kz-@G)CW9)5f{V zHelZ9+jyZ_NO~<6_73SolzB5{VzZ`?k1~ay~W`!HeO;DeAr8D zdsZ7AK(Fa;ANWz)E#5xDAKiZ1r#jJ(ty?Qdh-WWRb)p~Km|K38ADeh}q944qixc9p zm1{*Vq8}T&R+-WhBJYZop{K#DdWP*F6Fw?IQToKK2@?Vaou`4)3OK zqThlwA>M*D!EeEu;J08+@LRAZ_$^oy{J<(aQ#H@Ojk{__aPPe>D`LE2wQDHdtb2QV z+qzGmtK5Z?^hxN)gXekew8J&)+(=o5ky&RLrf;QY&Q`9QMQ@GJ*L2bc-#&XhiXDo1 zQ`x!Rqgv^gBqlNZ-L8)}Jit{FAtVz$#=6yG>G6zN319wbi%KqCV?%W+LU+&y} zTCs+YtELY0;mYrG7QCD}mY3hx@cT&z^L&2K;5YCxKE7eC^`5?KOW2EjM&!7xb6iHe zA!!Ml!tYV675e#I!EcMlkfljDA2g_8E|>Jq_Tz`R$NnI?N;El`RSP`%2K(wpTj!PK zE}_gik;|M1@X^=Gy6KU0ROYclkIq_UTJ*pMBJ|Lpk42BZF?w)^VMJsc^q8}#YMT#w zNS|Wu@RJJYQ3gHgXe*(Q(80<6M)6OK(L?&bv{5N?OJteIfw{ER*X4kPAAR0S|DPlM zdr?KptMp~zgHkCgCJ%JZC=}q=lld}c?Etni`nr~8So?WJj%dV7oz7dcr{_=0o-cL* zmr7a@%(?u|*U`D0i~42NW#mm?gC05+ztpi-@>q6*L7xb1EO?^8gKRh;efiW?Epb>h zV6c8uzXlxE@0fhh>H7*;I>=Loi_a&eJTLOW_w+w6M{u#ql>Ww9P3w1pT+rFyZ_yyf zrh%Tvm-?x%P4hwreN{PtRhR)Kzq-Gg}3oP_h;!B z@D}gVjp0lkcO!ajSyT?MXc6u>enq{QbSZ1OF&@x%CeZ!0ujsD5l|V1-SHf%ho*0eZ zi_vJmO(Xq}F<7H~g{EHat%*3N7w{(Lny9@e;OT)oS3RAl#tfY1o-Sc2d5U{Zljjf2 zm~>~9JEnAz3&1o7`m(P#bHcQg`2l#RmHlMG?~VmF3_B~>OA0In?3*s5{CK{C*j*>3 z^hqs9`iK4(=~t4z`5&i`mn~zfwvn`)Llk=aE3nX)HX7(3(hhQWW}FYJz%$N=Rl@V| zpR`Gp&<`H8ek1!e_|W71#LzbfBZH()9qC>LJv`g~>CwgR%KJ)~6F?%AnEdTMz)S*&1mqdOAZ46|L zQml=mR|Xl&JFw@X$JufRITc~d+vMvd?|bAGUiXl`Snvv6g^cQ9ts5A`zePNK zb))F$HKcK%oBLK?C3HD1^s?xu1EbI--XG$!hc*#iUF1$8&0_lc#zcKxNB#=$>hK`@ zyDWX(>VxR(S_b+Wy10HheFM1pZRzjK4K4k>ka4-t;$8jdTKLNk+)n}bC!AXhLKm_5 z3T-s+UoyguZ6`xPaT7ehd8OK-VP=4B3>?0~>ACbMeW$1(h z|1LH(doEiY%X3jI&y5eAyZ`ksVv|T{bLCz%M%uOGh-TrYSz`dSLjK9TT%-M?pQ;h9 z@IV1=HJiQXt76dNyt3r{ ztckB(d8d!GvrE{kE8`XX?iHRd>2Io>erAPRHF_SP-rA%QGvF0Jd?ItC*_5T$p-)W; zW<_G{BK&IcYHUBMfgR*(Nf(Um|2X!D^a0^tbHGD#p9OZ)P(O1R?erVY&W;j09`q3U zNn4BVV)X^)?$Ni;HhqV9!rRyfR4HxWO23wU4wPf##jWpu=^cPS%OS-o6^Yk3nUM7~7&N0SzfR&(Ifki8zSMb|EndaSuKGI$*{JixsV zdMqp+7o@%pY$$@;TI?tiuA$pj<7ds{7!t)47^Mx_%Mi028|;tC&yqKE)H!Ze0ZNT z`IT{5-5Z`h^}d|jZ{6TKA^X&U`(!_}4cufd>{swG{Yfui+&Qy$f$)d$jM%G$rk1=U zUc!Su#w>n!q}zNiJT6YLA4S47_&Xwc^sTz7#pX#;wl&X+&6B$Qv3XLr-%DMxCKOLU zkgnRS#={d+$ix-$f=%jTrUW=Yyhu?``^f*ah zLzqr|qRUA-8G{YN)~k7AlzP5W>hOY3^z5~x1&$~-wN`NR4aW|BSyN@re{Wx~{=}1& z>wmswLBS&LwjH9Q-^yL|oo&`ojCT+4MVE-%v@9wdqd#426t+(zeJV z=}Rr8$XcKDGk!~6Z3_F!#Xdqh3nt>d=)qoOu@~LM3!VSbe!uuwC;6`*j;tt5nhmX2y%BqHQ}Qx7y1YMIU1ax-zfH>watNErQjhjrpQ_Z z_Hu*u4LLg>lrMAThfu|MrEqG4+U*akF>FhZX z{AlmKmOsh%)84i}xYmlNy=}jG*7E-bzwnHrU4`G4zz@Q6NwoVR_R1ttruLYO3EX)@ z|Mij%-djK#i}&RFM{KGg(&Re_ERZz9UqQxViA&_mcpa;$!v)MzRt4otc_Gpo_#25s zc2+9(u1J`lu!kg!_E$-ESdcJl%_vA%aIKXtL|DC~Q#F-JJ!^%%fnVzX6L*z}oFZRa z4fXnHLxXx9>gmcdz60T*I?nS5KZ%XwAo5L#ESP57wq+~?7h8rSPdi8}GFT@+{lMa> z0`eV@e3TU>Uh0zbLG~Dc94EdbCO4%l_{)Mt>XCNqtaXeKSe)daNPg)b0;d87*5Zy@ zvL*qBwJ{hDkS`8{)Jh2&sUbo1o?sYuuO`p<#|04I6uXt5q@?GX{ZQ*4C> zwDk9iCxk+(PtgIW#T7{qW zbr*L6f5@A0UbUnR_-|6q(!COwxX)|hJ@+&$WWCFuCA`DB825z8Sdh4u!y0Rw2Y6&H z=Rf3~I$)=9Sg-LEy-E8@U6F#ls~Wj;M()FryKsE8m*m;5dv5lzE*lT8CR`Ez_4S(I zVDLEO9wTMm##%A=a*QNhmYj1+q}vSix`o_jD(lwA{w!;nvM%Ilo|78P(%4&afH2F? zn{MLYCu!JkKL>x{w*FR_#P5%#JIz;#&K$ILhoINiU8<2)8tw0u_HOKNUWPqz9B;o_ zdur*|!n+b5-)E-Lw=F+?+Wy*iXI90^QS@cug$~UwSH@o1@8jFLrn@ZKFI(zQoXep{ zp*IC9wO+A(WNRfpZA8Smae*Ul3xuyN|xgnkChf^U3&X!E5# zAA45%E;fP=&V+e^Rrgm{>e2NJBu|j`mN4OI@vnvM9o!9vp4g&Aflt!$yBhfY8sipe zqr^i$OD7N;mFNXZ;)(Oc^AoQDtCgSMitsp08o#4Bk%^x>Cd(lCD<)- zzLj~_+on9w+6a9fK0%)lJ~W_%LN4SpE*R)O$gnnNWNGEj?}QehE16#G!3AS_h99%d%#oT z(Qo2mHxnkjD}6)Y6#kPokp3-x@NTpE1!eahR$b{upHjnY-QA0RVZHs5?6h?GAn=KO zLh>;VG?!QaBVbgHtsxiiX=dsu!Sa|r7#4&@vnW&3sVXw$|BjFW+fyALRC7sj(j0>Wo#6EtK*_oZQ6jf$MxZ>+9a*cZ%NM_&1&~}zSvormW~N^ZQ9@e z<2d&=AJt;zu<2;#0ca@Y9neCRR=F`ag3z~{w!qFAOU^nn{*PooA#c=xcUFAd_#)wq z7;SHrQ$QZdTp;^WWX#a;$NQnsc_w`oUK_QRK23Bp&lJe7BFzv5qy_ldSmzYQ^_dYWH? zkL4@z+(+9ae5@i5GiTkgLBhN})*pY|Is^LKa0p)463g*lY^q_Cy38~5g(U7HC2pPc z3*OC>-|;>%3%-#3TGFPS^w)f3=vRFysd)v^A-1=q2J1x&Dl=%NfqV&0G&?uw5?+- zyPDr3JG|t__AKRQ$sK@+XK6)_oN&0Bc~8W8NBncf_Rk#7W_!P*R&Dt>jt@gQHhd&KAEEI<8MOARfk($&x^-mDHSvf~!2FO`+&W=RV#aK}zF>9FO0^-fU(a%iFcU29L5%mHMdp5QGw_kE1DANF~6 zL60w?hukIccW89V;ckA4a%3N0(>+^PAJ9E37CY5wFK|txE{i`)CUsq{PL39xMc`c? zgZqZq_es778P~PPpapy0>n_(;2ffgzFK62a@?|Ut4&j^6cNqLsqs&KU>0x+l#ba|F zyfJFOqnda}$?3axTXa*#hD!FFr}8H3{0-Pv;MI-FaI=r{+&8`j&ORkcU5|2J+X);8 zcvGqI9_MQRO}A}hUvZX_dns>X|GU^R{aNM@*`IWPv*Pw1T)p{e`k3J60T;o&2%ZpL zlHcEng$4NDK1YRrev=lK{w=mpiO)|+TM$b-i?7`8aX)>ExfSj7Rr{CWr)<%KDmSus zIAZB(^uZ1JWEC3b=+Zd&cb79GcufGkJ zukNXNHi5Q{v~eRcqPv}jE3=WhtTwL(A7+i+qH)Exbpq4&JoT>PNwwis?gN z*DJPm@41hcFXx7qC)C>;o^mk`=OShHEtnT~#owfouiWPlx8b8J$eqRWL!`rP)F=a7 zy7X~LUC^^K-p+!b*LmJpTXxy!+{9icvO)5R4tou0_9dNXdMM*WdN6A*uq2*Ci0}3G zL*G{D0DON9qR-4>JT7D0*o_}5jUL<%{Dnc)>@yU$ zrW;?}P8}*^BQ^lSc)!GOm$c`nVJCu*%j8Ve8d>9N-4IL;iJS=UKyFCgaa}jMOk+J_ zLt96HH}2Vw*eUNR^Nu()JEl~!`8NGEJ}#l-)Bbk&OzsAY_nkL^N%VigHy&S2{n{+s zt~QIbVw0Ie8~apEuFwnmA1kALX>ZAUz4S3?FcDp)+)F<|53%p{xBC@h+1yM$@L*9~ zrX6z%3@?X;C%XBZ^}~gxh)OZKW+Vi&vXVc~zyi#0FI^E3;* z3w5n|t@Jhh_7~UacOKW4%RPBo^TMo}Rgd&g3w*>qNWBYn-qSWDPBmLPm6c9!7Trwa z{y%IVH~GPtyZ5ZL+k4n|#x*AO%UYu+S#rg%-$5PD`3sX4y|^$dh&|svlOA6D0pubZ)7v~>iedwZD1d|PX%jM?IYZy^fy0ujJD2ged%x&Egbybs!zFdY~kg_ zD-Pa*9VqpRq2#%F4)e46Wk$H4>boL<+!^Io@6L6qthLx5wj*18+}pE(^}GqH_t5~~ z8i&y}o3}N&Bl^uUrB(=i*U(05iHmZd(!v7tfAEP?SG3sZ%2)l4az|D3a^5#4{N4VH zEs{RO-9L4_lQUcO`RiI}y9(W<8d~`VzQ=pDYK!9{gLf2+t~r#Y^A>wx@of!-%JCn5 z>N~_ei&akJMW=y%obgv=eTO3tS(?*~oMHU#eKhoU>>~feoMAg@Zlqph*U>3oo}F2D z>g-4poH>Ylk(~D%a@Ma|5kHrB?oB=_{T$dg zPhg*0GV||J%B#XZTcsRbpDZ${@0;8O)m)3rwdY8En|1Dvy+ih07f9Rpw#xrm0XocJ z@!R#?Hu$T#Z=wxwcZLyOt{f}GHpac&?}|>bMo&I^BVP%Vv0=OJKI&kO7f|jM0dUw3 zY@JPOa_M_V%dK?DM-Pf$Ic}11_f_!uEo~;{aAt*j!rgD4RjEgX=cG&xyaYel->xyv zIpNQN$Sbi)tmPb{@DOruqjlfTsX^SgCH;BlhHaeJ_Bn%DGA>lnZ)IFAqb}AJs0&!& z_d?2%GjfUJp6F7X{cHBa8$omjTi4lP>7uqiklnm+oicBL-$ec-<`urmrVZq5Rk7%9 z-^IR(ED-$*rEO-Q$o4P6&mEXEgYZRAx9t0s{z`3ZTqcQ*HxNAMB!on$U`ie2IQO7^ypHb5Ct?wjb})ejnB?9D66 zXqVZ@4$&{_;8CGp4ScIM3^s3Ky=4z>D|VVj@cb{zlrhU5x4ybtKyVfPKxF!7@UL=m zUpz9sgEDD5^cAgHPsMf*j{l9V9EEVR=rS@FknnwkS^Ymj{w|~+u{UJ1U&sE+J_U`k zHcLLr5SmK9*T}c9m(eBdDSH?M_eaPRFIUpq?eZ0@0;j+$u#N)PEr-uHH^tgEQU1S2 zSQT`TvW7qdfk)~Q`UUj~`?zy$fucScLuH<0z&``$1+07a*U+ZHmBHNE*yj{$p{1k~ zntcyCp1DhP4X7O7{^un>*!zC1`XmHi?>DGVL{>)KDtsVa3m@#OhxfoU3VQ(Yn>Et= z7XJV>al*b7ctP_2Ser6>vu#^wlX&jgZ`^LE_QP^lsN0~NQpza{pSjEEVxLQs)C=D= z3J*$p`i_luH&vHy%)rrvZis!iDU3^;-3!x5#r*6~|tApWRh&Av5b>^)e9 zLv8jsxcd-S_S3u>1<5;dOKGbz-p}Mcfh>pYQQ?j=hpb_;KA^KMrf0CG&0X&j7NEW5 zOWRjEh?BJf2Wy{JIBT6=!llir*ZLlTK8KO%Khf3ZNVXE$JQ91ayx|4ECN-bIZbv;U zecth=mMpeReuwzYT+OxCgJPW{2CqGTAYSgGlXxHHPKcEo#|MkD75^!Cjf9tu z)2IA8`{TZLhk%qRaw_zxeW!rbmli@=l)UR#o)TU{t+p!&}ns<-I{~nz2dz26ZXw z5|^*kCkA;HFi6=FKQv=pdynbk+Ea$8@CAI+){kpX9j=9Yc8qJk@W8nCo+WztD!v)G zbi)yzA05{|HFI2h=0In-hkIoE1qS(txx&3FiT96d?=>zdoH1iu`zNHynCK3t@V$@l zlp)FCoB93x>r#G7xaXVW+CReeEa?$WUpKCOIC1GlYB&XWG6$xGdr)p_>3GWS8NS>* zuKkKVz&5g1xEH_EBT`R#c%vdME@NUwc&ZOLa4ADF!-7}J5FU+z%7qDCxTlZxRGaA1-NB{TORdH0yon7NjGsaxaEOc9`#HCw>)r@ z@~47Z9=J*Qmx5a!xJmh!fmAgG(Ff z4EI_`+Vv&W@%|F_z@?2$ z5BKVzd}L$1jZ%yp@W~-hDfr}oPY!jIflm(jeY|0}hvgPagP4+g%PmdEg^$ zcLn&+cGINIt^}X{;L{%%t^%L_;L{&GjILfCIaa$Qj(>;q9pMkocZUCZkt_V+n56JW z6Wrlrlas^8uSyA@xVA_5^VzB4lQ*P=zr3Yq_|zS}!dayy?Z=m>uA!ds?Gv;ckNX%; zQ=Wi!j3u)*dmjFmCgQcbUQBtSzqJon=%JRA9Okm@WgR%Yo^N@Tnz6S6*pO`>8vwwE7Yg2~)<#Pgba| zdNPv;Tm( zh~R2fJk%J=X^_UiG+C=*wbXHNE(i!d^0N;@*7k$oV4wME4G{cgfh;ubY-3(r_;7VU@S&VXxP) z;1d1dZpm|Qib<* zan|0z$t8RLivGAO7FJGs+?1@|h3~C2wK4z8_;uQ7IQ%N#PHDe1W3QaaSx@^-U_M#M z9JPuzq}~3C-2mR!n#CrFZDsQs#rz%nhuHGqk(sVEc7kaO#w+x&Gwc51&PbKAlmw z${DLqU_MCSa*$3V{RDN-aly+#)~H+io9{6PEfxE7@_F1x@P6`a_6msHEhK&6sWr(G zFE)@MebguELOsk2$Eon}iCTC(dhkcsDt`gIAAfIB*DdJO9Vtf31T|nm1in6yB6rHG z&F>Gjb>j&tX92jeHzK{;J}+s+A9eJyZ2BK-Mwi&nzpBfiu2SmaJxy?lhmViJ5U=|x z>WSAabsWgV4u&j=QnsNc?2~e34*FGoyId(#-p2AV*N`@^B5z!ubjW*R*y%&?iK4B= zZsCJJozP}BJQGV>>81@G^X8TaKX7kW$r9zdS>~jE<+@DD7uwH;ze_1w{4zh~UJ7fD zD)ZJPrM)Tp-QTBvk&j}79|%mg40Cnot3EZmL_3vVB6nkdy-Y1up2VHL>sQ#2wIZ$J>g@Yjh8*5}Th zH>zX;wuu1vy-vHz-mAChpR&*S(R+*r?&x~={UpwC5$4ykQ@d@5mfh!7%T5zzUL|+J zlXg0`S9!qXr#v6rNaJFot}u!3>U-U|UtW_}}g z7;(;8-j<;KD|Om5m-U)fS@(&s{=|Fi-0LvC0GiC6rRFcs#lFjT3g4<9a%%&3PnE{r zXBV5xcc8@y{p1+`c-|L~y_v`Ee)#9Q(IxMoiQVJ-&XX^NutV;YG0)NOP44%a-s#BU z{;u32Ss%jAnyrv2Cp5~qFtLnai`bp23pfK#Uwr_6kvgRO4+yvHRXawmkaf><(olw^ z5gT1RjnG@{%p%XTfprn(bOCG5r*}Vm8?e&8ZM?DauH0QEYl^H@moQHrwMExbPwJ*%QPMTBHHI{VOQ`a*NvANp# zN7-kjvG@CgBd_QR#{N%%QTD0`PESzJnpizjhU6EVx?=T6`G?q}^6%7j$l8Zu!_Iz{ z5(6DfV9!Za)1|DD$Sn)UwjrivyQ1BG2Y)w0iz>>NJ+(e)=C|5SFN(t_wn%|*FtAyB zXedj@1i`BcIw$07k+HT0m_@D%ZKPZ&Q*7m8yA;|;yPcDUG9-=Q6;C6039Suy^N0LK z9?3gL<}7|&{07`s{oew&z%Ru%R z9pWw!_*!7jaqIm>mSVTh6njA*e$#KWb>*8Cv8)+KUO zWVViso-HyO+R_I{ikuc1NFTOr0y<+-0kV{Hbj{p#*eo(^339fY^qmf8Gv$s=rmxLC zHoL^hSkJp4qx{HY%CT$^lFyHR8-;g7F3Fl-0d-Q>D6dj)T5!bbl(A061{n+DW?|XCX@36Q(_MI3DKk2vQOIXa2 zzs+;)?}xGPwAgpgJUe{<_4e0@`ER?y_CI~2{iO(|H`bs1J$BXt4BmF&`hp{`pp{yx2FE{2S$E#N%V%ke&OR>Fn_CYB$>c9S1dv7`;Xv@rTS-|`~PIqyX1ZQ`~06{?GW>OWBzzKD`V;Z z82dgJ`yMQ@`RJqA_hjs=kF~?oVqcZ)N&c8Wq0{#q%AJ;;m3`iT{Gy^h{fdf;&i54( z{>I1ew6%Zydr9{3AEW&Dw~zm-l6wwRs-3pE{)|#T!QFtHhr98Ny5Of}S62S?>Z*Ct z?oQRqaH;bQO-*KFeHtQ4{-3MHs}a_(G<7N8CPB#6qfdU%{QPuJetu@ZJT>U*tJT$4 zj~G9msC(6G{7bU_e@boUA2q5+`PY6{{=Zv2%s;FUxD)&*T=ykT`q6VZ=}ULxgqm}4 zLWLPPVdBX+!5@7>v96&?aMI2raH+WO;L>nIaXoQ^anjllfTydN-Qa|8k)^61?mQfJ z4MaCLP$&G3$4S}&IE1v7rw?C&dl*0q+~>;41gapD1oMe>EwrCdSan0!G% z+FcNsCSMSc^2ug>$!4XO{vqiEZz)gkmGpw2q!;|8T)|KL@+W@DBkfg!n~S>@w+Htg zZa?mixG3%*?gQM1xDz-5z==!7rQtGgvRIjeV=u4r;s)Y|<3{32a6w!hZYAz9TnHz4 zJ8{XlG+YKw7Cv)uc{nd_AZ`dwkh?|C6DahiSIKg2qE)H)TRz)5ECvXakQkVQC zVfjbU)=Jtd1}z zVabFoCoGw;<%A_mmJ za0(Z378NRl^Cl z9&jaR2X?vePga2e$$i$Y(56=JKHbNYqV#)TYn>d>KhJ4!FFo6^wXb^e!9bHMtHG@t zg-M?%PqK1o<@IH*D;KLr9}Mh0pnmn>rltEz8(lQz)BI@X)IDcByHB3Ids*=pAE<_(i6Y{;KJ8@6Jib&J??LYk_O_=taxOt=CVY z&Slg|n%!rbn>wc+JJUd&ra&0t(c6;>B2Iq%b`C^qBT2Nbja+mJueF}>{=~FmN>r1}AwUb?HXI4WG%`y0mYw8|(r-=cy zVZ~+p`!cY4Qd0id#JAzzdrx|LMD@PJc~al}z~i2#2bLaj79wG5C-+t^r_1%(7lq2H zuBopmto63`b_}fUT?-_Rp<3_Sp{?1R-_5QqD$RCWpk>!y(CTpjS?#b=k5pk2*ZptbDag)BR;YeRKqF&NTTs&RpvBPKheOmH7 zGbwQVa1W0=q{DIQgR}-$RKNS$K+?9PhM%46>2XDzfrp;a8(b&<-tgIH=^odujzHCx z-1}T_JaT{O8;{h~Hyq(`U;WRwHyoKvP2cD1*70v`IKtyR_21v>sOY0Sj$0j`v_7iA z^_f*lV9usK_qqN+34fpj$CN&5P(_1_bTOC$w;t*v5Czgd=yTyxZSs@bt0z5E;b|JI ze)Xs;X=&1qM;%j=;P9l=@f@AU51n~@Yop;w8l)Uk264@5=O2@fZ%W!@2z;Zqj<}z% zvviWDexkbHXs#=$|7>*a8K$d&N_`1?xYm+^F&Q~Lv>Rn0hvL@;I z9=H3nCkc+Y{qywB1-s5%xHM(UV}@hOU}|ls_~Pv8`hR;UCF%6023I7h;mG+)=s0vz zXX>`U?%E(>j|rWfrn4^tzQ?it%|Q0HAq~mZny1%VeNufxuaKi(XnlJ7*;=mK>*;d2 zJ^L%v%lGC!w(1e-ys^7ljd^6IZos+dd*EL&b;~K0wA9KGt^_MpMw0Q2eyoS%*&MRwM-nH>4+&+rdD4q0|O>vw@+<(6@bW(F& z>!vuy4lt^&Xh@!{Jn6%eo+%r8Wkb4=)X+;gJj?0fhmv!fA1SPB|JdaYxcj=(a*OL- zTA{PzW69Ux%2ASP{+|Nh|3%iOz-JDRL-TA(+oX!q__2JHy4O`)@tLFel~){BKH{iw zslvMFKPs-jQ8~(8s`$_=jzZ^8KeA&a=PGJ?<|CK8^Sr)Ytt&im>LZ<-mL-+OD0ub$ ztgk4zDQUma{HUZEmt5?2YPGxE@G2aYzS-jAz>oI>pC$3T>9_feaPUd!M_;ACLcbU9 zed#g7bpGvS;jiB=UAJs>U19JD(k+h^@OhJaqw6J+LTe`t{dH3wGV%V)pTGW>o0dIm z#Gsnqo}38PKI4T)rH^%%Mc#NkRP26FHOS~VZI4q@(Z|j^c;@sqfBI!-`?_Pr<+~gW z;Qc~_=l(%zNBx}TS2j4x9jf^HU5>)Kz(;@DGG}T1mV#wle))velT1tU3S0u;h&teZ zcIxH^#)ub|{G=9TZHdQC|Fy{b2i_^oEZ8}CN7AcBb>WGD z>L$Im!l}l%esad;9CTsrWT*Poz^kZo;7zY-!Wq1x`|m+@2r2cUa;4$sxIrfz0>3P zyt6v_^Uisjj^Dfen>ojRDmf)jO;GTjw7mEBPXDvVBo~zyo6(NHvT=(1)@>^VA z{2ur2Cz{YH8+ard7Pul=q6Awqcoj_40B_TOH5+i{~DVm(;NA{3a_lQ_5{v zw)@e7w~FePmyem0uBs<_l9C2iS0ugt`1gukPwPdmzBqY&eTvJhD6ZI|-&@i1FM~E9 z?$p2PH05&jeBfuNHFeyW1BbX6!K=2O*Ba-k<~nVn%jt0i$3HNk^NG4MiJTF^@sIZJTDhz7_4*Y>buZLC@bTj7>Q_|netdG_ zz!S;zt>o)=rWwnG>!dg6-g*9$K^lw9cjtcT!` zT=BhoYl2gz)&%GM2;UVo!Noti7f91uYl4|?7cbkTY=6D0cK2sz^IAI}KXhh9z1`By zOMAb%_(yA3Jo(Cq`s&HP(8(YBR`h$*!2y-xWuGwu6e_pY`RML5HNo+*95$4N1uj)D z@b;()?k~+N-BZz!l+okg`Zn$s{pW!xo<*OhJ9gF6-hsb-pqiM&qFG$m!#%nwyWBN7 zaEIH)|JjFB!{JG4W$BnBqNlh=7hk(ue{Xl=Wm-kU;Uul`&G#nrO@428!|h+B`)V6s zk+S!{vVSt)FZS<#?6U8ze(X&+{D!Qg(!M``@ZAR+4lh;LZ~Z!iLZjaUJF7IaFZLOa%Qe%MXJec@PJevts<)e%#W&Q=omo4`nKiin z<6{^74xY%WUvcQaTW=WS{{88C_jRvmA=)Fe;H|-LT>9FTuO_{%O>APm-*E5ibNcf2 zq})5b!Ku8p&!wPq?oXuodPxZZr=*t z-@CLSB{<%${q-re&p8<-p<~TtN9ULKo~eDtnRRKs%lYxKTYe*b^Y`N=#mg%?AD(=6 z>-hx*NRR@djB9S;urG#hb^iV|vfJrA){t^*tjv^2{X&5wT^Ww&c3xcXu6pQaf3KcA zhIB8_{VL7W$)xEZ&H0k%`iDAmo6c-?qldZ+3r-C8P?nv?Zl8madQMjl$N3Y7*Sj-U zP~t=>@hd!1j9Mwl+3m9Qqo@ISiNyKz7j_kUl zVc8df!XYPm*!;B1p!{&_4e&`s3)K#qI9#~soeiy*NS!y1Yj6k0hqu-~Bd|dK=dQQH zr;e2HU0ZAzN&iemv84Y`EBv!9BGtY#O8B?=k>+KA`mM^b+pV-C#r4k_HNkrK>DV}N zKbPSQi@Cal-|?`-@8VeeZ3*eJ_&tOL^qp*6`M=@zQT{(GcLa;rlBNdN=UZU;wlGP* z823|LynGe={bfR(8I)H^_y>gj-*6|{B=FD5&HBtv^E5Dw{}x!jElkRM3in_F+y$}U zc?n^ss9(m#n0eM(!x(Mvo~OTQw&z_xhjQFz?2jZvN@N{rfGq&R?+bwx8X8 z$D*I#DS5t1S6Ws+v0~EXDN`@K?D8wFylUF?%KxXmZvk(sy3*ZxIFX$MY?FX-UPl49 z#y3eFhd{`XMv83`7r&5gLZ_s%EXj{Xwj4PI;itX`K61>MX6U#rC`o>L0a%gZco=7DPzdsS~z2xEz@qyUE zjYexM8cIfuWHe=TA;E~z9Sijswe8mg8=3)jU478+57h47ToVk`?`ku)8`VXsa%bb_ zO(@7jbTE|Y8|X2*;|Zg_akCK}M)gU>jf$jkT|5zs6ye=oTD2mXiPbRBm+A|}`mU#l ziJ<{1DI}jb&=-!*q6Hf@MQV*{iWsBMG7?Jl#RrV;P+u&H)QTDg4#0FI*RBzXCc}xo z!4&+gKp7U*Cla{LSjpoG@=&BuVO8a>hS~!aL&kM|sb1tO7VQaz4_au#a4H&3MI#%L zKYyUfVC6`n?*OVyCV^-K_XH8rZrf1bSYw1k1I9ocphu0Nq$$<~v$kSkdYIJab!Yd-{jW)AsCymPL;fmplbllq34uc~$wKmilki=rc3y2%2Z?A7| zZ)j;&EmvGIT_CAYq6bxMP&*pau27{(4kZVp0}&%W7)|J+L@{>^^z{$MqW#qBB8JXi zZ73GoMm|t?$cvc~=}BQ`g%cO73GY6VaZ&r0)21XJWvv(Hk0w#DF?AI98)#Wyg$U zFRGT&AMKAP4%&54F2>M+898FKHPs?Xj9sB2ba0VKA~+ZerGm-+aFFd+q7qVJ+9K7} z1t_A?7op-oU4%*^9^M!3?L#@!=RjD+LdjGx7Vio22%_>C$L}}!vf`^Ee-FwXjRSpJ zJQWYeW4f{#P0?gB)DzXrHhZZ?BWTC9O$}&E2dN^W(~BEjeLY4+YzVGvQ5cySK$Gi& zm`2Z`B)1|OmSbgF+g=JIuPoLMU6;*c)!Xh(-_(;lcfbJb-b*6lHwW-f628 z-yG$<+Ap&=RF#E=)O}P$>Zt$AaJ5<7&MeNaxdVNP)KDlE)EzSBS;6SQbRTMKc4%38 zSTGx05Zh(c<{DN(PdbIs!Kb0Q^G_+u<)gG+BrU8GZgIjlhFzD}SZwUf`hUQ%?!hF^A z!kV~Fr(!kpjEXgPwxBU{ygpN28O5ypPRnZpoEC0uIjY8>m$89)gXxczm^o3;0hh~r z+Sh4BT3hx6np!aJtZy~}Y3rb=69!qHJPe}Ojz-WAXfcWqLjro5Idp*OTw+wiIU*yk zbBbF#s^^h!nnzBv*;(@kJU7oJr>4`^SYO{7+}*Hiw}xaosIg@aLiD=D=%?A9*@u3J zs^4CkBNkHVHY0FlYZI)r25T{Oqs3KS9vNo0n9&6rTXuouk+(KA)CL<{^GJ5@38DvR z%WoFm`WqXrt`BamxiU}OmbThpT|-+Q3G~rM@QmJ!T#%&o>h>mxt_$sp4hXrfVA%a4V@j~$R?H`W|xJdYU!X2YLLiZ^l}5X8ooH#69`! zz5TQjHgtk@jg2%+(ukWiCZIjeYpJ8LJ>WkbElQ9!kdPn^-B}6RjM>y`W>G`r>PR>< zf_A7`u8=hN*R}b?f z)>PYJv|Z6YrxtGw1ZjBYg^$A8Z(B08y<(U)8L&-4%VXNTp^v%4p%;$`#3lzRqXuI) zZhA}B>QPLM>$>|?A?bxln+z~lLwPQD^EJ%L=-Esjk8@v%HeS5tp924Z_XlZ z>wa_J0E>U#H_-XUGP;GP=8cWU9)Cl-(b!UZrE!J7p|Kv*ns97iFd6ReqkWTUrpL|< z*cmJVRbt=fEthN!h6ZCX+d?vXo64W)H)vnAkG2CbIW^kM9Zh3;>&hrnp+tW$1TDQ; zv8Fk0w6wO@*BhA99_XVDqOOC+PV5cp-57H@yx!P}tr^<9i9~6KRBuDlKDrq*v%#o0 z&oI+z&#TMXcLyY@p=sz+roEAQDPo z-zHy{5LxG@vVI_iO`pLy+K67EV(Wxb)GykGC-7DcfQH>kIZv7%1K2exCoCwXun0)^;y@{=4b>hBK?2C?!-UGKrx zaxhHW1eF)@;(Mdn)X?al+KfH3=sWiqr_Z~`%o&C;N@^pLl3s=sicPn_6@|Z8$eYsLPNu}T^s7B?G8P(z)RKYZ*HhX zT%)xX8@tuR3jdu>^V^8^@5LAXw(I+Q>B$SaO!;>&&6XRlnDUw(rdEuf$1*vkjBi_V zGyZiffBrjWxFvVfkNa^w!t%?HoAOSkt;f#xll<7v%y7ETcO7TBMcY@J`ejV>#gQ;U zKoAfF{yQMBlz{DBO|Gj58{hQ8k`nUe{%$EOD zo$IBnci^_Dx6&=A+FuRg9k`(MuGUN6MU1TUe}JFp-C%A;JsxnR2-&d{aca~qS>Bn#1rD>wOUDI{n z!ZHWfWWzp9Z~o!|O;7yF1nij~(<^+Gy6;4Zrnml!xo;DFfnG0!*XDiY0!`mLevzi0 ze|Vp!Z~XlhP5<}b{F$boJEZr;6{kOii^45>_vQ4W8uNWd`ex94)WFOPLc%7G2i@{s zRyDHhyiO&s`GnzF!eO9?DV_evEq|Ic-O3QKXMec8}Chg;%Eoa)sGy- zTUC_0?TMp%shmN#n+2wZ$rkBZHc8K}Pdw>Y(hXkYl&f#WvnVNDn<;k>I4+v9&;xz8n> z5LQXy_;{WtZCu0$o;cb>_n;bI&ITSu|G18{q!vMFJk-m&tw1aJod+CvA==s7pP-1>XW^E9gxpmpN?hflf8U5 zvHgm9?0e_2Z>aqCx4=HmiclB2Udg0S_4*>$E6a#(1SNkSe%$QG(C1NitDMX`9yjYD z{1t ze}VZ1=3ivKiTRh9zl!-+nD1czyUc%(`4i0VW&Q`uhnRnZ`6%;0WxkL3x0vr|{#VTJ zXZ~&GhnPRb{6Xd&Pf|UZn))d715WX&OmAg+2h)!eMWg$SLOTV;|LP;u&@gYA!ZYBPJ$Y2OU(mhOa{EXR zl=SXqJ@B4Z^@^55Pq$OjhmO8-sohQ&*~7Jv{(;k-(Ldzcr&LIpiA4$2QbaMnokIS5;sE+~ICyQh^uq*sW35z%RU*7HA5v|@@MWxxJ3?fd7kk9kLy{pe}h56xpA^NuY0x1FZ_ zk$LQ6-jQYh{?oL7cpm$hcVyY0Ykrfz{!Gs|ta@ots$ZCQWZ9os4mFDB3gSV}{(Amean<40-jm zoYsvqz|ghf8Oef59j)) z7RdF!{<_nPI6a+p!SwR{uHH_fcyTJC4LfByRYhv46!4Nt3HSQOLb zMTKTRM_YYct@#DX_djv89)xICeWoxgKJ95jzI`_Zny*C9+Ha#B=i4CX3CJ+@&%^MC zHfC=G1yO0H_I*0bKGE})S>JKrN%{wQKZE8Ils?Z#h<1=1)EY0c_!9JgB>(8Ne6PpU zr}<1K{s_x4f7(kMy`XyD3aagaYWporn{(1#VWyKtdb(axx>kN*j>7eLL;117iQ4mN z5C0(WyT;r+9;W_)@FTf}UmyCbFXHe>gi&@B{MWdy;ePja)+ZUoE9dml_jFR&Urgs? zFKxslKN=4!U)Qr7`;r=OP%XFiE3J9zY`8$K@q#^zY8)-Tl*{F2mgC*Lx}4Z<7LMdE z*|YEgn?`(%C*{Wq&zDcjPp_?ix9t7K*3a8`~k!1l#5QEaAW+cdrd=`b&V)Gb-zh}VgazAQ@LgB76vqjDmql z)PFq6 ze^d_h;cwxbZyjb(VWJ)W7WM9;Og%B@3*dFR)B1mFjvl3pkDgapdZc2n7sOM2%om^Q z>Adl&U&$Ar`=Bf61WkLSY6t!SeA?DYB-j(Q!>>iIYFHnaWWS1CuZKZQuDis!pk z4)BIDF68i14qwOoxy--E*jQxr-b+-TnzJm7{#}vUZt&hy~YLn zjPkST`H*Io9+}GZBe(o)@zV>5pId&m_(v8JAHV*9SJUN@>mOAxTlvf!e~jt=wT5y3 zca^@H@_GsLi(J|K?e1)T(V}er_Ql!!qC%73#`c_S&*E=pdlv6xdlr8)+p~Bl+j~FT z`+xA4@?G%g(d~!Gacdp$s5#FlaG2>YW4@6266TjNzk>M^=Few-1@o(!Kc9Io^Q)P! zVBQPfUJefU#pAu6PmqI_obE#yM~KH~#(3=`1>|SG@!INtEV~w^`bqZ52Rd^n_h3sHjlH`@iZTL6%`lbziwalc|gwiKBNBKgm|Cgb_x37G|~sv{t}-n zhd66KZ0%nR7m!3{_Ae;^)_mBHdO{7E@cmup#nw6-^Hjag2F+TBTk}`Yyz4akI-YRO zjc={5X&q1d8lbv=`_Hc9-;H&;wLe7l%8sw#s#FQu7hw5M?SELf(s*FuS}*mM+R==C zjGXoHg7z^ieC_+10Ukfl?oMkzPWplDbuR6HmYKg0&b$9f{qOJ6KiK=tKb8GY>R&Nl z>0zDfJ5L;j5v+e#K>Y;mGZSz17kS4y7{Px%kCpv4jYZb}`XPX0UG{#(7Oe3m9WVD6 zkY&mxZ7NE+0H5FIzVm$LVwKNA+X2mU5r?K-^8E`iApGp#Gg&y==XJlY`NyA1|84(X zis~7CFNMudx@Pnbx%0d;IX-f`rSDPozI^WYru4lLWn#YdjkSKU)*Zjk{=llAwA*2g zcMZR%`SI^sKmVBUqv~kKPwJiCgYC4&liB*kKcw&1{ut^T^%vHBYA^c1yG?*I`!lq$ zVbwz#XGk9^nf)2s_W_?ZUiU+f_LC59kp3;)U!mWjb)vHOztGVaQTsSYfwF#^UcV6@ zvwi;*;&Q=0x?X4W0dK++pRIRLL>|{@pS_HE6x&VK@9eDaqh`qY_jULlYR2!obbS7O z9lnQ}@%u$B=ik@idnmo%lKZ_)zs=7v_KOJlQO$flKS^Y-Hx~bH`#)s!*V@0P?>Vtw zoAv$dT>Hd&L4xv_Z=cx8zm?DV_J;`rd;K^@0bK5LeQ#FDddS8^Zhat;l|IoNd?!#Z zbiQY)9}}n-raXWBm_WTS<)|NIf3EMd2rvAuRO?&6FQwn>&Q`z4o|pI2K{MYUS@mDb z4RgOe-|us^yqe{CexIx5K9>7T`}p0n-VdkWKNE2F=R?Ne53XVADe*jn^*o5Zed^~y z$Sz&El;T;>k>q(kqL||3dp?Y9Wxns*O#!y&7OZs0fc^Q8Ls|{~LP7frivL^n1lg=t z`gsp4J_)VoLf#Gk$elZR9C7I9aFqH4^99V0GGEC2r9j${`1UNF#jm?7cu`h^Bb5SXCBYBX?tH{9?!LD{%Pj%T$|>< z$~>NH)BM+&_cQ+j^YzTX$b19yFEQW5{431kxi)R@yUgRcHqD=49?!LD{s+wCxi-ze z!F-7MpE4h1{w?PFnEw^?{mj43Jf3UQ_D(U6=h`%n=h*c80?)N+9?!999?!LD9?!99 zeuQ~E$ENw)n8$N$n!l5IJjbT_PiTJT^OjVntoloIj^{6b=k{e!CpX=>c#`4L(=xK5 z?cn_kMBA9pgoFPd_|SVCDC|mnEE!R{v>fkyAifr#T=`~F!h0bo`~W_@znQ^FzsLda zZyE#o-_7S8M-d92LI(+iV@xBQweOhPIJ$*74-g{w> zZ`sJm@qP@FH{(O=g&Fbj9t{ekzLMx&2FYEmmd6d3EhOPHx%qF+qr!kw{djCcq zxel`4(=nUedY{K^^7+E8_j%;e`$r11-up3|d=7kc{5kOXHrbp5pZ_5F8OEoQe8BbG zvH$bf$tS=3!o*|aU-<5`k3aj=t4}=t)K`x@c>I~4KJmFnBgZCoeB{`pkL}qJIo93t z;vE;)@2EKTkH;d9g^xXofQd)D@%JOgdLrGA_IAJ6-E#-zo1pO6u}IHTp<@#Vl#A+; zT!MfgAP5Kof`A|(2nYg#fFK|U2m*qDARq_`0)l`bAP5Kof`A|(2nYg#fFK|U2m*qD zARq_`0)l`bAP5Kof`A|(2nYg#fFK|U2m*qDARq_`0)l`bAP5Kof`A|(2nYg#fFK|U z2m*qDARq_`0)l`bAP5Kof`A|(2nYg#fFK|U2m*qDARq_`0)l`bAP5Kof`A|(2nYg# zfFK|U2m*qDARq_`0)l`bAP5Kof`A|(2nYg#fFK|U2m*qDARq_`0)l`bAP5Kof`A|( z2nYg#fFK|U2m*qDARq_`0)l`bAP5Kof`A|(2nYg#fFK|U2m*qDARq_`0)l`bAP5Ko zf`A|(2nYg#fFK|U2m*qDARq_`0)l`bAP5Kof`A|(2nYg#fFK|U2m*qDARq_`0)l`b zAP5Kof`A|(2nYg#fFK|U2m*qDARq_`0)l`bAP5Kof`A|(2nYg#fFK|U2m*qDARq_` z0)l`bAP5Kof`A|(2nYg#fFK|U2m*qDARq_`0)l`bAP5Kof`A|(2nYg#fFK|U2m*qD zARq_`0)l`bAP5Kog1~<>1RSn(K;7tA`RWeWOY4sR*-J#dpkC$t#tx-^eCO0u`w>_0 zWrtFa7)rfu-K$lqbZw>D?^V9H5k4MLs(s9n4$!@^+&8|~y)toxDdA%fAg<6lZ5_RU5@Q@y=AcWslM$Ta;#6{pOOff^^{jLjN_F z^UC8cXVnEN9q=Pf_l2tD-rZ{dZii~G2Vdv;N;%no7P>dz;aVB?e6>7m^HX`AE)N5{ zlT%aYS!sOV<;Y6saa%eCNXJTR5z=}UX+4OvZiV0Xs)Bt-bJBfao^Jp<(5jI~io4!Fs+?^v(SAT0h0aeTP{IH<8S9rzgN*s^rs z4p7*f98u}Xv1cbv9>!-am858O&>O?dO*{VGQ-o3^kkawai;^0rDF-wO{0vAFHW31aSLN!lAiQ}C(Mse zExzP9%6}=!`v}Uvi0T2#-vfH@^5U0{pWOPAQob)7KUt>xg_}^X-qCg4Y^Oa`_v8`; z1OY)n5D)|e0YN|z5CjAPK|l}?1Ox#=KoAfF1OY)n5D)|e0YN|z5CjAPK|l}?1Ox#= zKoAfF1OY)n5D)|e0YN|z5CjAPK|l}?1Ox#=KoAfF1OY)n5D)|e0YN|z5CjAPK|l}? z1Ox#=KoAfF1OY)n5D)|e0YN|z5CjAPK|l}?1Ox#=KoAfF1OY)n5D)|e0YN|z5CjAP zK|l}?1Ox#=KoAfF1OY)n5D)|e0YN|z5Cr~&5GZ(46@S+7jdv+^$qARb#!zct9#c5? z>vC0kcooj^Q;vPdasFNqXMa6V<{N+2ZJz!1tW#Z+hVBtieZJdLRf_Wh-x|UBZHI9t zAnr%UJifONyY>BBKG-nSj+bxyp(>szQ{(r-p4VZfXTn{e$!=v*k9y@41zh8B>+qZD ztT~*i=EQk(bY`5-p)Rha^XQOn7-z24;;gfE#4Bf&fqR9s_UOz&I_K;HOE0#n^a9BI z;Jr8_&X4+|#Oo^-nJo-}aI+B$vKTDp|ZyCb>Zt)PqZ)NoJs=!`_`%tZS+iTCkY zhmMb$=PCZXJ|}JBAqUQI^TQ^cw|BE+EU*rCobL3b8+wkimhqjCc`q;4zKkH;xvFKH z^migm>lUOZNylZhj8h)J=W;x(E^HZBko(}90pIBC!%pO>Q?*`-vjq2t;0v7{hjZ)n z*>NKd^DH>)JVf`kWo_Zk^V`xFsw#Kq;lQoy9aY}pwQWkdt8R53n!J#FQfJq68P2LS z(o}w&AxA#B3u_36^e57jbS9k>_k@XSae9)@6?CC&D4*nu8eUu43Aw&ks)p{#*GJe_ zOK$n}1Du;k=l-3#;Y$zEnS$TPnUQ3R%I_C#j)zoAmHz5O&WF@+fiB-P&X~j*lvk}q ze(zYO+7*0Ih^Hv+Wu8kH?Ls*ybx5T*k2-PA-~%^4aF2R$`{pG8y}SoDPAG5D;=Zn}bT(yhP`&jd?=~;oQu-)RMbCu9n_)yIOSD z=SMCbErLJq1r}$)m!H9xG|t9cs}}Ej-KpA_!sm~VY#v<#okh_3tCi`%+12U5GUVr& zGaYyf`X|p$2hKrUGv1*!s`k<3e0@<5?>gFJHVQh%+JY z8+W}(IP@aFQ^2g#<2&ecsrD(4+OH|jbo@ZcU4P?ooVCQy`3?h@V6}Ry7N6L?T zkCZE?QDi7prI6Rdr>5GykWslR<7?%|T}G8-sb@3V_4p0I;YT>1^6O{^Z@Lye{HCT$ zAATLwg}mHpQ2A&K6ZaM0chBp{R~TjDNUbUTA?$cn;gaXvtJ~g-vT%BzD}PO`E9&X( z+^SF>Yt!nj9~#eL-^nYf zo;vO=_uu#z-+aeVB`24w60dLFT@QM{hW1r(*T=m7T7IW@vV7n6;+1c@s;b^_T~zhD ztFmfDIqsr5y%KfVUd|zu8I^PA`jV9w`!2YPFu(n?!OPA8E=gxm(R0SXmOrP?sagbI zZa-;-7b1LeI(%m*>w6IXwM@9Z?7DtC)sDWPR9n8#7RHC2ZeNKqT%$qd-seF3p|l-1Kh(L@H|}@_;~?TVf7?914r7e-D5wYY80b>a ze+DfE{SGL`a_4c-Rj8jX)KA29ehWOs|32%z4!RutPe4ik=b+Gc{u0!{xu(Bq#<{ZS zzY&+(4*5cLb>^5-X2bgY4Av_%_1u(OW6G%;{^_BSrzR$M;(SyZOK2SV1+b!V zL*(OmhK>gHya{2)UFSS}2>qKEVP?3a zirPXIWW>`wwP)%VD_Eb-+Esie>eu?cIUH2;8FHrjEUv(a+->}ZvUF-3kJc9Cnko>{ig3jt)4!fOeeB+;7 zq)NvM)s_>k<-p;bhY8p0vv^hM^5NxG%E0)Kb7n8rKAC6Gp3d2`uVD^DbF%N@{Mi$? zoK-`4@bVe9K7`|3+Dki~E#p*nG|$of+#++%W1v2E7V$mmWan9Yk9yfz%J-;io#*ns zp)zL@uRuD4N&l&-PlwJ0mY6@F?d^Y_+7!*bfWJ96bnE#T%{eKI+AxJv8}<$_EB$r2 z7Cg1(XCM6YQ)r{*ICnR(x{Y+th5fDg?4f+T=SaD$OqDvy%G%sz#cit0)8@q-ODPx4 zVXAzv5d!Y&f|tuN&;Cdnew=WftFiwl`1tZ7oDp5B_S0F`3TaUNz=6BtIP3X5XY6kS zjw81RsEs`197{aCVJvav=)@$|^9@R&DAgxF02|a66wiY$M?Bm=qAqV5_qo-@X{UKM zu!65gT*jqjD~)r2$wo8cQky)Ec^=if5$D!Ri9YkQI|Ec+RNmIP!q1$|XAPsCQJ52Q z(pktE!qnDZfL~)y_1K70UEGC_*YiyI_kf}64$SG-*L~C5*!azRaW1(Fb}^ zxQm@`kISvxp0WZ@@gk3Bu}5KFv2bZw(Na(G^0JcU#ih$V=PXyt%gR=i6`xz?Ij>BW z6?@KKRaU+Vic7KRcPKZO-%eGGdl&weDL4Ll@U7l*+%Lj?v0AJ=2=O4qqY80friyT{ z)DqkmIUu>rwB4Wu@K={W5%ENPaHUex9ZMJX`x&to6GZ#$<0Yl}LrU)W%eFI2BALLj7uEB$NvAtqvXRAJT$E+?1(gDiq$AR2#dJ zNi`e`rGl^!!-nqfdf`hAl$An>@O9{@{=QWmGQV$C#g>3+4u39!DZa~68{_z63ybgN z_=~Oh>IE}>)D*gUS7!wJ2GuL;dLKASe>y&=t3x4Z#qLnnMcUI>4Q{jiZ)GG}%^cP4 zn%1Se-1N6{n3ezZr_K1a*a6m;VG`@F&$?l{1C(rL;y;-kf9!MF{`xqcMe1;4kFN$z e52w@5j-OkeS$VgNg7&U9@o%w((QS@3_5T6uro;aL literal 0 HcmV?d00001 diff --git a/package/boot/uboot-rockchip/Makefile b/package/boot/uboot-rockchip/Makefile index 2e30b87ce..7093fc834 100644 --- a/package/boot/uboot-rockchip/Makefile +++ b/package/boot/uboot-rockchip/Makefile @@ -1,6 +1,6 @@ # # This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. +# See /LICENSE for more information. # include $(TOPDIR)/rules.mk include $(INCLUDE_DIR)/kernel.mk @@ -31,8 +31,7 @@ define U-Boot/nanopi-r2c-rk3328 friendlyarm_nanopi-r2c DEPENDS:=+PACKAGE_u-boot-nanopi-r2c-rk3328:arm-trusted-firmware-rk3328 PKG_BUILD_DEPENDS:=arm-trusted-firmware-rockchip-vendor - ATF:=rk322xh_bl31_v1.46.elf - OF_PLATDATA:=$(1) + ATF:=rk322xh_bl31_v1.49.elf USE_RKBIN:=1 endef @@ -44,32 +43,7 @@ define U-Boot/nanopi-r2s-rk3328 friendlyarm_nanopi-neo3 DEPENDS:=+PACKAGE_u-boot-nanopi-r2s-rk3328:arm-trusted-firmware-rk3328 PKG_BUILD_DEPENDS:=arm-trusted-firmware-rockchip-vendor - ATF:=rk322xh_bl31_v1.46.elf - OF_PLATDATA:=$(1) - USE_RKBIN:=1 -endef - -define U-Boot/orangepi-r1-plus-rk3328 - BUILD_SUBTARGET:=armv8 - NAME:=Orange Pi R1 Plus - BUILD_DEVICES:= \ - xunlong_orangepi-r1-plus - DEPENDS:=+PACKAGE_u-boot-orangepi-r1-plus-rk3328:arm-trusted-firmware-rk3328 - PKG_BUILD_DEPENDS:=arm-trusted-firmware-rockchip-vendor - ATF:=rk322xh_bl31_v1.46.elf - OF_PLATDATA:=$(1) - USE_RKBIN:=1 -endef - -define U-Boot/orangepi-r1-plus-lts-rk3328 - BUILD_SUBTARGET:=armv8 - NAME:=Orange Pi R1 Plus LTS - BUILD_DEVICES:= \ - xunlong_orangepi-r1-plus-lts - DEPENDS:=+PACKAGE_u-boot-orangepi-r1-plus-lts-rk3328:arm-trusted-firmware-rk3328 - PKG_BUILD_DEPENDS:=arm-trusted-firmware-rockchip-vendor - ATF:=rk322xh_bl31_v1.46.elf - OF_PLATDATA:=$(1) + ATF:=rk322xh_bl31_v1.49.elf USE_RKBIN:=1 endef @@ -80,33 +54,12 @@ define U-Boot/doornet1-rk3328 embedfire_doornet1 DEPENDS:=+PACKAGE_u-boot-doornet1-rk3328:arm-trusted-firmware-rk3328 PKG_BUILD_DEPENDS:=arm-trusted-firmware-rockchip-vendor - ATF:=rk322xh_bl31_v1.46.elf - OF_PLATDATA:=$(1) + ATF:=rk322xh_bl31_v1.49.elf USE_RKBIN:=1 endef # RK3399 boards -define U-Boot/doornet2-rk3399 - BUILD_SUBTARGET:=armv8 - NAME:=DoorNet2 - BUILD_DEVICES:= \ - embedfire_doornet2 - DEPENDS:=+PACKAGE_u-boot-doornet2-rk3399:arm-trusted-firmware-rk3399 - PKG_BUILD_DEPENDS:=arm-trusted-firmware-rockchip-vendor - ATF:=rk3399_bl31_v1.35.elf -endef - -define U-Boot/guangmiao-g4c-rk3399 - BUILD_SUBTARGET:=armv8 - NAME:=GuangMiao G4C - BUILD_DEVICES:= \ - sharevdi_guangmiao-g4c - DEPENDS:=+PACKAGE_u-boot-guangmiao-g4c-rk3399:arm-trusted-firmware-rockchip - PKG_BUILD_DEPENDS:=arm-trusted-firmware-rockchip - ATF:=rk3399_bl31.elf -endef - define U-Boot/nanopi-r4s-rk3399 BUILD_SUBTARGET:=armv8 NAME:=NanoPi R4S @@ -129,38 +82,72 @@ define U-Boot/nanopi-r4se-rk3399 USE_RKBIN:=1 endef -define U-Boot/rock-pi-4-rk3399 +define U-Boot/doornet2-rk3399 BUILD_SUBTARGET:=armv8 - NAME:=Rock Pi 4 + NAME:=DoorNet2 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 + embedfire_doornet2 + DEPENDS:=+PACKAGE_u-boot-doornet2-rk3399:arm-trusted-firmware-rk3399 + PKG_BUILD_DEPENDS:=arm-trusted-firmware-rockchip-vendor + ATF:=rk3399_bl31_v1.35.elf endef -define U-Boot/rockpro64-rk3399 +# RK3568 boards + +define U-Boot/nanopi-r5s-rk3568 BUILD_SUBTARGET:=armv8 - NAME:=RockPro64 + NAME:=NanoPi R5S 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 + friendlyarm_nanopi-r5s + DEPENDS:=+PACKAGE_u-boot-nanopi-r5s-rk3568:arm-trusted-firmware-rk3568 + PKG_BUILD_DEPENDS:=arm-trusted-firmware-rockchip-vendor + ATF:=rk3568_bl31_v1.28.elf + DDR:=rk3568_ddr_1560MHz_v1.13.bin +endef + +define U-Boot/mrkaio-m68s-rk3568 + BUILD_SUBTARGET:=armv8 + NAME:=Mrkaio M68S + BUILD_DEVICES:= \ + ezpro_mrkaio-m68s + DEPENDS:=+PACKAGE_u-boot-mrkaio-m68s-rk3568:arm-trusted-firmware-rk3568 + PKG_BUILD_DEPENDS:=arm-trusted-firmware-rockchip-vendor + ATF:=rk3568_bl31_v1.28.elf + DDR:=rk3568_ddr_1560MHz_v1.13.bin +endef + +define U-Boot/opc-h68k-rk3568 + BUILD_SUBTARGET:=armv8 + NAME:=OPC-H68K Board + BUILD_DEVICES:= \ + hinlink_opc-h68k + DEPENDS:=+PACKAGE_u-boot-opc-h68k-rk3568:arm-trusted-firmware-rk3568 + PKG_BUILD_DEPENDS:=arm-trusted-firmware-rockchip-vendor + ATF:=rk3568_bl31_v1.28.elf + DDR:=rk3568_ddr_1560MHz_v1.13.bin +endef + +define U-Boot/station-p2-rk3568 + BUILD_SUBTARGET:=armv8 + NAME:=StationP2 + BUILD_DEVICES:= \ + firefly_station-p2 + DEPENDS:=+PACKAGE_u-boot-station-p2-rk3568:arm-trusted-firmware-rk3568 + PKG_BUILD_DEPENDS:=arm-trusted-firmware-rockchip-vendor + ATF:=rk3568_bl31_v1.28.elf + DDR:=rk3568_ddr_1560MHz_v1.13.bin endef UBOOT_TARGETS := \ - doornet2-rk3399 \ - guangmiao-g4c-rk3399 \ - nanopi-r4s-rk3399 \ - nanopi-r4se-rk3399 \ - rock-pi-4-rk3399 \ - rockpro64-rk3399 \ - doornet1-rk3328 \ nanopi-r2c-rk3328 \ nanopi-r2s-rk3328 \ - orangepi-r1-plus-rk3328 \ - orangepi-r1-plus-lts-rk3328 + doornet1-rk3328 \ + nanopi-r4s-rk3399 \ + nanopi-r4se-rk3399 \ + doornet2-rk3399 \ + nanopi-r5s-rk3568 \ + opc-h68k-rk3568 \ + station-p2-rk3568 UBOOT_CONFIGURE_VARS += USE_PRIVATE_LIBGCC=yes @@ -170,17 +157,12 @@ UBOOT_MAKE_FLAGS += \ 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-plat.c $(PKG_BUILD_DIR)/tpl/dts/dt-plat.c - $(CP) $(PKG_BUILD_DIR)/of-platdata/$(OF_PLATDATA)/dt-structs-gen.h $(PKG_BUILD_DIR)/include/generated/dt-structs-gen.h - $(CP) $(PKG_BUILD_DIR)/of-platdata/$(OF_PLATDATA)/dt-decl.h $(PKG_BUILD_DIR)/include/generated/dt-decl.h -endif - + $(SED) 's/CONFIG_TOOLS_LIBCRYPTO=y/# CONFIG_TOOLS_LIBCRYPTO is not set/' $(PKG_BUILD_DIR)/.config $(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 +ifneq ($(DDR),) + $(CP) $(STAGING_DIR_IMAGE)/$(DDR) $(PKG_BUILD_DIR)/ram_init.bin +endif endef define Build/InstallDev diff --git a/package/boot/uboot-rockchip/patches/014-uboot-add-Radxa-ROCK-3A-board.patch b/package/boot/uboot-rockchip/patches/014-uboot-add-Radxa-ROCK-3A-board.patch index 7a6aea701..4f38e6951 100644 --- a/package/boot/uboot-rockchip/patches/014-uboot-add-Radxa-ROCK-3A-board.patch +++ b/package/boot/uboot-rockchip/patches/014-uboot-add-Radxa-ROCK-3A-board.patch @@ -17,9 +17,6 @@ Signed-off-by: Marty Jones 9 files changed, 692 insertions(+), 1 deletion(-) create mode 100644 arch/arm/dts/rk3568-rock-3a-u-boot.dtsi create mode 100644 arch/arm/dts/rk3568-rock-3a.dts - create mode 100644 board/radxa/rock-3a-rk3568/Kconfig - create mode 100644 board/radxa/rock-3a-rk3568/Makefile - create mode 100644 board/radxa/rock-3a-rk3568/rock-3a-rk3568.c create mode 100644 configs/rock-3a-rk3568_defconfig create mode 100644 include/configs/rock-3a-rk3568.h @@ -37,7 +34,7 @@ Signed-off-by: Marty Jones rv1108-elgin-r1.dtb \ --- /dev/null +++ b/arch/arm/dts/rk3568-rock-3a-u-boot.dtsi -@@ -0,0 +1,25 @@ +@@ -0,0 +1,24 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * (C) Copyright 2021 Rockchip Electronics Co., Ltd @@ -54,13 +51,12 @@ Signed-off-by: Marty Jones + +&sdmmc0 { + bus-width = <4>; -+ u-boot,dm-spl; + u-boot,spl-fifo-mode; +}; + +&uart2 { -+ clock-frequency = <24000000>; + u-boot,dm-spl; ++ clock-frequency = <24000000>; + status = "okay"; +}; --- /dev/null @@ -591,59 +587,9 @@ Signed-off-by: Marty Jones +&usb_host1_ohci { + status = "okay"; +}; ---- a/arch/arm/mach-rockchip/rk3568/Kconfig -+++ b/arch/arm/mach-rockchip/rk3568/Kconfig -@@ -18,6 +18,11 @@ config TARGET_QUARTZ64_A_RK3566 - help - Quartz64 Model A RK3566 is a development board from Pine64. - -+config TARGET_ROCK_3A_RK3568 -+ bool "ROCK3 Model A RK3568 development board" -+ help -+ ROCK3 Model A RK3568 is a development board from Radxa. -+ - endchoice - - config ROCKCHIP_BOOT_MODE_REG -@@ -35,5 +40,6 @@ config SYS_MALLOC_F_LEN - source "board/rockchip/bpi-r2-pro-rk3568/Kconfig" - source "board/rockchip/evb_rk3568/Kconfig" - source "board/pine64/quartz64-a-rk3566/Kconfig" -+source "board/radxa/rock-3a-rk3568/Kconfig" - - endif ---- /dev/null -+++ b/board/radxa/rock-3a-rk3568/Kconfig -@@ -0,0 +1,15 @@ -+if TARGET_ROCK_3A_RK3568 -+ -+config SYS_BOARD -+ default "rock-3a-rk3568" -+ -+config SYS_VENDOR -+ default "radxa" -+ -+config SYS_CONFIG_NAME -+ default "rock-3a-rk3568" -+ -+config BOARD_SPECIFIC_OPTIONS # dummy -+ def_bool y -+ -+endif ---- /dev/null -+++ b/board/radxa/rock-3a-rk3568/Makefile -@@ -0,0 +1,4 @@ -+# SPDX-License-Identifier: GPL-2.0+ -+# -+ -+obj-y += rock-3a-rk3568.o ---- /dev/null -+++ b/board/radxa/rock-3a-rk3568/rock-3a-rk3568.c -@@ -0,0 +1 @@ -+// SPDX-License-Identifier: GPL-2.0+ --- /dev/null +++ b/configs/rock-3a-rk3568_defconfig -@@ -0,0 +1,97 @@ +@@ -0,0 +1,98 @@ +CONFIG_ARM=y +CONFIG_SKIP_LOWLEVEL_INIT=y +CONFIG_ARCH_ROCKCHIP=y @@ -658,7 +604,7 @@ Signed-off-by: Marty Jones +CONFIG_SPL_MMC=y +CONFIG_SPL_SERIAL=y +CONFIG_SPL_STACK_R_ADDR=0x600000 -+CONFIG_TARGET_ROCK_3A_RK3568=y ++CONFIG_TARGET_EVB_RK3568=y +CONFIG_DEBUG_UART_BASE=0xFE660000 +CONFIG_DEBUG_UART_CLOCK=24000000 +CONFIG_DEBUG_UART=y @@ -670,6 +616,7 @@ Signed-off-by: Marty Jones +CONFIG_OF_SYSTEM_SETUP=y +CONFIG_DEFAULT_FDT_FILE="rockchip/rk3568-rock-3a.dtb" +# CONFIG_SYS_DEVICE_NULLDEV is not set ++CONFIG_SYS_USB_OHCI_MAX_ROOT_PORTS=2 +# CONFIG_DISPLAY_CPUINFO is not set +CONFIG_DISPLAY_BOARDINFO_LATE=y +# CONFIG_SPL_RAW_IMAGE_SUPPORT is not set @@ -741,23 +688,3 @@ Signed-off-by: Marty Jones +CONFIG_USB_ETHER_LAN78XX=y +CONFIG_USB_ETHER_SMSC95XX=y +CONFIG_ERRNO_STR=y ---- /dev/null -+++ b/include/configs/rock-3a-rk3568.h -@@ -0,0 +1,17 @@ -+/* SPDX-License-Identifier: GPL-2.0+ */ -+ -+#ifndef __ROCK_3A_RK3568_H -+#define __ROCK_3A_RK3568_H -+ -+#include -+ -+#define CONFIG_SUPPORT_EMMC_RPMB -+ -+#define ROCKCHIP_DEVICE_SETTINGS \ -+ "stdout=serial,vidconsole\0" \ -+ "stderr=serial,vidconsole\0" -+ -+#define CONFIG_USB_OHCI_NEW -+#define CONFIG_SYS_USB_OHCI_MAX_ROOT_PORTS 2 -+ -+#endif diff --git a/package/boot/uboot-rockchip/patches/015-uboot-add-NanoPi-R5S-board.patch b/package/boot/uboot-rockchip/patches/015-uboot-add-NanoPi-R5S-board.patch index 47ff38964..b527a261e 100644 --- a/package/boot/uboot-rockchip/patches/015-uboot-add-NanoPi-R5S-board.patch +++ b/package/boot/uboot-rockchip/patches/015-uboot-add-NanoPi-R5S-board.patch @@ -129,7 +129,7 @@ Signed-off-by: Marty Jones + */ --- /dev/null +++ b/configs/nanopi-r5s-rk3568_defconfig -@@ -0,0 +1,97 @@ +@@ -0,0 +1,98 @@ +CONFIG_ARM=y +CONFIG_SKIP_LOWLEVEL_INIT=y +CONFIG_ARCH_ROCKCHIP=y @@ -149,6 +149,7 @@ Signed-off-by: Marty Jones +CONFIG_DEBUG_UART_CLOCK=24000000 +CONFIG_DEBUG_UART=y +CONFIG_SYS_LOAD_ADDR=0xc00800 ++CONFIG_SYS_USB_OHCI_MAX_ROOT_PORTS=2 +CONFIG_API=y +CONFIG_FIT=y +CONFIG_FIT_VERBOSE=y @@ -229,7 +230,7 @@ Signed-off-by: Marty Jones +CONFIG_ERRNO_STR=y --- /dev/null +++ b/include/configs/nanopi-r5s-rk3568.h -@@ -0,0 +1,17 @@ +@@ -0,0 +1,14 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ + +#ifndef __NANOPI_R5S_RK3568_H @@ -243,7 +244,4 @@ Signed-off-by: Marty Jones + "stdout=serial,vidconsole\0" \ + "stderr=serial,vidconsole\0" + -+#define CONFIG_USB_OHCI_NEW -+#define CONFIG_SYS_USB_OHCI_MAX_ROOT_PORTS 2 -+ +#endif diff --git a/package/boot/uboot-rockchip/patches/100-Convert-CONFIG_USB_OHCI_NEW-et-al-to-Kconfig.patch b/package/boot/uboot-rockchip/patches/100-Convert-CONFIG_USB_OHCI_NEW-et-al-to-Kconfig.patch new file mode 100644 index 000000000..ff5a97f33 --- /dev/null +++ b/package/boot/uboot-rockchip/patches/100-Convert-CONFIG_USB_OHCI_NEW-et-al-to-Kconfig.patch @@ -0,0 +1,282 @@ +From cd6a45a41fb2c19884ac87afade87b4d53601929 Mon Sep 17 00:00:00 2001 +From: Tom Rini +Date: Sat, 25 Jun 2022 11:02:31 -0400 +Subject: [PATCH] Convert CONFIG_USB_OHCI_NEW et al to Kconfig + +This converts the following to Kconfig: + CONFIG_SYS_OHCI_SWAP_REG_ACCESS + CONFIG_SYS_USB_OHCI_CPU_INIT + CONFIG_SYS_USB_OHCI_MAX_ROOT_PORTS + CONFIG_SYS_USB_OHCI_SLOT_NAME + CONFIG_USB_ATMEL + CONFIG_USB_ATMEL_CLK_SEL_PLLB + CONFIG_USB_ATMEL_CLK_SEL_UPLL + CONFIG_USB_OHCI_LPC32XX + CONFIG_USB_OHCI_NEW + +Signed-off-by: Tom Rini +--- + +diff --git a/configs/evb-rk3328_defconfig b/configs/evb-rk3328_defconfig +index 4d6d235cb125..c81437300c74 100644 +--- a/configs/evb-rk3328_defconfig ++++ b/configs/evb-rk3328_defconfig +@@ -99,6 +99,7 @@ CONFIG_USB_EHCI_HCD=y + CONFIG_USB_EHCI_GENERIC=y + CONFIG_USB_OHCI_HCD=y + CONFIG_USB_OHCI_GENERIC=y ++CONFIG_SYS_USB_OHCI_MAX_ROOT_PORTS=1 + CONFIG_USB_DWC2=y + CONFIG_USB_DWC3=y + # CONFIG_USB_DWC3_GADGET is not set +diff --git a/configs/nanopi-r2s-rk3328_defconfig b/configs/nanopi-r2s-rk3328_defconfig +index 41793ca7e486..15c2e1698c20 100644 +--- a/configs/nanopi-r2s-rk3328_defconfig ++++ b/configs/nanopi-r2s-rk3328_defconfig +@@ -102,6 +102,7 @@ CONFIG_USB_EHCI_HCD=y + CONFIG_USB_EHCI_GENERIC=y + CONFIG_USB_OHCI_HCD=y + CONFIG_USB_OHCI_GENERIC=y ++CONFIG_SYS_USB_OHCI_MAX_ROOT_PORTS=1 + CONFIG_USB_DWC2=y + CONFIG_USB_DWC3=y + # CONFIG_USB_DWC3_GADGET is not set +diff --git a/configs/roc-cc-rk3328_defconfig b/configs/roc-cc-rk3328_defconfig +index ab25abc1a031..43b90c7879b7 100644 +--- a/configs/roc-cc-rk3328_defconfig ++++ b/configs/roc-cc-rk3328_defconfig +@@ -108,6 +108,7 @@ CONFIG_USB_EHCI_HCD=y + CONFIG_USB_EHCI_GENERIC=y + CONFIG_USB_OHCI_HCD=y + CONFIG_USB_OHCI_GENERIC=y ++CONFIG_SYS_USB_OHCI_MAX_ROOT_PORTS=1 + CONFIG_USB_DWC2=y + CONFIG_USB_DWC3=y + # CONFIG_USB_DWC3_GADGET is not set +diff --git a/configs/rock-pi-e-rk3328_defconfig b/configs/rock-pi-e-rk3328_defconfig +index 1d51a267b93a..7d95e171f7f4 100644 +--- a/configs/rock-pi-e-rk3328_defconfig ++++ b/configs/rock-pi-e-rk3328_defconfig +@@ -109,6 +109,7 @@ CONFIG_USB_EHCI_HCD=y + CONFIG_USB_EHCI_GENERIC=y + CONFIG_USB_OHCI_HCD=y + CONFIG_USB_OHCI_GENERIC=y ++CONFIG_SYS_USB_OHCI_MAX_ROOT_PORTS=1 + CONFIG_USB_DWC2=y + CONFIG_USB_DWC3=y + # CONFIG_USB_DWC3_GADGET is not set +diff --git a/configs/rock64-rk3328_defconfig b/configs/rock64-rk3328_defconfig +index 640fe558d414..bc333a5e2a6a 100644 +--- a/configs/rock64-rk3328_defconfig ++++ b/configs/rock64-rk3328_defconfig +@@ -106,6 +106,7 @@ CONFIG_USB_EHCI_HCD=y + CONFIG_USB_EHCI_GENERIC=y + CONFIG_USB_OHCI_HCD=y + CONFIG_USB_OHCI_GENERIC=y ++CONFIG_SYS_USB_OHCI_MAX_ROOT_PORTS=1 + CONFIG_USB_DWC2=y + CONFIG_USB_DWC3=y + # CONFIG_USB_DWC3_GADGET is not set +diff --git a/configs/rock960-rk3399_defconfig b/configs/rock960-rk3399_defconfig +index 78e50dbfbcb7..bb5b2143691d 100644 +--- a/configs/rock960-rk3399_defconfig ++++ b/configs/rock960-rk3399_defconfig +@@ -74,6 +74,7 @@ CONFIG_USB_EHCI_HCD=y + CONFIG_USB_EHCI_GENERIC=y + CONFIG_USB_OHCI_HCD=y + CONFIG_USB_OHCI_GENERIC=y ++CONFIG_SYS_USB_OHCI_MAX_ROOT_PORTS=2 + CONFIG_USB_DWC3=y + CONFIG_USB_KEYBOARD=y + CONFIG_USB_HOST_ETHER=y +diff --git a/configs/rockpro64-rk3399_defconfig b/configs/rockpro64-rk3399_defconfig +index 4d2a5b32e31c..ef28fe6a937a 100644 +--- a/configs/rockpro64-rk3399_defconfig ++++ b/configs/rockpro64-rk3399_defconfig +@@ -87,6 +87,7 @@ CONFIG_USB_EHCI_HCD=y + CONFIG_USB_EHCI_GENERIC=y + CONFIG_USB_OHCI_HCD=y + CONFIG_USB_OHCI_GENERIC=y ++CONFIG_SYS_USB_OHCI_MAX_ROOT_PORTS=2 + CONFIG_USB_DWC3=y + CONFIG_USB_DWC3_GENERIC=y + CONFIG_USB_KEYBOARD=y +diff --git a/drivers/usb/host/Kconfig b/drivers/usb/host/Kconfig +index 0b82c2fdaf71..31ae9f74e7ac 100644 +--- a/drivers/usb/host/Kconfig ++++ b/drivers/usb/host/Kconfig +@@ -297,10 +297,17 @@ config USB_EHCI_TXFIFO_THRESH + Enables support for the on-chip EHCI controller on FSL chips. + endif # USB_EHCI_HCD + ++config USB_OHCI_NEW ++ bool ++ ++config SYS_USB_OHCI_CPU_INIT ++ bool ++ + config USB_OHCI_HCD + bool "OHCI HCD (USB 1.1) support" + depends on DM && OF_CONTROL + select USB_HOST ++ select USB_OHCI_NEW + ---help--- + The Open Host Controller Interface (OHCI) is a standard for accessing + USB 1.1 host controller hardware. It does more in hardware than Intel's +@@ -332,6 +339,19 @@ config USB_OHCI_DA8XX + + endif # USB_OHCI_HCD + ++config SYS_USB_OHCI_SLOT_NAME ++ string "Display name for the OHCI controller" ++ depends on USB_OHCI_NEW && !DM_USB ++ ++config SYS_USB_OHCI_MAX_ROOT_PORTS ++ int "Maximal number of ports of the root hub" ++ depends on USB_OHCI_NEW ++ default 1 if ARCH_SUNXI ++ ++config SYS_OHCI_SWAP_REG_ACCESS ++ bool "Perform byte swapping on OHCI controller register accesses" ++ depends on USB_OHCI_NEW ++ + config USB_UHCI_HCD + bool "UHCI HCD (most Intel and VIA) support" + select USB_HOST +@@ -381,3 +401,27 @@ config USB_R8A66597_HCD + ---help--- + This enables support for the on-chip Renesas R8A66597 USB 2.0 + controller, present in various RZ and SH SoCs. ++ ++config USB_ATMEL ++ bool "AT91 OHCI USB support" ++ depends on ARCH_AT91 ++ select SYS_USB_OHCI_CPU_INIT ++ select USB_OHCI_NEW ++ ++choice ++ prompt "Clock for OHCI" ++ depends on USB_ATMEL ++ ++config USB_ATMEL_CLK_SEL_PLLB ++ bool "PLLB" ++ ++config USB_ATMEL_CLK_SEL_UPLL ++ bool "UPLL" ++ ++endchoice ++ ++config USB_OHCI_LPC32XX ++ bool "LPC32xx USB OHCI support" ++ depends on ARCH_LPC32XX ++ select SYS_USB_OHCI_CPU_INIT ++ select USB_OHCI_NEW +diff --git a/drivers/usb/host/ohci-at91.c b/drivers/usb/host/ohci-at91.c +index 8ceabaf45c1b..9b955c1bd678 100644 +--- a/drivers/usb/host/ohci-at91.c ++++ b/drivers/usb/host/ohci-at91.c +@@ -5,9 +5,6 @@ + */ + + #include +- +-#if defined(CONFIG_USB_OHCI_NEW) && defined(CONFIG_SYS_USB_OHCI_CPU_INIT) +- + #include + + int usb_cpu_init(void) +@@ -65,5 +62,3 @@ int usb_cpu_init_fail(void) + { + return usb_cpu_stop(); + } +- +-#endif /* defined(CONFIG_USB_OHCI) && defined(CONFIG_SYS_USB_OHCI_CPU_INIT) */ +diff --git a/drivers/usb/host/ohci-generic.c b/drivers/usb/host/ohci-generic.c +index 163f0ef17b11..5d23058aaf6a 100644 +--- a/drivers/usb/host/ohci-generic.c ++++ b/drivers/usb/host/ohci-generic.c +@@ -14,10 +14,6 @@ + #include + #include "ohci.h" + +-#if !defined(CONFIG_USB_OHCI_NEW) +-# error "Generic OHCI driver requires CONFIG_USB_OHCI_NEW" +-#endif +- + struct generic_ohci { + ohci_t ohci; + struct clk *clocks; /* clock list */ +diff --git a/drivers/usb/host/ohci.h b/drivers/usb/host/ohci.h +index a38cd25eb85f..7699f2e6b15a 100644 +--- a/drivers/usb/host/ohci.h ++++ b/drivers/usb/host/ohci.h +@@ -151,7 +151,7 @@ struct ohci_hcca { + * Maximum number of root hub ports. + */ + #ifndef CONFIG_SYS_USB_OHCI_MAX_ROOT_PORTS +-# error "CONFIG_SYS_USB_OHCI_MAX_ROOT_PORTS undefined!" ++#define CONFIG_SYS_USB_OHCI_MAX_ROOT_PORTS 1 + #endif + + /* +diff --git a/include/configs/evb_rk3399.h b/include/configs/evb_rk3399.h +index 492b7b4df128..b7e850370b31 100644 +--- a/include/configs/evb_rk3399.h ++++ b/include/configs/evb_rk3399.h +@@ -15,7 +15,4 @@ + + #define SDRAM_BANK_SIZE (2UL << 30) + +-#define CONFIG_USB_OHCI_NEW +-#define CONFIG_SYS_USB_OHCI_MAX_ROOT_PORTS 2 +- + #endif +diff --git a/include/configs/gru.h b/include/configs/gru.h +index b1084bb21d4d..be2dc79968c0 100644 +--- a/include/configs/gru.h ++++ b/include/configs/gru.h +@@ -13,7 +13,4 @@ + + #include + +-#define CONFIG_USB_OHCI_NEW +-#define CONFIG_SYS_USB_OHCI_MAX_ROOT_PORTS 2 +- + #endif +diff --git a/include/configs/rk3328_common.h b/include/configs/rk3328_common.h +index 90183579202d..165b78ff3309 100644 +--- a/include/configs/rk3328_common.h ++++ b/include/configs/rk3328_common.h +@@ -30,8 +30,4 @@ + "partitions=" PARTS_DEFAULT \ + BOOTENV + +-/* rockchip ohci host driver */ +-#define CONFIG_USB_OHCI_NEW +-#define CONFIG_SYS_USB_OHCI_MAX_ROOT_PORTS 1 +- + #endif +diff --git a/include/configs/rock960_rk3399.h b/include/configs/rock960_rk3399.h +index 2edad710284f..6099d2fa55a6 100644 +--- a/include/configs/rock960_rk3399.h ++++ b/include/configs/rock960_rk3399.h +@@ -14,7 +14,4 @@ + #include + + #define SDRAM_BANK_SIZE (2UL << 30) +- +-#define CONFIG_USB_OHCI_NEW +-#define CONFIG_SYS_USB_OHCI_MAX_ROOT_PORTS 2 + #endif +diff --git a/include/configs/rockpro64_rk3399.h b/include/configs/rockpro64_rk3399.h +index 903e9df527c1..9195b9b99e41 100644 +--- a/include/configs/rockpro64_rk3399.h ++++ b/include/configs/rockpro64_rk3399.h +@@ -14,7 +14,4 @@ + #include + + #define SDRAM_BANK_SIZE (2UL << 30) +- +-#define CONFIG_USB_OHCI_NEW +-#define CONFIG_SYS_USB_OHCI_MAX_ROOT_PORTS 2 + #endif diff --git a/package/boot/uboot-rockchip/patches/103-tools-disable-TOOLS_LIBCRYPTO.patch b/package/boot/uboot-rockchip/patches/103-tools-disable-TOOLS_LIBCRYPTO.patch deleted file mode 100644 index a65ead68f..000000000 --- a/package/boot/uboot-rockchip/patches/103-tools-disable-TOOLS_LIBCRYPTO.patch +++ /dev/null @@ -1,21 +0,0 @@ -From d585719ad3f737ca5e5186fe55be964340ecfcc7 Mon Sep 17 00:00:00 2001 -From: Marty Jones -Date: Mon, 4 Oct 2021 16:46:32 -0400 -Subject: [PATCH] tools:disable TOOLS_LIBCRYPTO - -Signed-off-by: Marty Jones ---- - tools/Kconfig | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - ---- a/tools/Kconfig -+++ b/tools/Kconfig -@@ -16,7 +16,7 @@ config TOOLS_CRC32 - - config TOOLS_LIBCRYPTO - bool "Use OpenSSL's libcrypto library for host tools" -- default y -+ default n - help - Cryptographic signature, verification, and encryption of images is - provided by host tools using OpenSSL's libcrypto. Select 'n' here if diff --git a/package/boot/uboot-rockchip/patches/201-scripts-remove-dependency-on-swig.patch b/package/boot/uboot-rockchip/patches/201-scripts-remove-dependency-on-swig.patch deleted file mode 100644 index 050558938..000000000 --- a/package/boot/uboot-rockchip/patches/201-scripts-remove-dependency-on-swig.patch +++ /dev/null @@ -1,24 +0,0 @@ -From b137ca16b54c67d76714ea5a0138741959b0dc29 Mon Sep 17 00:00:00 2001 -From: David Bauer -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 ---- - 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/202-spl-remove-dtoc-of-pdata-generation.patch b/package/boot/uboot-rockchip/patches/202-spl-remove-dtoc-of-pdata-generation.patch deleted file mode 100644 index 14bcbfb63..000000000 --- a/package/boot/uboot-rockchip/patches/202-spl-remove-dtoc-of-pdata-generation.patch +++ /dev/null @@ -1,28 +0,0 @@ -From 55273cf6079ddd3b006da69f0113c2c66c03f17e Mon Sep 17 00:00:00 2001 -From: David Bauer -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 ---- - scripts/Makefile.spl | 6 ------ - 1 file changed, 6 deletions(-) - ---- a/scripts/Makefile.spl -+++ b/scripts/Makefile.spl -@@ -354,8 +354,6 @@ $(platdata-hdr) $(u-boot-spl-platdata_c) - @# of OF_PLATDATA_INST and this might change between builds. Leaving old - @# ones around is confusing and it is possible that switching the - @# setting again will use the old one instead of regenerating it. -- @rm -f $(u-boot-spl-all-platdata_c) $(u-boot-spl-all-platdata) -- $(call if_changed,dtoc) - - ifdef CONFIG_SAMSUNG - ifdef CONFIG_VAR_SIZE_SPL diff --git a/package/boot/uboot-rockchip/patches/301-arm64-dts-rockchip-Add-GuangMiao-G4C-support.patch b/package/boot/uboot-rockchip/patches/301-arm64-dts-rockchip-Add-GuangMiao-G4C-support.patch deleted file mode 100644 index fae269b71..000000000 --- a/package/boot/uboot-rockchip/patches/301-arm64-dts-rockchip-Add-GuangMiao-G4C-support.patch +++ /dev/null @@ -1,740 +0,0 @@ ---- a/arch/arm/dts/Makefile -+++ b/arch/arm/dts/Makefile -@@ -124,6 +124,7 @@ dtb-$(CONFIG_ROCKCHIP_RK3399) += \ - rk3399-ficus.dtb \ - rk3399-firefly.dtb \ - rk3399-gru-bob.dtb \ -+ rk3399-guangmiao-g4c.dtb \ - rk3399-gru-kevin.dtb \ - rk3399-khadas-edge.dtb \ - rk3399-khadas-edge-captain.dtb \ ---- /dev/null -+++ b/configs/guangmiao-g4c-rk3399_defconfig -@@ -0,0 +1,57 @@ -+CONFIG_ARM=y -+CONFIG_ARCH_ROCKCHIP=y -+CONFIG_SYS_TEXT_BASE=0x00200000 -+CONFIG_ENV_OFFSET=0x3F8000 -+CONFIG_ROCKCHIP_RK3399=y -+CONFIG_TARGET_EVB_RK3399=y -+CONFIG_NR_DRAM_BANKS=1 -+CONFIG_SYS_LOAD_ADDR=0x800800 -+CONFIG_DEBUG_UART_BASE=0xFF1A0000 -+CONFIG_DEBUG_UART_CLOCK=24000000 -+CONFIG_DEBUG_UART=y -+CONFIG_DEFAULT_FDT_FILE="rockchip/rk3399-guangmiao-g4c.dtb" -+CONFIG_DISPLAY_BOARDINFO_LATE=y -+CONFIG_SPL_STACK_R=y -+CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN=0x10000 -+CONFIG_TPL=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_DEFAULT_DEVICE_TREE="rk3399-guangmiao-g4c" -+CONFIG_OF_SPL_REMOVE_PROPS="pinctrl-0 pinctrl-names clock-names interrupt-parent assigned-clocks assigned-clock-rates assigned-clock-parents" -+CONFIG_ENV_IS_IN_MMC=y -+CONFIG_SYS_RELOC_GD_ENV_ADDR=y -+CONFIG_ROCKCHIP_GPIO=y -+CONFIG_SYS_I2C_ROCKCHIP=y -+CONFIG_MMC_DW=y -+CONFIG_MMC_DW_ROCKCHIP=y -+CONFIG_MMC_SDHCI=y -+CONFIG_MMC_SDHCI_ROCKCHIP=y -+CONFIG_DM_ETH=y -+CONFIG_ETH_DESIGNWARE=y -+CONFIG_GMAC_ROCKCHIP=y -+CONFIG_PMIC_RK8XX=y -+CONFIG_REGULATOR_PWM=y -+CONFIG_REGULATOR_RK8XX=y -+CONFIG_PWM_ROCKCHIP=y -+CONFIG_RAM_RK3399_LPDDR4=y -+CONFIG_BAUDRATE=1500000 -+CONFIG_DEBUG_UART_SHIFT=2 -+CONFIG_SYSRESET=y -+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_HOST_ETHER=y -+CONFIG_USB_ETHER_ASIX=y -+CONFIG_USB_ETHER_ASIX88179=y -+CONFIG_USB_ETHER_MCS7830=y -+CONFIG_USB_ETHER_RTL8152=y -+CONFIG_USB_ETHER_SMSC95XX=y -+CONFIG_SPL_TINY_MEMSET=y -+CONFIG_ERRNO_STR=y ---- /dev/null -+++ b/arch/arm/dts/rk3399-guangmiao-g4c-u-boot.dtsi -@@ -0,0 +1,18 @@ -+// SPDX-License-Identifier: GPL-2.0+ -+ -+#include "rk3399-u-boot.dtsi" -+#include "rk3399-sdram-lpddr4-100.dtsi" -+ -+/ { -+ chosen { -+ u-boot,spl-boot-order = "same-as-spl", &sdhci, &sdmmc; -+ }; -+}; -+ -+&sdmmc { -+ pinctrl-0 = <&sdmmc_bus4 &sdmmc_clk &sdmmc_cmd &sdmmc_cd>; -+}; -+ -+&vdd_log { -+ regulator-init-microvolt = <950000>; -+}; ---- /dev/null -+++ b/arch/arm/dts/rk3399-guangmiao-g4c.dts -@@ -0,0 +1,646 @@ -+// SPDX-License-Identifier: (GPL-2.0+ OR MIT) -+ -+/dts-v1/; -+#include -+#include "rk3399.dtsi" -+#include "rk3399-opp.dtsi" -+ -+/ { -+ model = "SHAREVDI GuangMiao G4C"; -+ compatible = "sharevdi,guangmiao-g4c", "rockchip,rk3399"; -+ -+ /delete-node/ display-subsystem; -+ -+ chosen { -+ stdout-path = "serial2:1500000n8"; -+ }; -+ -+ clkin_gmac: external-gmac-clock { -+ compatible = "fixed-clock"; -+ clock-frequency = <125000000>; -+ clock-output-names = "clkin_gmac"; -+ #clock-cells = <0>; -+ }; -+ -+ vcc_sys: vcc-sys { -+ compatible = "regulator-fixed"; -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <5000000>; -+ regulator-max-microvolt = <5000000>; -+ regulator-name = "vcc_sys"; -+ }; -+ -+ vcc3v3_sys: vcc3v3-sys { -+ compatible = "regulator-fixed"; -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <3300000>; -+ regulator-max-microvolt = <3300000>; -+ regulator-name = "vcc3v3_sys"; -+ vin-supply = <&vcc_sys>; -+ }; -+ -+ vcc_0v9: vcc-0v9 { -+ compatible = "regulator-fixed"; -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <900000>; -+ regulator-max-microvolt = <900000>; -+ regulator-name = "vcc_0v9"; -+ vin-supply = <&vcc3v3_sys>; -+ }; -+ -+ vcc5v0_host0: vcc5v0-host0 { -+ compatible = "regulator-fixed"; -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-name = "vcc5v0_host0"; -+ vin-supply = <&vcc_sys>; -+ }; -+ -+ vdd_log: vdd-log { -+ compatible = "pwm-regulator"; -+ pwms = <&pwm2 0 25000 1>; -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <800000>; -+ regulator-max-microvolt = <1400000>; -+ regulator-name = "vdd_log"; -+ vin-supply = <&vcc_sys>; -+ }; -+ -+ gpio-keys { -+ compatible = "gpio-keys"; -+ autorepeat; -+ pinctrl-names = "default"; -+ pinctrl-0 = <&reset_button_pin>; -+ -+ reset { -+ debounce-interval = <100>; -+ gpios = <&gpio0 RK_PA5 GPIO_ACTIVE_LOW>; -+ label = "reset"; -+ linux,code = ; -+ wakeup-source; -+ }; -+ }; -+ -+ gpio-leds { -+ compatible = "gpio-leds"; -+ pinctrl-names = "default"; -+ pinctrl-0 = <&lan_led_pin>, <&status_led_pin>, <&wan_led_pin>; -+ -+ lan_led: led-lan { -+ gpios = <&gpio0 RK_PA3 GPIO_ACTIVE_HIGH>; -+ label = "green:lan"; -+ }; -+ -+ status_led: led-status { -+ gpios = <&gpio0 RK_PB3 GPIO_ACTIVE_HIGH>; -+ label = "green:status"; -+ }; -+ -+ wan_led: led-wan { -+ gpios = <&gpio0 RK_PB2 GPIO_ACTIVE_HIGH>; -+ label = "green:wan"; -+ }; -+ }; -+}; -+ -+&cpu_b0 { -+ cpu-supply = <&vdd_cpu_b>; -+}; -+ -+&cpu_b1 { -+ cpu-supply = <&vdd_cpu_b>; -+}; -+ -+&cpu_l0 { -+ cpu-supply = <&vdd_cpu_l>; -+}; -+ -+&cpu_l1 { -+ cpu-supply = <&vdd_cpu_l>; -+}; -+ -+&cpu_l2 { -+ cpu-supply = <&vdd_cpu_l>; -+}; -+ -+&cpu_l3 { -+ cpu-supply = <&vdd_cpu_l>; -+}; -+ -+&emmc_phy { -+ status = "okay"; -+}; -+ -+&gmac { -+ assigned-clock-parents = <&clkin_gmac>; -+ assigned-clocks = <&cru SCLK_RMII_SRC>; -+ clock_in_out = "input"; -+ pinctrl-names = "default"; -+ pinctrl-0 = <&rgmii_pins>, <&phy_intb>, <&phy_pmeb>, <&phy_rstb>; -+ phy-handle = <&rtl8211e>; -+ phy-mode = "rgmii"; -+ phy-supply = <&vcc3v3_s3>; -+ tx_delay = <0x28>; -+ rx_delay = <0x11>; -+ status = "okay"; -+ -+ mdio { -+ compatible = "snps,dwmac-mdio"; -+ #address-cells = <1>; -+ #size-cells = <0>; -+ -+ rtl8211e: ethernet-phy@1 { -+ reg = <1>; -+ interrupt-parent = <&gpio3>; -+ interrupts = ; -+ reset-assert-us = <10000>; -+ reset-deassert-us = <30000>; -+ reset-gpios = <&gpio3 RK_PB7 GPIO_ACTIVE_LOW>; -+ }; -+ }; -+}; -+ -+&gpu { -+ mali-supply = <&vdd_gpu>; -+ status = "okay"; -+}; -+ -+&i2c0 { -+ clock-frequency = <400000>; -+ i2c-scl-rising-time-ns = <160>; -+ i2c-scl-falling-time-ns = <30>; -+ status = "okay"; -+ -+ vdd_cpu_b: regulator@40 { -+ compatible = "silergy,syr827"; -+ reg = <0x40>; -+ fcs,suspend-voltage-selector = <1>; -+ pinctrl-names = "default"; -+ pinctrl-0 = <&cpu_b_sleep>; -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <712500>; -+ regulator-max-microvolt = <1500000>; -+ regulator-name = "vdd_cpu_b"; -+ regulator-ramp-delay = <1000>; -+ vin-supply = <&vcc_sys>; -+ -+ regulator-state-mem { -+ regulator-off-in-suspend; -+ }; -+ }; -+ -+ vdd_gpu: regulator@41 { -+ compatible = "silergy,syr828"; -+ reg = <0x41>; -+ fcs,suspend-voltage-selector = <1>; -+ pinctrl-names = "default"; -+ pinctrl-0 = <&gpu_sleep>; -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <712500>; -+ regulator-max-microvolt = <1500000>; -+ regulator-name = "vdd_gpu"; -+ regulator-ramp-delay = <1000>; -+ vin-supply = <&vcc_sys>; -+ -+ regulator-state-mem { -+ regulator-off-in-suspend; -+ }; -+ }; -+ -+ rk808: pmic@1b { -+ compatible = "rockchip,rk808"; -+ reg = <0x1b>; -+ clock-output-names = "rtc_clko_soc", "rtc_clko_wifi"; -+ #clock-cells = <1>; -+ interrupt-parent = <&gpio1>; -+ interrupts = <21 IRQ_TYPE_LEVEL_LOW>; -+ 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>; -+ vcc6-supply = <&vcc_sys>; -+ vcc7-supply = <&vcc_sys>; -+ vcc8-supply = <&vcc_3v0>; -+ vcc9-supply = <&vcc_sys>; -+ vcc10-supply = <&vcc_sys>; -+ vcc11-supply = <&vcc_sys>; -+ vcc12-supply = <&vcc_sys>; -+ vddio-supply = <&vcc_3v0>; -+ -+ regulators { -+ vdd_center: DCDC_REG1 { -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <750000>; -+ regulator-max-microvolt = <1350000>; -+ regulator-name = "vdd_center"; -+ regulator-ramp-delay = <6001>; -+ -+ regulator-state-mem { -+ regulator-off-in-suspend; -+ }; -+ }; -+ -+ vdd_cpu_l: DCDC_REG2 { -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <750000>; -+ regulator-max-microvolt = <1350000>; -+ regulator-name = "vdd_cpu_l"; -+ regulator-ramp-delay = <6001>; -+ -+ regulator-state-mem { -+ regulator-off-in-suspend; -+ }; -+ }; -+ -+ vcc_ddr: DCDC_REG3 { -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-name = "vcc_ddr"; -+ -+ regulator-state-mem { -+ regulator-on-in-suspend; -+ }; -+ }; -+ -+ vcc_1v8: DCDC_REG4 { -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <1800000>; -+ regulator-max-microvolt = <1800000>; -+ regulator-name = "vcc_1v8"; -+ -+ regulator-state-mem { -+ regulator-on-in-suspend; -+ regulator-suspend-microvolt = <1800000>; -+ }; -+ }; -+ -+ vcc_vldo1: LDO_REG1 { -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <1800000>; -+ regulator-max-microvolt = <1800000>; -+ regulator-name = "vcc_vldo1"; -+ -+ regulator-state-mem { -+ regulator-off-in-suspend; -+ }; -+ }; -+ -+ vcc_vldo2: LDO_REG2 { -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <1800000>; -+ regulator-max-microvolt = <1800000>; -+ regulator-name = "vcc_vldo2"; -+ -+ regulator-state-mem { -+ regulator-off-in-suspend; -+ }; -+ }; -+ -+ vcca_1v8: LDO_REG3 { -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <1800000>; -+ regulator-max-microvolt = <1800000>; -+ regulator-name = "vcca_1v8"; -+ -+ regulator-state-mem { -+ regulator-on-in-suspend; -+ regulator-suspend-microvolt = <1800000>; -+ }; -+ }; -+ -+ vcc_sdio: LDO_REG4 { -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <1800000>; -+ regulator-max-microvolt = <3300000>; -+ regulator-name = "vcc_sdio"; -+ -+ regulator-state-mem { -+ regulator-on-in-suspend; -+ regulator-suspend-microvolt = <3300000>; -+ }; -+ }; -+ -+ vcc3v0_sd: LDO_REG5 { -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <3000000>; -+ regulator-max-microvolt = <3000000>; -+ regulator-name = "vcc3v0_sd"; -+ -+ regulator-state-mem { -+ regulator-on-in-suspend; -+ regulator-suspend-microvolt = <3000000>; -+ }; -+ }; -+ -+ vcc_1v5: LDO_REG6 { -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <1500000>; -+ regulator-max-microvolt = <1500000>; -+ regulator-name = "vcc_1v5"; -+ -+ regulator-state-mem { -+ regulator-on-in-suspend; -+ regulator-suspend-microvolt = <1500000>; -+ }; -+ }; -+ -+ vcca1v8_codec: LDO_REG7 { -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <1800000>; -+ regulator-max-microvolt = <1800000>; -+ regulator-name = "vcca1v8_codec"; -+ -+ regulator-state-mem { -+ regulator-off-in-suspend; -+ }; -+ }; -+ -+ vcc_3v0: LDO_REG8 { -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <3000000>; -+ regulator-max-microvolt = <3000000>; -+ regulator-name = "vcc_3v0"; -+ -+ regulator-state-mem { -+ regulator-on-in-suspend; -+ regulator-suspend-microvolt = <3000000>; -+ }; -+ }; -+ -+ vcc3v3_s3: SWITCH_REG1 { -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-name = "vcc3v3_s3"; -+ -+ regulator-state-mem { -+ regulator-off-in-suspend; -+ }; -+ }; -+ -+ vcc3v3_s0: SWITCH_REG2 { -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-name = "vcc3v3_s0"; -+ -+ regulator-state-mem { -+ regulator-off-in-suspend; -+ }; -+ }; -+ }; -+ }; -+}; -+ -+&i2c3 { -+ i2c-scl-rising-time-ns = <450>; -+ i2c-scl-falling-time-ns = <15>; -+ status = "okay"; -+}; -+ -+&io_domains { -+ bt656-supply = <&vcc_1v8>; -+ audio-supply = <&vcca1v8_codec>; -+ sdmmc-supply = <&vcc_sdio>; -+ gpio1830-supply = <&vcc_3v0>; -+ status = "okay"; -+}; -+ -+&pcie_phy { -+ assigned-clock-parents = <&cru SCLK_PCIEPHY_REF100M>; -+ assigned-clock-rates = <100000000>; -+ assigned-clocks = <&cru SCLK_PCIEPHY_REF>; -+ status = "okay"; -+}; -+ -+&pcie0 { -+ ep-gpios = <&gpio4 RK_PD2 GPIO_ACTIVE_HIGH>; -+ max-link-speed = <1>; -+ num-lanes = <1>; -+ pinctrl-names = "default"; -+ pinctrl-0 = <&pcie_clkreqnb_cpm>; -+ vpcie0v9-supply = <&vcc_0v9>; -+ vpcie1v8-supply = <&vcca_1v8>; -+ vpcie3v3-supply = <&vcc3v3_sys>; -+ status = "okay"; -+}; -+ -+&pinctrl { -+ gpio-leds { -+ lan_led_pin: lan-led-pin { -+ rockchip,pins = <0 RK_PA3 RK_FUNC_GPIO &pcfg_pull_none>; -+ }; -+ -+ status_led_pin: status-led-pin { -+ rockchip,pins = <0 RK_PB3 RK_FUNC_GPIO &pcfg_pull_none>; -+ }; -+ -+ wan_led_pin: wan-led-pin { -+ rockchip,pins = <0 RK_PB2 RK_FUNC_GPIO &pcfg_pull_none>; -+ }; -+ }; -+ -+ gmac { -+ phy_intb: phy-intb { -+ rockchip,pins = <3 RK_PB2 RK_FUNC_GPIO &pcfg_pull_up>; -+ }; -+ -+ phy_pmeb: phy-pmeb { -+ rockchip,pins = <0 RK_PA1 RK_FUNC_GPIO &pcfg_pull_up>; -+ }; -+ -+ phy_rstb: phy-rstb { -+ rockchip,pins = <3 RK_PB7 RK_FUNC_GPIO &pcfg_pull_none>; -+ }; -+ }; -+ -+ pmic { -+ cpu_b_sleep: cpu-b-sleep { -+ rockchip,pins = <1 RK_PC2 RK_FUNC_GPIO &pcfg_pull_down>; -+ }; -+ -+ gpu_sleep: gpu-sleep { -+ rockchip,pins = <1 RK_PB6 RK_FUNC_GPIO &pcfg_pull_down>; -+ }; -+ -+ pmic_int_l: pmic-int-l { -+ rockchip,pins = <1 RK_PC5 RK_FUNC_GPIO &pcfg_pull_up>; -+ }; -+ }; -+ -+ rockchip-key { -+ reset_button_pin: reset-button-pin { -+ rockchip,pins = <0 RK_PA5 RK_FUNC_GPIO &pcfg_pull_up>; -+ }; -+ }; -+ -+ sdio { -+ bt_reg_on_h: bt-reg-on-h { -+ /* external pullup to VCC1V8_PMUPLL */ -+ rockchip,pins = <0 RK_PB1 RK_FUNC_GPIO &pcfg_pull_none>; -+ }; -+ }; -+ -+ sdmmc { -+ sdmmc0_det_l: sdmmc0-det-l { -+ rockchip,pins = <0 RK_PA7 RK_FUNC_GPIO &pcfg_pull_up>; -+ }; -+ }; -+}; -+ -+&pmu_io_domains { -+ pmu1830-supply = <&vcc_3v0>; -+ status = "okay"; -+}; -+ -+&pwm0 { -+ status = "okay"; -+}; -+ -+&pwm1 { -+ status = "okay"; -+}; -+ -+&pwm2 { -+ pinctrl-names = "active"; -+ pinctrl-0 = <&pwm2_pin_pull_down>; -+ status = "okay"; -+}; -+ -+&saradc { -+ vref-supply = <&vcc_1v8>; -+ status = "okay"; -+}; -+ -+&sdhci { -+ bus-width = <8>; -+ mmc-hs200-1_8v; -+ non-removable; -+ status = "okay"; -+}; -+ -+&sdmmc { -+ bus-width = <4>; -+ cap-mmc-highspeed; -+ cap-sd-highspeed; -+ cd-gpios = <&gpio0 RK_PA7 GPIO_ACTIVE_LOW>; -+ disable-wp; -+ pinctrl-names = "default"; -+ pinctrl-0 = <&sdmmc_bus4 &sdmmc_clk &sdmmc_cmd &sdmmc0_det_l>; -+ vqmmc-supply = <&vcc_sdio>; -+ status = "okay"; -+}; -+ -+&tcphy0 { -+ status = "okay"; -+}; -+ -+&tcphy1 { -+ status = "okay"; -+}; -+ -+&tsadc { -+ rockchip,hw-tshut-mode = <1>; -+ rockchip,hw-tshut-polarity = <1>; -+ status = "okay"; -+}; -+ -+&u2phy0 { -+ status = "okay"; -+}; -+ -+&u2phy0_host { -+ phy-supply = <&vcc5v0_host0>; -+ status = "okay"; -+}; -+ -+&u2phy0_otg { -+ status = "okay"; -+}; -+ -+&u2phy1 { -+ status = "okay"; -+}; -+ -+&u2phy1_host { -+ phy-supply = <&vcc5v0_host0>; -+ status = "okay"; -+}; -+ -+&u2phy1_otg { -+ status = "okay"; -+}; -+ -+&uart2 { -+ status = "okay"; -+}; -+ -+&usbdrd3_0 { -+ status = "okay"; -+}; -+ -+&usbdrd3_1 { -+ status = "okay"; -+}; -+ -+&usbdrd_dwc3_0 { -+ dr_mode = "host"; -+ status = "okay"; -+}; -+ -+&usbdrd_dwc3_1 { -+ dr_mode = "host"; -+ status = "okay"; -+}; -+ -+&usb_host0_ehci { -+ status = "okay"; -+}; -+ -+&usb_host0_ohci { -+ status = "okay"; -+}; -+ -+&usb_host1_ehci { -+ status = "okay"; -+}; -+ -+&usb_host1_ohci { -+ status = "okay"; -+}; -+ -+&vopb { -+ status = "okay"; -+}; -+ -+&vopb_mmu { -+ status = "okay"; -+}; -+ -+&vopl { -+ status = "okay"; -+}; -+ -+&vopl_mmu { -+ status = "okay"; -+}; diff --git a/package/boot/uboot-rockchip/patches/302-rockchip-rk3328-Add-support-for-EmbedFire-DoorNet1.patch b/package/boot/uboot-rockchip/patches/301-rockchip-rk3328-Add-support-for-EmbedFire-DoorNet1.patch similarity index 95% rename from package/boot/uboot-rockchip/patches/302-rockchip-rk3328-Add-support-for-EmbedFire-DoorNet1.patch rename to package/boot/uboot-rockchip/patches/301-rockchip-rk3328-Add-support-for-EmbedFire-DoorNet1.patch index a4214f1ca..e5e5b93ec 100644 --- a/package/boot/uboot-rockchip/patches/302-rockchip-rk3328-Add-support-for-EmbedFire-DoorNet1.patch +++ b/package/boot/uboot-rockchip/patches/301-rockchip-rk3328-Add-support-for-EmbedFire-DoorNet1.patch @@ -1,549 +1,550 @@ ---- a/arch/arm/dts/Makefile -+++ b/arch/arm/dts/Makefile -@@ -107,6 +107,7 @@ dtb-$(CONFIG_ROCKCHIP_RK3308) += \ - rk3308-roc-cc.dtb - - dtb-$(CONFIG_ROCKCHIP_RK3328) += \ -+ rk3328-doornet1.dtb \ - rk3328-evb.dtb \ - rk3328-nanopi-r2s.dtb \ - rk3328-roc-cc.dtb \ ---- /dev/null -+++ b/arch/arm/dts/rk3328-doornet1-u-boot.dtsi -@@ -0,0 +1,46 @@ -+// SPDX-License-Identifier: GPL-2.0+ -+/* -+ * (C) Copyright 2018-2019 Rockchip Electronics Co., Ltd -+ * Copyright (c) 2021 EmbedFire -+ */ -+ -+#include "rk3328-u-boot.dtsi" -+#include "rk3328-sdram-ddr4-666.dtsi" -+/ { -+ aliases { -+ mmc0 = &sdmmc; -+ mmc1 = &emmc; -+ }; -+ -+ chosen { -+ u-boot,spl-boot-order = "same-as-spl", &sdmmc, &emmc; -+ }; -+}; -+ -+&gpio0 { -+ u-boot,dm-spl; -+}; -+ -+&pinctrl { -+ u-boot,dm-spl; -+}; -+ -+&sdmmc0m1_pin { -+ 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; -+}; -+ -+&gmac2io { -+ snps,reset-gpio = <&gpio1 RK_PC2 GPIO_ACTIVE_LOW>; -+ snps,reset-active-low; -+ snps,reset-delays-us = <0 10000 50000>; -+}; -+ ---- /dev/null -+++ b/arch/arm/dts/rk3328-doornet1.dts -@@ -0,0 +1,385 @@ -+// SPDX-License-Identifier: (GPL-2.0+ OR MIT) -+/* -+ * Copyright (c) 2020 David Bauer -+ */ -+ -+/dts-v1/; -+ -+#include -+#include -+#include "rk3328.dtsi" -+ -+/ { -+ model = "EmbedFire DoorNet1"; -+ compatible = "embedfire,doornet1", "rockchip,rk3328"; -+ -+ chosen { -+ stdout-path = "serial2:1500000n8"; -+ }; -+ -+ gmac_clk: gmac-clock { -+ compatible = "fixed-clock"; -+ clock-frequency = <125000000>; -+ clock-output-names = "gmac_clkin"; -+ #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 = ; -+ 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 = "doornet1:green:lan"; -+ }; -+ -+ sys_led: led-1 { -+ gpios = <&gpio0 RK_PA2 GPIO_ACTIVE_HIGH>; -+ label = "doornet1:red:sys"; -+ }; -+ -+ wan_led: led-2 { -+ gpios = <&gpio2 RK_PC2 GPIO_ACTIVE_HIGH>; -+ label = "doornet1: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_pin>; -+ 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 = <&rtl8211f>; -+ phy-mode = "rgmii"; -+ phy-supply = <&vcc_io_33>; -+ pinctrl-0 = <&rgmiim1_pins>; -+ pinctrl-names = "default"; -+ rx_delay = <0x54>; -+ snps,aal; -+ tx_delay = <0x20>; -+ status = "okay"; -+ -+ mdio { -+ compatible = "snps,dwmac-mdio"; -+ #address-cells = <1>; -+ #size-cells = <0>; -+ -+ rtl8211f: ethernet-phy@1 { -+ compatible = "ethernet-phy-id001c.c916", -+ "ethernet-phy-ieee802.3-c22"; -+ reg = <1>; -+ pinctrl-0 = <ð_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"; -+}; -+ -+&emmc { -+ bus-width = <8>; -+ cap-mmc-highspeed; -+ max-frequency = <150000000>; -+ mmc-ddr-1_8v; -+ mmc-hs200-1_8v; -+ non-removable; -+ pinctrl-names = "default"; -+ pinctrl-0 = <&emmc_clk &emmc_cmd &emmc_bus8>; -+ vmmc-supply = <&vcc_io_33>; -+ vqmmc-supply = <&vcc18_emmc>; -+ 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"; -+}; -+ ---- /dev/null -+++ b/configs/doornet1-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_SYSINFO=y -+CONFIG_SYS_LOAD_ADDR=0x800800 -+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-doornet1.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-doornet1" -+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 +--- a/arch/arm/dts/Makefile ++++ b/arch/arm/dts/Makefile +@@ -107,6 +107,7 @@ dtb-$(CONFIG_ROCKCHIP_RK3308) += \ + rk3308-roc-cc.dtb + + dtb-$(CONFIG_ROCKCHIP_RK3328) += \ ++ rk3328-doornet1.dtb \ + rk3328-evb.dtb \ + rk3328-nanopi-r2s.dtb \ + rk3328-roc-cc.dtb \ +--- /dev/null ++++ b/arch/arm/dts/rk3328-doornet1-u-boot.dtsi +@@ -0,0 +1,46 @@ ++// SPDX-License-Identifier: GPL-2.0+ ++/* ++ * (C) Copyright 2018-2019 Rockchip Electronics Co., Ltd ++ * Copyright (c) 2021 EmbedFire ++ */ ++ ++#include "rk3328-u-boot.dtsi" ++#include "rk3328-sdram-ddr4-666.dtsi" ++/ { ++ aliases { ++ mmc0 = &sdmmc; ++ mmc1 = &emmc; ++ }; ++ ++ chosen { ++ u-boot,spl-boot-order = "same-as-spl", &sdmmc, &emmc; ++ }; ++}; ++ ++&gpio0 { ++ u-boot,dm-spl; ++}; ++ ++&pinctrl { ++ u-boot,dm-spl; ++}; ++ ++&sdmmc0m1_pin { ++ 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; ++}; ++ ++&gmac2io { ++ snps,reset-gpio = <&gpio1 RK_PC2 GPIO_ACTIVE_LOW>; ++ snps,reset-active-low; ++ snps,reset-delays-us = <0 10000 50000>; ++}; ++ +--- /dev/null ++++ b/arch/arm/dts/rk3328-doornet1.dts +@@ -0,0 +1,385 @@ ++// SPDX-License-Identifier: (GPL-2.0+ OR MIT) ++/* ++ * Copyright (c) 2020 David Bauer ++ */ ++ ++/dts-v1/; ++ ++#include ++#include ++#include "rk3328.dtsi" ++ ++/ { ++ model = "EmbedFire DoorNet1"; ++ compatible = "embedfire,doornet1", "rockchip,rk3328"; ++ ++ chosen { ++ stdout-path = "serial2:1500000n8"; ++ }; ++ ++ gmac_clk: gmac-clock { ++ compatible = "fixed-clock"; ++ clock-frequency = <125000000>; ++ clock-output-names = "gmac_clkin"; ++ #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 = ; ++ 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 = "doornet1:green:lan"; ++ }; ++ ++ sys_led: led-1 { ++ gpios = <&gpio0 RK_PA2 GPIO_ACTIVE_HIGH>; ++ label = "doornet1:red:sys"; ++ }; ++ ++ wan_led: led-2 { ++ gpios = <&gpio2 RK_PC2 GPIO_ACTIVE_HIGH>; ++ label = "doornet1: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_pin>; ++ 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 = <&rtl8211f>; ++ phy-mode = "rgmii"; ++ phy-supply = <&vcc_io_33>; ++ pinctrl-0 = <&rgmiim1_pins>; ++ pinctrl-names = "default"; ++ rx_delay = <0x54>; ++ snps,aal; ++ tx_delay = <0x20>; ++ status = "okay"; ++ ++ mdio { ++ compatible = "snps,dwmac-mdio"; ++ #address-cells = <1>; ++ #size-cells = <0>; ++ ++ rtl8211f: ethernet-phy@1 { ++ compatible = "ethernet-phy-id001c.c916", ++ "ethernet-phy-ieee802.3-c22"; ++ reg = <1>; ++ pinctrl-0 = <ð_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"; ++}; ++ ++&emmc { ++ bus-width = <8>; ++ cap-mmc-highspeed; ++ max-frequency = <150000000>; ++ mmc-ddr-1_8v; ++ mmc-hs200-1_8v; ++ non-removable; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&emmc_clk &emmc_cmd &emmc_bus8>; ++ vmmc-supply = <&vcc_io_33>; ++ vqmmc-supply = <&vcc18_emmc>; ++ 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"; ++}; ++ +--- /dev/null ++++ b/configs/doornet1-rk3328_defconfig +@@ -0,0 +1,100 @@ ++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_SYSINFO=y ++CONFIG_SYS_LOAD_ADDR=0x800800 ++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-doornet1.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-doornet1" ++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_SYS_USB_OHCI_MAX_ROOT_PORTS=1 ++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 diff --git a/package/boot/uboot-rockchip/patches/304-rockchip-rk3328-Add-support-for-Orangepi-R1-Plus.patch b/package/boot/uboot-rockchip/patches/302-rockchip-rk3328-Add-support-for-Orangepi-R1-Plus.patch similarity index 98% rename from package/boot/uboot-rockchip/patches/304-rockchip-rk3328-Add-support-for-Orangepi-R1-Plus.patch rename to package/boot/uboot-rockchip/patches/302-rockchip-rk3328-Add-support-for-Orangepi-R1-Plus.patch index f2cb109a4..d7940c960 100644 --- a/package/boot/uboot-rockchip/patches/304-rockchip-rk3328-Add-support-for-Orangepi-R1-Plus.patch +++ b/package/boot/uboot-rockchip/patches/302-rockchip-rk3328-Add-support-for-Orangepi-R1-Plus.patch @@ -71,7 +71,7 @@ M: Chen-Yu Tsai --- /dev/null +++ b/configs/orangepi-r1-plus-rk3328_defconfig -@@ -0,0 +1,99 @@ +@@ -0,0 +1,100 @@ +CONFIG_ARM=y +CONFIG_ARCH_ROCKCHIP=y +CONFIG_SYS_TEXT_BASE=0x00200000 @@ -163,6 +163,7 @@ +CONFIG_USB_EHCI_GENERIC=y +CONFIG_USB_OHCI_HCD=y +CONFIG_USB_OHCI_GENERIC=y ++CONFIG_SYS_USB_OHCI_MAX_ROOT_PORTS=1 +CONFIG_USB_DWC2=y +CONFIG_USB_DWC3=y +# CONFIG_USB_DWC3_GADGET is not set diff --git a/package/boot/uboot-rockchip/patches/306-rockchip-rk3328-Add-support-for-Orangepi-R1-Plus-LTS.patch b/package/boot/uboot-rockchip/patches/303-rockchip-rk3328-Add-support-for-Orangepi-R1-Plus-LTS.patch similarity index 98% rename from package/boot/uboot-rockchip/patches/306-rockchip-rk3328-Add-support-for-Orangepi-R1-Plus-LTS.patch rename to package/boot/uboot-rockchip/patches/303-rockchip-rk3328-Add-support-for-Orangepi-R1-Plus-LTS.patch index abc5bdc65..0f3f17f7b 100644 --- a/package/boot/uboot-rockchip/patches/306-rockchip-rk3328-Add-support-for-Orangepi-R1-Plus-LTS.patch +++ b/package/boot/uboot-rockchip/patches/303-rockchip-rk3328-Add-support-for-Orangepi-R1-Plus-LTS.patch @@ -41,7 +41,7 @@ new file mode 100644 index 00000000..3cb3b5c3 --- /dev/null +++ b/configs/orangepi-r1-plus-lts-rk3328_defconfig -@@ -0,0 +1,99 @@ +@@ -0,0 +1,100 @@ +CONFIG_ARM=y +CONFIG_ARCH_ROCKCHIP=y +CONFIG_SYS_TEXT_BASE=0x00200000 @@ -133,6 +133,7 @@ index 00000000..3cb3b5c3 +CONFIG_USB_EHCI_GENERIC=y +CONFIG_USB_OHCI_HCD=y +CONFIG_USB_OHCI_GENERIC=y ++CONFIG_SYS_USB_OHCI_MAX_ROOT_PORTS=1 +CONFIG_USB_DWC2=y +CONFIG_USB_DWC3=y +# CONFIG_USB_DWC3_GADGET is not set diff --git a/package/boot/uboot-rockchip/patches/305-rockchip-rk3328-Add-support-for-FriendlyARM-NanoPi-R.patch b/package/boot/uboot-rockchip/patches/304-rockchip-rk3328-Add-support-for-FriendlyARM-NanoPi-R.patch similarity index 98% rename from package/boot/uboot-rockchip/patches/305-rockchip-rk3328-Add-support-for-FriendlyARM-NanoPi-R.patch rename to package/boot/uboot-rockchip/patches/304-rockchip-rk3328-Add-support-for-FriendlyARM-NanoPi-R.patch index da4a1005b..39022fddf 100644 --- a/package/boot/uboot-rockchip/patches/305-rockchip-rk3328-Add-support-for-FriendlyARM-NanoPi-R.patch +++ b/package/boot/uboot-rockchip/patches/304-rockchip-rk3328-Add-support-for-FriendlyARM-NanoPi-R.patch @@ -81,7 +81,7 @@ new file mode 100644 index 0000000000..7bc7a3274f --- /dev/null +++ b/configs/nanopi-r2c-rk3328_defconfig -@@ -0,0 +1,99 @@ +@@ -0,0 +1,100 @@ +CONFIG_ARM=y +CONFIG_ARCH_ROCKCHIP=y +CONFIG_SYS_TEXT_BASE=0x00200000 @@ -173,6 +173,7 @@ index 0000000000..7bc7a3274f +CONFIG_USB_EHCI_GENERIC=y +CONFIG_USB_OHCI_HCD=y +CONFIG_USB_OHCI_GENERIC=y ++CONFIG_SYS_USB_OHCI_MAX_ROOT_PORTS=1 +CONFIG_USB_DWC2=y +CONFIG_USB_DWC3=y +# CONFIG_USB_DWC3_GADGET is not set diff --git a/package/boot/uboot-rockchip/patches/305-rockchip-rk3399-Add-support-for-FriendlyARM-NanoPi-R.patch b/package/boot/uboot-rockchip/patches/305-rockchip-rk3399-Add-support-for-FriendlyARM-NanoPi-R.patch new file mode 100644 index 000000000..ca6f80958 --- /dev/null +++ b/package/boot/uboot-rockchip/patches/305-rockchip-rk3399-Add-support-for-FriendlyARM-NanoPi-R.patch @@ -0,0 +1,113 @@ +--- a/arch/arm/dts/Makefile ++++ b/arch/arm/dts/Makefile +@@ -157,6 +157,7 @@ + rk3399-nanopi-m4b.dtb \ + rk3399-nanopi-neo4.dtb \ + rk3399-nanopi-r4s.dtb \ ++ rk3399-nanopi-r4se.dtb \ + rk3399-orangepi.dtb \ + rk3399-pinebook-pro.dtb \ + rk3399-puma-haikou.dtb \ +--- /dev/null ++++ b/arch/arm/dts/rk3399-nanopi-r4se.dts +@@ -0,0 +1,32 @@ ++// SPDX-License-Identifier: (GPL-2.0+ OR MIT) ++/* ++ * FriendlyElec NanoPC-T4 board device tree source ++ * ++ * Copyright (c) 2020 FriendlyElec Computer Tech. Co., Ltd. ++ * (http://www.friendlyarm.com) ++ * ++ * Copyright (c) 2018 Collabora Ltd. ++ * ++ * Copyright (c) 2020 Jensen Huang ++ */ ++ ++/dts-v1/; ++#include "rk3399-nanopi-r4s.dts" ++ ++/ { ++ model = "FriendlyElec NanoPi R4SE"; ++ compatible = "friendlyarm,nanopi-r4se", "rockchip,rk3399"; ++}; ++ ++&emmc_phy { ++ status = "okay"; ++}; ++ ++&sdhci { ++ bus-width = <8>; ++ non-removable; ++ status = "okay"; ++}; ++&sdmmc { ++ pinctrl-0 = <&sdmmc_cd>; ++}; +--- /dev/null ++++ b/configs/nanopi-r4se-rk3399_defconfig +@@ -0,0 +1,65 @@ ++CONFIG_ARM=y ++CONFIG_SKIP_LOWLEVEL_INIT=y ++CONFIG_COUNTER_FREQUENCY=24000000 ++CONFIG_ARCH_ROCKCHIP=y ++CONFIG_SYS_TEXT_BASE=0x00200000 ++CONFIG_NR_DRAM_BANKS=1 ++CONFIG_ENV_OFFSET=0x3F8000 ++CONFIG_DEFAULT_DEVICE_TREE="rk3399-nanopi-r4se" ++CONFIG_ROCKCHIP_RK3399=y ++CONFIG_TARGET_EVB_RK3399=y ++CONFIG_DEBUG_UART_BASE=0xFF1A0000 ++CONFIG_DEBUG_UART_CLOCK=24000000 ++CONFIG_SYS_LOAD_ADDR=0x800800 ++CONFIG_DEBUG_UART=y ++CONFIG_DEFAULT_FDT_FILE="rockchip/rk3399-nanopi-r4se.dtb" ++CONFIG_DISPLAY_BOARDINFO_LATE=y ++# CONFIG_SPL_RAW_IMAGE_SUPPORT is not set ++CONFIG_SPL_STACK_R=y ++CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN=0x10000 ++CONFIG_TPL=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_OF_SPL_REMOVE_PROPS="pinctrl-0 pinctrl-names clock-names interrupt-parent assigned-clocks assigned-clock-rates assigned-clock-parents" ++CONFIG_ENV_IS_IN_MMC=y ++CONFIG_SYS_RELOC_GD_ENV_ADDR=y ++CONFIG_ROCKCHIP_GPIO=y ++CONFIG_SYS_I2C_ROCKCHIP=y ++CONFIG_MMC_DW=y ++CONFIG_MMC_DW_ROCKCHIP=y ++CONFIG_MMC_SDHCI=y ++CONFIG_MMC_SDHCI_ROCKCHIP=y ++CONFIG_DM_ETH=y ++CONFIG_ETH_DESIGNWARE=y ++CONFIG_GMAC_ROCKCHIP=y ++CONFIG_PMIC_RK8XX=y ++CONFIG_REGULATOR_PWM=y ++CONFIG_REGULATOR_RK8XX=y ++CONFIG_PWM_ROCKCHIP=y ++CONFIG_RAM_RK3399_LPDDR4=y ++CONFIG_BAUDRATE=1500000 ++CONFIG_DEBUG_UART_SHIFT=2 ++CONFIG_SYSRESET=y ++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_KEYBOARD=y ++CONFIG_USB_HOST_ETHER=y ++CONFIG_USB_ETHER_ASIX=y ++CONFIG_USB_ETHER_ASIX88179=y ++CONFIG_USB_ETHER_MCS7830=y ++CONFIG_USB_ETHER_RTL8152=y ++CONFIG_USB_ETHER_SMSC95XX=y ++CONFIG_DM_VIDEO=y ++CONFIG_DISPLAY=y ++CONFIG_VIDEO_ROCKCHIP=y ++CONFIG_DISPLAY_ROCKCHIP_HDMI=y ++CONFIG_SPL_TINY_MEMSET=y ++CONFIG_ERRNO_STR=y diff --git a/package/boot/uboot-rockchip/patches/303-rockchip-rk3399-Add-support-for-EmbedFire-DoorNet2.patch b/package/boot/uboot-rockchip/patches/306-rockchip-rk3399-Add-support-for-EmbedFire-DoorNet2.patch similarity index 95% rename from package/boot/uboot-rockchip/patches/303-rockchip-rk3399-Add-support-for-EmbedFire-DoorNet2.patch rename to package/boot/uboot-rockchip/patches/306-rockchip-rk3399-Add-support-for-EmbedFire-DoorNet2.patch index e5ac06111..f5daeeba0 100644 --- a/package/boot/uboot-rockchip/patches/303-rockchip-rk3399-Add-support-for-EmbedFire-DoorNet2.patch +++ b/package/boot/uboot-rockchip/patches/306-rockchip-rk3399-Add-support-for-EmbedFire-DoorNet2.patch @@ -1,985 +1,985 @@ ---- a/arch/arm/dts/Makefile -+++ b/arch/arm/dts/Makefile -@@ -121,6 +121,7 @@ dtb-$(CONFIG_ROCKCHIP_RK3368) += \ - rk3368-px5-evb.dtb \ - - dtb-$(CONFIG_ROCKCHIP_RK3399) += \ -+ rk3399-doornet2.dtb \ - rk3399-evb.dtb \ - rk3399-ficus.dtb \ - rk3399-firefly.dtb \ ---- /dev/null -+++ b/arch/arm/dts/rk3399-doornet2-u-boot.dtsi -@@ -0,0 +1,25 @@ -+// SPDX-License-Identifier: GPL-2.0+ -+/* -+ * Copyright (C) 2019 Jagan Teki -+ */ -+ -+#include "rk3399-u-boot.dtsi" -+#include "rk3399-sdram-lpddr4-100.dtsi" -+#include "rk3399-sdram-lpddr3-samsung-4GB-1866.dtsi" -+#include "rk3399-sdram-ddr3-1866.dtsi" -+ -+/{ -+ aliases { -+ mmc0 = &sdmmc; -+ mmc1 = &sdhci; -+ }; -+ -+ chosen { -+ u-boot,spl-boot-order = "same-as-spl", &sdmmc, &sdhci; -+ }; -+}; -+ -+&sdmmc { -+ pinctrl-0 = <&sdmmc_bus4 &sdmmc_clk &sdmmc_cmd &sdmmc_cd>; -+}; -+ ---- /dev/null -+++ b/arch/arm/dts/rk3399-doornet2.dts -@@ -0,0 +1,122 @@ -+// SPDX-License-Identifier: (GPL-2.0+ OR MIT) -+ -+/dts-v1/; -+#include "rk3399-doornet2.dtsi" -+ -+/ { -+ model = "EmbedFire DoorNet2"; -+ compatible = "embedfire,doornet2", "rockchip,rk3399"; -+ -+ /delete-node/ display-subsystem; -+ -+ gpio-leds { -+ pinctrl-0 = <&lan_led_pin>, <&sys_led_pin>, <&wan_led_pin>; -+ -+ /delete-node/ status; -+ -+ lan_led: led-lan { -+ gpios = <&gpio1 RK_PA1 GPIO_ACTIVE_HIGH>; -+ label = "green:lan"; -+ }; -+ -+ sys_led: led-sys { -+ gpios = <&gpio0 RK_PB5 GPIO_ACTIVE_HIGH>; -+ label = "red:sys"; -+ default-state = "on"; -+ }; -+ -+ wan_led: led-wan { -+ gpios = <&gpio1 RK_PA0 GPIO_ACTIVE_HIGH>; -+ label = "green:wan"; -+ }; -+ }; -+ -+ gpio-keys { -+ pinctrl-0 = <&reset_button_pin>; -+ -+ /delete-node/ power; -+ -+ reset { -+ debounce-interval = <50>; -+ gpios = <&gpio1 RK_PC6 GPIO_ACTIVE_LOW>; -+ label = "reset"; -+ linux,code = ; -+ }; -+ }; -+ -+ vdd_5v: vdd-5v { -+ compatible = "regulator-fixed"; -+ regulator-name = "vdd_5v"; -+ regulator-always-on; -+ regulator-boot-on; -+ }; -+}; -+ -+&emmc_phy { -+ status = "okay"; -+}; -+ -+&i2c4 { -+ status = "disabled"; -+}; -+ -+&pcie0 { -+ max-link-speed = <1>; -+ num-lanes = <1>; -+ vpcie3v3-supply = <&vcc3v3_sys>; -+}; -+ -+&pinctrl { -+ gpio-leds { -+ /delete-node/ leds-gpio; -+ -+ lan_led_pin: lan-led-pin { -+ rockchip,pins = <1 RK_PA1 RK_FUNC_GPIO &pcfg_pull_none>; -+ }; -+ -+ sys_led_pin: sys-led-pin { -+ rockchip,pins = <0 RK_PB5 RK_FUNC_GPIO &pcfg_pull_none>; -+ }; -+ -+ wan_led_pin: wan-led-pin { -+ rockchip,pins = <1 RK_PA0 RK_FUNC_GPIO &pcfg_pull_none>; -+ }; -+ }; -+ -+ rockchip-key { -+ /delete-node/ power-key; -+ -+ reset_button_pin: reset-button-pin { -+ rockchip,pins = <1 RK_PC6 RK_FUNC_GPIO &pcfg_pull_up>; -+ }; -+ }; -+}; -+ -+&sdhci { -+ status = "okay"; -+}; -+ -+&sdio0 { -+ status = "disabled"; -+}; -+ -+&u2phy0_host { -+ phy-supply = <&vdd_5v>; -+}; -+ -+&u2phy1_host { -+ status = "disabled"; -+}; -+ -+&uart0 { -+ status = "disabled"; -+}; -+ -+&usbdrd_dwc3_0 { -+ dr_mode = "host"; -+}; -+ -+&vcc3v3_sys { -+ vin-supply = <&vcc5v0_sys>; -+}; -+ ---- /dev/null -+++ b/arch/arm/dts/rk3399-doornet2.dtsi -@@ -0,0 +1,750 @@ -+// SPDX-License-Identifier: (GPL-2.0+ OR MIT) -+ -+ -+/dts-v1/; -+#include -+#include "rk3399.dtsi" -+#include "rk3399-opp.dtsi" -+ -+/ { -+ chosen { -+ stdout-path = "serial2:1500000n8"; -+ }; -+ -+ clkin_gmac: external-gmac-clock { -+ compatible = "fixed-clock"; -+ clock-frequency = <125000000>; -+ clock-output-names = "clkin_gmac"; -+ #clock-cells = <0>; -+ }; -+ -+ vcc3v3_sys: vcc3v3-sys { -+ compatible = "regulator-fixed"; -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <3300000>; -+ regulator-max-microvolt = <3300000>; -+ regulator-name = "vcc3v3_sys"; -+ }; -+ -+ vcc5v0_sys: vcc5v0-sys { -+ compatible = "regulator-fixed"; -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <5000000>; -+ regulator-max-microvolt = <5000000>; -+ regulator-name = "vcc5v0_sys"; -+ vin-supply = <&vdd_5v>; -+ }; -+ -+ /* switched by pmic_sleep */ -+ vcc1v8_s3: vcc1v8-s3 { -+ compatible = "regulator-fixed"; -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <1800000>; -+ regulator-max-microvolt = <1800000>; -+ regulator-name = "vcc1v8_s3"; -+ vin-supply = <&vcc_1v8>; -+ }; -+ -+ vcc3v0_sd: vcc3v0-sd { -+ compatible = "regulator-fixed"; -+ enable-active-high; -+ gpio = <&gpio0 RK_PA1 GPIO_ACTIVE_HIGH>; -+ pinctrl-names = "default"; -+ pinctrl-0 = <&sdmmc0_pwr_h>; -+ regulator-always-on; -+ regulator-min-microvolt = <3000000>; -+ regulator-max-microvolt = <3000000>; -+ regulator-name = "vcc3v0_sd"; -+ vin-supply = <&vcc3v3_sys>; -+ }; -+ -+ /* -+ * Really, this is supplied by vcc_1v8, and vcc1v8_s3 only -+ * drives the enable pin, but we can't quite model that. -+ */ -+ vcca0v9_s3: vcca0v9-s3 { -+ compatible = "regulator-fixed"; -+ regulator-min-microvolt = <900000>; -+ regulator-max-microvolt = <900000>; -+ regulator-name = "vcca0v9_s3"; -+ vin-supply = <&vcc1v8_s3>; -+ }; -+ -+ /* As above, actually supplied by vcc3v3_sys */ -+ vcca1v8_s3: vcca1v8-s3 { -+ compatible = "regulator-fixed"; -+ regulator-min-microvolt = <1800000>; -+ regulator-max-microvolt = <1800000>; -+ regulator-name = "vcca1v8_s3"; -+ vin-supply = <&vcc1v8_s3>; -+ }; -+ -+ vbus_typec: vbus-typec { -+ compatible = "regulator-fixed"; -+ regulator-min-microvolt = <5000000>; -+ regulator-max-microvolt = <5000000>; -+ regulator-name = "vbus_typec"; -+ }; -+ -+ gpio-keys { -+ compatible = "gpio-keys"; -+ autorepeat; -+ pinctrl-names = "default"; -+ pinctrl-0 = <&power_key>; -+ -+ power { -+ debounce-interval = <100>; -+ gpios = <&gpio0 RK_PA5 GPIO_ACTIVE_LOW>; -+ label = "GPIO Key Power"; -+ linux,code = ; -+ wakeup-source; -+ }; -+ }; -+ -+ leds: gpio-leds { -+ compatible = "gpio-leds"; -+ pinctrl-names = "default"; -+ pinctrl-0 = <&leds_gpio>; -+ -+ status { -+ gpios = <&gpio0 RK_PB5 GPIO_ACTIVE_HIGH>; -+ label = "status_led"; -+ linux,default-trigger = "heartbeat"; -+ }; -+ }; -+ -+ sdio_pwrseq: sdio-pwrseq { -+ compatible = "mmc-pwrseq-simple"; -+ clocks = <&rk808 1>; -+ clock-names = "ext_clock"; -+ pinctrl-names = "default"; -+ pinctrl-0 = <&wifi_reg_on_h>; -+ reset-gpios = <&gpio0 RK_PB2 GPIO_ACTIVE_LOW>; -+ }; -+}; -+ -+&cpu_b0 { -+ cpu-supply = <&vdd_cpu_b>; -+}; -+ -+&cpu_b1 { -+ cpu-supply = <&vdd_cpu_b>; -+}; -+ -+&cpu_l0 { -+ cpu-supply = <&vdd_cpu_l>; -+}; -+ -+&cpu_l1 { -+ cpu-supply = <&vdd_cpu_l>; -+}; -+ -+&cpu_l2 { -+ cpu-supply = <&vdd_cpu_l>; -+}; -+ -+&cpu_l3 { -+ cpu-supply = <&vdd_cpu_l>; -+}; -+ -+&emmc_phy { -+ status = "okay"; -+}; -+ -+&gmac { -+ assigned-clock-parents = <&clkin_gmac>; -+ assigned-clocks = <&cru SCLK_RMII_SRC>; -+ clock_in_out = "input"; -+ pinctrl-names = "default"; -+ pinctrl-0 = <&rgmii_pins>, <&phy_intb>, <&phy_rstb>; -+ phy-handle = <&rtl8211f>; -+ phy-mode = "rgmii"; -+ phy-supply = <&vcc3v3_s3>; -+ tx_delay = <0x28>; -+ rx_delay = <0x11>; -+ status = "okay"; -+ -+ mdio { -+ compatible = "snps,dwmac-mdio"; -+ #address-cells = <1>; -+ #size-cells = <0>; -+ -+ rtl8211f: ethernet-phy@1 { -+ compatible = "ethernet-phy-id001c.c916", -+ "ethernet-phy-ieee802.3-c22"; -+ reg = <1>; -+ interrupt-parent = <&gpio3>; -+ interrupts = ; -+ reset-assert-us = <10000>; -+ reset-deassert-us = <30000>; -+ reset-gpios = <&gpio3 RK_PB7 GPIO_ACTIVE_LOW>; -+ }; -+ }; -+}; -+ -+&gpu { -+ mali-supply = <&vdd_gpu>; -+ status = "okay"; -+}; -+ -+&hdmi { -+ ddc-i2c-bus = <&i2c7>; -+ pinctrl-names = "default"; -+ pinctrl-0 = <&hdmi_cec>; -+ status = "okay"; -+}; -+ -+&hdmi_sound { -+ status = "okay"; -+}; -+ -+&i2c0 { -+ clock-frequency = <400000>; -+ i2c-scl-rising-time-ns = <160>; -+ i2c-scl-falling-time-ns = <30>; -+ status = "okay"; -+ -+ vdd_cpu_b: regulator@40 { -+ compatible = "silergy,syr827"; -+ reg = <0x40>; -+ fcs,suspend-voltage-selector = <1>; -+ pinctrl-names = "default"; -+ pinctrl-0 = <&cpu_b_sleep>; -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <712500>; -+ regulator-max-microvolt = <1500000>; -+ regulator-name = "vdd_cpu_b"; -+ regulator-ramp-delay = <1000>; -+ vin-supply = <&vcc3v3_sys>; -+ -+ regulator-state-mem { -+ regulator-off-in-suspend; -+ }; -+ }; -+ -+ vdd_gpu: regulator@41 { -+ compatible = "silergy,syr828"; -+ reg = <0x41>; -+ fcs,suspend-voltage-selector = <1>; -+ pinctrl-names = "default"; -+ pinctrl-0 = <&gpu_sleep>; -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <712500>; -+ regulator-max-microvolt = <1500000>; -+ regulator-name = "vdd_gpu"; -+ regulator-ramp-delay = <1000>; -+ vin-supply = <&vcc3v3_sys>; -+ -+ regulator-state-mem { -+ regulator-off-in-suspend; -+ }; -+ }; -+ -+ rk808: pmic@1b { -+ compatible = "rockchip,rk808"; -+ reg = <0x1b>; -+ clock-output-names = "xin32k", "rtc_clko_wifi"; -+ #clock-cells = <1>; -+ interrupt-parent = <&gpio1>; -+ interrupts = <21 IRQ_TYPE_LEVEL_LOW>; -+ pinctrl-names = "default"; -+ pinctrl-0 = <&pmic_int_l>; -+ rockchip,system-power-controller; -+ wakeup-source; -+ -+ vcc1-supply = <&vcc3v3_sys>; -+ vcc2-supply = <&vcc3v3_sys>; -+ vcc3-supply = <&vcc3v3_sys>; -+ vcc4-supply = <&vcc3v3_sys>; -+ vcc6-supply = <&vcc3v3_sys>; -+ vcc7-supply = <&vcc3v3_sys>; -+ vcc8-supply = <&vcc3v3_sys>; -+ vcc9-supply = <&vcc3v3_sys>; -+ vcc10-supply = <&vcc3v3_sys>; -+ vcc11-supply = <&vcc3v3_sys>; -+ vcc12-supply = <&vcc3v3_sys>; -+ vddio-supply = <&vcc_3v0>; -+ -+ regulators { -+ vdd_center: DCDC_REG1 { -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <750000>; -+ regulator-max-microvolt = <1350000>; -+ regulator-name = "vdd_center"; -+ regulator-ramp-delay = <6001>; -+ -+ regulator-state-mem { -+ regulator-off-in-suspend; -+ }; -+ }; -+ -+ vdd_cpu_l: DCDC_REG2 { -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <750000>; -+ regulator-max-microvolt = <1350000>; -+ regulator-name = "vdd_cpu_l"; -+ regulator-ramp-delay = <6001>; -+ -+ regulator-state-mem { -+ regulator-off-in-suspend; -+ }; -+ }; -+ -+ vcc_ddr: DCDC_REG3 { -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-name = "vcc_ddr"; -+ -+ regulator-state-mem { -+ regulator-on-in-suspend; -+ }; -+ }; -+ -+ vcc_1v8: DCDC_REG4 { -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <1800000>; -+ regulator-max-microvolt = <1800000>; -+ regulator-name = "vcc_1v8"; -+ -+ regulator-state-mem { -+ regulator-on-in-suspend; -+ regulator-suspend-microvolt = <1800000>; -+ }; -+ }; -+ -+ vcc1v8_cam: LDO_REG1 { -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <1800000>; -+ regulator-max-microvolt = <1800000>; -+ regulator-name = "vcc1v8_cam"; -+ -+ regulator-state-mem { -+ regulator-off-in-suspend; -+ }; -+ }; -+ -+ vcc3v0_touch: LDO_REG2 { -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <3000000>; -+ regulator-max-microvolt = <3000000>; -+ regulator-name = "vcc3v0_touch"; -+ -+ regulator-state-mem { -+ regulator-off-in-suspend; -+ }; -+ }; -+ -+ vcc1v8_pmupll: LDO_REG3 { -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <1800000>; -+ regulator-max-microvolt = <1800000>; -+ regulator-name = "vcc1v8_pmupll"; -+ -+ regulator-state-mem { -+ regulator-on-in-suspend; -+ regulator-suspend-microvolt = <1800000>; -+ }; -+ }; -+ -+ vcc_sdio: LDO_REG4 { -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-init-microvolt = <3000000>; -+ regulator-min-microvolt = <1800000>; -+ regulator-max-microvolt = <3300000>; -+ regulator-name = "vcc_sdio"; -+ -+ regulator-state-mem { -+ regulator-on-in-suspend; -+ regulator-suspend-microvolt = <3000000>; -+ }; -+ }; -+ -+ vcca3v0_codec: LDO_REG5 { -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <3000000>; -+ regulator-max-microvolt = <3000000>; -+ regulator-name = "vcca3v0_codec"; -+ -+ regulator-state-mem { -+ regulator-off-in-suspend; -+ }; -+ }; -+ -+ vcc_1v5: LDO_REG6 { -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <1500000>; -+ regulator-max-microvolt = <1500000>; -+ regulator-name = "vcc_1v5"; -+ -+ regulator-state-mem { -+ regulator-on-in-suspend; -+ regulator-suspend-microvolt = <1500000>; -+ }; -+ }; -+ -+ vcca1v8_codec: LDO_REG7 { -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <1800000>; -+ regulator-max-microvolt = <1800000>; -+ regulator-name = "vcca1v8_codec"; -+ -+ regulator-state-mem { -+ regulator-off-in-suspend; -+ }; -+ }; -+ -+ vcc_3v0: LDO_REG8 { -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <3000000>; -+ regulator-max-microvolt = <3000000>; -+ regulator-name = "vcc_3v0"; -+ -+ regulator-state-mem { -+ regulator-on-in-suspend; -+ regulator-suspend-microvolt = <3000000>; -+ }; -+ }; -+ -+ vcc3v3_s3: SWITCH_REG1 { -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-name = "vcc3v3_s3"; -+ -+ regulator-state-mem { -+ regulator-off-in-suspend; -+ }; -+ }; -+ -+ vcc3v3_s0: SWITCH_REG2 { -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-name = "vcc3v3_s0"; -+ -+ regulator-state-mem { -+ regulator-off-in-suspend; -+ }; -+ }; -+ }; -+ }; -+}; -+ -+&i2c1 { -+ clock-frequency = <200000>; -+ i2c-scl-rising-time-ns = <150>; -+ i2c-scl-falling-time-ns = <30>; -+ status = "okay"; -+}; -+ -+&i2c2 { -+ status = "okay"; -+}; -+ -+&i2c4 { -+ clock-frequency = <400000>; -+ i2c-scl-rising-time-ns = <160>; -+ i2c-scl-falling-time-ns = <30>; -+ status = "okay"; -+ -+ fusb0: typec-portc@22 { -+ compatible = "fcs,fusb302"; -+ reg = <0x22>; -+ interrupt-parent = <&gpio1>; -+ interrupts = ; -+ pinctrl-names = "default"; -+ pinctrl-0 = <&fusb0_int>; -+ vbus-supply = <&vbus_typec>; -+ }; -+}; -+ -+&i2c7 { -+ status = "okay"; -+}; -+ -+&i2s2 { -+ status = "okay"; -+}; -+ -+&io_domains { -+ bt656-supply = <&vcc_1v8>; -+ audio-supply = <&vcca1v8_codec>; -+ sdmmc-supply = <&vcc_sdio>; -+ gpio1830-supply = <&vcc_3v0>; -+ status = "okay"; -+}; -+ -+&pcie_phy { -+ assigned-clock-parents = <&cru SCLK_PCIEPHY_REF100M>; -+ assigned-clock-rates = <100000000>; -+ assigned-clocks = <&cru SCLK_PCIEPHY_REF>; -+ status = "okay"; -+}; -+ -+&pcie0 { -+ ep-gpios = <&gpio2 RK_PA4 GPIO_ACTIVE_HIGH>; -+ max-link-speed = <2>; -+ num-lanes = <2>; -+ vpcie0v9-supply = <&vcca0v9_s3>; -+ vpcie1v8-supply = <&vcca1v8_s3>; -+ status = "okay"; -+}; -+ -+&pinctrl { -+ fusb30x { -+ fusb0_int: fusb0-int { -+ rockchip,pins = <1 RK_PA2 RK_FUNC_GPIO &pcfg_pull_up>; -+ }; -+ }; -+ -+ gpio-leds { -+ leds_gpio: leds-gpio { -+ rockchip,pins = <0 RK_PB5 RK_FUNC_GPIO &pcfg_pull_none>; -+ }; -+ }; -+ -+ phy { -+ phy_intb: phy-intb { -+ rockchip,pins = <3 RK_PB2 RK_FUNC_GPIO &pcfg_pull_up>; -+ }; -+ -+ phy_rstb: phy-rstb { -+ rockchip,pins = <3 RK_PB7 RK_FUNC_GPIO &pcfg_pull_none>; -+ }; -+ }; -+ -+ pmic { -+ cpu_b_sleep: cpu-b-sleep { -+ rockchip,pins = <1 RK_PC1 RK_FUNC_GPIO &pcfg_pull_down>; -+ }; -+ -+ gpu_sleep: gpu-sleep { -+ rockchip,pins = <1 RK_PB6 RK_FUNC_GPIO &pcfg_pull_down>; -+ }; -+ -+ pmic_int_l: pmic-int-l { -+ rockchip,pins = <1 RK_PC5 RK_FUNC_GPIO &pcfg_pull_up>; -+ }; -+ }; -+ -+ rockchip-key { -+ power_key: power-key { -+ rockchip,pins = <0 RK_PA5 RK_FUNC_GPIO &pcfg_pull_up>; -+ }; -+ }; -+ -+ sdio { -+ bt_host_wake_l: bt-host-wake-l { -+ rockchip,pins = <0 RK_PA4 RK_FUNC_GPIO &pcfg_pull_none>; -+ }; -+ -+ bt_reg_on_h: bt-reg-on-h { -+ /* external pullup to VCC1V8_PMUPLL */ -+ rockchip,pins = <0 RK_PB1 RK_FUNC_GPIO &pcfg_pull_none>; -+ }; -+ -+ bt_wake_l: bt-wake-l { -+ rockchip,pins = <2 RK_PD2 RK_FUNC_GPIO &pcfg_pull_none>; -+ }; -+ -+ wifi_reg_on_h: wifi-reg_on-h { -+ rockchip,pins = <0 RK_PB2 RK_FUNC_GPIO &pcfg_pull_none>; -+ }; -+ }; -+ -+ sdmmc { -+ sdmmc0_det_l: sdmmc0-det-l { -+ rockchip,pins = <0 RK_PA7 RK_FUNC_GPIO &pcfg_pull_up>; -+ }; -+ -+ sdmmc0_pwr_h: sdmmc0-pwr-h { -+ rockchip,pins = <0 RK_PA1 RK_FUNC_GPIO &pcfg_pull_none>; -+ }; -+ }; -+}; -+ -+&pmu_io_domains { -+ pmu1830-supply = <&vcc_3v0>; -+ status = "okay"; -+}; -+ -+&pwm0 { -+ status = "okay"; -+}; -+ -+&pwm1 { -+ status = "okay"; -+}; -+ -+&pwm2 { -+ pinctrl-names = "active"; -+ pinctrl-0 = <&pwm2_pin_pull_down>; -+ status = "okay"; -+}; -+ -+&saradc { -+ vref-supply = <&vcca1v8_s3>; -+ status = "okay"; -+}; -+ -+&sdhci { -+ bus-width = <8>; -+ mmc-hs200-1_8v; -+ non-removable; -+ status = "okay"; -+}; -+ -+&sdio0 { -+ bus-width = <4>; -+ cap-sd-highspeed; -+ cap-sdio-irq; -+ keep-power-in-suspend; -+ mmc-pwrseq = <&sdio_pwrseq>; -+ non-removable; -+ pinctrl-names = "default"; -+ pinctrl-0 = <&sdio0_bus4 &sdio0_cmd &sdio0_clk>; -+ sd-uhs-sdr104; -+ status = "okay"; -+}; -+ -+&sdmmc { -+ bus-width = <4>; -+ cap-sd-highspeed; -+ cap-mmc-highspeed; -+ cd-gpios = <&gpio0 RK_PA7 GPIO_ACTIVE_LOW>; -+ disable-wp; -+ pinctrl-names = "default"; -+ pinctrl-0 = <&sdmmc_bus4 &sdmmc_clk &sdmmc_cmd &sdmmc0_det_l>; -+ sd-uhs-sdr104; -+ vmmc-supply = <&vcc3v0_sd>; -+ vqmmc-supply = <&vcc_sdio>; -+ status = "okay"; -+}; -+ -+&tcphy0 { -+ status = "okay"; -+}; -+ -+&tcphy1 { -+ status = "okay"; -+}; -+ -+&tsadc { -+ /* tshut mode 0:CRU 1:GPIO */ -+ rockchip,hw-tshut-mode = <1>; -+ /* tshut polarity 0:LOW 1:HIGH */ -+ rockchip,hw-tshut-polarity = <1>; -+ status = "okay"; -+}; -+ -+&u2phy0 { -+ status = "okay"; -+}; -+ -+&u2phy0_host { -+ status = "okay"; -+}; -+ -+&u2phy0_otg { -+ status = "okay"; -+}; -+ -+&u2phy1 { -+ status = "okay"; -+}; -+ -+&u2phy1_host { -+ status = "okay"; -+}; -+ -+&u2phy1_otg { -+ status = "okay"; -+}; -+ -+&uart0 { -+ pinctrl-names = "default"; -+ pinctrl-0 = <&uart0_xfer &uart0_rts &uart0_cts>; -+ status = "okay"; -+ -+ bluetooth { -+ compatible = "brcm,bcm43438-bt"; -+ clocks = <&rk808 1>; -+ clock-names = "lpo"; -+ device-wakeup-gpios = <&gpio2 RK_PD2 GPIO_ACTIVE_HIGH>; -+ host-wakeup-gpios = <&gpio0 RK_PA4 GPIO_ACTIVE_HIGH>; -+ shutdown-gpios = <&gpio0 RK_PB1 GPIO_ACTIVE_HIGH>; -+ max-speed = <4000000>; -+ pinctrl-names = "default"; -+ pinctrl-0 = <&bt_reg_on_h &bt_host_wake_l &bt_wake_l>; -+ vbat-supply = <&vcc3v3_sys>; -+ vddio-supply = <&vcc_1v8>; -+ }; -+}; -+ -+&uart2 { -+ status = "okay"; -+}; -+ -+&usbdrd3_0 { -+ status = "okay"; -+}; -+ -+&usbdrd3_1 { -+ status = "okay"; -+}; -+ -+&usbdrd_dwc3_0 { -+ status = "okay"; -+}; -+ -+&usbdrd_dwc3_1 { -+ dr_mode = "host"; -+ status = "okay"; -+}; -+ -+&usb_host0_ehci { -+ status = "okay"; -+}; -+ -+&usb_host0_ohci { -+ status = "okay"; -+}; -+ -+&usb_host1_ehci { -+ status = "okay"; -+}; -+ -+&usb_host1_ohci { -+ status = "okay"; -+}; -+ -+&vopb { -+ status = "okay"; -+}; -+ -+&vopb_mmu { -+ status = "okay"; -+}; -+ -+&vopl { -+ status = "okay"; -+}; -+ -+&vopl_mmu { -+ status = "okay"; -+}; -+ ---- /dev/null -+++ b/configs/doornet2-rk3399_defconfig -@@ -0,0 +1,66 @@ -+CONFIG_ARM=y -+CONFIG_ARCH_ROCKCHIP=y -+CONFIG_SYS_TEXT_BASE=0x00200000 -+CONFIG_NR_DRAM_BANKS=1 -+CONFIG_ENV_OFFSET=0x3F8000 -+CONFIG_ROCKCHIP_RK3399=y -+CONFIG_TARGET_EVB_RK3399=y -+CONFIG_TARGET_DOORNET2_RK3399=y -+CONFIG_DEBUG_UART_BASE=0xFF1A0000 -+CONFIG_DEBUG_UART_CLOCK=24000000 -+CONFIG_DEFAULT_DEVICE_TREE="rk3399-doornet2" -+CONFIG_SYS_LOAD_ADDR=0x800800 -+CONFIG_DEBUG_UART=y -+CONFIG_DEFAULT_FDT_FILE="rockchip/rk3399-doornet2.dtb" -+CONFIG_MISC_INIT_R=y -+# CONFIG_SPL_RAW_IMAGE_SUPPORT is not set -+CONFIG_SPL_STACK_R=y -+CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN=0x10000 -+CONFIG_TPL=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_OF_SPL_REMOVE_PROPS="pinctrl-0 pinctrl-names clock-names interrupt-parent assigned-clocks assigned-clock-rates assigned-clock-parents" -+CONFIG_ENV_IS_IN_MMC=y -+CONFIG_SYS_RELOC_GD_ENV_ADDR=y -+CONFIG_SYS_MMC_ENV_DEV=1 -+CONFIG_ROCKCHIP_GPIO=y -+CONFIG_SYS_I2C_ROCKCHIP=y -+CONFIG_MMC_DW=y -+CONFIG_MMC_DW_ROCKCHIP=y -+CONFIG_MMC_SDHCI=y -+CONFIG_MMC_SDHCI_ROCKCHIP=y -+CONFIG_DM_ETH=y -+CONFIG_ETH_DESIGNWARE=y -+CONFIG_GMAC_ROCKCHIP=y -+CONFIG_PMIC_RK8XX=y -+CONFIG_REGULATOR_PWM=y -+CONFIG_REGULATOR_RK8XX=y -+CONFIG_PWM_ROCKCHIP=y -+CONFIG_RAM_RK3399_LPDDR4=y -+CONFIG_BAUDRATE=1500000 -+CONFIG_DEBUG_UART_SHIFT=2 -+CONFIG_SYSRESET=y -+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_KEYBOARD=y -+CONFIG_USB_HOST_ETHER=y -+CONFIG_USB_ETHER_ASIX=y -+CONFIG_USB_ETHER_ASIX88179=y -+CONFIG_USB_ETHER_MCS7830=y -+CONFIG_USB_ETHER_RTL8152=y -+CONFIG_USB_ETHER_SMSC95XX=y -+CONFIG_DM_VIDEO=y -+CONFIG_DISPLAY=y -+CONFIG_VIDEO_ROCKCHIP=y -+CONFIG_DISPLAY_ROCKCHIP_HDMI=y -+CONFIG_SPL_TINY_MEMSET=y -+CONFIG_ERRNO_STR=y -+ +--- a/arch/arm/dts/Makefile ++++ b/arch/arm/dts/Makefile +@@ -121,6 +121,7 @@ dtb-$(CONFIG_ROCKCHIP_RK3368) += \ + rk3368-px5-evb.dtb \ + + dtb-$(CONFIG_ROCKCHIP_RK3399) += \ ++ rk3399-doornet2.dtb \ + rk3399-evb.dtb \ + rk3399-ficus.dtb \ + rk3399-firefly.dtb \ +--- /dev/null ++++ b/arch/arm/dts/rk3399-doornet2-u-boot.dtsi +@@ -0,0 +1,25 @@ ++// SPDX-License-Identifier: GPL-2.0+ ++/* ++ * Copyright (C) 2019 Jagan Teki ++ */ ++ ++#include "rk3399-u-boot.dtsi" ++#include "rk3399-sdram-lpddr4-100.dtsi" ++#include "rk3399-sdram-lpddr3-samsung-4GB-1866.dtsi" ++#include "rk3399-sdram-ddr3-1866.dtsi" ++ ++/{ ++ aliases { ++ mmc0 = &sdmmc; ++ mmc1 = &sdhci; ++ }; ++ ++ chosen { ++ u-boot,spl-boot-order = "same-as-spl", &sdmmc, &sdhci; ++ }; ++}; ++ ++&sdmmc { ++ pinctrl-0 = <&sdmmc_bus4 &sdmmc_clk &sdmmc_cmd &sdmmc_cd>; ++}; ++ +--- /dev/null ++++ b/arch/arm/dts/rk3399-doornet2.dts +@@ -0,0 +1,122 @@ ++// SPDX-License-Identifier: (GPL-2.0+ OR MIT) ++ ++/dts-v1/; ++#include "rk3399-doornet2.dtsi" ++ ++/ { ++ model = "EmbedFire DoorNet2"; ++ compatible = "embedfire,doornet2", "rockchip,rk3399"; ++ ++ /delete-node/ display-subsystem; ++ ++ gpio-leds { ++ pinctrl-0 = <&lan_led_pin>, <&sys_led_pin>, <&wan_led_pin>; ++ ++ /delete-node/ status; ++ ++ lan_led: led-lan { ++ gpios = <&gpio1 RK_PA1 GPIO_ACTIVE_HIGH>; ++ label = "green:lan"; ++ }; ++ ++ sys_led: led-sys { ++ gpios = <&gpio0 RK_PB5 GPIO_ACTIVE_HIGH>; ++ label = "red:sys"; ++ default-state = "on"; ++ }; ++ ++ wan_led: led-wan { ++ gpios = <&gpio1 RK_PA0 GPIO_ACTIVE_HIGH>; ++ label = "green:wan"; ++ }; ++ }; ++ ++ gpio-keys { ++ pinctrl-0 = <&reset_button_pin>; ++ ++ /delete-node/ power; ++ ++ reset { ++ debounce-interval = <50>; ++ gpios = <&gpio1 RK_PC6 GPIO_ACTIVE_LOW>; ++ label = "reset"; ++ linux,code = ; ++ }; ++ }; ++ ++ vdd_5v: vdd-5v { ++ compatible = "regulator-fixed"; ++ regulator-name = "vdd_5v"; ++ regulator-always-on; ++ regulator-boot-on; ++ }; ++}; ++ ++&emmc_phy { ++ status = "okay"; ++}; ++ ++&i2c4 { ++ status = "disabled"; ++}; ++ ++&pcie0 { ++ max-link-speed = <1>; ++ num-lanes = <1>; ++ vpcie3v3-supply = <&vcc3v3_sys>; ++}; ++ ++&pinctrl { ++ gpio-leds { ++ /delete-node/ leds-gpio; ++ ++ lan_led_pin: lan-led-pin { ++ rockchip,pins = <1 RK_PA1 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ ++ sys_led_pin: sys-led-pin { ++ rockchip,pins = <0 RK_PB5 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ ++ wan_led_pin: wan-led-pin { ++ rockchip,pins = <1 RK_PA0 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ }; ++ ++ rockchip-key { ++ /delete-node/ power-key; ++ ++ reset_button_pin: reset-button-pin { ++ rockchip,pins = <1 RK_PC6 RK_FUNC_GPIO &pcfg_pull_up>; ++ }; ++ }; ++}; ++ ++&sdhci { ++ status = "okay"; ++}; ++ ++&sdio0 { ++ status = "disabled"; ++}; ++ ++&u2phy0_host { ++ phy-supply = <&vdd_5v>; ++}; ++ ++&u2phy1_host { ++ status = "disabled"; ++}; ++ ++&uart0 { ++ status = "disabled"; ++}; ++ ++&usbdrd_dwc3_0 { ++ dr_mode = "host"; ++}; ++ ++&vcc3v3_sys { ++ vin-supply = <&vcc5v0_sys>; ++}; ++ +--- /dev/null ++++ b/arch/arm/dts/rk3399-doornet2.dtsi +@@ -0,0 +1,750 @@ ++// SPDX-License-Identifier: (GPL-2.0+ OR MIT) ++ ++ ++/dts-v1/; ++#include ++#include "rk3399.dtsi" ++#include "rk3399-opp.dtsi" ++ ++/ { ++ chosen { ++ stdout-path = "serial2:1500000n8"; ++ }; ++ ++ clkin_gmac: external-gmac-clock { ++ compatible = "fixed-clock"; ++ clock-frequency = <125000000>; ++ clock-output-names = "clkin_gmac"; ++ #clock-cells = <0>; ++ }; ++ ++ vcc3v3_sys: vcc3v3-sys { ++ compatible = "regulator-fixed"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <3300000>; ++ regulator-max-microvolt = <3300000>; ++ regulator-name = "vcc3v3_sys"; ++ }; ++ ++ vcc5v0_sys: vcc5v0-sys { ++ compatible = "regulator-fixed"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <5000000>; ++ regulator-max-microvolt = <5000000>; ++ regulator-name = "vcc5v0_sys"; ++ vin-supply = <&vdd_5v>; ++ }; ++ ++ /* switched by pmic_sleep */ ++ vcc1v8_s3: vcc1v8-s3 { ++ compatible = "regulator-fixed"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ regulator-name = "vcc1v8_s3"; ++ vin-supply = <&vcc_1v8>; ++ }; ++ ++ vcc3v0_sd: vcc3v0-sd { ++ compatible = "regulator-fixed"; ++ enable-active-high; ++ gpio = <&gpio0 RK_PA1 GPIO_ACTIVE_HIGH>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&sdmmc0_pwr_h>; ++ regulator-always-on; ++ regulator-min-microvolt = <3000000>; ++ regulator-max-microvolt = <3000000>; ++ regulator-name = "vcc3v0_sd"; ++ vin-supply = <&vcc3v3_sys>; ++ }; ++ ++ /* ++ * Really, this is supplied by vcc_1v8, and vcc1v8_s3 only ++ * drives the enable pin, but we can't quite model that. ++ */ ++ vcca0v9_s3: vcca0v9-s3 { ++ compatible = "regulator-fixed"; ++ regulator-min-microvolt = <900000>; ++ regulator-max-microvolt = <900000>; ++ regulator-name = "vcca0v9_s3"; ++ vin-supply = <&vcc1v8_s3>; ++ }; ++ ++ /* As above, actually supplied by vcc3v3_sys */ ++ vcca1v8_s3: vcca1v8-s3 { ++ compatible = "regulator-fixed"; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ regulator-name = "vcca1v8_s3"; ++ vin-supply = <&vcc1v8_s3>; ++ }; ++ ++ vbus_typec: vbus-typec { ++ compatible = "regulator-fixed"; ++ regulator-min-microvolt = <5000000>; ++ regulator-max-microvolt = <5000000>; ++ regulator-name = "vbus_typec"; ++ }; ++ ++ gpio-keys { ++ compatible = "gpio-keys"; ++ autorepeat; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&power_key>; ++ ++ power { ++ debounce-interval = <100>; ++ gpios = <&gpio0 RK_PA5 GPIO_ACTIVE_LOW>; ++ label = "GPIO Key Power"; ++ linux,code = ; ++ wakeup-source; ++ }; ++ }; ++ ++ leds: gpio-leds { ++ compatible = "gpio-leds"; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&leds_gpio>; ++ ++ status { ++ gpios = <&gpio0 RK_PB5 GPIO_ACTIVE_HIGH>; ++ label = "status_led"; ++ linux,default-trigger = "heartbeat"; ++ }; ++ }; ++ ++ sdio_pwrseq: sdio-pwrseq { ++ compatible = "mmc-pwrseq-simple"; ++ clocks = <&rk808 1>; ++ clock-names = "ext_clock"; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&wifi_reg_on_h>; ++ reset-gpios = <&gpio0 RK_PB2 GPIO_ACTIVE_LOW>; ++ }; ++}; ++ ++&cpu_b0 { ++ cpu-supply = <&vdd_cpu_b>; ++}; ++ ++&cpu_b1 { ++ cpu-supply = <&vdd_cpu_b>; ++}; ++ ++&cpu_l0 { ++ cpu-supply = <&vdd_cpu_l>; ++}; ++ ++&cpu_l1 { ++ cpu-supply = <&vdd_cpu_l>; ++}; ++ ++&cpu_l2 { ++ cpu-supply = <&vdd_cpu_l>; ++}; ++ ++&cpu_l3 { ++ cpu-supply = <&vdd_cpu_l>; ++}; ++ ++&emmc_phy { ++ status = "okay"; ++}; ++ ++&gmac { ++ assigned-clock-parents = <&clkin_gmac>; ++ assigned-clocks = <&cru SCLK_RMII_SRC>; ++ clock_in_out = "input"; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&rgmii_pins>, <&phy_intb>, <&phy_rstb>; ++ phy-handle = <&rtl8211f>; ++ phy-mode = "rgmii"; ++ phy-supply = <&vcc3v3_s3>; ++ tx_delay = <0x28>; ++ rx_delay = <0x11>; ++ status = "okay"; ++ ++ mdio { ++ compatible = "snps,dwmac-mdio"; ++ #address-cells = <1>; ++ #size-cells = <0>; ++ ++ rtl8211f: ethernet-phy@1 { ++ compatible = "ethernet-phy-id001c.c916", ++ "ethernet-phy-ieee802.3-c22"; ++ reg = <1>; ++ interrupt-parent = <&gpio3>; ++ interrupts = ; ++ reset-assert-us = <10000>; ++ reset-deassert-us = <30000>; ++ reset-gpios = <&gpio3 RK_PB7 GPIO_ACTIVE_LOW>; ++ }; ++ }; ++}; ++ ++&gpu { ++ mali-supply = <&vdd_gpu>; ++ status = "okay"; ++}; ++ ++&hdmi { ++ ddc-i2c-bus = <&i2c7>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&hdmi_cec>; ++ status = "okay"; ++}; ++ ++&hdmi_sound { ++ status = "okay"; ++}; ++ ++&i2c0 { ++ clock-frequency = <400000>; ++ i2c-scl-rising-time-ns = <160>; ++ i2c-scl-falling-time-ns = <30>; ++ status = "okay"; ++ ++ vdd_cpu_b: regulator@40 { ++ compatible = "silergy,syr827"; ++ reg = <0x40>; ++ fcs,suspend-voltage-selector = <1>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&cpu_b_sleep>; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <712500>; ++ regulator-max-microvolt = <1500000>; ++ regulator-name = "vdd_cpu_b"; ++ regulator-ramp-delay = <1000>; ++ vin-supply = <&vcc3v3_sys>; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ vdd_gpu: regulator@41 { ++ compatible = "silergy,syr828"; ++ reg = <0x41>; ++ fcs,suspend-voltage-selector = <1>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&gpu_sleep>; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <712500>; ++ regulator-max-microvolt = <1500000>; ++ regulator-name = "vdd_gpu"; ++ regulator-ramp-delay = <1000>; ++ vin-supply = <&vcc3v3_sys>; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ rk808: pmic@1b { ++ compatible = "rockchip,rk808"; ++ reg = <0x1b>; ++ clock-output-names = "xin32k", "rtc_clko_wifi"; ++ #clock-cells = <1>; ++ interrupt-parent = <&gpio1>; ++ interrupts = <21 IRQ_TYPE_LEVEL_LOW>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pmic_int_l>; ++ rockchip,system-power-controller; ++ wakeup-source; ++ ++ vcc1-supply = <&vcc3v3_sys>; ++ vcc2-supply = <&vcc3v3_sys>; ++ vcc3-supply = <&vcc3v3_sys>; ++ vcc4-supply = <&vcc3v3_sys>; ++ vcc6-supply = <&vcc3v3_sys>; ++ vcc7-supply = <&vcc3v3_sys>; ++ vcc8-supply = <&vcc3v3_sys>; ++ vcc9-supply = <&vcc3v3_sys>; ++ vcc10-supply = <&vcc3v3_sys>; ++ vcc11-supply = <&vcc3v3_sys>; ++ vcc12-supply = <&vcc3v3_sys>; ++ vddio-supply = <&vcc_3v0>; ++ ++ regulators { ++ vdd_center: DCDC_REG1 { ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <750000>; ++ regulator-max-microvolt = <1350000>; ++ regulator-name = "vdd_center"; ++ regulator-ramp-delay = <6001>; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ vdd_cpu_l: DCDC_REG2 { ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <750000>; ++ regulator-max-microvolt = <1350000>; ++ regulator-name = "vdd_cpu_l"; ++ regulator-ramp-delay = <6001>; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ vcc_ddr: DCDC_REG3 { ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-name = "vcc_ddr"; ++ ++ regulator-state-mem { ++ regulator-on-in-suspend; ++ }; ++ }; ++ ++ vcc_1v8: DCDC_REG4 { ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ regulator-name = "vcc_1v8"; ++ ++ regulator-state-mem { ++ regulator-on-in-suspend; ++ regulator-suspend-microvolt = <1800000>; ++ }; ++ }; ++ ++ vcc1v8_cam: LDO_REG1 { ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ regulator-name = "vcc1v8_cam"; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ vcc3v0_touch: LDO_REG2 { ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <3000000>; ++ regulator-max-microvolt = <3000000>; ++ regulator-name = "vcc3v0_touch"; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ vcc1v8_pmupll: LDO_REG3 { ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ regulator-name = "vcc1v8_pmupll"; ++ ++ regulator-state-mem { ++ regulator-on-in-suspend; ++ regulator-suspend-microvolt = <1800000>; ++ }; ++ }; ++ ++ vcc_sdio: LDO_REG4 { ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-init-microvolt = <3000000>; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <3300000>; ++ regulator-name = "vcc_sdio"; ++ ++ regulator-state-mem { ++ regulator-on-in-suspend; ++ regulator-suspend-microvolt = <3000000>; ++ }; ++ }; ++ ++ vcca3v0_codec: LDO_REG5 { ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <3000000>; ++ regulator-max-microvolt = <3000000>; ++ regulator-name = "vcca3v0_codec"; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ vcc_1v5: LDO_REG6 { ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <1500000>; ++ regulator-max-microvolt = <1500000>; ++ regulator-name = "vcc_1v5"; ++ ++ regulator-state-mem { ++ regulator-on-in-suspend; ++ regulator-suspend-microvolt = <1500000>; ++ }; ++ }; ++ ++ vcca1v8_codec: LDO_REG7 { ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ regulator-name = "vcca1v8_codec"; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ vcc_3v0: LDO_REG8 { ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <3000000>; ++ regulator-max-microvolt = <3000000>; ++ regulator-name = "vcc_3v0"; ++ ++ regulator-state-mem { ++ regulator-on-in-suspend; ++ regulator-suspend-microvolt = <3000000>; ++ }; ++ }; ++ ++ vcc3v3_s3: SWITCH_REG1 { ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-name = "vcc3v3_s3"; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ vcc3v3_s0: SWITCH_REG2 { ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-name = "vcc3v3_s0"; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ }; ++ }; ++}; ++ ++&i2c1 { ++ clock-frequency = <200000>; ++ i2c-scl-rising-time-ns = <150>; ++ i2c-scl-falling-time-ns = <30>; ++ status = "okay"; ++}; ++ ++&i2c2 { ++ status = "okay"; ++}; ++ ++&i2c4 { ++ clock-frequency = <400000>; ++ i2c-scl-rising-time-ns = <160>; ++ i2c-scl-falling-time-ns = <30>; ++ status = "okay"; ++ ++ fusb0: typec-portc@22 { ++ compatible = "fcs,fusb302"; ++ reg = <0x22>; ++ interrupt-parent = <&gpio1>; ++ interrupts = ; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&fusb0_int>; ++ vbus-supply = <&vbus_typec>; ++ }; ++}; ++ ++&i2c7 { ++ status = "okay"; ++}; ++ ++&i2s2 { ++ status = "okay"; ++}; ++ ++&io_domains { ++ bt656-supply = <&vcc_1v8>; ++ audio-supply = <&vcca1v8_codec>; ++ sdmmc-supply = <&vcc_sdio>; ++ gpio1830-supply = <&vcc_3v0>; ++ status = "okay"; ++}; ++ ++&pcie_phy { ++ assigned-clock-parents = <&cru SCLK_PCIEPHY_REF100M>; ++ assigned-clock-rates = <100000000>; ++ assigned-clocks = <&cru SCLK_PCIEPHY_REF>; ++ status = "okay"; ++}; ++ ++&pcie0 { ++ ep-gpios = <&gpio2 RK_PA4 GPIO_ACTIVE_HIGH>; ++ max-link-speed = <2>; ++ num-lanes = <2>; ++ vpcie0v9-supply = <&vcca0v9_s3>; ++ vpcie1v8-supply = <&vcca1v8_s3>; ++ status = "okay"; ++}; ++ ++&pinctrl { ++ fusb30x { ++ fusb0_int: fusb0-int { ++ rockchip,pins = <1 RK_PA2 RK_FUNC_GPIO &pcfg_pull_up>; ++ }; ++ }; ++ ++ gpio-leds { ++ leds_gpio: leds-gpio { ++ rockchip,pins = <0 RK_PB5 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ }; ++ ++ phy { ++ phy_intb: phy-intb { ++ rockchip,pins = <3 RK_PB2 RK_FUNC_GPIO &pcfg_pull_up>; ++ }; ++ ++ phy_rstb: phy-rstb { ++ rockchip,pins = <3 RK_PB7 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ }; ++ ++ pmic { ++ cpu_b_sleep: cpu-b-sleep { ++ rockchip,pins = <1 RK_PC1 RK_FUNC_GPIO &pcfg_pull_down>; ++ }; ++ ++ gpu_sleep: gpu-sleep { ++ rockchip,pins = <1 RK_PB6 RK_FUNC_GPIO &pcfg_pull_down>; ++ }; ++ ++ pmic_int_l: pmic-int-l { ++ rockchip,pins = <1 RK_PC5 RK_FUNC_GPIO &pcfg_pull_up>; ++ }; ++ }; ++ ++ rockchip-key { ++ power_key: power-key { ++ rockchip,pins = <0 RK_PA5 RK_FUNC_GPIO &pcfg_pull_up>; ++ }; ++ }; ++ ++ sdio { ++ bt_host_wake_l: bt-host-wake-l { ++ rockchip,pins = <0 RK_PA4 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ ++ bt_reg_on_h: bt-reg-on-h { ++ /* external pullup to VCC1V8_PMUPLL */ ++ rockchip,pins = <0 RK_PB1 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ ++ bt_wake_l: bt-wake-l { ++ rockchip,pins = <2 RK_PD2 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ ++ wifi_reg_on_h: wifi-reg_on-h { ++ rockchip,pins = <0 RK_PB2 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ }; ++ ++ sdmmc { ++ sdmmc0_det_l: sdmmc0-det-l { ++ rockchip,pins = <0 RK_PA7 RK_FUNC_GPIO &pcfg_pull_up>; ++ }; ++ ++ sdmmc0_pwr_h: sdmmc0-pwr-h { ++ rockchip,pins = <0 RK_PA1 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ }; ++}; ++ ++&pmu_io_domains { ++ pmu1830-supply = <&vcc_3v0>; ++ status = "okay"; ++}; ++ ++&pwm0 { ++ status = "okay"; ++}; ++ ++&pwm1 { ++ status = "okay"; ++}; ++ ++&pwm2 { ++ pinctrl-names = "active"; ++ pinctrl-0 = <&pwm2_pin_pull_down>; ++ status = "okay"; ++}; ++ ++&saradc { ++ vref-supply = <&vcca1v8_s3>; ++ status = "okay"; ++}; ++ ++&sdhci { ++ bus-width = <8>; ++ mmc-hs200-1_8v; ++ non-removable; ++ status = "okay"; ++}; ++ ++&sdio0 { ++ bus-width = <4>; ++ cap-sd-highspeed; ++ cap-sdio-irq; ++ keep-power-in-suspend; ++ mmc-pwrseq = <&sdio_pwrseq>; ++ non-removable; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&sdio0_bus4 &sdio0_cmd &sdio0_clk>; ++ sd-uhs-sdr104; ++ status = "okay"; ++}; ++ ++&sdmmc { ++ bus-width = <4>; ++ cap-sd-highspeed; ++ cap-mmc-highspeed; ++ cd-gpios = <&gpio0 RK_PA7 GPIO_ACTIVE_LOW>; ++ disable-wp; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&sdmmc_bus4 &sdmmc_clk &sdmmc_cmd &sdmmc0_det_l>; ++ sd-uhs-sdr104; ++ vmmc-supply = <&vcc3v0_sd>; ++ vqmmc-supply = <&vcc_sdio>; ++ status = "okay"; ++}; ++ ++&tcphy0 { ++ status = "okay"; ++}; ++ ++&tcphy1 { ++ status = "okay"; ++}; ++ ++&tsadc { ++ /* tshut mode 0:CRU 1:GPIO */ ++ rockchip,hw-tshut-mode = <1>; ++ /* tshut polarity 0:LOW 1:HIGH */ ++ rockchip,hw-tshut-polarity = <1>; ++ status = "okay"; ++}; ++ ++&u2phy0 { ++ status = "okay"; ++}; ++ ++&u2phy0_host { ++ status = "okay"; ++}; ++ ++&u2phy0_otg { ++ status = "okay"; ++}; ++ ++&u2phy1 { ++ status = "okay"; ++}; ++ ++&u2phy1_host { ++ status = "okay"; ++}; ++ ++&u2phy1_otg { ++ status = "okay"; ++}; ++ ++&uart0 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&uart0_xfer &uart0_rts &uart0_cts>; ++ status = "okay"; ++ ++ bluetooth { ++ compatible = "brcm,bcm43438-bt"; ++ clocks = <&rk808 1>; ++ clock-names = "lpo"; ++ device-wakeup-gpios = <&gpio2 RK_PD2 GPIO_ACTIVE_HIGH>; ++ host-wakeup-gpios = <&gpio0 RK_PA4 GPIO_ACTIVE_HIGH>; ++ shutdown-gpios = <&gpio0 RK_PB1 GPIO_ACTIVE_HIGH>; ++ max-speed = <4000000>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&bt_reg_on_h &bt_host_wake_l &bt_wake_l>; ++ vbat-supply = <&vcc3v3_sys>; ++ vddio-supply = <&vcc_1v8>; ++ }; ++}; ++ ++&uart2 { ++ status = "okay"; ++}; ++ ++&usbdrd3_0 { ++ status = "okay"; ++}; ++ ++&usbdrd3_1 { ++ status = "okay"; ++}; ++ ++&usbdrd_dwc3_0 { ++ status = "okay"; ++}; ++ ++&usbdrd_dwc3_1 { ++ dr_mode = "host"; ++ status = "okay"; ++}; ++ ++&usb_host0_ehci { ++ status = "okay"; ++}; ++ ++&usb_host0_ohci { ++ status = "okay"; ++}; ++ ++&usb_host1_ehci { ++ status = "okay"; ++}; ++ ++&usb_host1_ohci { ++ status = "okay"; ++}; ++ ++&vopb { ++ status = "okay"; ++}; ++ ++&vopb_mmu { ++ status = "okay"; ++}; ++ ++&vopl { ++ status = "okay"; ++}; ++ ++&vopl_mmu { ++ status = "okay"; ++}; ++ +--- /dev/null ++++ b/configs/doornet2-rk3399_defconfig +@@ -0,0 +1,66 @@ ++CONFIG_ARM=y ++CONFIG_ARCH_ROCKCHIP=y ++CONFIG_SYS_TEXT_BASE=0x00200000 ++CONFIG_NR_DRAM_BANKS=1 ++CONFIG_ENV_OFFSET=0x3F8000 ++CONFIG_ROCKCHIP_RK3399=y ++CONFIG_TARGET_EVB_RK3399=y ++CONFIG_DEBUG_UART_BASE=0xFF1A0000 ++CONFIG_DEBUG_UART_CLOCK=24000000 ++CONFIG_DEFAULT_DEVICE_TREE="rk3399-doornet2" ++CONFIG_SYS_LOAD_ADDR=0x800800 ++CONFIG_DEBUG_UART=y ++CONFIG_DEFAULT_FDT_FILE="rockchip/rk3399-doornet2.dtb" ++CONFIG_MISC_INIT_R=y ++# CONFIG_SPL_RAW_IMAGE_SUPPORT is not set ++CONFIG_SPL_STACK_R=y ++CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN=0x10000 ++CONFIG_TPL=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_OF_SPL_REMOVE_PROPS="pinctrl-0 pinctrl-names clock-names interrupt-parent assigned-clocks assigned-clock-rates assigned-clock-parents" ++CONFIG_ENV_IS_IN_MMC=y ++CONFIG_SYS_RELOC_GD_ENV_ADDR=y ++CONFIG_SYS_MMC_ENV_DEV=1 ++CONFIG_ROCKCHIP_GPIO=y ++CONFIG_SYS_I2C_ROCKCHIP=y ++CONFIG_MMC_DW=y ++CONFIG_MMC_DW_ROCKCHIP=y ++CONFIG_MMC_SDHCI=y ++CONFIG_MMC_SDHCI_ROCKCHIP=y ++CONFIG_DM_ETH=y ++CONFIG_ETH_DESIGNWARE=y ++CONFIG_GMAC_ROCKCHIP=y ++CONFIG_PMIC_RK8XX=y ++CONFIG_REGULATOR_PWM=y ++CONFIG_REGULATOR_RK8XX=y ++CONFIG_PWM_ROCKCHIP=y ++CONFIG_RAM_RK3399_LPDDR4=y ++CONFIG_BAUDRATE=1500000 ++CONFIG_DEBUG_UART_SHIFT=2 ++CONFIG_SYSRESET=y ++CONFIG_USB=y ++CONFIG_USB_XHCI_HCD=y ++CONFIG_USB_XHCI_DWC3=y ++CONFIG_SYS_USB_OHCI_MAX_ROOT_PORTS=2 ++CONFIG_USB_EHCI_HCD=y ++CONFIG_USB_EHCI_GENERIC=y ++CONFIG_USB_KEYBOARD=y ++CONFIG_USB_HOST_ETHER=y ++CONFIG_USB_ETHER_ASIX=y ++CONFIG_USB_ETHER_ASIX88179=y ++CONFIG_USB_ETHER_MCS7830=y ++CONFIG_USB_ETHER_RTL8152=y ++CONFIG_USB_ETHER_SMSC95XX=y ++CONFIG_DM_VIDEO=y ++CONFIG_DISPLAY=y ++CONFIG_VIDEO_ROCKCHIP=y ++CONFIG_DISPLAY_ROCKCHIP_HDMI=y ++CONFIG_SPL_TINY_MEMSET=y ++CONFIG_ERRNO_STR=y ++ diff --git a/package/boot/uboot-rockchip/patches/307-rockchip-rk3568-Add-support-for-ezpro_mrkaio-m68s.patch b/package/boot/uboot-rockchip/patches/307-rockchip-rk3568-Add-support-for-ezpro_mrkaio-m68s.patch new file mode 100644 index 000000000..f780ecb67 --- /dev/null +++ b/package/boot/uboot-rockchip/patches/307-rockchip-rk3568-Add-support-for-ezpro_mrkaio-m68s.patch @@ -0,0 +1,406 @@ +--- a/arch/arm/dts/Makefile ++++ b/arch/arm/dts/Makefile +@@ -171,6 +171,7 @@ dtb-$(CONFIG_ROCKCHIP_RK3399) += \ + dtb-$(CONFIG_ROCKCHIP_RK3568) += \ + rk3568-bpi-r2-pro.dtb \ + rk3568-evb.dtb \ ++ rk3568-mrkaio-m68s.dtb \ + rk3568-nanopi-r5s.dtb \ + rk3566-quartz64-a.dtb \ + rk3568-rock-3a.dtb +--- /dev/null ++++ b/arch/arm/dts/rk3568-mrkaio-m68s-u-boot.dtsi +@@ -0,0 +1,21 @@ ++// SPDX-License-Identifier: (GPL-2.0+ OR MIT) ++ ++#include "rk3568-u-boot.dtsi" ++ ++/ { ++ chosen { ++ stdout-path = &uart2; ++ u-boot,spl-boot-order = "same-as-spl", &sdmmc0, &sdhci; ++ }; ++}; ++ ++&sdmmc0 { ++ bus-width = <4>; ++ u-boot,spl-fifo-mode; ++}; ++ ++&uart2 { ++ u-boot,dm-spl; ++ clock-frequency = <24000000>; ++ status = "okay"; ++}; +--- /dev/null ++++ b/arch/arm/dts/rk3568-mrkaio-m68s.dts +@@ -0,0 +1,268 @@ ++// SPDX-License-Identifier: (GPL-2.0+ OR MIT) ++ ++#include "rk3568-evb.dts" ++ ++/ { ++ model = "EZPRO Mrkaio M68S"; ++ compatible = "ezpro,mrkaio-m68s", "rockchip,rk3568"; ++ ++ aliases { ++ mmc0 = &sdmmc0; ++ mmc1 = &sdhci; ++ }; ++}; ++ ++&cpu0 { ++ cpu-supply = <&vdd_cpu>; ++}; ++ ++&cpu1 { ++ cpu-supply = <&vdd_cpu>; ++}; ++ ++&cpu2 { ++ cpu-supply = <&vdd_cpu>; ++}; ++ ++&cpu3 { ++ cpu-supply = <&vdd_cpu>; ++}; ++ ++&i2c0 { ++ status = "okay"; ++ ++ vdd_cpu: regulator@1c { ++ compatible = "tcs,tcs4525"; ++ reg = <0x1c>; ++ fcs,suspend-voltage-selector = <1>; ++ regulator-name = "vdd_cpu"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <712500>; ++ regulator-max-microvolt = <1150000>; ++ regulator-ramp-delay = <2300>; ++ vin-supply = <&vcc5v0_sys>; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ rk809: pmic@20 { ++ compatible = "rockchip,rk809"; ++ reg = <0x20>; ++ interrupt-parent = <&gpio0>; ++ interrupts = ; ++ #clock-cells = <1>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pmic_int>; ++ rockchip,system-power-controller; ++ ++ vcc1-supply = <&vcc3v3_sys>; ++ vcc2-supply = <&vcc3v3_sys>; ++ vcc3-supply = <&vcc3v3_sys>; ++ vcc4-supply = <&vcc3v3_sys>; ++ vcc5-supply = <&vcc3v3_sys>; ++ vcc6-supply = <&vcc3v3_sys>; ++ vcc7-supply = <&vcc3v3_sys>; ++ vcc8-supply = <&vcc3v3_sys>; ++ vcc9-supply = <&vcc3v3_sys>; ++ wakeup-source; ++ ++ regulators { ++ vdd_logic: DCDC_REG1 { ++ regulator-name = "vdd_logic"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-init-microvolt = <900000>; ++ regulator-initial-mode = <0x2>; ++ regulator-min-microvolt = <500000>; ++ regulator-max-microvolt = <1350000>; ++ regulator-ramp-delay = <6001>; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ vdd_gpu: DCDC_REG2 { ++ regulator-name = "vdd_gpu"; ++ regulator-always-on; ++ regulator-init-microvolt = <900000>; ++ regulator-initial-mode = <0x2>; ++ regulator-min-microvolt = <500000>; ++ regulator-max-microvolt = <1350000>; ++ regulator-ramp-delay = <6001>; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ vcc_ddr: DCDC_REG3 { ++ regulator-name = "vcc_ddr"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-initial-mode = <0x2>; ++ ++ regulator-state-mem { ++ regulator-on-in-suspend; ++ }; ++ }; ++ ++ vdd_npu: DCDC_REG4 { ++ regulator-name = "vdd_npu"; ++ regulator-init-microvolt = <900000>; ++ regulator-initial-mode = <0x2>; ++ regulator-min-microvolt = <500000>; ++ regulator-max-microvolt = <1350000>; ++ regulator-ramp-delay = <6001>; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ vcc_1v8: DCDC_REG5 { ++ regulator-name = "vcc_1v8"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ vdda0v9_image: LDO_REG1 { ++ regulator-name = "vdda0v9_image"; ++ regulator-min-microvolt = <900000>; ++ regulator-max-microvolt = <900000>; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ vdda_0v9: LDO_REG2 { ++ regulator-name = "vdda_0v9"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <900000>; ++ regulator-max-microvolt = <900000>; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ vdda0v9_pmu: LDO_REG3 { ++ regulator-name = "vdda0v9_pmu"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <900000>; ++ regulator-max-microvolt = <900000>; ++ ++ regulator-state-mem { ++ regulator-on-in-suspend; ++ regulator-suspend-microvolt = <900000>; ++ }; ++ }; ++ ++ vccio_acodec: LDO_REG4 { ++ regulator-name = "vccio_acodec"; ++ regulator-min-microvolt = <3300000>; ++ regulator-max-microvolt = <3300000>; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ vccio_sd: LDO_REG5 { ++ regulator-name = "vccio_sd"; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <3300000>; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ vcc3v3_pmu: LDO_REG6 { ++ regulator-name = "vcc3v3_pmu"; ++ 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>; ++ }; ++ }; ++ ++ vcca_1v8: LDO_REG7 { ++ regulator-name = "vcca_1v8"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ vcca1v8_pmu: LDO_REG8 { ++ regulator-name = "vcca1v8_pmu"; ++ 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>; ++ }; ++ }; ++ ++ vcca1v8_image: LDO_REG9 { ++ regulator-name = "vcca1v8_image"; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ vcc_3v3: SWITCH_REG1 { ++ regulator-name = "vcc_3v3"; ++ regulator-always-on; ++ regulator-boot-on; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ vcc3v3_sd: SWITCH_REG2 { ++ regulator-name = "vcc3v3_sd"; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ }; ++ }; ++}; ++ ++&pinctrl { ++ pmic { ++ pmic_int: pmic_int { ++ rockchip,pins = <0 RK_PA3 RK_FUNC_GPIO &pcfg_pull_up>; ++ }; ++ }; ++}; +--- /dev/null ++++ b/configs/mrkaio-m68s-rk3568_defconfig +@@ -0,0 +1,98 @@ ++CONFIG_ARM=y ++CONFIG_SKIP_LOWLEVEL_INIT=y ++CONFIG_ARCH_ROCKCHIP=y ++CONFIG_SYS_TEXT_BASE=0x00a00000 ++CONFIG_SPL_LIBCOMMON_SUPPORT=y ++CONFIG_SPL_LIBGENERIC_SUPPORT=y ++CONFIG_NR_DRAM_BANKS=2 ++CONFIG_DEFAULT_DEVICE_TREE="rk3568-mrkaio-m68s" ++CONFIG_ROCKCHIP_RK3568=y ++CONFIG_SPL_ROCKCHIP_BACK_TO_BROM=y ++CONFIG_SPL_ROCKCHIP_COMMON_BOARD=y ++CONFIG_SPL_MMC=y ++CONFIG_SPL_SERIAL=y ++CONFIG_SPL_STACK_R_ADDR=0x600000 ++CONFIG_TARGET_EVB_RK3568=y ++CONFIG_DEBUG_UART_BASE=0xFE660000 ++CONFIG_DEBUG_UART_CLOCK=24000000 ++CONFIG_DEBUG_UART=y ++CONFIG_SYS_LOAD_ADDR=0xc00800 ++CONFIG_API=y ++CONFIG_FIT=y ++CONFIG_FIT_VERBOSE=y ++CONFIG_SPL_LOAD_FIT=y ++CONFIG_OF_SYSTEM_SETUP=y ++CONFIG_DEFAULT_FDT_FILE="rockchip/rk3568-mrkaio-m68s.dtb" ++# CONFIG_SYS_DEVICE_NULLDEV is not set ++CONFIG_SYS_USB_OHCI_MAX_ROOT_PORTS=2 ++# CONFIG_DISPLAY_CPUINFO is not set ++CONFIG_DISPLAY_BOARDINFO_LATE=y ++# CONFIG_SPL_RAW_IMAGE_SUPPORT is not set ++CONFIG_SPL_STACK_R=y ++CONFIG_SPL_SEPARATE_BSS=y ++CONFIG_SPL_ATF=y ++CONFIG_SPL_ATF_LOAD_IMAGE_V2=y ++CONFIG_CMD_BIND=y ++CONFIG_CMD_CLK=y ++CONFIG_CMD_GPIO=y ++CONFIG_CMD_GPT=y ++CONFIG_CMD_I2C=y ++CONFIG_CMD_MMC=y ++CONFIG_CMD_USB=y ++# CONFIG_CMD_SETEXPR is not set ++CONFIG_CMD_PMIC=y ++CONFIG_CMD_REGULATOR=y ++# CONFIG_SPL_DOS_PARTITION is not set ++CONFIG_SPL_OF_CONTROL=y ++CONFIG_OF_LIVE=y ++CONFIG_NET_RANDOM_ETHADDR=y ++CONFIG_SPL_DM_WARN=y ++CONFIG_SPL_REGMAP=y ++CONFIG_SPL_SYSCON=y ++CONFIG_SPL_CLK=y ++CONFIG_ROCKCHIP_GPIO=y ++CONFIG_ROCKCHIP_GPIO_V2=y ++CONFIG_SYS_I2C_ROCKCHIP=y ++CONFIG_MISC=y ++CONFIG_MMC_HS200_SUPPORT=y ++CONFIG_SPL_MMC_HS200_SUPPORT=y ++CONFIG_MMC_DW=y ++CONFIG_MMC_DW_ROCKCHIP=y ++CONFIG_MMC_SDHCI=y ++CONFIG_MMC_SDHCI_SDMA=y ++CONFIG_MMC_SDHCI_ROCKCHIP=y ++CONFIG_DM_ETH=y ++CONFIG_ETH_DESIGNWARE=y ++CONFIG_GMAC_ROCKCHIP=y ++CONFIG_POWER_DOMAIN=y ++CONFIG_DM_PMIC=y ++CONFIG_PMIC_RK8XX=y ++CONFIG_SPL_PMIC_RK8XX=y ++CONFIG_REGULATOR_PWM=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_SPL_DM_REGULATOR_FIXED=y ++CONFIG_DM_REGULATOR_GPIO=y ++CONFIG_REGULATOR_RK8XX=y ++CONFIG_PWM_ROCKCHIP=y ++CONFIG_SPL_RAM=y ++CONFIG_DM_RESET=y ++CONFIG_BAUDRATE=1500000 ++CONFIG_DEBUG_UART_SHIFT=2 ++CONFIG_SYSRESET=y ++CONFIG_SYSRESET_PSCI=y ++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_DWC3=y ++CONFIG_USB_DWC3_GENERIC=y ++CONFIG_ROCKCHIP_USB2_PHY=y ++CONFIG_USB_KEYBOARD=y ++CONFIG_USB_HOST_ETHER=y ++CONFIG_USB_ETHER_LAN75XX=y ++CONFIG_USB_ETHER_LAN78XX=y ++CONFIG_USB_ETHER_SMSC95XX=y ++CONFIG_ERRNO_STR=y diff --git a/package/boot/uboot-rockchip/patches/308-rockchip-rk3568-Add-support-for-hinlink-opc-h68k.patch b/package/boot/uboot-rockchip/patches/308-rockchip-rk3568-Add-support-for-hinlink-opc-h68k.patch new file mode 100644 index 000000000..69a685d34 --- /dev/null +++ b/package/boot/uboot-rockchip/patches/308-rockchip-rk3568-Add-support-for-hinlink-opc-h68k.patch @@ -0,0 +1,415 @@ +--- a/arch/arm/dts/Makefile ++++ b/arch/arm/dts/Makefile +@@ -171,6 +171,7 @@ dtb-$(CONFIG_ROCKCHIP_RK3399) += \ + dtb-$(CONFIG_ROCKCHIP_RK3568) += \ + rk3568-bpi-r2-pro.dtb \ + rk3568-evb.dtb \ ++ rk3568-opc-h68k.dtb \ + rk3568-mrkaio-m68s.dtb \ + rk3568-nanopi-r5s.dtb \ + rk3566-quartz64-a.dtb \ +--- /dev/null ++++ b/arch/arm/dts/rk3568-opc-h68k-u-boot.dtsi +@@ -0,0 +1,21 @@ ++// SPDX-License-Identifier: (GPL-2.0+ OR MIT) ++ ++#include "rk3568-u-boot.dtsi" ++ ++/ { ++ chosen { ++ stdout-path = &uart2; ++ u-boot,spl-boot-order = "same-as-spl", &sdmmc0, &sdhci; ++ }; ++}; ++ ++&sdmmc0 { ++ bus-width = <4>; ++ u-boot,spl-fifo-mode; ++}; ++ ++&uart2 { ++ u-boot,dm-spl; ++ clock-frequency = <24000000>; ++ status = "okay"; ++}; +--- /dev/null ++++ b/arch/arm/dts/rk3568-opc-h68k.dts +@@ -0,0 +1,277 @@ ++// SPDX-License-Identifier: (GPL-2.0+ OR MIT) ++ ++#include "rk3568-evb.dts" ++ ++/ { ++ model = "HINLINK OPC-H68K Board"; ++ compatible = "hinlink,opc-h68k", "rockchip,rk3568"; ++ ++ aliases { ++ mmc0 = &sdmmc0; ++ mmc1 = &sdhci; ++ }; ++}; ++ ++&cpu0 { ++ cpu-supply = <&vdd_cpu>; ++}; ++ ++&cpu1 { ++ cpu-supply = <&vdd_cpu>; ++}; ++ ++&cpu2 { ++ cpu-supply = <&vdd_cpu>; ++}; ++ ++&cpu3 { ++ cpu-supply = <&vdd_cpu>; ++}; ++ ++&i2c0 { ++ status = "okay"; ++ ++ vdd_cpu: regulator@1c { ++ compatible = "tcs,tcs4525"; ++ reg = <0x1c>; ++ fcs,suspend-voltage-selector = <1>; ++ regulator-name = "vdd_cpu"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <800000>; ++ regulator-max-microvolt = <1150000>; ++ regulator-ramp-delay = <2300>; ++ vin-supply = <&vcc5v0_sys>; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ rk809: pmic@20 { ++ compatible = "rockchip,rk809"; ++ reg = <0x20>; ++ interrupt-parent = <&gpio0>; ++ interrupts = ; ++ assigned-clocks = <&cru I2S1_MCLKOUT_TX>; ++ assigned-clock-parents = <&cru CLK_I2S1_8CH_TX>; ++ #clock-cells = <1>; ++ clock-names = "mclk"; ++ clocks = <&cru I2S1_MCLKOUT_TX>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pmic_int>, <&i2s1m0_mclk>; ++ rockchip,system-power-controller; ++ #sound-dai-cells = <0>; ++ vcc1-supply = <&vcc3v3_sys>; ++ vcc2-supply = <&vcc3v3_sys>; ++ vcc3-supply = <&vcc3v3_sys>; ++ vcc4-supply = <&vcc3v3_sys>; ++ vcc5-supply = <&vcc3v3_sys>; ++ vcc6-supply = <&vcc3v3_sys>; ++ vcc7-supply = <&vcc3v3_sys>; ++ vcc8-supply = <&vcc3v3_sys>; ++ vcc9-supply = <&vcc3v3_sys>; ++ wakeup-source; ++ ++ regulators { ++ vdd_logic: DCDC_REG1 { ++ regulator-name = "vdd_logic"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-init-microvolt = <900000>; ++ regulator-initial-mode = <0x2>; ++ regulator-min-microvolt = <500000>; ++ regulator-max-microvolt = <1350000>; ++ regulator-ramp-delay = <6001>; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ vdd_gpu: DCDC_REG2 { ++ regulator-name = "vdd_gpu"; ++ regulator-always-on; ++ regulator-init-microvolt = <900000>; ++ regulator-initial-mode = <0x2>; ++ regulator-min-microvolt = <500000>; ++ regulator-max-microvolt = <1350000>; ++ regulator-ramp-delay = <6001>; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ vcc_ddr: DCDC_REG3 { ++ regulator-name = "vcc_ddr"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-initial-mode = <0x2>; ++ ++ regulator-state-mem { ++ regulator-on-in-suspend; ++ }; ++ }; ++ ++ vdd_npu: DCDC_REG4 { ++ regulator-name = "vdd_npu"; ++ regulator-init-microvolt = <900000>; ++ regulator-initial-mode = <0x2>; ++ regulator-min-microvolt = <500000>; ++ regulator-max-microvolt = <1350000>; ++ regulator-ramp-delay = <6001>; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ vcc_1v8: DCDC_REG5 { ++ regulator-name = "vcc_1v8"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ vdda0v9_image: LDO_REG1 { ++ regulator-name = "vdda0v9_image"; ++ regulator-min-microvolt = <900000>; ++ regulator-max-microvolt = <900000>; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ vdda_0v9: LDO_REG2 { ++ regulator-name = "vdda_0v9"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <900000>; ++ regulator-max-microvolt = <900000>; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ vdda0v9_pmu: LDO_REG3 { ++ regulator-name = "vdda0v9_pmu"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <900000>; ++ regulator-max-microvolt = <900000>; ++ ++ regulator-state-mem { ++ regulator-on-in-suspend; ++ regulator-suspend-microvolt = <900000>; ++ }; ++ }; ++ ++ vccio_acodec: LDO_REG4 { ++ regulator-name = "vccio_acodec"; ++ regulator-always-on; ++ regulator-min-microvolt = <3300000>; ++ regulator-max-microvolt = <3300000>; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ vccio_sd: LDO_REG5 { ++ regulator-name = "vccio_sd"; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <3300000>; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ vcc3v3_pmu: LDO_REG6 { ++ regulator-name = "vcc3v3_pmu"; ++ 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>; ++ }; ++ }; ++ ++ vcca_1v8: LDO_REG7 { ++ regulator-name = "vcca_1v8"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ vcca1v8_pmu: LDO_REG8 { ++ regulator-name = "vcca1v8_pmu"; ++ 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>; ++ }; ++ }; ++ ++ vcca1v8_image: LDO_REG9 { ++ regulator-name = "vcca1v8_image"; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ vcc_3v3: SWITCH_REG1 { ++ regulator-name = "vcc_3v3"; ++ regulator-always-on; ++ regulator-boot-on; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ vcc3v3_sd: SWITCH_REG2 { ++ regulator-name = "vcc3v3_sd"; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ }; ++ ++ codec { ++ mic-in-differential; ++ }; ++ }; ++}; ++ ++&pinctrl { ++ pmic { ++ pmic_int: pmic_int { ++ rockchip,pins = <0 RK_PA3 RK_FUNC_GPIO &pcfg_pull_up>; ++ }; ++ }; ++}; +--- /dev/null ++++ b/configs/opc-h68k-rk3568_defconfig +@@ -0,0 +1,98 @@ ++CONFIG_ARM=y ++CONFIG_SKIP_LOWLEVEL_INIT=y ++CONFIG_ARCH_ROCKCHIP=y ++CONFIG_SYS_TEXT_BASE=0x00a00000 ++CONFIG_SPL_LIBCOMMON_SUPPORT=y ++CONFIG_SPL_LIBGENERIC_SUPPORT=y ++CONFIG_NR_DRAM_BANKS=2 ++CONFIG_DEFAULT_DEVICE_TREE="rk3568-opc-h68k" ++CONFIG_ROCKCHIP_RK3568=y ++CONFIG_SPL_ROCKCHIP_BACK_TO_BROM=y ++CONFIG_SPL_ROCKCHIP_COMMON_BOARD=y ++CONFIG_SPL_MMC=y ++CONFIG_SPL_SERIAL=y ++CONFIG_SPL_STACK_R_ADDR=0x600000 ++CONFIG_TARGET_EVB_RK3568=y ++CONFIG_DEBUG_UART_BASE=0xFE660000 ++CONFIG_DEBUG_UART_CLOCK=24000000 ++CONFIG_DEBUG_UART=y ++CONFIG_SYS_LOAD_ADDR=0xc00800 ++CONFIG_API=y ++CONFIG_FIT=y ++CONFIG_FIT_VERBOSE=y ++CONFIG_SPL_LOAD_FIT=y ++CONFIG_OF_SYSTEM_SETUP=y ++CONFIG_DEFAULT_FDT_FILE="rockchip/rk3568-opc-h68k.dtb" ++# CONFIG_SYS_DEVICE_NULLDEV is not set ++CONFIG_SYS_USB_OHCI_MAX_ROOT_PORTS=2 ++# CONFIG_DISPLAY_CPUINFO is not set ++CONFIG_DISPLAY_BOARDINFO_LATE=y ++# CONFIG_SPL_RAW_IMAGE_SUPPORT is not set ++CONFIG_SPL_STACK_R=y ++CONFIG_SPL_SEPARATE_BSS=y ++CONFIG_SPL_ATF=y ++CONFIG_SPL_ATF_LOAD_IMAGE_V2=y ++CONFIG_CMD_BIND=y ++CONFIG_CMD_CLK=y ++CONFIG_CMD_GPIO=y ++CONFIG_CMD_GPT=y ++CONFIG_CMD_I2C=y ++CONFIG_CMD_MMC=y ++CONFIG_CMD_USB=y ++# CONFIG_CMD_SETEXPR is not set ++CONFIG_CMD_PMIC=y ++CONFIG_CMD_REGULATOR=y ++# CONFIG_SPL_DOS_PARTITION is not set ++CONFIG_SPL_OF_CONTROL=y ++CONFIG_OF_LIVE=y ++CONFIG_NET_RANDOM_ETHADDR=y ++CONFIG_SPL_DM_WARN=y ++CONFIG_SPL_REGMAP=y ++CONFIG_SPL_SYSCON=y ++CONFIG_SPL_CLK=y ++CONFIG_ROCKCHIP_GPIO=y ++CONFIG_ROCKCHIP_GPIO_V2=y ++CONFIG_SYS_I2C_ROCKCHIP=y ++CONFIG_MISC=y ++CONFIG_MMC_HS200_SUPPORT=y ++CONFIG_SPL_MMC_HS200_SUPPORT=y ++CONFIG_MMC_DW=y ++CONFIG_MMC_DW_ROCKCHIP=y ++CONFIG_MMC_SDHCI=y ++CONFIG_MMC_SDHCI_SDMA=y ++CONFIG_MMC_SDHCI_ROCKCHIP=y ++CONFIG_DM_ETH=y ++CONFIG_ETH_DESIGNWARE=y ++CONFIG_GMAC_ROCKCHIP=y ++CONFIG_POWER_DOMAIN=y ++CONFIG_DM_PMIC=y ++CONFIG_PMIC_RK8XX=y ++CONFIG_SPL_PMIC_RK8XX=y ++CONFIG_REGULATOR_PWM=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_SPL_DM_REGULATOR_FIXED=y ++CONFIG_DM_REGULATOR_GPIO=y ++CONFIG_REGULATOR_RK8XX=y ++CONFIG_PWM_ROCKCHIP=y ++CONFIG_SPL_RAM=y ++CONFIG_DM_RESET=y ++CONFIG_BAUDRATE=1500000 ++CONFIG_DEBUG_UART_SHIFT=2 ++CONFIG_SYSRESET=y ++CONFIG_SYSRESET_PSCI=y ++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_DWC3=y ++CONFIG_USB_DWC3_GENERIC=y ++CONFIG_ROCKCHIP_USB2_PHY=y ++CONFIG_USB_KEYBOARD=y ++CONFIG_USB_HOST_ETHER=y ++CONFIG_USB_ETHER_LAN75XX=y ++CONFIG_USB_ETHER_LAN78XX=y ++CONFIG_USB_ETHER_SMSC95XX=y ++CONFIG_ERRNO_STR=y diff --git a/package/boot/uboot-rockchip/patches/309-rockchip-rk3568-Add-support-for-Station-P2.patch b/package/boot/uboot-rockchip/patches/309-rockchip-rk3568-Add-support-for-Station-P2.patch new file mode 100644 index 000000000..3df47445f --- /dev/null +++ b/package/boot/uboot-rockchip/patches/309-rockchip-rk3568-Add-support-for-Station-P2.patch @@ -0,0 +1,77 @@ +From 18e3719c5d5b1573c29d137c1244ca23277750b2 Mon Sep 17 00:00:00 2001 +From: huangjf +Date: Thu, 7 Apr 2022 16:22:56 +0800 +Subject: [PATCH] rockchip: rk3568: Add support for Station P2 + +--- + configs/station-p2-rk3568_defconfig | 59 +++++++++++++++++++++++++++++ + 1 file changed, 59 insertions(+) + create mode 100644 configs/station-p2-rk3568_defconfig + +diff --git a/configs/station-p2-rk3568_defconfig b/configs/station-p2-rk3568_defconfig +new file mode 100644 +index 0000000000..435be99edf +--- /dev/null ++++ b/configs/station-p2-rk3568_defconfig +@@ -0,0 +1,59 @@ ++CONFIG_ARM=y ++CONFIG_SKIP_LOWLEVEL_INIT=y ++CONFIG_ARCH_ROCKCHIP=y ++CONFIG_SYS_TEXT_BASE=0x00a00000 ++CONFIG_SPL_LIBCOMMON_SUPPORT=y ++CONFIG_SPL_LIBGENERIC_SUPPORT=y ++CONFIG_NR_DRAM_BANKS=2 ++CONFIG_DEFAULT_DEVICE_TREE="rk3568-evb" ++CONFIG_ROCKCHIP_RK3568=y ++CONFIG_SPL_ROCKCHIP_BACK_TO_BROM=y ++CONFIG_SPL_ROCKCHIP_COMMON_BOARD=y ++CONFIG_SPL_MMC=y ++CONFIG_SPL_SERIAL=y ++CONFIG_SPL_STACK_R_ADDR=0x600000 ++CONFIG_TARGET_EVB_RK3568=y ++CONFIG_DEBUG_UART_BASE=0xFE660000 ++CONFIG_DEBUG_UART_CLOCK=24000000 ++CONFIG_DEBUG_UART=y ++CONFIG_SYS_LOAD_ADDR=0xc00800 ++CONFIG_FIT=y ++CONFIG_FIT_VERBOSE=y ++CONFIG_SPL_LOAD_FIT=y ++CONFIG_DEFAULT_FDT_FILE="rockchip/rk3568-evb.dtb" ++# CONFIG_DISPLAY_CPUINFO is not set ++CONFIG_DISPLAY_BOARDINFO_LATE=y ++# CONFIG_SPL_RAW_IMAGE_SUPPORT is not set ++CONFIG_SPL_STACK_R=y ++CONFIG_SPL_SEPARATE_BSS=y ++CONFIG_SPL_ATF=y ++CONFIG_CMD_GPT=y ++CONFIG_CMD_MMC=y ++# CONFIG_CMD_SETEXPR is not set ++# CONFIG_SPL_DOS_PARTITION is not set ++CONFIG_SPL_OF_CONTROL=y ++CONFIG_OF_LIVE=y ++CONFIG_NET_RANDOM_ETHADDR=y ++CONFIG_SPL_REGMAP=y ++CONFIG_SPL_SYSCON=y ++CONFIG_SPL_CLK=y ++CONFIG_ROCKCHIP_GPIO=y ++CONFIG_SYS_I2C_ROCKCHIP=y ++CONFIG_MISC=y ++CONFIG_SUPPORT_EMMC_RPMB=y ++CONFIG_MMC_DW=y ++CONFIG_MMC_DW_ROCKCHIP=y ++CONFIG_MMC_SDHCI=y ++CONFIG_MMC_SDHCI_SDMA=y ++CONFIG_MMC_SDHCI_ROCKCHIP=y ++CONFIG_DM_ETH=y ++CONFIG_ETH_DESIGNWARE=y ++CONFIG_GMAC_ROCKCHIP=y ++CONFIG_REGULATOR_PWM=y ++CONFIG_PWM_ROCKCHIP=y ++CONFIG_SPL_RAM=y ++CONFIG_DM_RESET=y ++CONFIG_BAUDRATE=1500000 ++CONFIG_DEBUG_UART_SHIFT=2 ++CONFIG_SYSRESET=y ++CONFIG_ERRNO_STR=y +-- +2.20.1 diff --git a/package/boot/uboot-rockchip/patches/307-rockchip-rk3399-split-doornet2-rk3399-out-of-evb_rk.patch b/package/boot/uboot-rockchip/patches/310-rockchip-rk3399-split-doornet2-rk3399-out-of-evb_rk.patch similarity index 95% rename from package/boot/uboot-rockchip/patches/307-rockchip-rk3399-split-doornet2-rk3399-out-of-evb_rk.patch rename to package/boot/uboot-rockchip/patches/310-rockchip-rk3399-split-doornet2-rk3399-out-of-evb_rk.patch index 4b74d36e2..13d064ce3 100644 --- a/package/boot/uboot-rockchip/patches/307-rockchip-rk3399-split-doornet2-rk3399-out-of-evb_rk.patch +++ b/package/boot/uboot-rockchip/patches/310-rockchip-rk3399-split-doornet2-rk3399-out-of-evb_rk.patch @@ -1,696 +1,696 @@ ---- a/arch/arm/mach-rockchip/rk3399/Kconfig -+++ b/arch/arm/mach-rockchip/rk3399/Kconfig -@@ -109,6 +109,21 @@ config TARGET_ROC_PC_RK3399 - * wide voltage input(5V-15V), dual cell battery - * Wifi/BT accessible via expansion board M.2 - -+config TARGET_DOORNET2_RK3399 -+ bool "EmbedFire DoorNet2 board" -+ help -+ DoorNet2 is SBC produced by EmbedFire. Key features: -+ -+ * Rockchip RK3399 -+ * 1-4GB DDR3 or LPDDR4 -+ * SD card slot and 8-32GB eMMC -+ * Gigabit ethernet -+ * PCIe -+ * USB 3.0, 2.0 -+ * USB Type C power -+ * GPIO expansion ports -+ * USB 2.0 Wifi module -+ - endchoice - - config ROCKCHIP_BOOT_MODE_REG -@@ -151,6 +166,7 @@ config SYS_BOOTCOUNT_ADDR - - endif # BOOTCOUNT_LIMIT - -+source "board/embedfire/doornet2/Kconfig" - source "board/firefly/roc-pc-rk3399/Kconfig" - source "board/google/gru/Kconfig" - source "board/pine64/pinebook-pro-rk3399/Kconfig" ---- /dev/null -+++ b/board/embedfire/doornet2/Kconfig -@@ -0,0 +1,15 @@ -+if TARGET_DOORNET2_RK3399 -+ -+config SYS_BOARD -+ default "doornet2" -+ -+config SYS_VENDOR -+ default "embedfire" -+ -+config SYS_CONFIG_NAME -+ default "doornet2" -+ -+config BOARD_SPECIFIC_OPTIONS -+ def_bool y -+ -+endif ---- /dev/null -+++ b/board/embedfire/doornet2/Makefile -@@ -0,0 +1,6 @@ -+# -+# SPDX-License-Identifier: GPL-2.0+ -+# -+ -+obj-y += doornet2.o hwrev.o -+ ---- /dev/null -+++ b/board/embedfire/doornet2/doornet2.c -@@ -0,0 +1,146 @@ -+// SPDX-License-Identifier: GPL-2.0+ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include "hwrev.h" -+ -+#ifdef CONFIG_MISC_INIT_R -+static void setup_iodomain(void) -+{ -+ struct rk3399_grf_regs *grf = -+ syscon_get_first_range(ROCKCHIP_SYSCON_GRF); -+ -+ /* BT565 and AUDIO is in 1.8v domain */ -+ rk_setreg(&grf->io_vsel, BIT(0) | BIT(1)); -+} -+ -+static int __maybe_unused mac_read_from_generic_eeprom(u8 *addr) -+{ -+ struct udevice *i2c_dev; -+ int ret; -+ -+ /* Microchip 24AA02xxx EEPROMs with EUI-48 Node Identity */ -+ ret = i2c_get_chip_for_busnum(2, 0x51, 1, &i2c_dev); -+ if (!ret) -+ ret = dm_i2c_read(i2c_dev, 0xfa, addr, 6); -+ -+ return ret; -+} -+ -+static void setup_macaddr(void) -+{ -+#if CONFIG_IS_ENABLED(CMD_NET) -+ int ret; -+ const char *cpuid = env_get("cpuid#"); -+ u8 hash[SHA256_SUM_LEN]; -+ int size = sizeof(hash); -+ u8 mac_addr[6]; -+ int from_eeprom = 0; -+ int lockdown = 0; -+ -+#ifndef CONFIG_ENV_IS_NOWHERE -+ lockdown = env_get_yesno("lockdown") == 1; -+#endif -+ if (lockdown && env_get("ethaddr")) -+ return; -+ -+ ret = mac_read_from_generic_eeprom(mac_addr); -+ if (!ret && is_valid_ethaddr(mac_addr)) { -+ eth_env_set_enetaddr("ethaddr", mac_addr); -+ from_eeprom = 1; -+ } -+ -+ if (!cpuid) { -+ debug("%s: could not retrieve 'cpuid#'\n", __func__); -+ return; -+ } -+ -+ ret = hash_block("sha256", (void *)cpuid, strlen(cpuid), hash, &size); -+ if (ret) { -+ debug("%s: failed to calculate SHA256\n", __func__); -+ return; -+ } -+ -+ /* Copy 6 bytes of the hash to base the MAC address on */ -+ memcpy(mac_addr, hash, 6); -+ -+ /* Make this a valid MAC address and set it */ -+ mac_addr[0] &= 0xfe; /* clear multicast bit */ -+ mac_addr[0] |= 0x02; /* set local assignment bit (IEEE802) */ -+ -+ if (from_eeprom) { -+ eth_env_set_enetaddr("eth1addr", mac_addr); -+ } else { -+ eth_env_set_enetaddr("ethaddr", mac_addr); -+ -+ if (lockdown && env_get("eth1addr")) -+ return; -+ -+ /* Ugly, copy another 4 bytes to generate a similar address */ -+ memcpy(mac_addr + 2, hash + 8, 4); -+ if (!memcmp(hash + 2, hash + 8, 4)) -+ mac_addr[5] ^= 0xff; -+ -+ eth_env_set_enetaddr("eth1addr", mac_addr); -+ } -+#endif -+ -+ return; -+} -+ -+int misc_init_r(void) -+{ -+ const u32 cpuid_offset = 0x7; -+ const u32 cpuid_length = 0x10; -+ u8 cpuid[cpuid_length]; -+ int ret; -+ -+ setup_iodomain(); -+ -+ ret = rockchip_cpuid_from_efuse(cpuid_offset, cpuid_length, cpuid); -+ if (ret) -+ return ret; -+ -+ ret = rockchip_cpuid_set(cpuid, cpuid_length); -+ if (ret) -+ return ret; -+ -+ setup_macaddr(); -+ bd_hwrev_init(); -+ -+ return 0; -+} -+#endif -+ -+#ifdef CONFIG_SERIAL_TAG -+void get_board_serial(struct tag_serialnr *serialnr) -+{ -+ char *serial_string; -+ u64 serial = 0; -+ -+ serial_string = env_get("serial#"); -+ -+ if (serial_string) -+ serial = simple_strtoull(serial_string, NULL, 16); -+ -+ serialnr->high = (u32)(serial >> 32); -+ serialnr->low = (u32)(serial & 0xffffffff); -+} -+#endif -+ ---- /dev/null -+++ b/board/embedfire/doornet2/hwrev.c -@@ -0,0 +1,171 @@ -+// SPDX-License-Identifier: GPL-2.0+ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+/* -+ * ID info: -+ * ID : Volts : ADC value : Bucket -+ * == ===== ========= =========== -+ * 0 : 0.102V: 58 : 0 - 81 -+ * 1 : 0.211V: 120 : 82 - 150 -+ * 2 : 0.319V: 181 : 151 - 211 -+ * 3 : 0.427V: 242 : 212 - 274 -+ * 4 : 0.542V: 307 : 275 - 342 -+ * 5 : 0.666V: 378 : 343 - 411 -+ * 6 : 0.781V: 444 : 412 - 477 -+ * 7 : 0.900V: 511 : 478 - 545 -+ * 8 : 1.023V: 581 : 546 - 613 -+ * 9 : 1.137V: 646 : 614 - 675 -+ * 10 : 1.240V: 704 : 676 - 733 -+ * 11 : 1.343V: 763 : 734 - 795 -+ * 12 : 1.457V: 828 : 796 - 861 -+ * 13 : 1.576V: 895 : 862 - 925 -+ * 14 : 1.684V: 956 : 926 - 989 -+ * 15 : 1.800V: 1023 : 990 - 1023 -+ */ -+static const int id_readings[] = { -+ 81, 150, 211, 274, 342, 411, 477, 545, -+ 613, 675, 733, 795, 861, 925, 989, 1023 -+}; -+ -+static int cached_board_id = -1; -+ -+#define SARADC_BASE 0xFF100000 -+#define SARADC_DATA (SARADC_BASE + 0) -+#define SARADC_CTRL (SARADC_BASE + 8) -+ -+static u32 get_saradc_value(int chn) -+{ -+ int timeout = 0; -+ u32 adc_value = 0; -+ -+ writel(0, SARADC_CTRL); -+ udelay(2); -+ -+ writel(0x28 | chn, SARADC_CTRL); -+ udelay(50); -+ -+ timeout = 0; -+ do { -+ if (readl(SARADC_CTRL) & 0x40) { -+ adc_value = readl(SARADC_DATA) & 0x3FF; -+ goto stop_adc; -+ } -+ -+ udelay(10); -+ } while (timeout++ < 100); -+ -+stop_adc: -+ writel(0, SARADC_CTRL); -+ -+ return adc_value; -+} -+ -+static uint32_t get_adc_index(int chn) -+{ -+ int i; -+ int adc_reading; -+ -+ if (cached_board_id != -1) -+ return cached_board_id; -+ -+ adc_reading = get_saradc_value(chn); -+ for (i = 0; i < ARRAY_SIZE(id_readings); i++) { -+ if (adc_reading <= id_readings[i]) { -+ debug("ADC reading %d, ID %d\n", adc_reading, i); -+ cached_board_id = i; -+ return i; -+ } -+ } -+ -+ /* should die for impossible value */ -+ return 0; -+} -+ -+/* -+ * Extended by ADC_IN4 -+ * 0x06 - SOC-RK3399 -+ * 0x09 - DoorNet2 DDR3 -+ * 0x0a - DoorNet2 LPDDR4 -+ */ -+static int pcb_rev = -1; -+ -+void bd_hwrev_init(void) -+{ -+#define GPIO4_BASE 0xff790000 -+ struct rockchip_gpio_regs *regs = (void *)GPIO4_BASE; -+ -+#ifdef CONFIG_SPL_BUILD -+ struct udevice *dev; -+ -+ if (uclass_get_device_by_driver(UCLASS_CLK, -+ DM_DRIVER_GET(clk_rk3399), &dev)) -+ return; -+#endif -+ -+ if (pcb_rev >= 0) -+ return; -+ -+ /* D1, D0: input mode */ -+ clrbits_le32(®s->swport_ddr, (0x3 << 24)); -+ pcb_rev = (readl(®s->ext_port) >> 24) & 0x3; -+ -+ if (pcb_rev == 0x3) { -+ /* Revision group A: 0x04 ~ 0x13 */ -+ pcb_rev = 0x4 + get_adc_index(4); -+ -+ } else if (pcb_rev == 0x1) { -+ int idx = get_adc_index(4); -+ -+ /* Revision group B: 0x21 ~ 0x2f */ -+ if (idx > 0) { -+ pcb_rev = 0x20 + idx; -+ } -+ } -+} -+ -+#ifdef CONFIG_SPL_BUILD -+static struct board_ddrtype { -+ int rev; -+ const char *type; -+} ddrtypes[] = { -+ { 0x00, "lpddr3-samsung-4GB-1866" }, -+ { 0x01, "lpddr3-samsung-4GB-1866" }, -+ { 0x04, "ddr3-1866" }, -+ { 0x06, "ddr3-1866" }, -+ { 0x07, "lpddr4-100" }, -+ { 0x09, "ddr3-1866" }, -+ { 0x0a, "lpddr4-100" }, -+ { 0x21, "lpddr4-100" }, -+ { 0x22, "ddr3-1866" }, -+}; -+ -+const char *rk3399_get_ddrtype(void) { -+ int i; -+ -+ bd_hwrev_init(); -+ printf("Board: rev%02x\n", pcb_rev); -+ -+ for (i = 0; i < ARRAY_SIZE(ddrtypes); i++) { -+ if (ddrtypes[i].rev == pcb_rev) -+ return ddrtypes[i].type; -+ } -+ -+ /* fallback to first subnode (ie, first included dtsi) */ -+ return NULL; -+} -+#endif -+ -+/* To override __weak symbols */ -+u32 get_board_rev(void) -+{ -+ return pcb_rev; -+} -+ -+ ---- /dev/null -+++ b/board/embedfire/doornet2/MAINTAINERS -@@ -0,0 +1,5 @@ -+DoorNet2 Series -+M: embedfire -+S: Maintained -+F: board/embedfire/doornet2/ -+F: include/configs/doornet2.h ---- /dev/null -+++ b/board/embedfire/doornet2/hwrev.h -@@ -0,0 +1,25 @@ -+/* -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU General Public License -+ * as published by the Free Software Foundation; either version 2 -+ * of the License, or (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, you can access it online at -+ * http://www.gnu.org/licenses/gpl-2.0.html. -+ */ -+ -+#ifndef __BD_HW_REV_H__ -+#define __BD_HW_REV_H__ -+ -+extern void bd_hwrev_config_gpio(void); -+extern void bd_hwrev_init(void); -+extern u32 get_board_rev(void); -+ -+#endif /* __BD_HW_REV_H__ */ -+ ---- a/drivers/clk/rockchip/clk_rk3399.c -+++ b/drivers/clk/rockchip/clk_rk3399.c -@@ -1372,6 +1372,8 @@ static void rkclk_init(struct rockchip_c - pclk_div << PCLK_PERILP1_DIV_CON_SHIFT | - hclk_div << HCLK_PERILP1_DIV_CON_SHIFT | - HCLK_PERILP1_PLL_SEL_GPLL << HCLK_PERILP1_PLL_SEL_SHIFT); -+ -+ rk3399_saradc_set_clk(cru, 1000000); - } - - static int rk3399_clk_probe(struct udevice *dev) ---- /dev/null -+++ b/include/configs/doornet2.h -@@ -0,0 +1,25 @@ -+/* SPDX-License-Identifier: GPL-2.0+ */ -+/* -+ * Copyright (C) Guangzhou FriendlyELEC Computer Tech. Co., Ltd. -+ * (http://www.friendlyarm.com) -+ * -+ * (C) Copyright 2016 Rockchip Electronics Co., Ltd -+ */ -+ -+#ifndef __CONFIG_DOORNET2_H__ -+#define __CONFIG_DOORNET2_H__ -+ -+#define ROCKCHIP_DEVICE_SETTINGS \ -+ "stdin=serial,usbkbd\0" \ -+ "stdout=serial,vidconsole\0" \ -+ "stderr=serial,vidconsole\0" -+ -+#include -+ -+#define SDRAM_BANK_SIZE (2UL << 30) -+ -+#define CONFIG_SERIAL_TAG -+#define CONFIG_REVISION_TAG -+ -+#endif -+ ---- a/arch/arm/dts/rk3399-sdram-ddr3-1333.dtsi -+++ b/arch/arm/dts/rk3399-sdram-ddr3-1333.dtsi -@@ -4,7 +4,9 @@ - */ - - &dmc { -- rockchip,sdram-params = < -+ ddr3-1333 { -+ u-boot,dm-pre-reloc; -+ rockchip,sdram-params = < - 0x1 - 0xa - 0x3 -@@ -1536,5 +1538,5 @@ - 0x01010000 - 0x00000000 - >; -+ }; - }; -- ---- a/arch/arm/dts/rk3399-sdram-ddr3-1600.dtsi -+++ b/arch/arm/dts/rk3399-sdram-ddr3-1600.dtsi -@@ -4,7 +4,9 @@ - */ - - &dmc { -- rockchip,sdram-params = < -+ ddr3-1600 { -+ u-boot,dm-pre-reloc; -+ rockchip,sdram-params = < - 0x1 - 0xa - 0x3 -@@ -1536,4 +1538,5 @@ - 0x01010000 - 0x00000000 - >; -+ }; - }; ---- a/arch/arm/dts/rk3399-sdram-ddr3-1866.dtsi -+++ b/arch/arm/dts/rk3399-sdram-ddr3-1866.dtsi -@@ -4,7 +4,9 @@ - */ - - &dmc { -- rockchip,sdram-params = < -+ ddr3-1866 { -+ u-boot,dm-pre-reloc; -+ rockchip,sdram-params = < - 0x1 - 0xa - 0x3 -@@ -1536,5 +1538,5 @@ - 0x01010000 - 0x00000000 - >; -+ }; - }; -- ---- a/arch/arm/dts/rk3399-sdram-lpddr3-2GB-1600.dtsi -+++ b/arch/arm/dts/rk3399-sdram-lpddr3-2GB-1600.dtsi -@@ -5,6 +5,8 @@ - */ - - &dmc { -+ lpddr3-2GB-1600 { -+ u-boot,dm-pre-reloc; - rockchip,sdram-params = < - 0x1 - 0xa -@@ -1537,4 +1539,5 @@ - 0x01010000 - 0x00000000 - >; -+ }; - }; ---- a/arch/arm/dts/rk3399-sdram-lpddr3-4GB-1600.dtsi -+++ b/arch/arm/dts/rk3399-sdram-lpddr3-4GB-1600.dtsi -@@ -4,6 +4,8 @@ - */ - - &dmc { -+ lpddr3-4GB-1600 { -+ u-boot,dm-pre-reloc; - rockchip,sdram-params = < - 0x2 - 0xa -@@ -1536,4 +1538,5 @@ - 0x01010000 - 0x00000000 - >; -+ }; - }; ---- a/arch/arm/dts/rk3399-sdram-lpddr3-samsung-4GB-1866.dtsi -+++ b/arch/arm/dts/rk3399-sdram-lpddr3-samsung-4GB-1866.dtsi -@@ -4,6 +4,8 @@ - */ - - &dmc { -+ lpddr3-samsung-4GB-1866 { -+ u-boot,dm-pre-reloc; - rockchip,sdram-params = < - 0x2 - 0xa -@@ -1543,4 +1545,5 @@ - 0x01010000 /* DENALI_PHY_957_DATA */ - 0x00000000 /* DENALI_PHY_958_DATA */ - >; -+ }; - }; ---- a/arch/arm/dts/rk3399-sdram-lpddr4-100.dtsi -+++ b/arch/arm/dts/rk3399-sdram-lpddr4-100.dtsi -@@ -6,6 +6,8 @@ - */ - - &dmc { -+ lpddr4-100 { -+ u-boot,dm-pre-reloc; - rockchip,sdram-params = < - 0x2 - 0xa -@@ -1538,4 +1540,5 @@ - 0x01010000 - 0x00000000 - >; -+ }; - }; ---- a/drivers/ram/rockchip/sdram_rk3399.c -+++ b/drivers/ram/rockchip/sdram_rk3399.c -@@ -1625,7 +1625,6 @@ static void set_ddr_stride(struct rk3399_pmusgrf_regs *pmusgrf, u32 stride) - rk_clrsetreg(&pmusgrf->soc_con4, 0x1f << 10, stride << 10); - } - --#if !defined(CONFIG_RAM_RK3399_LPDDR4) - static int data_training_first(struct dram_info *dram, u32 channel, u8 rank, - struct rk3399_sdram_params *params) - { -@@ -1715,8 +1714,8 @@ void modify_param(const struct chan_info *chan, - clrsetbits_le32(&denali_pi_params[76], 0x1 << 24, 0x1 << 24); - clrsetbits_le32(&denali_pi_params[77], 0x1, 0x1); - } --#else - -+#if defined(CONFIG_RAM_RK3399_LPDDR4) - struct rk3399_sdram_params dfs_cfgs_lpddr4[] = { - #include "sdram-rk3399-lpddr4-400.inc" - #include "sdram-rk3399-lpddr4-800.inc" -@@ -3011,22 +3010,43 @@ static int sdram_init(struct dram_info *dram, - return 0; - } - -+__weak const char *rk3399_get_ddrtype(void) -+{ -+ return NULL; -+} -+ - static int rk3399_dmc_of_to_plat(struct udevice *dev) - { - struct rockchip_dmc_plat *plat = dev_get_plat(dev); -+ ofnode node = { .np = NULL }; -+ const char *name; - int ret; - - if (!CONFIG_IS_ENABLED(OF_REAL)) - return 0; - -- ret = dev_read_u32_array(dev, "rockchip,sdram-params", -- (u32 *)&plat->sdram_params, -- sizeof(plat->sdram_params) / sizeof(u32)); -+ name = rk3399_get_ddrtype(); -+ if (name) -+ node = dev_read_subnode(dev, name); -+ if (!ofnode_valid(node)) { -+ debug("Failed to read subnode %s\n", name); -+ node = dev_read_first_subnode(dev); -+ } -+ -+ /* fallback to current node */ -+ if (!ofnode_valid(node)) -+ node = dev_ofnode(dev); -+ -+ ret = ofnode_read_u32_array(node, "rockchip,sdram-params", -+ (u32 *)&plat->sdram_params, -+ sizeof(plat->sdram_params) / sizeof(u32)); -+ - if (ret) { - printf("%s: Cannot read rockchip,sdram-params %d\n", - __func__, ret); - return ret; - } -+ - ret = regmap_init_mem(dev_ofnode(dev), &plat->map); - if (ret) - printf("%s: regmap failed %d\n", __func__, ret); -@@ -3051,18 +3071,21 @@ static int conv_of_plat(struct udevice *dev) - #endif - - static const struct sdram_rk3399_ops rk3399_ops = { --#if !defined(CONFIG_RAM_RK3399_LPDDR4) -+ - .data_training_first = data_training_first, - .set_rate_index = switch_to_phy_index1, - .modify_param = modify_param, - .get_phy_index_params = get_phy_index_params, --#else -+}; -+ -+#if defined(CONFIG_RAM_RK3399_LPDDR4) -+static const struct sdram_rk3399_ops lpddr4_ops = { - .data_training_first = lpddr4_mr_detect, - .set_rate_index = lpddr4_set_rate, - .modify_param = lpddr4_modify_param, -- .get_phy_index_params = lpddr4_get_phy_index_params, --#endif -+ .get_phy_index_params = lpddr4_get_phy_index_params, - }; -+#endif - - static int rk3399_dmc_init(struct udevice *dev) - { -@@ -3081,7 +3104,17 @@ static int rk3399_dmc_init(struct udevice *dev) - return ret; - #endif - -- priv->ops = &rk3399_ops; -+ if (params->base.dramtype == LPDDR4) { -+#if defined(CONFIG_RAM_RK3399_LPDDR4) -+ priv->ops = &lpddr4_ops; -+#else -+ printf("LPDDR4 support is disable\n"); -+ return -EINVAL; -+#endif -+ } else { -+ priv->ops = &rk3399_ops; -+ } -+ - priv->cic = syscon_get_first_range(ROCKCHIP_SYSCON_CIC); - priv->grf = syscon_get_first_range(ROCKCHIP_SYSCON_GRF); - priv->pmu = syscon_get_first_range(ROCKCHIP_SYSCON_PMU); +--- a/arch/arm/mach-rockchip/rk3399/Kconfig ++++ b/arch/arm/mach-rockchip/rk3399/Kconfig +@@ -109,6 +109,21 @@ config TARGET_ROC_PC_RK3399 + * wide voltage input(5V-15V), dual cell battery + * Wifi/BT accessible via expansion board M.2 + ++config TARGET_DOORNET2_RK3399 ++ bool "EmbedFire DoorNet2 board" ++ help ++ DoorNet2 is SBC produced by EmbedFire. Key features: ++ ++ * Rockchip RK3399 ++ * 1-4GB DDR3 or LPDDR4 ++ * SD card slot and 8-32GB eMMC ++ * Gigabit ethernet ++ * PCIe ++ * USB 3.0, 2.0 ++ * USB Type C power ++ * GPIO expansion ports ++ * USB 2.0 Wifi module ++ + endchoice + + config ROCKCHIP_BOOT_MODE_REG +@@ -151,6 +166,7 @@ config SYS_BOOTCOUNT_ADDR + + endif # BOOTCOUNT_LIMIT + ++source "board/embedfire/doornet2/Kconfig" + source "board/firefly/roc-pc-rk3399/Kconfig" + source "board/google/gru/Kconfig" + source "board/pine64/pinebook-pro-rk3399/Kconfig" +--- /dev/null ++++ b/board/embedfire/doornet2/Kconfig +@@ -0,0 +1,15 @@ ++if TARGET_DOORNET2_RK3399 ++ ++config SYS_BOARD ++ default "doornet2" ++ ++config SYS_VENDOR ++ default "embedfire" ++ ++config SYS_CONFIG_NAME ++ default "doornet2" ++ ++config BOARD_SPECIFIC_OPTIONS ++ def_bool y ++ ++endif +--- /dev/null ++++ b/board/embedfire/doornet2/Makefile +@@ -0,0 +1,6 @@ ++# ++# SPDX-License-Identifier: GPL-2.0+ ++# ++ ++obj-y += doornet2.o hwrev.o ++ +--- /dev/null ++++ b/board/embedfire/doornet2/doornet2.c +@@ -0,0 +1,146 @@ ++// SPDX-License-Identifier: GPL-2.0+ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include "hwrev.h" ++ ++#ifdef CONFIG_MISC_INIT_R ++static void setup_iodomain(void) ++{ ++ struct rk3399_grf_regs *grf = ++ syscon_get_first_range(ROCKCHIP_SYSCON_GRF); ++ ++ /* BT565 and AUDIO is in 1.8v domain */ ++ rk_setreg(&grf->io_vsel, BIT(0) | BIT(1)); ++} ++ ++static int __maybe_unused mac_read_from_generic_eeprom(u8 *addr) ++{ ++ struct udevice *i2c_dev; ++ int ret; ++ ++ /* Microchip 24AA02xxx EEPROMs with EUI-48 Node Identity */ ++ ret = i2c_get_chip_for_busnum(2, 0x51, 1, &i2c_dev); ++ if (!ret) ++ ret = dm_i2c_read(i2c_dev, 0xfa, addr, 6); ++ ++ return ret; ++} ++ ++static void setup_macaddr(void) ++{ ++#if CONFIG_IS_ENABLED(CMD_NET) ++ int ret; ++ const char *cpuid = env_get("cpuid#"); ++ u8 hash[SHA256_SUM_LEN]; ++ int size = sizeof(hash); ++ u8 mac_addr[6]; ++ int from_eeprom = 0; ++ int lockdown = 0; ++ ++#ifndef CONFIG_ENV_IS_NOWHERE ++ lockdown = env_get_yesno("lockdown") == 1; ++#endif ++ if (lockdown && env_get("ethaddr")) ++ return; ++ ++ ret = mac_read_from_generic_eeprom(mac_addr); ++ if (!ret && is_valid_ethaddr(mac_addr)) { ++ eth_env_set_enetaddr("ethaddr", mac_addr); ++ from_eeprom = 1; ++ } ++ ++ if (!cpuid) { ++ debug("%s: could not retrieve 'cpuid#'\n", __func__); ++ return; ++ } ++ ++ ret = hash_block("sha256", (void *)cpuid, strlen(cpuid), hash, &size); ++ if (ret) { ++ debug("%s: failed to calculate SHA256\n", __func__); ++ return; ++ } ++ ++ /* Copy 6 bytes of the hash to base the MAC address on */ ++ memcpy(mac_addr, hash, 6); ++ ++ /* Make this a valid MAC address and set it */ ++ mac_addr[0] &= 0xfe; /* clear multicast bit */ ++ mac_addr[0] |= 0x02; /* set local assignment bit (IEEE802) */ ++ ++ if (from_eeprom) { ++ eth_env_set_enetaddr("eth1addr", mac_addr); ++ } else { ++ eth_env_set_enetaddr("ethaddr", mac_addr); ++ ++ if (lockdown && env_get("eth1addr")) ++ return; ++ ++ /* Ugly, copy another 4 bytes to generate a similar address */ ++ memcpy(mac_addr + 2, hash + 8, 4); ++ if (!memcmp(hash + 2, hash + 8, 4)) ++ mac_addr[5] ^= 0xff; ++ ++ eth_env_set_enetaddr("eth1addr", mac_addr); ++ } ++#endif ++ ++ return; ++} ++ ++int misc_init_r(void) ++{ ++ const u32 cpuid_offset = 0x7; ++ const u32 cpuid_length = 0x10; ++ u8 cpuid[cpuid_length]; ++ int ret; ++ ++ setup_iodomain(); ++ ++ ret = rockchip_cpuid_from_efuse(cpuid_offset, cpuid_length, cpuid); ++ if (ret) ++ return ret; ++ ++ ret = rockchip_cpuid_set(cpuid, cpuid_length); ++ if (ret) ++ return ret; ++ ++ setup_macaddr(); ++ bd_hwrev_init(); ++ ++ return 0; ++} ++#endif ++ ++#ifdef CONFIG_SERIAL_TAG ++void get_board_serial(struct tag_serialnr *serialnr) ++{ ++ char *serial_string; ++ u64 serial = 0; ++ ++ serial_string = env_get("serial#"); ++ ++ if (serial_string) ++ serial = simple_strtoull(serial_string, NULL, 16); ++ ++ serialnr->high = (u32)(serial >> 32); ++ serialnr->low = (u32)(serial & 0xffffffff); ++} ++#endif ++ +--- /dev/null ++++ b/board/embedfire/doornet2/hwrev.c +@@ -0,0 +1,171 @@ ++// SPDX-License-Identifier: GPL-2.0+ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++/* ++ * ID info: ++ * ID : Volts : ADC value : Bucket ++ * == ===== ========= =========== ++ * 0 : 0.102V: 58 : 0 - 81 ++ * 1 : 0.211V: 120 : 82 - 150 ++ * 2 : 0.319V: 181 : 151 - 211 ++ * 3 : 0.427V: 242 : 212 - 274 ++ * 4 : 0.542V: 307 : 275 - 342 ++ * 5 : 0.666V: 378 : 343 - 411 ++ * 6 : 0.781V: 444 : 412 - 477 ++ * 7 : 0.900V: 511 : 478 - 545 ++ * 8 : 1.023V: 581 : 546 - 613 ++ * 9 : 1.137V: 646 : 614 - 675 ++ * 10 : 1.240V: 704 : 676 - 733 ++ * 11 : 1.343V: 763 : 734 - 795 ++ * 12 : 1.457V: 828 : 796 - 861 ++ * 13 : 1.576V: 895 : 862 - 925 ++ * 14 : 1.684V: 956 : 926 - 989 ++ * 15 : 1.800V: 1023 : 990 - 1023 ++ */ ++static const int id_readings[] = { ++ 81, 150, 211, 274, 342, 411, 477, 545, ++ 613, 675, 733, 795, 861, 925, 989, 1023 ++}; ++ ++static int cached_board_id = -1; ++ ++#define SARADC_BASE 0xFF100000 ++#define SARADC_DATA (SARADC_BASE + 0) ++#define SARADC_CTRL (SARADC_BASE + 8) ++ ++static u32 get_saradc_value(int chn) ++{ ++ int timeout = 0; ++ u32 adc_value = 0; ++ ++ writel(0, SARADC_CTRL); ++ udelay(2); ++ ++ writel(0x28 | chn, SARADC_CTRL); ++ udelay(50); ++ ++ timeout = 0; ++ do { ++ if (readl(SARADC_CTRL) & 0x40) { ++ adc_value = readl(SARADC_DATA) & 0x3FF; ++ goto stop_adc; ++ } ++ ++ udelay(10); ++ } while (timeout++ < 100); ++ ++stop_adc: ++ writel(0, SARADC_CTRL); ++ ++ return adc_value; ++} ++ ++static uint32_t get_adc_index(int chn) ++{ ++ int i; ++ int adc_reading; ++ ++ if (cached_board_id != -1) ++ return cached_board_id; ++ ++ adc_reading = get_saradc_value(chn); ++ for (i = 0; i < ARRAY_SIZE(id_readings); i++) { ++ if (adc_reading <= id_readings[i]) { ++ debug("ADC reading %d, ID %d\n", adc_reading, i); ++ cached_board_id = i; ++ return i; ++ } ++ } ++ ++ /* should die for impossible value */ ++ return 0; ++} ++ ++/* ++ * Extended by ADC_IN4 ++ * 0x06 - SOC-RK3399 ++ * 0x09 - DoorNet2 DDR3 ++ * 0x0a - DoorNet2 LPDDR4 ++ */ ++static int pcb_rev = -1; ++ ++void bd_hwrev_init(void) ++{ ++#define GPIO4_BASE 0xff790000 ++ struct rockchip_gpio_regs *regs = (void *)GPIO4_BASE; ++ ++#ifdef CONFIG_SPL_BUILD ++ struct udevice *dev; ++ ++ if (uclass_get_device_by_driver(UCLASS_CLK, ++ DM_DRIVER_GET(clk_rk3399), &dev)) ++ return; ++#endif ++ ++ if (pcb_rev >= 0) ++ return; ++ ++ /* D1, D0: input mode */ ++ clrbits_le32(®s->swport_ddr, (0x3 << 24)); ++ pcb_rev = (readl(®s->ext_port) >> 24) & 0x3; ++ ++ if (pcb_rev == 0x3) { ++ /* Revision group A: 0x04 ~ 0x13 */ ++ pcb_rev = 0x4 + get_adc_index(4); ++ ++ } else if (pcb_rev == 0x1) { ++ int idx = get_adc_index(4); ++ ++ /* Revision group B: 0x21 ~ 0x2f */ ++ if (idx > 0) { ++ pcb_rev = 0x20 + idx; ++ } ++ } ++} ++ ++#ifdef CONFIG_SPL_BUILD ++static struct board_ddrtype { ++ int rev; ++ const char *type; ++} ddrtypes[] = { ++ { 0x00, "lpddr3-samsung-4GB-1866" }, ++ { 0x01, "lpddr3-samsung-4GB-1866" }, ++ { 0x04, "ddr3-1866" }, ++ { 0x06, "ddr3-1866" }, ++ { 0x07, "lpddr4-100" }, ++ { 0x09, "ddr3-1866" }, ++ { 0x0a, "lpddr4-100" }, ++ { 0x21, "lpddr4-100" }, ++ { 0x22, "ddr3-1866" }, ++}; ++ ++const char *rk3399_get_ddrtype(void) { ++ int i; ++ ++ bd_hwrev_init(); ++ printf("Board: rev%02x\n", pcb_rev); ++ ++ for (i = 0; i < ARRAY_SIZE(ddrtypes); i++) { ++ if (ddrtypes[i].rev == pcb_rev) ++ return ddrtypes[i].type; ++ } ++ ++ /* fallback to first subnode (ie, first included dtsi) */ ++ return NULL; ++} ++#endif ++ ++/* To override __weak symbols */ ++u32 get_board_rev(void) ++{ ++ return pcb_rev; ++} ++ ++ +--- /dev/null ++++ b/board/embedfire/doornet2/MAINTAINERS +@@ -0,0 +1,5 @@ ++DoorNet2 Series ++M: embedfire ++S: Maintained ++F: board/embedfire/doornet2/ ++F: include/configs/doornet2.h +--- /dev/null ++++ b/board/embedfire/doornet2/hwrev.h +@@ -0,0 +1,25 @@ ++/* ++ * This program is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU General Public License ++ * as published by the Free Software Foundation; either version 2 ++ * of the License, or (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, you can access it online at ++ * http://www.gnu.org/licenses/gpl-2.0.html. ++ */ ++ ++#ifndef __BD_HW_REV_H__ ++#define __BD_HW_REV_H__ ++ ++extern void bd_hwrev_config_gpio(void); ++extern void bd_hwrev_init(void); ++extern u32 get_board_rev(void); ++ ++#endif /* __BD_HW_REV_H__ */ ++ +--- a/drivers/clk/rockchip/clk_rk3399.c ++++ b/drivers/clk/rockchip/clk_rk3399.c +@@ -1372,6 +1372,8 @@ static void rkclk_init(struct rockchip_c + pclk_div << PCLK_PERILP1_DIV_CON_SHIFT | + hclk_div << HCLK_PERILP1_DIV_CON_SHIFT | + HCLK_PERILP1_PLL_SEL_GPLL << HCLK_PERILP1_PLL_SEL_SHIFT); ++ ++ rk3399_saradc_set_clk(cru, 1000000); + } + + static int rk3399_clk_probe(struct udevice *dev) +--- /dev/null ++++ b/include/configs/doornet2.h +@@ -0,0 +1,25 @@ ++/* SPDX-License-Identifier: GPL-2.0+ */ ++/* ++ * Copyright (C) Guangzhou FriendlyELEC Computer Tech. Co., Ltd. ++ * (http://www.friendlyarm.com) ++ * ++ * (C) Copyright 2016 Rockchip Electronics Co., Ltd ++ */ ++ ++#ifndef __CONFIG_DOORNET2_H__ ++#define __CONFIG_DOORNET2_H__ ++ ++#define ROCKCHIP_DEVICE_SETTINGS \ ++ "stdin=serial,usbkbd\0" \ ++ "stdout=serial,vidconsole\0" \ ++ "stderr=serial,vidconsole\0" ++ ++#include ++ ++#define SDRAM_BANK_SIZE (2UL << 30) ++ ++#define CONFIG_SERIAL_TAG ++#define CONFIG_REVISION_TAG ++ ++#endif ++ +--- a/arch/arm/dts/rk3399-sdram-ddr3-1333.dtsi ++++ b/arch/arm/dts/rk3399-sdram-ddr3-1333.dtsi +@@ -4,7 +4,9 @@ + */ + + &dmc { +- rockchip,sdram-params = < ++ ddr3-1333 { ++ u-boot,dm-pre-reloc; ++ rockchip,sdram-params = < + 0x1 + 0xa + 0x3 +@@ -1536,5 +1538,5 @@ + 0x01010000 + 0x00000000 + >; ++ }; + }; +- +--- a/arch/arm/dts/rk3399-sdram-ddr3-1600.dtsi ++++ b/arch/arm/dts/rk3399-sdram-ddr3-1600.dtsi +@@ -4,7 +4,9 @@ + */ + + &dmc { +- rockchip,sdram-params = < ++ ddr3-1600 { ++ u-boot,dm-pre-reloc; ++ rockchip,sdram-params = < + 0x1 + 0xa + 0x3 +@@ -1536,4 +1538,5 @@ + 0x01010000 + 0x00000000 + >; ++ }; + }; +--- a/arch/arm/dts/rk3399-sdram-ddr3-1866.dtsi ++++ b/arch/arm/dts/rk3399-sdram-ddr3-1866.dtsi +@@ -4,7 +4,9 @@ + */ + + &dmc { +- rockchip,sdram-params = < ++ ddr3-1866 { ++ u-boot,dm-pre-reloc; ++ rockchip,sdram-params = < + 0x1 + 0xa + 0x3 +@@ -1536,5 +1538,5 @@ + 0x01010000 + 0x00000000 + >; ++ }; + }; +- +--- a/arch/arm/dts/rk3399-sdram-lpddr3-2GB-1600.dtsi ++++ b/arch/arm/dts/rk3399-sdram-lpddr3-2GB-1600.dtsi +@@ -5,6 +5,8 @@ + */ + + &dmc { ++ lpddr3-2GB-1600 { ++ u-boot,dm-pre-reloc; + rockchip,sdram-params = < + 0x1 + 0xa +@@ -1537,4 +1539,5 @@ + 0x01010000 + 0x00000000 + >; ++ }; + }; +--- a/arch/arm/dts/rk3399-sdram-lpddr3-4GB-1600.dtsi ++++ b/arch/arm/dts/rk3399-sdram-lpddr3-4GB-1600.dtsi +@@ -4,6 +4,8 @@ + */ + + &dmc { ++ lpddr3-4GB-1600 { ++ u-boot,dm-pre-reloc; + rockchip,sdram-params = < + 0x2 + 0xa +@@ -1536,4 +1538,5 @@ + 0x01010000 + 0x00000000 + >; ++ }; + }; +--- a/arch/arm/dts/rk3399-sdram-lpddr3-samsung-4GB-1866.dtsi ++++ b/arch/arm/dts/rk3399-sdram-lpddr3-samsung-4GB-1866.dtsi +@@ -4,6 +4,8 @@ + */ + + &dmc { ++ lpddr3-samsung-4GB-1866 { ++ u-boot,dm-pre-reloc; + rockchip,sdram-params = < + 0x2 + 0xa +@@ -1543,4 +1545,5 @@ + 0x01010000 /* DENALI_PHY_957_DATA */ + 0x00000000 /* DENALI_PHY_958_DATA */ + >; ++ }; + }; +--- a/arch/arm/dts/rk3399-sdram-lpddr4-100.dtsi ++++ b/arch/arm/dts/rk3399-sdram-lpddr4-100.dtsi +@@ -6,6 +6,8 @@ + */ + + &dmc { ++ lpddr4-100 { ++ u-boot,dm-pre-reloc; + rockchip,sdram-params = < + 0x2 + 0xa +@@ -1538,4 +1540,5 @@ + 0x01010000 + 0x00000000 + >; ++ }; + }; +--- a/drivers/ram/rockchip/sdram_rk3399.c ++++ b/drivers/ram/rockchip/sdram_rk3399.c +@@ -1625,7 +1625,6 @@ static void set_ddr_stride(struct rk3399_pmusgrf_regs *pmusgrf, u32 stride) + rk_clrsetreg(&pmusgrf->soc_con4, 0x1f << 10, stride << 10); + } + +-#if !defined(CONFIG_RAM_RK3399_LPDDR4) + static int data_training_first(struct dram_info *dram, u32 channel, u8 rank, + struct rk3399_sdram_params *params) + { +@@ -1715,8 +1714,8 @@ void modify_param(const struct chan_info *chan, + clrsetbits_le32(&denali_pi_params[76], 0x1 << 24, 0x1 << 24); + clrsetbits_le32(&denali_pi_params[77], 0x1, 0x1); + } +-#else + ++#if defined(CONFIG_RAM_RK3399_LPDDR4) + struct rk3399_sdram_params dfs_cfgs_lpddr4[] = { + #include "sdram-rk3399-lpddr4-400.inc" + #include "sdram-rk3399-lpddr4-800.inc" +@@ -3011,22 +3010,43 @@ static int sdram_init(struct dram_info *dram, + return 0; + } + ++__weak const char *rk3399_get_ddrtype(void) ++{ ++ return NULL; ++} ++ + static int rk3399_dmc_of_to_plat(struct udevice *dev) + { + struct rockchip_dmc_plat *plat = dev_get_plat(dev); ++ ofnode node = { .np = NULL }; ++ const char *name; + int ret; + + if (!CONFIG_IS_ENABLED(OF_REAL)) + return 0; + +- ret = dev_read_u32_array(dev, "rockchip,sdram-params", +- (u32 *)&plat->sdram_params, +- sizeof(plat->sdram_params) / sizeof(u32)); ++ name = rk3399_get_ddrtype(); ++ if (name) ++ node = dev_read_subnode(dev, name); ++ if (!ofnode_valid(node)) { ++ debug("Failed to read subnode %s\n", name); ++ node = dev_read_first_subnode(dev); ++ } ++ ++ /* fallback to current node */ ++ if (!ofnode_valid(node)) ++ node = dev_ofnode(dev); ++ ++ ret = ofnode_read_u32_array(node, "rockchip,sdram-params", ++ (u32 *)&plat->sdram_params, ++ sizeof(plat->sdram_params) / sizeof(u32)); ++ + if (ret) { + printf("%s: Cannot read rockchip,sdram-params %d\n", + __func__, ret); + return ret; + } ++ + ret = regmap_init_mem(dev_ofnode(dev), &plat->map); + if (ret) + printf("%s: regmap failed %d\n", __func__, ret); +@@ -3051,18 +3071,21 @@ static int conv_of_plat(struct udevice *dev) + #endif + + static const struct sdram_rk3399_ops rk3399_ops = { +-#if !defined(CONFIG_RAM_RK3399_LPDDR4) ++ + .data_training_first = data_training_first, + .set_rate_index = switch_to_phy_index1, + .modify_param = modify_param, + .get_phy_index_params = get_phy_index_params, +-#else ++}; ++ ++#if defined(CONFIG_RAM_RK3399_LPDDR4) ++static const struct sdram_rk3399_ops lpddr4_ops = { + .data_training_first = lpddr4_mr_detect, + .set_rate_index = lpddr4_set_rate, + .modify_param = lpddr4_modify_param, +- .get_phy_index_params = lpddr4_get_phy_index_params, +-#endif ++ .get_phy_index_params = lpddr4_get_phy_index_params, + }; ++#endif + + static int rk3399_dmc_init(struct udevice *dev) + { +@@ -3081,7 +3104,17 @@ static int rk3399_dmc_init(struct udevice *dev) + return ret; + #endif + +- priv->ops = &rk3399_ops; ++ if (params->base.dramtype == LPDDR4) { ++#if defined(CONFIG_RAM_RK3399_LPDDR4) ++ priv->ops = &lpddr4_ops; ++#else ++ printf("LPDDR4 support is disable\n"); ++ return -EINVAL; ++#endif ++ } else { ++ priv->ops = &rk3399_ops; ++ } ++ + priv->cic = syscon_get_first_range(ROCKCHIP_SYSCON_CIC); + priv->grf = syscon_get_first_range(ROCKCHIP_SYSCON_GRF); + priv->pmu = syscon_get_first_range(ROCKCHIP_SYSCON_PMU); diff --git a/package/boot/uboot-rockchip/patches/900-arm-boot-add-dts-files.patch b/package/boot/uboot-rockchip/patches/900-arm-boot-add-dts-files.patch deleted file mode 100644 index 0c80d9131..000000000 --- a/package/boot/uboot-rockchip/patches/900-arm-boot-add-dts-files.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- a/arch/arm/dts/Makefile -+++ b/arch/arm/dts/Makefile -@@ -157,6 +157,7 @@ - rk3399-nanopi-m4b.dtb \ - rk3399-nanopi-neo4.dtb \ - rk3399-nanopi-r4s.dtb \ -+ rk3399-nanopi-r4se.dtb \ - rk3399-orangepi.dtb \ - rk3399-pinebook-pro.dtb \ - rk3399-puma-haikou.dtb \ diff --git a/package/boot/uboot-rockchip/src/arch/arm/dts/rk3399-nanopi-r4se.dts b/package/boot/uboot-rockchip/src/arch/arm/dts/rk3399-nanopi-r4se.dts deleted file mode 100644 index b8f863b2d..000000000 --- a/package/boot/uboot-rockchip/src/arch/arm/dts/rk3399-nanopi-r4se.dts +++ /dev/null @@ -1,139 +0,0 @@ -// SPDX-License-Identifier: (GPL-2.0+ OR MIT) -/* - * FriendlyElec NanoPC-T4 board device tree source - * - * Copyright (c) 2020 FriendlyElec Computer Tech. Co., Ltd. - * (http://www.friendlyarm.com) - * - * Copyright (c) 2018 Collabora Ltd. - * - * Copyright (c) 2020 Jensen Huang - * Copyright (c) 2020 Marty Jones - * Copyright (c) 2021 Tianling Shen - */ - -/dts-v1/; -#include "rk3399-nanopi4.dtsi" - -/ { - model = "FriendlyElec NanoPi R4SE"; - compatible = "friendlyarm,nanopi-r4se", "rockchip,rk3399"; - - /delete-node/ display-subsystem; - - gpio-leds { - pinctrl-0 = <&lan_led_pin>, <&sys_led_pin>, <&wan_led_pin>; - - /delete-node/ led-0; - - lan_led: led-lan { - gpios = <&gpio1 RK_PA1 GPIO_ACTIVE_HIGH>; - label = "green:lan"; - }; - - sys_led: led-sys { - gpios = <&gpio0 RK_PB5 GPIO_ACTIVE_HIGH>; - label = "red:power"; - default-state = "on"; - }; - - wan_led: led-wan { - gpios = <&gpio1 RK_PA0 GPIO_ACTIVE_HIGH>; - label = "green:wan"; - }; - }; - - gpio-keys { - pinctrl-0 = <&reset_button_pin>; - - /delete-node/ power; - - reset { - debounce-interval = <50>; - gpios = <&gpio1 RK_PC6 GPIO_ACTIVE_LOW>; - label = "reset"; - linux,code = ; - }; - }; - - vdd_5v: vdd-5v { - compatible = "regulator-fixed"; - regulator-name = "vdd_5v"; - regulator-always-on; - regulator-boot-on; - }; -}; - -&i2c4 { - status = "disabled"; -}; - -&pcie0 { - max-link-speed = <1>; - num-lanes = <1>; - vpcie3v3-supply = <&vcc3v3_sys>; -}; - -&pinctrl { - gpio-leds { - /delete-node/ status-led-pin; - - lan_led_pin: lan-led-pin { - rockchip,pins = <1 RK_PA1 RK_FUNC_GPIO &pcfg_pull_none>; - }; - - sys_led_pin: sys-led-pin { - rockchip,pins = <0 RK_PB5 RK_FUNC_GPIO &pcfg_pull_none>; - }; - - wan_led_pin: wan-led-pin { - rockchip,pins = <1 RK_PA0 RK_FUNC_GPIO &pcfg_pull_none>; - }; - }; - - rockchip-key { - /delete-node/ power-key; - - reset_button_pin: reset-button-pin { - rockchip,pins = <1 RK_PC6 RK_FUNC_GPIO &pcfg_pull_up>; - }; - }; -}; - -&emmc_phy { - status = "okay"; -}; - -&sdhci { - bus-width = <8>; - non-removable; - status = "okay"; -}; - -&sdmmc { - pinctrl-0 = <&sdmmc_cd>; -}; - -&sdio0 { - status = "disabled"; -}; - -&u2phy0_host { - phy-supply = <&vdd_5v>; -}; - -&u2phy1_host { - status = "disabled"; -}; - -&uart0 { - status = "disabled"; -}; - -&usbdrd_dwc3_0 { - dr_mode = "host"; -}; - -&vcc3v3_sys { - vin-supply = <&vcc5v0_sys>; -}; diff --git a/package/boot/uboot-rockchip/src/configs/nanopi-r4se-rk3399_defconfig b/package/boot/uboot-rockchip/src/configs/nanopi-r4se-rk3399_defconfig deleted file mode 100644 index e92fb5e88..000000000 --- a/package/boot/uboot-rockchip/src/configs/nanopi-r4se-rk3399_defconfig +++ /dev/null @@ -1,65 +0,0 @@ -CONFIG_ARM=y -CONFIG_SKIP_LOWLEVEL_INIT=y -CONFIG_COUNTER_FREQUENCY=24000000 -CONFIG_ARCH_ROCKCHIP=y -CONFIG_SYS_TEXT_BASE=0x00200000 -CONFIG_NR_DRAM_BANKS=1 -CONFIG_ENV_OFFSET=0x3F8000 -CONFIG_DEFAULT_DEVICE_TREE="rk3399-nanopi-r4se" -CONFIG_ROCKCHIP_RK3399=y -CONFIG_TARGET_EVB_RK3399=y -CONFIG_DEBUG_UART_BASE=0xFF1A0000 -CONFIG_DEBUG_UART_CLOCK=24000000 -CONFIG_SYS_LOAD_ADDR=0x800800 -CONFIG_DEBUG_UART=y -CONFIG_DEFAULT_FDT_FILE="rockchip/rk3399-nanopi-r4se.dtb" -CONFIG_DISPLAY_BOARDINFO_LATE=y -# CONFIG_SPL_RAW_IMAGE_SUPPORT is not set -CONFIG_SPL_STACK_R=y -CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN=0x10000 -CONFIG_TPL=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_OF_SPL_REMOVE_PROPS="pinctrl-0 pinctrl-names clock-names interrupt-parent assigned-clocks assigned-clock-rates assigned-clock-parents" -CONFIG_ENV_IS_IN_MMC=y -CONFIG_SYS_RELOC_GD_ENV_ADDR=y -CONFIG_ROCKCHIP_GPIO=y -CONFIG_SYS_I2C_ROCKCHIP=y -CONFIG_MMC_DW=y -CONFIG_MMC_DW_ROCKCHIP=y -CONFIG_MMC_SDHCI=y -CONFIG_MMC_SDHCI_ROCKCHIP=y -CONFIG_DM_ETH=y -CONFIG_ETH_DESIGNWARE=y -CONFIG_GMAC_ROCKCHIP=y -CONFIG_PMIC_RK8XX=y -CONFIG_REGULATOR_PWM=y -CONFIG_REGULATOR_RK8XX=y -CONFIG_PWM_ROCKCHIP=y -CONFIG_RAM_RK3399_LPDDR4=y -CONFIG_BAUDRATE=1500000 -CONFIG_DEBUG_UART_SHIFT=2 -CONFIG_SYSRESET=y -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_KEYBOARD=y -CONFIG_USB_HOST_ETHER=y -CONFIG_USB_ETHER_ASIX=y -CONFIG_USB_ETHER_ASIX88179=y -CONFIG_USB_ETHER_MCS7830=y -CONFIG_USB_ETHER_RTL8152=y -CONFIG_USB_ETHER_SMSC95XX=y -CONFIG_DM_VIDEO=y -CONFIG_DISPLAY=y -CONFIG_VIDEO_ROCKCHIP=y -CONFIG_DISPLAY_ROCKCHIP_HDMI=y -CONFIG_SPL_TINY_MEMSET=y -CONFIG_ERRNO_STR=y diff --git a/package/boot/uboot-rockchip/src/of-platdata/doornet1-rk3328/dt-decl.h b/package/boot/uboot-rockchip/src/of-platdata/doornet1-rk3328/dt-decl.h deleted file mode 100644 index 0919e4ed5..000000000 --- a/package/boot/uboot-rockchip/src/of-platdata/doornet1-rk3328/dt-decl.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * DO NOT MODIFY - * - * Declares externs for all device/uclass instances. - * This was generated by dtoc from a .dtb (device tree binary) file. - */ - -#include -#include - -/* driver declarations - these allow DM_DRIVER_GET() to be used */ -extern U_BOOT_DRIVER(rockchip_rk3328_cru); -extern U_BOOT_DRIVER(rockchip_rk3328_dmc); -extern U_BOOT_DRIVER(rockchip_rk3288_dw_mshc); -extern U_BOOT_DRIVER(ns16550_serial); -extern U_BOOT_DRIVER(rockchip_rk3328_grf); - -/* uclass driver declarations - needed for DM_UCLASS_DRIVER_REF() */ -extern UCLASS_DRIVER(clk); -extern UCLASS_DRIVER(mmc); -extern UCLASS_DRIVER(ram); -extern UCLASS_DRIVER(serial); -extern UCLASS_DRIVER(syscon); diff --git a/package/boot/uboot-rockchip/src/of-platdata/doornet1-rk3328/dt-plat.c b/package/boot/uboot-rockchip/src/of-platdata/doornet1-rk3328/dt-plat.c deleted file mode 100644 index 1818461ec..000000000 --- a/package/boot/uboot-rockchip/src/of-platdata/doornet1-rk3328/dt-plat.c +++ /dev/null @@ -1,127 +0,0 @@ -/* - * DO NOT MODIFY - * - * Declares the U_BOOT_DRIVER() records and platform data. - * This was generated by dtoc from a .dtb (device tree binary) file. - */ - -/* Allow use of U_BOOT_DRVINFO() in this file */ -#define DT_PLAT_C - -#include -#include -#include - -/* Node /clock-controller@ff440000 index 0 */ -static struct dtd_rockchip_rk3328_cru dtv_clock_controller_at_ff440000 = { - .reg = {0xff440000, 0x1000}, - .rockchip_grf = 0x3a, -}; -U_BOOT_DRVINFO(clock_controller_at_ff440000) = { - .name = "rockchip_rk3328_cru", - .plat = &dtv_clock_controller_at_ff440000, - .plat_size = sizeof(dtv_clock_controller_at_ff440000), - .parent_idx = -1, -}; - -/* Node /dmc index 1 */ -static 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_DRVINFO(dmc) = { - .name = "rockchip_rk3328_dmc", - .plat = &dtv_dmc, - .plat_size = sizeof(dtv_dmc), - .parent_idx = -1, -}; - -/* Node /mmc@ff500000 index 2 */ -static struct dtd_rockchip_rk3288_dw_mshc dtv_mmc_at_ff500000 = { - .bus_width = 0x4, - .cap_sd_highspeed = true, - .clocks = { - {0, {317}}, - {0, {33}}, - {0, {74}}, - {0, {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}, - .sd_uhs_sdr104 = true, - .sd_uhs_sdr12 = true, - .sd_uhs_sdr25 = true, - .sd_uhs_sdr50 = true, - .u_boot_spl_fifo_mode = true, - .vmmc_supply = 0x4b, - .vqmmc_supply = 0x1e, -}; -U_BOOT_DRVINFO(mmc_at_ff500000) = { - .name = "rockchip_rk3288_dw_mshc", - .plat = &dtv_mmc_at_ff500000, - .plat_size = sizeof(dtv_mmc_at_ff500000), - .parent_idx = -1, -}; - -/* Node /serial@ff130000 index 3 */ -static struct dtd_ns16550_serial dtv_serial_at_ff130000 = { - .clock_frequency = 0x16e3600, - .clocks = { - {0, {40}}, - {0, {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_DRVINFO(serial_at_ff130000) = { - .name = "ns16550_serial", - .plat = &dtv_serial_at_ff130000, - .plat_size = sizeof(dtv_serial_at_ff130000), - .parent_idx = -1, -}; - -/* Node /syscon@ff100000 index 4 */ -static struct dtd_rockchip_rk3328_grf dtv_syscon_at_ff100000 = { - .reg = {0xff100000, 0x1000}, -}; -U_BOOT_DRVINFO(syscon_at_ff100000) = { - .name = "rockchip_rk3328_grf", - .plat = &dtv_syscon_at_ff100000, - .plat_size = sizeof(dtv_syscon_at_ff100000), - .parent_idx = -1, -}; - diff --git a/package/boot/uboot-rockchip/src/of-platdata/doornet1-rk3328/dt-structs-gen.h b/package/boot/uboot-rockchip/src/of-platdata/doornet1-rk3328/dt-structs-gen.h deleted file mode 100644 index b1ff08a92..000000000 --- a/package/boot/uboot-rockchip/src/of-platdata/doornet1-rk3328/dt-structs-gen.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * DO NOT MODIFY - * - * Defines the structs used to hold devicetree data. - * This was generated by dtoc from a .dtb (device tree binary) file. - */ - -#include -#include -struct dtd_ns16550_serial { - 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; -}; -struct dtd_rockchip_rk3288_dw_mshc { - fdt32_t bus_width; - 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 sd_uhs_sdr104; - bool sd_uhs_sdr12; - bool sd_uhs_sdr25; - bool sd_uhs_sdr50; - bool u_boot_spl_fifo_mode; - fdt32_t vmmc_supply; - fdt32_t vqmmc_supply; -}; -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_grf { - fdt64_t reg[2]; -}; diff --git a/package/boot/uboot-rockchip/src/of-platdata/nanopi-r2c-rk3328/dt-decl.h b/package/boot/uboot-rockchip/src/of-platdata/nanopi-r2c-rk3328/dt-decl.h deleted file mode 100644 index 0919e4ed5..000000000 --- a/package/boot/uboot-rockchip/src/of-platdata/nanopi-r2c-rk3328/dt-decl.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * DO NOT MODIFY - * - * Declares externs for all device/uclass instances. - * This was generated by dtoc from a .dtb (device tree binary) file. - */ - -#include -#include - -/* driver declarations - these allow DM_DRIVER_GET() to be used */ -extern U_BOOT_DRIVER(rockchip_rk3328_cru); -extern U_BOOT_DRIVER(rockchip_rk3328_dmc); -extern U_BOOT_DRIVER(rockchip_rk3288_dw_mshc); -extern U_BOOT_DRIVER(ns16550_serial); -extern U_BOOT_DRIVER(rockchip_rk3328_grf); - -/* uclass driver declarations - needed for DM_UCLASS_DRIVER_REF() */ -extern UCLASS_DRIVER(clk); -extern UCLASS_DRIVER(mmc); -extern UCLASS_DRIVER(ram); -extern UCLASS_DRIVER(serial); -extern UCLASS_DRIVER(syscon); diff --git a/package/boot/uboot-rockchip/src/of-platdata/nanopi-r2c-rk3328/dt-plat.c b/package/boot/uboot-rockchip/src/of-platdata/nanopi-r2c-rk3328/dt-plat.c deleted file mode 100644 index e5b330c9d..000000000 --- a/package/boot/uboot-rockchip/src/of-platdata/nanopi-r2c-rk3328/dt-plat.c +++ /dev/null @@ -1,155 +0,0 @@ -/* - * DO NOT MODIFY - * - * Declares the U_BOOT_DRIVER() records and platform data. - * This was generated by dtoc from a .dtb (device tree binary) file. - */ - -/* Allow use of U_BOOT_DRVINFO() in this file */ -#define DT_PLAT_C - -#include -#include -#include - -/* - * driver_info declarations, ordered by 'struct driver_info' linker_list idx: - * - * idx driver_info driver - * --- -------------------- -------------------- - * 0: clock_controller_at_ff440000 rockchip_rk3328_cru - * 1: dmc rockchip_rk3328_dmc - * 2: mmc_at_ff500000 rockchip_rk3288_dw_mshc - * 3: serial_at_ff130000 ns16550_serial - * 4: syscon_at_ff100000 rockchip_rk3328_grf - * --- -------------------- -------------------- - */ - -/* - * Node /clock-controller@ff440000 index 0 - * driver rockchip_rk3328_cru parent None - */ -static struct dtd_rockchip_rk3328_cru dtv_clock_controller_at_ff440000 = { - .reg = {0xff440000, 0x1000}, - .rockchip_grf = 0x3a, -}; -U_BOOT_DRVINFO(clock_controller_at_ff440000) = { - .name = "rockchip_rk3328_cru", - .plat = &dtv_clock_controller_at_ff440000, - .plat_size = sizeof(dtv_clock_controller_at_ff440000), - .parent_idx = -1, -}; - -/* - * Node /dmc index 1 - * driver rockchip_rk3328_dmc parent None - */ -static 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_DRVINFO(dmc) = { - .name = "rockchip_rk3328_dmc", - .plat = &dtv_dmc, - .plat_size = sizeof(dtv_dmc), - .parent_idx = -1, -}; - -/* - * Node /mmc@ff500000 index 2 - * driver rockchip_rk3288_dw_mshc parent None - */ -static struct dtd_rockchip_rk3288_dw_mshc dtv_mmc_at_ff500000 = { - .bus_width = 0x4, - .cap_sd_highspeed = true, - .clocks = { - {0, {317}}, - {0, {33}}, - {0, {74}}, - {0, {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}, - .sd_uhs_sdr104 = true, - .sd_uhs_sdr12 = true, - .sd_uhs_sdr25 = true, - .sd_uhs_sdr50 = true, - .u_boot_spl_fifo_mode = true, - .vmmc_supply = 0x4b, - .vqmmc_supply = 0x1e, -}; -U_BOOT_DRVINFO(mmc_at_ff500000) = { - .name = "rockchip_rk3288_dw_mshc", - .plat = &dtv_mmc_at_ff500000, - .plat_size = sizeof(dtv_mmc_at_ff500000), - .parent_idx = -1, -}; - -/* - * Node /serial@ff130000 index 3 - * driver ns16550_serial parent None - */ -static struct dtd_ns16550_serial dtv_serial_at_ff130000 = { - .clock_frequency = 0x16e3600, - .clocks = { - {0, {40}}, - {0, {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_DRVINFO(serial_at_ff130000) = { - .name = "ns16550_serial", - .plat = &dtv_serial_at_ff130000, - .plat_size = sizeof(dtv_serial_at_ff130000), - .parent_idx = -1, -}; - -/* - * Node /syscon@ff100000 index 4 - * driver rockchip_rk3328_grf parent None - */ -static struct dtd_rockchip_rk3328_grf dtv_syscon_at_ff100000 = { - .reg = {0xff100000, 0x1000}, -}; -U_BOOT_DRVINFO(syscon_at_ff100000) = { - .name = "rockchip_rk3328_grf", - .plat = &dtv_syscon_at_ff100000, - .plat_size = sizeof(dtv_syscon_at_ff100000), - .parent_idx = -1, -}; - diff --git a/package/boot/uboot-rockchip/src/of-platdata/nanopi-r2c-rk3328/dt-structs-gen.h b/package/boot/uboot-rockchip/src/of-platdata/nanopi-r2c-rk3328/dt-structs-gen.h deleted file mode 100644 index b1ff08a92..000000000 --- a/package/boot/uboot-rockchip/src/of-platdata/nanopi-r2c-rk3328/dt-structs-gen.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * DO NOT MODIFY - * - * Defines the structs used to hold devicetree data. - * This was generated by dtoc from a .dtb (device tree binary) file. - */ - -#include -#include -struct dtd_ns16550_serial { - 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; -}; -struct dtd_rockchip_rk3288_dw_mshc { - fdt32_t bus_width; - 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 sd_uhs_sdr104; - bool sd_uhs_sdr12; - bool sd_uhs_sdr25; - bool sd_uhs_sdr50; - bool u_boot_spl_fifo_mode; - fdt32_t vmmc_supply; - fdt32_t vqmmc_supply; -}; -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_grf { - fdt64_t reg[2]; -}; diff --git a/package/boot/uboot-rockchip/src/of-platdata/nanopi-r2s-rk3328/dt-decl.h b/package/boot/uboot-rockchip/src/of-platdata/nanopi-r2s-rk3328/dt-decl.h deleted file mode 100644 index 0919e4ed5..000000000 --- a/package/boot/uboot-rockchip/src/of-platdata/nanopi-r2s-rk3328/dt-decl.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * DO NOT MODIFY - * - * Declares externs for all device/uclass instances. - * This was generated by dtoc from a .dtb (device tree binary) file. - */ - -#include -#include - -/* driver declarations - these allow DM_DRIVER_GET() to be used */ -extern U_BOOT_DRIVER(rockchip_rk3328_cru); -extern U_BOOT_DRIVER(rockchip_rk3328_dmc); -extern U_BOOT_DRIVER(rockchip_rk3288_dw_mshc); -extern U_BOOT_DRIVER(ns16550_serial); -extern U_BOOT_DRIVER(rockchip_rk3328_grf); - -/* uclass driver declarations - needed for DM_UCLASS_DRIVER_REF() */ -extern UCLASS_DRIVER(clk); -extern UCLASS_DRIVER(mmc); -extern UCLASS_DRIVER(ram); -extern UCLASS_DRIVER(serial); -extern UCLASS_DRIVER(syscon); diff --git a/package/boot/uboot-rockchip/src/of-platdata/nanopi-r2s-rk3328/dt-plat.c b/package/boot/uboot-rockchip/src/of-platdata/nanopi-r2s-rk3328/dt-plat.c deleted file mode 100644 index e5b330c9d..000000000 --- a/package/boot/uboot-rockchip/src/of-platdata/nanopi-r2s-rk3328/dt-plat.c +++ /dev/null @@ -1,155 +0,0 @@ -/* - * DO NOT MODIFY - * - * Declares the U_BOOT_DRIVER() records and platform data. - * This was generated by dtoc from a .dtb (device tree binary) file. - */ - -/* Allow use of U_BOOT_DRVINFO() in this file */ -#define DT_PLAT_C - -#include -#include -#include - -/* - * driver_info declarations, ordered by 'struct driver_info' linker_list idx: - * - * idx driver_info driver - * --- -------------------- -------------------- - * 0: clock_controller_at_ff440000 rockchip_rk3328_cru - * 1: dmc rockchip_rk3328_dmc - * 2: mmc_at_ff500000 rockchip_rk3288_dw_mshc - * 3: serial_at_ff130000 ns16550_serial - * 4: syscon_at_ff100000 rockchip_rk3328_grf - * --- -------------------- -------------------- - */ - -/* - * Node /clock-controller@ff440000 index 0 - * driver rockchip_rk3328_cru parent None - */ -static struct dtd_rockchip_rk3328_cru dtv_clock_controller_at_ff440000 = { - .reg = {0xff440000, 0x1000}, - .rockchip_grf = 0x3a, -}; -U_BOOT_DRVINFO(clock_controller_at_ff440000) = { - .name = "rockchip_rk3328_cru", - .plat = &dtv_clock_controller_at_ff440000, - .plat_size = sizeof(dtv_clock_controller_at_ff440000), - .parent_idx = -1, -}; - -/* - * Node /dmc index 1 - * driver rockchip_rk3328_dmc parent None - */ -static 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_DRVINFO(dmc) = { - .name = "rockchip_rk3328_dmc", - .plat = &dtv_dmc, - .plat_size = sizeof(dtv_dmc), - .parent_idx = -1, -}; - -/* - * Node /mmc@ff500000 index 2 - * driver rockchip_rk3288_dw_mshc parent None - */ -static struct dtd_rockchip_rk3288_dw_mshc dtv_mmc_at_ff500000 = { - .bus_width = 0x4, - .cap_sd_highspeed = true, - .clocks = { - {0, {317}}, - {0, {33}}, - {0, {74}}, - {0, {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}, - .sd_uhs_sdr104 = true, - .sd_uhs_sdr12 = true, - .sd_uhs_sdr25 = true, - .sd_uhs_sdr50 = true, - .u_boot_spl_fifo_mode = true, - .vmmc_supply = 0x4b, - .vqmmc_supply = 0x1e, -}; -U_BOOT_DRVINFO(mmc_at_ff500000) = { - .name = "rockchip_rk3288_dw_mshc", - .plat = &dtv_mmc_at_ff500000, - .plat_size = sizeof(dtv_mmc_at_ff500000), - .parent_idx = -1, -}; - -/* - * Node /serial@ff130000 index 3 - * driver ns16550_serial parent None - */ -static struct dtd_ns16550_serial dtv_serial_at_ff130000 = { - .clock_frequency = 0x16e3600, - .clocks = { - {0, {40}}, - {0, {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_DRVINFO(serial_at_ff130000) = { - .name = "ns16550_serial", - .plat = &dtv_serial_at_ff130000, - .plat_size = sizeof(dtv_serial_at_ff130000), - .parent_idx = -1, -}; - -/* - * Node /syscon@ff100000 index 4 - * driver rockchip_rk3328_grf parent None - */ -static struct dtd_rockchip_rk3328_grf dtv_syscon_at_ff100000 = { - .reg = {0xff100000, 0x1000}, -}; -U_BOOT_DRVINFO(syscon_at_ff100000) = { - .name = "rockchip_rk3328_grf", - .plat = &dtv_syscon_at_ff100000, - .plat_size = sizeof(dtv_syscon_at_ff100000), - .parent_idx = -1, -}; - 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 deleted file mode 100644 index b1ff08a92..000000000 --- a/package/boot/uboot-rockchip/src/of-platdata/nanopi-r2s-rk3328/dt-structs-gen.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * DO NOT MODIFY - * - * Defines the structs used to hold devicetree data. - * This was generated by dtoc from a .dtb (device tree binary) file. - */ - -#include -#include -struct dtd_ns16550_serial { - 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; -}; -struct dtd_rockchip_rk3288_dw_mshc { - fdt32_t bus_width; - 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 sd_uhs_sdr104; - bool sd_uhs_sdr12; - bool sd_uhs_sdr25; - bool sd_uhs_sdr50; - bool u_boot_spl_fifo_mode; - fdt32_t vmmc_supply; - fdt32_t vqmmc_supply; -}; -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_grf { - fdt64_t reg[2]; -}; diff --git a/package/boot/uboot-rockchip/src/of-platdata/orangepi-r1-plus-lts-rk3328/dt-decl.h b/package/boot/uboot-rockchip/src/of-platdata/orangepi-r1-plus-lts-rk3328/dt-decl.h deleted file mode 100644 index 06889b0b4..000000000 --- a/package/boot/uboot-rockchip/src/of-platdata/orangepi-r1-plus-lts-rk3328/dt-decl.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * DO NOT MODIFY - * - * Declares externs for all device/uclass instances. - * This was generated by dtoc from a .dtb (device tree binary) file. - */ - -#include -#include - -/* driver declarations - these allow DM_DRIVER_GET() to be used */ -extern U_BOOT_DRIVER(rockchip_rk3328_cru); -extern U_BOOT_DRIVER(rockchip_rk3328_dmc); -extern U_BOOT_DRIVER(rockchip_rk3288_dw_mshc); -extern U_BOOT_DRIVER(ns16550_serial); -extern U_BOOT_DRIVER(rockchip_rk3328_grf); - -/* uclass driver declarations - needed for DM_UCLASS_DRIVER_REF() */ -extern UCLASS_DRIVER(clk); -extern UCLASS_DRIVER(mmc); -extern UCLASS_DRIVER(ram); -extern UCLASS_DRIVER(serial); -extern UCLASS_DRIVER(syscon); \ No newline at end of file diff --git a/package/boot/uboot-rockchip/src/of-platdata/orangepi-r1-plus-lts-rk3328/dt-plat.c b/package/boot/uboot-rockchip/src/of-platdata/orangepi-r1-plus-lts-rk3328/dt-plat.c deleted file mode 100644 index 42468f38a..000000000 --- a/package/boot/uboot-rockchip/src/of-platdata/orangepi-r1-plus-lts-rk3328/dt-plat.c +++ /dev/null @@ -1,154 +0,0 @@ -/* - * DO NOT MODIFY - * - * Declares the U_BOOT_DRIVER() records and platform data. - * This was generated by dtoc from a .dtb (device tree binary) file. - */ - -/* Allow use of U_BOOT_DRVINFO() in this file */ -#define DT_PLAT_C - -#include -#include -#include - -/* - * driver_info declarations, ordered by 'struct driver_info' linker_list idx: - * - * idx driver_info driver - * --- -------------------- -------------------- - * 0: clock_controller_at_ff440000 rockchip_rk3328_cru - * 1: dmc rockchip_rk3328_dmc - * 2: mmc_at_ff500000 rockchip_rk3288_dw_mshc - * 3: serial_at_ff130000 ns16550_serial - * 4: syscon_at_ff100000 rockchip_rk3328_grf - * --- -------------------- -------------------- - */ - -/* - * Node /clock-controller@ff440000 index 0 - * driver rockchip_rk3328_cru parent None - */ -static struct dtd_rockchip_rk3328_cru dtv_clock_controller_at_ff440000 = { - .reg = {0xff440000, 0x1000}, - .rockchip_grf = 0x3a, -}; -U_BOOT_DRVINFO(clock_controller_at_ff440000) = { - .name = "rockchip_rk3328_cru", - .plat = &dtv_clock_controller_at_ff440000, - .plat_size = sizeof(dtv_clock_controller_at_ff440000), - .parent_idx = -1, -}; - -/* - * Node /dmc index 1 - * driver rockchip_rk3328_dmc parent None - */ -static 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_DRVINFO(dmc) = { - .name = "rockchip_rk3328_dmc", - .plat = &dtv_dmc, - .plat_size = sizeof(dtv_dmc), - .parent_idx = -1, -}; - -/* - * Node /mmc@ff500000 index 2 - * driver rockchip_rk3288_dw_mshc parent None - */ -static struct dtd_rockchip_rk3288_dw_mshc dtv_mmc_at_ff500000 = { - .bus_width = 0x4, - .cap_sd_highspeed = true, - .clocks = { - {0, {317}}, - {0, {33}}, - {0, {74}}, - {0, {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}, - .sd_uhs_sdr104 = true, - .sd_uhs_sdr12 = true, - .sd_uhs_sdr25 = true, - .sd_uhs_sdr50 = true, - .u_boot_spl_fifo_mode = true, - .vmmc_supply = 0x4b, - .vqmmc_supply = 0x1e, -}; -U_BOOT_DRVINFO(mmc_at_ff500000) = { - .name = "rockchip_rk3288_dw_mshc", - .plat = &dtv_mmc_at_ff500000, - .plat_size = sizeof(dtv_mmc_at_ff500000), - .parent_idx = -1, -}; - -/* - * Node /serial@ff130000 index 3 - * driver ns16550_serial parent None - */ -static struct dtd_ns16550_serial dtv_serial_at_ff130000 = { - .clock_frequency = 0x16e3600, - .clocks = { - {0, {40}}, - {0, {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_DRVINFO(serial_at_ff130000) = { - .name = "ns16550_serial", - .plat = &dtv_serial_at_ff130000, - .plat_size = sizeof(dtv_serial_at_ff130000), - .parent_idx = -1, -}; - -/* - * Node /syscon@ff100000 index 4 - * driver rockchip_rk3328_grf parent None - */ -static struct dtd_rockchip_rk3328_grf dtv_syscon_at_ff100000 = { - .reg = {0xff100000, 0x1000}, -}; -U_BOOT_DRVINFO(syscon_at_ff100000) = { - .name = "rockchip_rk3328_grf", - .plat = &dtv_syscon_at_ff100000, - .plat_size = sizeof(dtv_syscon_at_ff100000), - .parent_idx = -1, -}; diff --git a/package/boot/uboot-rockchip/src/of-platdata/orangepi-r1-plus-lts-rk3328/dt-structs-gen.h b/package/boot/uboot-rockchip/src/of-platdata/orangepi-r1-plus-lts-rk3328/dt-structs-gen.h deleted file mode 100644 index 364d416f7..000000000 --- a/package/boot/uboot-rockchip/src/of-platdata/orangepi-r1-plus-lts-rk3328/dt-structs-gen.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * DO NOT MODIFY - * - * Defines the structs used to hold devicetree data. - * This was generated by dtoc from a .dtb (device tree binary) file. - */ - -#include -#include -struct dtd_ns16550_serial { - 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; -}; -struct dtd_rockchip_rk3288_dw_mshc { - fdt32_t bus_width; - 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 sd_uhs_sdr104; - bool sd_uhs_sdr12; - bool sd_uhs_sdr25; - bool sd_uhs_sdr50; - bool u_boot_spl_fifo_mode; - fdt32_t vmmc_supply; - fdt32_t vqmmc_supply; -}; -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_grf { - fdt64_t reg[2]; -}; \ No newline at end of file diff --git a/package/boot/uboot-rockchip/src/of-platdata/orangepi-r1-plus-rk3328/dt-decl.h b/package/boot/uboot-rockchip/src/of-platdata/orangepi-r1-plus-rk3328/dt-decl.h deleted file mode 100644 index 0919e4ed5..000000000 --- a/package/boot/uboot-rockchip/src/of-platdata/orangepi-r1-plus-rk3328/dt-decl.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * DO NOT MODIFY - * - * Declares externs for all device/uclass instances. - * This was generated by dtoc from a .dtb (device tree binary) file. - */ - -#include -#include - -/* driver declarations - these allow DM_DRIVER_GET() to be used */ -extern U_BOOT_DRIVER(rockchip_rk3328_cru); -extern U_BOOT_DRIVER(rockchip_rk3328_dmc); -extern U_BOOT_DRIVER(rockchip_rk3288_dw_mshc); -extern U_BOOT_DRIVER(ns16550_serial); -extern U_BOOT_DRIVER(rockchip_rk3328_grf); - -/* uclass driver declarations - needed for DM_UCLASS_DRIVER_REF() */ -extern UCLASS_DRIVER(clk); -extern UCLASS_DRIVER(mmc); -extern UCLASS_DRIVER(ram); -extern UCLASS_DRIVER(serial); -extern UCLASS_DRIVER(syscon); diff --git a/package/boot/uboot-rockchip/src/of-platdata/orangepi-r1-plus-rk3328/dt-plat.c b/package/boot/uboot-rockchip/src/of-platdata/orangepi-r1-plus-rk3328/dt-plat.c deleted file mode 100644 index e5b330c9d..000000000 --- a/package/boot/uboot-rockchip/src/of-platdata/orangepi-r1-plus-rk3328/dt-plat.c +++ /dev/null @@ -1,155 +0,0 @@ -/* - * DO NOT MODIFY - * - * Declares the U_BOOT_DRIVER() records and platform data. - * This was generated by dtoc from a .dtb (device tree binary) file. - */ - -/* Allow use of U_BOOT_DRVINFO() in this file */ -#define DT_PLAT_C - -#include -#include -#include - -/* - * driver_info declarations, ordered by 'struct driver_info' linker_list idx: - * - * idx driver_info driver - * --- -------------------- -------------------- - * 0: clock_controller_at_ff440000 rockchip_rk3328_cru - * 1: dmc rockchip_rk3328_dmc - * 2: mmc_at_ff500000 rockchip_rk3288_dw_mshc - * 3: serial_at_ff130000 ns16550_serial - * 4: syscon_at_ff100000 rockchip_rk3328_grf - * --- -------------------- -------------------- - */ - -/* - * Node /clock-controller@ff440000 index 0 - * driver rockchip_rk3328_cru parent None - */ -static struct dtd_rockchip_rk3328_cru dtv_clock_controller_at_ff440000 = { - .reg = {0xff440000, 0x1000}, - .rockchip_grf = 0x3a, -}; -U_BOOT_DRVINFO(clock_controller_at_ff440000) = { - .name = "rockchip_rk3328_cru", - .plat = &dtv_clock_controller_at_ff440000, - .plat_size = sizeof(dtv_clock_controller_at_ff440000), - .parent_idx = -1, -}; - -/* - * Node /dmc index 1 - * driver rockchip_rk3328_dmc parent None - */ -static 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_DRVINFO(dmc) = { - .name = "rockchip_rk3328_dmc", - .plat = &dtv_dmc, - .plat_size = sizeof(dtv_dmc), - .parent_idx = -1, -}; - -/* - * Node /mmc@ff500000 index 2 - * driver rockchip_rk3288_dw_mshc parent None - */ -static struct dtd_rockchip_rk3288_dw_mshc dtv_mmc_at_ff500000 = { - .bus_width = 0x4, - .cap_sd_highspeed = true, - .clocks = { - {0, {317}}, - {0, {33}}, - {0, {74}}, - {0, {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}, - .sd_uhs_sdr104 = true, - .sd_uhs_sdr12 = true, - .sd_uhs_sdr25 = true, - .sd_uhs_sdr50 = true, - .u_boot_spl_fifo_mode = true, - .vmmc_supply = 0x4b, - .vqmmc_supply = 0x1e, -}; -U_BOOT_DRVINFO(mmc_at_ff500000) = { - .name = "rockchip_rk3288_dw_mshc", - .plat = &dtv_mmc_at_ff500000, - .plat_size = sizeof(dtv_mmc_at_ff500000), - .parent_idx = -1, -}; - -/* - * Node /serial@ff130000 index 3 - * driver ns16550_serial parent None - */ -static struct dtd_ns16550_serial dtv_serial_at_ff130000 = { - .clock_frequency = 0x16e3600, - .clocks = { - {0, {40}}, - {0, {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_DRVINFO(serial_at_ff130000) = { - .name = "ns16550_serial", - .plat = &dtv_serial_at_ff130000, - .plat_size = sizeof(dtv_serial_at_ff130000), - .parent_idx = -1, -}; - -/* - * Node /syscon@ff100000 index 4 - * driver rockchip_rk3328_grf parent None - */ -static struct dtd_rockchip_rk3328_grf dtv_syscon_at_ff100000 = { - .reg = {0xff100000, 0x1000}, -}; -U_BOOT_DRVINFO(syscon_at_ff100000) = { - .name = "rockchip_rk3328_grf", - .plat = &dtv_syscon_at_ff100000, - .plat_size = sizeof(dtv_syscon_at_ff100000), - .parent_idx = -1, -}; - diff --git a/package/boot/uboot-rockchip/src/of-platdata/orangepi-r1-plus-rk3328/dt-structs-gen.h b/package/boot/uboot-rockchip/src/of-platdata/orangepi-r1-plus-rk3328/dt-structs-gen.h deleted file mode 100644 index b1ff08a92..000000000 --- a/package/boot/uboot-rockchip/src/of-platdata/orangepi-r1-plus-rk3328/dt-structs-gen.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * DO NOT MODIFY - * - * Defines the structs used to hold devicetree data. - * This was generated by dtoc from a .dtb (device tree binary) file. - */ - -#include -#include -struct dtd_ns16550_serial { - 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; -}; -struct dtd_rockchip_rk3288_dw_mshc { - fdt32_t bus_width; - 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 sd_uhs_sdr104; - bool sd_uhs_sdr12; - bool sd_uhs_sdr25; - bool sd_uhs_sdr50; - bool u_boot_spl_fifo_mode; - fdt32_t vmmc_supply; - fdt32_t vqmmc_supply; -}; -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_grf { - fdt64_t reg[2]; -};