Commit 44d379cf3d846b046b2edf2df5c302159a5b1ac5

Authored by Eric Lee
1 parent 2a0a07c753

Make changes for hardware rev. 00E0

Showing 2 changed files with 7 additions and 7 deletions Inline Diff

arch/arm/dts/fsl-smarcimx8mq.dts
1 /* 1 /*
2 * Copyright (C) 2016 Freescale Semiconductor, Inc. 2 * Copyright (C) 2016 Freescale Semiconductor, Inc.
3 * Copyright 2017 NXP 3 * Copyright 2017 NXP
4 * 4 *
5 * This program is free software; you can redistribute it and/or 5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License 6 * modify it under the terms of the GNU General Public License
7 * as published by the Free Software Foundation; either version 2 7 * as published by the Free Software Foundation; either version 2
8 * of the License, or (at your option) any later version. 8 * of the License, or (at your option) any later version.
9 * 9 *
10 * This program is distributed in the hope that it will be useful, 10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details. 13 * GNU General Public License for more details.
14 */ 14 */
15 15
16 /dts-v1/; 16 /dts-v1/;
17 17
18 /* First 128KB is for PSCI ATF. */ 18 /* First 128KB is for PSCI ATF. */
19 /memreserve/ 0x40000000 0x00020000; 19 /memreserve/ 0x40000000 0x00020000;
20 20
21 #include "fsl-imx8mq.dtsi" 21 #include "fsl-imx8mq.dtsi"
22 22
23 / { 23 / {
24 model = "Embedian SMARC-iMX8M Computer on Module"; 24 model = "Embedian SMARC-iMX8M Computer on Module";
25 compatible = "embedian,imx8mq-smarcimx8m", "fsl,imx8mq"; 25 compatible = "embedian,imx8mq-smarcimx8m", "fsl,imx8mq";
26 26
27 regulators { 27 regulators {
28 compatible = "simple-bus"; 28 compatible = "simple-bus";
29 #address-cells = <1>; 29 #address-cells = <1>;
30 #size-cells = <0>; 30 #size-cells = <0>;
31 31
32 reg_usdhc2_vmmc: usdhc2_vmmc { 32 reg_usdhc2_vmmc: usdhc2_vmmc {
33 compatible = "regulator-fixed"; 33 compatible = "regulator-fixed";
34 regulator-name = "VSD_3V3"; 34 regulator-name = "VSD_3V3";
35 regulator-min-microvolt = <3300000>; 35 regulator-min-microvolt = <3300000>;
36 regulator-max-microvolt = <3300000>; 36 regulator-max-microvolt = <3300000>;
37 gpio = <&gpio2 19 GPIO_ACTIVE_HIGH>; 37 gpio = <&gpio2 19 GPIO_ACTIVE_HIGH>;
38 enable-active-high; 38 enable-active-high;
39 }; 39 };
40 }; 40 };
41 41
42 backlight: backlight { 42 backlight: backlight {
43 compatible = "pwm-backlight"; 43 compatible = "pwm-backlight";
44 pwms = <&pwm1 0 1000000 0>; 44 pwms = <&pwm1 0 1000000 0>;
45 brightness-levels = < 0 1 2 3 4 5 6 7 8 9 45 brightness-levels = < 0 1 2 3 4 5 6 7 8 9
46 10 11 12 13 14 15 16 17 18 19 46 10 11 12 13 14 15 16 17 18 19
47 20 21 22 23 24 25 26 27 28 29 47 20 21 22 23 24 25 26 27 28 29
48 30 31 32 33 34 35 36 37 38 39 48 30 31 32 33 34 35 36 37 38 39
49 40 41 42 43 44 45 46 47 48 49 49 40 41 42 43 44 45 46 47 48 49
50 50 51 52 53 54 55 56 57 58 59 50 50 51 52 53 54 55 56 57 58 59
51 60 61 62 63 64 65 66 67 68 69 51 60 61 62 63 64 65 66 67 68 69
52 70 71 72 73 74 75 76 77 78 79 52 70 71 72 73 74 75 76 77 78 79
53 80 81 82 83 84 85 86 87 88 89 53 80 81 82 83 84 85 86 87 88 89
54 90 91 92 93 94 95 96 97 98 99 54 90 91 92 93 94 95 96 97 98 99
55 100>; 55 100>;
56 default-brightness-level = <80>; 56 default-brightness-level = <80>;
57 status = "disabled"; 57 status = "disabled";
58 }; 58 };
59 }; 59 };
60 60
61 &iomuxc { 61 &iomuxc {
62 pinctrl-names = "default"; 62 pinctrl-names = "default";
63 63
64 smarc-imx8mq { 64 smarc-imx8mq {
65 pinctrl_fec1: fec1grp { 65 pinctrl_fec1: fec1grp {
66 fsl,pins = < 66 fsl,pins = <
67 MX8MQ_IOMUXC_ENET_MDC_ENET1_MDC 0x3 67 MX8MQ_IOMUXC_ENET_MDC_ENET1_MDC 0x3
68 MX8MQ_IOMUXC_ENET_MDIO_ENET1_MDIO 0x23 68 MX8MQ_IOMUXC_ENET_MDIO_ENET1_MDIO 0x23
69 MX8MQ_IOMUXC_ENET_TD3_ENET1_RGMII_TD3 0x1f 69 MX8MQ_IOMUXC_ENET_TD3_ENET1_RGMII_TD3 0x1f
70 MX8MQ_IOMUXC_ENET_TD2_ENET1_RGMII_TD2 0x1f 70 MX8MQ_IOMUXC_ENET_TD2_ENET1_RGMII_TD2 0x1f
71 MX8MQ_IOMUXC_ENET_TD1_ENET1_RGMII_TD1 0x1f 71 MX8MQ_IOMUXC_ENET_TD1_ENET1_RGMII_TD1 0x1f
72 MX8MQ_IOMUXC_ENET_TD0_ENET1_RGMII_TD0 0x1f 72 MX8MQ_IOMUXC_ENET_TD0_ENET1_RGMII_TD0 0x1f
73 MX8MQ_IOMUXC_ENET_RD3_ENET1_RGMII_RD3 0x91 73 MX8MQ_IOMUXC_ENET_RD3_ENET1_RGMII_RD3 0x91
74 MX8MQ_IOMUXC_ENET_RD2_ENET1_RGMII_RD2 0x91 74 MX8MQ_IOMUXC_ENET_RD2_ENET1_RGMII_RD2 0x91
75 MX8MQ_IOMUXC_ENET_RD1_ENET1_RGMII_RD1 0x91 75 MX8MQ_IOMUXC_ENET_RD1_ENET1_RGMII_RD1 0x91
76 MX8MQ_IOMUXC_ENET_RD0_ENET1_RGMII_RD0 0x91 76 MX8MQ_IOMUXC_ENET_RD0_ENET1_RGMII_RD0 0x91
77 MX8MQ_IOMUXC_ENET_TXC_ENET1_RGMII_TXC 0x1f 77 MX8MQ_IOMUXC_ENET_TXC_ENET1_RGMII_TXC 0x1f
78 MX8MQ_IOMUXC_ENET_RXC_ENET1_RGMII_RXC 0x91 78 MX8MQ_IOMUXC_ENET_RXC_ENET1_RGMII_RXC 0x91
79 MX8MQ_IOMUXC_ENET_RX_CTL_ENET1_RGMII_RX_CTL 0x91 79 MX8MQ_IOMUXC_ENET_RX_CTL_ENET1_RGMII_RX_CTL 0x91
80 MX8MQ_IOMUXC_ENET_TX_CTL_ENET1_RGMII_TX_CTL 0x1f 80 MX8MQ_IOMUXC_ENET_TX_CTL_ENET1_RGMII_TX_CTL 0x1f
81 >; 81 >;
82 }; 82 };
83 83
84 pinctrl_i2c1: i2c1grp { 84 pinctrl_i2c1: i2c1grp {
85 fsl,pins = < 85 fsl,pins = <
86 MX8MQ_IOMUXC_I2C1_SCL_I2C1_SCL 0x4000007f 86 MX8MQ_IOMUXC_I2C1_SCL_I2C1_SCL 0x4000007f
87 MX8MQ_IOMUXC_I2C1_SDA_I2C1_SDA 0x4000007f 87 MX8MQ_IOMUXC_I2C1_SDA_I2C1_SDA 0x4000007f
88 >; 88 >;
89 }; 89 };
90 90
91 pinctrl_i2c2: i2c2grp { 91 pinctrl_i2c2: i2c2grp {
92 fsl,pins = < 92 fsl,pins = <
93 MX8MQ_IOMUXC_I2C2_SCL_I2C2_SCL 0x4000007f 93 MX8MQ_IOMUXC_I2C2_SCL_I2C2_SCL 0x4000007f
94 MX8MQ_IOMUXC_I2C2_SDA_I2C2_SDA 0x4000007f 94 MX8MQ_IOMUXC_I2C2_SDA_I2C2_SDA 0x4000007f
95 >; 95 >;
96 }; 96 };
97 97
98 pinctrl_i2c3: i2c3grp { 98 pinctrl_i2c3: i2c3grp {
99 fsl,pins = < 99 fsl,pins = <
100 MX8MQ_IOMUXC_I2C3_SCL_I2C3_SCL 0x4000007f 100 MX8MQ_IOMUXC_I2C3_SCL_I2C3_SCL 0x4000007f
101 MX8MQ_IOMUXC_I2C3_SDA_I2C3_SDA 0x4000007f 101 MX8MQ_IOMUXC_I2C3_SDA_I2C3_SDA 0x4000007f
102 >; 102 >;
103 }; 103 };
104 104
105 pinctrl_i2c4: i2c4grp { 105 pinctrl_i2c4: i2c4grp {
106 fsl,pins = < 106 fsl,pins = <
107 MX8MQ_IOMUXC_I2C4_SCL_I2C4_SCL 0x4000007f 107 MX8MQ_IOMUXC_I2C4_SCL_I2C4_SCL 0x4000007f
108 MX8MQ_IOMUXC_I2C4_SDA_I2C4_SDA 0x4000007f 108 MX8MQ_IOMUXC_I2C4_SDA_I2C4_SDA 0x4000007f
109 >; 109 >;
110 }; 110 };
111 111
112 112
113 pinctrl_pcie0: pcie0grp { 113 pinctrl_pcie0: pcie0grp {
114 fsl,pins = < 114 fsl,pins = <
115 MX8MQ_IOMUXC_NAND_CE2_B_GPIO3_IO3 0x16 115 MX8MQ_IOMUXC_NAND_CE2_B_GPIO3_IO3 0x16
116 >; 116 >;
117 }; 117 };
118 118
119 pinctrl_pcie1: pcie1grp { 119 pinctrl_pcie1: pcie1grp {
120 fsl,pins = < 120 fsl,pins = <
121 MX8MQ_IOMUXC_NAND_CE3_B_GPIO3_IO4 0x16 121 MX8MQ_IOMUXC_NAND_CE3_B_GPIO3_IO4 0x16
122 >; 122 >;
123 }; 123 };
124 124
125 pinctrl_pwm1: pwm1grp { 125 pinctrl_pwm1: pwm1grp {
126 fsl,pins = < 126 fsl,pins = <
127 MX8MQ_IOMUXC_SPDIF_EXT_CLK_PWM1_OUT 0x16 127 MX8MQ_IOMUXC_SPDIF_EXT_CLK_PWM1_OUT 0x16
128 >; 128 >;
129 }; 129 };
130 130
131 pinctrl_qspi: qspigrp { 131 pinctrl_qspi: qspigrp {
132 fsl,pins = < 132 fsl,pins = <
133 MX8MQ_IOMUXC_NAND_ALE_QSPI_A_SCLK 0x82 133 MX8MQ_IOMUXC_NAND_ALE_QSPI_A_SCLK 0x82
134 MX8MQ_IOMUXC_NAND_CE0_B_QSPI_A_SS0_B 0x82 134 MX8MQ_IOMUXC_NAND_CE0_B_QSPI_A_SS0_B 0x82
135 MX8MQ_IOMUXC_NAND_CE1_B_QSPI_A_SS1_B 0x82 135 MX8MQ_IOMUXC_NAND_CE1_B_QSPI_A_SS1_B 0x82
136 MX8MQ_IOMUXC_NAND_DATA00_QSPI_A_DATA0 0x82 136 MX8MQ_IOMUXC_NAND_DATA00_QSPI_A_DATA0 0x82
137 MX8MQ_IOMUXC_NAND_DATA01_QSPI_A_DATA1 0x82 137 MX8MQ_IOMUXC_NAND_DATA01_QSPI_A_DATA1 0x82
138 MX8MQ_IOMUXC_NAND_DATA02_QSPI_A_DATA2 0x82 138 MX8MQ_IOMUXC_NAND_DATA02_QSPI_A_DATA2 0x82
139 MX8MQ_IOMUXC_NAND_DATA03_QSPI_A_DATA3 0x82 139 MX8MQ_IOMUXC_NAND_DATA03_QSPI_A_DATA3 0x82
140 140
141 >; 141 >;
142 }; 142 };
143 143
144 pinctrl_uart1: uart1grp { 144 pinctrl_uart1: uart1grp {
145 fsl,pins = < 145 fsl,pins = <
146 MX8MQ_IOMUXC_UART1_RXD_UART1_DCE_RX 0x79 146 MX8MQ_IOMUXC_UART1_RXD_UART1_DCE_RX 0x79
147 MX8MQ_IOMUXC_UART1_TXD_UART1_DCE_TX 0x79 147 MX8MQ_IOMUXC_UART1_TXD_UART1_DCE_TX 0x79
148 >; 148 >;
149 }; 149 };
150 150
151 pinctrl_uart2: uart2grp { 151 pinctrl_uart2: uart2grp {
152 fsl,pins = < 152 fsl,pins = <
153 MX8MQ_IOMUXC_UART2_RXD_UART2_DCE_RX 0x79 153 MX8MQ_IOMUXC_UART2_RXD_UART2_DCE_RX 0x79
154 MX8MQ_IOMUXC_UART2_TXD_UART2_DCE_TX 0x79 154 MX8MQ_IOMUXC_UART2_TXD_UART2_DCE_TX 0x79
155 MX8MQ_IOMUXC_ECSPI2_MOSI_GPIO5_IO11 0x19 /* RTS */ 155 MX8MQ_IOMUXC_UART4_TXD_UART2_DCE_RTS_B 0x79 /* RTS */
156 MX8MQ_IOMUXC_ECSPI2_SCLK_GPIO5_IO10 0x19 /* CTS */ 156 MX8MQ_IOMUXC_UART4_RXD_UART2_DCE_CTS_B 0x79 /* CTS */
157
158 >; 157 >;
159 }; 158 };
160 159
161 pinctrl_uart3: uart3grp { 160 pinctrl_uart3: uart3grp {
162 fsl,pins = < 161 fsl,pins = <
163 MX8MQ_IOMUXC_UART3_RXD_UART3_DCE_RX 0x79 162 MX8MQ_IOMUXC_UART3_RXD_UART3_DCE_RX 0x79
164 MX8MQ_IOMUXC_UART3_TXD_UART3_DCE_TX 0x79 163 MX8MQ_IOMUXC_UART3_TXD_UART3_DCE_TX 0x79
165 >; 164 >;
166 }; 165 };
167 166
168 pinctrl_uart4: uart4grp { 167 pinctrl_uart4: uart4grp {
169 fsl,pins = < 168 fsl,pins = <
170 MX8MQ_IOMUXC_UART4_RXD_UART4_DCE_RX 0x79 169 MX8MQ_IOMUXC_UART4_RXD_UART4_DCE_RX 0x79
171 MX8MQ_IOMUXC_UART4_TXD_UART4_DCE_TX 0x79 170 MX8MQ_IOMUXC_UART4_TXD_UART4_DCE_TX 0x79
172 >; 171 >;
173 }; 172 };
174 173
175 pinctrl_usdhc1: usdhc1grp { 174 pinctrl_usdhc1: usdhc1grp {
176 fsl,pins = < 175 fsl,pins = <
177 MX8MQ_IOMUXC_SD1_CLK_USDHC1_CLK 0x83 176 MX8MQ_IOMUXC_SD1_CLK_USDHC1_CLK 0x83
178 MX8MQ_IOMUXC_SD1_CMD_USDHC1_CMD 0xc3 177 MX8MQ_IOMUXC_SD1_CMD_USDHC1_CMD 0xc3
179 MX8MQ_IOMUXC_SD1_DATA0_USDHC1_DATA0 0xc3 178 MX8MQ_IOMUXC_SD1_DATA0_USDHC1_DATA0 0xc3
180 MX8MQ_IOMUXC_SD1_DATA1_USDHC1_DATA1 0xc3 179 MX8MQ_IOMUXC_SD1_DATA1_USDHC1_DATA1 0xc3
181 MX8MQ_IOMUXC_SD1_DATA2_USDHC1_DATA2 0xc3 180 MX8MQ_IOMUXC_SD1_DATA2_USDHC1_DATA2 0xc3
182 MX8MQ_IOMUXC_SD1_DATA3_USDHC1_DATA3 0xc3 181 MX8MQ_IOMUXC_SD1_DATA3_USDHC1_DATA3 0xc3
183 MX8MQ_IOMUXC_SD1_DATA4_USDHC1_DATA4 0xc3 182 MX8MQ_IOMUXC_SD1_DATA4_USDHC1_DATA4 0xc3
184 MX8MQ_IOMUXC_SD1_DATA5_USDHC1_DATA5 0xc3 183 MX8MQ_IOMUXC_SD1_DATA5_USDHC1_DATA5 0xc3
185 MX8MQ_IOMUXC_SD1_DATA6_USDHC1_DATA6 0xc3 184 MX8MQ_IOMUXC_SD1_DATA6_USDHC1_DATA6 0xc3
186 MX8MQ_IOMUXC_SD1_DATA7_USDHC1_DATA7 0xc3 185 MX8MQ_IOMUXC_SD1_DATA7_USDHC1_DATA7 0xc3
187 MX8MQ_IOMUXC_SD1_STROBE_USDHC1_STROBE 0x83 186 MX8MQ_IOMUXC_SD1_STROBE_USDHC1_STROBE 0x83
188 MX8MQ_IOMUXC_SD1_RESET_B_USDHC1_RESET_B 0xc1 187 MX8MQ_IOMUXC_SD1_RESET_B_USDHC1_RESET_B 0xc1
189 >; 188 >;
190 }; 189 };
191 190
192 pinctrl_usdhc1_100mhz: usdhc1grp100mhz { 191 pinctrl_usdhc1_100mhz: usdhc1grp100mhz {
193 fsl,pins = < 192 fsl,pins = <
194 MX8MQ_IOMUXC_SD1_CLK_USDHC1_CLK 0x8d 193 MX8MQ_IOMUXC_SD1_CLK_USDHC1_CLK 0x8d
195 MX8MQ_IOMUXC_SD1_CMD_USDHC1_CMD 0xcd 194 MX8MQ_IOMUXC_SD1_CMD_USDHC1_CMD 0xcd
196 MX8MQ_IOMUXC_SD1_DATA0_USDHC1_DATA0 0xcd 195 MX8MQ_IOMUXC_SD1_DATA0_USDHC1_DATA0 0xcd
197 MX8MQ_IOMUXC_SD1_DATA1_USDHC1_DATA1 0xcd 196 MX8MQ_IOMUXC_SD1_DATA1_USDHC1_DATA1 0xcd
198 MX8MQ_IOMUXC_SD1_DATA2_USDHC1_DATA2 0xcd 197 MX8MQ_IOMUXC_SD1_DATA2_USDHC1_DATA2 0xcd
199 MX8MQ_IOMUXC_SD1_DATA3_USDHC1_DATA3 0xcd 198 MX8MQ_IOMUXC_SD1_DATA3_USDHC1_DATA3 0xcd
200 MX8MQ_IOMUXC_SD1_DATA4_USDHC1_DATA4 0xcd 199 MX8MQ_IOMUXC_SD1_DATA4_USDHC1_DATA4 0xcd
201 MX8MQ_IOMUXC_SD1_DATA5_USDHC1_DATA5 0xcd 200 MX8MQ_IOMUXC_SD1_DATA5_USDHC1_DATA5 0xcd
202 MX8MQ_IOMUXC_SD1_DATA6_USDHC1_DATA6 0xcd 201 MX8MQ_IOMUXC_SD1_DATA6_USDHC1_DATA6 0xcd
203 MX8MQ_IOMUXC_SD1_DATA7_USDHC1_DATA7 0xcd 202 MX8MQ_IOMUXC_SD1_DATA7_USDHC1_DATA7 0xcd
204 MX8MQ_IOMUXC_SD1_STROBE_USDHC1_STROBE 0x8d 203 MX8MQ_IOMUXC_SD1_STROBE_USDHC1_STROBE 0x8d
205 MX8MQ_IOMUXC_SD1_RESET_B_USDHC1_RESET_B 0xc1 204 MX8MQ_IOMUXC_SD1_RESET_B_USDHC1_RESET_B 0xc1
206 >; 205 >;
207 }; 206 };
208 207
209 pinctrl_usdhc1_200mhz: usdhc1grp200mhz { 208 pinctrl_usdhc1_200mhz: usdhc1grp200mhz {
210 fsl,pins = < 209 fsl,pins = <
211 MX8MQ_IOMUXC_SD1_CLK_USDHC1_CLK 0x9f 210 MX8MQ_IOMUXC_SD1_CLK_USDHC1_CLK 0x9f
212 MX8MQ_IOMUXC_SD1_CMD_USDHC1_CMD 0xdf 211 MX8MQ_IOMUXC_SD1_CMD_USDHC1_CMD 0xdf
213 MX8MQ_IOMUXC_SD1_DATA0_USDHC1_DATA0 0xdf 212 MX8MQ_IOMUXC_SD1_DATA0_USDHC1_DATA0 0xdf
214 MX8MQ_IOMUXC_SD1_DATA1_USDHC1_DATA1 0xdf 213 MX8MQ_IOMUXC_SD1_DATA1_USDHC1_DATA1 0xdf
215 MX8MQ_IOMUXC_SD1_DATA2_USDHC1_DATA2 0xdf 214 MX8MQ_IOMUXC_SD1_DATA2_USDHC1_DATA2 0xdf
216 MX8MQ_IOMUXC_SD1_DATA3_USDHC1_DATA3 0xdf 215 MX8MQ_IOMUXC_SD1_DATA3_USDHC1_DATA3 0xdf
217 MX8MQ_IOMUXC_SD1_DATA4_USDHC1_DATA4 0xdf 216 MX8MQ_IOMUXC_SD1_DATA4_USDHC1_DATA4 0xdf
218 MX8MQ_IOMUXC_SD1_DATA5_USDHC1_DATA5 0xdf 217 MX8MQ_IOMUXC_SD1_DATA5_USDHC1_DATA5 0xdf
219 MX8MQ_IOMUXC_SD1_DATA6_USDHC1_DATA6 0xdf 218 MX8MQ_IOMUXC_SD1_DATA6_USDHC1_DATA6 0xdf
220 MX8MQ_IOMUXC_SD1_DATA7_USDHC1_DATA7 0xdf 219 MX8MQ_IOMUXC_SD1_DATA7_USDHC1_DATA7 0xdf
221 MX8MQ_IOMUXC_SD1_STROBE_USDHC1_STROBE 0x9f 220 MX8MQ_IOMUXC_SD1_STROBE_USDHC1_STROBE 0x9f
222 MX8MQ_IOMUXC_SD1_RESET_B_USDHC1_RESET_B 0xc1 221 MX8MQ_IOMUXC_SD1_RESET_B_USDHC1_RESET_B 0xc1
223 >; 222 >;
224 }; 223 };
225 224
226 pinctrl_usdhc2_gpio: usdhc2grpgpio { 225 pinctrl_usdhc2_gpio: usdhc2grpgpio {
227 fsl,pins = < 226 fsl,pins = <
228 MX8MQ_IOMUXC_SD2_WP_GPIO2_IO20 0x41 227 MX8MQ_IOMUXC_SD2_WP_GPIO2_IO20 0x41
229 MX8MQ_IOMUXC_SD2_CD_B_GPIO2_IO12 0x41 228 MX8MQ_IOMUXC_SD2_CD_B_GPIO2_IO12 0x41
230 MX8MQ_IOMUXC_SD2_RESET_B_GPIO2_IO19 0x41 229 MX8MQ_IOMUXC_SD2_RESET_B_GPIO2_IO19 0x41
231 >; 230 >;
232 }; 231 };
233 232
234 pinctrl_usdhc2: usdhc2grp { 233 pinctrl_usdhc2: usdhc2grp {
235 fsl,pins = < 234 fsl,pins = <
236 MX8MQ_IOMUXC_SD2_CLK_USDHC2_CLK 0x83 235 MX8MQ_IOMUXC_SD2_CLK_USDHC2_CLK 0x83
237 MX8MQ_IOMUXC_SD2_CMD_USDHC2_CMD 0xc3 236 MX8MQ_IOMUXC_SD2_CMD_USDHC2_CMD 0xc3
238 MX8MQ_IOMUXC_SD2_DATA0_USDHC2_DATA0 0xc3 237 MX8MQ_IOMUXC_SD2_DATA0_USDHC2_DATA0 0xc3
239 MX8MQ_IOMUXC_SD2_DATA1_USDHC2_DATA1 0xc3 238 MX8MQ_IOMUXC_SD2_DATA1_USDHC2_DATA1 0xc3
240 MX8MQ_IOMUXC_SD2_DATA2_USDHC2_DATA2 0xc3 239 MX8MQ_IOMUXC_SD2_DATA2_USDHC2_DATA2 0xc3
241 MX8MQ_IOMUXC_SD2_DATA3_USDHC2_DATA3 0xc3 240 MX8MQ_IOMUXC_SD2_DATA3_USDHC2_DATA3 0xc3
242 >; 241 >;
243 }; 242 };
244 243
245 pinctrl_usdhc2_100mhz: usdhc2grp100mhz { 244 pinctrl_usdhc2_100mhz: usdhc2grp100mhz {
246 fsl,pins = < 245 fsl,pins = <
247 MX8MQ_IOMUXC_SD2_CLK_USDHC2_CLK 0x8d 246 MX8MQ_IOMUXC_SD2_CLK_USDHC2_CLK 0x8d
248 MX8MQ_IOMUXC_SD2_CMD_USDHC2_CMD 0xcd 247 MX8MQ_IOMUXC_SD2_CMD_USDHC2_CMD 0xcd
249 MX8MQ_IOMUXC_SD2_DATA0_USDHC2_DATA0 0xcd 248 MX8MQ_IOMUXC_SD2_DATA0_USDHC2_DATA0 0xcd
250 MX8MQ_IOMUXC_SD2_DATA1_USDHC2_DATA1 0xcd 249 MX8MQ_IOMUXC_SD2_DATA1_USDHC2_DATA1 0xcd
251 MX8MQ_IOMUXC_SD2_DATA2_USDHC2_DATA2 0xcd 250 MX8MQ_IOMUXC_SD2_DATA2_USDHC2_DATA2 0xcd
252 MX8MQ_IOMUXC_SD2_DATA3_USDHC2_DATA3 0xcd 251 MX8MQ_IOMUXC_SD2_DATA3_USDHC2_DATA3 0xcd
253 >; 252 >;
254 }; 253 };
255 254
256 pinctrl_usdhc2_200mhz: usdhc2grp200mhz { 255 pinctrl_usdhc2_200mhz: usdhc2grp200mhz {
257 fsl,pins = < 256 fsl,pins = <
258 MX8MQ_IOMUXC_SD2_CLK_USDHC2_CLK 0x9f 257 MX8MQ_IOMUXC_SD2_CLK_USDHC2_CLK 0x9f
259 MX8MQ_IOMUXC_SD2_CMD_USDHC2_CMD 0xdf 258 MX8MQ_IOMUXC_SD2_CMD_USDHC2_CMD 0xdf
260 MX8MQ_IOMUXC_SD2_DATA0_USDHC2_DATA0 0xdf 259 MX8MQ_IOMUXC_SD2_DATA0_USDHC2_DATA0 0xdf
261 MX8MQ_IOMUXC_SD2_DATA1_USDHC2_DATA1 0xdf 260 MX8MQ_IOMUXC_SD2_DATA1_USDHC2_DATA1 0xdf
262 MX8MQ_IOMUXC_SD2_DATA2_USDHC2_DATA2 0xdf 261 MX8MQ_IOMUXC_SD2_DATA2_USDHC2_DATA2 0xdf
263 MX8MQ_IOMUXC_SD2_DATA3_USDHC2_DATA3 0xdf 262 MX8MQ_IOMUXC_SD2_DATA3_USDHC2_DATA3 0xdf
264 >; 263 >;
265 }; 264 };
266 265
267 pinctrl_sai2: sai2grp { 266 pinctrl_sai2: sai2grp {
268 fsl,pins = < 267 fsl,pins = <
269 MX8MQ_IOMUXC_SAI2_TXFS_SAI2_TX_SYNC 0xd6 268 MX8MQ_IOMUXC_SAI2_TXFS_SAI2_TX_SYNC 0xd6
270 MX8MQ_IOMUXC_SAI2_TXC_SAI2_TX_BCLK 0xd6 269 MX8MQ_IOMUXC_SAI2_TXC_SAI2_TX_BCLK 0xd6
271 MX8MQ_IOMUXC_SAI2_MCLK_SAI2_MCLK 0xd6 270 MX8MQ_IOMUXC_SAI2_MCLK_SAI2_MCLK 0xd6
272 MX8MQ_IOMUXC_SAI2_TXD0_SAI2_TX_DATA0 0xd6 271 MX8MQ_IOMUXC_SAI2_TXD0_SAI2_TX_DATA0 0xd6
273 MX8MQ_IOMUXC_GPIO1_IO08_GPIO1_IO8 0xd6 272 MX8MQ_IOMUXC_GPIO1_IO08_GPIO1_IO8 0xd6
274 >; 273 >;
275 }; 274 };
276 275
277 pinctrl_wdog: wdoggrp { 276 pinctrl_wdog: wdoggrp {
278 fsl,pins = < 277 fsl,pins = <
279 MX8MQ_IOMUXC_GPIO1_IO02_WDOG1_WDOG_B 0xc6 278 MX8MQ_IOMUXC_GPIO1_IO02_WDOG1_WDOG_B 0xc6
280 >; 279 >;
281 }; 280 };
282 }; 281 };
283 }; 282 };
284 283
285 &fec1 { 284 &fec1 {
286 pinctrl-names = "default"; 285 pinctrl-names = "default";
287 pinctrl-0 = <&pinctrl_fec1>; 286 pinctrl-0 = <&pinctrl_fec1>;
288 phy-mode = "rgmii-id"; 287 phy-mode = "rgmii-id";
289 phy-handle = <&ethphy0>; 288 phy-handle = <&ethphy0>;
290 fsl,magic-packet; 289 fsl,magic-packet;
291 interrupt-parent = <&gpio1>; 290 interrupt-parent = <&gpio1>;
292 interrupts = <11 IRQ_TYPE_EDGE_FALLING>; 291 interrupts = <11 IRQ_TYPE_EDGE_FALLING>;
293 status = "okay"; 292 status = "okay";
294 293
295 mdio { 294 mdio {
296 #address-cells = <1>; 295 #address-cells = <1>;
297 #size-cells = <0>; 296 #size-cells = <0>;
298 297
299 ethphy0: ethernet-phy@0 { 298 ethphy0: ethernet-phy@0 {
300 compatible = "ethernet-phy-ieee802.3-c22"; 299 compatible = "ethernet-phy-ieee802.3-c22";
301 reg = <0>; 300 reg = <0>;
302 at803x,led-act-blind-workaround; 301 at803x,led-act-blind-workaround;
303 at803x,eee-disabled; 302 at803x,eee-disabled;
304 }; 303 };
305 }; 304 };
306 }; 305 };
307 306
308 &i2c1 { 307 &i2c1 {
309 clock-frequency = <100000>; 308 clock-frequency = <100000>;
310 pinctrl-names = "default"; 309 pinctrl-names = "default";
311 pinctrl-0 = <&pinctrl_i2c1>; 310 pinctrl-0 = <&pinctrl_i2c1>;
312 status = "okay"; 311 status = "okay";
313 312
314 pmic: pfuze100@08 { 313 pmic: pfuze100@08 {
315 compatible = "fsl,pfuze100"; 314 compatible = "fsl,pfuze100";
316 reg = <0x08>; 315 reg = <0x08>;
317 316
318 regulators { 317 regulators {
319 sw1a_reg: sw1ab { 318 sw1a_reg: sw1ab {
320 regulator-min-microvolt = <300000>; 319 regulator-min-microvolt = <300000>;
321 regulator-max-microvolt = <1875000>; 320 regulator-max-microvolt = <1875000>;
322 regulator-always-on; 321 regulator-always-on;
323 }; 322 };
324 323
325 sw1c_reg: sw1c { 324 sw1c_reg: sw1c {
326 regulator-min-microvolt = <300000>; 325 regulator-min-microvolt = <300000>;
327 regulator-max-microvolt = <1875000>; 326 regulator-max-microvolt = <1875000>;
328 regulator-always-on; 327 regulator-always-on;
329 }; 328 };
330 329
331 sw2_reg: sw2 { 330 sw2_reg: sw2 {
332 regulator-min-microvolt = <800000>; 331 regulator-min-microvolt = <800000>;
333 regulator-max-microvolt = <3300000>; 332 regulator-max-microvolt = <3300000>;
334 regulator-always-on; 333 regulator-always-on;
335 }; 334 };
336 335
337 sw3a_reg: sw3ab { 336 sw3a_reg: sw3ab {
338 regulator-min-microvolt = <400000>; 337 regulator-min-microvolt = <400000>;
339 regulator-max-microvolt = <1975000>; 338 regulator-max-microvolt = <1975000>;
340 regulator-always-on; 339 regulator-always-on;
341 }; 340 };
342 341
343 sw4_reg: sw4 { 342 sw4_reg: sw4 {
344 regulator-min-microvolt = <800000>; 343 regulator-min-microvolt = <800000>;
345 regulator-max-microvolt = <3300000>; 344 regulator-max-microvolt = <3300000>;
346 regulator-always-on; 345 regulator-always-on;
347 }; 346 };
348 347
349 swbst_reg: swbst { 348 swbst_reg: swbst {
350 regulator-min-microvolt = <5000000>; 349 regulator-min-microvolt = <5000000>;
351 regulator-max-microvolt = <5150000>; 350 regulator-max-microvolt = <5150000>;
352 }; 351 };
353 352
354 snvs_reg: vsnvs { 353 snvs_reg: vsnvs {
355 regulator-min-microvolt = <1000000>; 354 regulator-min-microvolt = <1000000>;
356 regulator-max-microvolt = <3000000>; 355 regulator-max-microvolt = <3000000>;
357 regulator-always-on; 356 regulator-always-on;
358 }; 357 };
359 358
360 vref_reg: vrefddr { 359 vref_reg: vrefddr {
361 regulator-always-on; 360 regulator-always-on;
362 }; 361 };
363 362
364 vgen1_reg: vgen1 { 363 vgen1_reg: vgen1 {
365 regulator-min-microvolt = <800000>; 364 regulator-min-microvolt = <800000>;
366 regulator-max-microvolt = <1550000>; 365 regulator-max-microvolt = <1550000>;
367 }; 366 };
368 367
369 vgen2_reg: vgen2 { 368 vgen2_reg: vgen2 {
370 regulator-min-microvolt = <800000>; 369 regulator-min-microvolt = <800000>;
371 regulator-max-microvolt = <1550000>; 370 regulator-max-microvolt = <1550000>;
372 regulator-always-on; 371 regulator-always-on;
373 }; 372 };
374 373
375 vgen3_reg: vgen3 { 374 vgen3_reg: vgen3 {
376 regulator-min-microvolt = <1800000>; 375 regulator-min-microvolt = <1800000>;
377 regulator-max-microvolt = <3300000>; 376 regulator-max-microvolt = <3300000>;
378 regulator-always-on; 377 regulator-always-on;
379 }; 378 };
380 379
381 vgen4_reg: vgen4 { 380 vgen4_reg: vgen4 {
382 regulator-min-microvolt = <1800000>; 381 regulator-min-microvolt = <1800000>;
383 regulator-max-microvolt = <3300000>; 382 regulator-max-microvolt = <3300000>;
384 regulator-always-on; 383 regulator-always-on;
385 }; 384 };
386 385
387 vgen5_reg: vgen5 { 386 vgen5_reg: vgen5 {
388 regulator-min-microvolt = <1800000>; 387 regulator-min-microvolt = <1800000>;
389 regulator-max-microvolt = <3300000>; 388 regulator-max-microvolt = <3300000>;
390 regulator-always-on; 389 regulator-always-on;
391 }; 390 };
392 391
393 vgen6_reg: vgen6 { 392 vgen6_reg: vgen6 {
394 regulator-min-microvolt = <1800000>; 393 regulator-min-microvolt = <1800000>;
395 regulator-max-microvolt = <3300000>; 394 regulator-max-microvolt = <3300000>;
396 regulator-always-on;
397 }; 395 };
398 }; 396 };
399 }; 397 };
400 398
401 s35390a: s35390a@30 { 399 s35390a: s35390a@30 {
402 compatible = "s35390a"; 400 compatible = "s35390a";
403 reg = <0x30>; 401 reg = <0x30>;
404 }; 402 };
405 403
406 cape_eeprom0: cape_eeprom@57 { 404 cape_eeprom0: cape_eeprom@57 {
407 compatible = "at,24c256"; 405 compatible = "at,24c256";
408 reg = <0x57>; 406 reg = <0x57>;
409 }; 407 };
410 }; 408 };
411 409
412 &i2c2 { 410 &i2c2 {
413 clock-frequency = <100000>; 411 clock-frequency = <100000>;
414 pinctrl-names = "default"; 412 pinctrl-names = "default";
415 pinctrl-0 = <&pinctrl_i2c2>; 413 pinctrl-0 = <&pinctrl_i2c2>;
416 status = "okay"; 414 status = "okay";
417 415
418 baseboard_eeprom: baseboard_eeprom@50 { 416 baseboard_eeprom: baseboard_eeprom@50 {
419 compatible = "at,24c256"; 417 compatible = "at,24c256";
420 reg = <0x50>; 418 reg = <0x50>;
421 }; 419 };
422 420
423 dsi_lvds_bridge: sn65dsi84@2c { 421 dsi_lvds_bridge: sn65dsi84@2c {
424 status = "disabled"; 422 status = "disabled";
425 reg = <0x2c>; 423 reg = <0x2c>;
426 compatible = "ti,sn65dsi84"; 424 compatible = "ti,sn65dsi84";
427 enable-gpios = <&gpio4 2 GPIO_ACTIVE_HIGH>; 425 enable-gpios = <&gpio4 2 GPIO_ACTIVE_HIGH>;
428 interrupt-parent = <&gpio4>; 426 interrupt-parent = <&gpio4>;
429 interrupts = <4 IRQ_TYPE_EDGE_FALLING>; 427 interrupts = <4 IRQ_TYPE_EDGE_FALLING>;
430 428
431 /* AUO G070VW01 7-inch 800x480 LVDS Display */ 429 /* AUO G070VW01 7-inch 800x480 LVDS Display */
432 sn65dsi84,addresses = < 0x09 0x0A 0x0B 0x0D 0x10 0x11 0x12 0x13 430 sn65dsi84,addresses = < 0x09 0x0A 0x0B 0x0D 0x10 0x11 0x12 0x13
433 0x18 0x19 0x1A 0x1B 0x20 0x21 0x22 0x23 431 0x18 0x19 0x1A 0x1B 0x20 0x21 0x22 0x23
434 0x24 0x25 0x26 0x27 0x28 0x29 0x2A 0x2B 432 0x24 0x25 0x26 0x27 0x28 0x29 0x2A 0x2B
435 0x2C 0x2D 0x2E 0x2F 0x30 0x31 0x32 0x33 433 0x2C 0x2D 0x2E 0x2F 0x30 0x31 0x32 0x33
436 0x34 0x35 0x36 0x37 0x38 0x39 0x3A 0x3B 434 0x34 0x35 0x36 0x37 0x38 0x39 0x3A 0x3B
437 0x3C 0x3D 0x3E 0xE0 0x0D>; 435 0x3C 0x3D 0x3E 0xE0 0x0D>;
438 436
439 sn65dsi84,values = < 0x00 0x01 0x10 0x00 0x26 0x00 0x13 0x00 437 sn65dsi84,values = < 0x00 0x01 0x10 0x00 0x26 0x00 0x13 0x00
440 0x78 0x00 0x03 0x00 0x20 0x03 0x00 0x00 438 0x78 0x00 0x03 0x00 0x20 0x03 0x00 0x00
441 0x00 0x00 0x00 0x00 0x21 0x00 0x00 0x00 439 0x00 0x00 0x00 0x00 0x21 0x00 0x00 0x00
442 0x80 0x00 0x00 0x00 0x0e 0x00 0x00 0x00 440 0x80 0x00 0x00 0x00 0x0e 0x00 0x00 0x00
443 0x40 0x00 0x00 0x00 0x00 0x00 0x00 0x00 441 0x40 0x00 0x00 0x00 0x00 0x00 0x00 0x00
444 0x00 0x00 0x00 0x01 0x01>; 442 0x00 0x00 0x00 0x01 0x01>;
445 443
446 /* AUO G185XW01 18.5-inch 1366x768 LVDS Display */ 444 /* AUO G185XW01 18.5-inch 1366x768 LVDS Display */
447 /*sn65dsi84,addresses = < 0x09 0x0A 0x0B 0x0D 0x10 0x11 0x12 0x13 445 /*sn65dsi84,addresses = < 0x09 0x0A 0x0B 0x0D 0x10 0x11 0x12 0x13
448 0x18 0x19 0x1A 0x1B 0x20 0x21 0x22 0x23 446 0x18 0x19 0x1A 0x1B 0x20 0x21 0x22 0x23
449 0x24 0x25 0x26 0x27 0x28 0x29 0x2A 0x2B 447 0x24 0x25 0x26 0x27 0x28 0x29 0x2A 0x2B
450 0x2C 0x2D 0x2E 0x2F 0x30 0x31 0x32 0x33 448 0x2C 0x2D 0x2E 0x2F 0x30 0x31 0x32 0x33
451 0x34 0x35 0x36 0x37 0x38 0x39 0x3A 0x3B 449 0x34 0x35 0x36 0x37 0x38 0x39 0x3A 0x3B
452 0x3C 0x3D 0x3E 0xE0 0x0D>; 450 0x3C 0x3D 0x3E 0xE0 0x0D>;
453 451
454 sn65dsi84,values = < 0x00 0x05 0x10 0x00 0x26 0x00 0x2E 0x00 452 sn65dsi84,values = < 0x00 0x05 0x10 0x00 0x26 0x00 0x2E 0x00
455 0x78 0x00 0x03 0x00 0x56 0x05 0x00 0x00 453 0x78 0x00 0x03 0x00 0x56 0x05 0x00 0x00
456 0x00 0x00 0x00 0x00 0x21 0x00 0x00 0x00 454 0x00 0x00 0x00 0x00 0x21 0x00 0x00 0x00
457 0x78 0x00 0x00 0x00 0x12 0x00 0x00 0x00 455 0x78 0x00 0x00 0x00 0x12 0x00 0x00 0x00
458 0x3C 0x00 0x00 0x00 0x00 0x00 0x00 0x00 456 0x3C 0x00 0x00 0x00 0x00 0x00 0x00 0x00
459 0x00 0x00 0x00 0x01 0x01>;*/ 457 0x00 0x00 0x00 0x01 0x01>;*/
460 458
461 /* AUO G240HW01 V0 24-inch 1920x1080 LVDS Display */ 459 /* AUO G240HW01 V0 24-inch 1920x1080 LVDS Display */
462 /*sn65dsi84,addresses = < 0x09 0x0A 0x0B 0x0D 0x10 0x11 0x12 0x13 460 /*sn65dsi84,addresses = < 0x09 0x0A 0x0B 0x0D 0x10 0x11 0x12 0x13
463 0x18 0x19 0x1A 0x1B 0x20 0x21 0x22 0x23 461 0x18 0x19 0x1A 0x1B 0x20 0x21 0x22 0x23
464 0x24 0x25 0x26 0x27 0x28 0x29 0x2A 0x2B 462 0x24 0x25 0x26 0x27 0x28 0x29 0x2A 0x2B
465 0x2C 0x2D 0x2E 0x2F 0x30 0x31 0x32 0x33 463 0x2C 0x2D 0x2E 0x2F 0x30 0x31 0x32 0x33
466 0x34 0x35 0x36 0x37 0x38 0x39 0x3A 0x3B 464 0x34 0x35 0x36 0x37 0x38 0x39 0x3A 0x3B
467 0x3C 0x3D 0x3E 0xE0 0x0D>; 465 0x3C 0x3D 0x3E 0xE0 0x0D>;
468 466
469 sn65dsi84,values = < 0x00 0x05 0x20 0x00 0x26 0x00 0x4E 0x00 467 sn65dsi84,values = < 0x00 0x05 0x20 0x00 0x26 0x00 0x4E 0x00
470 0x6C 0x00 0x03 0x00 0x80 0x07 0x00 0x00 468 0x6C 0x00 0x03 0x00 0x80 0x07 0x00 0x00
471 0x00 0x00 0x00 0x00 0xC3 0x00 0x00 0x00 469 0x00 0x00 0x00 0x00 0xC3 0x00 0x00 0x00
472 0x32 0x00 0x00 0x00 0x14 0x00 0x00 0x00 470 0x32 0x00 0x00 0x00 0x14 0x00 0x00 0x00
473 0x19 0x00 0x00 0x00 0x00 0x00 0x00 0x00 471 0x19 0x00 0x00 0x00 0x00 0x00 0x00 0x00
474 0x00 0x00 0x00 0x01 0x01>;*/ 472 0x00 0x00 0x00 0x01 0x01>;*/
475 }; 473 };
476 }; 474 };
477 475
478 &i2c3 { 476 &i2c3 {
479 clock-frequency = <100000>; 477 clock-frequency = <100000>;
480 pinctrl-names = "default"; 478 pinctrl-names = "default";
481 pinctrl-0 = <&pinctrl_i2c3>; 479 pinctrl-0 = <&pinctrl_i2c3>;
482 status = "okay"; 480 status = "okay";
483 }; 481 };
484 482
485 &i2c4 { 483 &i2c4 {
486 clock-frequency = <100000>; 484 clock-frequency = <100000>;
487 pinctrl-names = "default"; 485 pinctrl-names = "default";
488 pinctrl-0 = <&pinctrl_i2c4>; 486 pinctrl-0 = <&pinctrl_i2c4>;
489 status = "okay"; 487 status = "okay";
490 }; 488 };
491 489
492 &pcie0{ 490 &pcie0{
493 pinctrl-names = "default"; 491 pinctrl-names = "default";
494 pinctrl-0 = <&pinctrl_pcie0>; 492 pinctrl-0 = <&pinctrl_pcie0>;
495 reset-gpio = <&gpio3 3 GPIO_ACTIVE_LOW>; 493 reset-gpio = <&gpio3 3 GPIO_ACTIVE_LOW>;
496 status = "okay"; 494 status = "okay";
497 }; 495 };
498 496
499 &pcie1{ 497 &pcie1{
500 pinctrl-names = "default"; 498 pinctrl-names = "default";
501 pinctrl-0 = <&pinctrl_pcie1>; 499 pinctrl-0 = <&pinctrl_pcie1>;
502 reset-gpio = <&gpio3 4 GPIO_ACTIVE_LOW>; 500 reset-gpio = <&gpio3 4 GPIO_ACTIVE_LOW>;
503 status = "okay"; 501 status = "okay";
504 }; 502 };
505 503
506 &pwm1 { 504 &pwm1 {
507 pinctrl-names = "default"; 505 pinctrl-names = "default";
508 pinctrl-0 = <&pinctrl_pwm1>; 506 pinctrl-0 = <&pinctrl_pwm1>;
509 status = "okay"; 507 status = "okay";
510 }; 508 };
511 509
512 &uart1 { /* console */ 510 &uart1 { /* console */
513 pinctrl-names = "default"; 511 pinctrl-names = "default";
514 pinctrl-0 = <&pinctrl_uart1>; 512 pinctrl-0 = <&pinctrl_uart1>;
515 assigned-clocks = <&clk IMX8MQ_CLK_UART1_SRC>; 513 assigned-clocks = <&clk IMX8MQ_CLK_UART1_SRC>;
516 assigned-clock-parents = <&clk IMX8MQ_CLK_25M>; 514 assigned-clock-parents = <&clk IMX8MQ_CLK_25M>;
517 status = "okay"; 515 status = "okay";
518 }; 516 };
519 517
520 &lcdif { 518 &lcdif {
521 status = "okay"; 519 status = "okay";
522 disp-dev = "mipi_dsi_northwest"; 520 disp-dev = "mipi_dsi_northwest";
523 display = <&display0>; 521 display = <&display0>;
524 522
525 display0: display@0 { 523 display0: display@0 {
526 bits-per-pixel = <24>; 524 bits-per-pixel = <24>;
527 bus-width = <24>; 525 bus-width = <24>;
528 526
529 display-timings { 527 display-timings {
530 native-mode = <&timing0>; 528 native-mode = <&timing0>;
531 timing0: timing0 { 529 timing0: timing0 {
532 clock-frequency = <9200000>; 530 clock-frequency = <9200000>;
533 hactive = <480>; 531 hactive = <480>;
534 vactive = <272>; 532 vactive = <272>;
535 hfront-porch = <8>; 533 hfront-porch = <8>;
536 hback-porch = <4>; 534 hback-porch = <4>;
537 hsync-len = <41>; 535 hsync-len = <41>;
538 vback-porch = <2>; 536 vback-porch = <2>;
539 vfront-porch = <4>; 537 vfront-porch = <4>;
540 vsync-len = <10>; 538 vsync-len = <10>;
541 539
542 hsync-active = <0>; 540 hsync-active = <0>;
543 vsync-active = <0>; 541 vsync-active = <0>;
544 de-active = <1>; 542 de-active = <1>;
545 pixelclk-active = <0>; 543 pixelclk-active = <0>;
546 }; 544 };
547 }; 545 };
548 }; 546 };
549 port@0 { 547 port@0 {
550 lcdif_mipi_dsi: mipi-dsi-endpoint { 548 lcdif_mipi_dsi: mipi-dsi-endpoint {
551 remote-endpoint = <&mipi_dsi_in>; 549 remote-endpoint = <&mipi_dsi_in>;
552 }; 550 };
553 }; 551 };
554 }; 552 };
555 553
556 &qspi { 554 &qspi {
557 pinctrl-names = "default"; 555 pinctrl-names = "default";
558 pinctrl-0 = <&pinctrl_qspi>; 556 pinctrl-0 = <&pinctrl_qspi>;
559 status = "okay"; 557 status = "okay";
560 }; 558 };
561 559
562 &mipi_dsi { 560 &mipi_dsi {
563 reset = <&src>; 561 reset = <&src>;
564 mux-sel = <&gpr>; /* lcdif or dcss */ 562 mux-sel = <&gpr>; /* lcdif or dcss */
565 status = "okay"; 563 status = "okay";
566 564
567 port@1 { 565 port@1 {
568 mipi_dsi_in: endpoint { 566 mipi_dsi_in: endpoint {
569 remote-endpoint = <&lcdif_mipi_dsi>; 567 remote-endpoint = <&lcdif_mipi_dsi>;
570 }; 568 };
571 }; 569 };
572 }; 570 };
573 571
574 &uart2 { 572 &uart2 {
575 pinctrl-names = "default"; 573 pinctrl-names = "default";
576 pinctrl-0 = <&pinctrl_uart2>; 574 pinctrl-0 = <&pinctrl_uart2>;
577 assigned-clocks = <&clk IMX8MQ_CLK_UART2_SRC>; 575 assigned-clocks = <&clk IMX8MQ_CLK_UART2_SRC>;
578 assigned-clock-parents = <&clk IMX8MQ_SYS1_PLL_80M>; 576 assigned-clock-parents = <&clk IMX8MQ_SYS1_PLL_80M>;
579 fsl,uart-has-rtscts; 577 fsl,uart-has-rtscts;
580 status = "okay"; 578 status = "okay";
581 }; 579 };
582 580
583 &uart3 { 581 &uart3 {
584 pinctrl-names = "default"; 582 pinctrl-names = "default";
585 pinctrl-0 = <&pinctrl_uart3>; 583 pinctrl-0 = <&pinctrl_uart3>;
586 assigned-clocks = <&clk IMX8MQ_CLK_UART3_SRC>; 584 assigned-clocks = <&clk IMX8MQ_CLK_UART3_SRC>;
587 assigned-clock-parents = <&clk IMX8MQ_SYS1_PLL_80M>; 585 assigned-clock-parents = <&clk IMX8MQ_SYS1_PLL_80M>;
588 status = "okay"; 586 status = "okay";
589 }; 587 };
590 588
591 &uart4 { 589 &uart4 {
592 pinctrl-names = "default"; 590 pinctrl-names = "default";
593 pinctrl-0 = <&pinctrl_uart4>; 591 pinctrl-0 = <&pinctrl_uart4>;
594 assigned-clocks = <&clk IMX8MQ_CLK_UART4_SRC>; 592 assigned-clocks = <&clk IMX8MQ_CLK_UART4_SRC>;
595 assigned-clock-parents = <&clk IMX8MQ_SYS1_PLL_80M>; 593 assigned-clock-parents = <&clk IMX8MQ_SYS1_PLL_80M>;
596 fsl,uart-has-rtscts; 594 fsl,uart-has-rtscts;
597 status = "okay"; 595 status = "okay";
598 }; 596 };
599 597
600 &usdhc1 { 598 &usdhc1 {
601 pinctrl-names = "default", "state_100mhz", "state_200mhz"; 599 pinctrl-names = "default", "state_100mhz", "state_200mhz";
602 pinctrl-0 = <&pinctrl_usdhc1>; 600 pinctrl-0 = <&pinctrl_usdhc1>;
603 pinctrl-1 = <&pinctrl_usdhc1_100mhz>; 601 pinctrl-1 = <&pinctrl_usdhc1_100mhz>;
604 pinctrl-2 = <&pinctrl_usdhc1_200mhz>; 602 pinctrl-2 = <&pinctrl_usdhc1_200mhz>;
605 bus-width = <8>; 603 bus-width = <8>;
606 non-removable; 604 non-removable;
607 status = "okay"; 605 status = "okay";
608 }; 606 };
609 607
610 &usdhc2 { 608 &usdhc2 {
611 pinctrl-names = "default", "state_100mhz", "state_200mhz"; 609 pinctrl-names = "default", "state_100mhz", "state_200mhz";
612 pinctrl-0 = <&pinctrl_usdhc2>, <&pinctrl_usdhc2_gpio>; 610 pinctrl-0 = <&pinctrl_usdhc2>, <&pinctrl_usdhc2_gpio>;
613 pinctrl-1 = <&pinctrl_usdhc2_100mhz>, <&pinctrl_usdhc2_gpio>; 611 pinctrl-1 = <&pinctrl_usdhc2_100mhz>, <&pinctrl_usdhc2_gpio>;
614 pinctrl-2 = <&pinctrl_usdhc2_200mhz>, <&pinctrl_usdhc2_gpio>; 612 pinctrl-2 = <&pinctrl_usdhc2_200mhz>, <&pinctrl_usdhc2_gpio>;
615 bus-width = <4>; 613 bus-width = <4>;
616 cd-gpios = <&gpio2 12 GPIO_ACTIVE_LOW>; 614 cd-gpios = <&gpio2 12 GPIO_ACTIVE_LOW>;
617 vmmc-supply = <&reg_usdhc2_vmmc>; 615 vmmc-supply = <&reg_usdhc2_vmmc>;
618 status = "okay"; 616 status = "okay";
619 }; 617 };
620 618
621 &usb3_phy0 { 619 &usb3_phy0 {
622 status = "okay"; 620 status = "okay";
623 }; 621 };
624 622
625 &usb3_0 { 623 &usb3_0 {
626 status = "okay"; 624 status = "okay";
627 }; 625 };
628 626
629 &usb_dwc3_0 { 627 &usb_dwc3_0 {
630 status = "okay"; 628 status = "okay";
631 dr_mode = "peripheral"; 629 dr_mode = "peripheral";
632 }; 630 };
633 631
634 &usb3_phy1 { 632 &usb3_phy1 {
635 status = "okay"; 633 status = "okay";
636 }; 634 };
637 635
638 &usb3_1 { 636 &usb3_1 {
639 status = "disabled"; 637 status = "disabled";
640 }; 638 };
641 639
642 &usb_dwc3_1 { 640 &usb_dwc3_1 {
643 status = "okay"; 641 status = "okay";
644 dr_mode = "host"; 642 dr_mode = "host";
645 }; 643 };
646 644
647 &sai2 { 645 &sai2 {
648 pinctrl-names = "default"; 646 pinctrl-names = "default";
649 pinctrl-0 = <&pinctrl_sai2>; 647 pinctrl-0 = <&pinctrl_sai2>;
650 assigned-clocks = <&clk IMX8MQ_CLK_SAI2_SRC>, 648 assigned-clocks = <&clk IMX8MQ_CLK_SAI2_SRC>,
651 <&clk IMX8MQ_AUDIO_PLL1>, 649 <&clk IMX8MQ_AUDIO_PLL1>,
652 <&clk IMX8MQ_CLK_SAI2_PRE_DIV>, 650 <&clk IMX8MQ_CLK_SAI2_PRE_DIV>,
653 <&clk IMX8MQ_CLK_SAI2_DIV>; 651 <&clk IMX8MQ_CLK_SAI2_DIV>;
654 assigned-clock-parents = <&clk IMX8MQ_AUDIO_PLL1_OUT>; 652 assigned-clock-parents = <&clk IMX8MQ_AUDIO_PLL1_OUT>;
655 assigned-clock-rates = <0>, <786432000>, <98306000>, <24576000>; 653 assigned-clock-rates = <0>, <786432000>, <98306000>, <24576000>;
656 status = "okay"; 654 status = "okay";
657 }; 655 };
658 656
659 &gpu { 657 &gpu {
660 status = "okay"; 658 status = "okay";
661 }; 659 };
662 660
663 &vpu { 661 &vpu {
664 status = "okay"; 662 status = "okay";
665 }; 663 };
666 664
667 &wdog1 { 665 &wdog1 {
668 pinctrl-names = "default"; 666 pinctrl-names = "default";
669 pinctrl-0 = <&pinctrl_wdog>; 667 pinctrl-0 = <&pinctrl_wdog>;
670 fsl,ext-reset-output; 668 fsl,ext-reset-output;
671 status = "okay"; 669 status = "okay";
672 }; 670 };
673 671
board/embedian/smarcimx8mq/smarcimx8mq.c
1 /* 1 /*
2 * Copyright 2016 Freescale Semiconductor, Inc. 2 * Copyright 2016 Freescale Semiconductor, Inc.
3 * Copyright 2017-2018 NXP 3 * Copyright 2017-2018 NXP
4 * 4 *
5 * SPDX-License-Identifier: GPL-2.0+ 5 * SPDX-License-Identifier: GPL-2.0+
6 */ 6 */
7 7
8 #include <common.h> 8 #include <common.h>
9 #include <malloc.h> 9 #include <malloc.h>
10 #include <errno.h> 10 #include <errno.h>
11 #include <asm/io.h> 11 #include <asm/io.h>
12 #include <miiphy.h> 12 #include <miiphy.h>
13 #include <netdev.h> 13 #include <netdev.h>
14 #include <asm/mach-imx/iomux-v3.h> 14 #include <asm/mach-imx/iomux-v3.h>
15 #include <asm-generic/gpio.h> 15 #include <asm-generic/gpio.h>
16 #include <fsl_esdhc.h> 16 #include <fsl_esdhc.h>
17 #include <mmc.h> 17 #include <mmc.h>
18 #include <asm/arch/imx8mq_pins.h> 18 #include <asm/arch/imx8mq_pins.h>
19 #include <asm/arch/sys_proto.h> 19 #include <asm/arch/sys_proto.h>
20 #include <asm/mach-imx/gpio.h> 20 #include <asm/mach-imx/gpio.h>
21 #include <asm/mach-imx/mxc_i2c.h> 21 #include <asm/mach-imx/mxc_i2c.h>
22 #include <asm/arch/clock.h> 22 #include <asm/arch/clock.h>
23 #include <asm/mach-imx/video.h> 23 #include <asm/mach-imx/video.h>
24 #include <asm/arch/video_common.h> 24 #include <asm/arch/video_common.h>
25 #include <spl.h> 25 #include <spl.h>
26 #include <power/pmic.h> 26 #include <power/pmic.h>
27 #include <power/pfuze100_pmic.h> 27 #include <power/pfuze100_pmic.h>
28 #include <dm.h> 28 #include <dm.h>
29 #include "../../freescale/common/tcpc.h" 29 #include "../../freescale/common/tcpc.h"
30 #include "../../freescale/common/pfuze.h" 30 #include "../../freescale/common/pfuze.h"
31 #include "../../freescale/common/mmc.c" 31 #include "../../freescale/common/mmc.c"
32 #include <usb.h> 32 #include <usb.h>
33 #include <dwc3-uboot.h> 33 #include <dwc3-uboot.h>
34 34
35 DECLARE_GLOBAL_DATA_PTR; 35 DECLARE_GLOBAL_DATA_PTR;
36 36
37 #define QSPI_PAD_CTRL (PAD_CTL_DSE2 | PAD_CTL_HYS) 37 #define QSPI_PAD_CTRL (PAD_CTL_DSE2 | PAD_CTL_HYS)
38 38
39 #define UART_PAD_CTRL (PAD_CTL_DSE6 | PAD_CTL_FSEL1) 39 #define UART_PAD_CTRL (PAD_CTL_DSE6 | PAD_CTL_FSEL1)
40 40
41 #define WDOG_PAD_CTRL (PAD_CTL_DSE6 | PAD_CTL_HYS | PAD_CTL_PUE) 41 #define WDOG_PAD_CTRL (PAD_CTL_DSE6 | PAD_CTL_HYS | PAD_CTL_PUE)
42 42
43 #define WEAK_PULLUP (PAD_CTL_DSE6 | PAD_CTL_HYS | PAD_CTL_PUE) 43 #define WEAK_PULLUP (PAD_CTL_DSE6 | PAD_CTL_HYS | PAD_CTL_PUE)
44 44
45 #define I2C_PAD_CTRL (PAD_CTL_DSE6 | PAD_CTL_HYS | PAD_CTL_PUE) 45 #define I2C_PAD_CTRL (PAD_CTL_DSE6 | PAD_CTL_HYS | PAD_CTL_PUE)
46 46
47 static iomux_v3_cfg_t const wdog_pads[] = { 47 static iomux_v3_cfg_t const wdog_pads[] = {
48 IMX8MQ_PAD_GPIO1_IO02__WDOG1_WDOG_B | MUX_PAD_CTRL(WDOG_PAD_CTRL), 48 IMX8MQ_PAD_GPIO1_IO02__WDOG1_WDOG_B | MUX_PAD_CTRL(WDOG_PAD_CTRL),
49 }; 49 };
50 50
51 #ifdef CONFIG_FSL_QSPI 51 #ifdef CONFIG_FSL_QSPI
52 static iomux_v3_cfg_t const qspi_pads[] = { 52 static iomux_v3_cfg_t const qspi_pads[] = {
53 IMX8MQ_PAD_NAND_ALE__QSPI_A_SCLK | MUX_PAD_CTRL(QSPI_PAD_CTRL), 53 IMX8MQ_PAD_NAND_ALE__QSPI_A_SCLK | MUX_PAD_CTRL(QSPI_PAD_CTRL),
54 IMX8MQ_PAD_NAND_CE0_B__QSPI_A_SS0_B | MUX_PAD_CTRL(QSPI_PAD_CTRL), 54 IMX8MQ_PAD_NAND_CE0_B__QSPI_A_SS0_B | MUX_PAD_CTRL(QSPI_PAD_CTRL),
55 55
56 IMX8MQ_PAD_NAND_DATA00__QSPI_A_DATA0 | MUX_PAD_CTRL(QSPI_PAD_CTRL), 56 IMX8MQ_PAD_NAND_DATA00__QSPI_A_DATA0 | MUX_PAD_CTRL(QSPI_PAD_CTRL),
57 IMX8MQ_PAD_NAND_DATA01__QSPI_A_DATA1 | MUX_PAD_CTRL(QSPI_PAD_CTRL), 57 IMX8MQ_PAD_NAND_DATA01__QSPI_A_DATA1 | MUX_PAD_CTRL(QSPI_PAD_CTRL),
58 IMX8MQ_PAD_NAND_DATA02__QSPI_A_DATA2 | MUX_PAD_CTRL(QSPI_PAD_CTRL), 58 IMX8MQ_PAD_NAND_DATA02__QSPI_A_DATA2 | MUX_PAD_CTRL(QSPI_PAD_CTRL),
59 IMX8MQ_PAD_NAND_DATA03__QSPI_A_DATA3 | MUX_PAD_CTRL(QSPI_PAD_CTRL), 59 IMX8MQ_PAD_NAND_DATA03__QSPI_A_DATA3 | MUX_PAD_CTRL(QSPI_PAD_CTRL),
60 }; 60 };
61 61
62 int board_qspi_init(void) 62 int board_qspi_init(void)
63 { 63 {
64 imx_iomux_v3_setup_multiple_pads(qspi_pads, ARRAY_SIZE(qspi_pads)); 64 imx_iomux_v3_setup_multiple_pads(qspi_pads, ARRAY_SIZE(qspi_pads));
65 65
66 set_clk_qspi(); 66 set_clk_qspi();
67 67
68 return 0; 68 return 0;
69 } 69 }
70 #endif 70 #endif
71 71
72 #ifdef CONFIG_CONSOLE_SER3 72 #ifdef CONFIG_CONSOLE_SER3
73 static iomux_v3_cfg_t const uart1_pads[] = { 73 static iomux_v3_cfg_t const uart1_pads[] = {
74 IMX8MQ_PAD_UART1_RXD__UART1_RX | MUX_PAD_CTRL(UART_PAD_CTRL), 74 IMX8MQ_PAD_UART1_RXD__UART1_RX | MUX_PAD_CTRL(UART_PAD_CTRL),
75 IMX8MQ_PAD_UART1_TXD__UART1_TX | MUX_PAD_CTRL(UART_PAD_CTRL), 75 IMX8MQ_PAD_UART1_TXD__UART1_TX | MUX_PAD_CTRL(UART_PAD_CTRL),
76 }; 76 };
77 #endif 77 #endif
78 78
79 #ifdef CONFIG_CONSOLE_SER2 79 #ifdef CONFIG_CONSOLE_SER2
80 static iomux_v3_cfg_t const uart2_pads[] = { 80 static iomux_v3_cfg_t const uart2_pads[] = {
81 IMX8MQ_PAD_UART2_RXD__UART2_RX | MUX_PAD_CTRL(UART_PAD_CTRL), 81 IMX8MQ_PAD_UART2_RXD__UART2_RX | MUX_PAD_CTRL(UART_PAD_CTRL),
82 IMX8MQ_PAD_UART2_TXD__UART2_TX | MUX_PAD_CTRL(UART_PAD_CTRL), 82 IMX8MQ_PAD_UART2_TXD__UART2_TX | MUX_PAD_CTRL(UART_PAD_CTRL),
83 IMX8MQ_PAD_UART4_TXD__UART2_RTS_B | MUX_PAD_CTRL(UART_PAD_CTRL),
84 IMX8MQ_PAD_UART4_RXD__UART2_CTS_B | MUX_PAD_CTRL(UART_PAD_CTRL),
83 }; 85 };
84 #endif 86 #endif
85 87
86 #ifdef CONFIG_CONSOLE_SER1 88 #ifdef CONFIG_CONSOLE_SER1
87 static iomux_v3_cfg_t const uart3_pads[] = { 89 static iomux_v3_cfg_t const uart3_pads[] = {
88 IMX8MQ_PAD_UART3_RXD__UART3_RX | MUX_PAD_CTRL(UART_PAD_CTRL), 90 IMX8MQ_PAD_UART3_RXD__UART3_RX | MUX_PAD_CTRL(UART_PAD_CTRL),
89 IMX8MQ_PAD_UART3_TXD__UART3_TX | MUX_PAD_CTRL(UART_PAD_CTRL), 91 IMX8MQ_PAD_UART3_TXD__UART3_TX | MUX_PAD_CTRL(UART_PAD_CTRL),
90 }; 92 };
91 #endif 93 #endif
92 94
93 #ifdef CONFIG_CONSOLE_SER0 95 #ifdef CONFIG_CONSOLE_SER0
94 static iomux_v3_cfg_t const uart4_pads[] = { 96 static iomux_v3_cfg_t const uart4_pads[] = {
95 IMX8MQ_PAD_UART4_RXD__UART4_RX | MUX_PAD_CTRL(UART_PAD_CTRL), 97 IMX8MQ_PAD_ECSPI2_SCLK__UART4_RX | MUX_PAD_CTRL(UART_PAD_CTRL),
96 IMX8MQ_PAD_ECSPI2_SS0__UART4_RTS_B | MUX_PAD_CTRL(UART_PAD_CTRL), 98 IMX8MQ_PAD_ECSPI2_SS0__UART4_RTS_B | MUX_PAD_CTRL(UART_PAD_CTRL),
97 IMX8MQ_PAD_ECSPI2_MISO__UART4_CTS_B | MUX_PAD_CTRL(UART_PAD_CTRL), 99 IMX8MQ_PAD_ECSPI2_MISO__UART4_CTS_B | MUX_PAD_CTRL(UART_PAD_CTRL),
98 IMX8MQ_PAD_UART4_TXD__UART4_TX | MUX_PAD_CTRL(UART_PAD_CTRL), 100 IMX8MQ_PAD_ECSPI2_MOSI__UART4_TX | MUX_PAD_CTRL(UART_PAD_CTRL),
99 }; 101 };
100 #endif 102 #endif
101 103
102 /* SPI0*/ 104 /* SPI0*/
103 static iomux_v3_cfg_t const ecspi1_pads[] = { 105 static iomux_v3_cfg_t const ecspi1_pads[] = {
104 IMX8MQ_PAD_ECSPI1_MISO__ECSPI1_MISO | MUX_PAD_CTRL(QSPI_PAD_CTRL), 106 IMX8MQ_PAD_ECSPI1_MISO__ECSPI1_MISO | MUX_PAD_CTRL(QSPI_PAD_CTRL),
105 IMX8MQ_PAD_ECSPI1_MOSI__ECSPI1_MOSI | MUX_PAD_CTRL(QSPI_PAD_CTRL), 107 IMX8MQ_PAD_ECSPI1_MOSI__ECSPI1_MOSI | MUX_PAD_CTRL(QSPI_PAD_CTRL),
106 IMX8MQ_PAD_ECSPI1_SCLK__ECSPI1_SCLK | MUX_PAD_CTRL(QSPI_PAD_CTRL), 108 IMX8MQ_PAD_ECSPI1_SCLK__ECSPI1_SCLK | MUX_PAD_CTRL(QSPI_PAD_CTRL),
107 109
108 IMX8MQ_PAD_ECSPI1_SS0__GPIO5_IO9 | MUX_PAD_CTRL(NO_PAD_CTRL), /*SS0#*/ 110 IMX8MQ_PAD_ECSPI1_SS0__GPIO5_IO9 | MUX_PAD_CTRL(NO_PAD_CTRL), /*SS0#*/
109 IMX8MQ_PAD_GPIO1_IO00__GPIO1_IO0 | MUX_PAD_CTRL(NO_PAD_CTRL), /*SS1#*/ 111 IMX8MQ_PAD_GPIO1_IO00__GPIO1_IO0 | MUX_PAD_CTRL(NO_PAD_CTRL), /*SS1#*/
110 IMX8MQ_PAD_NAND_RE_B__GPIO3_IO15 | MUX_PAD_CTRL(NO_PAD_CTRL), /*SS2#*/ 112 IMX8MQ_PAD_NAND_RE_B__GPIO3_IO15 | MUX_PAD_CTRL(NO_PAD_CTRL), /*SS2#*/
111 IMX8MQ_PAD_NAND_WE_B__GPIO3_IO17 | MUX_PAD_CTRL(NO_PAD_CTRL), /*SS3#*/ 113 IMX8MQ_PAD_NAND_WE_B__GPIO3_IO17 | MUX_PAD_CTRL(NO_PAD_CTRL), /*SS3#*/
112 }; 114 };
113 115
114 /* MISC PINs */ 116 /* MISC PINs */
115 static iomux_v3_cfg_t const misc_pads[] = { 117 static iomux_v3_cfg_t const misc_pads[] = {
116 IMX8MQ_PAD_NAND_CLE__GPIO3_IO5 | MUX_PAD_CTRL(WEAK_PULLUP), /*S146, PCIE_WAKE*/ 118 IMX8MQ_PAD_NAND_CLE__GPIO3_IO5 | MUX_PAD_CTRL(WEAK_PULLUP), /*S146, PCIE_WAKE*/
117 IMX8MQ_PAD_GPIO1_IO09__GPIO1_IO9 | MUX_PAD_CTRL(WEAK_PULLUP), /*S148, LID#*/ 119 IMX8MQ_PAD_GPIO1_IO09__GPIO1_IO9 | MUX_PAD_CTRL(WEAK_PULLUP), /*S148, LID#*/
118 IMX8MQ_PAD_GPIO1_IO12__GPIO1_IO12 | MUX_PAD_CTRL(WEAK_PULLUP), /*S149, SLEEP#*/ 120 IMX8MQ_PAD_GPIO1_IO12__GPIO1_IO12 | MUX_PAD_CTRL(WEAK_PULLUP), /*S149, SLEEP#*/
119 IMX8MQ_PAD_GPIO1_IO01__GPIO1_IO1 | MUX_PAD_CTRL(WEAK_PULLUP), /*S151, CHARGING#*/ 121 IMX8MQ_PAD_NAND_DATA05__GPIO3_IO11 | MUX_PAD_CTRL(WEAK_PULLUP), /*S151, CHARGING#*/
120 IMX8MQ_PAD_SAI2_RXC__GPIO4_IO22 | MUX_PAD_CTRL(WEAK_PULLUP), /*S152, CHARGER_PRSNT#*/ 122 IMX8MQ_PAD_SAI2_RXC__GPIO4_IO22 | MUX_PAD_CTRL(WEAK_PULLUP), /*S152, CHARGER_PRSNT#*/
121 IMX8MQ_PAD_SAI3_MCLK__GPIO5_IO2 | MUX_PAD_CTRL(WEAK_PULLUP), /*S153, CARRIER_STBY#*/ 123 IMX8MQ_PAD_SAI3_MCLK__GPIO5_IO2 | MUX_PAD_CTRL(WEAK_PULLUP), /*S153, CARRIER_STBY#*/
122 IMX8MQ_PAD_SAI2_RXFS__GPIO4_IO21 | MUX_PAD_CTRL(WEAK_PULLUP), /*S156, BATLOW#*/ 124 IMX8MQ_PAD_SAI2_RXFS__GPIO4_IO21 | MUX_PAD_CTRL(WEAK_PULLUP), /*S156, BATLOW#*/
123 IMX8MQ_PAD_NAND_WP_B__GPIO3_IO18 | MUX_PAD_CTRL(WEAK_PULLUP), /*CAN0_INT#*/ 125 IMX8MQ_PAD_NAND_WP_B__GPIO3_IO18 | MUX_PAD_CTRL(WEAK_PULLUP), /*CAN0_INT#*/
124 IMX8MQ_PAD_NAND_READY_B__GPIO3_IO16 | MUX_PAD_CTRL(WEAK_PULLUP), /*CAN1_INT#*/ 126 IMX8MQ_PAD_NAND_READY_B__GPIO3_IO16 | MUX_PAD_CTRL(WEAK_PULLUP), /*CAN1_INT#*/
125 }; 127 };
126 128
127 static void setup_iomux_misc(void) 129 static void setup_iomux_misc(void)
128 { 130 {
129 imx_iomux_v3_setup_multiple_pads(misc_pads, ARRAY_SIZE(misc_pads)); 131 imx_iomux_v3_setup_multiple_pads(misc_pads, ARRAY_SIZE(misc_pads));
130 132
131 /* Set CARRIER_LID# as Input*/ 133 /* Set CARRIER_LID# as Input*/
132 gpio_request(IMX_GPIO_NR(1, 9), "LID#"); 134 gpio_request(IMX_GPIO_NR(1, 9), "LID#");
133 gpio_direction_input(IMX_GPIO_NR(1, 9)); 135 gpio_direction_input(IMX_GPIO_NR(1, 9));
134 /* Set CARRIER_SLEEP# as Input*/ 136 /* Set CARRIER_SLEEP# as Input*/
135 gpio_request(IMX_GPIO_NR(1, 12), "SLEEP#"); 137 gpio_request(IMX_GPIO_NR(1, 12), "SLEEP#");
136 gpio_direction_input(IMX_GPIO_NR(1, 12)); 138 gpio_direction_input(IMX_GPIO_NR(1, 12));
137 /* Set CARRIER_CHARGING# as Input*/ 139 /* Set CARRIER_CHARGING# as Input*/
138 gpio_request(IMX_GPIO_NR(1, 01), "CHARGING#"); 140 gpio_request(IMX_GPIO_NR(1, 01), "CHARGING#");
139 gpio_direction_input(IMX_GPIO_NR(1, 01)); 141 gpio_direction_input(IMX_GPIO_NR(1, 01));
140 /* Set CARRIER_CHARGER_PRSNT# as Input*/ 142 /* Set CARRIER_CHARGER_PRSNT# as Input*/
141 gpio_request(IMX_GPIO_NR(4, 22), "CHARGER_PRSNT#"); 143 gpio_request(IMX_GPIO_NR(4, 22), "CHARGER_PRSNT#");
142 gpio_direction_input(IMX_GPIO_NR(4, 22)); 144 gpio_direction_input(IMX_GPIO_NR(4, 22));
143 /* Set CARRIER_STBY# as Output High*/ 145 /* Set CARRIER_STBY# as Output High*/
144 gpio_request(IMX_GPIO_NR(5, 02), "CARRIER_STBY#"); 146 gpio_request(IMX_GPIO_NR(5, 02), "CARRIER_STBY#");
145 gpio_direction_output(IMX_GPIO_NR(5, 02) , 1); 147 gpio_direction_output(IMX_GPIO_NR(5, 02) , 1);
146 /* Set CARRIER_BATLOW# as Input*/ 148 /* Set CARRIER_BATLOW# as Input*/
147 gpio_request(IMX_GPIO_NR(4, 21), "BATLOW#"); 149 gpio_request(IMX_GPIO_NR(4, 21), "BATLOW#");
148 gpio_direction_input(IMX_GPIO_NR(4, 21)); 150 gpio_direction_input(IMX_GPIO_NR(4, 21));
149 /* Set PCIE_WAKE# as Input*/ 151 /* Set PCIE_WAKE# as Input*/
150 gpio_request(IMX_GPIO_NR(3, 5), "PCIE_WAKE#"); 152 gpio_request(IMX_GPIO_NR(3, 5), "PCIE_WAKE#");
151 gpio_direction_input(IMX_GPIO_NR(3, 5)); 153 gpio_direction_input(IMX_GPIO_NR(3, 5));
152 /* Set CAN0_INT# as Input*/ 154 /* Set CAN0_INT# as Input*/
153 gpio_request(IMX_GPIO_NR(3, 18), "CAN0_INT#"); 155 gpio_request(IMX_GPIO_NR(3, 18), "CAN0_INT#");
154 gpio_direction_input(IMX_GPIO_NR(3, 18)); 156 gpio_direction_input(IMX_GPIO_NR(3, 18));
155 /* Set CAN1_INT# as Input*/ 157 /* Set CAN1_INT# as Input*/
156 gpio_request(IMX_GPIO_NR(3, 16), "CAN1_INT#"); 158 gpio_request(IMX_GPIO_NR(3, 16), "CAN1_INT#");
157 gpio_direction_input(IMX_GPIO_NR(3, 16)); 159 gpio_direction_input(IMX_GPIO_NR(3, 16));
158 } 160 }
159 161
160 /* GPIO PINs, By SMARC specification, GPIO0~GPIO5 are recommended set as Output Low by default and GPIO6~GPIO11 are recommended set as Input*/ 162 /* GPIO PINs, By SMARC specification, GPIO0~GPIO5 are recommended set as Output Low by default and GPIO6~GPIO11 are recommended set as Input*/
161 static iomux_v3_cfg_t const gpio_pads[] = { 163 static iomux_v3_cfg_t const gpio_pads[] = {
162 IMX8MQ_PAD_SAI5_MCLK__GPIO3_IO25 | MUX_PAD_CTRL(WEAK_PULLUP), /*P108, GPIO0*/ 164 IMX8MQ_PAD_SAI5_MCLK__GPIO3_IO25 | MUX_PAD_CTRL(WEAK_PULLUP), /*P108, GPIO0*/
163 IMX8MQ_PAD_SAI5_RXFS__GPIO3_IO19 | MUX_PAD_CTRL(WEAK_PULLUP), /*P109, GPIO1*/ 165 IMX8MQ_PAD_SAI5_RXFS__GPIO3_IO19 | MUX_PAD_CTRL(WEAK_PULLUP), /*P109, GPIO1*/
164 IMX8MQ_PAD_SAI5_RXC__GPIO3_IO20 | MUX_PAD_CTRL(WEAK_PULLUP), /*P110, GPIO2*/ 166 IMX8MQ_PAD_SAI5_RXC__GPIO3_IO20 | MUX_PAD_CTRL(WEAK_PULLUP), /*P110, GPIO2*/
165 IMX8MQ_PAD_SAI5_RXD0__GPIO3_IO21 | MUX_PAD_CTRL(WEAK_PULLUP), /*P111, GPIO3*/ 167 IMX8MQ_PAD_SAI5_RXD0__GPIO3_IO21 | MUX_PAD_CTRL(WEAK_PULLUP), /*P111, GPIO3*/
166 IMX8MQ_PAD_SAI5_RXD1__GPIO3_IO22 | MUX_PAD_CTRL(WEAK_PULLUP), /*P112, GPIO4*/ 168 IMX8MQ_PAD_SAI5_RXD1__GPIO3_IO22 | MUX_PAD_CTRL(WEAK_PULLUP), /*P112, GPIO4*/
167 IMX8MQ_PAD_SPDIF_TX__GPIO5_IO3 | MUX_PAD_CTRL(WEAK_PULLUP), /*P113, GPIO5*/ 169 IMX8MQ_PAD_SPDIF_TX__GPIO5_IO3 | MUX_PAD_CTRL(WEAK_PULLUP), /*P113, GPIO5*/
168 IMX8MQ_PAD_SPDIF_RX__GPIO5_IO4 | MUX_PAD_CTRL(WEAK_PULLUP), /*P114, GPIO6*/ 170 IMX8MQ_PAD_SPDIF_RX__GPIO5_IO4 | MUX_PAD_CTRL(WEAK_PULLUP), /*P114, GPIO6*/
169 IMX8MQ_PAD_SAI5_RXD2__GPIO3_IO23 | MUX_PAD_CTRL(WEAK_PULLUP), /*P115, GPIO7*/ 171 IMX8MQ_PAD_SAI5_RXD2__GPIO3_IO23 | MUX_PAD_CTRL(WEAK_PULLUP), /*P115, GPIO7*/
170 IMX8MQ_PAD_SAI5_RXD3__GPIO3_IO24 | MUX_PAD_CTRL(WEAK_PULLUP), /*P116, GPIO8*/ 172 IMX8MQ_PAD_SAI5_RXD3__GPIO3_IO24 | MUX_PAD_CTRL(WEAK_PULLUP), /*P116, GPIO8*/
171 IMX8MQ_PAD_SAI1_TXC__GPIO4_IO11 | MUX_PAD_CTRL(WEAK_PULLUP), /*P114, GPIO9*/ 173 IMX8MQ_PAD_SAI1_TXC__GPIO4_IO11 | MUX_PAD_CTRL(WEAK_PULLUP), /*P114, GPIO9*/
172 IMX8MQ_PAD_SAI1_TXFS__GPIO4_IO10 | MUX_PAD_CTRL(WEAK_PULLUP), /*P115, GPIO10*/ 174 IMX8MQ_PAD_SAI1_TXFS__GPIO4_IO10 | MUX_PAD_CTRL(WEAK_PULLUP), /*P115, GPIO10*/
173 IMX8MQ_PAD_SAI1_MCLK__GPIO4_IO20 | MUX_PAD_CTRL(WEAK_PULLUP), /*P116, GPIO11*/ 175 IMX8MQ_PAD_SAI1_MCLK__GPIO4_IO20 | MUX_PAD_CTRL(WEAK_PULLUP), /*P116, GPIO11*/
174 }; 176 };
175 177
176 static void setup_iomux_gpio(void) 178 static void setup_iomux_gpio(void)
177 { 179 {
178 imx_iomux_v3_setup_multiple_pads(gpio_pads, ARRAY_SIZE(gpio_pads)); 180 imx_iomux_v3_setup_multiple_pads(gpio_pads, ARRAY_SIZE(gpio_pads));
179 181
180 /* Set GPIO0 as Output Low*/ 182 /* Set GPIO0 as Output Low*/
181 gpio_request(IMX_GPIO_NR(3, 25), "GPIO0"); 183 gpio_request(IMX_GPIO_NR(3, 25), "GPIO0");
182 gpio_direction_output(IMX_GPIO_NR(3, 25), 0); 184 gpio_direction_output(IMX_GPIO_NR(3, 25), 0);
183 /* Set GPIO1 as Output Low*/ 185 /* Set GPIO1 as Output Low*/
184 gpio_request(IMX_GPIO_NR(3, 19), "GPIO1"); 186 gpio_request(IMX_GPIO_NR(3, 19), "GPIO1");
185 gpio_direction_output(IMX_GPIO_NR(3, 19), 0); 187 gpio_direction_output(IMX_GPIO_NR(3, 19), 0);
186 /* Set GPIO2 as Output Low*/ 188 /* Set GPIO2 as Output Low*/
187 gpio_request(IMX_GPIO_NR(3, 20), "GPIO2"); 189 gpio_request(IMX_GPIO_NR(3, 20), "GPIO2");
188 gpio_direction_output(IMX_GPIO_NR(3, 20), 0); 190 gpio_direction_output(IMX_GPIO_NR(3, 20), 0);
189 /* Set GPIO3 as Output Low*/ 191 /* Set GPIO3 as Output Low*/
190 gpio_request(IMX_GPIO_NR(3, 21), "GPIO3"); 192 gpio_request(IMX_GPIO_NR(3, 21), "GPIO3");
191 gpio_direction_output(IMX_GPIO_NR(3, 21), 0); 193 gpio_direction_output(IMX_GPIO_NR(3, 21), 0);
192 /* Set GPIO4 as Output Low*/ 194 /* Set GPIO4 as Output Low*/
193 gpio_request(IMX_GPIO_NR(3, 22), "GPIO4"); 195 gpio_request(IMX_GPIO_NR(3, 22), "GPIO4");
194 gpio_direction_output(IMX_GPIO_NR(3, 22), 0); 196 gpio_direction_output(IMX_GPIO_NR(3, 22), 0);
195 /* Set GPIO5 as Output Low*/ 197 /* Set GPIO5 as Output Low*/
196 gpio_request(IMX_GPIO_NR(5, 3), "GPIO5"); 198 gpio_request(IMX_GPIO_NR(5, 3), "GPIO5");
197 gpio_direction_output(IMX_GPIO_NR(5, 3), 0); 199 gpio_direction_output(IMX_GPIO_NR(5, 3), 0);
198 /* Set GPIO6 as Input*/ 200 /* Set GPIO6 as Input*/
199 gpio_request(IMX_GPIO_NR(5, 4), "GPIO6"); 201 gpio_request(IMX_GPIO_NR(5, 4), "GPIO6");
200 gpio_direction_input(IMX_GPIO_NR(5, 4)); 202 gpio_direction_input(IMX_GPIO_NR(5, 4));
201 /* Set GPIO7 as Input*/ 203 /* Set GPIO7 as Input*/
202 gpio_request(IMX_GPIO_NR(3, 23), "GPIO7"); 204 gpio_request(IMX_GPIO_NR(3, 23), "GPIO7");
203 gpio_direction_input(IMX_GPIO_NR(3, 23)); 205 gpio_direction_input(IMX_GPIO_NR(3, 23));
204 /* Set GPIO8 as Input*/ 206 /* Set GPIO8 as Input*/
205 gpio_request(IMX_GPIO_NR(3, 24), "GPIO8"); 207 gpio_request(IMX_GPIO_NR(3, 24), "GPIO8");
206 gpio_direction_input(IMX_GPIO_NR(3, 24)); 208 gpio_direction_input(IMX_GPIO_NR(3, 24));
207 /* Set GPIO9 as Input*/ 209 /* Set GPIO9 as Input*/
208 gpio_request(IMX_GPIO_NR(4, 11), "GPIO9"); 210 gpio_request(IMX_GPIO_NR(4, 11), "GPIO9");
209 gpio_direction_input(IMX_GPIO_NR(4, 11)); 211 gpio_direction_input(IMX_GPIO_NR(4, 11));
210 /* Set GPIO10 as Input*/ 212 /* Set GPIO10 as Input*/
211 gpio_request(IMX_GPIO_NR(4, 10), "GPIO10"); 213 gpio_request(IMX_GPIO_NR(4, 10), "GPIO10");
212 gpio_direction_input(IMX_GPIO_NR(4, 10)); 214 gpio_direction_input(IMX_GPIO_NR(4, 10));
213 /* Set GPIO11 as Input*/ 215 /* Set GPIO11 as Input*/
214 gpio_request(IMX_GPIO_NR(4, 20), "GPIO11"); 216 gpio_request(IMX_GPIO_NR(4, 20), "GPIO11");
215 gpio_direction_input(IMX_GPIO_NR(4, 20)); 217 gpio_direction_input(IMX_GPIO_NR(4, 20));
216 } 218 }
217 219
218 220
219 int board_early_init_f(void) 221 int board_early_init_f(void)
220 { 222 {
221 struct wdog_regs *wdog = (struct wdog_regs *)WDOG1_BASE_ADDR; 223 struct wdog_regs *wdog = (struct wdog_regs *)WDOG1_BASE_ADDR;
222 224
223 imx_iomux_v3_setup_multiple_pads(wdog_pads, ARRAY_SIZE(wdog_pads)); 225 imx_iomux_v3_setup_multiple_pads(wdog_pads, ARRAY_SIZE(wdog_pads));
224 226
225 set_wdog_reset(wdog); 227 set_wdog_reset(wdog);
226 228
227 #ifdef CONFIG_CONSOLE_SER0 229 #ifdef CONFIG_CONSOLE_SER0
228 imx_iomux_v3_setup_multiple_pads(uart4_pads, ARRAY_SIZE(uart4_pads)); 230 imx_iomux_v3_setup_multiple_pads(uart4_pads, ARRAY_SIZE(uart4_pads));
229 #endif 231 #endif
230 #ifdef CONFIG_CONSOLE_SER1 232 #ifdef CONFIG_CONSOLE_SER1
231 imx_iomux_v3_setup_multiple_pads(uart3_pads, ARRAY_SIZE(uart3_pads)); 233 imx_iomux_v3_setup_multiple_pads(uart3_pads, ARRAY_SIZE(uart3_pads));
232 #endif 234 #endif
233 #ifdef CONFIG_CONSOLE_SER2 235 #ifdef CONFIG_CONSOLE_SER2
234 imx_iomux_v3_setup_multiple_pads(uart2_pads, ARRAY_SIZE(uart2_pads)); 236 imx_iomux_v3_setup_multiple_pads(uart2_pads, ARRAY_SIZE(uart2_pads));
235 #endif 237 #endif
236 #ifdef CONFIG_CONSOLE_SER3 238 #ifdef CONFIG_CONSOLE_SER3
237 imx_iomux_v3_setup_multiple_pads(uart1_pads, ARRAY_SIZE(uart1_pads)); 239 imx_iomux_v3_setup_multiple_pads(uart1_pads, ARRAY_SIZE(uart1_pads));
238 #endif 240 #endif
239 241
240 return 0; 242 return 0;
241 } 243 }
242 244
243 #ifdef CONFIG_BOARD_POSTCLK_INIT 245 #ifdef CONFIG_BOARD_POSTCLK_INIT
244 int board_postclk_init(void) 246 int board_postclk_init(void)
245 { 247 {
246 /* TODO */ 248 /* TODO */
247 return 0; 249 return 0;
248 } 250 }
249 #endif 251 #endif
250 252
251 int dram_init(void) 253 int dram_init(void)
252 { 254 {
253 /* rom_pointer[1] contains the size of TEE occupies */ 255 /* rom_pointer[1] contains the size of TEE occupies */
254 if (rom_pointer[1]) 256 if (rom_pointer[1])
255 gd->ram_size = PHYS_SDRAM_SIZE - rom_pointer[1]; 257 gd->ram_size = PHYS_SDRAM_SIZE - rom_pointer[1];
256 else 258 else
257 gd->ram_size = PHYS_SDRAM_SIZE; 259 gd->ram_size = PHYS_SDRAM_SIZE;
258 260
259 return 0; 261 return 0;
260 } 262 }
261 263
262 #ifdef CONFIG_SYS_I2C 264 #ifdef CONFIG_SYS_I2C
263 /*I2C2, I2C_CAM0 and I2C_LCD*/ 265 /*I2C2, I2C_CAM0 and I2C_LCD*/
264 struct i2c_pads_info i2c_pad_info2 = { 266 struct i2c_pads_info i2c_pad_info2 = {
265 .scl = { 267 .scl = {
266 .i2c_mode = IMX8MQ_PAD_I2C2_SCL__I2C2_SCL | I2C_PAD_CTRL, 268 .i2c_mode = IMX8MQ_PAD_I2C2_SCL__I2C2_SCL | I2C_PAD_CTRL,
267 .gpio_mode = IMX8MQ_PAD_I2C2_SCL__GPIO5_IO16 | I2C_PAD_CTRL, 269 .gpio_mode = IMX8MQ_PAD_I2C2_SCL__GPIO5_IO16 | I2C_PAD_CTRL,
268 .gp = IMX_GPIO_NR(5, 16), 270 .gp = IMX_GPIO_NR(5, 16),
269 }, 271 },
270 .sda = { 272 .sda = {
271 .i2c_mode = IMX8MQ_PAD_I2C2_SDA__I2C2_SDA | I2C_PAD_CTRL, 273 .i2c_mode = IMX8MQ_PAD_I2C2_SDA__I2C2_SDA | I2C_PAD_CTRL,
272 .gpio_mode = IMX8MQ_PAD_I2C2_SDA__GPIO5_IO17 | I2C_PAD_CTRL, 274 .gpio_mode = IMX8MQ_PAD_I2C2_SDA__GPIO5_IO17 | I2C_PAD_CTRL,
273 .gp = IMX_GPIO_NR(5, 17), 275 .gp = IMX_GPIO_NR(5, 17),
274 }, 276 },
275 }; 277 };
276 278
277 /*I2C3, I2C_GP*/ 279 /*I2C3, I2C_GP*/
278 struct i2c_pads_info i2c_pad_info3 = { 280 struct i2c_pads_info i2c_pad_info3 = {
279 .scl = { 281 .scl = {
280 .i2c_mode = IMX8MQ_PAD_I2C3_SCL__I2C3_SCL | I2C_PAD_CTRL, 282 .i2c_mode = IMX8MQ_PAD_I2C3_SCL__I2C3_SCL | I2C_PAD_CTRL,
281 .gpio_mode = IMX8MQ_PAD_I2C3_SCL__GPIO5_IO18 | I2C_PAD_CTRL, 283 .gpio_mode = IMX8MQ_PAD_I2C3_SCL__GPIO5_IO18 | I2C_PAD_CTRL,
282 .gp = IMX_GPIO_NR(5, 18), 284 .gp = IMX_GPIO_NR(5, 18),
283 }, 285 },
284 .sda = { 286 .sda = {
285 .i2c_mode = IMX8MQ_PAD_I2C3_SDA__I2C3_SDA | I2C_PAD_CTRL, 287 .i2c_mode = IMX8MQ_PAD_I2C3_SDA__I2C3_SDA | I2C_PAD_CTRL,
286 .gpio_mode = IMX8MQ_PAD_I2C3_SDA__GPIO5_IO19 | I2C_PAD_CTRL, 288 .gpio_mode = IMX8MQ_PAD_I2C3_SDA__GPIO5_IO19 | I2C_PAD_CTRL,
287 .gp = IMX_GPIO_NR(5, 19), 289 .gp = IMX_GPIO_NR(5, 19),
288 }, 290 },
289 }; 291 };
290 292
291 /*I2C4, I2C_CAM1*/ 293 /*I2C4, I2C_CAM1*/
292 struct i2c_pads_info i2c_pad_info4 = { 294 struct i2c_pads_info i2c_pad_info4 = {
293 .scl = { 295 .scl = {
294 .i2c_mode = IMX8MQ_PAD_I2C4_SCL__I2C4_SCL | I2C_PAD_CTRL, 296 .i2c_mode = IMX8MQ_PAD_I2C4_SCL__I2C4_SCL | I2C_PAD_CTRL,
295 .gpio_mode = IMX8MQ_PAD_I2C4_SCL__GPIO5_IO20 | I2C_PAD_CTRL, 297 .gpio_mode = IMX8MQ_PAD_I2C4_SCL__GPIO5_IO20 | I2C_PAD_CTRL,
296 .gp = IMX_GPIO_NR(5, 20), 298 .gp = IMX_GPIO_NR(5, 20),
297 }, 299 },
298 .sda = { 300 .sda = {
299 .i2c_mode = IMX8MQ_PAD_I2C4_SDA__I2C4_SDA | I2C_PAD_CTRL, 301 .i2c_mode = IMX8MQ_PAD_I2C4_SDA__I2C4_SDA | I2C_PAD_CTRL,
300 .gpio_mode = IMX8MQ_PAD_I2C4_SDA__GPIO5_IO21 | I2C_PAD_CTRL, 302 .gpio_mode = IMX8MQ_PAD_I2C4_SDA__GPIO5_IO21 | I2C_PAD_CTRL,
301 .gp = IMX_GPIO_NR(5, 21), 303 .gp = IMX_GPIO_NR(5, 21),
302 }, 304 },
303 }; 305 };
304 #endif 306 #endif
305 307
306 #ifdef CONFIG_OF_BOARD_SETUP 308 #ifdef CONFIG_OF_BOARD_SETUP
307 int ft_board_setup(void *blob, bd_t *bd) 309 int ft_board_setup(void *blob, bd_t *bd)
308 { 310 {
309 return 0; 311 return 0;
310 } 312 }
311 #endif 313 #endif
312 314
313 /* Get the top of usable RAM */ 315 /* Get the top of usable RAM */
314 ulong board_get_usable_ram_top(ulong total_size) 316 ulong board_get_usable_ram_top(ulong total_size)
315 { 317 {
316 318
317 //printf("board_get_usable_ram_top total_size is 0x%lx \n", total_size); 319 //printf("board_get_usable_ram_top total_size is 0x%lx \n", total_size);
318 320
319 if(gd->ram_top > 0x100000000) 321 if(gd->ram_top > 0x100000000)
320 gd->ram_top = 0x100000000; 322 gd->ram_top = 0x100000000;
321 323
322 return gd->ram_top; 324 return gd->ram_top;
323 } 325 }
324 326
325 #ifdef CONFIG_FEC_MXC 327 #ifdef CONFIG_FEC_MXC
326 #define FEC_RST_PAD IMX_GPIO_NR(1, 11) 328 #define FEC_RST_PAD IMX_GPIO_NR(1, 11)
327 static iomux_v3_cfg_t const fec1_irq_pads[] = { 329 static iomux_v3_cfg_t const fec1_irq_pads[] = {
328 IMX8MQ_PAD_GPIO1_IO11__GPIO1_IO11 | MUX_PAD_CTRL(WEAK_PULLUP), 330 IMX8MQ_PAD_GPIO1_IO11__GPIO1_IO11 | MUX_PAD_CTRL(WEAK_PULLUP),
329 }; 331 };
330 332
331 static void setup_iomux_fec(void) 333 static void setup_iomux_fec(void)
332 { 334 {
333 imx_iomux_v3_setup_multiple_pads(fec1_irq_pads, 335 imx_iomux_v3_setup_multiple_pads(fec1_irq_pads,
334 ARRAY_SIZE(fec1_irq_pads)); 336 ARRAY_SIZE(fec1_irq_pads));
335 337
336 gpio_request(IMX_GPIO_NR(1, 11), "fec1_irq"); 338 gpio_request(IMX_GPIO_NR(1, 11), "fec1_irq");
337 gpio_direction_input(IMX_GPIO_NR(1, 11)); 339 gpio_direction_input(IMX_GPIO_NR(1, 11));
338 } 340 }
339 341
340 static int setup_fec(void) 342 static int setup_fec(void)
341 { 343 {
342 struct iomuxc_gpr_base_regs *const iomuxc_gpr_regs 344 struct iomuxc_gpr_base_regs *const iomuxc_gpr_regs
343 = (struct iomuxc_gpr_base_regs *) IOMUXC_GPR_BASE_ADDR; 345 = (struct iomuxc_gpr_base_regs *) IOMUXC_GPR_BASE_ADDR;
344 346
345 setup_iomux_fec(); 347 setup_iomux_fec();
346 348
347 /* Use 125M anatop REF_CLK1 for ENET1, not from external */ 349 /* Use 125M anatop REF_CLK1 for ENET1, not from external */
348 clrsetbits_le32(&iomuxc_gpr_regs->gpr[1], 350 clrsetbits_le32(&iomuxc_gpr_regs->gpr[1],
349 IOMUXC_GPR_GPR1_GPR_ENET1_TX_CLK_SEL_SHIFT, 0); 351 IOMUXC_GPR_GPR1_GPR_ENET1_TX_CLK_SEL_SHIFT, 0);
350 return set_clk_enet(ENET_125MHZ); 352 return set_clk_enet(ENET_125MHZ);
351 } 353 }
352 354
353 355
354 int board_phy_config(struct phy_device *phydev) 356 int board_phy_config(struct phy_device *phydev)
355 { 357 {
356 /* enable rgmii rxc skew and phy mode select to RGMII copper */ 358 /* enable rgmii rxc skew and phy mode select to RGMII copper */
357 phy_write(phydev, MDIO_DEVAD_NONE, 0x1d, 0x1f); 359 phy_write(phydev, MDIO_DEVAD_NONE, 0x1d, 0x1f);
358 phy_write(phydev, MDIO_DEVAD_NONE, 0x1e, 0x8); 360 phy_write(phydev, MDIO_DEVAD_NONE, 0x1e, 0x8);
359 361
360 phy_write(phydev, MDIO_DEVAD_NONE, 0x1d, 0x05); 362 phy_write(phydev, MDIO_DEVAD_NONE, 0x1d, 0x05);
361 phy_write(phydev, MDIO_DEVAD_NONE, 0x1e, 0x100); 363 phy_write(phydev, MDIO_DEVAD_NONE, 0x1e, 0x100);
362 364
363 if (phydev->drv->config) 365 if (phydev->drv->config)
364 phydev->drv->config(phydev); 366 phydev->drv->config(phydev);
365 return 0; 367 return 0;
366 } 368 }
367 #endif 369 #endif
368 370
369 static void setup_iomux_ecspi1(void) 371 static void setup_iomux_ecspi1(void)
370 { 372 {
371 imx_iomux_v3_setup_multiple_pads(ecspi1_pads, 373 imx_iomux_v3_setup_multiple_pads(ecspi1_pads,
372 ARRAY_SIZE(ecspi1_pads)); 374 ARRAY_SIZE(ecspi1_pads));
373 } 375 }
374 376
375 int board_spi_cs_gpio(unsigned bus, unsigned cs) 377 int board_spi_cs_gpio(unsigned bus, unsigned cs)
376 { 378 {
377 gpio_request(IMX_GPIO_NR(5, 9), "espi1_cs0"); 379 gpio_request(IMX_GPIO_NR(5, 9), "espi1_cs0");
378 return (bus == 0 && cs == 0) ? (IMX_GPIO_NR(5, 9)) : -1; 380 return (bus == 0 && cs == 0) ? (IMX_GPIO_NR(5, 9)) : -1;
379 gpio_request(IMX_GPIO_NR(1, 0), "espi1_cs1"); 381 gpio_request(IMX_GPIO_NR(1, 0), "espi1_cs1");
380 return (bus == 0 && cs == 1) ? (IMX_GPIO_NR(1, 0)) : -1; 382 return (bus == 0 && cs == 1) ? (IMX_GPIO_NR(1, 0)) : -1;
381 gpio_request(IMX_GPIO_NR(3, 15), "espi1_cs2"); 383 gpio_request(IMX_GPIO_NR(3, 15), "espi1_cs2");
382 return (bus == 0 && cs == 2) ? (IMX_GPIO_NR(3, 15)) : -1; 384 return (bus == 0 && cs == 2) ? (IMX_GPIO_NR(3, 15)) : -1;
383 gpio_request(IMX_GPIO_NR(3, 17), "espi1_cs3"); 385 gpio_request(IMX_GPIO_NR(3, 17), "espi1_cs3");
384 return (bus == 0 && cs == 3) ? (IMX_GPIO_NR(3, 17)) : -1; 386 return (bus == 0 && cs == 3) ? (IMX_GPIO_NR(3, 17)) : -1;
385 } 387 }
386 388
387 #ifdef CONFIG_USB_DWC3 389 #ifdef CONFIG_USB_DWC3
388 390
389 #define USB_PHY_CTRL0 0xF0040 391 #define USB_PHY_CTRL0 0xF0040
390 #define USB_PHY_CTRL0_REF_SSP_EN BIT(2) 392 #define USB_PHY_CTRL0_REF_SSP_EN BIT(2)
391 393
392 #define USB_PHY_CTRL1 0xF0044 394 #define USB_PHY_CTRL1 0xF0044
393 #define USB_PHY_CTRL1_RESET BIT(0) 395 #define USB_PHY_CTRL1_RESET BIT(0)
394 #define USB_PHY_CTRL1_COMMONONN BIT(1) 396 #define USB_PHY_CTRL1_COMMONONN BIT(1)
395 #define USB_PHY_CTRL1_ATERESET BIT(3) 397 #define USB_PHY_CTRL1_ATERESET BIT(3)
396 #define USB_PHY_CTRL1_VDATSRCENB0 BIT(19) 398 #define USB_PHY_CTRL1_VDATSRCENB0 BIT(19)
397 #define USB_PHY_CTRL1_VDATDETENB0 BIT(20) 399 #define USB_PHY_CTRL1_VDATDETENB0 BIT(20)
398 400
399 #define USB_PHY_CTRL2 0xF0048 401 #define USB_PHY_CTRL2 0xF0048
400 #define USB_PHY_CTRL2_TXENABLEN0 BIT(8) 402 #define USB_PHY_CTRL2_TXENABLEN0 BIT(8)
401 403
402 static struct dwc3_device dwc3_device_data = { 404 static struct dwc3_device dwc3_device_data = {
403 #ifdef CONFIG_SPL_BUILD 405 #ifdef CONFIG_SPL_BUILD
404 .maximum_speed = USB_SPEED_HIGH, 406 .maximum_speed = USB_SPEED_HIGH,
405 #else 407 #else
406 .maximum_speed = USB_SPEED_SUPER, 408 .maximum_speed = USB_SPEED_SUPER,
407 #endif 409 #endif
408 .base = USB1_BASE_ADDR, 410 .base = USB1_BASE_ADDR,
409 .dr_mode = USB_DR_MODE_PERIPHERAL, 411 .dr_mode = USB_DR_MODE_PERIPHERAL,
410 .index = 0, 412 .index = 0,
411 .power_down_scale = 2, 413 .power_down_scale = 2,
412 }; 414 };
413 415
414 int usb_gadget_handle_interrupts(void) 416 int usb_gadget_handle_interrupts(void)
415 { 417 {
416 dwc3_uboot_handle_interrupt(0); 418 dwc3_uboot_handle_interrupt(0);
417 return 0; 419 return 0;
418 } 420 }
419 421
420 static void dwc3_nxp_usb_phy_init(struct dwc3_device *dwc3) 422 static void dwc3_nxp_usb_phy_init(struct dwc3_device *dwc3)
421 { 423 {
422 u32 RegData; 424 u32 RegData;
423 425
424 RegData = readl(dwc3->base + USB_PHY_CTRL1); 426 RegData = readl(dwc3->base + USB_PHY_CTRL1);
425 RegData &= ~(USB_PHY_CTRL1_VDATSRCENB0 | USB_PHY_CTRL1_VDATDETENB0 | 427 RegData &= ~(USB_PHY_CTRL1_VDATSRCENB0 | USB_PHY_CTRL1_VDATDETENB0 |
426 USB_PHY_CTRL1_COMMONONN); 428 USB_PHY_CTRL1_COMMONONN);
427 RegData |= USB_PHY_CTRL1_RESET | USB_PHY_CTRL1_ATERESET; 429 RegData |= USB_PHY_CTRL1_RESET | USB_PHY_CTRL1_ATERESET;
428 writel(RegData, dwc3->base + USB_PHY_CTRL1); 430 writel(RegData, dwc3->base + USB_PHY_CTRL1);
429 431
430 RegData = readl(dwc3->base + USB_PHY_CTRL0); 432 RegData = readl(dwc3->base + USB_PHY_CTRL0);
431 RegData |= USB_PHY_CTRL0_REF_SSP_EN; 433 RegData |= USB_PHY_CTRL0_REF_SSP_EN;
432 writel(RegData, dwc3->base + USB_PHY_CTRL0); 434 writel(RegData, dwc3->base + USB_PHY_CTRL0);
433 435
434 RegData = readl(dwc3->base + USB_PHY_CTRL2); 436 RegData = readl(dwc3->base + USB_PHY_CTRL2);
435 RegData |= USB_PHY_CTRL2_TXENABLEN0; 437 RegData |= USB_PHY_CTRL2_TXENABLEN0;
436 writel(RegData, dwc3->base + USB_PHY_CTRL2); 438 writel(RegData, dwc3->base + USB_PHY_CTRL2);
437 439
438 RegData = readl(dwc3->base + USB_PHY_CTRL1); 440 RegData = readl(dwc3->base + USB_PHY_CTRL1);
439 RegData &= ~(USB_PHY_CTRL1_RESET | USB_PHY_CTRL1_ATERESET); 441 RegData &= ~(USB_PHY_CTRL1_RESET | USB_PHY_CTRL1_ATERESET);
440 writel(RegData, dwc3->base + USB_PHY_CTRL1); 442 writel(RegData, dwc3->base + USB_PHY_CTRL1);
441 } 443 }
442 #endif 444 #endif
443 445
444 /*USB Enable Over-Current Pin Setting*/ 446 /*USB Enable Over-Current Pin Setting*/
445 static iomux_v3_cfg_t const usb_en_oc_pads[] = { 447 static iomux_v3_cfg_t const usb_en_oc_pads[] = {
446 IMX8MQ_PAD_NAND_DATA04__GPIO3_IO10 | MUX_PAD_CTRL(WEAK_PULLUP), 448 IMX8MQ_PAD_NAND_DATA04__GPIO3_IO10 | MUX_PAD_CTRL(WEAK_PULLUP),
447 IMX8MQ_PAD_NAND_DATA06__GPIO3_IO12 | MUX_PAD_CTRL(WEAK_PULLUP), 449 IMX8MQ_PAD_NAND_DATA06__GPIO3_IO12 | MUX_PAD_CTRL(WEAK_PULLUP),
448 IMX8MQ_PAD_NAND_DATA07__GPIO3_IO13 | MUX_PAD_CTRL(WEAK_PULLUP), 450 IMX8MQ_PAD_NAND_DATA07__GPIO3_IO13 | MUX_PAD_CTRL(WEAK_PULLUP),
449 }; 451 };
450 452
451 static void setup_iomux_usb_en_oc(void) 453 static void setup_iomux_usb_en_oc(void)
452 { 454 {
453 imx_iomux_v3_setup_multiple_pads(usb_en_oc_pads, 455 imx_iomux_v3_setup_multiple_pads(usb_en_oc_pads,
454 ARRAY_SIZE(usb_en_oc_pads)); 456 ARRAY_SIZE(usb_en_oc_pads));
455 457
456 gpio_request(IMX_GPIO_NR(3, 10), "usb0_en_oc#"); 458 gpio_request(IMX_GPIO_NR(3, 10), "usb0_en_oc#");
457 gpio_direction_input(IMX_GPIO_NR(3, 10)); 459 gpio_direction_input(IMX_GPIO_NR(3, 10));
458 gpio_request(IMX_GPIO_NR(3, 12), "usb2_en_oc#"); 460 gpio_request(IMX_GPIO_NR(3, 12), "usb2_en_oc#");
459 gpio_direction_input(IMX_GPIO_NR(3, 12)); 461 gpio_direction_input(IMX_GPIO_NR(3, 12));
460 gpio_request(IMX_GPIO_NR(3, 13), "usb3_en_oc#"); 462 gpio_request(IMX_GPIO_NR(3, 13), "usb3_en_oc#");
461 gpio_direction_input(IMX_GPIO_NR(3, 13)); 463 gpio_direction_input(IMX_GPIO_NR(3, 13));
462 } 464 }
463 465
464 #ifdef CONFIG_USB_TCPC 466 #ifdef CONFIG_USB_TCPC
465 struct tcpc_port port; 467 struct tcpc_port port;
466 struct tcpc_port_config port_config = { 468 struct tcpc_port_config port_config = {
467 .i2c_bus = 0, 469 .i2c_bus = 0,
468 .addr = 0x50, 470 .addr = 0x50,
469 .port_type = TYPEC_PORT_UFP, 471 .port_type = TYPEC_PORT_UFP,
470 .max_snk_mv = 20000, 472 .max_snk_mv = 20000,
471 .max_snk_ma = 3000, 473 .max_snk_ma = 3000,
472 .max_snk_mw = 15000, 474 .max_snk_mw = 15000,
473 .op_snk_mv = 9000, 475 .op_snk_mv = 9000,
474 }; 476 };
475 477
476 #define USB_TYPEC_SEL IMX_GPIO_NR(3, 15) 478 #define USB_TYPEC_SEL IMX_GPIO_NR(3, 15)
477 479
478 static iomux_v3_cfg_t ss_mux_gpio[] = { 480 static iomux_v3_cfg_t ss_mux_gpio[] = {
479 IMX8MQ_PAD_NAND_RE_B__GPIO3_IO15 | MUX_PAD_CTRL(NO_PAD_CTRL), 481 IMX8MQ_PAD_NAND_RE_B__GPIO3_IO15 | MUX_PAD_CTRL(NO_PAD_CTRL),
480 }; 482 };
481 483
482 void ss_mux_select(enum typec_cc_polarity pol) 484 void ss_mux_select(enum typec_cc_polarity pol)
483 { 485 {
484 if (pol == TYPEC_POLARITY_CC1) 486 if (pol == TYPEC_POLARITY_CC1)
485 gpio_direction_output(USB_TYPEC_SEL, 1); 487 gpio_direction_output(USB_TYPEC_SEL, 1);
486 else 488 else
487 gpio_direction_output(USB_TYPEC_SEL, 0); 489 gpio_direction_output(USB_TYPEC_SEL, 0);
488 } 490 }
489 491
490 static int setup_typec(void) 492 static int setup_typec(void)
491 { 493 {
492 int ret; 494 int ret;
493 495
494 imx_iomux_v3_setup_multiple_pads(ss_mux_gpio, ARRAY_SIZE(ss_mux_gpio)); 496 imx_iomux_v3_setup_multiple_pads(ss_mux_gpio, ARRAY_SIZE(ss_mux_gpio));
495 gpio_request(USB_TYPEC_SEL, "typec_sel"); 497 gpio_request(USB_TYPEC_SEL, "typec_sel");
496 498
497 ret = tcpc_init(&port, port_config, &ss_mux_select); 499 ret = tcpc_init(&port, port_config, &ss_mux_select);
498 if (ret) { 500 if (ret) {
499 printf("%s: tcpc init failed, err=%d\n", 501 printf("%s: tcpc init failed, err=%d\n",
500 __func__, ret); 502 __func__, ret);
501 } 503 }
502 504
503 return ret; 505 return ret;
504 } 506 }
505 #endif 507 #endif
506 508
507 #if defined(CONFIG_USB_DWC3) || defined(CONFIG_USB_XHCI_IMX8M) 509 #if defined(CONFIG_USB_DWC3) || defined(CONFIG_USB_XHCI_IMX8M)
508 int board_usb_init(int index, enum usb_init_type init) 510 int board_usb_init(int index, enum usb_init_type init)
509 { 511 {
510 int ret = 0; 512 int ret = 0;
511 imx8m_usb_power(index, true); 513 imx8m_usb_power(index, true);
512 514
513 if (index == 0 && init == USB_INIT_DEVICE) { 515 if (index == 0 && init == USB_INIT_DEVICE) {
514 #ifdef CONFIG_USB_TCPC 516 #ifdef CONFIG_USB_TCPC
515 ret = tcpc_setup_ufp_mode(&port); 517 ret = tcpc_setup_ufp_mode(&port);
516 #endif 518 #endif
517 dwc3_nxp_usb_phy_init(&dwc3_device_data); 519 dwc3_nxp_usb_phy_init(&dwc3_device_data);
518 return dwc3_uboot_init(&dwc3_device_data); 520 return dwc3_uboot_init(&dwc3_device_data);
519 } else if (index == 0 && init == USB_INIT_HOST) { 521 } else if (index == 0 && init == USB_INIT_HOST) {
520 #ifdef CONFIG_USB_TCPC 522 #ifdef CONFIG_USB_TCPC
521 ret = tcpc_setup_dfp_mode(&port); 523 ret = tcpc_setup_dfp_mode(&port);
522 #endif 524 #endif
523 return ret; 525 return ret;
524 } 526 }
525 527
526 return 0; 528 return 0;
527 } 529 }
528 530
529 int board_usb_cleanup(int index, enum usb_init_type init) 531 int board_usb_cleanup(int index, enum usb_init_type init)
530 { 532 {
531 int ret = 0; 533 int ret = 0;
532 if (index == 0 && init == USB_INIT_DEVICE) { 534 if (index == 0 && init == USB_INIT_DEVICE) {
533 dwc3_uboot_exit(index); 535 dwc3_uboot_exit(index);
534 } else if (index == 0 && init == USB_INIT_HOST) { 536 } else if (index == 0 && init == USB_INIT_HOST) {
535 #ifdef CONFIG_USB_TCPC 537 #ifdef CONFIG_USB_TCPC
536 ret = tcpc_disable_src_vbus(&port); 538 ret = tcpc_disable_src_vbus(&port);
537 #endif 539 #endif
538 } 540 }
539 541
540 imx8m_usb_power(index, false); 542 imx8m_usb_power(index, false);
541 543
542 return ret; 544 return ret;
543 } 545 }
544 #endif 546 #endif
545 547
546 int board_init(void) 548 int board_init(void)
547 { 549 {
548 board_qspi_init(); 550 board_qspi_init();
549 setup_iomux_usb_en_oc(); 551 setup_iomux_usb_en_oc();
550 setup_iomux_misc(); 552 setup_iomux_misc();
551 setup_iomux_gpio(); 553 setup_iomux_gpio();
552 554
553 #ifdef CONFIG_FEC_MXC 555 #ifdef CONFIG_FEC_MXC
554 setup_fec(); 556 setup_fec();
555 #endif 557 #endif
556 558
557 #if defined(CONFIG_USB_DWC3) || defined(CONFIG_USB_XHCI_IMX8M) 559 #if defined(CONFIG_USB_DWC3) || defined(CONFIG_USB_XHCI_IMX8M)
558 init_usb_clk(); 560 init_usb_clk();
559 #endif 561 #endif
560 562
561 #ifdef CONFIG_USB_TCPC 563 #ifdef CONFIG_USB_TCPC
562 setup_typec(); 564 setup_typec();
563 #endif 565 #endif
564 return 0; 566 return 0;
565 } 567 }
566 568
567 int board_mmc_get_env_dev(int devno) 569 int board_mmc_get_env_dev(int devno)
568 { 570 {
569 return devno; 571 return devno;
570 } 572 }
571 573
572 int board_late_init(void) 574 int board_late_init(void)
573 { 575 {
574 setup_iomux_ecspi1(); 576 setup_iomux_ecspi1();
575 577
576 /* Read Module Information from on module EEPROM and pass 578 /* Read Module Information from on module EEPROM and pass
577 * mac address to kernel 579 * mac address to kernel
578 */ 580 */
579 struct udevice *dev; 581 struct udevice *dev;
580 int ret; 582 int ret;
581 u8 name[8]; 583 u8 name[8];
582 u8 serial[12]; 584 u8 serial[12];
583 u8 revision[4]; 585 u8 revision[4];
584 u8 mac[6]; 586 u8 mac[6];
585 587
586 ret = i2c_get_chip_for_busnum(2, 0x50, 2, &dev); 588 ret = i2c_get_chip_for_busnum(2, 0x50, 2, &dev);
587 if (ret) { 589 if (ret) {
588 debug("failed to get eeprom\n"); 590 debug("failed to get eeprom\n");
589 return 0; 591 return 0;
590 } 592 }
591 593
592 /* Board ID */ 594 /* Board ID */
593 ret = dm_i2c_read(dev, 0x4, name, 8); 595 ret = dm_i2c_read(dev, 0x4, name, 8);
594 if (ret) { 596 if (ret) {
595 debug("failed to read board ID from EEPROM\n"); 597 debug("failed to read board ID from EEPROM\n");
596 return 0; 598 return 0;
597 } 599 }
598 puts("---------Embedian SMARC-iMX8M------------\n"); 600 puts("---------Embedian SMARC-iMX8M------------\n");
599 printf(" Board ID: %c%c%c%c%c%c%c%c\n", 601 printf(" Board ID: %c%c%c%c%c%c%c%c\n",
600 name[0], name[1], name[2], name[3], name[4], name[5], name[6], name[7]); 602 name[0], name[1], name[2], name[3], name[4], name[5], name[6], name[7]);
601 603
602 /* Board Hardware Revision */ 604 /* Board Hardware Revision */
603 ret = dm_i2c_read(dev, 0xc, revision, 4); 605 ret = dm_i2c_read(dev, 0xc, revision, 4);
604 if (ret) { 606 if (ret) {
605 debug("failed to read hardware revison from EEPROM\n"); 607 debug("failed to read hardware revison from EEPROM\n");
606 return 0; 608 return 0;
607 } 609 }
608 printf(" Hardware Revision: %c%c%c%c\n", 610 printf(" Hardware Revision: %c%c%c%c\n",
609 revision[0], revision[1], revision[2], revision[3]); 611 revision[0], revision[1], revision[2], revision[3]);
610 612
611 /* Serial number */ 613 /* Serial number */
612 ret = dm_i2c_read(dev, 0x10, serial, 12); 614 ret = dm_i2c_read(dev, 0x10, serial, 12);
613 if (ret) { 615 if (ret) {
614 debug("failed to read srial number from EEPROM\n"); 616 debug("failed to read srial number from EEPROM\n");
615 return 0; 617 return 0;
616 } 618 }
617 printf(" Serial Number#: %c%c%c%c%c%c%c%c%c%c%c%c\n", 619 printf(" Serial Number#: %c%c%c%c%c%c%c%c%c%c%c%c\n",
618 serial[0], serial[1], serial[2], serial[3], serial[4], serial[5], serial[6], serial[7], serial[8], serial[9], serial[10], serial[11]); 620 serial[0], serial[1], serial[2], serial[3], serial[4], serial[5], serial[6], serial[7], serial[8], serial[9], serial[10], serial[11]);
619 621
620 /*MAC address */ 622 /*MAC address */
621 ret = dm_i2c_read(dev, 0x3c, mac, 6); 623 ret = dm_i2c_read(dev, 0x3c, mac, 6);
622 if (ret) { 624 if (ret) {
623 debug("failed to read eth0 mac address from EEPROM\n"); 625 debug("failed to read eth0 mac address from EEPROM\n");
624 return 0; 626 return 0;
625 } 627 }
626 628
627 if (is_valid_ethaddr(mac)) 629 if (is_valid_ethaddr(mac))
628 printf(" MAC Address: %02x:%02x:%02x:%02x:%02x:%02x\n", 630 printf(" MAC Address: %02x:%02x:%02x:%02x:%02x:%02x\n",
629 mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); 631 mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
630 eth_env_set_enetaddr("ethaddr", mac); 632 eth_env_set_enetaddr("ethaddr", mac);
631 puts("-----------------------------------------\n"); 633 puts("-----------------------------------------\n");
632 634
633 #ifdef CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG 635 #ifdef CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG
634 env_set("board_name", "SMARC-iMX8M"); 636 env_set("board_name", "SMARC-iMX8M");
635 env_set("board_rev", "iMX8MQ"); 637 env_set("board_rev", "iMX8MQ");
636 #endif 638 #endif
637 639
638 #ifdef CONFIG_ENV_IS_IN_MMC 640 #ifdef CONFIG_ENV_IS_IN_MMC
639 board_late_mmc_env_init(); 641 board_late_mmc_env_init();
640 #endif 642 #endif
641 643
642 /* SMARC BOOT_SEL*/ 644 /* SMARC BOOT_SEL*/
643 gpio_request(IMX_GPIO_NR(1, 8), "BOOT_SEL_1"); 645 gpio_request(IMX_GPIO_NR(1, 8), "BOOT_SEL_1");
644 gpio_request(IMX_GPIO_NR(1, 5), "BOOT_SEL_2"); 646 gpio_request(IMX_GPIO_NR(1, 5), "BOOT_SEL_2");
645 gpio_request(IMX_GPIO_NR(1, 6), "BOOT_SEL_3"); 647 gpio_request(IMX_GPIO_NR(1, 6), "BOOT_SEL_3");
646 if ((gpio_get_value(IMX_GPIO_NR(1, 8)) == 0)&&(gpio_get_value(IMX_GPIO_NR(1, 5)) == 0)&&(gpio_get_value(IMX_GPIO_NR(1, 6)) == 0)) { 648 if ((gpio_get_value(IMX_GPIO_NR(1, 8)) == 0)&&(gpio_get_value(IMX_GPIO_NR(1, 5)) == 0)&&(gpio_get_value(IMX_GPIO_NR(1, 6)) == 0)) {
647 puts("BOOT_SEL Detected: OFF OFF OFF, Boot from Carrier SATA is not supported...\n"); 649 puts("BOOT_SEL Detected: OFF OFF OFF, Boot from Carrier SATA is not supported...\n");
648 hang(); 650 hang();
649 } else if ((gpio_get_value(IMX_GPIO_NR(1, 8)) == 0)&&(gpio_get_value(IMX_GPIO_NR(1, 5)) == 0)&&(gpio_get_value(IMX_GPIO_NR(1, 6)) == 1)) { 651 } else if ((gpio_get_value(IMX_GPIO_NR(1, 8)) == 0)&&(gpio_get_value(IMX_GPIO_NR(1, 5)) == 0)&&(gpio_get_value(IMX_GPIO_NR(1, 6)) == 1)) {
650 puts("BOOT_SEL Detected: OFF OFF ON, Load Image from USB0...\n"); 652 puts("BOOT_SEL Detected: OFF OFF ON, Load Image from USB0...\n");
651 env_set_ulong("usb dev", 1); 653 env_set_ulong("usb dev", 1);
652 env_set("bootcmd", "usb start; run loadusbbootenv; run importusbbootenv; run uenvcmd; loadusbimage; run usbboot;"); 654 env_set("bootcmd", "usb start; run loadusbbootenv; run importusbbootenv; run uenvcmd; loadusbimage; run usbboot;");
653 } else if ((gpio_get_value(IMX_GPIO_NR(1, 8)) == 0)&&(gpio_get_value(IMX_GPIO_NR(1, 5)) == 1)&&(gpio_get_value(IMX_GPIO_NR(1, 6)) == 0)) { 655 } else if ((gpio_get_value(IMX_GPIO_NR(1, 8)) == 0)&&(gpio_get_value(IMX_GPIO_NR(1, 5)) == 1)&&(gpio_get_value(IMX_GPIO_NR(1, 6)) == 0)) {
654 puts("BOOT_SEL Detected: OFF ON OFF, Boot from Carrier eSPI is not supported...\n"); 656 puts("BOOT_SEL Detected: OFF ON OFF, Boot from Carrier eSPI is not supported...\n");
655 hang(); 657 hang();
656 } else if ((gpio_get_value(IMX_GPIO_NR(1, 8)) == 1)&&(gpio_get_value(IMX_GPIO_NR(1, 5)) == 0)&&(gpio_get_value(IMX_GPIO_NR(1, 6)) == 0)) { 658 } else if ((gpio_get_value(IMX_GPIO_NR(1, 8)) == 1)&&(gpio_get_value(IMX_GPIO_NR(1, 5)) == 0)&&(gpio_get_value(IMX_GPIO_NR(1, 6)) == 0)) {
657 puts("BOOT_SEL Detected: ON OFF OFF, Load Image from Carrier SD Card...\n"); 659 puts("BOOT_SEL Detected: ON OFF OFF, Load Image from Carrier SD Card...\n");
658 env_set_ulong("mmcdev", 1); 660 env_set_ulong("mmcdev", 1);
659 env_set("bootcmd", "mmc rescan; run loadbootenv; run importbootenv; run uenvcmd; run loadimage; run mmcboot;"); 661 env_set("bootcmd", "mmc rescan; run loadbootenv; run importbootenv; run uenvcmd; run loadimage; run mmcboot;");
660 } else if ((gpio_get_value(IMX_GPIO_NR(1, 8)) == 0)&&(gpio_get_value(IMX_GPIO_NR(1, 5)) == 1)&&(gpio_get_value(IMX_GPIO_NR(1, 6)) == 1)) { 662 } else if ((gpio_get_value(IMX_GPIO_NR(1, 8)) == 0)&&(gpio_get_value(IMX_GPIO_NR(1, 5)) == 1)&&(gpio_get_value(IMX_GPIO_NR(1, 6)) == 1)) {
661 puts("BOOT_SEL Detected: OFF ON ON, Load Image from Module eMMC Flash...\n"); 663 puts("BOOT_SEL Detected: OFF ON ON, Load Image from Module eMMC Flash...\n");
662 env_set_ulong("mmcdev", 0); 664 env_set_ulong("mmcdev", 0);
663 env_set("bootcmd", "mmc rescan; run loadbootenv; run importbootenv; run uenvcmd; run loadimage; run mmcboot;"); 665 env_set("bootcmd", "mmc rescan; run loadbootenv; run importbootenv; run uenvcmd; run loadimage; run mmcboot;");
664 } else if ((gpio_get_value(IMX_GPIO_NR(1, 8)) == 1)&&(gpio_get_value(IMX_GPIO_NR(1, 5)) == 0)&&(gpio_get_value(IMX_GPIO_NR(1, 6)) == 1)) { 666 } else if ((gpio_get_value(IMX_GPIO_NR(1, 8)) == 1)&&(gpio_get_value(IMX_GPIO_NR(1, 5)) == 0)&&(gpio_get_value(IMX_GPIO_NR(1, 6)) == 1)) {
665 puts("BOOT_SEL Detected: ON OFF ON, Load zImage from GBE...\n"); 667 puts("BOOT_SEL Detected: ON OFF ON, Load zImage from GBE...\n");
666 env_set("bootcmd", "run netboot;"); 668 env_set("bootcmd", "run netboot;");
667 } else if ((gpio_get_value(IMX_GPIO_NR(1, 8)) == 1)&&(gpio_get_value(IMX_GPIO_NR(1, 5)) == 1)&&(gpio_get_value(IMX_GPIO_NR(1, 6)) == 0)) { 669 } else if ((gpio_get_value(IMX_GPIO_NR(1, 8)) == 1)&&(gpio_get_value(IMX_GPIO_NR(1, 5)) == 1)&&(gpio_get_value(IMX_GPIO_NR(1, 6)) == 0)) {
668 puts("Carrier SPI Boot is not supported...\n"); 670 puts("Carrier SPI Boot is not supported...\n");
669 hang(); 671 hang();
670 } else if ((gpio_get_value(IMX_GPIO_NR(1, 8)) == 1)&&(gpio_get_value(IMX_GPIO_NR(1, 5)) == 1)&&(gpio_get_value(IMX_GPIO_NR(1, 6)) == 1)) { 672 } else if ((gpio_get_value(IMX_GPIO_NR(1, 8)) == 1)&&(gpio_get_value(IMX_GPIO_NR(1, 5)) == 1)&&(gpio_get_value(IMX_GPIO_NR(1, 6)) == 1)) {
671 puts("BOOT_SEL Detected: ON ON ON, Boot from Module SPI is not supported...\n"); 673 puts("BOOT_SEL Detected: ON ON ON, Boot from Module SPI is not supported...\n");
672 hang(); 674 hang();
673 } else { 675 } else {
674 puts("unsupported boot devices\n"); 676 puts("unsupported boot devices\n");
675 hang(); 677 hang();
676 } 678 }
677 679
678 return 0; 680 return 0;
679 } 681 }
680 682
681 #ifdef CONFIG_FSL_FASTBOOT 683 #ifdef CONFIG_FSL_FASTBOOT
682 #ifdef CONFIG_ANDROID_RECOVERY 684 #ifdef CONFIG_ANDROID_RECOVERY
683 #define LID_KEY IMX_GPIO_NR(1, 9) 685 #define LID_KEY IMX_GPIO_NR(1, 9)
684 #define LID_PAD_CTRL (PAD_CTL_DSE6 | PAD_CTL_HYS | PAD_CTL_PUE) 686 #define LID_PAD_CTRL (PAD_CTL_DSE6 | PAD_CTL_HYS | PAD_CTL_PUE)
685 687
686 static iomux_v3_cfg_t const lid_pads[] = { 688 static iomux_v3_cfg_t const lid_pads[] = {
687 IMX8MQ_PAD_GPIO1_IO09__GPIO1_IO9 | MUX_PAD_CTRL(LID_PAD_CTRL), 689 IMX8MQ_PAD_GPIO1_IO09__GPIO1_IO9 | MUX_PAD_CTRL(LID_PAD_CTRL),
688 }; 690 };
689 691
690 int is_recovery_key_pressing(void) 692 int is_recovery_key_pressing(void)
691 { 693 {
692 imx_iomux_v3_setup_multiple_pads(lid_pads, ARRAY_SIZE(lid_pads)); 694 imx_iomux_v3_setup_multiple_pads(lid_pads, ARRAY_SIZE(lid_pads));
693 gpio_request(LID_KEY, "LID"); 695 gpio_request(LID_KEY, "LID");
694 gpio_direction_input(LID_KEY); 696 gpio_direction_input(LID_KEY);
695 if (gpio_get_value(LID_KEY) == 0) { /* LID key is low assert */ 697 if (gpio_get_value(LID_KEY) == 0) { /* LID key is low assert */
696 printf("Recovery key pressed\n"); 698 printf("Recovery key pressed\n");
697 return 1; 699 return 1;
698 } 700 }
699 return 0; 701 return 0;
700 } 702 }
701 #endif /*CONFIG_ANDROID_RECOVERY*/ 703 #endif /*CONFIG_ANDROID_RECOVERY*/
702 #endif /*CONFIG_FSL_FASTBOOT*/ 704 #endif /*CONFIG_FSL_FASTBOOT*/
703 705
704 #if defined(CONFIG_VIDEO_IMXDCSS) 706 #if defined(CONFIG_VIDEO_IMXDCSS)
705 707
706 struct display_info_t const displays[] = {{ 708 struct display_info_t const displays[] = {{
707 .bus = 0, /* Unused */ 709 .bus = 0, /* Unused */
708 .addr = 0, /* Unused */ 710 .addr = 0, /* Unused */
709 .pixfmt = GDF_32BIT_X888RGB, 711 .pixfmt = GDF_32BIT_X888RGB,
710 .detect = NULL, 712 .detect = NULL,
711 .enable = NULL, 713 .enable = NULL,
712 #ifndef CONFIG_VIDEO_IMXDCSS_1080P 714 #ifndef CONFIG_VIDEO_IMXDCSS_1080P
713 .mode = { 715 .mode = {
714 .name = "HDMI", /* 720P60 */ 716 .name = "HDMI", /* 720P60 */
715 .refresh = 60, 717 .refresh = 60,
716 .xres = 1280, 718 .xres = 1280,
717 .yres = 720, 719 .yres = 720,
718 .pixclock = 13468, /* 74250 kHz */ 720 .pixclock = 13468, /* 74250 kHz */
719 .left_margin = 110, 721 .left_margin = 110,
720 .right_margin = 220, 722 .right_margin = 220,
721 .upper_margin = 5, 723 .upper_margin = 5,
722 .lower_margin = 20, 724 .lower_margin = 20,
723 .hsync_len = 40, 725 .hsync_len = 40,
724 .vsync_len = 5, 726 .vsync_len = 5,
725 .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT, 727 .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
726 .vmode = FB_VMODE_NONINTERLACED 728 .vmode = FB_VMODE_NONINTERLACED
727 } 729 }
728 #else 730 #else
729 .mode = { 731 .mode = {
730 .name = "HDMI", /* 1080P60 */ 732 .name = "HDMI", /* 1080P60 */
731 .refresh = 60, 733 .refresh = 60,
732 .xres = 1920, 734 .xres = 1920,
733 .yres = 1080, 735 .yres = 1080,
734 .pixclock = 6734, /* 148500 kHz */ 736 .pixclock = 6734, /* 148500 kHz */
735 .left_margin = 148, 737 .left_margin = 148,
736 .right_margin = 88, 738 .right_margin = 88,
737 .upper_margin = 36, 739 .upper_margin = 36,
738 .lower_margin = 4, 740 .lower_margin = 4,
739 .hsync_len = 44, 741 .hsync_len = 44,
740 .vsync_len = 5, 742 .vsync_len = 5,
741 .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT, 743 .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
742 .vmode = FB_VMODE_NONINTERLACED 744 .vmode = FB_VMODE_NONINTERLACED
743 } 745 }
744 #endif 746 #endif
745 } }; 747 } };
746 size_t display_count = ARRAY_SIZE(displays); 748 size_t display_count = ARRAY_SIZE(displays);
747 749
748 #endif /* CONFIG_VIDEO_IMXDCSS */ 750 #endif /* CONFIG_VIDEO_IMXDCSS */
749 751
750 /* return hard code board id for imx8m_ref */ 752 /* return hard code board id for imx8m_ref */
751 #if defined(CONFIG_ANDROID_THINGS_SUPPORT) && defined(CONFIG_ARCH_IMX8M) 753 #if defined(CONFIG_ANDROID_THINGS_SUPPORT) && defined(CONFIG_ARCH_IMX8M)
752 int get_imx8m_baseboard_id(void) 754 int get_imx8m_baseboard_id(void)
753 { 755 {
754 return IMX8M_REF_3G; 756 return IMX8M_REF_3G;
755 } 757 }
756 #endif 758 #endif
757 759