Jump to content

BananaPi Pro: Enabling the SATA port and compiling the kernel from source.


Myron
Go to solution Solved by Igor,

Recommended Posts

I've got one of these boards. It is just Kernel development that has ceased as there are no maintainers?  (Had I had the skills, I would have happily maintained it. ;-( )

 

Also, to get the latest Kernel later on, is it as simple as obtaining the official sources and then compiling (or cross-compiling to ARM) and then install the Kernel?  On this one I'm a bit like a duck out of water and if anyone can point me along the right path, all help will be greatly appreciated.

Edited by Myron
The conversation has substantially changed to the title has been edited to reflect the content of this thread
Link to comment
Share on other sites

  • Myron changed the title to With the BananaPi Pro now out of support, which bits are out of support & compiling the kernel from source?
5 hours ago, Myron said:

It is just Kernel development that has ceased as there are no maintainers?

 

https://www.armbian.com/newsflash/armbian-needs-your-help/

HW vendor abandoned software support about 5-6 years ago (also almost identical one from competition). Quickly after they released new model. All those boards are in theory supported in mainline kernel, but also there someone needs to maintain parts we don't. Sadly, usually upstream is breaking and remain broken for months. Situation is worse without Armbian work ... If bug fixing require weeks of work, we will not start. We can't afford to pay that. Stopping with support means organisation to support activities stops.

 

6 hours ago, Myron said:

can point me along the right path


Other skills https://forum.armbian.com/staffapplications/ are also important. A dosents of angels would probably be enough to cover for troubles around this board. But finding them is far from quick and simple. Nor organising activities  afterward to solve what needs to be solved ...
 

Its free licence software, but precious time we are loosing for dealing with troubles is far from free. Its scarce and expensive. If users wants to put all R&D and bugs on our expense, no problem, just waiting time is very very very very long. When we are counting in years its being translated to "no support". There are thousands of people and thousands of troubles with free licence software.

 

Don't worry too much since it probably won't be much worse. "Support" will remain on the same level as general Linux distros. Things works or they don't and you have nobody to complain to.

Link to comment
Share on other sites

Thanks for the explanation.   Anyway....   I managed to successfully compile the Lunx Distro from source today by cloning the git and compiling using ./compile.sh within an Ubuntu in a Hyper-V VM and now have ....

 

-rwxr-xr-x 1 myron myron    126972 Jan 30 21:36 armbian-config_22.02.0-trunk_all.deb*
-rwxr-xr-x 1 myron myron   7931936 Jan 30 21:36 armbian-firmware_22.02.0-trunk_all.deb*
-rwxr-xr-x 1 myron myron 235132592 Jan 30 21:41 armbian-firmware-full_22.02.0-trunk_all.deb*
-rwxr-xr-x 1 myron myron   2263068 Jan 30 21:36 armbian-zsh_22.02.0-trunk_all.deb*
-rwxr-xr-x 1 myron myron    195260 Jan 30 21:36 linux-dtb-current-sunxi_22.02.0-trunk_armhf.deb*
-rwxr-xr-x 1 myron myron  11487292 Jan 30 21:36 linux-headers-current-sunxi_22.02.0-trunk_armhf.deb*
-rwxr-xr-x 1 myron myron  37177204 Jan 30 21:36 linux-image-current-sunxi_22.02.0-trunk_armhf.deb*
-rwxr-xr-x 1 myron myron   1109176 Jan 30 21:36 linux-libc-dev_22.02.0-trunk_armhf.deb*
-rwxr-xr-x 1 myron myron 166625328 Jan 30 19:30 linux-source-current-sunxi_22.02.0-trunk_all.deb*
-rwxr-xr-x 1 myron myron    259528 Jan 30 19:23 linux-u-boot-current-bananapipro_22.02.0-trunk_armhf.deb*

 

I will back-up the SD card, can you please advise me the safe way to upgrade Lunux on the BananaPi Pro from the files generated?

 

I am assuming I use dpkg and apply armbian-firmware-full_22.02.0-trunk_all.deb to install Ubuntu 22.02.0 and Linux Kernel 5.10.95?   What are the other debs for?
(I'm trying to learn how to do this for myself.)

Link to comment
Share on other sites

@Igor Does this generally mean that I can still get the updates for this BananaPi Pro, except what I'll have to do is manually compile the sources and then manually install onto the board?  I'm assuming that the AllWinner A20 SoC itself is going to be supported for a very long time?  I'm not 100% sure how this will work.  I do know that, generally, how this board is now just community support, how I tinker with this means (I read it) "I'm on my own".

 

Compiling from sources was not painful. Thank-you for putting together the script that automated the compilation process. I would, at my level of Linux Knowledge, am clueless at what would need to be done if it all had to be manually compiled without a script.

Link to comment
Share on other sites

2 hours ago, Myron said:

Does this generally mean that I can still get the updates for this BananaPi Pro, except what I'll have to do is manually compile the sources and then manually install onto the board?  I'm assuming that the AllWinner A20 SoC itself is going to be supported for a very long time?  I'm not 100% sure how this will work.  I do know that, generally, how this board is now just community support, how I tinker with this means (I read it) "I'm on my own".

 

Yes, that is exactly what it means.  The removal from 'Supported' just means we are no longer hosting pre-compiled binaries on our infrastructure (and some other things).  You can still build them, just as before, as you figured out by now.

 

A20 has been around for a long time (Armbian first board was cubietruck in fact) and in Linux, generally speaking, longer = better (which is the reverse of the "new shiny" disease that a lot of (young?) people seem to have nowadays, but I digress).  With some exceptions for maintenance, of course, where newer kernel changes can break older things that used to work (that's called a regression btw).

 

2 hours ago, Myron said:

Compiling from sources was not painful. Thank-you for putting together the script that automated the compilation process. I would, at my level of Linux Knowledge, am clueless at what would need to be done if it all had to be manually compiled without a script.

 

This is essentially the raison d'être for Armbian in the first place.

 

At this point, you have a choice.  You can take your new found knowledge and keep it to yourself.  Which is the way things were before Armbian.  And still are with some other projects and boards in other places.  With info scattered all around, and everyone doing their own thing, keeping the (hard won) knowledge to themselves.

 

Or, if you end up fixing something on your own anyway, in order to keep your board(s) running, you can contribute those changes back to Armbian, where they will benefit everyone -- the same way you have benefited.  Whether that be in the form of a PR, or even just forum participation.

 

Cheers!

 

Link to comment
Share on other sites

That's what I would do. If I found something then I certainly would contribute back to Armbian. The more I learn and remember (and getting helped along the way) then I can return the favour and help others with what I've learned.  I think I'll try get involved more with the Forums as so far, at least for me, the Armbian Distro on the BananaPi Pro is rock-solid reliable.

 

I now brave applying the compiled 22.02.0 version to the BPi Pro and, yes, I've performed a sector-by-sector backup of the present stable installation.  (Wish me luck....)

 

ADDITION: YAY! Kernel 5.10.95-sunix installed and working.  :-)

Link to comment
Share on other sites

| __ )|  _ \(_) |  _ \ _ __ ___  
|  _ \| |_) | | | |_) | '__/ _ \ 
| |_) |  __/| | |  __/| | | (_) |
|____/|_|   |_| |_|   |_|  \___/ 
                                 
Welcome to Armbian 22.05.0-trunk  with Linux 5.15.30-sunxi

No end-user support: built from trunk

System load:   7%           	Up time:       26 min	
Memory usage:  6% of 967M   	IP:	       192.168.1.251
CPU temp:      34°C           	Usage of /:    71% of 908M   	

 

building kernel and minimal image was succesful.

 

But SATA is missing. Solution is to enable the reg_ahci_5v regulator pin like this:

https://git.yoctoproject.org/linux-yocto-contrib/plain/arch/arm/boot/dts/sun7i-a20-itead-ibox.dts

 

Tested with a user overlay and armbian-add-overlay - SATA is back.

 

I'd like to integrate it into armbian:

- patch in patch/kernel/archive/sunxi-5.15/patches.armbian/arm-dts-sun7i-a20-bananapro-add-ahci-regulator.patch

- added to patch/kernel/archive/sunxi-5.15/series.armbian

 

But it get's not processed during kernel compiling? @Igor what I'm missing.

 

There is already a patches.armbian/arm-dts-sun7i-a20-bananapro-add-hdmi-connector-de.patch - would it better to patch this patch to have only one file per board?

 

 

Link to comment
Share on other sites

Hi @Igor perfect, thanks.

 

Next step is to upgarde the WIFI firmware to 5.90.244:

[   13.975858] brcmfmac: brcmf_c_preinit_dcmds: Firmware: BCM43362/1 wl0: May 16 2018 23:42:49 version 5.90.244 FWID 01-0

I loaded it from kernel git here: https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/tree/brcm?id=d9430acf46774d75fa269a667b7b4598d60aa353

It magically diasppeared in the current kernel git repository, but I found it in a commit from 2018.

 

I will test it for the next few days and then upload to armbian firmware repo.

Link to comment
Share on other sites

@teknoidI've for one of these BananaPi Pro boards, but I don't have the knowledge or expertise to be a maintainer.  Currently jittery about updating the kernel as the last upgrade from 5.15.27 to 5.15.28 resulted in the board failing to getting "Starting Kernel ..." and this is with verbosity=7 set.  Something's not right at the moment with the installed Linux so as I've type now I've got ./compile.sh compiling a U-Boot and kernel which will be version 5.15.30 when it's complete.

 

Issue I've got is that all the laptops I've got are Windows.  Unfortunately a necessity.  Got one laptop which I may be able to install native Linux on it and can then use it to diagnose a non-starting BananaPi Pro.

 

Will these patches and updates be available via the trunk builds?  I do not know how that works. That's the route I took to keep my Banana Pro up-to-date.

Link to comment
Share on other sites

yes, these patches will go into official armbian images and will be available with next release 22.05 I think.

 

Thanks @Igor for reactivating the state to supported. Now the official downloads are back on armbian page: https://redirect.armbian.com/bananapipro/Bullseye_current

So I recommend you to first use the official image to get proper kernel and userland environment on your board. Later you can upgrade the kernel in usual way by "apt get update / upgrade" or aptitude.

If you want to debug a non starting board you need to connect the serial console via USB to UART and watch it e.g. via minicom. And yes a native Linux machine is highly recommended 😉

 

Link to comment
Share on other sites

How would one get the proper kernel and userland environment on the board without starting from the beginning, or is that not possible? I think that would be a question for any Armbian user who's built from trunk and would wish to return to a supported build without undoing all the customisations?  The trunk user compiled Armbian build is already on 22.05.

Link to comment
Share on other sites

On 3/23/2022 at 9:42 AM, Myron said:

How would one get the proper kernel and userland environment on the board without starting from the beginning, or is that not possible?

 

Unfortunately not supported.  I did not say not possible.  There are some threads around the forums with hints, but you will be on your own.

 

Better approach (IMO) is to learn / set up / maintain some better config management, which could be anything from a dotfiles repo to Ansible (or others) depending on your needs.  Then the idea is you just run a few things after a fresh install, and you are right back where you were.

Link to comment
Share on other sites

On 3/19/2022 at 4:48 PM, teknoid said:
| __ )|  _ \(_) |  _ \ _ __ ___  
|  _ \| |_) | | | |_) | '__/ _ \ 
| |_) |  __/| | |  __/| | | (_) |
|____/|_|   |_| |_|   |_|  \___/ 
                                 
Welcome to Armbian 22.05.0-trunk  with Linux 5.15.30-sunxi

No end-user support: built from trunk

System load:   7%           	Up time:       26 min	
Memory usage:  6% of 967M   	IP:	       192.168.1.251
CPU temp:      34°C           	Usage of /:    71% of 908M   	

 

building kernel and minimal image was succesful.

 

But SATA is missing. Solution is to enable the reg_ahci_5v regulator pin like this:

https://git.yoctoproject.org/linux-yocto-contrib/plain/arch/arm/boot/dts/sun7i-a20-itead-ibox.dts

 

Tested with a user overlay and armbian-add-overlay - SATA is back.

 

 

My dear @teknoid, I've been trying to decipher the topic of device trees and, honestly, I'm totally lost, so I beg a question. On the device tree listed in the spoiler, what do I need to do to get the SATA port up-and-running?
 

Spoiler
/dts-v1/;

/ {
	interrupt-parent = <0x01>;
	#address-cells = <0x01>;
	#size-cells = <0x01>;
	model = "LeMaker Banana Pro";
	compatible = "lemaker,bananapro\0allwinner,sun7i-a20";

	aliases {
		ethernet0 = "/soc/ethernet@1c50000";
		serial0 = "/soc/serial@1c28000";
		serial1 = "/soc/serial@1c29000";
		serial2 = "/soc/serial@1c29c00";
	};

	chosen {
		#address-cells = <0x01>;
		#size-cells = <0x01>;
		ranges;
		stdout-path = "serial0:115200n8";

		framebuffer-lcd0-hdmi {
			compatible = "allwinner,simple-framebuffer\0simple-framebuffer";
			allwinner,pipeline = "de_be0-lcd0-hdmi";
			clocks = <0x02 0x38 0x02 0x3c 0x02 0x3e 0x02 0x90 0x02 0x9b 0x02 0x8c 0x02 0xa4>;
			status = "disabled";
		};

		framebuffer-lcd0 {
			compatible = "allwinner,simple-framebuffer\0simple-framebuffer";
			allwinner,pipeline = "de_be0-lcd0";
			clocks = <0x02 0x38 0x02 0x3e 0x02 0x90 0x02 0x95 0x02 0x8c>;
			status = "disabled";
		};

		framebuffer-lcd0-tve0 {
			compatible = "allwinner,simple-framebuffer\0simple-framebuffer";
			allwinner,pipeline = "de_be0-lcd0-tve0";
			clocks = <0x02 0x36 0x02 0x38 0x02 0x3e 0x02 0x90 0x02 0x9b 0x02 0x87 0x02 0x8c>;
			status = "disabled";
		};
	};

	cpus {
		#address-cells = <0x01>;
		#size-cells = <0x00>;

		cpu@0 {
			compatible = "arm,cortex-a7";
			device_type = "cpu";
			reg = <0x00>;
			clocks = <0x02 0x14>;
			clock-latency = <0x3b9b0>;
			operating-points = <0xea600 0x155cc0 0xdea80 0x155cc0 0xd2f00 0x13d620 0xafc80 0x124f80 0x80e80 0x10c8e0 0x4c2c0 0xf4240 0x23280 0xf4240>;
			#cooling-cells = <0x02>;
			phandle = <0x05>;
		};

		cpu@1 {
			compatible = "arm,cortex-a7";
			device_type = "cpu";
			reg = <0x01>;
			clocks = <0x02 0x14>;
			clock-latency = <0x3b9b0>;
			operating-points = <0xea600 0x155cc0 0xdea80 0x155cc0 0xd2f00 0x13d620 0xafc80 0x124f80 0x80e80 0x10c8e0 0x4c2c0 0xf4240 0x23280 0xf4240>;
			#cooling-cells = <0x02>;
			phandle = <0x06>;
		};
	};

	thermal-zones {

		cpu-thermal {
			polling-delay-passive = <0xfa>;
			polling-delay = <0x3e8>;
			thermal-sensors = <0x03>;

			cooling-maps {

				map0 {
					trip = <0x04>;
					cooling-device = <0x05 0xffffffff 0xffffffff 0x06 0xffffffff 0xffffffff>;
				};
			};

			trips {

				cpu_alert0 {
					temperature = <0x124f8>;
					hysteresis = <0x7d0>;
					type = "passive";
					phandle = <0x04>;
				};

				cpu_crit {
					temperature = <0x186a0>;
					hysteresis = <0x7d0>;
					type = "critical";
					phandle = <0x41>;
				};
			};
		};
	};

	reserved-memory {
		#address-cells = <0x01>;
		#size-cells = <0x01>;
		ranges;

		default-pool {
			compatible = "shared-dma-pool";
			size = <0x6000000>;
			alloc-ranges = <0x40000000 0x10000000>;
			reusable;
			linux,cma-default;
		};
	};

	timer {
		compatible = "arm,armv7-timer";
		interrupts = <0x01 0x0d 0xf08 0x01 0x0e 0xf08 0x01 0x0b 0xf08 0x01 0x0a 0xf08>;
	};

	pmu {
		compatible = "arm,cortex-a7-pmu";
		interrupts = <0x00 0x78 0x04 0x00 0x79 0x04>;
	};

	clocks {
		#address-cells = <0x01>;
		#size-cells = <0x01>;
		ranges;

		clk-24M {
			#clock-cells = <0x00>;
			compatible = "fixed-clock";
			clock-frequency = <0x16e3600>;
			clock-output-names = "osc24M";
			phandle = <0x25>;
		};

		clk-32k {
			#clock-cells = <0x00>;
			compatible = "fixed-clock";
			clock-frequency = <0x8000>;
			clock-output-names = "osc32k";
			phandle = <0x26>;
		};

		clk-mii-phy-tx {
			#clock-cells = <0x00>;
			compatible = "fixed-clock";
			clock-frequency = <0x17d7840>;
			clock-output-names = "mii_phy_tx";
			phandle = <0x07>;
		};

		clk-gmac-int-tx {
			#clock-cells = <0x00>;
			compatible = "fixed-clock";
			clock-frequency = <0x7735940>;
			clock-output-names = "gmac_int_tx";
			phandle = <0x08>;
		};

		clk@1c20164 {
			#clock-cells = <0x00>;
			compatible = "allwinner,sun7i-a20-gmac-clk";
			reg = <0x1c20164 0x04>;
			clocks = <0x07 0x08>;
			clock-output-names = "gmac_tx";
			phandle = <0x30>;
		};
	};

	display-engine {
		compatible = "allwinner,sun7i-a20-display-engine";
		allwinner,pipelines = <0x09 0x0a>;
		status = "okay";
		phandle = <0x42>;
	};

	soc {
		compatible = "simple-bus";
		#address-cells = <0x01>;
		#size-cells = <0x01>;
		ranges;

		system-control@1c00000 {
			compatible = "allwinner,sun7i-a20-system-control\0allwinner,sun4i-a10-system-control";
			reg = <0x1c00000 0x30>;
			#address-cells = <0x01>;
			#size-cells = <0x01>;
			ranges;

			sram@0 {
				compatible = "mmio-sram";
				reg = <0x00 0xc000>;
				#address-cells = <0x01>;
				#size-cells = <0x01>;
				ranges = <0x00 0x00 0xc000>;
				phandle = <0x43>;

				sram-section@8000 {
					compatible = "allwinner,sun7i-a20-sram-a3-a4\0allwinner,sun4i-a10-sram-a3-a4";
					reg = <0x8000 0x4000>;
					status = "disabled";
					phandle = <0x0f>;
				};
			};

			sram@10000 {
				compatible = "mmio-sram";
				reg = <0x10000 0x1000>;
				#address-cells = <0x01>;
				#size-cells = <0x01>;
				ranges = <0x00 0x10000 0x1000>;
				phandle = <0x44>;

				sram-section@0 {
					compatible = "allwinner,sun7i-a20-sram-d\0allwinner,sun4i-a10-sram-d";
					reg = <0x00 0x1000>;
					status = "disabled";
					phandle = <0x1e>;
				};
			};

			sram@1d00000 {
				compatible = "mmio-sram";
				reg = <0x1d00000 0xd0000>;
				#address-cells = <0x01>;
				#size-cells = <0x01>;
				ranges = <0x00 0x1d00000 0xd0000>;
				phandle = <0x45>;

				sram-section@0 {
					compatible = "allwinner,sun7i-a20-sram-c1\0allwinner,sun4i-a10-sram-c1";
					reg = <0x00 0x80000>;
					phandle = <0x16>;
				};
			};
		};

		interrupt-controller@1c00030 {
			compatible = "allwinner,sun7i-a20-sc-nmi";
			interrupt-controller;
			#interrupt-cells = <0x02>;
			reg = <0x1c00030 0x0c>;
			interrupts = <0x00 0x00 0x04>;
			phandle = <0x2c>;
		};

		dma-controller@1c02000 {
			compatible = "allwinner,sun4i-a10-dma";
			reg = <0x1c02000 0x1000>;
			interrupts = <0x00 0x1b 0x04>;
			clocks = <0x02 0x20>;
			#dma-cells = <0x02>;
			phandle = <0x0b>;
		};

		nand-controller@1c03000 {
			compatible = "allwinner,sun4i-a10-nand";
			reg = <0x1c03000 0x1000>;
			interrupts = <0x00 0x25 0x04>;
			clocks = <0x02 0x27 0x02 0x60>;
			clock-names = "ahb\0mod";
			dmas = <0x0b 0x01 0x03>;
			dma-names = "rxtx";
			status = "disabled";
			#address-cells = <0x01>;
			#size-cells = <0x00>;
			phandle = <0x46>;
		};

		spi@1c05000 {
			compatible = "allwinner,sun4i-a10-spi";
			reg = <0x1c05000 0x1000>;
			interrupts = <0x00 0x0a 0x04>;
			clocks = <0x02 0x2c 0x02 0x70>;
			clock-names = "ahb\0mod";
			dmas = <0x0b 0x01 0x1b 0x0b 0x01 0x1a>;
			dma-names = "rx\0tx";
			status = "okay";
			#address-cells = <0x01>;
			#size-cells = <0x00>;
			num-cs = <0x04>;
			pinctrl-names = "default";
			pinctrl-0 = <0x0c 0x0d 0x0e>;
			phandle = <0x47>;
		};

		spi@1c06000 {
			compatible = "allwinner,sun4i-a10-spi";
			reg = <0x1c06000 0x1000>;
			interrupts = <0x00 0x0b 0x04>;
			clocks = <0x02 0x2d 0x02 0x71>;
			clock-names = "ahb\0mod";
			dmas = <0x0b 0x01 0x09 0x0b 0x01 0x08>;
			dma-names = "rx\0tx";
			status = "disabled";
			#address-cells = <0x01>;
			#size-cells = <0x00>;
			num-cs = <0x01>;
			phandle = <0x48>;
		};

		csi@1c09000 {
			compatible = "allwinner,sun7i-a20-csi0";
			reg = <0x1c09000 0x1000>;
			interrupts = <0x00 0x2a 0x04>;
			clocks = <0x02 0x3a 0x02 0x97 0x02 0x83>;
			clock-names = "bus\0isp\0ram";
			resets = <0x02 0x0e>;
			status = "disabled";
			phandle = <0x49>;
		};

		ethernet@1c0b000 {
			compatible = "allwinner,sun4i-a10-emac";
			reg = <0x1c0b000 0x1000>;
			interrupts = <0x00 0x37 0x04>;
			clocks = <0x02 0x2a>;
			allwinner,sram = <0x0f 0x01>;
			status = "disabled";
			phandle = <0x4a>;
		};

		mdio@1c0b080 {
			compatible = "allwinner,sun4i-a10-mdio";
			reg = <0x1c0b080 0x14>;
			status = "disabled";
			#address-cells = <0x01>;
			#size-cells = <0x00>;
			phandle = <0x4b>;
		};

		lcd-controller@1c0c000 {
			compatible = "allwinner,sun7i-a20-tcon0\0allwinner,sun7i-a20-tcon";
			reg = <0x1c0c000 0x1000>;
			interrupts = <0x00 0x2c 0x04>;
			resets = <0x02 0x0b 0x02 0x12>;
			reset-names = "lcd\0lvds";
			clocks = <0x02 0x38 0x02 0x95 0x02 0x9b>;
			clock-names = "ahb\0tcon-ch0\0tcon-ch1";
			clock-output-names = "tcon0-pixel-clock";
			#clock-cells = <0x00>;
			dmas = <0x0b 0x01 0x0e>;
			phandle = <0x4c>;

			ports {
				#address-cells = <0x01>;
				#size-cells = <0x00>;

				port@0 {
					#address-cells = <0x01>;
					#size-cells = <0x00>;
					reg = <0x00>;
					phandle = <0x4d>;

					endpoint@0 {
						reg = <0x00>;
						remote-endpoint = <0x10>;
						phandle = <0x3e>;
					};

					endpoint@1 {
						reg = <0x01>;
						remote-endpoint = <0x11>;
						phandle = <0x3a>;
					};
				};

				port@1 {
					#address-cells = <0x01>;
					#size-cells = <0x00>;
					reg = <0x01>;
					phandle = <0x4e>;

					endpoint@1 {
						reg = <0x01>;
						remote-endpoint = <0x12>;
						allwinner,tcon-channel = <0x01>;
						phandle = <0x21>;
					};
				};
			};
		};

		lcd-controller@1c0d000 {
			compatible = "allwinner,sun7i-a20-tcon1\0allwinner,sun7i-a20-tcon";
			reg = <0x1c0d000 0x1000>;
			interrupts = <0x00 0x2d 0x04>;
			resets = <0x02 0x0d>;
			reset-names = "lcd";
			clocks = <0x02 0x39 0x02 0x96 0x02 0x9d>;
			clock-names = "ahb\0tcon-ch0\0tcon-ch1";
			clock-output-names = "tcon1-pixel-clock";
			#clock-cells = <0x00>;
			dmas = <0x0b 0x01 0x0f>;
			phandle = <0x4f>;

			ports {
				#address-cells = <0x01>;
				#size-cells = <0x00>;

				port@0 {
					#address-cells = <0x01>;
					#size-cells = <0x00>;
					reg = <0x00>;
					phandle = <0x50>;

					endpoint@0 {
						reg = <0x00>;
						remote-endpoint = <0x13>;
						phandle = <0x3f>;
					};

					endpoint@1 {
						reg = <0x01>;
						remote-endpoint = <0x14>;
						phandle = <0x3b>;
					};
				};

				port@1 {
					#address-cells = <0x01>;
					#size-cells = <0x00>;
					reg = <0x01>;
					phandle = <0x51>;

					endpoint@1 {
						reg = <0x01>;
						remote-endpoint = <0x15>;
						allwinner,tcon-channel = <0x01>;
						phandle = <0x22>;
					};
				};
			};
		};

		video-codec@1c0e000 {
			compatible = "allwinner,sun7i-a20-video-engine";
			reg = <0x1c0e000 0x1000>;
			clocks = <0x02 0x34 0x02 0xa1 0x02 0x82>;
			clock-names = "ahb\0mod\0ram";
			resets = <0x02 0x10>;
			interrupts = <0x00 0x35 0x04>;
			allwinner,sram = <0x16 0x01>;
		};

		mmc@1c0f000 {
			compatible = "allwinner,sun7i-a20-mmc";
			reg = <0x1c0f000 0x1000>;
			clocks = <0x02 0x22 0x02 0x62 0x02 0x63 0x02 0x64>;
			clock-names = "ahb\0mmc\0output\0sample";
			interrupts = <0x00 0x20 0x04>;
			pinctrl-names = "default";
			pinctrl-0 = <0x17>;
			status = "okay";
			#address-cells = <0x01>;
			#size-cells = <0x00>;
			vmmc-supply = <0x18>;
			bus-width = <0x04>;
			cd-gpios = <0x19 0x07 0x0a 0x01>;
			phandle = <0x52>;
		};

		mmc@1c10000 {
			compatible = "allwinner,sun7i-a20-mmc";
			reg = <0x1c10000 0x1000>;
			clocks = <0x02 0x23 0x02 0x65 0x02 0x66 0x02 0x67>;
			clock-names = "ahb\0mmc\0output\0sample";
			interrupts = <0x00 0x21 0x04>;
			status = "disabled";
			#address-cells = <0x01>;
			#size-cells = <0x00>;
			phandle = <0x53>;
		};

		mmc@1c11000 {
			compatible = "allwinner,sun7i-a20-mmc";
			reg = <0x1c11000 0x1000>;
			clocks = <0x02 0x24 0x02 0x68 0x02 0x69 0x02 0x6a>;
			clock-names = "ahb\0mmc\0output\0sample";
			interrupts = <0x00 0x22 0x04>;
			pinctrl-names = "default";
			pinctrl-0 = <0x1a>;
			status = "disabled";
			#address-cells = <0x01>;
			#size-cells = <0x00>;
			phandle = <0x54>;
		};

		mmc@1c12000 {
			compatible = "allwinner,sun7i-a20-mmc";
			reg = <0x1c12000 0x1000>;
			clocks = <0x02 0x25 0x02 0x6b 0x02 0x6c 0x02 0x6d>;
			clock-names = "ahb\0mmc\0output\0sample";
			interrupts = <0x00 0x23 0x04>;
			pinctrl-names = "default";
			pinctrl-0 = <0x1b>;
			status = "okay";
			#address-cells = <0x01>;
			#size-cells = <0x00>;
			vmmc-supply = <0x18>;
			mmc-pwrseq = <0x1c>;
			bus-width = <0x04>;
			non-removable;
			phandle = <0x55>;

			wifi@1 {
				reg = <0x01>;
				compatible = "brcm,bcm4329-fmac";
				phandle = <0x56>;
			};
		};

		usb@1c13000 {
			compatible = "allwinner,sun4i-a10-musb";
			reg = <0x1c13000 0x400>;
			clocks = <0x02 0x1a>;
			interrupts = <0x00 0x26 0x04>;
			interrupt-names = "mc";
			phys = <0x1d 0x00>;
			phy-names = "usb";
			extcon = <0x1d 0x00>;
			allwinner,sram = <0x1e 0x01>;
			dr_mode = "otg";
			status = "disabled";
			phandle = <0x57>;
		};

		phy@1c13400 {
			#phy-cells = <0x01>;
			compatible = "allwinner,sun7i-a20-usb-phy";
			reg = <0x1c13400 0x10 0x1c14800 0x04 0x1c1c800 0x04>;
			reg-names = "phy_ctrl\0pmu1\0pmu2";
			clocks = <0x02 0x7d>;
			clock-names = "usb_phy";
			resets = <0x02 0x01 0x02 0x02 0x02 0x03>;
			reset-names = "usb0_reset\0usb1_reset\0usb2_reset";
			status = "okay";
			usb1_vbus-supply = <0x1f>;
			usb2_vbus-supply = <0x20>;
			phandle = <0x1d>;
		};

		usb@1c14000 {
			compatible = "allwinner,sun7i-a20-ehci\0generic-ehci";
			reg = <0x1c14000 0x100>;
			interrupts = <0x00 0x27 0x04>;
			clocks = <0x02 0x1b>;
			phys = <0x1d 0x01>;
			phy-names = "usb";
			status = "okay";
			phandle = <0x58>;
		};

		usb@1c14400 {
			compatible = "allwinner,sun7i-a20-ohci\0generic-ohci";
			reg = <0x1c14400 0x100>;
			interrupts = <0x00 0x40 0x04>;
			clocks = <0x02 0x7b 0x02 0x1c>;
			phys = <0x1d 0x01>;
			phy-names = "usb";
			status = "okay";
			phandle = <0x59>;
		};

		crypto-engine@1c15000 {
			compatible = "allwinner,sun7i-a20-crypto\0allwinner,sun4i-a10-crypto";
			reg = <0x1c15000 0x1000>;
			interrupts = <0x00 0x56 0x04>;
			clocks = <0x02 0x1f 0x02 0x6f>;
			clock-names = "ahb\0mod";
			phandle = <0x5a>;
		};

		hdmi@1c16000 {
			compatible = "allwinner,sun7i-a20-hdmi\0allwinner,sun5i-a10s-hdmi";
			reg = <0x1c16000 0x1000>;
			interrupts = <0x00 0x3a 0x04>;
			clocks = <0x02 0x3c 0x02 0xa4 0x02 0x09 0x02 0x12>;
			clock-names = "ahb\0mod\0pll-0\0pll-1";
			dmas = <0x0b 0x00 0x10 0x0b 0x00 0x10 0x0b 0x01 0x18>;
			dma-names = "ddc-tx\0ddc-rx\0audio-tx";
			status = "okay";
			phandle = <0x5b>;

			ports {
				#address-cells = <0x01>;
				#size-cells = <0x00>;

				port@0 {
					#address-cells = <0x01>;
					#size-cells = <0x00>;
					reg = <0x00>;
					phandle = <0x5c>;

					endpoint@0 {
						reg = <0x00>;
						remote-endpoint = <0x21>;
						phandle = <0x12>;
					};

					endpoint@1 {
						reg = <0x01>;
						remote-endpoint = <0x22>;
						phandle = <0x15>;
					};
				};

				port@1 {
					reg = <0x01>;
					phandle = <0x5d>;

					endpoint {
						remote-endpoint = <0x23>;
						phandle = <0x40>;
					};
				};
			};
		};

		spi@1c17000 {
			compatible = "allwinner,sun4i-a10-spi";
			reg = <0x1c17000 0x1000>;
			interrupts = <0x00 0x0c 0x04>;
			clocks = <0x02 0x2e 0x02 0x72>;
			clock-names = "ahb\0mod";
			dmas = <0x0b 0x01 0x1d 0x0b 0x01 0x1c>;
			dma-names = "rx\0tx";
			status = "disabled";
			#address-cells = <0x01>;
			#size-cells = <0x00>;
			num-cs = <0x01>;
			phandle = <0x5e>;
		};

		sata@1c18000 {
			compatible = "allwinner,sun4i-a10-ahci";
			reg = <0x1c18000 0x1000>;
			interrupts = <0x00 0x38 0x04>;
			clocks = <0x02 0x31 0x02 0x7a>;
			status = "okay";
			target-supply = <0x24>;
			phandle = <0x5f>;
		};

		usb@1c1c000 {
			compatible = "allwinner,sun7i-a20-ehci\0generic-ehci";
			reg = <0x1c1c000 0x100>;
			interrupts = <0x00 0x28 0x04>;
			clocks = <0x02 0x1d>;
			phys = <0x1d 0x02>;
			phy-names = "usb";
			status = "okay";
			phandle = <0x60>;
		};

		usb@1c1c400 {
			compatible = "allwinner,sun7i-a20-ohci\0generic-ohci";
			reg = <0x1c1c400 0x100>;
			interrupts = <0x00 0x41 0x04>;
			clocks = <0x02 0x7c 0x02 0x1e>;
			phys = <0x1d 0x02>;
			phy-names = "usb";
			status = "okay";
			phandle = <0x61>;
		};

		csi@1c1d000 {
			compatible = "allwinner,sun7i-a20-csi1\0allwinner,sun4i-a10-csi1";
			reg = <0x1c1d000 0x1000>;
			interrupts = <0x00 0x2b 0x04>;
			clocks = <0x02 0x3b 0x02 0x84>;
			clock-names = "bus\0ram";
			resets = <0x02 0x0f>;
			status = "disabled";
			phandle = <0x62>;
		};

		spi@1c1f000 {
			compatible = "allwinner,sun4i-a10-spi";
			reg = <0x1c1f000 0x1000>;
			interrupts = <0x00 0x32 0x04>;
			clocks = <0x02 0x2f 0x02 0x7f>;
			clock-names = "ahb\0mod";
			dmas = <0x0b 0x01 0x1f 0x0b 0x01 0x1e>;
			dma-names = "rx\0tx";
			status = "disabled";
			#address-cells = <0x01>;
			#size-cells = <0x00>;
			num-cs = <0x01>;
			phandle = <0x63>;
		};

		clock@1c20000 {
			compatible = "allwinner,sun7i-a20-ccu";
			reg = <0x1c20000 0x400>;
			clocks = <0x25 0x26>;
			clock-names = "hosc\0losc";
			#clock-cells = <0x01>;
			#reset-cells = <0x01>;
			phandle = <0x02>;
		};

		pinctrl@1c20800 {
			compatible = "allwinner,sun7i-a20-pinctrl";
			reg = <0x1c20800 0x400>;
			interrupts = <0x00 0x1c 0x04>;
			clocks = <0x02 0x4a 0x25 0x26>;
			clock-names = "apb\0hosc\0losc";
			gpio-controller;
			interrupt-controller;
			#interrupt-cells = <0x03>;
			#gpio-cells = <0x03>;
			phandle = <0x19>;

			can-pa-pins {
				pins = "PA16\0PA17";
				function = "can";
				phandle = <0x64>;
			};

			can-ph-pins {
				pins = "PH20\0PH21";
				function = "can";
				phandle = <0x65>;
			};

			clk-out-a-pin {
				pins = "PI12";
				function = "clk_out_a";
				phandle = <0x66>;
			};

			clk-out-b-pin {
				pins = "PI13";
				function = "clk_out_b";
				phandle = <0x67>;
			};

			csi-8bits-pins {
				pins = "PE0\0PE2\0PE3\0PE4\0PE5\0PE6\0PE7\0PE8\0PE9\0PE10\0PE11";
				function = "csi0";
				phandle = <0x68>;
			};

			csi-clk-pin {
				pins = "PE1";
				function = "csi0";
				phandle = <0x69>;
			};

			csi1-8bits-pg-pins {
				pins = "PG0\0PG2\0PG3\0PG4\0PG5\0PG6\0PG7\0PG8\0PG9\0PG10\0PG11";
				function = "csi1";
				phandle = <0x6a>;
			};

			csi1-24bits-ph-pins {
				pins = "PH0\0PH1\0PH2\0PH3\0PH4\0PH5\0PH6\0PH7\0PH8\0PH9\0PH10\0PH11\0PH12\0PH13\0PH14\0PH15\0PH16\0PH17\0PH18\0PH19\0PH20\0PH21\0PH22\0PH23\0PH24\0PH25\0PH26\0PH27";
				function = "csi1";
				phandle = <0x6b>;
			};

			csi1-clk-pg-pin {
				pins = "PG1";
				function = "csi1";
				phandle = <0x6c>;
			};

			emac-pa-pins {
				pins = "PA0\0PA1\0PA2\0PA3\0PA4\0PA5\0PA6\0PA7\0PA8\0PA9\0PA10\0PA11\0PA12\0PA13\0PA14\0PA15\0PA16";
				function = "emac";
				phandle = <0x6d>;
			};

			emac-ph-pins {
				pins = "PH8\0PH9\0PH10\0PH11\0PH14\0PH15\0PH16\0PH17\0PH18\0PH19\0PH20\0PH21\0PH22\0PH23\0PH24\0PH25\0PH26";
				function = "emac";
				phandle = <0x6e>;
			};

			gmac-mii-pins {
				pins = "PA0\0PA1\0PA2\0PA3\0PA4\0PA5\0PA6\0PA7\0PA8\0PA9\0PA10\0PA11\0PA12\0PA13\0PA14\0PA15\0PA16";
				function = "gmac";
				phandle = <0x6f>;
			};

			gmac-rgmii-pins {
				pins = "PA0\0PA1\0PA2\0PA3\0PA4\0PA5\0PA6\0PA7\0PA8\0PA10\0PA11\0PA12\0PA13\0PA15\0PA16";
				function = "gmac";
				drive-strength = <0x28>;
				phandle = <0x31>;
			};

			i2c0-pins {
				pins = "PB0\0PB1";
				function = "i2c0";
				phandle = <0x2b>;
			};

			i2c1-pins {
				pins = "PB18\0PB19";
				function = "i2c1";
				phandle = <0x2d>;
			};

			i2c2-pins {
				pins = "PB20\0PB21";
				function = "i2c2";
				phandle = <0x2e>;
			};

			i2c3-pins {
				pins = "PI0\0PI1";
				function = "i2c3";
				phandle = <0x2f>;
			};

			ir0-rx-pin {
				pins = "PB4";
				function = "ir0";
				phandle = <0x27>;
			};

			ir0-tx-pin {
				pins = "PB3";
				function = "ir0";
				phandle = <0x70>;
			};

			ir1-rx-pin {
				pins = "PB23";
				function = "ir1";
				phandle = <0x71>;
			};

			ir1-tx-pin {
				pins = "PB22";
				function = "ir1";
				phandle = <0x72>;
			};

			lcd-lvds0-pins {
				pins = "PD0\0PD1\0PD2\0PD3\0PD4\0PD5\0PD6\0PD7\0PD8\0PD9";
				function = "lvds0";
				phandle = <0x73>;
			};

			lcd-lvds1-pins {
				pins = "PD10\0PD11\0PD12\0PD13\0PD14\0PD15\0PD16\0PD17\0PD18\0PD19";
				function = "lvds1";
				phandle = <0x74>;
			};

			mmc0-pins {
				pins = "PF0\0PF1\0PF2\0PF3\0PF4\0PF5";
				function = "mmc0";
				drive-strength = <0x1e>;
				bias-pull-up;
				phandle = <0x17>;
			};

			mmc2-pins {
				pins = "PC6\0PC7\0PC8\0PC9\0PC10\0PC11";
				function = "mmc2";
				drive-strength = <0x1e>;
				bias-pull-up;
				phandle = <0x1a>;
			};

			mmc3-pins {
				pins = "PI4\0PI5\0PI6\0PI7\0PI8\0PI9";
				function = "mmc3";
				drive-strength = <0x1e>;
				bias-pull-up;
				phandle = <0x1b>;
			};

			ps2-0-pins {
				pins = "PI20\0PI21";
				function = "ps2";
				phandle = <0x75>;
			};

			ps2-1-ph-pins {
				pins = "PH12\0PH13";
				function = "ps2";
				phandle = <0x76>;
			};

			pwm0-pin {
				pins = "PB2";
				function = "pwm";
				phandle = <0x77>;
			};

			pwm1-pin {
				pins = "PI3";
				function = "pwm";
				phandle = <0x78>;
			};

			spdif-tx-pin {
				pins = "PB13";
				function = "spdif";
				bias-pull-up;
				phandle = <0x79>;
			};

			spi0-pi-pins {
				pins = "PI11\0PI12\0PI13";
				function = "spi0";
				phandle = <0x0c>;
			};

			spi0-cs0-pi-pin {
				pins = "PI10";
				function = "spi0";
				phandle = <0x0d>;
			};

			spi0-cs1-pi-pin {
				pins = "PI14";
				function = "spi0";
				phandle = <0x0e>;
			};

			spi1-pi-pins {
				pins = "PI17\0PI18\0PI19";
				function = "spi1";
				phandle = <0x7a>;
			};

			spi1-cs0-pi-pin {
				pins = "PI16";
				function = "spi1";
				phandle = <0x7b>;
			};

			spi2-pb-pins {
				pins = "PB15\0PB16\0PB17";
				function = "spi2";
				phandle = <0x7c>;
			};

			spi2-cs0-pb-pin {
				pins = "PB14";
				function = "spi2";
				phandle = <0x7d>;
			};

			spi2-pc-pins {
				pins = "PC20\0PC21\0PC22";
				function = "spi2";
				phandle = <0x7e>;
			};

			spi2-cs0-pc-pin {
				pins = "PC19";
				function = "spi2";
				phandle = <0x7f>;
			};

			uart0-pb-pins {
				pins = "PB22\0PB23";
				function = "uart0";
				phandle = <0x28>;
			};

			uart0-pf-pins {
				pins = "PF2\0PF4";
				function = "uart0";
				phandle = <0x80>;
			};

			uart1-pa-pins {
				pins = "PA10\0PA11";
				function = "uart1";
				phandle = <0x81>;
			};

			uart1-cts-rts-pa-pins {
				pins = "PA12\0PA13";
				function = "uart1";
				phandle = <0x82>;
			};

			uart2-pa-pins {
				pins = "PA2\0PA3";
				function = "uart2";
				phandle = <0x83>;
			};

			uart2-cts-rts-pa-pins {
				pins = "PA0\0PA1";
				function = "uart2";
				phandle = <0x84>;
			};

			uart2-pi-pins {
				pins = "PI18\0PI19";
				function = "uart2";
				phandle = <0x85>;
			};

			uart2-cts-rts-pi-pins {
				pins = "PI16\0PI17";
				function = "uart2";
				phandle = <0x86>;
			};

			uart3-pg-pins {
				pins = "PG6\0PG7";
				function = "uart3";
				phandle = <0x87>;
			};

			uart3-cts-rts-pg-pins {
				pins = "PG8\0PG9";
				function = "uart3";
				phandle = <0x88>;
			};

			uart3-ph-pins {
				pins = "PH0\0PH1";
				function = "uart3";
				phandle = <0x89>;
			};

			uart3-cts-rts-ph-pins {
				pins = "PH2\0PH3";
				function = "uart3";
				phandle = <0x8a>;
			};

			uart4-pg-pins {
				pins = "PG10\0PG11";
				function = "uart4";
				phandle = <0x8b>;
			};

			uart4-ph-pins {
				pins = "PH4\0PH5";
				function = "uart4";
				phandle = <0x29>;
			};

			uart5-ph-pins {
				pins = "PH6\0PH7";
				function = "uart5";
				phandle = <0x8c>;
			};

			uart5-pi-pins {
				pins = "PI10\0PI11";
				function = "uart5";
				phandle = <0x8d>;
			};

			uart6-pa-pins {
				pins = "PA12\0PA13";
				function = "uart6";
				phandle = <0x8e>;
			};

			uart6-pi-pins {
				pins = "PI12\0PI13";
				function = "uart6";
				phandle = <0x8f>;
			};

			uart7-pa-pins {
				pins = "PA14\0PA15";
				function = "uart7";
				phandle = <0x90>;
			};

			uart7-pi-pins {
				pins = "PI20\0PI21";
				function = "uart7";
				phandle = <0x2a>;
			};
		};

		timer@1c20c00 {
			compatible = "allwinner,sun4i-a10-timer";
			reg = <0x1c20c00 0x90>;
			interrupts = <0x00 0x16 0x04 0x00 0x17 0x04 0x00 0x18 0x04 0x00 0x19 0x04 0x00 0x43 0x04 0x00 0x44 0x04>;
			clocks = <0x25>;
		};

		watchdog@1c20c90 {
			compatible = "allwinner,sun4i-a10-wdt";
			reg = <0x1c20c90 0x10>;
			interrupts = <0x00 0x18 0x04>;
			clocks = <0x25>;
			phandle = <0x91>;
		};

		rtc@1c20d00 {
			compatible = "allwinner,sun7i-a20-rtc";
			reg = <0x1c20d00 0x20>;
			interrupts = <0x00 0x18 0x04>;
			phandle = <0x92>;
		};

		pwm@1c20e00 {
			compatible = "allwinner,sun7i-a20-pwm";
			reg = <0x1c20e00 0x0c>;
			clocks = <0x25>;
			#pwm-cells = <0x03>;
			status = "disabled";
			phandle = <0x93>;
		};

		spdif@1c21000 {
			#sound-dai-cells = <0x00>;
			compatible = "allwinner,sun4i-a10-spdif";
			reg = <0x1c21000 0x400>;
			interrupts = <0x00 0x0d 0x04>;
			clocks = <0x02 0x46 0x02 0x78>;
			clock-names = "apb\0spdif";
			dmas = <0x0b 0x00 0x02 0x0b 0x00 0x02>;
			dma-names = "rx\0tx";
			status = "disabled";
			phandle = <0x94>;
		};

		ir@1c21800 {
			compatible = "allwinner,sun4i-a10-ir";
			clocks = <0x02 0x4b 0x02 0x74>;
			clock-names = "apb\0ir";
			interrupts = <0x00 0x05 0x04>;
			reg = <0x1c21800 0x40>;
			status = "okay";
			pinctrl-names = "default";
			pinctrl-0 = <0x27>;
			phandle = <0x95>;
		};

		ir@1c21c00 {
			compatible = "allwinner,sun4i-a10-ir";
			clocks = <0x02 0x4c 0x02 0x75>;
			clock-names = "apb\0ir";
			interrupts = <0x00 0x06 0x04>;
			reg = <0x1c21c00 0x40>;
			status = "disabled";
			phandle = <0x96>;
		};

		i2s@1c22000 {
			#sound-dai-cells = <0x00>;
			compatible = "allwinner,sun4i-a10-i2s";
			reg = <0x1c22000 0x400>;
			interrupts = <0x00 0x57 0x04>;
			clocks = <0x02 0x49 0x02 0x80>;
			clock-names = "apb\0mod";
			dmas = <0x0b 0x00 0x04 0x0b 0x00 0x04>;
			dma-names = "rx\0tx";
			status = "disabled";
			phandle = <0x97>;
		};

		i2s@1c22400 {
			#sound-dai-cells = <0x00>;
			compatible = "allwinner,sun4i-a10-i2s";
			reg = <0x1c22400 0x400>;
			interrupts = <0x00 0x10 0x04>;
			clocks = <0x02 0x47 0x02 0x76>;
			clock-names = "apb\0mod";
			dmas = <0x0b 0x00 0x03 0x0b 0x00 0x03>;
			dma-names = "rx\0tx";
			status = "disabled";
			phandle = <0x98>;
		};

		lradc@1c22800 {
			compatible = "allwinner,sun4i-a10-lradc-keys";
			reg = <0x1c22800 0x100>;
			interrupts = <0x00 0x1f 0x04>;
			status = "disabled";
			phandle = <0x99>;
		};

		codec@1c22c00 {
			#sound-dai-cells = <0x00>;
			compatible = "allwinner,sun7i-a20-codec";
			reg = <0x1c22c00 0x40>;
			interrupts = <0x00 0x1e 0x04>;
			clocks = <0x02 0x45 0x02 0xa0>;
			clock-names = "apb\0codec";
			dmas = <0x0b 0x00 0x13 0x0b 0x00 0x13>;
			dma-names = "rx\0tx";
			status = "okay";
			phandle = <0x9a>;
		};

		eeprom@1c23800 {
			compatible = "allwinner,sun7i-a20-sid";
			reg = <0x1c23800 0x200>;
			phandle = <0x9b>;
		};

		i2s@1c24400 {
			#sound-dai-cells = <0x00>;
			compatible = "allwinner,sun4i-a10-i2s";
			reg = <0x1c24400 0x400>;
			interrupts = <0x00 0x5a 0x04>;
			clocks = <0x02 0x4d 0x02 0x81>;
			clock-names = "apb\0mod";
			dmas = <0x0b 0x00 0x06 0x0b 0x00 0x06>;
			dma-names = "rx\0tx";
			status = "disabled";
			phandle = <0x9c>;
		};

		rtp@1c25000 {
			compatible = "allwinner,sun5i-a13-ts";
			reg = <0x1c25000 0x100>;
			interrupts = <0x00 0x1d 0x04>;
			#thermal-sensor-cells = <0x00>;
			phandle = <0x03>;
		};

		serial@1c28000 {
			compatible = "snps,dw-apb-uart";
			reg = <0x1c28000 0x400>;
			interrupts = <0x00 0x01 0x04>;
			reg-shift = <0x02>;
			reg-io-width = <0x04>;
			clocks = <0x02 0x58>;
			status = "okay";
			pinctrl-names = "default";
			pinctrl-0 = <0x28>;
			phandle = <0x9d>;
		};

		serial@1c28400 {
			compatible = "snps,dw-apb-uart";
			reg = <0x1c28400 0x400>;
			interrupts = <0x00 0x02 0x04>;
			reg-shift = <0x02>;
			reg-io-width = <0x04>;
			clocks = <0x02 0x59>;
			status = "disabled";
			phandle = <0x9e>;
		};

		serial@1c28800 {
			compatible = "snps,dw-apb-uart";
			reg = <0x1c28800 0x400>;
			interrupts = <0x00 0x03 0x04>;
			reg-shift = <0x02>;
			reg-io-width = <0x04>;
			clocks = <0x02 0x5a>;
			status = "disabled";
			phandle = <0x9f>;
		};

		serial@1c28c00 {
			compatible = "snps,dw-apb-uart";
			reg = <0x1c28c00 0x400>;
			interrupts = <0x00 0x04 0x04>;
			reg-shift = <0x02>;
			reg-io-width = <0x04>;
			clocks = <0x02 0x5b>;
			status = "disabled";
			phandle = <0xa0>;
		};

		serial@1c29000 {
			compatible = "snps,dw-apb-uart";
			reg = <0x1c29000 0x400>;
			interrupts = <0x00 0x11 0x04>;
			reg-shift = <0x02>;
			reg-io-width = <0x04>;
			clocks = <0x02 0x5c>;
			status = "okay";
			pinctrl-names = "default";
			pinctrl-0 = <0x29>;
			phandle = <0xa1>;
		};

		serial@1c29400 {
			compatible = "snps,dw-apb-uart";
			reg = <0x1c29400 0x400>;
			interrupts = <0x00 0x12 0x04>;
			reg-shift = <0x02>;
			reg-io-width = <0x04>;
			clocks = <0x02 0x5d>;
			status = "disabled";
			phandle = <0xa2>;
		};

		serial@1c29800 {
			compatible = "snps,dw-apb-uart";
			reg = <0x1c29800 0x400>;
			interrupts = <0x00 0x13 0x04>;
			reg-shift = <0x02>;
			reg-io-width = <0x04>;
			clocks = <0x02 0x5e>;
			status = "disabled";
			phandle = <0xa3>;
		};

		serial@1c29c00 {
			compatible = "snps,dw-apb-uart";
			reg = <0x1c29c00 0x400>;
			interrupts = <0x00 0x14 0x04>;
			reg-shift = <0x02>;
			reg-io-width = <0x04>;
			clocks = <0x02 0x5f>;
			status = "okay";
			pinctrl-names = "default";
			pinctrl-0 = <0x2a>;
			phandle = <0xa4>;
		};

		ps2@1c2a000 {
			compatible = "allwinner,sun4i-a10-ps2";
			reg = <0x1c2a000 0x400>;
			interrupts = <0x00 0x3e 0x04>;
			clocks = <0x02 0x55>;
			status = "disabled";
			phandle = <0xa5>;
		};

		ps2@1c2a400 {
			compatible = "allwinner,sun4i-a10-ps2";
			reg = <0x1c2a400 0x400>;
			interrupts = <0x00 0x3f 0x04>;
			clocks = <0x02 0x56>;
			status = "disabled";
			phandle = <0xa6>;
		};

		i2c@1c2ac00 {
			compatible = "allwinner,sun7i-a20-i2c\0allwinner,sun4i-a10-i2c";
			reg = <0x1c2ac00 0x400>;
			interrupts = <0x00 0x07 0x04>;
			clocks = <0x02 0x4f>;
			pinctrl-names = "default";
			pinctrl-0 = <0x2b>;
			status = "okay";
			#address-cells = <0x01>;
			#size-cells = <0x00>;
			phandle = <0xa7>;

			pmic@34 {
				compatible = "x-powers,axp209";
				reg = <0x34>;
				interrupt-parent = <0x2c>;
				interrupts = <0x00 0x08>;
				interrupt-controller;
				#interrupt-cells = <0x01>;
				phandle = <0xa8>;
			};
		};

		i2c@1c2b000 {
			compatible = "allwinner,sun7i-a20-i2c\0allwinner,sun4i-a10-i2c";
			reg = <0x1c2b000 0x400>;
			interrupts = <0x00 0x08 0x04>;
			clocks = <0x02 0x50>;
			pinctrl-names = "default";
			pinctrl-0 = <0x2d>;
			status = "disabled";
			#address-cells = <0x01>;
			#size-cells = <0x00>;
			phandle = <0xa9>;
		};

		i2c@1c2b400 {
			compatible = "allwinner,sun7i-a20-i2c\0allwinner,sun4i-a10-i2c";
			reg = <0x1c2b400 0x400>;
			interrupts = <0x00 0x09 0x04>;
			clocks = <0x02 0x51>;
			pinctrl-names = "default";
			pinctrl-0 = <0x2e>;
			status = "okay";
			#address-cells = <0x01>;
			#size-cells = <0x00>;
			phandle = <0xaa>;
		};

		i2c@1c2b800 {
			compatible = "allwinner,sun7i-a20-i2c\0allwinner,sun4i-a10-i2c";
			reg = <0x1c2b800 0x400>;
			interrupts = <0x00 0x58 0x04>;
			clocks = <0x02 0x52>;
			pinctrl-names = "default";
			pinctrl-0 = <0x2f>;
			status = "disabled";
			#address-cells = <0x01>;
			#size-cells = <0x00>;
			phandle = <0xab>;
		};

		can@1c2bc00 {
			compatible = "allwinner,sun7i-a20-can\0allwinner,sun4i-a10-can";
			reg = <0x1c2bc00 0x400>;
			interrupts = <0x00 0x1a 0x04>;
			clocks = <0x02 0x53>;
			status = "disabled";
			phandle = <0xac>;
		};

		i2c@1c2c000 {
			compatible = "allwinner,sun7i-a20-i2c\0allwinner,sun4i-a10-i2c";
			reg = <0x1c2c000 0x400>;
			interrupts = <0x00 0x59 0x04>;
			clocks = <0x02 0x57>;
			status = "disabled";
			#address-cells = <0x01>;
			#size-cells = <0x00>;
			phandle = <0xad>;
		};

		gpu@1c40000 {
			compatible = "allwinner,sun7i-a20-mali\0arm,mali-400";
			reg = <0x1c40000 0x10000>;
			interrupts = <0x00 0x45 0x04 0x00 0x46 0x04 0x00 0x47 0x04 0x00 0x48 0x04 0x00 0x4a 0x04 0x00 0x4b 0x04 0x00 0x49 0x04>;
			interrupt-names = "gp\0gpmmu\0pp0\0ppmmu0\0pp1\0ppmmu1\0pmu";
			clocks = <0x02 0x44 0x02 0xa5>;
			clock-names = "bus\0core";
			resets = <0x02 0x13>;
			assigned-clocks = <0x02 0xa5>;
			assigned-clock-rates = <0x16e36000>;
			phandle = <0xae>;
		};

		ethernet@1c50000 {
			compatible = "allwinner,sun7i-a20-gmac";
			reg = <0x1c50000 0x10000>;
			interrupts = <0x00 0x55 0x04>;
			interrupt-names = "macirq";
			clocks = <0x02 0x42 0x30>;
			clock-names = "stmmaceth\0allwinner_gmac_tx";
			snps,pbl = <0x02>;
			snps,fixed-burst;
			snps,force_sf_dma_mode;
			status = "okay";
			pinctrl-names = "default";
			pinctrl-0 = <0x31>;
			phy-handle = <0x32>;
			phy-mode = "rgmii-id";
			phy-supply = <0x33>;
			phandle = <0xaf>;

			mdio {
				compatible = "snps,dwmac-mdio";
				#address-cells = <0x01>;
				#size-cells = <0x00>;
				phandle = <0xb0>;

				ethernet-phy@1 {
					reg = <0x01>;
					phandle = <0x32>;
				};
			};
		};

		hstimer@1c60000 {
			compatible = "allwinner,sun7i-a20-hstimer";
			reg = <0x1c60000 0x1000>;
			interrupts = <0x00 0x51 0x04 0x00 0x52 0x04 0x00 0x53 0x04 0x00 0x54 0x04>;
			clocks = <0x02 0x33>;
		};

		interrupt-controller@1c81000 {
			compatible = "arm,gic-400";
			reg = <0x1c81000 0x1000 0x1c82000 0x2000 0x1c84000 0x2000 0x1c86000 0x2000>;
			interrupt-controller;
			#interrupt-cells = <0x03>;
			interrupts = <0x01 0x09 0xf04>;
			phandle = <0x01>;
		};

		display-frontend@1e00000 {
			compatible = "allwinner,sun7i-a20-display-frontend";
			reg = <0x1e00000 0x20000>;
			interrupts = <0x00 0x2f 0x04>;
			clocks = <0x02 0x40 0x02 0x92 0x02 0x8b>;
			clock-names = "ahb\0mod\0ram";
			resets = <0x02 0x07>;
			phandle = <0x09>;

			ports {
				#address-cells = <0x01>;
				#size-cells = <0x00>;

				port@1 {
					#address-cells = <0x01>;
					#size-cells = <0x00>;
					reg = <0x01>;
					phandle = <0xb1>;

					endpoint@0 {
						reg = <0x00>;
						remote-endpoint = <0x34>;
						phandle = <0x3c>;
					};

					endpoint@1 {
						reg = <0x01>;
						remote-endpoint = <0x35>;
						phandle = <0x38>;
					};
				};
			};
		};

		display-frontend@1e20000 {
			compatible = "allwinner,sun7i-a20-display-frontend";
			reg = <0x1e20000 0x20000>;
			interrupts = <0x00 0x30 0x04>;
			clocks = <0x02 0x41 0x02 0x93 0x02 0x8a>;
			clock-names = "ahb\0mod\0ram";
			resets = <0x02 0x08>;
			phandle = <0x0a>;

			ports {
				#address-cells = <0x01>;
				#size-cells = <0x00>;

				port@1 {
					#address-cells = <0x01>;
					#size-cells = <0x00>;
					reg = <0x01>;
					phandle = <0xb2>;

					endpoint@0 {
						reg = <0x00>;
						remote-endpoint = <0x36>;
						phandle = <0x3d>;
					};

					endpoint@1 {
						reg = <0x01>;
						remote-endpoint = <0x37>;
						phandle = <0x39>;
					};
				};
			};
		};

		display-backend@1e40000 {
			compatible = "allwinner,sun7i-a20-display-backend";
			reg = <0x1e40000 0x10000>;
			interrupts = <0x00 0x30 0x04>;
			clocks = <0x02 0x3f 0x02 0x91 0x02 0x8d>;
			clock-names = "ahb\0mod\0ram";
			resets = <0x02 0x06>;
			phandle = <0xb3>;

			ports {
				#address-cells = <0x01>;
				#size-cells = <0x00>;

				port@0 {
					#address-cells = <0x01>;
					#size-cells = <0x00>;
					reg = <0x00>;
					phandle = <0xb4>;

					endpoint@0 {
						reg = <0x00>;
						remote-endpoint = <0x38>;
						phandle = <0x35>;
					};

					endpoint@1 {
						reg = <0x01>;
						remote-endpoint = <0x39>;
						phandle = <0x37>;
					};
				};

				port@1 {
					#address-cells = <0x01>;
					#size-cells = <0x00>;
					reg = <0x01>;
					phandle = <0xb5>;

					endpoint@0 {
						reg = <0x00>;
						remote-endpoint = <0x3a>;
						phandle = <0x11>;
					};

					endpoint@1 {
						reg = <0x01>;
						remote-endpoint = <0x3b>;
						phandle = <0x14>;
					};
				};
			};
		};

		display-backend@1e60000 {
			compatible = "allwinner,sun7i-a20-display-backend";
			reg = <0x1e60000 0x10000>;
			interrupts = <0x00 0x2f 0x04>;
			clocks = <0x02 0x3e 0x02 0x90 0x02 0x8c>;
			clock-names = "ahb\0mod\0ram";
			resets = <0x02 0x05>;
			phandle = <0xb6>;

			ports {
				#address-cells = <0x01>;
				#size-cells = <0x00>;

				port@0 {
					#address-cells = <0x01>;
					#size-cells = <0x00>;
					reg = <0x00>;
					phandle = <0xb7>;

					endpoint@0 {
						reg = <0x00>;
						remote-endpoint = <0x3c>;
						phandle = <0x34>;
					};

					endpoint@1 {
						reg = <0x01>;
						remote-endpoint = <0x3d>;
						phandle = <0x36>;
					};
				};

				port@1 {
					#address-cells = <0x01>;
					#size-cells = <0x00>;
					reg = <0x01>;
					phandle = <0xb8>;

					endpoint@0 {
						reg = <0x00>;
						remote-endpoint = <0x3e>;
						phandle = <0x10>;
					};

					endpoint@1 {
						reg = <0x01>;
						remote-endpoint = <0x3f>;
						phandle = <0x13>;
					};
				};
			};
		};
	};

	ahci-5v {
		compatible = "regulator-fixed";
		regulator-name = "ahci-5v";
		regulator-min-microvolt = <0x4c4b40>;
		regulator-max-microvolt = <0x4c4b40>;
		regulator-boot-on;
		enable-active-high;
		gpio = <0x19 0x01 0x08 0x00>;
		status = "disabled";
		phandle = <0x24>;
	};

	usb0-vbus {
		compatible = "regulator-fixed";
		regulator-name = "usb0-vbus";
		regulator-min-microvolt = <0x4c4b40>;
		regulator-max-microvolt = <0x4c4b40>;
		enable-active-high;
		gpio = <0x19 0x01 0x09 0x00>;
		status = "disabled";
		phandle = <0xb9>;
	};

	usb1-vbus {
		compatible = "regulator-fixed";
		regulator-name = "usb1-vbus";
		regulator-min-microvolt = <0x4c4b40>;
		regulator-max-microvolt = <0x4c4b40>;
		regulator-boot-on;
		enable-active-high;
		gpio = <0x19 0x07 0x00 0x00>;
		status = "okay";
		phandle = <0x1f>;
	};

	usb2-vbus {
		compatible = "regulator-fixed";
		regulator-name = "usb2-vbus";
		regulator-min-microvolt = <0x4c4b40>;
		regulator-max-microvolt = <0x4c4b40>;
		regulator-boot-on;
		enable-active-high;
		gpio = <0x19 0x07 0x01 0x00>;
		status = "okay";
		phandle = <0x20>;
	};

	vcc3v0 {
		compatible = "regulator-fixed";
		regulator-name = "vcc3v0";
		regulator-min-microvolt = <0x2dc6c0>;
		regulator-max-microvolt = <0x2dc6c0>;
		phandle = <0xba>;
	};

	vcc3v3 {
		compatible = "regulator-fixed";
		regulator-name = "vcc3v3";
		regulator-min-microvolt = <0x325aa0>;
		regulator-max-microvolt = <0x325aa0>;
		phandle = <0x18>;
	};

	vcc5v0 {
		compatible = "regulator-fixed";
		regulator-name = "vcc5v0";
		regulator-min-microvolt = <0x4c4b40>;
		regulator-max-microvolt = <0x4c4b40>;
		phandle = <0xbb>;
	};

	hdmi-connector {
		compatible = "hdmi-connector";
		type = [61 00];

		port {

			endpoint {
				remote-endpoint = <0x40>;
				phandle = <0x23>;
			};
		};
	};

	leds {
		compatible = "gpio-leds";

		led-0 {
			label = "bananapro:blue:usr";
			gpios = <0x19 0x06 0x02 0x00>;
		};

		led-1 {
			label = "bananapro:green:usr";
			gpios = <0x19 0x07 0x18 0x00>;
		};
	};

	wifi-pwrseq {
		compatible = "mmc-pwrseq-simple";
		reset-gpios = <0x19 0x07 0x16 0x01>;
		phandle = <0x1c>;
	};

	gmac-3v3 {
		compatible = "regulator-fixed";
		regulator-name = "gmac-3v3";
		regulator-min-microvolt = <0x325aa0>;
		regulator-max-microvolt = <0x325aa0>;
		startup-delay-us = <0x186a0>;
		enable-active-high;
		gpio = <0x19 0x07 0x17 0x00>;
		phandle = <0x33>;
	};

	__symbols__ {
		cpu0 = "/cpus/cpu@0";
		cpu1 = "/cpus/cpu@1";
		cpu_alert0 = "/thermal-zones/cpu-thermal/trips/cpu_alert0";
		cpu_crit = "/thermal-zones/cpu-thermal/trips/cpu_crit";
		osc24M = "/clocks/clk-24M";
		osc32k = "/clocks/clk-32k";
		mii_phy_tx_clk = "/clocks/clk-mii-phy-tx";
		gmac_int_tx_clk = "/clocks/clk-gmac-int-tx";
		gmac_tx_clk = "/clocks/clk@1c20164";
		de = "/display-engine";
		sram_a = "/soc/system-control@1c00000/sram@0";
		emac_sram = "/soc/system-control@1c00000/sram@0/sram-section@8000";
		sram_d = "/soc/system-control@1c00000/sram@10000";
		otg_sram = "/soc/system-control@1c00000/sram@10000/sram-section@0";
		sram_c = "/soc/system-control@1c00000/sram@1d00000";
		ve_sram = "/soc/system-control@1c00000/sram@1d00000/sram-section@0";
		nmi_intc = "/soc/interrupt-controller@1c00030";
		dma = "/soc/dma-controller@1c02000";
		nfc = "/soc/nand-controller@1c03000";
		spi0 = "/soc/spi@1c05000";
		spi1 = "/soc/spi@1c06000";
		csi0 = "/soc/csi@1c09000";
		emac = "/soc/ethernet@1c0b000";
		mdio = "/soc/mdio@1c0b080";
		tcon0 = "/soc/lcd-controller@1c0c000";
		tcon0_in = "/soc/lcd-controller@1c0c000/ports/port@0";
		tcon0_in_be0 = "/soc/lcd-controller@1c0c000/ports/port@0/endpoint@0";
		tcon0_in_be1 = "/soc/lcd-controller@1c0c000/ports/port@0/endpoint@1";
		tcon0_out = "/soc/lcd-controller@1c0c000/ports/port@1";
		tcon0_out_hdmi = "/soc/lcd-controller@1c0c000/ports/port@1/endpoint@1";
		tcon1 = "/soc/lcd-controller@1c0d000";
		tcon1_in = "/soc/lcd-controller@1c0d000/ports/port@0";
		tcon1_in_be0 = "/soc/lcd-controller@1c0d000/ports/port@0/endpoint@0";
		tcon1_in_be1 = "/soc/lcd-controller@1c0d000/ports/port@0/endpoint@1";
		tcon1_out = "/soc/lcd-controller@1c0d000/ports/port@1";
		tcon1_out_hdmi = "/soc/lcd-controller@1c0d000/ports/port@1/endpoint@1";
		mmc0 = "/soc/mmc@1c0f000";
		mmc1 = "/soc/mmc@1c10000";
		mmc2 = "/soc/mmc@1c11000";
		mmc3 = "/soc/mmc@1c12000";
		brcmf = "/soc/mmc@1c12000/wifi@1";
		usb_otg = "/soc/usb@1c13000";
		usbphy = "/soc/phy@1c13400";
		ehci0 = "/soc/usb@1c14000";
		ohci0 = "/soc/usb@1c14400";
		crypto = "/soc/crypto-engine@1c15000";
		hdmi = "/soc/hdmi@1c16000";
		hdmi_in = "/soc/hdmi@1c16000/ports/port@0";
		hdmi_in_tcon0 = "/soc/hdmi@1c16000/ports/port@0/endpoint@0";
		hdmi_in_tcon1 = "/soc/hdmi@1c16000/ports/port@0/endpoint@1";
		hdmi_out = "/soc/hdmi@1c16000/ports/port@1";
		hdmi_out_con = "/soc/hdmi@1c16000/ports/port@1/endpoint";
		spi2 = "/soc/spi@1c17000";
		ahci = "/soc/sata@1c18000";
		ehci1 = "/soc/usb@1c1c000";
		ohci1 = "/soc/usb@1c1c400";
		csi1 = "/soc/csi@1c1d000";
		spi3 = "/soc/spi@1c1f000";
		ccu = "/soc/clock@1c20000";
		pio = "/soc/pinctrl@1c20800";
		can_pa_pins = "/soc/pinctrl@1c20800/can-pa-pins";
		can_ph_pins = "/soc/pinctrl@1c20800/can-ph-pins";
		clk_out_a_pin = "/soc/pinctrl@1c20800/clk-out-a-pin";
		clk_out_b_pin = "/soc/pinctrl@1c20800/clk-out-b-pin";
		csi0_8bits_pins = "/soc/pinctrl@1c20800/csi-8bits-pins";
		csi0_clk_pin = "/soc/pinctrl@1c20800/csi-clk-pin";
		csi1_8bits_pg_pins = "/soc/pinctrl@1c20800/csi1-8bits-pg-pins";
		csi1_24bits_ph_pins = "/soc/pinctrl@1c20800/csi1-24bits-ph-pins";
		csi1_clk_pg_pin = "/soc/pinctrl@1c20800/csi1-clk-pg-pin";
		emac_pa_pins = "/soc/pinctrl@1c20800/emac-pa-pins";
		emac_ph_pins = "/soc/pinctrl@1c20800/emac-ph-pins";
		gmac_mii_pins = "/soc/pinctrl@1c20800/gmac-mii-pins";
		gmac_rgmii_pins = "/soc/pinctrl@1c20800/gmac-rgmii-pins";
		i2c0_pins = "/soc/pinctrl@1c20800/i2c0-pins";
		i2c1_pins = "/soc/pinctrl@1c20800/i2c1-pins";
		i2c2_pins = "/soc/pinctrl@1c20800/i2c2-pins";
		i2c3_pins = "/soc/pinctrl@1c20800/i2c3-pins";
		ir0_rx_pin = "/soc/pinctrl@1c20800/ir0-rx-pin";
		ir0_tx_pin = "/soc/pinctrl@1c20800/ir0-tx-pin";
		ir1_rx_pin = "/soc/pinctrl@1c20800/ir1-rx-pin";
		ir1_tx_pin = "/soc/pinctrl@1c20800/ir1-tx-pin";
		lcd_lvds0_pins = "/soc/pinctrl@1c20800/lcd-lvds0-pins";
		lcd_lvds1_pins = "/soc/pinctrl@1c20800/lcd-lvds1-pins";
		mmc0_pins = "/soc/pinctrl@1c20800/mmc0-pins";
		mmc2_pins = "/soc/pinctrl@1c20800/mmc2-pins";
		mmc3_pins = "/soc/pinctrl@1c20800/mmc3-pins";
		ps2_0_pins = "/soc/pinctrl@1c20800/ps2-0-pins";
		ps2_1_ph_pins = "/soc/pinctrl@1c20800/ps2-1-ph-pins";
		pwm0_pin = "/soc/pinctrl@1c20800/pwm0-pin";
		pwm1_pin = "/soc/pinctrl@1c20800/pwm1-pin";
		spdif_tx_pin = "/soc/pinctrl@1c20800/spdif-tx-pin";
		spi0_pi_pins = "/soc/pinctrl@1c20800/spi0-pi-pins";
		spi0_cs0_pi_pin = "/soc/pinctrl@1c20800/spi0-cs0-pi-pin";
		spi0_cs1_pi_pin = "/soc/pinctrl@1c20800/spi0-cs1-pi-pin";
		spi1_pi_pins = "/soc/pinctrl@1c20800/spi1-pi-pins";
		spi1_cs0_pi_pin = "/soc/pinctrl@1c20800/spi1-cs0-pi-pin";
		spi2_pb_pins = "/soc/pinctrl@1c20800/spi2-pb-pins";
		spi2_cs0_pb_pin = "/soc/pinctrl@1c20800/spi2-cs0-pb-pin";
		spi2_pc_pins = "/soc/pinctrl@1c20800/spi2-pc-pins";
		spi2_cs0_pc_pin = "/soc/pinctrl@1c20800/spi2-cs0-pc-pin";
		uart0_pb_pins = "/soc/pinctrl@1c20800/uart0-pb-pins";
		uart0_pf_pins = "/soc/pinctrl@1c20800/uart0-pf-pins";
		uart1_pa_pins = "/soc/pinctrl@1c20800/uart1-pa-pins";
		uart1_cts_rts_pa_pins = "/soc/pinctrl@1c20800/uart1-cts-rts-pa-pins";
		uart2_pa_pins = "/soc/pinctrl@1c20800/uart2-pa-pins";
		uart2_cts_rts_pa_pins = "/soc/pinctrl@1c20800/uart2-cts-rts-pa-pins";
		uart2_pi_pins = "/soc/pinctrl@1c20800/uart2-pi-pins";
		uart2_cts_rts_pi_pins = "/soc/pinctrl@1c20800/uart2-cts-rts-pi-pins";
		uart3_pg_pins = "/soc/pinctrl@1c20800/uart3-pg-pins";
		uart3_cts_rts_pg_pins = "/soc/pinctrl@1c20800/uart3-cts-rts-pg-pins";
		uart3_ph_pins = "/soc/pinctrl@1c20800/uart3-ph-pins";
		uart3_cts_rts_ph_pins = "/soc/pinctrl@1c20800/uart3-cts-rts-ph-pins";
		uart4_pg_pins = "/soc/pinctrl@1c20800/uart4-pg-pins";
		uart4_ph_pins = "/soc/pinctrl@1c20800/uart4-ph-pins";
		uart5_ph_pins = "/soc/pinctrl@1c20800/uart5-ph-pins";
		uart5_pi_pins = "/soc/pinctrl@1c20800/uart5-pi-pins";
		uart6_pa_pins = "/soc/pinctrl@1c20800/uart6-pa-pins";
		uart6_pi_pins = "/soc/pinctrl@1c20800/uart6-pi-pins";
		uart7_pa_pins = "/soc/pinctrl@1c20800/uart7-pa-pins";
		uart7_pi_pins = "/soc/pinctrl@1c20800/uart7-pi-pins";
		wdt = "/soc/watchdog@1c20c90";
		rtc = "/soc/rtc@1c20d00";
		pwm = "/soc/pwm@1c20e00";
		spdif = "/soc/spdif@1c21000";
		ir0 = "/soc/ir@1c21800";
		ir1 = "/soc/ir@1c21c00";
		i2s1 = "/soc/i2s@1c22000";
		i2s0 = "/soc/i2s@1c22400";
		lradc = "/soc/lradc@1c22800";
		codec = "/soc/codec@1c22c00";
		sid = "/soc/eeprom@1c23800";
		i2s2 = "/soc/i2s@1c24400";
		rtp = "/soc/rtp@1c25000";
		uart0 = "/soc/serial@1c28000";
		uart1 = "/soc/serial@1c28400";
		uart2 = "/soc/serial@1c28800";
		uart3 = "/soc/serial@1c28c00";
		uart4 = "/soc/serial@1c29000";
		uart5 = "/soc/serial@1c29400";
		uart6 = "/soc/serial@1c29800";
		uart7 = "/soc/serial@1c29c00";
		ps20 = "/soc/ps2@1c2a000";
		ps21 = "/soc/ps2@1c2a400";
		i2c0 = "/soc/i2c@1c2ac00";
		axp209 = "/soc/i2c@1c2ac00/pmic@34";
		i2c1 = "/soc/i2c@1c2b000";
		i2c2 = "/soc/i2c@1c2b400";
		i2c3 = "/soc/i2c@1c2b800";
		can0 = "/soc/can@1c2bc00";
		i2c4 = "/soc/i2c@1c2c000";
		mali = "/soc/gpu@1c40000";
		gmac = "/soc/ethernet@1c50000";
		gmac_mdio = "/soc/ethernet@1c50000/mdio";
		phy1 = "/soc/ethernet@1c50000/mdio/ethernet-phy@1";
		gic = "/soc/interrupt-controller@1c81000";
		fe0 = "/soc/display-frontend@1e00000";
		fe0_out = "/soc/display-frontend@1e00000/ports/port@1";
		fe0_out_be0 = "/soc/display-frontend@1e00000/ports/port@1/endpoint@0";
		fe0_out_be1 = "/soc/display-frontend@1e00000/ports/port@1/endpoint@1";
		fe1 = "/soc/display-frontend@1e20000";
		fe1_out = "/soc/display-frontend@1e20000/ports/port@1";
		fe1_out_be0 = "/soc/display-frontend@1e20000/ports/port@1/endpoint@0";
		fe1_out_be1 = "/soc/display-frontend@1e20000/ports/port@1/endpoint@1";
		be1 = "/soc/display-backend@1e40000";
		be1_in = "/soc/display-backend@1e40000/ports/port@0";
		be1_in_fe0 = "/soc/display-backend@1e40000/ports/port@0/endpoint@0";
		be1_in_fe1 = "/soc/display-backend@1e40000/ports/port@0/endpoint@1";
		be1_out = "/soc/display-backend@1e40000/ports/port@1";
		be1_out_tcon0 = "/soc/display-backend@1e40000/ports/port@1/endpoint@0";
		be1_out_tcon1 = "/soc/display-backend@1e40000/ports/port@1/endpoint@1";
		be0 = "/soc/display-backend@1e60000";
		be0_in = "/soc/display-backend@1e60000/ports/port@0";
		be0_in_fe0 = "/soc/display-backend@1e60000/ports/port@0/endpoint@0";
		be0_in_fe1 = "/soc/display-backend@1e60000/ports/port@0/endpoint@1";
		be0_out = "/soc/display-backend@1e60000/ports/port@1";
		be0_out_tcon0 = "/soc/display-backend@1e60000/ports/port@1/endpoint@0";
		be0_out_tcon1 = "/soc/display-backend@1e60000/ports/port@1/endpoint@1";
		reg_ahci_5v = "/ahci-5v";
		reg_usb0_vbus = "/usb0-vbus";
		reg_usb1_vbus = "/usb1-vbus";
		reg_usb2_vbus = "/usb2-vbus";
		reg_vcc3v0 = "/vcc3v0";
		reg_vcc3v3 = "/vcc3v3";
		reg_vcc5v0 = "/vcc5v0";
		hdmi_con_in = "/hdmi-connector/port/endpoint";
		wifi_pwrseq = "/wifi-pwrseq";
		reg_gmac_3v3 = "/gmac-3v3";
	};
};

 

 

Link to comment
Share on other sites

@teknoid Confirming that the patch had worked on the latest build that the Armbian Framework puts together.  This is Armbian 22.05 trunk and Linux Kernel 5.15.32.

[    3.273532] kernel: ahci-sunxi 1c18000.sata: supply ahci not found, using dummy regulator
[    3.281429] kernel: ahci-sunxi 1c18000.sata: supply phy not found, using dummy regulator
[    3.344049] kernel: ahci-sunxi 1c18000.sata: controller can't do PMP, turning off CAP_PMP
[    3.351593] kernel: ahci-sunxi 1c18000.sata: forcing PORTS_IMPL to 0x1
[    3.357504] kernel: ahci-sunxi 1c18000.sata: AHCI 0001.0100 32 slots 1 ports 3 Gbps 0x1 impl platform mode
[    3.366500] kernel: ahci-sunxi 1c18000.sata: flags: ncq sntf pm led clo only pio slum part ccc
[    3.376130] kernel: scsi host0: ahci-sunxi
[    3.380046] kernel: ata1: SATA max UDMA/133 mmio [mem 0x01c18000-0x01c18fff] port 0x100 irq 45

 

Thank-you. You're a star.

Where can I go to learn to figure out how the user overlay works?

I can see it's activated line 40 of gpiochip0 [1c20800.pinctrl] .which has changed from an input to an output.

 

I'm not sure how the dtb below relates to the result of line 40 being activated.

 

// enable SATA AHCI on bananapi pro
/dts-v1/;
/plugin/;

/ {
	compatible = "lemaker,bananapro", "allwinner,sun7i-a20";

	fragment@0 {
		target = <&reg_ahci_5v>;
		__overlay__ {
			status = "okay";
		};
	};
};

 

I'm trying to search for the information myself, but not having much luck.

 

EDIT 5/April/2002 12:17 UTC+1 - What I find curious is looking through the main device tree I spotted this . . . .

        ahci-5v {
                compatible = "regulator-fixed";
                regulator-name = "ahci-5v";
                regulator-min-microvolt = <0x4c4b40>;
                regulator-max-microvolt = <0x4c4b40>;
                regulator-boot-on;
                enable-active-high;
                gpio = <0x19 0x01 0x08 0x00>;
                status = "disabled";
                phandle = <0x24>;

Was the solution always to simply change the status from "disabled" to "okay" and that would have enabled the SATA port?  I know that upgrading the kernel and its device tree would undo the change so I'm assuming your solution of supplying a DT overlay makes the setting persist across kernel and DT upgrades?   (Did I make any sense with that lot?)

Link to comment
Share on other sites

yes, mostly the nodes in the device tree are available but deactivated with status = "disabled";

And you simply can active them by saying status = "okay"; in an overlay. Furhermore you can override the standard values.

What you did in the past with module parameters you nowdays do it in the device tree.

 

check this: https://elinux.org/images/f/f9/Petazzoni-device-tree-dummies_0.pdf It helped me to get an overview what DTS is and how it interacts with the linux kernel drivers. Oh yes, its not easy to understand. It will take some time (at least for me it took years) but playing around is good for practise and step by step you will get familiar with it.

 

Next version 22.05 will have the regulators enabled by default so you do not need the overlay anymore.

 

 

 

Link to comment
Share on other sites

  • Myron changed the title to BananaPi Pro: Enabling the SATA port and compiling the kernel from source.
Am 4.4.2022 um 17:36 schrieb teknoid:

http://tron.dyn.cc/sun7i-bananpro-ahci.dts

download my test user overlay, copy it to your system and activate it (as root) with:

armbian-add-overlay sun7i-bananpro-ahci.dts

this should work on any kernel below 5.17

after release of 22.05 you need to remove it from /boot/overlay-user/

 

 

Great!!! I stuck on Kernel 5.4.88 for over two years. And now working sda sata ssd:

 

NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda           8:0    0 223,6G  0 disk 
└─sda1        8:1    0     1G  0 part /mnt
mmcblk0     179:0    0  28,9G  0 disk 
├─mmcblk0p1 179:1    0     8G  0 part /
└─mmcblk0p2 179:2    0  20,9G  0 part /platz
zram0       254:0    0 483,6M  0 disk [SWAP]
zram1       254:1    0    50M  0 disk /var/log

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...

Important Information

Terms of Use - Privacy Policy - Guidelines