diff --git a/arch/arm64/boot/dts/allwinner/Makefile b/arch/arm64/boot/dts/allwinner/Makefile index 62793f832..a6a0f1dd0 100644 --- a/arch/arm64/boot/dts/allwinner/Makefile +++ b/arch/arm64/boot/dts/allwinner/Makefile @@ -41,3 +41,5 @@ dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h6-tanix-tx6-mini.dtb dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h616-orangepi-zero2.dtb dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h616-orangepi-zero3.dtb dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h616-x96-mate.dtb + +subdir-y := $(dts-dirs) overlay diff --git a/arch/arm64/boot/dts/allwinner/overlay/Makefile b/arch/arm64/boot/dts/allwinner/overlay/Makefile new file mode 100755 index 000000000..f3cb86102 --- /dev/null +++ b/arch/arm64/boot/dts/allwinner/overlay/Makefile @@ -0,0 +1,23 @@ +# SPDX-License-Identifier: GPL-2.0 +dtbo-$(CONFIG_ARCH_SUNXI) += \ + sun50i-h616-gpu.dtbo \ + sun50i-h616-uart2.dtbo \ + sun50i-h616-uart5.dtbo \ + sun50i-h616-i2c1.dtbo \ + sun50i-h616-i2c2.dtbo \ + sun50i-h616-i2c3.dtbo \ + sun50i-h616-i2c4.dtbo \ + sun50i-h616-pwm12.dtbo \ + sun50i-h616-pwm34.dtbo \ + sun50i-h616-spi0-spidev.dtbo \ + sun50i-h616-spi1-spidev.dtbo \ + sun50i-h616-disable-leds.dtbo \ + sun50i-h616-disable-uart0.dtbo + +scr-$(CONFIG_ARCH_SUNXI) += \ + sun50i-h616-fixup.scr + +targets += $(dtbo-y) $(scr-y) $(dtbotxt-y) + +always := $(dtbo-y) $(scr-y) $(dtbotxt-y) +clean-files := *.dtbo *.scr diff --git a/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-disable-leds.dts b/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-disable-leds.dts new file mode 100755 index 000000000..115d2901f --- /dev/null +++ b/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-disable-leds.dts @@ -0,0 +1,20 @@ +/dts-v1/; +/plugin/; + +/ { + fragment@0 { + target = <&leds>; + + __overlay__ { + status = "okay"; + + led-red { + linux,default-trigger = "none"; + }; + + led-green { + linux,default-trigger = "none"; + }; + }; + }; +}; diff --git a/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-disable-uart0.dts b/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-disable-uart0.dts new file mode 100755 index 000000000..3c827cac9 --- /dev/null +++ b/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-disable-uart0.dts @@ -0,0 +1,11 @@ +/dts-v1/; +/plugin/; + +/ { + fragment@0 { + target = <&uart0>; + __overlay__ { + status = "disabled"; + }; + }; +}; diff --git a/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-fixup.scr b/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-fixup.scr new file mode 100755 index 000000000..4cd5ac726 Binary files /dev/null and b/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-fixup.scr differ diff --git a/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-fixup.scr-cmd b/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-fixup.scr-cmd new file mode 100755 index 000000000..2bde77cb0 --- /dev/null +++ b/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-fixup.scr-cmd @@ -0,0 +1,110 @@ +# overlays fixup script +# implements (or rather substitutes) overlay arguments functionality +# using u-boot scripting, environment variables and "fdt" command + +# setexpr test_var ${tmp_bank} - A +# works only for hex numbers (A-F) + +setenv decompose_pin 'setexpr tmp_bank sub "P(C|G|H|I)\\d+" "\\1"; +setexpr tmp_pin sub "P\\S(\\d+)" "\\1"; +test "${tmp_bank}" = "C" && setenv tmp_bank 2; +test "${tmp_bank}" = "G" && setenv tmp_bank 6' +test "${tmp_bank}" = "H" && setenv tmp_bank 7; +test "${tmp_bank}" = "I" && setenv tmp_bank 8; + +if test -n "${param_spinor_spi_bus}"; then + test "${param_spinor_spi_bus}" = "0" && setenv tmp_spi_path "spi@5010000" + test "${param_spinor_spi_bus}" = "1" && setenv tmp_spi_path "spi@5011000" + fdt set /soc/${tmp_spi_path} status "okay" + fdt set /soc/${tmp_spi_path}/spiflash@0 status "okay" + if test -n "${param_spinor_max_freq}"; then + fdt set /soc/${tmp_spi_path}/spiflash@0 spi-max-frequency "<${param_spinor_max_freq}>" + fi + if test "${param_spinor_spi_cs}" = "1"; then + fdt set /soc/${tmp_spi_path}/spiflash@0 reg "<1>" + fi + env delete tmp_spi_path +fi + +if test -n "${param_spidev_spi_bus}"; then + test "${param_spidev_spi_bus}" = "0" && setenv tmp_spi_path "spi@5010000" + test "${param_spidev_spi_bus}" = "1" && setenv tmp_spi_path "spi@5011000" + fdt set /soc/${tmp_spi_path} status "okay" + fdt set /soc/${tmp_spi_path}/spidev status "okay" + if test -n "${param_spidev_max_freq}"; then + fdt set /soc/${tmp_spi_path}/spidev spi-max-frequency "<${param_spidev_max_freq}>" + fi + if test "${param_spidev_spi_cs}" = "1"; then + fdt set /soc/${tmp_spi_path}/spidev reg "<1>" + fi + env delete tmp_spi_path +fi + +if test -n "${param_pps_pin}"; then + setenv tmp_bank "${param_pps_pin}" + setenv tmp_pin "${param_pps_pin}" + run decompose_pin + fdt set /soc/pinctrl@300b000/pps_pins pins "${param_pps_pin}" + fdt get value tmp_phandle /soc/pinctrl@300b000 phandle + fdt set /pps@0 gpios "<${tmp_phandle} ${tmp_bank} ${tmp_pin} 0>" + env delete tmp_pin tmp_bank tmp_phandle +fi + +if test "${param_pps_falling_edge}" = "1"; then + fdt set /pps@0 assert-falling-edge +fi + +for f in ${overlays}; do + if test "${f}" = "pwm34"; then + setenv bootargs_new "" + for arg in ${bootargs}; do + if test "${arg}" = "console=ttyS0,115200"; then + echo "Warning: Disabling ttyS0 console due to enabled PWM3 and PWM4 overlay" + else + setenv bootargs_new "${bootargs_new} ${arg}" + fi + done + setenv bootargs "${bootargs_new}" + fi +done + +if test -n "${param_w1_pin}"; then + setenv tmp_bank "${param_w1_pin}" + setenv tmp_pin "${param_w1_pin}" + run decompose_pin + fdt set /soc/pinctrl@300b000/w1_pins pins "${param_w1_pin}" + fdt get value tmp_phandle /soc/pinctrl@300b000 phandle + fdt set /onewire@0 gpios "<${tmp_phandle} ${tmp_bank} ${tmp_pin} 0>" + env delete tmp_pin tmp_bank tmp_phandle +fi + +if test "${param_w1_pin_int_pullup}" = "1"; then + fdt set /soc/pinctrl@300b000/w1_pins bias-pull-up +fi + +if test "${param_uart1_rtscts}" = "1"; then + fdt get value tmp_phandle1 /soc/pinctrl@300b000/uart1-pins phandle + fdt get value tmp_phandle2 /soc/pinctrl@300b000/uart1-rts-cts-pins phandle + fdt set /soc/serial@5000400 pinctrl-names "default" "default" + fdt set /soc/serial@5000400 pinctrl-0 "<${tmp_phandle1}>" + fdt set /soc/serial@5000400 pinctrl-1 "<${tmp_phandle2}>" + env delete tmp_phandle1 tmp_phandle2 +fi + +if test "${param_uart2_rtscts}" = "1"; then + fdt get value tmp_phandle1 /soc/pinctrl@300b000/uart2-pins phandle + fdt get value tmp_phandle2 /soc/pinctrl@300b000/uart2-rts-cts-pins phandle + fdt set /soc/serial@5000800 pinctrl-names "default" "default" + fdt set /soc/serial@5000800 pinctrl-0 "<${tmp_phandle1}>" + fdt set /soc/serial@5000800 pinctrl-1 "<${tmp_phandle2}>" + env delete tmp_phandle1 tmp_phandle2 +fi + +if test "${param_uart3_rtscts}" = "1"; then + fdt get value tmp_phandle1 /soc/pinctrl@300b000/uart3-pins phandle + fdt get value tmp_phandle2 /soc/pinctrl@300b000/uart3-rts-cts-pins phandle + fdt set /soc/serial@5000c00 pinctrl-names "default" "default" + fdt set /soc/serial@5000c00 pinctrl-0 "<${tmp_phandle1}>" + fdt set /soc/serial@5000c00 pinctrl-1 "<${tmp_phandle2}>" + env delete tmp_phandle1 tmp_phandle2 +fi diff --git a/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-gpu.dts b/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-gpu.dts new file mode 100755 index 000000000..5d404588c --- /dev/null +++ b/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-gpu.dts @@ -0,0 +1,11 @@ +/dts-v1/; +/plugin/; + +/ { + fragment@0 { + target = <&gpu>; + __overlay__ { + status = "okay"; + }; + }; +}; diff --git a/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-i2c1.dts b/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-i2c1.dts new file mode 100755 index 000000000..7d788c2fa --- /dev/null +++ b/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-i2c1.dts @@ -0,0 +1,26 @@ +/dts-v1/; +/plugin/; + +/ { + fragment@0 { + target-path = "/aliases"; + __overlay__ { + i2c1 = "/soc/i2c@5002400"; + serial2 = "/soc/serial@5000800"; + }; + }; + + fragment@1 { + target = <&i2c1>; + __overlay__ { + status = "okay"; + }; + }; + + fragment@2 { + target = <&uart0>; + __overlay__ { + status = "disabled"; + }; + }; +}; diff --git a/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-i2c2.dts b/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-i2c2.dts new file mode 100755 index 000000000..febfdb8ff --- /dev/null +++ b/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-i2c2.dts @@ -0,0 +1,20 @@ +/dts-v1/; +/plugin/; + +/ { + compatible = "allwinner,sun50i-h616"; + + fragment@0 { + target-path = "/aliases"; + __overlay__ { + i2c2 = "/soc/i2c@5002800"; + }; + }; + + fragment@1 { + target = <&i2c2>; + __overlay__ { + status = "okay"; + }; + }; +}; diff --git a/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-i2c3.dts b/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-i2c3.dts new file mode 100755 index 000000000..c7fdb1559 --- /dev/null +++ b/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-i2c3.dts @@ -0,0 +1,18 @@ +/dts-v1/; +/plugin/; + +/ { + fragment@0 { + target-path = "/aliases"; + __overlay__ { + i2c3 = "/soc/i2c@5002c00"; + }; + }; + + fragment@1 { + target = <&i2c3>; + __overlay__ { + status = "okay"; + }; + }; +}; diff --git a/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-i2c4.dts b/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-i2c4.dts new file mode 100755 index 000000000..8cfdd67e0 --- /dev/null +++ b/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-i2c4.dts @@ -0,0 +1,18 @@ +/dts-v1/; +/plugin/; + +/ { + fragment@0 { + target-path = "/aliases"; + __overlay__ { + i2c4 = "/soc/i2c@5003000"; + }; + }; + + fragment@1 { + target = <&i2c4>; + __overlay__ { + status = "okay"; + }; + }; +}; diff --git a/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-pwm12.dts b/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-pwm12.dts new file mode 100755 index 000000000..377d146a4 --- /dev/null +++ b/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-pwm12.dts @@ -0,0 +1,11 @@ +/dts-v1/; +/plugin/; + +/ { + fragment@0 { + target = <&pwm>; + __overlay__ { + status = "okay"; + }; + }; +}; diff --git a/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-pwm34.dts b/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-pwm34.dts new file mode 100755 index 000000000..097cfcf7c --- /dev/null +++ b/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-pwm34.dts @@ -0,0 +1,18 @@ +/dts-v1/; +/plugin/; + +/ { + fragment@0 { + target = <&uart0>; + __overlay__ { + status = "disabled"; + }; + }; + + fragment@1 { + target = <&pwm>; + __overlay__ { + status = "okay"; + }; + }; +}; diff --git a/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-spi0-spidev.dts b/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-spi0-spidev.dts new file mode 100755 index 000000000..d76fb6442 --- /dev/null +++ b/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-spi0-spidev.dts @@ -0,0 +1,34 @@ +/dts-v1/; +/plugin/; + +/ { + fragment@0 { + target-path = "/aliases"; + __overlay__ { + spi0 = "/soc/spi@5010000"; + }; + }; + + fragment@1 { + target = <&spi0>; + __overlay__ { + #address-cells = <1>; + #size-cells = <0>; + spidev@0 { + compatible = "rohm,dh2228fv"; + status = "okay"; + reg = <0>; + spi-max-frequency = <1000000>; + }; + }; + }; + + fragment@2 { + target = <&spi0>; + __overlay__ { + flash@0 { + status = "disabled"; + }; + }; + }; +}; diff --git a/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-spi1-spidev.dts b/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-spi1-spidev.dts new file mode 100755 index 000000000..06ace2c48 --- /dev/null +++ b/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-spi1-spidev.dts @@ -0,0 +1,26 @@ +/dts-v1/; +/plugin/; + +/ { + fragment@0 { + target-path = "/aliases"; + __overlay__ { + spi1 = "/soc/spi@5011000"; + }; + }; + + fragment@2 { + target = <&spi1>; + __overlay__ { + status = "okay"; + #address-cells = <1>; + #size-cells = <0>; + spidev@1 { + compatible = "rohm,dh2228fv"; + status = "okay"; + reg = <1>; + spi-max-frequency = <1000000>; + }; + }; + }; +}; diff --git a/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-uart2.dts b/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-uart2.dts new file mode 100755 index 000000000..56add56be --- /dev/null +++ b/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-uart2.dts @@ -0,0 +1,18 @@ +/dts-v1/; +/plugin/; + +/ { + fragment@0 { + target-path = "/aliases"; + __overlay__ { + serial2 = "/soc/serial@5000800"; + }; + }; + + fragment@1 { + target = <&uart2>; + __overlay__ { + status = "okay"; + }; + }; +}; diff --git a/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-uart5.dts b/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-uart5.dts new file mode 100755 index 000000000..9f0c16c32 --- /dev/null +++ b/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-uart5.dts @@ -0,0 +1,20 @@ +/dts-v1/; +/plugin/; + +/ { + fragment@0 { + target-path = "/aliases"; + __overlay__ { + serial5 = "/soc/serial@5001400"; + }; + }; + + fragment@1 { + target = <&uart5>; + __overlay__ { + pinctrl-names = "default"; + pinctrl-0 = <&uart5_ph_pins>; + status = "okay"; + }; + }; +};