From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:38733) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gPGSE-0005dF-Tz for guix-patches@gnu.org; Tue, 20 Nov 2018 19:33:24 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gPGS1-0005NS-1X for guix-patches@gnu.org; Tue, 20 Nov 2018 19:33:14 -0500 Received: from debbugs.gnu.org ([208.118.235.43]:33330) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1gPGRy-0005LE-4o for guix-patches@gnu.org; Tue, 20 Nov 2018 19:33:02 -0500 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1gPGRx-0005fD-SH for guix-patches@gnu.org; Tue, 20 Nov 2018 19:33:01 -0500 Subject: [bug#33447] Patch series to support pinebook Resent-Message-ID: From: Vagrant Cascadian In-Reply-To: <20181120235250.65eff9ac@scratchpost.org> References: <878t1nv3wd.fsf@aikidev.net> <20181120235250.65eff9ac@scratchpost.org> Date: Tue, 20 Nov 2018 16:32:16 -0800 Message-ID: <875zwruv73.fsf@aikidev.net> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="==-=-="; micalg=pgp-sha512; protocol="application/pgp-signature" List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+kyle=kyleam.com@gnu.org Sender: "Guix-patches" To: Danny Milosavljevic Cc: 33447@debbugs.gnu.org --==-=-= Content-Type: multipart/mixed; boundary="=-=-=" --=-=-= Content-Type: text/plain On 2018-11-20, Danny Milosavljevic wrote: > On Tue, 20 Nov 2018 13:24:18 -0800 > Vagrant Cascadian wrote: >> Summary of changes: >> - Update arm-trusted-firmware-pine64-plus to use upstream git repository >> and newer commit. > > Hmm, okay for now - would be nice to eventually use a stable release. Well, it will presumably be in the next release finally! I did have a minor patch update to update arm-trusted-firmware to v2.0, but there aren't yet any targets that can make use of that without loosing functionality. >> - Rename arm-trusted-firmware-pine64-plus to >> arm-trusted-firmware-sun50i-a64 to be consistant with upstream. > > OK! > >> - Add a make-u-boot-package-sunxi64 wrapper function based on the >> u-boot-pine64-plus target. > > OK except for the name :) Works for me. I did notice the os-with-u-boot and various other functions which directly call make-u-boot-package will break with this. Though for targets that need additions on top of make-u-boot-package anyways (pine64, pinebook, puma-rk3399) those still break anyways. >> - Add support for u-boot-pinebook, with patches from the u-boot sunxi >> maintainer tree backported to 2018.11. > > OK! > >> I wasn't sure weather some of these patches should be squashed together >> or not (especially 1 and 2, maybe 3 and 4). > > I'm always trying to keep user-visible changes apart as much as possible > (in extra commits). > > The reason is that if we decide to only partially apply, it's much easier > to do it (also to be able to revert only part and keep the functionality > intact). > > For example the renaming of a public variable is something that's visible > to the user but not essential to the functioning of the thing. > If it turns out to cause trouble, we could back just that one out. Makes sense to me, thanks for the explanation. >> I used patches on top of the u-boot 2018.11 release rather than a git >> repository with the patches included, as it took a much longer time to >> download the git respository and more disk space, though I can take >> another look at using the git repository if that is preferred. > > I prefer patches on top of a release to using a different git repository - > the latter can be a real drain on us since we want to verify the integrity of > the external repository - if there are too many of those in Guix. Ok. > That said, there are exceptions, but in this specific case I'd definitely > keep it as release & patches because it makes it obvious how invasive we > are in patching our package (Note: I agree that we should do patch it in > this case - some of the patches are to undo upstream breaking backward > compatibility, others are to add new platforms, others are to increase > resilience; also, they come from u-boot-sunxi anyway). Works for me. FWIW these patches landed in mainline u-boot git since I started working on it, so only need to be maintained ~2 months more. :) > In the end, your patchset failed to apply cleanly. Nevertheless, I've > cleaned up the first three patches (changed the commit message to our > conventions; also took the liberty to rename "make-u-boot-package-sunxi64" > to "make-u-boot-sunxi64-package") and pushed those to guix master since > they are self-contained. Great! > Could you send a variant of patch 4/4 that applies cleanly? (this one > fails because of conflicting changes in gnu/local.mk) > > Also, could you use small letters in the name of the files of the patches > in gnu/packages/patches ? Updated patch, with lower case and some slight renaming of the patches, and updated make-u-boot-sunxi64-package call. Thanks! live well, vagrant --=-=-= Content-Type: text/x-diff; charset=utf-8 Content-Disposition: inline; filename=0001-gnu-u-boot-pinebook-New-variable.patch Content-Transfer-Encoding: quoted-printable From=205b74df888e2589bc3ae3d0ac1ba66822ab26a127 Mon Sep 17 00:00:00 2001 From: Vagrant Cascadian Date: Sun, 21 Oct 2018 20:09:12 -0700 Subject: [PATCH] gnu: u-boot-pinebook: New variable. * gnu/packages/patches: Add patches: u-boot-pinebook-a64-update-dts.patch u-boot-pinebook-syscon-node.patch u-boot-pinebook-mmc-calibration.patch u-boot-pinebook-video-bridge.patch u-boot-pinebook-r_i2c-controller.patch u-boot-pinebook-dts.patch * gnu/local.mk (dist_patch_DATA): Register patches. * gnu/packages/bootloaders.scm (u-boot-pinebook): New variable. * gnu/bootloader/u-boot.scm (u-boot-pinebook-bootloader): New exported vari= able. * gnu/system/install.scm (pinebook-installation-os): New exported variable. =2D-- gnu/bootloader/u-boot.scm | 6 + gnu/local.mk | 6 + gnu/packages/bootloaders.scm | 16 + .../patches/u-boot-pinebook-a64-update-dts.patch | 1485 ++++++++++++++++= ++++ gnu/packages/patches/u-boot-pinebook-dts.patch | 388 +++++ .../patches/u-boot-pinebook-mmc-calibration.patch | 98 ++ .../patches/u-boot-pinebook-r_i2c-controller.patch | 70 + .../patches/u-boot-pinebook-syscon-node.patch | 38 + .../patches/u-boot-pinebook-video-bridge.patch | 50 + gnu/system/install.scm | 6 + 10 files changed, 2163 insertions(+) create mode 100644 gnu/packages/patches/u-boot-pinebook-a64-update-dts.pat= ch create mode 100644 gnu/packages/patches/u-boot-pinebook-dts.patch create mode 100644 gnu/packages/patches/u-boot-pinebook-mmc-calibration.pa= tch create mode 100644 gnu/packages/patches/u-boot-pinebook-r_i2c-controller.p= atch create mode 100644 gnu/packages/patches/u-boot-pinebook-syscon-node.patch create mode 100644 gnu/packages/patches/u-boot-pinebook-video-bridge.patch diff --git a/gnu/bootloader/u-boot.scm b/gnu/bootloader/u-boot.scm index b5fab14e1..1c6f322bc 100644 =2D-- a/gnu/bootloader/u-boot.scm +++ b/gnu/bootloader/u-boot.scm @@ -32,6 +32,7 @@ u-boot-nintendo-nes-classic-edition-bootloader u-boot-novena-bootloader u-boot-pine64-plus-bootloader + u-boot-pinebook-bootloader u-boot-puma-rk3399-bootloader u-boot-wandboard-bootloader)) =20 @@ -168,6 +169,11 @@ (inherit u-boot-allwinner64-bootloader) (package u-boot-pine64-plus))) =20 +(define u-boot-pinebook-bootloader + (bootloader + (inherit u-boot-allwinner64-bootloader) + (package u-boot-pinebook))) + (define u-boot-puma-rk3399-bootloader (bootloader (inherit u-boot-bootloader) diff --git a/gnu/local.mk b/gnu/local.mk index 7fc8fb062..c56278e93 100644 =2D-- a/gnu/local.mk +++ b/gnu/local.mk @@ -1186,6 +1186,12 @@ dist_patch_DATA =3D \ %D%/packages/patches/totem-meson-easy-codec.patch \ %D%/packages/patches/tuxpaint-stamps-path.patch \ %D%/packages/patches/twinkle-include-qregexpvalidator.patch \ + %D%/packages/patches/u-boot-pinebook-a64-update-dts.patch \ + %D%/packages/patches/u-boot-pinebook-mmc-calibration.patch \ + %D%/packages/patches/u-boot-pinebook-r_i2c-controller.patch \ + %D%/packages/patches/u-boot-pinebook-dts.patch \ + %D%/packages/patches/u-boot-pinebook-syscon-node.patch \ + %D%/packages/patches/u-boot-pinebook-video-bridge.patch \ %D%/packages/patches/unrtf-CVE-2016-10091.patch \ %D%/packages/patches/unzip-CVE-2014-8139.patch \ %D%/packages/patches/unzip-CVE-2014-8140.patch \ diff --git a/gnu/packages/bootloaders.scm b/gnu/packages/bootloaders.scm index 328e834bc..0c1163915 100644 =2D-- a/gnu/packages/bootloaders.scm +++ b/gnu/packages/bootloaders.scm @@ -579,6 +579,22 @@ board-independent tools."))) (define-public u-boot-pine64-plus (make-u-boot-sunxi64-package "pine64_plus" "aarch64-linux-gnu")) =20 +(define-public u-boot-pinebook + (let ((base (make-u-boot-sunxi64-package "pinebook" "aarch64-linux-gnu")= )) + (package + (inherit base) + (source (origin + (inherit (package-source u-boot)) + (patches (search-patches + ;; Add patches to enable Pinebook support from sun= xi + ;; maintainer tree: git://git.denx.de/u-boot-sunxi= .git + "u-boot-pinebook-a64-update-dts.patch" + "u-boot-pinebook-syscon-node.patch" + "u-boot-pinebook-mmc-calibration.patch" + "u-boot-pinebook-video-bridge.patch" + "u-boot-pinebook-r_i2c-controller.patch" + "u-boot-pinebook-dts.patch"))))))) + (define-public u-boot-bananapi-m2-ultra (make-u-boot-package "Bananapi_M2_Ultra" "arm-linux-gnueabihf")) =20 diff --git a/gnu/packages/patches/u-boot-pinebook-a64-update-dts.patch b/gn= u/packages/patches/u-boot-pinebook-a64-update-dts.patch new file mode 100644 index 000000000..9d0a08c8b =2D-- /dev/null +++ b/gnu/packages/patches/u-boot-pinebook-a64-update-dts.patch @@ -0,0 +1,1485 @@ +From 1b39a1834ed182bbd8036a5cd74a9ea111fa4691 Mon Sep 17 00:00:00 2001 +From: Andre Przywara +Date: Mon, 29 Oct 2018 00:56:47 +0000 +Subject: [PATCH 03/13] sunxi: A64: Update .dts/.dtsi files +MIME-Version: 1.0 +Content-Type: text/plain; charset=3DUTF-8 +Content-Transfer-Encoding: 8bit + +Update the .dts/.dtsi file from the Linux sunxi/dt64-for-4.20 tree: +commit 679294497be31596e1c9c61507746d72b6b05f26 +Author: Rodrigo Exterck=C3=B6tter Tj=C3=A4der +Date: Wed Sep 26 19:48:24 2018 +0000 + arm64: dts: allwinner: a64: a64-olinuxino: set the PHY TX delay + +Signed-off-by: Andre Przywara +Acked-by: Maxime Ripard +Reviewed-by: Jagan Teki +--- + arch/arm/dts/sun50i-a64-amarula-relic.dts | 168 +++++++++++++- + arch/arm/dts/sun50i-a64-bananapi-m64.dts | 34 ++- + arch/arm/dts/sun50i-a64-nanopi-a64.dts | 89 +++++++- + arch/arm/dts/sun50i-a64-olinuxino.dts | 103 ++++++++- + arch/arm/dts/sun50i-a64-orangepi-win.dts | 179 ++++++++++++++- + arch/arm/dts/sun50i-a64-pine64.dts | 32 ++- + arch/arm/dts/sun50i-a64-sopine-baseboard.dts | 32 ++- + arch/arm/dts/sun50i-a64-sopine.dtsi | 15 ++ + arch/arm/dts/sun50i-a64.dtsi | 313 ++++++++++++++++++++++= +++-- + 9 files changed, 920 insertions(+), 45 deletions(-) + +diff --git a/arch/arm/dts/sun50i-a64-amarula-relic.dts b/arch/arm/dts/sun5= 0i-a64-amarula-relic.dts +index f3b4e93ece..6cb2b7f0c8 100644 +--- a/arch/arm/dts/sun50i-a64-amarula-relic.dts ++++ b/arch/arm/dts/sun50i-a64-amarula-relic.dts +@@ -22,11 +22,11 @@ + stdout-path =3D "serial0:115200n8"; + }; +=20 +- reg_vcc3v3: vcc3v3 { +- compatible =3D "regulator-fixed"; +- regulator-name =3D "vcc3v3"; +- regulator-min-microvolt =3D <3300000>; +- regulator-max-microvolt =3D <3300000>; ++ wifi_pwrseq: wifi-pwrseq { ++ compatible =3D "mmc-pwrseq-simple"; ++ clocks =3D <&rtc 1>; ++ clock-names =3D "ext_clock"; ++ reset-gpios =3D <&r_pio 0 2 GPIO_ACTIVE_LOW>; /* WL-PMU-EN: PL2 */ + }; + }; +=20 +@@ -34,10 +34,34 @@ + status =3D "okay"; + }; +=20 ++&mmc1 { ++ pinctrl-names =3D "default"; ++ pinctrl-0 =3D <&mmc1_pins>; ++ vmmc-supply =3D <®_dcdc1>; ++ /* ++ * Schematic shows both dldo4 and eldo1 connected for vcc-io-wifi, but ++ * dldo4 connection shows DNP(Do Not Populate) and eldo1 connected with ++ * 0Ohm register to vcc-io-wifi so eldo1 is used. ++ */ ++ vqmmc-supply =3D <®_eldo1>; ++ mmc-pwrseq =3D <&wifi_pwrseq>; ++ bus-width =3D <4>; ++ non-removable; ++ status =3D "okay"; ++ ++ brcmf: wifi@1 { ++ reg =3D <1>; ++ compatible =3D "brcm,bcm4329-fmac"; ++ interrupt-parent =3D <&r_pio>; ++ interrupts =3D <0 3 IRQ_TYPE_LEVEL_LOW>; /* WL-WAKE-AP: PL3 */ ++ interrupt-names =3D "host-wake"; ++ }; ++}; ++ + &mmc2 { + pinctrl-names =3D "default"; + pinctrl-0 =3D <&mmc2_pins>; +- vmmc-supply =3D <®_vcc3v3>; ++ vmmc-supply =3D <®_dcdc1>; + bus-width =3D <8>; + non-removable; + cap-mmc-hw-reset; +@@ -48,9 +72,138 @@ + status =3D "okay"; + }; +=20 ++&r_rsb { ++ status =3D "okay"; ++ ++ axp803: pmic@3a3 { ++ compatible =3D "x-powers,axp803"; ++ reg =3D <0x3a3>; ++ interrupt-parent =3D <&r_intc>; ++ interrupts =3D <0 IRQ_TYPE_LEVEL_LOW>; ++ x-powers,drive-vbus-en; /* set N_VBUSEN as output pin */ ++ }; ++}; ++ ++#include "axp803.dtsi" ++ ++®_aldo1 { ++ regulator-always-on; ++ regulator-min-microvolt =3D <2800000>; ++ regulator-max-microvolt =3D <2800000>; ++ regulator-name =3D "avdd-csi"; ++}; ++ ++®_aldo2 { ++ regulator-always-on; ++ regulator-min-microvolt =3D <1800000>; ++ regulator-max-microvolt =3D <3300000>; ++ regulator-name =3D "vcc-pl"; ++}; ++ ++®_aldo3 { ++ regulator-always-on; ++ regulator-min-microvolt =3D <3000000>; ++ regulator-max-microvolt =3D <3000000>; ++ regulator-name =3D "vcc-pll-avcc"; ++}; ++ ++®_dcdc1 { ++ regulator-always-on; ++ regulator-min-microvolt =3D <3300000>; ++ regulator-max-microvolt =3D <3300000>; ++ regulator-name =3D "vcc-3v3"; ++}; ++ ++®_dcdc2 { ++ regulator-always-on; ++ regulator-min-microvolt =3D <1040000>; ++ regulator-max-microvolt =3D <1300000>; ++ regulator-name =3D "vdd-cpux"; ++}; ++ ++/* DCDC3 is polyphased with DCDC2 */ ++ ++®_dcdc5 { ++ regulator-always-on; ++ regulator-min-microvolt =3D <1500000>; ++ regulator-max-microvolt =3D <1500000>; ++ regulator-name =3D "vcc-dram"; ++}; ++ ++®_dcdc6 { ++ regulator-always-on; ++ regulator-min-microvolt =3D <1100000>; ++ regulator-max-microvolt =3D <1100000>; ++ regulator-name =3D "vdd-sys"; ++}; ++ ++®_dldo1 { ++ regulator-min-microvolt =3D <3300000>; ++ regulator-max-microvolt =3D <3300000>; ++ regulator-name =3D "vcc-hdmi-dsi-sensor"; ++}; ++ ++®_dldo2 { ++ regulator-min-microvolt =3D <3300000>; ++ regulator-max-microvolt =3D <3300000>; ++ regulator-name =3D "vcc-mipi"; ++}; ++ ++®_dldo3 { ++ regulator-min-microvolt =3D <2800000>; ++ regulator-max-microvolt =3D <2800000>; ++ regulator-name =3D "dovdd-csi"; ++}; ++ ++®_dldo4 { ++ regulator-min-microvolt =3D <3300000>; ++ regulator-max-microvolt =3D <3300000>; ++ regulator-name =3D "vcc-wifi-io"; ++}; ++ ++®_drivevbus { ++ regulator-name =3D "usb0-vbus"; ++ status =3D "okay"; ++}; ++ ++®_eldo1 { ++ regulator-always-on; ++ regulator-min-microvolt =3D <1800000>; ++ regulator-max-microvolt =3D <1800000>; ++ regulator-name =3D "cpvdd"; ++}; ++ ++®_eldo3 { ++ regulator-min-microvolt =3D <1800000>; ++ regulator-max-microvolt =3D <1800000>; ++ regulator-name =3D "dvdd-csi"; ++}; ++ ++®_fldo1 { ++ regulator-min-microvolt =3D <1200000>; ++ regulator-max-microvolt =3D <1200000>; ++ regulator-name =3D "vcc-1v2-hsic"; ++}; ++ ++/* ++ * The A64 chip cannot work without this regulator off, although ++ * it seems to be only driving the AR100 core. ++ * Maybe we don't still know well about CPUs domain. ++ */ ++®_fldo2 { ++ regulator-always-on; ++ regulator-min-microvolt =3D <1100000>; ++ regulator-max-microvolt =3D <1100000>; ++ regulator-name =3D "vdd-cpus"; ++}; ++ ++®_rtc_ldo { ++ regulator-name =3D "vcc-rtc"; ++}; ++ + &uart0 { + pinctrl-names =3D "default"; +- pinctrl-0 =3D <&uart0_pins_a>; ++ pinctrl-0 =3D <&uart0_pb_pins>; + status =3D "okay"; + }; +=20 +@@ -61,5 +214,6 @@ +=20 + &usbphy { + usb0_id_det-gpios =3D <&pio 7 9 GPIO_ACTIVE_HIGH>; /* PH9 */ ++ usb0_vbus-supply =3D <®_drivevbus>; + status =3D "okay"; + }; +diff --git a/arch/arm/dts/sun50i-a64-bananapi-m64.dts b/arch/arm/dts/sun50= i-a64-bananapi-m64.dts +index 0716b14411..ef1c90401b 100644 +--- a/arch/arm/dts/sun50i-a64-bananapi-m64.dts ++++ b/arch/arm/dts/sun50i-a64-bananapi-m64.dts +@@ -60,6 +60,17 @@ + stdout-path =3D "serial0:115200n8"; + }; +=20 ++ hdmi-connector { ++ compatible =3D "hdmi-connector"; ++ type =3D "a"; ++ ++ port { ++ hdmi_con_in: endpoint { ++ remote-endpoint =3D <&hdmi_out_con>; ++ }; ++ }; ++ }; ++ + leds { + compatible =3D "gpio-leds"; +=20 +@@ -86,6 +97,10 @@ + }; + }; +=20 ++&de { ++ status =3D "okay"; ++}; ++ + &ehci0 { + status =3D "okay"; + }; +@@ -103,6 +118,17 @@ + status =3D "okay"; + }; +=20 ++&hdmi { ++ hvcc-supply =3D <®_dldo1>; ++ status =3D "okay"; ++}; ++ ++&hdmi_out { ++ hdmi_out_con: endpoint { ++ remote-endpoint =3D <&hdmi_con_in>; ++ }; ++}; ++ + &i2c1 { + pinctrl-names =3D "default"; + pinctrl-0 =3D <&i2c1_pins>; +@@ -151,7 +177,7 @@ +=20 + &mmc2 { + pinctrl-names =3D "default"; +- pinctrl-0 =3D <&mmc2_pins>; ++ pinctrl-0 =3D <&mmc2_pins>, <&mmc2_ds_pin>; + vmmc-supply =3D <®_dcdc1>; + bus-width =3D <8>; + non-removable; +@@ -296,9 +322,13 @@ + regulator-name =3D "vcc-rtc"; + }; +=20 ++&simplefb_hdmi { ++ vcc-hdmi-supply =3D <®_dldo1>; ++}; ++ + &uart0 { + pinctrl-names =3D "default"; +- pinctrl-0 =3D <&uart0_pins_a>; ++ pinctrl-0 =3D <&uart0_pb_pins>; + status =3D "okay"; + }; +=20 +diff --git a/arch/arm/dts/sun50i-a64-nanopi-a64.dts b/arch/arm/dts/sun50i-= a64-nanopi-a64.dts +index e2dce48fa2..31884dbc88 100644 +--- a/arch/arm/dts/sun50i-a64-nanopi-a64.dts ++++ b/arch/arm/dts/sun50i-a64-nanopi-a64.dts +@@ -51,12 +51,44 @@ + compatible =3D "friendlyarm,nanopi-a64", "allwinner,sun50i-a64"; +=20 + aliases { ++ ethernet0 =3D &emac; + serial0 =3D &uart0; + }; +=20 + chosen { + stdout-path =3D "serial0:115200n8"; + }; ++ ++ hdmi-connector { ++ compatible =3D "hdmi-connector"; ++ type =3D "a"; ++ ++ port { ++ hdmi_con_in: endpoint { ++ remote-endpoint =3D <&hdmi_out_con>; ++ }; ++ }; ++ }; ++ ++ leds { ++ compatible =3D "gpio-leds"; ++ ++ blue { ++ label =3D "nanopi-a64:blue:status"; ++ gpios =3D <&pio 3 24 GPIO_ACTIVE_LOW>; /* PD24 */ ++ }; ++ }; ++ ++ wifi_pwrseq: wifi_pwrseq { ++ compatible =3D "mmc-pwrseq-simple"; ++ clocks =3D <&rtc 1>; ++ clock-names =3D "ext_clock"; ++ reset-gpios =3D <&r_pio 0 2 GPIO_ACTIVE_LOW>; /* PL2 */ ++ }; ++}; ++ ++&de { ++ status =3D "okay"; + }; +=20 + &ehci0 { +@@ -67,6 +99,26 @@ + status =3D "okay"; + }; +=20 ++&emac { ++ pinctrl-names =3D "default"; ++ pinctrl-0 =3D <&rgmii_pins>; ++ phy-mode =3D "rgmii"; ++ phy-handle =3D <&ext_rgmii_phy>; ++ phy-supply =3D <®_dcdc1>; ++ status =3D "okay"; ++}; ++ ++&hdmi { ++ hvcc-supply =3D <®_dldo1>; ++ status =3D "okay"; ++}; ++ ++&hdmi_out { ++ hdmi_out_con: endpoint { ++ remote-endpoint =3D <&hdmi_con_in>; ++ }; ++}; ++ + /* i2c1 connected with gpio headers like pine64, bananapi */ + &i2c1 { + pinctrl-names =3D "default"; +@@ -78,6 +130,13 @@ + bias-pull-up; + }; +=20 ++&mdio { ++ ext_rgmii_phy: ethernet-phy@1 { ++ compatible =3D "ethernet-phy-ieee802.3-c22"; ++ reg =3D <7>; ++ }; ++}; ++ + &mmc0 { + pinctrl-names =3D "default"; + pinctrl-0 =3D <&mmc0_pins>; +@@ -88,6 +147,24 @@ + status =3D "okay"; + }; +=20 ++&mmc1 { ++ pinctrl-names =3D "default"; ++ pinctrl-0 =3D <&mmc1_pins>; ++ vmmc-supply =3D <®_dcdc1>; ++ vqmmc-supply =3D <®_dldo4>; ++ mmc-pwrseq =3D <&wifi_pwrseq>; ++ bus-width =3D <4>; ++ non-removable; ++ status =3D "okay"; ++ ++ rtl8189etv: wifi@1 { ++ reg =3D <1>; ++ interrupt-parent =3D <&r_pio>; ++ interrupts =3D <0 3 IRQ_TYPE_LEVEL_LOW>; /* PL3 */ ++ interrupt-names =3D "host-wake"; ++ }; ++}; ++ + &ohci0 { + status =3D "okay"; + }; +@@ -125,9 +202,9 @@ +=20 + ®_dcdc1 { + regulator-always-on; +- regulator-min-microvolt =3D <3000000>; +- regulator-max-microvolt =3D <3000000>; +- regulator-name =3D "vcc-3v"; ++ regulator-min-microvolt =3D <3300000>; ++ regulator-max-microvolt =3D <3300000>; ++ regulator-name =3D "vcc-3v3"; + }; +=20 + ®_dcdc2 { +@@ -195,9 +272,13 @@ + regulator-name =3D "vcc-rtc"; + }; +=20 ++&simplefb_hdmi { ++ vcc-hdmi-supply =3D <®_dldo1>; ++}; ++ + &uart0 { + pinctrl-names =3D "default"; +- pinctrl-0 =3D <&uart0_pins_a>; ++ pinctrl-0 =3D <&uart0_pb_pins>; + status =3D "okay"; + }; +=20 +diff --git a/arch/arm/dts/sun50i-a64-olinuxino.dts b/arch/arm/dts/sun50i-a= 64-olinuxino.dts +index 3b3081b10e..f7a4bccaa5 100644 +--- a/arch/arm/dts/sun50i-a64-olinuxino.dts ++++ b/arch/arm/dts/sun50i-a64-olinuxino.dts +@@ -51,6 +51,7 @@ + compatible =3D "olimex,a64-olinuxino", "allwinner,sun50i-a64"; +=20 + aliases { ++ ethernet0 =3D &emac; + serial0 =3D &uart0; + }; +=20 +@@ -58,12 +59,74 @@ + stdout-path =3D "serial0:115200n8"; + }; +=20 ++ hdmi-connector { ++ compatible =3D "hdmi-connector"; ++ type =3D "a"; ++ ++ port { ++ hdmi_con_in: endpoint { ++ remote-endpoint =3D <&hdmi_out_con>; ++ }; ++ }; ++ }; ++ ++ reg_usb1_vbus: usb1-vbus { ++ compatible =3D "regulator-fixed"; ++ regulator-name =3D "usb1-vbus"; ++ regulator-min-microvolt =3D <5000000>; ++ regulator-max-microvolt =3D <5000000>; ++ regulator-boot-on; ++ enable-active-high; ++ gpio =3D <&pio 6 9 GPIO_ACTIVE_HIGH>; /* PG9 */ ++ status =3D "okay"; ++ }; ++ + wifi_pwrseq: wifi_pwrseq { + compatible =3D "mmc-pwrseq-simple"; + reset-gpios =3D <&r_pio 0 2 GPIO_ACTIVE_LOW>; /* PL2 */ + }; + }; +=20 ++&de { ++ status =3D "okay"; ++}; ++ ++&ehci0 { ++ status =3D "okay"; ++}; ++ ++&ehci1 { ++ status =3D "okay"; ++}; ++ ++&emac { ++ pinctrl-names =3D "default"; ++ pinctrl-0 =3D <&rgmii_pins>; ++ phy-mode =3D "rgmii"; ++ phy-handle =3D <&ext_rgmii_phy>; ++ phy-supply =3D <®_dcdc1>; ++ allwinner,tx-delay-ps =3D <600>; ++ status =3D "okay"; ++}; ++ ++&hdmi { ++ hvcc-supply =3D <®_dldo1>; ++ status =3D "okay"; ++}; ++ ++&hdmi_out { ++ hdmi_out_con: endpoint { ++ remote-endpoint =3D <&hdmi_con_in>; ++ }; ++}; ++ ++&mdio { ++ ext_rgmii_phy: ethernet-phy@1 { ++ compatible =3D "ethernet-phy-ieee802.3-c22"; ++ reg =3D <1>; ++ }; ++}; ++ + &mmc0 { + pinctrl-names =3D "default"; + pinctrl-0 =3D <&mmc0_pins>; +@@ -92,6 +155,14 @@ + }; + }; +=20 ++&ohci0 { ++ status =3D "okay"; ++}; ++ ++&ohci1 { ++ status =3D "okay"; ++}; ++ + &r_rsb { + status =3D "okay"; +=20 +@@ -100,6 +171,7 @@ + reg =3D <0x3a3>; + interrupt-parent =3D <&r_intc>; + interrupts =3D <0 IRQ_TYPE_LEVEL_LOW>; ++ x-powers,drive-vbus-en; /* set N_VBUSEN as output pin */ + }; + }; +=20 +@@ -142,10 +214,14 @@ +=20 + /* DCDC3 is polyphased with DCDC2 */ +=20 ++/* ++ * The board uses DDR3L DRAM chips. 1.36V is the closest to the nominal ++ * 1.35V that the PMIC can drive. ++ */ + ®_dcdc5 { + regulator-always-on; +- regulator-min-microvolt =3D <1500000>; +- regulator-max-microvolt =3D <1500000>; ++ regulator-min-microvolt =3D <1360000>; ++ regulator-max-microvolt =3D <1360000>; + regulator-name =3D "vcc-ddr3"; + }; +=20 +@@ -180,6 +256,11 @@ + regulator-name =3D "vcc-wifi-io"; + }; +=20 ++®_drivevbus { ++ regulator-name =3D "usb0-vbus"; ++ status =3D "okay"; ++}; ++ + ®_eldo1 { + regulator-min-microvolt =3D <1800000>; + regulator-max-microvolt =3D <1800000>; +@@ -214,8 +295,24 @@ + regulator-name =3D "vcc-rtc"; + }; +=20 ++&simplefb_hdmi { ++ vcc-hdmi-supply =3D <®_dldo1>; ++}; ++ + &uart0 { + pinctrl-names =3D "default"; +- pinctrl-0 =3D <&uart0_pins_a>; ++ pinctrl-0 =3D <&uart0_pb_pins>; ++ status =3D "okay"; ++}; ++ ++&usb_otg { ++ dr_mode =3D "otg"; ++ status =3D "okay"; ++}; ++ ++&usbphy { + status =3D "okay"; ++ usb0_id_det-gpios =3D <&pio 7 9 GPIO_ACTIVE_HIGH>; /* PH9 */ ++ usb0_vbus-supply =3D <®_drivevbus>; ++ usb1_vbus-supply =3D <®_usb1_vbus>; + }; +diff --git a/arch/arm/dts/sun50i-a64-orangepi-win.dts b/arch/arm/dts/sun50= i-a64-orangepi-win.dts +index bf42690a33..b0c64f7579 100644 +--- a/arch/arm/dts/sun50i-a64-orangepi-win.dts ++++ b/arch/arm/dts/sun50i-a64-orangepi-win.dts +@@ -1,5 +1,6 @@ + /* + * Copyright (C) 2017 Jagan Teki ++ * Copyright (C) 2017-2018 Samuel Holland + * + * This file is dual-licensed: you can use it either under the terms + * of the GPL or the X11 license, at your option. Note that this dual +@@ -51,23 +52,127 @@ + compatible =3D "xunlong,orangepi-win", "allwinner,sun50i-a64"; +=20 + aliases { ++ ethernet0 =3D &emac; + serial0 =3D &uart0; ++ serial1 =3D &uart1; ++ serial2 =3D &uart2; ++ serial3 =3D &uart3; ++ serial4 =3D &uart4; + }; +=20 + chosen { + stdout-path =3D "serial0:115200n8"; + }; ++ ++ hdmi-connector { ++ compatible =3D "hdmi-connector"; ++ type =3D "a"; ++ ++ port { ++ hdmi_con_in: endpoint { ++ remote-endpoint =3D <&hdmi_out_con>; ++ }; ++ }; ++ }; ++ ++ leds { ++ compatible =3D "gpio-leds"; ++ ++ status { ++ label =3D "orangepi:green:status"; ++ gpios =3D <&pio 7 11 GPIO_ACTIVE_HIGH>; /* PH11 */ ++ }; ++ }; ++ ++ reg_gmac_3v3: gmac-3v3 { ++ compatible =3D "regulator-fixed"; ++ regulator-name =3D "gmac-3v3"; ++ regulator-min-microvolt =3D <3300000>; ++ regulator-max-microvolt =3D <3300000>; ++ regulator-boot-on; ++ enable-active-high; ++ gpio =3D <&pio 3 14 GPIO_ACTIVE_HIGH>; /* PD14 */ ++ status =3D "okay"; ++ }; ++ ++ reg_usb1_vbus: usb1-vbus { ++ compatible =3D "regulator-fixed"; ++ regulator-name =3D "usb1-vbus"; ++ regulator-min-microvolt =3D <5000000>; ++ regulator-max-microvolt =3D <5000000>; ++ regulator-boot-on; ++ enable-active-high; ++ gpio =3D <&pio 3 7 GPIO_ACTIVE_HIGH>; /* PD7 */ ++ status =3D "okay"; ++ }; ++ ++ wifi_pwrseq: wifi_pwrseq { ++ compatible =3D "mmc-pwrseq-simple"; ++ reset-gpios =3D <&r_pio 0 8 GPIO_ACTIVE_LOW>; /* PL8 */ ++ }; ++}; ++ ++&de { ++ status =3D "okay"; ++}; ++ ++&ehci0 { ++ status =3D "okay"; + }; +=20 + &ehci1 { + status =3D "okay"; + }; +=20 ++&emac { ++ pinctrl-names =3D "default"; ++ pinctrl-0 =3D <&rgmii_pins>; ++ phy-mode =3D "rgmii"; ++ phy-handle =3D <&ext_rgmii_phy>; ++ phy-supply =3D <®_gmac_3v3>; ++ status =3D "okay"; ++}; ++ ++&hdmi { ++ hvcc-supply =3D <®_dldo1>; ++ status =3D "okay"; ++}; ++ ++&hdmi_out { ++ hdmi_out_con: endpoint { ++ remote-endpoint =3D <&hdmi_con_in>; ++ }; ++}; ++ ++&mdio { ++ ext_rgmii_phy: ethernet-phy@1 { ++ compatible =3D "ethernet-phy-ieee802.3-c22"; ++ reg =3D <1>; ++ }; ++}; ++ + &mmc0 { + pinctrl-names =3D "default"; + pinctrl-0 =3D <&mmc0_pins>; + vmmc-supply =3D <®_dcdc1>; +- cd-gpios =3D <&pio 5 6 GPIO_ACTIVE_LOW>; ++ cd-gpios =3D <&pio 5 6 GPIO_ACTIVE_LOW>; /* PF6 */ ++ disable-wp; ++ bus-width =3D <4>; ++ status =3D "okay"; ++}; ++ ++&mmc1 { ++ pinctrl-names =3D "default"; ++ pinctrl-0 =3D <&mmc1_pins>; ++ vmmc-supply =3D <®_dldo2>; ++ vqmmc-supply =3D <®_dldo4>; ++ mmc-pwrseq =3D <&wifi_pwrseq>; ++ bus-width =3D <4>; ++ non-removable; ++ status =3D "okay"; ++}; ++ ++&ohci0 { + status =3D "okay"; + }; +=20 +@@ -89,9 +194,8 @@ + #include "axp803.dtsi" +=20 + ®_aldo1 { +- regulator-always-on; +- regulator-min-microvolt =3D <1800000>; +- regulator-max-microvolt =3D <3300000>; ++ regulator-min-microvolt =3D <2800000>; ++ regulator-max-microvolt =3D <2800000>; + regulator-name =3D "afvcc-csi"; + }; +=20 +@@ -163,12 +267,23 @@ + regulator-name =3D "vcc-wifi-io"; + }; +=20 ++®_drivevbus { ++ regulator-name =3D "usb0-vbus"; ++ status =3D "okay"; ++}; ++ + ®_eldo1 { + regulator-min-microvolt =3D <1800000>; + regulator-max-microvolt =3D <1800000>; + regulator-name =3D "cpvdd"; + }; +=20 ++®_eldo3 { ++ regulator-min-microvolt =3D <1500000>; ++ regulator-max-microvolt =3D <1800000>; ++ regulator-name =3D "dvdd-csi"; ++}; ++ + ®_fldo1 { + regulator-min-microvolt =3D <1200000>; + regulator-max-microvolt =3D <1200000>; +@@ -191,13 +306,65 @@ + regulator-name =3D "vcc-rtc"; + }; +=20 ++&simplefb_hdmi { ++ vcc-hdmi-supply =3D <®_dldo1>; ++}; ++ ++&spi0 { ++ status =3D "okay"; ++ ++ spi-flash@0 { ++ compatible =3D "mxicy,mx25l1606e", "jedec,spi-nor"; ++ reg =3D <0>; ++ spi-max-frequency =3D <80000000>; ++ m25p,fast-read; ++ status =3D "okay"; ++ }; ++}; ++ ++/* On debug connector */ + &uart0 { + pinctrl-names =3D "default"; +- pinctrl-0 =3D <&uart0_pins_a>; ++ pinctrl-0 =3D <&uart0_pb_pins>; + status =3D "okay"; + }; +=20 +-&usbphy { ++/* Bluetooth */ ++&uart1 { ++ pinctrl-names =3D "default"; ++ pinctrl-0 =3D <&uart1_pins>, <&uart1_rts_cts_pins>; ++ status =3D "okay"; ++}; ++ ++/* On Pi-2 connector, RTS/CTS optional */ ++&uart2 { ++ pinctrl-names =3D "default"; ++ pinctrl-0 =3D <&uart2_pins>; ++ status =3D "disabled"; ++}; ++ ++/* On Pi-2 connector, RTS/CTS optional */ ++&uart3 { ++ pinctrl-names =3D "default"; ++ pinctrl-0 =3D <&uart3_pins>; ++ status =3D "disabled"; ++}; ++ ++/* On Pi-2 connector (labeled for SPI1), RTS/CTS optional */ ++&uart4 { ++ pinctrl-names =3D "default"; ++ pinctrl-0 =3D <&uart4_pins>; ++ status =3D "disabled"; ++}; ++ ++&usb_otg { ++ dr_mode =3D "otg"; + status =3D "okay"; + }; +=20 ++&usbphy { ++ usb0_id_det-gpios =3D <&pio 7 9 GPIO_ACTIVE_HIGH>; /* PH9 */ ++ usb0_vbus-supply =3D <®_drivevbus>; ++ usb1_vbus-supply =3D <®_usb1_vbus>; ++ status =3D "okay"; ++}; +diff --git a/arch/arm/dts/sun50i-a64-pine64.dts b/arch/arm/dts/sun50i-a64-= pine64.dts +index a75825798a..c077b6c1f4 100644 +--- a/arch/arm/dts/sun50i-a64-pine64.dts ++++ b/arch/arm/dts/sun50i-a64-pine64.dts +@@ -62,6 +62,21 @@ + chosen { + stdout-path =3D "serial0:115200n8"; + }; ++ ++ hdmi-connector { ++ compatible =3D "hdmi-connector"; ++ type =3D "a"; ++ ++ port { ++ hdmi_con_in: endpoint { ++ remote-endpoint =3D <&hdmi_out_con>; ++ }; ++ }; ++ }; ++}; ++ ++&de { ++ status =3D "okay"; + }; +=20 + &ehci0 { +@@ -82,6 +97,17 @@ +=20 + }; +=20 ++&hdmi { ++ hvcc-supply =3D <®_dldo1>; ++ status =3D "okay"; ++}; ++ ++&hdmi_out { ++ hdmi_out_con: endpoint { ++ remote-endpoint =3D <&hdmi_con_in>; ++ }; ++}; ++ + &i2c1 { + pinctrl-names =3D "default"; + pinctrl-0 =3D <&i2c1_pins>; +@@ -229,6 +255,10 @@ + regulator-name =3D "vcc-rtc"; + }; +=20 ++&simplefb_hdmi { ++ vcc-hdmi-supply =3D <®_dldo1>; ++}; ++ + /* On Euler connector */ + &spdif { + status =3D "disabled"; +@@ -237,7 +267,7 @@ + /* On Exp and Euler connectors */ + &uart0 { + pinctrl-names =3D "default"; +- pinctrl-0 =3D <&uart0_pins_a>; ++ pinctrl-0 =3D <&uart0_pb_pins>; + status =3D "okay"; + }; +=20 +diff --git a/arch/arm/dts/sun50i-a64-sopine-baseboard.dts b/arch/arm/dts/s= un50i-a64-sopine-baseboard.dts +index abe179de35..53fcc9098d 100644 +--- a/arch/arm/dts/sun50i-a64-sopine-baseboard.dts ++++ b/arch/arm/dts/sun50i-a64-sopine-baseboard.dts +@@ -61,6 +61,17 @@ + stdout-path =3D "serial0:115200n8"; + }; +=20 ++ hdmi-connector { ++ compatible =3D "hdmi-connector"; ++ type =3D "a"; ++ ++ port { ++ hdmi_con_in: endpoint { ++ remote-endpoint =3D <&hdmi_out_con>; ++ }; ++ }; ++ }; ++ + reg_vcc1v8: vcc1v8 { + compatible =3D "regulator-fixed"; + regulator-name =3D "vcc1v8"; +@@ -69,6 +80,10 @@ + }; + }; +=20 ++&de { ++ status =3D "okay"; ++}; ++ + &ehci0 { + status =3D "okay"; + }; +@@ -86,6 +101,17 @@ + status =3D "okay"; + }; +=20 ++&hdmi { ++ hvcc-supply =3D <®_dldo1>; ++ status =3D "okay"; ++}; ++ ++&hdmi_out { ++ hdmi_out_con: endpoint { ++ remote-endpoint =3D <&hdmi_con_in>; ++ }; ++}; ++ + &mdio { + ext_rgmii_phy: ethernet-phy@1 { + compatible =3D "ethernet-phy-ieee802.3-c22"; +@@ -134,9 +160,13 @@ + regulator-name =3D "vcc-wifi"; + }; +=20 ++&simplefb_hdmi { ++ vcc-hdmi-supply =3D <®_dldo1>; ++}; ++ + &uart0 { + pinctrl-names =3D "default"; +- pinctrl-0 =3D <&uart0_pins_a>; ++ pinctrl-0 =3D <&uart0_pb_pins>; + status =3D "okay"; + }; +=20 +diff --git a/arch/arm/dts/sun50i-a64-sopine.dtsi b/arch/arm/dts/sun50i-a64= -sopine.dtsi +index 43418bd881..6723b8695e 100644 +--- a/arch/arm/dts/sun50i-a64-sopine.dtsi ++++ b/arch/arm/dts/sun50i-a64-sopine.dtsi +@@ -45,6 +45,8 @@ +=20 + #include "sun50i-a64.dtsi" +=20 ++#include ++ + &mmc0 { + pinctrl-names =3D "default"; + pinctrl-0 =3D <&mmc0_pins>; +@@ -52,6 +54,7 @@ + non-removable; + disable-wp; + bus-width =3D <4>; ++ cd-gpios =3D <&pio 5 6 GPIO_ACTIVE_LOW>; /* PF6 */ + status =3D "okay"; + }; +=20 +@@ -66,6 +69,18 @@ + }; + }; +=20 ++&spi0 { ++ status =3D "okay"; ++ ++ flash@0 { ++ #address-cells =3D <1>; ++ #size-cells =3D <1>; ++ compatible =3D "jedec,spi-nor"; ++ reg =3D <0>; ++ spi-max-frequency =3D <40000000>; ++ }; ++}; ++ + #include "axp803.dtsi" +=20 + ®_aldo2 { +diff --git a/arch/arm/dts/sun50i-a64.dtsi b/arch/arm/dts/sun50i-a64.dtsi +index 7a083637c4..f3a66f8882 100644 +--- a/arch/arm/dts/sun50i-a64.dtsi ++++ b/arch/arm/dts/sun50i-a64.dtsi +@@ -43,9 +43,12 @@ + */ +=20 + #include ++#include + #include + #include + #include ++#include ++#include +=20 + / { + interrupt-parent =3D <&gic>; +@@ -57,17 +60,21 @@ + #size-cells =3D <1>; + ranges; +=20 +-/* +- * The pipeline mixer0-lcd0 depends on clock CLK_MIXER0 from DE2 CCU. +- * However there is no support for this clock on A64 yet, so we depend +- * on the upstream clocks here to keep them (and thus CLK_MIXER0) up. +- */ + simplefb_lcd: framebuffer-lcd { + compatible =3D "allwinner,simple-framebuffer", + "simple-framebuffer"; + allwinner,pipeline =3D "mixer0-lcd0"; + clocks =3D <&ccu CLK_TCON0>, +- <&ccu CLK_DE>, <&ccu CLK_BUS_DE>; ++ <&display_clocks CLK_MIXER0>; ++ status =3D "disabled"; ++ }; ++ ++ simplefb_hdmi: framebuffer-hdmi { ++ compatible =3D "allwinner,simple-framebuffer", ++ "simple-framebuffer"; ++ allwinner,pipeline =3D "mixer1-lcd1-hdmi"; ++ clocks =3D <&display_clocks CLK_MIXER1>, ++ <&ccu CLK_TCON1>, <&ccu CLK_HDMI>; + status =3D "disabled"; + }; + }; +@@ -81,6 +88,7 @@ + device_type =3D "cpu"; + reg =3D <0>; + enable-method =3D "psci"; ++ next-level-cache =3D <&L2>; + }; +=20 + cpu1: cpu@1 { +@@ -88,6 +96,7 @@ + device_type =3D "cpu"; + reg =3D <1>; + enable-method =3D "psci"; ++ next-level-cache =3D <&L2>; + }; +=20 + cpu2: cpu@2 { +@@ -95,6 +104,7 @@ + device_type =3D "cpu"; + reg =3D <2>; + enable-method =3D "psci"; ++ next-level-cache =3D <&L2>; + }; +=20 + cpu3: cpu@3 { +@@ -102,7 +112,20 @@ + device_type =3D "cpu"; + reg =3D <3>; + enable-method =3D "psci"; ++ next-level-cache =3D <&L2>; + }; ++ ++ L2: l2-cache { ++ compatible =3D "cache"; ++ cache-level =3D <2>; ++ }; ++ }; ++ ++ de: display-engine { ++ compatible =3D "allwinner,sun50i-a64-display-engine"; ++ allwinner,pipelines =3D <&mixer0>, ++ <&mixer1>; ++ status =3D "disabled"; + }; +=20 + osc24M: osc24M_clk { +@@ -168,10 +191,92 @@ + #size-cells =3D <1>; + ranges; +=20 ++ de2@1000000 { ++ compatible =3D "allwinner,sun50i-a64-de2"; ++ reg =3D <0x1000000 0x400000>; ++ allwinner,sram =3D <&de2_sram 1>; ++ #address-cells =3D <1>; ++ #size-cells =3D <1>; ++ ranges =3D <0 0x1000000 0x400000>; ++ ++ display_clocks: clock@0 { ++ compatible =3D "allwinner,sun50i-a64-de2-clk"; ++ reg =3D <0x0 0x100000>; ++ clocks =3D <&ccu CLK_DE>, ++ <&ccu CLK_BUS_DE>; ++ clock-names =3D "mod", ++ "bus"; ++ resets =3D <&ccu RST_BUS_DE>; ++ #clock-cells =3D <1>; ++ #reset-cells =3D <1>; ++ }; ++ ++ mixer0: mixer@100000 { ++ compatible =3D "allwinner,sun50i-a64-de2-mixer-0"; ++ reg =3D <0x100000 0x100000>; ++ clocks =3D <&display_clocks CLK_BUS_MIXER0>, ++ <&display_clocks CLK_MIXER0>; ++ clock-names =3D "bus", ++ "mod"; ++ resets =3D <&display_clocks RST_MIXER0>; ++ ++ ports { ++ #address-cells =3D <1>; ++ #size-cells =3D <0>; ++ ++ mixer0_out: port@1 { ++ reg =3D <1>; ++ ++ mixer0_out_tcon0: endpoint { ++ remote-endpoint =3D <&tcon0_in_mixer0>; ++ }; ++ }; ++ }; ++ }; ++ ++ mixer1: mixer@200000 { ++ compatible =3D "allwinner,sun50i-a64-de2-mixer-1"; ++ reg =3D <0x200000 0x100000>; ++ clocks =3D <&display_clocks CLK_BUS_MIXER1>, ++ <&display_clocks CLK_MIXER1>; ++ clock-names =3D "bus", ++ "mod"; ++ resets =3D <&display_clocks RST_MIXER1>; ++ ++ ports { ++ #address-cells =3D <1>; ++ #size-cells =3D <0>; ++ ++ mixer1_out: port@1 { ++ reg =3D <1>; ++ ++ mixer1_out_tcon1: endpoint { ++ remote-endpoint =3D <&tcon1_in_mixer1>; ++ }; ++ }; ++ }; ++ }; ++ }; ++ + syscon: syscon@1c00000 { +- compatible =3D "allwinner,sun50i-a64-system-controller", +- "syscon"; ++ compatible =3D "allwinner,sun50i-a64-system-control"; + reg =3D <0x01c00000 0x1000>; ++ #address-cells =3D <1>; ++ #size-cells =3D <1>; ++ ranges; ++ ++ sram_c: sram@18000 { ++ compatible =3D "mmio-sram"; ++ reg =3D <0x00018000 0x28000>; ++ #address-cells =3D <1>; ++ #size-cells =3D <1>; ++ ranges =3D <0 0x00018000 0x28000>; ++ ++ de2_sram: sram-section@0 { ++ compatible =3D "allwinner,sun50i-a64-sram-c"; ++ reg =3D <0x0000 0x28000>; ++ }; ++ }; + }; +=20 + dma: dma-controller@1c02000 { +@@ -185,6 +290,75 @@ + #dma-cells =3D <1>; + }; +=20 ++ tcon0: lcd-controller@1c0c000 { ++ compatible =3D "allwinner,sun50i-a64-tcon-lcd", ++ "allwinner,sun8i-a83t-tcon-lcd"; ++ reg =3D <0x01c0c000 0x1000>; ++ interrupts =3D ; ++ clocks =3D <&ccu CLK_BUS_TCON0>, <&ccu CLK_TCON0>; ++ clock-names =3D "ahb", "tcon-ch0"; ++ clock-output-names =3D "tcon-pixel-clock"; ++ resets =3D <&ccu RST_BUS_TCON0>, <&ccu RST_BUS_LVDS>; ++ reset-names =3D "lcd", "lvds"; ++ ++ ports { ++ #address-cells =3D <1>; ++ #size-cells =3D <0>; ++ ++ tcon0_in: port@0 { ++ #address-cells =3D <1>; ++ #size-cells =3D <0>; ++ reg =3D <0>; ++ ++ tcon0_in_mixer0: endpoint@0 { ++ reg =3D <0>; ++ remote-endpoint =3D <&mixer0_out_tcon0>; ++ }; ++ }; ++ ++ tcon0_out: port@1 { ++ #address-cells =3D <1>; ++ #size-cells =3D <0>; ++ reg =3D <1>; ++ }; ++ }; ++ }; ++ ++ tcon1: lcd-controller@1c0d000 { ++ compatible =3D "allwinner,sun50i-a64-tcon-tv", ++ "allwinner,sun8i-a83t-tcon-tv"; ++ reg =3D <0x01c0d000 0x1000>; ++ interrupts =3D ; ++ clocks =3D <&ccu CLK_BUS_TCON1>, <&ccu CLK_TCON1>; ++ clock-names =3D "ahb", "tcon-ch1"; ++ resets =3D <&ccu RST_BUS_TCON1>; ++ reset-names =3D "lcd"; ++ ++ ports { ++ #address-cells =3D <1>; ++ #size-cells =3D <0>; ++ ++ tcon1_in: port@0 { ++ reg =3D <0>; ++ ++ tcon1_in_mixer1: endpoint { ++ remote-endpoint =3D <&mixer1_out_tcon1>; ++ }; ++ }; ++ ++ tcon1_out: port@1 { ++ #address-cells =3D <1>; ++ #size-cells =3D <0>; ++ reg =3D <1>; ++ ++ tcon1_out_hdmi: endpoint@1 { ++ reg =3D <1>; ++ remote-endpoint =3D <&hdmi_in_tcon1>; ++ }; ++ }; ++ }; ++ }; ++ + mmc0: mmc@1c0f000 { + compatible =3D "allwinner,sun50i-a64-mmc"; + reg =3D <0x01c0f000 0x1000>; +@@ -227,6 +401,11 @@ + #size-cells =3D <0>; + }; +=20 ++ sid: eeprom@1c14000 { ++ compatible =3D "allwinner,sun50i-a64-sid"; ++ reg =3D <0x1c14000 0x400>; ++ }; ++ + usb_otg: usb@1c19000 { + compatible =3D "allwinner,sun8i-a33-musb"; + reg =3D <0x01c19000 0x0400>; +@@ -356,7 +535,7 @@ + }; +=20 + mmc2_pins: mmc2-pins { +- pins =3D "PC1", "PC5", "PC6", "PC8", "PC9", ++ pins =3D "PC5", "PC6", "PC8", "PC9", + "PC10","PC11", "PC12", "PC13", + "PC14", "PC15", "PC16"; + function =3D "mmc2"; +@@ -364,6 +543,18 @@ + bias-pull-up; + }; +=20 ++ mmc2_ds_pin: mmc2-ds-pin { ++ pins =3D "PC1"; ++ function =3D "mmc2"; ++ drive-strength =3D <30>; ++ bias-pull-up; ++ }; ++ ++ pwm_pin: pwm_pin { ++ pins =3D "PD22"; ++ function =3D "pwm"; ++ }; ++ + rmii_pins: rmii_pins { + pins =3D "PD10", "PD11", "PD13", "PD14", "PD17", + "PD18", "PD19", "PD20", "PD22", "PD23"; +@@ -394,7 +585,7 @@ + function =3D "spi1"; + }; +=20 +- uart0_pins_a: uart0 { ++ uart0_pb_pins: uart0-pb-pins { + pins =3D "PB8", "PB9"; + function =3D "uart0"; + }; +@@ -474,15 +665,6 @@ + status =3D "disabled"; + }; +=20 +- pwm: pwm@1c21400 { +- compatible =3D "allwinner,sun50i-a64-pwm", +- "allwinner,sun5i-a13-pwm"; +- reg =3D <0x01c21400 0x8>; +- clocks =3D <&osc24M>; +- #pwm-cells =3D <3>; +- status =3D "disabled"; +- }; +- + uart0: serial@1c28000 { + compatible =3D "snps,dw-apb-uart"; + reg =3D <0x01c28000 0x400>; +@@ -617,8 +799,6 @@ + clocks =3D <&ccu CLK_BUS_EMAC>; + clock-names =3D "stmmaceth"; + status =3D "disabled"; +- #address-cells =3D <1>; +- #size-cells =3D <0>; +=20 + mdio: mdio { + compatible =3D "snps,dwmac-mdio"; +@@ -638,11 +818,69 @@ + #interrupt-cells =3D <3>; + }; +=20 ++ pwm: pwm@1c21400 { ++ compatible =3D "allwinner,sun50i-a64-pwm", ++ "allwinner,sun5i-a13-pwm"; ++ reg =3D <0x01c21400 0x400>; ++ clocks =3D <&osc24M>; ++ pinctrl-names =3D "default"; ++ pinctrl-0 =3D <&pwm_pin>; ++ #pwm-cells =3D <3>; ++ status =3D "disabled"; ++ }; ++ ++ hdmi: hdmi@1ee0000 { ++ compatible =3D "allwinner,sun50i-a64-dw-hdmi", ++ "allwinner,sun8i-a83t-dw-hdmi"; ++ reg =3D <0x01ee0000 0x10000>; ++ reg-io-width =3D <1>; ++ interrupts =3D ; ++ clocks =3D <&ccu CLK_BUS_HDMI>, <&ccu CLK_HDMI_DDC>, ++ <&ccu CLK_HDMI>; ++ clock-names =3D "iahb", "isfr", "tmds"; ++ resets =3D <&ccu RST_BUS_HDMI1>; ++ reset-names =3D "ctrl"; ++ phys =3D <&hdmi_phy>; ++ phy-names =3D "hdmi-phy"; ++ status =3D "disabled"; ++ ++ ports { ++ #address-cells =3D <1>; ++ #size-cells =3D <0>; ++ ++ hdmi_in: port@0 { ++ reg =3D <0>; ++ ++ hdmi_in_tcon1: endpoint { ++ remote-endpoint =3D <&tcon1_out_hdmi>; ++ }; ++ }; ++ ++ hdmi_out: port@1 { ++ reg =3D <1>; ++ }; ++ }; ++ }; ++ ++ hdmi_phy: hdmi-phy@1ef0000 { ++ compatible =3D "allwinner,sun50i-a64-hdmi-phy"; ++ reg =3D <0x01ef0000 0x10000>; ++ clocks =3D <&ccu CLK_BUS_HDMI>, <&ccu CLK_HDMI_DDC>, ++ <&ccu 7>; ++ clock-names =3D "bus", "mod", "pll-0"; ++ resets =3D <&ccu RST_BUS_HDMI0>; ++ reset-names =3D "phy"; ++ #phy-cells =3D <0>; ++ }; ++ + rtc: rtc@1f00000 { + compatible =3D "allwinner,sun6i-a31-rtc"; + reg =3D <0x01f00000 0x54>; + interrupts =3D , + ; ++ clock-output-names =3D "rtc-osc32k", "rtc-osc32k-out"; ++ clocks =3D <&osc32k>; ++ #clock-cells =3D <1>; + }; +=20 + r_intc: interrupt-controller@1f00c00 { +@@ -664,6 +902,29 @@ + #reset-cells =3D <1>; + }; +=20 ++ r_i2c: i2c@1f02400 { ++ compatible =3D "allwinner,sun50i-a64-i2c", ++ "allwinner,sun6i-a31-i2c"; ++ reg =3D <0x01f02400 0x400>; ++ interrupts =3D ; ++ clocks =3D <&r_ccu CLK_APB0_I2C>; ++ resets =3D <&r_ccu RST_APB0_I2C>; ++ status =3D "disabled"; ++ #address-cells =3D <1>; ++ #size-cells =3D <0>; ++ }; ++ ++ r_pwm: pwm@1f03800 { ++ compatible =3D "allwinner,sun50i-a64-pwm", ++ "allwinner,sun5i-a13-pwm"; ++ reg =3D <0x01f03800 0x400>; ++ clocks =3D <&osc24M>; ++ pinctrl-names =3D "default"; ++ pinctrl-0 =3D <&r_pwm_pin>; ++ #pwm-cells =3D <3>; ++ status =3D "disabled"; ++ }; ++ + r_pio: pinctrl@1f02c00 { + compatible =3D "allwinner,sun50i-a64-r-pinctrl"; + reg =3D <0x01f02c00 0x400>; +@@ -675,6 +936,16 @@ + interrupt-controller; + #interrupt-cells =3D <3>; +=20 ++ r_i2c_pl89_pins: r-i2c-pl89-pins { ++ pins =3D "PL8", "PL9"; ++ function =3D "s_i2c"; ++ }; ++ ++ r_pwm_pin: pwm { ++ pins =3D "PL10"; ++ function =3D "s_pwm"; ++ }; ++ + r_rsb_pins: rsb { + pins =3D "PL0", "PL1"; + function =3D "s_rsb"; +--=20 +2.11.0 + diff --git a/gnu/packages/patches/u-boot-pinebook-dts.patch b/gnu/packages/= patches/u-boot-pinebook-dts.patch new file mode 100644 index 000000000..48c004fdf =2D-- /dev/null +++ b/gnu/packages/patches/u-boot-pinebook-dts.patch @@ -0,0 +1,388 @@ +From b972831c3cd24f3c9bb0995ed61db8f8239f3391 Mon Sep 17 00:00:00 2001 +From: Vasily Khoruzhick +Date: Mon, 5 Nov 2018 20:24:31 -0800 +Subject: [PATCH 10/13] sunxi: DT: add support for Pinebook + +Pinebook is a laptop produced by Pine64, with USB-connected keyboard, +USB-connected touchpad and an eDP LCD panel connected via a RGB-eDP +bridge from Analogix. + +Signed-off-by: Vasily Khoruzhick +Acked-by: Maxime Ripard +Tested-by: Maxime Ripard +Cc: Vagrant Cascadian +Reviewed-by: Jagan Teki +--- + arch/arm/dts/Makefile | 1 + + arch/arm/dts/sun50i-a64-pinebook-u-boot.dtsi | 15 ++ + arch/arm/dts/sun50i-a64-pinebook.dts | 294 ++++++++++++++++++++++= +++++ + configs/pinebook_defconfig | 22 ++ + 4 files changed, 332 insertions(+) + create mode 100644 arch/arm/dts/sun50i-a64-pinebook-u-boot.dtsi + create mode 100644 arch/arm/dts/sun50i-a64-pinebook.dts + create mode 100644 configs/pinebook_defconfig + +diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile +index 3093c1185e..eae6b9ee5d 100644 +--- a/arch/arm/dts/Makefile ++++ b/arch/arm/dts/Makefile +@@ -406,6 +406,7 @@ dtb-$(CONFIG_MACH_SUN50I) +=3D \ + sun50i-a64-orangepi-win.dtb \ + sun50i-a64-pine64-plus.dtb \ + sun50i-a64-pine64.dtb \ ++ sun50i-a64-pinebook.dtb \ + sun50i-a64-sopine-baseboard.dtb + dtb-$(CONFIG_MACH_SUN9I) +=3D \ + sun9i-a80-optimus.dtb \ +diff --git a/arch/arm/dts/sun50i-a64-pinebook-u-boot.dtsi b/arch/arm/dts/s= un50i-a64-pinebook-u-boot.dtsi +new file mode 100644 +index 0000000000..a99b7171d0 +--- /dev/null ++++ b/arch/arm/dts/sun50i-a64-pinebook-u-boot.dtsi +@@ -0,0 +1,15 @@ ++// SPDX-License-Identifier: (GPL-2.0+ OR MIT) ++/* ++ * Copyright (C) 2018 Vasily Khoruzhick ++ * ++ */ ++ ++/* The ANX6345 eDP-bridge is on r_i2c */ ++&r_i2c { ++ anx6345: edp-bridge@38 { ++ compatible =3D "analogix,anx6345"; ++ reg =3D <0x38>; ++ reset-gpios =3D <&pio 3 24 GPIO_ACTIVE_LOW>; /* PD24 */ ++ status =3D "okay"; ++ }; ++}; +diff --git a/arch/arm/dts/sun50i-a64-pinebook.dts b/arch/arm/dts/sun50i-a6= 4-pinebook.dts +new file mode 100644 +index 0000000000..ec537c5297 +--- /dev/null ++++ b/arch/arm/dts/sun50i-a64-pinebook.dts +@@ -0,0 +1,294 @@ ++// SPDX-License-Identifier: (GPL-2.0+ OR MIT) ++/* ++ * Copyright (C) 2017 Icenowy Zheng ++ * Copyright (C) 2018 Vasily Khoruzhick ++ * ++ */ ++ ++/dts-v1/; ++ ++#include "sun50i-a64.dtsi" ++ ++#include ++#include ++#include ++ ++/ { ++ model =3D "Pinebook"; ++ compatible =3D "pine64,pinebook", "allwinner,sun50i-a64"; ++ ++ aliases { ++ serial0 =3D &uart0; ++ ethernet0 =3D &rtl8723cs; ++ }; ++ ++ vdd_bl: regulator@0 { ++ compatible =3D "regulator-fixed"; ++ regulator-name =3D "bl-3v3"; ++ regulator-min-microvolt =3D <3300000>; ++ regulator-max-microvolt =3D <3300000>; ++ gpio =3D <&pio 7 6 GPIO_ACTIVE_HIGH>; /* PH6 */ ++ enable-active-high; ++ }; ++ ++ backlight: backlight { ++ compatible =3D "pwm-backlight"; ++ pwms =3D <&pwm 0 50000 0>; ++ brightness-levels =3D <0 5 10 15 20 30 40 55 70 85 100>; ++ default-brightness-level =3D <2>; ++ enable-gpios =3D <&pio 3 23 GPIO_ACTIVE_HIGH>; /* PD23 */ ++ power-supply =3D <&vdd_bl>; ++ }; ++ ++ chosen { ++ stdout-path =3D "serial0:115200n8"; ++ ++ framebuffer-lcd { ++ panel-supply =3D <®_dc1sw>; ++ dvdd25-supply =3D <®_dldo2>; ++ dvdd12-supply =3D <®_fldo1>; ++ }; ++ }; ++ ++ gpio_keys { ++ compatible =3D "gpio-keys"; ++ ++ lid_switch { ++ label =3D "Lid Switch"; ++ gpios =3D <&r_pio 0 12 GPIO_ACTIVE_LOW>; /* PL12 */ ++ linux,input-type =3D ; ++ linux,code =3D ; ++ linux,can-disable; ++ wakeup-source; ++ }; ++ }; ++ ++ reg_vcc3v3: vcc3v3 { ++ compatible =3D "regulator-fixed"; ++ regulator-name =3D "vcc3v3"; ++ regulator-min-microvolt =3D <3300000>; ++ regulator-max-microvolt =3D <3300000>; ++ }; ++ ++ wifi_pwrseq: wifi_pwrseq { ++ compatible =3D "mmc-pwrseq-simple"; ++ reset-gpios =3D <&r_pio 0 2 GPIO_ACTIVE_LOW>; /* PL2 */ ++ }; ++}; ++ ++&ehci0 { ++ phys =3D <&usbphy 0>; ++ phy-names =3D "usb"; ++ status =3D "okay"; ++}; ++ ++&ehci1 { ++ status =3D "okay"; ++}; ++ ++&mmc0 { ++ pinctrl-names =3D "default"; ++ pinctrl-0 =3D <&mmc0_pins>; ++ vmmc-supply =3D <®_dcdc1>; ++ cd-gpios =3D <&pio 5 6 GPIO_ACTIVE_LOW>; ++ disable-wp; ++ bus-width =3D <4>; ++ status =3D "okay"; ++}; ++ ++&mmc1 { ++ pinctrl-names =3D "default"; ++ pinctrl-0 =3D <&mmc1_pins>; ++ vmmc-supply =3D <®_dldo4>; ++ vqmmc-supply =3D <®_eldo1>; ++ mmc-pwrseq =3D <&wifi_pwrseq>; ++ bus-width =3D <4>; ++ non-removable; ++ status =3D "okay"; ++ ++ rtl8723cs: wifi@1 { ++ reg =3D <1>; ++ }; ++}; ++ ++&mmc2 { ++ pinctrl-names =3D "default"; ++ pinctrl-0 =3D <&mmc2_pins>, <&mmc2_ds_pin>; ++ vmmc-supply =3D <®_dcdc1>; ++ vqmmc-supply =3D <®_eldo1>; ++ bus-width =3D <8>; ++ non-removable; ++ cap-mmc-hw-reset; ++ mmc-hs200-1_8v; ++ status =3D "okay"; ++}; ++ ++&ohci0 { ++ phys =3D <&usbphy 0>; ++ phy-names =3D "usb"; ++ status =3D "okay"; ++}; ++ ++&ohci1 { ++ status =3D "okay"; ++}; ++ ++&pwm { ++ status =3D "okay"; ++}; ++ ++&r_rsb { ++ status =3D "okay"; ++ ++ axp803: pmic@3a3 { ++ compatible =3D "x-powers,axp803"; ++ reg =3D <0x3a3>; ++ interrupt-parent =3D <&r_intc>; ++ interrupts =3D <0 IRQ_TYPE_LEVEL_LOW>; ++ }; ++}; ++ ++/* The ANX6345 eDP-bridge is on r_i2c */ ++&r_i2c { ++ clock-frequency =3D <100000>; ++ pinctrl-names =3D "default"; ++ pinctrl-0 =3D <&r_i2c_pl89_pins>; ++ status =3D "okay"; ++}; ++ ++#include "axp803.dtsi" ++ ++®_aldo1 { ++ regulator-min-microvolt =3D <2800000>; ++ regulator-max-microvolt =3D <2800000>; ++ regulator-name =3D "vcc-csi"; ++}; ++ ++®_aldo2 { ++ regulator-always-on; ++ regulator-min-microvolt =3D <1800000>; ++ regulator-max-microvolt =3D <3300000>; ++ regulator-name =3D "vcc-pl"; ++}; ++ ++®_aldo3 { ++ regulator-always-on; ++ regulator-min-microvolt =3D <2700000>; ++ regulator-max-microvolt =3D <3300000>; ++ regulator-name =3D "vcc-pll-avcc"; ++}; ++ ++®_dc1sw { ++ regulator-name =3D "vcc-lcd"; ++}; ++ ++®_dcdc1 { ++ regulator-always-on; ++ regulator-min-microvolt =3D <3300000>; ++ regulator-max-microvolt =3D <3300000>; ++ regulator-name =3D "vcc-3v3"; ++}; ++ ++®_dcdc2 { ++ regulator-always-on; ++ regulator-min-microvolt =3D <1000000>; ++ regulator-max-microvolt =3D <1300000>; ++ regulator-name =3D "vdd-cpux"; ++}; ++ ++/* DCDC3 is polyphased with DCDC2 */ ++ ++®_dcdc5 { ++ regulator-always-on; ++ regulator-min-microvolt =3D <1200000>; ++ regulator-max-microvolt =3D <1200000>; ++ regulator-name =3D "vcc-dram"; ++}; ++ ++®_dcdc6 { ++ regulator-always-on; ++ regulator-min-microvolt =3D <1100000>; ++ regulator-max-microvolt =3D <1100000>; ++ regulator-name =3D "vdd-sys"; ++}; ++ ++®_dldo1 { ++ regulator-min-microvolt =3D <3300000>; ++ regulator-max-microvolt =3D <3300000>; ++ regulator-name =3D "vcc-hdmi"; ++}; ++ ++®_dldo2 { ++ regulator-min-microvolt =3D <2500000>; ++ regulator-max-microvolt =3D <2500000>; ++ regulator-name =3D "vcc-edp"; ++}; ++ ++®_dldo3 { ++ regulator-min-microvolt =3D <3300000>; ++ regulator-max-microvolt =3D <3300000>; ++ regulator-name =3D "avdd-csi"; ++}; ++ ++®_dldo4 { ++ regulator-min-microvolt =3D <3300000>; ++ regulator-max-microvolt =3D <3300000>; ++ regulator-name =3D "vcc-wifi"; ++}; ++ ++®_eldo1 { ++ regulator-always-on; ++ regulator-min-microvolt =3D <1800000>; ++ regulator-max-microvolt =3D <1800000>; ++ regulator-name =3D "cpvdd"; ++}; ++ ++®_eldo3 { ++ regulator-min-microvolt =3D <1800000>; ++ regulator-max-microvolt =3D <1800000>; ++ regulator-name =3D "vdd-1v8-csi"; ++}; ++ ++®_fldo1 { ++ regulator-min-microvolt =3D <1200000>; ++ regulator-max-microvolt =3D <1200000>; ++ regulator-name =3D "vcc-1v2-hsic"; ++}; ++ ++®_fldo2 { ++ regulator-always-on; ++ regulator-min-microvolt =3D <1100000>; ++ regulator-max-microvolt =3D <1100000>; ++ regulator-name =3D "vdd-cpus"; ++}; ++ ++®_ldo_io0 { ++ regulator-min-microvolt =3D <3300000>; ++ regulator-max-microvolt =3D <3300000>; ++ regulator-name =3D "vcc-usb"; ++ status =3D "okay"; ++}; ++ ++®_rtc_ldo { ++ regulator-name =3D "vcc-rtc"; ++}; ++ ++&simplefb_hdmi { ++ vcc-hdmi-supply =3D <®_dldo1>; ++}; ++ ++&uart0 { ++ pinctrl-names =3D "default"; ++ pinctrl-0 =3D <&uart0_pb_pins>; ++ status =3D "okay"; ++}; ++ ++&usb_otg { ++ dr_mode =3D "host"; ++}; ++ ++&usbphy { ++ usb0_vbus-supply =3D <®_ldo_io0>; ++ usb1_vbus-supply =3D <®_ldo_io0>; ++ status =3D "okay"; ++}; +diff --git a/configs/pinebook_defconfig b/configs/pinebook_defconfig +new file mode 100644 +index 0000000000..5294dbd2eb +--- /dev/null ++++ b/configs/pinebook_defconfig +@@ -0,0 +1,22 @@ ++CONFIG_ARM=3Dy ++CONFIG_ARCH_SUNXI=3Dy ++CONFIG_SPL=3Dy ++CONFIG_MACH_SUN50I=3Dy ++CONFIG_SUNXI_DRAM_LPDDR3_STOCK=3Dy ++CONFIG_DRAM_CLK=3D552 ++CONFIG_DRAM_ZQ=3D3881949 ++CONFIG_MMC_SUNXI_SLOT_EXTRA=3D2 ++CONFIG_R_I2C_ENABLE=3Dy ++# CONFIG_CMD_FLASH is not set ++# CONFIG_SPL_DOS_PARTITION is not set ++# CONFIG_SPL_EFI_PARTITION is not set ++CONFIG_DEFAULT_DEVICE_TREE=3D"sun50i-a64-pinebook" ++CONFIG_DM_REGULATOR=3Dy ++CONFIG_DM_REGULATOR_FIXED=3Dy ++CONFIG_DM_PWM=3Dy ++CONFIG_PWM_SUNXI=3Dy ++CONFIG_USB_EHCI_HCD=3Dy ++CONFIG_SYS_USB_EVENT_POLL_VIA_INT_QUEUE=3Dy ++# CONFIG_USB_GADGET is not set ++CONFIG_VIDEO_BRIDGE=3Dy ++CONFIG_VIDEO_BRIDGE_ANALOGIX_ANX6345=3Dy +--=20 +2.11.0 + diff --git a/gnu/packages/patches/u-boot-pinebook-mmc-calibration.patch b/g= nu/packages/patches/u-boot-pinebook-mmc-calibration.patch new file mode 100644 index 000000000..118bdf8e0 =2D-- /dev/null +++ b/gnu/packages/patches/u-boot-pinebook-mmc-calibration.patch @@ -0,0 +1,98 @@ +From 20940ef2a397446a209350900d3bd618c3fd5b94 Mon Sep 17 00:00:00 2001 +From: Vasily Khoruzhick +Date: Mon, 5 Nov 2018 20:24:28 -0800 +Subject: [PATCH 07/13] mmc: sunxi: add support for automatic delay calibra= tion + +A64 and H6 support automatic delay calibration and Linux driver uses it +instead of hardcoded delays. Add support for it to u-boot driver. + +Fixes eMMC instability on Pinebook + +Signed-off-by: Vasily Khoruzhick +Acked-by: Maxime Ripard +Tested-by: Maxime Ripard +Reviewed-by: Andre Przywara +Cc: Vagrant Cascadian +Reviewed-by: Jagan Teki +--- + arch/arm/include/asm/arch-sunxi/mmc.h | 6 +++++- + drivers/mmc/sunxi_mmc.c | 21 ++++++++++++++++++++- + 2 files changed, 25 insertions(+), 2 deletions(-) + +diff --git a/arch/arm/include/asm/arch-sunxi/mmc.h b/arch/arm/include/asm/= arch-sunxi/mmc.h +index d98c53faaa..f2deafddd2 100644 +--- a/arch/arm/include/asm/arch-sunxi/mmc.h ++++ b/arch/arm/include/asm/arch-sunxi/mmc.h +@@ -46,7 +46,9 @@ struct sunxi_mmc { + u32 cbda; /* 0x94 */ + u32 res2[26]; + #if defined(CONFIG_SUNXI_GEN_SUN6I) || defined(CONFIG_MACH_SUN50I_H6) +- u32 res3[64]; ++ u32 res3[17]; ++ u32 samp_dl; ++ u32 res4[46]; + #endif + u32 fifo; /* 0x100 / 0x200 FIFO access address */ + }; +@@ -130,5 +132,7 @@ struct sunxi_mmc { + #define SUNXI_MMC_COMMON_CLK_GATE (1 << 16) + #define SUNXI_MMC_COMMON_RESET (1 << 18) +=20 ++#define SUNXI_MMC_CAL_DL_SW_EN (0x1 << 7) ++ + struct mmc *sunxi_mmc_init(int sdc_no); + #endif /* _SUNXI_MMC_H */ +diff --git a/drivers/mmc/sunxi_mmc.c b/drivers/mmc/sunxi_mmc.c +index 39f15eb423..147eb9b4d5 100644 +--- a/drivers/mmc/sunxi_mmc.c ++++ b/drivers/mmc/sunxi_mmc.c +@@ -99,11 +99,16 @@ static int mmc_set_mod_clk(struct sunxi_mmc_priv *priv= , unsigned int hz) + { + unsigned int pll, pll_hz, div, n, oclk_dly, sclk_dly; + bool new_mode =3D false; ++ bool calibrate =3D false; + u32 val =3D 0; +=20 + if (IS_ENABLED(CONFIG_MMC_SUNXI_HAS_NEW_MODE) && (priv->mmc_no =3D=3D 2)) + new_mode =3D true; +=20 ++#if defined(CONFIG_MACH_SUN50I) || defined(CONFIG_MACH_SUN50I_H6) ++ calibrate =3D true; ++#endif ++ + /* + * The MMC clock has an extra /2 post-divider when operating in the new + * mode. +@@ -174,7 +179,11 @@ static int mmc_set_mod_clk(struct sunxi_mmc_priv *pri= v, unsigned int hz) + val =3D CCM_MMC_CTRL_MODE_SEL_NEW; + setbits_le32(&priv->reg->ntsr, SUNXI_MMC_NTSR_MODE_SEL_NEW); + #endif +- } else { ++ } else if (!calibrate) { ++ /* ++ * Use hardcoded delay values if controller doesn't support ++ * calibration ++ */ + val =3D CCM_MMC_CTRL_OCLK_DLY(oclk_dly) | + CCM_MMC_CTRL_SCLK_DLY(sclk_dly); + } +@@ -228,6 +237,16 @@ static int mmc_config_clock(struct sunxi_mmc_priv *pr= iv, struct mmc *mmc) + rval &=3D ~SUNXI_MMC_CLK_DIVIDER_MASK; + writel(rval, &priv->reg->clkcr); +=20 ++#if defined(CONFIG_MACH_SUN50I) || defined(CONFIG_MACH_SUN50I_H6) ++ /* A64 supports calibration of delays on MMC controller and we ++ * have to set delay of zero before starting calibration. ++ * Allwinner BSP driver sets a delay only in the case of ++ * using HS400 which is not supported by mainline U-Boot or ++ * Linux at the moment ++ */ ++ writel(SUNXI_MMC_CAL_DL_SW_EN, &priv->reg->samp_dl); ++#endif ++ + /* Re-enable Clock */ + rval |=3D SUNXI_MMC_CLK_ENABLE; + writel(rval, &priv->reg->clkcr); +--=20 +2.11.0 + diff --git a/gnu/packages/patches/u-boot-pinebook-r_i2c-controller.patch b/= gnu/packages/patches/u-boot-pinebook-r_i2c-controller.patch new file mode 100644 index 000000000..824a16b9d =2D-- /dev/null +++ b/gnu/packages/patches/u-boot-pinebook-r_i2c-controller.patch @@ -0,0 +1,70 @@ +From 31a4ac4d79d75baeede3edfa95515fd4169ef502 Mon Sep 17 00:00:00 2001 +From: Vasily Khoruzhick +Date: Mon, 5 Nov 2018 20:24:30 -0800 +Subject: [PATCH 09/13] sun50i: A64: add support for R_I2C controller + +Allwinner A64 has a I2C controller, which is in the R_ MMIO zone and has +two groups of pinmuxes on PL bank, so it's called R_I2C. + +Add support for this I2C controller and the pinmux which doesn't conflict +with RSB. + +Signed-off-by: Vasily Khoruzhick +Acked-by: Maxime Ripard +Tested-by: Maxime Ripard +Cc: Vagrant Cascadian +Acked-by: Jagan Teki +--- + arch/arm/include/asm/arch-sunxi/gpio.h | 1 + + arch/arm/mach-sunxi/Kconfig | 1 + + board/sunxi/board.c | 6 ++++++ + 3 files changed, 8 insertions(+) + +diff --git a/arch/arm/include/asm/arch-sunxi/gpio.h b/arch/arm/include/asm= /arch-sunxi/gpio.h +index 6a5eafc3d3..2daf23f6f5 100644 +--- a/arch/arm/include/asm/arch-sunxi/gpio.h ++++ b/arch/arm/include/asm/arch-sunxi/gpio.h +@@ -211,6 +211,7 @@ enum sunxi_gpio_number { + #define SUN8I_H3_GPL_R_TWI 2 + #define SUN8I_A23_GPL_R_TWI 3 + #define SUN8I_GPL_R_UART 2 ++#define SUN50I_GPL_R_TWI 2 +=20 + #define SUN9I_GPN_R_RSB 3 +=20 +diff --git a/arch/arm/mach-sunxi/Kconfig b/arch/arm/mach-sunxi/Kconfig +index 6277abc3cc..560dc9b25d 100644 +--- a/arch/arm/mach-sunxi/Kconfig ++++ b/arch/arm/mach-sunxi/Kconfig +@@ -278,6 +278,7 @@ config MACH_SUN50I + select ARM64 + select DM_I2C + select PHY_SUN4I_USB ++ select SUN6I_PRCM + select SUNXI_DE2 + select SUNXI_GEN_SUN6I + select SUPPORT_SPL +diff --git a/board/sunxi/board.c b/board/sunxi/board.c +index b196d48674..64ccbc7245 100644 +--- a/board/sunxi/board.c ++++ b/board/sunxi/board.c +@@ -168,10 +168,16 @@ void i2c_init_board(void) + #endif +=20 + #ifdef CONFIG_R_I2C_ENABLE ++#ifdef CONFIG_MACH_SUN50I ++ clock_twi_onoff(5, 1); ++ sunxi_gpio_set_cfgpin(SUNXI_GPL(8), SUN50I_GPL_R_TWI); ++ sunxi_gpio_set_cfgpin(SUNXI_GPL(9), SUN50I_GPL_R_TWI); ++#else + clock_twi_onoff(5, 1); + sunxi_gpio_set_cfgpin(SUNXI_GPL(0), SUN8I_H3_GPL_R_TWI); + sunxi_gpio_set_cfgpin(SUNXI_GPL(1), SUN8I_H3_GPL_R_TWI); + #endif ++#endif + } +=20 + #if defined(CONFIG_ENV_IS_IN_MMC) && defined(CONFIG_ENV_IS_IN_FAT) +--=20 +2.11.0 + diff --git a/gnu/packages/patches/u-boot-pinebook-syscon-node.patch b/gnu/p= ackages/patches/u-boot-pinebook-syscon-node.patch new file mode 100644 index 000000000..9289645be =2D-- /dev/null +++ b/gnu/packages/patches/u-boot-pinebook-syscon-node.patch @@ -0,0 +1,38 @@ +From ababb5920e8992c9bb7956df3cc85dc68d27dfe8 Mon Sep 17 00:00:00 2001 +From: Andre Przywara +Date: Mon, 29 Oct 2018 00:56:48 +0000 +Subject: [PATCH 04/13] sunxi: A64: Re-add syscon to DT node + +The sun50i-a64.dtsi changes introduced in Linux v4.19-rc1 changed the +compatible name for the syscon controller, dropping the generic "syscon" +fallback. Using this new DT node will make the Ethernet driver in every +older kernel (or non-Linux kernels) fail to initialise the MAC device. + +To allow booting distribution kernels (from installer images via UEFI, +for instance), re-add the syscon compatible string as a fallback. This +works with both older and newer kernels. + +Signed-off-by: Andre Przywara +Acked-by: Maxime Ripard +Reviewed-by: Jagan Teki +--- + arch/arm/dts/sun50i-a64.dtsi | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/arch/arm/dts/sun50i-a64.dtsi b/arch/arm/dts/sun50i-a64.dtsi +index f3a66f8882..ff41abc96a 100644 +--- a/arch/arm/dts/sun50i-a64.dtsi ++++ b/arch/arm/dts/sun50i-a64.dtsi +@@ -259,7 +259,8 @@ + }; +=20 + syscon: syscon@1c00000 { +- compatible =3D "allwinner,sun50i-a64-system-control"; ++ compatible =3D "allwinner,sun50i-a64-system-control", ++ "syscon"; + reg =3D <0x01c00000 0x1000>; + #address-cells =3D <1>; + #size-cells =3D <1>; +--=20 +2.11.0 + diff --git a/gnu/packages/patches/u-boot-pinebook-video-bridge.patch b/gnu/= packages/patches/u-boot-pinebook-video-bridge.patch new file mode 100644 index 000000000..8c6ca8a99 =2D-- /dev/null +++ b/gnu/packages/patches/u-boot-pinebook-video-bridge.patch @@ -0,0 +1,50 @@ +From 8336a43792a103c13d939b3925cb75322911f7fb Mon Sep 17 00:00:00 2001 +From: Vasily Khoruzhick +Date: Mon, 5 Nov 2018 20:24:29 -0800 +Subject: [PATCH 08/13] dm: video: bridge: don't fail to activate bridge if + reset or sleep GPIO is missing + +Both GPIOs are optional, so we shouldn't fail if any is missing. +Without this fix reset is not deasserted if sleep GPIO is missing. + +Signed-off-by: Vasily Khoruzhick +Acked-by: Maxime Ripard +Tested-by: Maxime Ripard +Reviewed-by: Andre Przywara +Cc: Vagrant Cascadian +--- + drivers/video/bridge/video-bridge-uclass.c | 16 +++++++++++----- + 1 file changed, 11 insertions(+), 5 deletions(-) + +diff --git a/drivers/video/bridge/video-bridge-uclass.c b/drivers/video/br= idge/video-bridge-uclass.c +index cd4959cc71..5fecb4cfd5 100644 +--- a/drivers/video/bridge/video-bridge-uclass.c ++++ b/drivers/video/bridge/video-bridge-uclass.c +@@ -106,13 +106,19 @@ static int video_bridge_pre_probe(struct udevice *de= v) + int video_bridge_set_active(struct udevice *dev, bool active) + { + struct video_bridge_priv *uc_priv =3D dev_get_uclass_priv(dev); +- int ret; ++ int ret =3D 0; +=20 + debug("%s: %d\n", __func__, active); +- ret =3D dm_gpio_set_value(&uc_priv->sleep, !active); +- if (ret) +- return ret; +- if (active) { ++ if (uc_priv->sleep.dev) { ++ ret =3D dm_gpio_set_value(&uc_priv->sleep, !active); ++ if (ret) ++ return ret; ++ } ++ ++ if (!active) ++ return 0; ++ ++ if (uc_priv->reset.dev) { + ret =3D dm_gpio_set_value(&uc_priv->reset, true); + if (ret) + return ret; +--=20 +2.11.0 + diff --git a/gnu/system/install.scm b/gnu/system/install.scm index a648ddf95..45b3a0c83 100644 =2D-- a/gnu/system/install.scm +++ b/gnu/system/install.scm @@ -53,6 +53,7 @@ nintendo-nes-classic-edition-installation-os novena-installation-os pine64-plus-installation-os + pinebook-installation-os rk3399-puma-installation-os wandboard-installation-os os-with-u-boot)) @@ -473,6 +474,11 @@ The bootloader BOOTLOADER is installed to BOOTLOADER-T= ARGET." "/dev/mmcblk0" ; SD card storage "ttyS0")) =20 +(define pinebook-installation-os + (embedded-installation-os u-boot-pinebook-bootloader + "/dev/mmcblk0" ; SD card storage + "ttyS0")) + (define rk3399-puma-installation-os (embedded-installation-os u-boot-puma-rk3399-bootloader "/dev/mmcblk0" ; SD card storage =2D-=20 2.11.0 --=-=-=-- --==-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iHUEARYKAB0WIQRlgHNhO/zFx+LkXUXcUY/If5cWqgUCW/SnkAAKCRDcUY/If5cW qpJaAP9ZFViYJmn+iVF8A6ZEJxxoc1lggJQWxDbsbZLzlCf0qAEAhQ0kbTEkVSeg ewQZ6N2RE6oUTV2ZMImFodCKm2jpiAg= =QAPr -----END PGP SIGNATURE----- --==-=-=--