diff mbox series

[2/3] at91: add support for sama5d2 icp board

Message ID mailman.7959.1626412149.1072.openwrt-devel@lists.openwrt.org
State Superseded
Headers show
Series at91: add support for sama5d2 icp and | expand

Commit Message

Claudiu Beznea July 16, 2021, 5:08 a.m. UTC
The sender domain has a DMARC Reject/Quarantine policy which disallows
sending mailing list messages using the original "From" header.

To mitigate this problem, the original message has been wrapped
automatically by the mailing list software.
Add support for SAMA5D2 ICP board.

Hardware:
- SoC: SAMAA5D27
- RAM: 512 MB DDR3L
- MMC: One stanard SD card interface
- USB: One USB host switch 4 ports with power switch,
       One USB device type Micro-AB
- CAN: 2 interfaces
- Ethernet: One Gigabit Ethernet PHY through HSIC,
	    One ETH switchport
	    One EtherCAT interface
- WiFi/BT: Footprint for IEEE 802.11 b/g/n Wi-Fi plus
	   Bluetooth module (Wi-Fi/BT), suitable for
	   Microchip WILC3000-MR110CA or WILC3000-MR110UA
- Debug port: One J-Link-OB/J-Link-CDC, one JTAG interface
- Leds: one RGB LED
- Buttons: reset, wakeup, 2 user buttons
- Expansion: one PIOBU/PIO connector, 3 mikrobus sockets
- Power mangament: PMIC (MCP16502), one power consumption device
                   (PAC1934)

Not working in Linux:
- EtherCAT interface: there is no Linux support integrated
- PAC1934: driver available at [1] but not integrated in Linux

Flashing:
- follow the procedure at [2]

[1] https://ww1.microchip.com/downloads/en/DeviceDoc/pac193x_linux_driver.zip
[2] https://www.linux4sam.org/bin/view/Linux4SAM/Sama5d2IcpMainPage#Create_a_SD_card_with_the_demo

Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
---
 package/boot/at91bootstrap/Makefile           |  14 +
 package/boot/uboot-at91/Makefile              |   7 +
 target/linux/at91/image/sama5.mk              |  11 +
 .../linux/at91/patches-5.4/105-add-icp.patch  | 780 ++++++++++++++++++
 4 files changed, 812 insertions(+)
 create mode 100644 target/linux/at91/patches-5.4/105-add-icp.patch
diff mbox series

Patch

diff --git a/package/boot/at91bootstrap/Makefile b/package/boot/at91bootstrap/Makefile
index f66472fa9c29..56e14c57703c 100644
--- a/package/boot/at91bootstrap/Makefile
+++ b/package/boot/at91bootstrap/Makefile
@@ -40,6 +40,18 @@  define AT91Bootstrap/at91sam9x5eksd_uboot
   BUILD_DEVICES:=atmel_at91sam9x25ek atmel_at91sam9x35ek
 endef
 
+define AT91Bootstrap/sama5d2_icpdf_qspi_uboot
+  TITLE:=AT91Bootstrap for SAMA5D2 ICP board (QSPI Flash)
+  BUILD_SUBTARGET:=sama5
+  BUILD_DEVICES:=microchip_sama5d2-icp
+endef
+
+define AT91Bootstrap/sama5d2_icpsd_uboot
+  TITLE:=AT91Bootstrap for SAMA5D2 ICP board (SDcard)
+  BUILD_SUBTARGET:=sama5
+  BUILD_DEVICES:=microchip_sama5d2-icp
+endef
+
 define AT91Bootstrap/sama5d2_xplaineddf_uboot
   TITLE:=AT91Bootstrap for SAMA5D2 Xplained board (SPI Flash)
   BUILD_SUBTARGET:=sama5
@@ -121,6 +133,8 @@  endef
 AT91BOOTSTRAP_TARGETS := \
 	at91sam9x5eknf_uboot \
 	at91sam9x5eksd_uboot \
+	sama5d2_icpdf_qspi_uboot \
+	sama5d2_icpsd_uboot \
 	sama5d2_xplaineddf_uboot \
 	sama5d2_xplaineddf_qspi_uboot \
 	sama5d2_xplainedsd_uboot \
diff --git a/package/boot/uboot-at91/Makefile b/package/boot/uboot-at91/Makefile
index a8a71239a398..193f26dae471 100644
--- a/package/boot/uboot-at91/Makefile
+++ b/package/boot/uboot-at91/Makefile
@@ -59,6 +59,12 @@  define U-Boot/sama5d3_xplained_mmc
   BUILD_DEVICES:=microchip_sama5d3-xplained
 endef
 
+define U-Boot/sama5d2_icp_mmc
+  NAME:=SAMA5D2 ICP board (SDCard)
+  BUILD_SUBTARGET:=sama5
+  BUILD_DEVICES:=microchip_sama5d2-icp
+endef
+
 define U-Boot/sama5d2_xplained_spiflash
   NAME:=SAMA5D2 Xplained board (SPI Flash)
   BUILD_SUBTARGET:=sama5
@@ -119,6 +125,7 @@  UBOOT_TARGETS := \
 	at91sam9x5ek_mmc \
 	sama5d3_xplained_nandflash \
 	sama5d3_xplained_mmc \
+	sama5d2_icp_mmc \
 	sama5d2_xplained_mmc \
 	sama5d2_xplained_spiflash \
 	sama5d4_xplained_mmc \
diff --git a/target/linux/at91/image/sama5.mk b/target/linux/at91/image/sama5.mk
index d644f89266d1..d02d09e835ec 100644
--- a/target/linux/at91/image/sama5.mk
+++ b/target/linux/at91/image/sama5.mk
@@ -54,6 +54,17 @@  define Build/at91-sdcard
   rm -f $@.img $@.boot $@-uboot.env $@-uboot-env.txt)
 endef
 
+define Device/microchip_sama5d2-icp
+  $(Device/evaluation-dtb)
+  DEVICE_VENDOR := Microchip
+  DEVICE_MODEL := SAMA5D2 ICP
+  DEVICE_DTS := at91-sama5d2_icp
+  SUPPORTED_DEVICES := microchip,sama5d2-icp
+  KERNEL_SIZE := 6144k
+  $(Device/evaluation-sdimage)
+endef
+TARGET_DEVICES += microchip_sama5d2-icp
+
 define Device/microchip_sama5d2-xplained
   $(Device/evaluation-dtb)
   DEVICE_VENDOR := Microchip
diff --git a/target/linux/at91/patches-5.4/105-add-icp.patch b/target/linux/at91/patches-5.4/105-add-icp.patch
new file mode 100644
index 000000000000..a8f34bcdfa6a
--- /dev/null
+++ b/target/linux/at91/patches-5.4/105-add-icp.patch
@@ -0,0 +1,780 @@ 
+--- a/arch/arm/boot/dts/Makefile
++++ b/arch/arm/boot/dts/Makefile
+@@ -48,6 +48,7 @@ dtb-$(CONFIG_SOC_SAM_V7) += \
+ 	at91-kizbox2.dtb \
+ 	at91-nattis-2-natte-2.dtb \
+ 	at91-sama5d27_som1_ek.dtb \
++	at91-sama5d2_icp.dtb \
+ 	at91-sama5d2_ptc_ek.dtb \
+ 	at91-sama5d2_xplained.dtb \
+ 	at91-sama5d3_xplained.dtb \
+--- /dev/null
++++ b/arch/arm/boot/dts/at91-sama5d2_icp.dts
+@@ -0,0 +1,767 @@
++// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
++/*
++ * at91-sama5d2_icp.dts - Device Tree file for SAMA5D2-ICP board
++ *
++ *  Copyright (C) 2019 Microchip Technology Inc. and its subsidiaries
++ *
++ *	Author: Radu Pirea & Razvan Stefanescu,
++ *		Codrin Ciubotariu <codrin.ciubotariu@microchip.com>,
++ *		Cristian Birsan <cristian.birsan@microchip.com>
++ */
++/dts-v1/;
++#include "sama5d2.dtsi"
++#include "sama5d2-pinfunc.h"
++#include <dt-bindings/gpio/gpio.h>
++#include <dt-bindings/input/input.h>
++#include <dt-bindings/mfd/atmel-flexcom.h>
++
++/ {
++	model = "Microchip SAMA5D2-ICP";
++	compatible = "microchip,sama5d2-icp", "atmel,sama5d27", "atmel,sama5d2", "atmel,sama5";
++
++	aliases {
++		serial0 = &uart0;	/* debug uart0 + mikro BUS 1 */
++		serial1 = &uart1;	/* mikro BUS 3 */
++		serial3 = &uart3;	/* mikro BUS 2 */
++		serial5 = &uart7;	/* flx2 */
++		i2c0	= &i2c0;
++		i2c1	= &i2c1;
++	};
++
++	chosen {
++		stdout-path = "serial0:115200n8";
++	};
++
++	clocks {
++		slow_xtal {
++			clock-frequency = <32768>;
++		};
++
++		main_xtal {
++			clock-frequency = <12000000>;
++		};
++	};
++
++	gpio_keys {
++		compatible = "gpio-keys";
++
++		pinctrl-names = "default";
++		pinctrl-0 = <&pinctrl_key_gpio_default>;
++		status = "okay";
++
++		sw4 {
++			label = "USER_PB1";
++			gpios = <&pioA PIN_PD0 GPIO_ACTIVE_LOW>;
++			linux,code = <KEY_PROG1>;
++			wakeup-source;
++		};
++	};
++
++	leds {
++		compatible = "gpio-leds";
++		pinctrl-names = "default";
++		pinctrl-0 = <&pinctrl_led_gpio_default>;
++		status = "okay"; /* conflict with pwm0 */
++
++		red {
++			label = "red";
++			gpios = <&pioA PIN_PB0 GPIO_ACTIVE_HIGH>;
++		};
++
++		green {
++			label = "green";
++			gpios = <&pioA PIN_PB1 GPIO_ACTIVE_HIGH>;
++		};
++
++		blue {
++			label = "blue";
++			gpios = <&pioA PIN_PA31 GPIO_ACTIVE_HIGH>;
++			linux,default-trigger = "heartbeat";
++		};
++	};
++};
++
++&adc {
++	vddana-supply = <&vdd_io_reg>;
++	vref-supply = <&vdd_io_reg>;
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_adc_default &pinctrl_adtrg_default>;
++	status = "okay";
++};
++
++&can0 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_can0_default>;
++	status = "okay";
++};
++
++&can1 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_can1_default>;
++	status = "okay";
++};
++
++&flx0 { /* mikrobus2 spi */
++	atmel,flexcom-mode = <ATMEL_FLEXCOM_MODE_SPI>;
++	status = "okay";
++
++	spi2: spi@400 {
++		dmas = <0>, <0>;
++		cs-gpios = <&pioA PIN_PC0 GPIO_ACTIVE_LOW>;
++		pinctrl-names = "default";
++		pinctrl-0 = <&pinctrl_mikrobus2_spi &pinctrl_ksz_spi_cs>;
++		status = "okay";
++		#address-cells = <1>;
++		#size-cells = <0>;
++
++		switch0: ksz8563@0 {
++			compatible = "microchip,ksz8563";
++			reg = <0>;
++			reset-gpios = <&pioA PIN_PD4 GPIO_ACTIVE_LOW>;
++
++			spi-max-frequency = <500000>;
++			spi-cpha;
++			spi-cpol;
++
++			ports {
++				#address-cells = <1>;
++				#size-cells = <0>;
++				port@0 {
++					reg = <0>;
++					label = "lan1";
++				};
++
++				port@1 {
++					reg = <1>;
++					label = "lan2";
++				};
++
++				port@2 {
++					reg = <2>;
++					label = "cpu";
++					ethernet = <&macb0>;
++					phy-mode = "mii";
++					fixed-link {
++						speed = <100>;
++						full-duplex;
++					};
++				};
++			};
++		};
++	};
++};
++
++&flx2 {
++	atmel,flexcom-mode = <ATMEL_FLEXCOM_MODE_USART>;
++	status = "okay";
++
++	uart7: serial@200 {
++		pinctrl-0 = <&pinctrl_flx2_default>;
++		pinctrl-names = "default";
++		atmel,use-dma-rx;
++		atmel,use-dma-tx;
++		status = "okay"; /* Conflict w/ qspi1. */
++	};
++};
++
++&flx3 { /* mikrobus1 spi */
++	atmel,flexcom-mode = <ATMEL_FLEXCOM_MODE_SPI>;
++	status = "okay";
++
++	spi5: spi@400 {
++		dmas = <0>, <0>;
++		pinctrl-names = "default";
++		pinctrl-0 = <&pinctrl_mikrobus1_spi &pinctrl_mikrobus1_spi_cs>;
++		status = "okay";
++	};
++};
++
++&flx4 {
++	atmel,flexcom-mode = <ATMEL_FLEXCOM_MODE_TWI>;
++	status = "okay";
++
++	i2c6: i2c@600 {
++		dmas = <0>, <0>;
++		pinctrl-names = "default";
++		pinctrl-0 = <&pinctrl_flx4_default>;
++		status = "okay";
++
++		mcp16502@5b {
++			compatible = "microchip,mcp16502";
++			reg = <0x5b>;
++			status = "okay";
++			lpm-gpios = <&pioBU 7 GPIO_ACTIVE_LOW>;
++
++			regulators {
++				vdd_io_reg: VDD_IO {
++					regulator-name = "VDD_IO";
++					regulator-min-microvolt = <1200000>;
++					regulator-max-microvolt = <3700000>;
++					regulator-initial-mode = <2>;
++					regulator-allowed-modes = <2>, <4>;
++					regulator-always-on;
++
++					regulator-state-standby {
++						regulator-on-in-suspend;
++						regulator-mode = <4>;
++					};
++
++					regulator-state-mem {
++						regulator-off-in-suspend;
++						regulator-mode = <4>;
++					};
++				};
++
++				VDD_DDR {
++					regulator-name = "VDD_DDR";
++					regulator-min-microvolt = <600000>;
++					regulator-max-microvolt = <1850000>;
++					regulator-initial-mode = <2>;
++					regulator-allowed-modes = <2>, <4>;
++					regulator-always-on;
++
++					regulator-state-standby {
++						regulator-on-in-suspend;
++						regulator-mode = <4>;
++					};
++
++					regulator-state-mem {
++						regulator-on-in-suspend;
++						regulator-mode = <4>;
++					};
++				};
++
++				VDD_CORE {
++					regulator-name = "VDD_CORE";
++					regulator-min-microvolt = <600000>;
++					regulator-max-microvolt = <1850000>;
++					regulator-initial-mode = <2>;
++					regulator-allowed-modes = <2>, <4>;
++					regulator-always-on;
++
++					regulator-state-standby {
++						regulator-on-in-suspend;
++						regulator-mode = <4>;
++					};
++
++					regulator-state-mem {
++						regulator-off-in-suspend;
++						regulator-mode = <4>;
++					};
++				};
++
++				VDD_OTHER {
++					regulator-name = "VDD_OTHER";
++					regulator-min-microvolt = <600000>;
++					regulator-max-microvolt = <1850000>;
++					regulator-initial-mode = <2>;
++					regulator-allowed-modes = <2>, <4>;
++					regulator-always-on;
++
++					regulator-state-standby {
++						regulator-on-in-suspend;
++						regulator-mode = <4>;
++					};
++
++					regulator-state-mem {
++						regulator-off-in-suspend;
++						regulator-mode = <4>;
++					};
++				};
++
++				LDO1 {
++					regulator-name = "LDO1";
++					regulator-min-microvolt = <1200000>;
++					regulator-max-microvolt = <3700000>;
++					regulator-always-on;
++
++					regulator-state-standby {
++						regulator-on-in-suspend;
++					};
++
++					regulator-state-mem {
++						regulator-off-in-suspend;
++					};
++				};
++
++				LDO2 {
++					regulator-name = "LDO2";
++					regulator-min-microvolt = <1200000>;
++					regulator-max-microvolt = <3700000>;
++					regulator-always-on;
++
++					regulator-state-standby {
++						regulator-on-in-suspend;
++					};
++
++					regulator-state-mem {
++						regulator-off-in-suspend;
++					};
++				};
++
++			};
++		};
++	};
++};
++
++&i2c0 { /* mikrobus i2c */
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_mikrobus_i2c>;
++	status = "okay";
++};
++
++&i2c1 {
++	dmas = <0>, <0>;
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_i2c1_default>;
++	status = "okay";
++
++	eeprom@50 {
++		compatible = "atmel,24c32";
++		reg = <0x50>;
++		pagesize = <16>;
++		status = "okay";
++	};
++
++	eeprom@52 {
++		compatible = "atmel,24c32";
++		reg = <0x52>;
++		pagesize = <16>;
++		status = "disabled";
++	};
++
++	eeprom@53 {
++		compatible = "atmel,24c32";
++		reg = <0x53>;
++		pagesize = <16>;
++		status = "disabled";
++	};
++};
++
++&macb0 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_macb0_default &pinctrl_macb0_phy_irq &pinctrl_macb0_rst>;
++	phy-mode = "mii";
++	status = "okay";
++
++	fixed-link {
++		speed = <100>;
++		full-duplex;
++	};
++};
++
++&pioA {
++	pinctrl_adc_default: adc_default {
++		pinmux = <PIN_PD24__GPIO>,
++				<PIN_PD25__GPIO>,
++				<PIN_PD26__GPIO>;
++		bias-disable;
++	};
++
++	/*
++	 * The ADTRG pin can work on any edge type.
++	 * In here it's being pulled up, so need to
++	 * connect it to ground to get an edge e.g.
++	 * Trigger can be configured on falling, rise
++	 * or any edge, and the pull-up can be changed
++	 * to pull-down or left floating according to
++	 * needs.
++	 */
++	pinctrl_adtrg_default: adtrg_default {
++		pinmux = <PIN_PD31__ADTRG>;
++		bias-pull-up;
++	};
++
++	pinctrl_flx4_default: flx4_default {
++		pinmux = <PIN_PC28__FLEXCOM4_IO0>,
++			 <PIN_PC29__FLEXCOM4_IO1>;
++		bias-disable;
++	};
++
++	pinctrl_can0_default: can0_default {
++		pinmux = <PIN_PC10__CANTX0>,
++			 <PIN_PC11__CANRX0>;
++		bias-disable;
++	};
++
++	pinctrl_can1_default: can1_default {
++		pinmux = <PIN_PC26__CANTX1>,
++			 <PIN_PC27__CANRX1>;
++		bias-disable;
++	};
++
++	pinctrl_i2c1_default: i2c1_default {
++		pinmux = <PIN_PD19__TWD1>,
++			 <PIN_PD20__TWCK1>;
++		bias-disable;
++	};
++
++	pinctrl_key_gpio_default: key_gpio_default {
++		pinmux = <PIN_PD0__GPIO>;
++		bias-pull-up;
++	};
++
++	pinctrl_led_gpio_default: led_gpio_default {
++		pinmux = <PIN_PB0__GPIO>,
++			 <PIN_PB1__GPIO>,
++			 <PIN_PA31__GPIO>;
++		bias-pull-up;
++	};
++
++	pinctrl_qspi1_default: qspi1_default {
++		pinmux = <PIN_PA6__QSPI1_SCK>,
++			 <PIN_PA7__QSPI1_IO0>,
++			 <PIN_PA8__QSPI1_IO1>,
++			 <PIN_PA9__QSPI1_IO2>,
++			 <PIN_PA10__QSPI1_IO3>,
++			 <PIN_PA11__QSPI1_CS>;
++		bias-disable;
++	};
++
++	pinctrl_sdmmc0_default: sdmmc0_default {
++		cmd_data {
++			pinmux = <PIN_PA1__SDMMC0_CMD>,
++				 <PIN_PA2__SDMMC0_DAT0>,
++				 <PIN_PA3__SDMMC0_DAT1>,
++				 <PIN_PA4__SDMMC0_DAT2>,
++				 <PIN_PA5__SDMMC0_DAT3>;
++			bias-disable;
++		};
++
++		ck_cd {
++			pinmux = <PIN_PA0__SDMMC0_CK>,
++				 <PIN_PA13__SDMMC0_CD>;
++			bias-disable;
++		};
++	};
++
++	pinctrl_sdmmc1_default: sdmmc1_default {
++		cmd_data {
++			pinmux = <PIN_PA18__SDMMC1_DAT0>,
++				 <PIN_PA19__SDMMC1_DAT1>,
++				 <PIN_PA20__SDMMC1_DAT2>,
++				 <PIN_PA21__SDMMC1_DAT3>;
++			bias-disable;
++		};
++
++		ck_cd {
++			pinmux = <PIN_PA22__SDMMC1_CK>,
++				 <PIN_PA28__SDMMC1_CMD>;
++			bias-disable;
++		};
++	};
++
++	pinctrl_mikrobus_i2c: mikrobus_i2c {
++		pinmux = <PIN_PD22__TWCK0>,
++			 <PIN_PD21__TWD0>;
++		bias-disable;
++	};
++
++	pinctrl_mikrobus1_an: mikrobus1_an {
++		pinmux = <PIN_PD26__GPIO>;
++		bias-disable;
++	};
++
++	pinctrl_mikrobus1_rst: mikrobus1_rst {
++		pinmux = <PIN_PC5__GPIO>;
++		bias-disable;
++	};
++
++	pinctrl_mikrobus1_spi_cs: mikrobus1_spi_cs {
++		pinmux = <PIN_PC21__FLEXCOM3_IO3>;
++		bias-disable;
++	};
++
++	pinctrl_mikrobus1_spi: mikrobus1_spi {
++		pinmux = <PIN_PC20__FLEXCOM3_IO0>,
++			 <PIN_PC19__FLEXCOM3_IO1>,
++			 <PIN_PC18__FLEXCOM3_IO2>;
++		bias-disable;
++	};
++
++	pinctrl_mikrobus1_pwm: mikrobus1_pwm {
++		pinmux = <PIN_PC4__TIOB1>;
++		bias-disable;
++	};
++
++	pinctrl_mikrobus1_int: mikrobus1_int {
++		pinmux = <PIN_PC3__GPIO>;
++		bias-disable;
++	};
++
++	pinctrl_mikrobus1_uart: mikrobus1_uart {
++		pinmux = <PIN_PB26__URXD0>,
++			 <PIN_PB27__UTXD0>;
++		bias-disable;
++	};
++
++	pinctrl_mikrobus2_an: mikrobus2_an {
++		pinmux = <PIN_PD25__GPIO>;
++		bias-disable;
++	};
++
++	pinctrl_mikrobus2_rst: mikrobus2_rst {
++		pinmux = <PIN_PB24__GPIO>;
++		bias-disable;
++	};
++
++	pinctrl_mikrobus2_spi_cs: mikrobus2_spi_cs {
++		pinmux = <PIN_PB31__FLEXCOM0_IO3>;
++		bias-disable;
++	};
++
++	pinctrl_mikrobus2_spi: mikrobus2_spi {
++		pinmux = <PIN_PB28__FLEXCOM0_IO0>,
++			 <PIN_PB29__FLEXCOM0_IO1>,
++			 <PIN_PB30__FLEXCOM0_IO2>;
++		bias-disable;
++	};
++
++	pinctrl_ksz_spi_cs: ksz_spi_cs {
++		pinmux = <PIN_PC0__GPIO>;
++		bias-disable;
++	};
++
++	pinctrl_mikrobus2_pwm: mikrobus2_pwm {
++		pinmux = <PIN_PB23__TIOB2>;
++		bias-disable;
++	};
++
++	pinctrl_mikrobus2_int: mikrobus2_int {
++		pinmux = <PIN_PB22__GPIO>;
++		bias-disable;
++	};
++
++	pinctrl_mikrobus2_uart: mikrobus2_uart {
++		pinmux = <PIN_PC12__URXD3>,
++			 <PIN_PC13__UTXD3>;
++		bias-disable;
++	};
++
++	pinctrl_mikrobus3_an: mikrobus3_an {
++		pinmux = <PIN_PD24__GPIO>;
++		bias-disable;
++	};
++
++	pinctrl_mikrobus3_rst: mikrobus3_rst {
++		pinmux = <PIN_PB21__GPIO>;
++		bias-disable;
++	};
++
++	pinctrl_mikrobus3_spi_cs: mikrobus3_spi_cs {
++		pinmux = <PIN_PA17__SPI0_NPCS0>;
++		bias-disable;
++	};
++
++	pinctrl_mikrobus3_spi: mikrobus3_spi {
++		pinmux = <PIN_PA14__SPI0_SPCK>,
++			 <PIN_PA16__SPI0_MISO>,
++			 <PIN_PA15__SPI0_MOSI>;
++		bias-disable;
++	};
++
++	pinctrl_mikrobus3_pwm: mikrobus3_pwm {
++		pinmux = <PIN_PB20__TIOB3>;
++		bias-disable;
++	};
++
++	pinctrl_mikrobus3_int: mikrobus3_int {
++		pinmux = <PIN_PB18__GPIO>;
++		bias-disable;
++	};
++
++	pinctrl_mikrobus3_uart: mikrobus3_uart {
++		pinmux = <PIN_PC7__URXD1>,
++			 <PIN_PC8__UTXD1>;
++		bias-disable;
++	};
++
++	pinctrl_usb_default: usb_default {
++		pinmux = <PIN_PC17__GPIO>;
++		bias-disable;
++	};
++
++	pinctrl_usba_vbus: usba_vbus {
++		pinmux = <PIN_PD23__GPIO>;
++		bias-disable;
++	};
++
++	pinctrl_pwm0_pwm2_default: pwm0_pwm2_default {
++		pinmux = <PIN_PB5__PWMH2>,
++			 <PIN_PB6__PWML2>;
++		bias-pull-up;
++	};
++
++	pinctrl_macb0_default: macb0_default {
++		pinmux = <PIN_PD1__GRXCK>,
++			 <PIN_PD2__GTXER>,
++			 <PIN_PD5__GRX2>,
++			 <PIN_PD6__GRX3>,
++			 <PIN_PD7__GTX2>,
++			 <PIN_PD8__GTX3>,
++			 <PIN_PD9__GTXCK>,
++			 <PIN_PD10__GTXEN>,
++			 <PIN_PD11__GRXDV>,
++			 <PIN_PD12__GRXER>,
++			 <PIN_PD13__GRX0>,
++			 <PIN_PD14__GRX1>,
++			 <PIN_PD15__GTX0>,
++			 <PIN_PD16__GTX1>,
++			 <PIN_PD17__GMDC>,
++			 <PIN_PD18__GMDIO>;
++		bias-disable;
++	};
++
++	pinctrl_macb0_phy_irq: macb0_phy_irq {
++		pinmux = <PIN_PD3__GPIO>;
++		bias-disable;
++	};
++
++	pinctrl_macb0_rst: macb0_sw_rst {
++		pinmux = <PIN_PD4__GPIO>;
++		bias-disable;
++	};
++
++	pinctrl_flx2_default: flx2_default {
++		pinmux = <PIN_PA6__FLEXCOM2_IO0>,
++			 <PIN_PA7__FLEXCOM2_IO1>,
++			 <PIN_PA9__FLEXCOM2_IO3>,
++			 <PIN_PA10__FLEXCOM2_IO4>;
++		bias-disable;
++	};
++};
++
++&pwm0 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_pwm0_pwm2_default>;
++	status = "disabled"; /* conflict with leds, HSIC */
++};
++
++&qspi1 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_qspi1_default>;
++	status = "disabled"; /* Conflict with wilc_pwrseq, flx2 */
++
++	flash@0 {
++		#address-cells = <1>;
++		#size-cells = <1>;
++		compatible = "jedec,spi-nor";
++		reg = <0>;
++		spi-max-frequency = <80000000>;
++		spi-tx-bus-width = <4>;
++		spi-rx-bus-width = <4>;
++		m25p,fast-read;
++
++		at91bootstrap@0 {
++			label = "qspi: at91bootstrap";
++			reg = <0x00000000 0x00040000>;
++		};
++
++		bootloader@40000 {
++			label = "qspi: bootloader";
++			reg = <0x00040000 0x000c0000>;
++		};
++
++		bootloaderenvred@100000 {
++			label = "qspi: bootloader env redundant";
++			reg = <0x00100000 0x00040000>;
++		};
++
++		bootloaderenv@140000 {
++			label = "qspi: bootloader env";
++			reg = <0x00140000 0x00040000>;
++		};
++
++		dtb@180000 {
++			label = "qspi: device tree";
++			reg = <0x00180000 0x00080000>;
++		};
++
++		kernel@200000 {
++			label = "qspi: kernel";
++			reg = <0x00200000 0x00600000>;
++		};
++	};
++};
++
++&sdmmc0 {
++	no-1-8-v;
++	bus-width = <4>;
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_sdmmc0_default>;
++	status = "okay";
++};
++
++&shutdown_controller {
++	atmel,shdwc-debouncer = <976>;
++	atmel,wakeup-rtc-timer;
++
++	input@0 {
++		reg = <0>;
++	};
++};
++
++&spi0 {  /* mikrobus3 spi */
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_mikrobus3_spi &pinctrl_mikrobus3_spi_cs>;
++	status = "okay";
++};
++
++&tcb0 {
++	timer0: timer@0 {
++		compatible = "atmel,tcb-timer";
++		reg = <0>;
++	};
++
++	timer1: timer@1 {
++		compatible = "atmel,tcb-timer";
++		reg = <1>;
++	};
++};
++
++&uart0 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_mikrobus1_uart>;
++	atmel,use-dma-rx;
++	atmel,use-dma-tx;
++	status = "okay";
++};
++
++&uart1 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_mikrobus3_uart>;
++	atmel,use-dma-rx;
++	atmel,use-dma-tx;
++	status = "okay";
++};
++
++&uart3 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_mikrobus2_uart>;
++	atmel,use-dma-rx;
++	atmel,use-dma-tx;
++	status = "okay";
++};
++
++&usb0 {
++	atmel,vbus-gpio = <&pioA PIN_PD23 GPIO_ACTIVE_HIGH>;
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_usba_vbus>;
++	status = "okay";
++};
++
++&usb1 {
++	num-ports = <3>;
++	pinctrl-names = "default";
++	pinctrl-0 = <&pinctrl_usb_default>;
++	status = "okay";
++};
++
++&usb2 {
++	phy_type = "hsic";
++	status = "okay";
++};
++
++&watchdog {
++	status = "okay";
++};