# 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(B|C|D|E|G|H|I)\\d+" "\\1"; setexpr tmp_pin sub "P\\S(\\d+)" "\\1"; test "${tmp_bank}" = "B" && setenv tmp_bank 1; test "${tmp_bank}" = "C" && setenv tmp_bank 2; test "${tmp_bank}" = "D" && setenv tmp_bank 3; test "${tmp_bank}" = "E" && setenv tmp_bank 4; 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@1c05000" test "${param_spinor_spi_bus}" = "1" && setenv tmp_spi_path "spi@1c06000" test "${param_spinor_spi_bus}" = "2" && setenv tmp_spi_path "spi@1c17000" fdt set /soc/${tmp_spi_path} status "okay" fdt set /soc/${tmp_spi_path}/spiflash status "okay" if test -n "${param_spinor_max_freq}"; then fdt set /soc/${tmp_spi_path}/spiflash spi-max-frequency "<${param_spinor_max_freq}>" 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@1c05000" test "${param_spidev_spi_bus}" = "1" && setenv tmp_spi_path "spi@1c06000" test "${param_spidev_spi_bus}" = "2" && setenv tmp_spi_path "spi@1c17000" 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 env delete tmp_spi_path fi if test "${param_spi2_bus_pins}" = "b"; then fdt get value tmp_phandle1 /soc/pinctrl@1c20800/spi2@1 phandle fdt get value tmp_phandle2 /soc/pinctrl@1c20800/spi2_cs0@1 phandle fdt set /soc/spi@1c17000 pinctrl-0 "<${tmp_phandle1}>" fdt set /soc/spi@1c17000 pinctrl-1 "<${tmp_phandle2}>" env delete tmp_phandle1 tmp_phandle2 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@1c20800/pps_pins pins "${param_pps_pin}" fdt get value tmp_phandle /soc/pinctrl@1c20800 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 if test "${param_pwm_pins}" = "0"; then fdt get value tmp_phandle /soc/pinctrl@1c20800/pwm0@0 fdt set /soc/pwm@1c20e00 pinctrl-0 "<${tmp_phandle}>" env delete tmp_phandle fi if test "${param_pwm_pins}" = "1"; then fdt get value tmp_phandle /soc/pinctrl@1c20800/pwm1@0 fdt set /soc/pwm@1c20e00 pinctrl-0 "<${tmp_phandle}>" env delete tmp_phandle fi 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@1c20800/w1_pins pins "${param_w1_pin}" fdt get value tmp_phandle /soc/pinctrl@1c20800 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@1c20800/w1_pins bias-pull-up fi if test "${param_uart2_rtscts}" = "1"; then fdt get value tmp_phandle /soc/pinctrl@1c20800/uart2@0 phandle fdt set /soc/serial@1c28800 pinctrl-0 "<${tmp_phandle}>" env delete tmp_phandle fi if test "${param_uart3_pins}" = "b"; then if test "${param_uart3_rtscts}" = "1"; then fdt get value tmp_phandle1 /soc/pinctrl@1c20800/uart3_pins_b phandle fdt get value tmp_phandle2 /soc/pinctrl@1c20800/uart3_pins_b_rts_cts phandle fdt set /soc/serial@1c28c00 pinctrl-names "default" "default" fdt set /soc/serial@1c28c00 pinctrl-0 "<${tmp_phandle1}>" fdt set /soc/serial@1c28c00 pinctrl-1 "<${tmp_phandle2}>" env delete tmp_phandle1 tmp_phandle2 else fdt get value tmp_phandle /soc/pinctrl@1c20800/uart3_pins_b phandle fdt set /soc/serial@1c28c00 pinctrl-0 "<${tmp_phandle}>" env delete tmp_phandle fi else if test "${param_uart3_rtscts}" = "1"; then fdt get value tmp_phandle1 /soc/pinctrl@1c20800/uart3_pins_a phandle fdt get value tmp_phandle2 /soc/pinctrl@1c20800/uart3_pins_a_rts_cts phandle fdt set /soc/serial@1c28c00 pinctrl-names "default" "default" fdt set /soc/serial@1c28c00 pinctrl-0 "<${tmp_phandle1}>" fdt set /soc/serial@1c28c00 pinctrl-1 "<${tmp_phandle2}>" env delete tmp_phandle1 tmp_phandle2 fi fi if test "${param_uart4_pins}" = "b"; then fdt get value tmp_phandle /soc/pinctrl@1c20800/uart4@1 phandle fdt set /soc/serial@1c29000 pinctrl-0 "<${tmp_phandle}>" env delete tmp_phandle fi