OpenWrt – Diff between revs 2 and 3

Subversion Repositories:
Rev:
Only display areas with differencesIgnore whitespace
Rev 2 Rev 3
1 From 6af0148a38b23ba761905f98a7211fab986033ce Mon Sep 17 00:00:00 2001 1 From 25de6430219d3f3698d709c10358fbea17b24cf1 Mon Sep 17 00:00:00 2001
2 From: Michael Heimpold <mhei@heimpold.de> 2 From: Michael Heimpold <mhei@heimpold.de>
3 Date: Thu, 13 Sep 2018 21:40:19 +0200 3 Date: Fri, 21 Apr 2017 11:08:19 +0200
4 Subject: [PATCH] arm: mxs: add support for I2SE's Duckbill boards 4 Subject: [PATCH] arm: mxs: add support for I2SE's Duckbill boards
5   5  
6 The Duckbill devices are small, pen-drive sized boards based on 6 The Duckbill devices are small, pen-drive sized boards based on
7 NXP's i.MX28 SoC. While the initial variants (Duckbill series) were 7 NXP's i.MX28 SoC. While the initial variants (Duckbill series) were
8 equipped with a micro SD card slot only, the latest generation 8 equipped with a micro SD card slot only, the latest generation
9 (Duckbill 2 series) have an additional internal eMMC onboard. 9 (Duckbill 2 series) have an additional internal eMMC onboard.
10   10  
11 Both device generations consist of four "family members": 11 Both device generations consists of four "family members":
12   12  
13 - Duckbill/Duckbill 2: generic board, intended to be used as 13 - Duckbill/Duckbill 2: generic board, intended to be used as
14 baseboard for custom designs and/or as development board 14 baseboard for custom designs and/or as development board
15   15  
16 - Duckbill EnOcean/Duckbill 2 EnOcean: come with an EnOcean 16 - Duckbill EnOcean/Duckbill 2 EnOcean: come with an EnOcean
17 daugther board equipped with the popular TCM310 module 17 daugther board equipped with the popular TCM310 module
18   18  
19 - Duckbill 485/Duckbill 2 485: as the name implies, these 19 - Duckbill 485/Duckbill 2 485: as the name implies, these
20 devices are intended to be used as Ethernet - RS485 converters 20 devices are intended to be used as Ethernet - RS485 converters
21   21  
22 - Duckbill SPI/Duckbill 2 SPI: not sold separately, but used 22 - Duckbill SPI/Duckbill 2 SPI: not sold separately, but used
23 in I2SE's development kits for Green PHY HomePlug Powerline 23 in I2SE's development kits for Green PHY HomePlug Powerline
24 communication 24 communication
25   25  
26 Signed-off-by: Michael Heimpold <mhei@heimpold.de> 26 Signed-off-by: Michael Heimpold <mhei@heimpold.de>
27 Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com> 27 Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com>
28 --- 28 ---
29 arch/arm/mach-imx/mxs/Kconfig | 5 + 29 arch/arm/Kconfig | 9 +-
30 board/i2se/duckbill/Kconfig | 15 +++ 30 board/i2se/duckbill/Kconfig | 15 +++
31 board/i2se/duckbill/MAINTAINERS | 6 ++ 31 board/i2se/duckbill/MAINTAINERS | 6 ++
32 board/i2se/duckbill/Makefile | 10 ++ 32 board/i2se/duckbill/Makefile | 12 +++
33 board/i2se/duckbill/duckbill.c | 186 ++++++++++++++++++++++++++++++++ 33 board/i2se/duckbill/duckbill.c | 181 ++++++++++++++++++++++++++++++++++++
34 board/i2se/duckbill/iomux.c | 156 +++++++++++++++++++++++++++ 34 board/i2se/duckbill/iomux.c | 157 +++++++++++++++++++++++++++++++
35 configs/duckbill_defconfig | 38 +++++++ 35 configs/duckbill_defconfig | 31 +++++++
36 include/configs/duckbill.h | 179 ++++++++++++++++++++++++++++++ 36 include/configs/duckbill.h | 199 ++++++++++++++++++++++++++++++++++++++++
37 8 files changed, 595 insertions(+) 37 8 files changed, 609 insertions(+), 1 deletion(-)
38 create mode 100644 board/i2se/duckbill/Kconfig 38 create mode 100644 board/i2se/duckbill/Kconfig
39 create mode 100644 board/i2se/duckbill/MAINTAINERS 39 create mode 100644 board/i2se/duckbill/MAINTAINERS
40 create mode 100644 board/i2se/duckbill/Makefile 40 create mode 100644 board/i2se/duckbill/Makefile
41 create mode 100644 board/i2se/duckbill/duckbill.c 41 create mode 100644 board/i2se/duckbill/duckbill.c
42 create mode 100644 board/i2se/duckbill/iomux.c 42 create mode 100644 board/i2se/duckbill/iomux.c
43 create mode 100644 configs/duckbill_defconfig 43 create mode 100644 configs/duckbill_defconfig
44 create mode 100644 include/configs/duckbill.h 44 create mode 100644 include/configs/duckbill.h
45   -  
46 diff --git a/arch/arm/mach-imx/mxs/Kconfig b/arch/arm/mach-imx/mxs/Kconfig -  
47 index 68072d5a1f..82aaa3ef76 100644 45  
48 --- a/arch/arm/mach-imx/mxs/Kconfig 46 --- a/arch/arm/Kconfig
49 +++ b/arch/arm/mach-imx/mxs/Kconfig 47 +++ b/arch/arm/Kconfig
50 @@ -50,6 +50,10 @@ config TARGET_APX4DEVKIT 48 @@ -373,6 +373,12 @@ config TARGET_MX28EVK
51 config TARGET_BG0900 49 select SUPPORT_SPL
52 bool "Support bg0900" 50 select BOARD_EARLY_INIT_F
53 51
54 +config TARGET_DUCKBILL 52 +config TARGET_DUCKBILL
55 + bool "Support duckbill" 53 + bool "Support duckbill"
-   54 + select CPU_ARM926EJS
-   55 + select SUPPORT_SPL
56 + select BOARD_EARLY_INIT_F 56 + select BOARD_EARLY_INIT_F
57 + 57 +
58 config TARGET_MX28EVK 58 config TARGET_MX23_OLINUXINO
59 bool "Support mx28evk" 59 bool "Support mx23_olinuxino"
60 select BOARD_EARLY_INIT_F 60 select CPU_ARM926EJS
61 @@ -67,6 +71,7 @@ config SYS_SOC 61 @@ -1250,6 +1256,7 @@ source "board/gumstix/pepper/Kconfig"
62 -  
-   62 source "board/h2200/Kconfig"
63 source "board/bluegiga/apx4devkit/Kconfig" 63 source "board/hisilicon/hikey/Kconfig"
64 source "board/freescale/mx28evk/Kconfig" 64 source "board/hisilicon/poplar/Kconfig"
65 +source "board/i2se/duckbill/Kconfig" 65 +source "board/i2se/duckbill/Kconfig"
66 source "board/ppcag/bg0900/Kconfig" 66 source "board/imx31_phycore/Kconfig"
67 source "board/schulercontrol/sc_sps_1/Kconfig" 67 source "board/isee/igep003x/Kconfig"
68 source "board/technologic/ts4600/Kconfig" 68 source "board/olimex/mx23_olinuxino/Kconfig"
69 diff --git a/board/i2se/duckbill/Kconfig b/board/i2se/duckbill/Kconfig 69 @@ -1279,7 +1286,7 @@ source "arch/arm/Kconfig.debug"
-   70 endmenu
-   71
70 new file mode 100644 72 config SPL_LDSCRIPT
-   73 - default "arch/arm/cpu/arm926ejs/mxs/u-boot-spl.lds" if TARGET_APX4DEVKIT || TARGET_BG0900 || TARGET_M28EVK || TARGET_MX23_OLINUXINO || TARGET_MX23EVK || TARGET_MX28EVK || TARGET_SANSA_FUZE_PLUS || TARGET_SC_SPS_1 || TARGET_TS4600 || TARGET_XFI3
71 index 0000000000..98c1e4689f 74 + default "arch/arm/cpu/arm926ejs/mxs/u-boot-spl.lds" if TARGET_APX4DEVKIT || TARGET_BG0900 || TARGET_M28EVK || TARGET_MX23_OLINUXINO || TARGET_MX23EVK || TARGET_MX28EVK || TARGET_DUCKBILL || TARGET_SANSA_FUZE_PLUS || TARGET_SC_SPS_1 || TARGET_TS4600 || TARGET_XFI3
-   75 default "arch/arm/cpu/arm1136/u-boot-spl.lds" if CPU_ARM1136
-   76 default "arch/arm/cpu/armv8/u-boot-spl.lds" if ARM64
-   77
72 --- /dev/null 78 --- /dev/null
73 +++ b/board/i2se/duckbill/Kconfig 79 +++ b/board/i2se/duckbill/Kconfig
74 @@ -0,0 +1,15 @@ 80 @@ -0,0 +1,15 @@
75 +if TARGET_DUCKBILL 81 +if TARGET_DUCKBILL
76 + 82 +
77 +config SYS_BOARD 83 +config SYS_BOARD
78 + default "duckbill" 84 + default "duckbill"
79 + 85 +
80 +config SYS_VENDOR 86 +config SYS_VENDOR
81 + default "i2se" 87 + default "i2se"
82 + 88 +
83 +config SYS_SOC 89 +config SYS_SOC
84 + default "mxs" 90 + default "mxs"
85 + 91 +
86 +config SYS_CONFIG_NAME 92 +config SYS_CONFIG_NAME
87 + default "duckbill" 93 + default "duckbill"
88 + 94 +
89 +endif 95 +endif
90 diff --git a/board/i2se/duckbill/MAINTAINERS b/board/i2se/duckbill/MAINTAINERS -  
91 new file mode 100644 -  
92 index 0000000000..5496baa330 -  
93 --- /dev/null 96 --- /dev/null
94 +++ b/board/i2se/duckbill/MAINTAINERS 97 +++ b/board/i2se/duckbill/MAINTAINERS
95 @@ -0,0 +1,6 @@ 98 @@ -0,0 +1,6 @@
96 +I2SE DUCKBILL BOARD 99 +I2SE DUCKBILL BOARD
97 +M: Michael Heimpold <mhei@heimpold.de> 100 +M: Michael Heimpold <mhei@heimpold.de>
98 +S: Maintained 101 +S: Maintained
99 +F: board/i2se/duckbill/ 102 +F: board/i2se/duckbill/
100 +F: include/configs/duckbill.h 103 +F: include/configs/duckbill.h
101 +F: configs/duckbill_defconfig 104 +F: configs/duckbill_defconfig
102 diff --git a/board/i2se/duckbill/Makefile b/board/i2se/duckbill/Makefile -  
103 new file mode 100644 -  
104 index 0000000000..0079eb413c -  
105 --- /dev/null 105 --- /dev/null
106 +++ b/board/i2se/duckbill/Makefile 106 +++ b/board/i2se/duckbill/Makefile
107 @@ -0,0 +1,10 @@ 107 @@ -0,0 +1,12 @@
108 +# SPDX-License-Identifier: GPL-2.0+ -  
109 +# 108 +#
110 +# (C) Copyright 2014-2019 109 +# (C) Copyright 2014-2017
111 +# Michael Heimpold, mhei@heimpold.de. 110 +# Michael Heimpold, mhei@heimpold.de.
-   111 +#
-   112 +# SPDX-License-Identifier: GPL-2.0+
-   113 +#
112 + 114 +
113 +ifndef CONFIG_SPL_BUILD 115 +ifndef CONFIG_SPL_BUILD
114 +obj-y := duckbill.o 116 +obj-y := duckbill.o
115 +else 117 +else
116 +obj-y := iomux.o 118 +obj-y := iomux.o
117 +endif 119 +endif
118 diff --git a/board/i2se/duckbill/duckbill.c b/board/i2se/duckbill/duckbill.c -  
119 new file mode 100644 -  
120 index 0000000000..f93c372611 -  
121 --- /dev/null 120 --- /dev/null
122 +++ b/board/i2se/duckbill/duckbill.c 121 +++ b/board/i2se/duckbill/duckbill.c
123 @@ -0,0 +1,186 @@ 122 @@ -0,0 +1,181 @@
124 +// SPDX-License-Identifier: GPL-2.0+ -  
125 +/* 123 +/*
126 + * I2SE Duckbill board 124 + * I2SE Duckbill board
127 + * 125 + *
128 + * (C) Copyright 2014-2019 Michael Heimpold <mhei@heimpold.de> 126 + * (C) Copyright 2014-2017 Michael Heimpold <mhei@heimpold.de>
-   127 + *
-   128 + * SPDX-License-Identifier: GPL-2.0+
129 + */ 129 + */
130 + 130 +
131 +#include <common.h> 131 +#include <common.h>
132 +#include <asm/gpio.h> 132 +#include <asm/gpio.h>
133 +#include <asm/io.h> 133 +#include <asm/io.h>
134 +#include <asm/arch/imx-regs.h> 134 +#include <asm/arch/imx-regs.h>
135 +#include <asm/arch/iomux-mx28.h> 135 +#include <asm/arch/iomux-mx28.h>
136 +#include <asm/arch/clock.h> 136 +#include <asm/arch/clock.h>
137 +#include <asm/arch/sys_proto.h> 137 +#include <asm/arch/sys_proto.h>
138 +#include <asm/setup.h> 138 +#include <asm/setup.h>
139 +#include <fdt_support.h> 139 +#include <fdt_support.h>
140 +#include <linux/mii.h> 140 +#include <linux/mii.h>
141 +#include <miiphy.h> 141 +#include <miiphy.h>
142 +#include <netdev.h> 142 +#include <netdev.h>
143 +#include <errno.h> 143 +#include <errno.h>
144 +#include <fuse.h> 144 +#include <fuse.h>
145 + 145 +
146 +DECLARE_GLOBAL_DATA_PTR; 146 +DECLARE_GLOBAL_DATA_PTR;
147 + 147 +
148 +static u32 system_rev; 148 +static u32 system_rev;
149 +static u32 serialno; 149 +static u32 serialno;
150 + 150 +
151 +/* 151 +/*
152 + * Functions 152 + * Functions
153 + */ 153 + */
154 +int board_early_init_f(void) 154 +int board_early_init_f(void)
155 +{ 155 +{
156 + /* IO0 clock at 480MHz */ 156 + /* IO0 clock at 480MHz */
157 + mxs_set_ioclk(MXC_IOCLK0, 480000); 157 + mxs_set_ioclk(MXC_IOCLK0, 480000);
158 + /* IO1 clock at 480MHz */ 158 + /* IO1 clock at 480MHz */
159 + mxs_set_ioclk(MXC_IOCLK1, 480000); 159 + mxs_set_ioclk(MXC_IOCLK1, 480000);
160 + 160 +
161 + /* SSP0 clock at 96MHz */ 161 + /* SSP0 clock at 96MHz */
162 + mxs_set_sspclk(MXC_SSPCLK0, 96000, 0); 162 + mxs_set_sspclk(MXC_SSPCLK0, 96000, 0);
163 + 163 +
164 + return 0; 164 + return 0;
165 +} 165 +}
166 + 166 +
167 +int dram_init(void) 167 +int dram_init(void)
168 +{ 168 +{
169 + return mxs_dram_init(); 169 + return mxs_dram_init();
170 +} 170 +}
171 + 171 +
172 +int board_init(void) 172 +int board_init(void)
173 +{ 173 +{
174 + /* Adress of boot parameters */ 174 + /* Adress of boot parameters */
175 + gd->bd->bi_boot_params = PHYS_SDRAM_1 + 0x100; 175 + gd->bd->bi_boot_params = PHYS_SDRAM_1 + 0x100;
176 + 176 +
177 + return 0; 177 + return 0;
178 +} 178 +}
179 + 179 +
180 +#ifdef CONFIG_CMD_MMC 180 +#ifdef CONFIG_CMD_MMC
181 +int board_mmc_init(bd_t *bis) 181 +int board_mmc_init(bd_t *bis)
182 +{ 182 +{
183 + return mxsmmc_initialize(bis, 0, NULL, NULL); 183 + return mxsmmc_initialize(bis, 0, NULL, NULL);
184 +} 184 +}
185 +#endif 185 +#endif
186 + 186 +
187 +#ifdef CONFIG_CMD_NET 187 +#ifdef CONFIG_CMD_NET
188 +int board_eth_init(bd_t *bis) 188 +int board_eth_init(bd_t *bis)
189 +{ 189 +{
190 + unsigned int reset_gpio; 190 + unsigned int reset_gpio;
191 + int ret; 191 + int ret;
192 + 192 +
193 + ret = cpu_eth_init(bis); 193 + ret = cpu_eth_init(bis);
194 + 194 +
195 + if (system_rev == 1) 195 + if (system_rev == 1)
196 + reset_gpio = MX28_PAD_SSP0_DATA7__GPIO_2_7; 196 + reset_gpio = MX28_PAD_SSP0_DATA7__GPIO_2_7;
197 + else 197 + else
198 + reset_gpio = MX28_PAD_GPMI_ALE__GPIO_0_26; 198 + reset_gpio = MX28_PAD_GPMI_ALE__GPIO_0_26;
199 + 199 +
200 + /* Reset PHY */ 200 + /* Reset PHY */
201 + gpio_direction_output(reset_gpio, 0); 201 + gpio_direction_output(reset_gpio, 0);
202 + udelay(200); 202 + udelay(200);
203 + gpio_set_value(reset_gpio, 1); 203 + gpio_set_value(reset_gpio, 1);
204 + 204 +
205 + /* give PHY some time to get out of the reset */ 205 + /* give PHY some time to get out of the reset */
206 + udelay(10000); 206 + udelay(10000);
207 + 207 +
208 + ret = fecmxc_initialize_multi(bis, 0, 0, MXS_ENET0_BASE); 208 + ret = fecmxc_initialize(bis);
209 + if (ret) { 209 + if (ret) {
210 + puts("FEC MXS: Unable to init FEC\n"); 210 + puts("FEC MXS: Unable to init FEC\n");
211 + return ret; 211 + return ret;
212 + } 212 + }
213 + 213 +
214 + return ret; 214 + return ret;
215 +} 215 +}
216 + 216 +
217 +void mx28_adjust_mac(int dev_id, unsigned char *mac) 217 +void mx28_adjust_mac(int dev_id, unsigned char *mac)
218 +{ 218 +{
219 + mac[0] = 0x00; 219 + mac[0] = 0x00;
220 + mac[1] = 0x01; 220 + mac[1] = 0x01;
221 + mac[2] = 0x87; 221 + mac[2] = 0x87;
222 +} 222 +}
223 +#endif 223 +#endif
224 + 224 +
225 +#ifdef CONFIG_OF_BOARD_SETUP 225 +#ifdef CONFIG_OF_BOARD_SETUP
226 +int ft_board_setup(void *blob, bd_t *bd) 226 +int ft_board_setup(void *blob, bd_t *bd)
227 +{ 227 +{
228 + uint8_t enetaddr[6]; 228 + uint8_t enetaddr[6];
229 + u32 mac = 0; 229 + u32 mac = 0;
230 + 230 +
-   231 + enetaddr[0] = 0x00;
-   232 + enetaddr[1] = 0x01;
-   233 + enetaddr[2] = 0x87;
-   234 +
231 +#ifdef CONFIG_MXS_OCOTP 235 +#ifdef CONFIG_MXS_OCOTP
232 + /* only Duckbill SPI has a MAC for the QCA7k */ 236 + /* only Duckbill SPI has a MAC for the QCA7k */
233 + fuse_read(0, 1, &mac); 237 + fuse_read(0, 1, &mac);
234 +#endif 238 +#endif
235 + 239 +
236 + if (mac != 0) { 240 + if (mac != 0) {
237 + enetaddr[0] = 0x00; -  
238 + enetaddr[1] = 0x01; -  
239 + enetaddr[2] = 0x87; -  
240 + enetaddr[3] = (mac >> 16) & 0xff; 241 + enetaddr[3] = (mac >> 16) & 0xff;
241 + enetaddr[4] = (mac >> 8) & 0xff; 242 + enetaddr[4] = (mac >> 8) & 0xff;
242 + enetaddr[5] = mac & 0xff; 243 + enetaddr[5] = mac & 0xff;
243 + 244 +
244 + fdt_find_and_setprop(blob, "spi1/ethernet@0", 245 + fdt_find_and_setprop(blob,
-   246 + "/apb@80000000/apbh@80000000/ssp@80014000/ethernet@0",
245 + "local-mac-address", enetaddr, 6, 1); 247 + "local-mac-address", enetaddr, 6, 1);
246 + } 248 + }
247 + 249 +
248 + return 0; 250 + return 0;
249 +} 251 +}
250 +#endif 252 +#endif
251 + 253 +
252 +#ifdef CONFIG_REVISION_TAG 254 +#ifdef CONFIG_REVISION_TAG
253 +u32 get_board_rev(void) 255 +u32 get_board_rev(void)
254 +{ 256 +{
255 + return system_rev; 257 + return system_rev;
256 +} 258 +}
257 +#endif 259 +#endif
258 + 260 +
259 +#ifdef CONFIG_SERIAL_TAG 261 +#ifdef CONFIG_SERIAL_TAG
260 +void get_board_serial(struct tag_serialnr *serialnr) 262 +void get_board_serial(struct tag_serialnr *serialnr)
261 +{ 263 +{
262 + serialnr->low = serialno; 264 + serialnr->low = serialno;
263 + serialnr->high = 0; 265 + serialnr->high = 0;
264 +} 266 +}
265 +#endif 267 +#endif
266 + 268 +
267 +int misc_init_r(void) 269 +int misc_init_r(void)
268 +{ 270 +{
269 + unsigned int led_red_gpio; 271 + unsigned int led_red_gpio;
270 + char *s; 272 + char *s;
271 + 273 +
272 + /* Board revision detection */ 274 + /* Board revision detection */
273 + gpio_direction_input(MX28_PAD_LCD_D17__GPIO_1_17); 275 + gpio_direction_input(MX28_PAD_LCD_D17__GPIO_1_17);
274 + 276 +
275 + /* MX28_PAD_LCD_D17__GPIO_1_17: v1 = pull-down, v2 = pull-up */ 277 + /* MX28_PAD_LCD_D17__GPIO_1_17: v1 = pull-down, v2 = pull-up */
276 + system_rev = 278 + system_rev =
277 + gpio_get_value(MX28_PAD_LCD_D17__GPIO_1_17); 279 + gpio_get_value(MX28_PAD_LCD_D17__GPIO_1_17);
278 + system_rev += 1; 280 + system_rev += 1;
279 + 281 +
280 + /* guess DT blob if not set in environment */ -  
281 + if (!env_get("fdt_file")) { -  
282 + if (system_rev == 1) -  
283 + env_set("fdt_file", "imx28-duckbill.dtb"); -  
284 + else -  
285 + env_set("fdt_file", "imx28-duckbill-2.dtb"); -  
286 + } -  
287 + -  
288 + /* enable red LED to indicate a running bootloader */ 282 + /* enable red LED to indicate a running bootloader */
289 + if (system_rev == 1) 283 + if (system_rev == 1)
290 + led_red_gpio = MX28_PAD_AUART1_RX__GPIO_3_4; 284 + led_red_gpio = MX28_PAD_AUART1_RX__GPIO_3_4;
291 + else 285 + else
292 + led_red_gpio = MX28_PAD_SAIF0_LRCLK__GPIO_3_21; 286 + led_red_gpio = MX28_PAD_SAIF0_LRCLK__GPIO_3_21;
293 + gpio_direction_output(led_red_gpio, 1); 287 + gpio_direction_output(led_red_gpio, 1);
294 + 288 +
295 + if (system_rev == 1) 289 + if (system_rev == 1)
296 + puts("Board: I2SE Duckbill\n"); 290 + puts("Board: I2SE Duckbill\n");
297 + else 291 + else
298 + puts("Board: I2SE Duckbill 2\n"); 292 + puts("Board: I2SE Duckbill 2\n");
299 + 293 +
300 + serialno = env_get_ulong("serial#", 10, 0); 294 + serialno = env_get_ulong("serial#", 10, 0);
301 + s = env_get("serial#"); 295 + s = env_get("serial#");
302 + if (s && s[0]) { 296 + if (s && s[0]) {
303 + puts("Serial: "); 297 + puts("Serial: ");
304 + puts(s); 298 + puts(s);
305 + putc('\n'); 299 + putc('\n');
306 + } 300 + }
307 + 301 +
308 + return 0; 302 + return 0;
309 +} 303 +}
310 diff --git a/board/i2se/duckbill/iomux.c b/board/i2se/duckbill/iomux.c -  
311 new file mode 100644 -  
312 index 0000000000..1db3c52c34 -  
313 --- /dev/null 304 --- /dev/null
314 +++ b/board/i2se/duckbill/iomux.c 305 +++ b/board/i2se/duckbill/iomux.c
315 @@ -0,0 +1,156 @@ 306 @@ -0,0 +1,157 @@
316 +// SPDX-License-Identifier: GPL-2.0+ -  
317 +/* 307 +/*
318 + * I2SE Duckbill IOMUX setup 308 + * I2SE Duckbill IOMUX setup
319 + * 309 + *
320 + * Copyright (C) 2013-2019 Michael Heimpold <mhei@heimpold.de> 310 + * Copyright (C) 2013-2017 Michael Heimpold <mhei@heimpold.de>
-   311 + *
-   312 + * SPDX-License-Identifier: GPL-2.0+
321 + */ 313 + */
322 + 314 +
323 +#include <common.h> 315 +#include <common.h>
324 +#include <config.h> 316 +#include <config.h>
325 +#include <asm/io.h> 317 +#include <asm/io.h>
326 +#include <asm/gpio.h> 318 +#include <asm/gpio.h>
327 +#include <asm/arch/iomux-mx28.h> 319 +#include <asm/arch/iomux-mx28.h>
328 +#include <asm/arch/imx-regs.h> 320 +#include <asm/arch/imx-regs.h>
329 +#include <asm/arch/sys_proto.h> 321 +#include <asm/arch/sys_proto.h>
330 + 322 +
331 +#define MUX_CONFIG_SSP0 (MXS_PAD_3V3 | MXS_PAD_8MA | MXS_PAD_PULLUP) 323 +#define MUX_CONFIG_SSP0 (MXS_PAD_3V3 | MXS_PAD_8MA | MXS_PAD_PULLUP)
332 +#define MUX_CONFIG_ENET (MXS_PAD_3V3 | MXS_PAD_8MA | MXS_PAD_PULLUP) 324 +#define MUX_CONFIG_ENET (MXS_PAD_3V3 | MXS_PAD_8MA | MXS_PAD_PULLUP)
333 +#define MUX_CONFIG_EMI (MXS_PAD_3V3 | MXS_PAD_12MA | MXS_PAD_NOPULL) 325 +#define MUX_CONFIG_EMI (MXS_PAD_3V3 | MXS_PAD_12MA | MXS_PAD_NOPULL)
334 + 326 +
335 +/* For all revisions */ 327 +/* For all revisions */
336 +const iomux_cfg_t iomux_setup[] = { 328 +const iomux_cfg_t iomux_setup[] = {
337 + /* DUART */ 329 + /* DUART */
338 + MX28_PAD_PWM0__DUART_RX, 330 + MX28_PAD_PWM0__DUART_RX,
339 + MX28_PAD_PWM1__DUART_TX, 331 + MX28_PAD_PWM1__DUART_TX,
340 + 332 +
341 + /* eMMC (v2) or SD card (v1) */ 333 + /* eMMC (v2) or SD card (v1) */
342 + MX28_PAD_SSP0_DATA0__SSP0_D0 | MUX_CONFIG_SSP0, 334 + MX28_PAD_SSP0_DATA0__SSP0_D0 | MUX_CONFIG_SSP0,
343 + MX28_PAD_SSP0_DATA1__SSP0_D1 | MUX_CONFIG_SSP0, 335 + MX28_PAD_SSP0_DATA1__SSP0_D1 | MUX_CONFIG_SSP0,
344 + MX28_PAD_SSP0_DATA2__SSP0_D2 | MUX_CONFIG_SSP0, 336 + MX28_PAD_SSP0_DATA2__SSP0_D2 | MUX_CONFIG_SSP0,
345 + MX28_PAD_SSP0_DATA3__SSP0_D3 | MUX_CONFIG_SSP0, 337 + MX28_PAD_SSP0_DATA3__SSP0_D3 | MUX_CONFIG_SSP0,
346 + MX28_PAD_SSP0_CMD__SSP0_CMD | MUX_CONFIG_SSP0, 338 + MX28_PAD_SSP0_CMD__SSP0_CMD | MUX_CONFIG_SSP0,
347 + MX28_PAD_SSP0_DETECT__SSP0_CARD_DETECT | 339 + MX28_PAD_SSP0_DETECT__SSP0_CARD_DETECT |
348 + (MXS_PAD_8MA | MXS_PAD_3V3 | MXS_PAD_NOPULL), 340 + (MXS_PAD_8MA | MXS_PAD_3V3 | MXS_PAD_NOPULL),
349 + MX28_PAD_SSP0_SCK__SSP0_SCK | 341 + MX28_PAD_SSP0_SCK__SSP0_SCK |
350 + (MXS_PAD_12MA | MXS_PAD_3V3 | MXS_PAD_NOPULL), 342 + (MXS_PAD_12MA | MXS_PAD_3V3 | MXS_PAD_NOPULL),
351 + 343 +
352 + /* Ethernet */ 344 + /* Ethernet */
353 + MX28_PAD_ENET0_MDC__ENET0_MDC | MUX_CONFIG_ENET, 345 + MX28_PAD_ENET0_MDC__ENET0_MDC | MUX_CONFIG_ENET,
354 + MX28_PAD_ENET0_MDIO__ENET0_MDIO | MUX_CONFIG_ENET, 346 + MX28_PAD_ENET0_MDIO__ENET0_MDIO | MUX_CONFIG_ENET,
355 + MX28_PAD_ENET0_RX_EN__ENET0_RX_EN | MUX_CONFIG_ENET, 347 + MX28_PAD_ENET0_RX_EN__ENET0_RX_EN | MUX_CONFIG_ENET,
356 + MX28_PAD_ENET0_TX_EN__ENET0_TX_EN | MUX_CONFIG_ENET, 348 + MX28_PAD_ENET0_TX_EN__ENET0_TX_EN | MUX_CONFIG_ENET,
357 + MX28_PAD_ENET0_RXD0__ENET0_RXD0 | MUX_CONFIG_ENET, 349 + MX28_PAD_ENET0_RXD0__ENET0_RXD0 | MUX_CONFIG_ENET,
358 + MX28_PAD_ENET0_RXD1__ENET0_RXD1 | MUX_CONFIG_ENET, 350 + MX28_PAD_ENET0_RXD1__ENET0_RXD1 | MUX_CONFIG_ENET,
359 + MX28_PAD_ENET0_TXD0__ENET0_TXD0 | MUX_CONFIG_ENET, 351 + MX28_PAD_ENET0_TXD0__ENET0_TXD0 | MUX_CONFIG_ENET,
360 + MX28_PAD_ENET0_TXD1__ENET0_TXD1 | MUX_CONFIG_ENET, 352 + MX28_PAD_ENET0_TXD1__ENET0_TXD1 | MUX_CONFIG_ENET,
361 + MX28_PAD_ENET_CLK__CLKCTRL_ENET | MUX_CONFIG_ENET, 353 + MX28_PAD_ENET_CLK__CLKCTRL_ENET | MUX_CONFIG_ENET,
362 + 354 +
363 + /* EMI */ 355 + /* EMI */
364 + MX28_PAD_EMI_D00__EMI_DATA0 | MUX_CONFIG_EMI, 356 + MX28_PAD_EMI_D00__EMI_DATA0 | MUX_CONFIG_EMI,
365 + MX28_PAD_EMI_D01__EMI_DATA1 | MUX_CONFIG_EMI, 357 + MX28_PAD_EMI_D01__EMI_DATA1 | MUX_CONFIG_EMI,
366 + MX28_PAD_EMI_D02__EMI_DATA2 | MUX_CONFIG_EMI, 358 + MX28_PAD_EMI_D02__EMI_DATA2 | MUX_CONFIG_EMI,
367 + MX28_PAD_EMI_D03__EMI_DATA3 | MUX_CONFIG_EMI, 359 + MX28_PAD_EMI_D03__EMI_DATA3 | MUX_CONFIG_EMI,
368 + MX28_PAD_EMI_D04__EMI_DATA4 | MUX_CONFIG_EMI, 360 + MX28_PAD_EMI_D04__EMI_DATA4 | MUX_CONFIG_EMI,
369 + MX28_PAD_EMI_D05__EMI_DATA5 | MUX_CONFIG_EMI, 361 + MX28_PAD_EMI_D05__EMI_DATA5 | MUX_CONFIG_EMI,
370 + MX28_PAD_EMI_D06__EMI_DATA6 | MUX_CONFIG_EMI, 362 + MX28_PAD_EMI_D06__EMI_DATA6 | MUX_CONFIG_EMI,
371 + MX28_PAD_EMI_D07__EMI_DATA7 | MUX_CONFIG_EMI, 363 + MX28_PAD_EMI_D07__EMI_DATA7 | MUX_CONFIG_EMI,
372 + MX28_PAD_EMI_D08__EMI_DATA8 | MUX_CONFIG_EMI, 364 + MX28_PAD_EMI_D08__EMI_DATA8 | MUX_CONFIG_EMI,
373 + MX28_PAD_EMI_D09__EMI_DATA9 | MUX_CONFIG_EMI, 365 + MX28_PAD_EMI_D09__EMI_DATA9 | MUX_CONFIG_EMI,
374 + MX28_PAD_EMI_D10__EMI_DATA10 | MUX_CONFIG_EMI, 366 + MX28_PAD_EMI_D10__EMI_DATA10 | MUX_CONFIG_EMI,
375 + MX28_PAD_EMI_D11__EMI_DATA11 | MUX_CONFIG_EMI, 367 + MX28_PAD_EMI_D11__EMI_DATA11 | MUX_CONFIG_EMI,
376 + MX28_PAD_EMI_D12__EMI_DATA12 | MUX_CONFIG_EMI, 368 + MX28_PAD_EMI_D12__EMI_DATA12 | MUX_CONFIG_EMI,
377 + MX28_PAD_EMI_D13__EMI_DATA13 | MUX_CONFIG_EMI, 369 + MX28_PAD_EMI_D13__EMI_DATA13 | MUX_CONFIG_EMI,
378 + MX28_PAD_EMI_D14__EMI_DATA14 | MUX_CONFIG_EMI, 370 + MX28_PAD_EMI_D14__EMI_DATA14 | MUX_CONFIG_EMI,
379 + MX28_PAD_EMI_D15__EMI_DATA15 | MUX_CONFIG_EMI, 371 + MX28_PAD_EMI_D15__EMI_DATA15 | MUX_CONFIG_EMI,
380 + MX28_PAD_EMI_ODT0__EMI_ODT0 | MUX_CONFIG_EMI, 372 + MX28_PAD_EMI_ODT0__EMI_ODT0 | MUX_CONFIG_EMI,
381 + MX28_PAD_EMI_DQM0__EMI_DQM0 | MUX_CONFIG_EMI, 373 + MX28_PAD_EMI_DQM0__EMI_DQM0 | MUX_CONFIG_EMI,
382 + MX28_PAD_EMI_ODT1__EMI_ODT1 | MUX_CONFIG_EMI, 374 + MX28_PAD_EMI_ODT1__EMI_ODT1 | MUX_CONFIG_EMI,
383 + MX28_PAD_EMI_DQM1__EMI_DQM1 | MUX_CONFIG_EMI, 375 + MX28_PAD_EMI_DQM1__EMI_DQM1 | MUX_CONFIG_EMI,
384 + MX28_PAD_EMI_DDR_OPEN_FB__EMI_DDR_OPEN_FEEDBACK | MUX_CONFIG_EMI, 376 + MX28_PAD_EMI_DDR_OPEN_FB__EMI_DDR_OPEN_FEEDBACK | MUX_CONFIG_EMI,
385 + MX28_PAD_EMI_CLK__EMI_CLK | MUX_CONFIG_EMI, 377 + MX28_PAD_EMI_CLK__EMI_CLK | MUX_CONFIG_EMI,
386 + MX28_PAD_EMI_DQS0__EMI_DQS0 | MUX_CONFIG_EMI, 378 + MX28_PAD_EMI_DQS0__EMI_DQS0 | MUX_CONFIG_EMI,
387 + MX28_PAD_EMI_DQS1__EMI_DQS1 | MUX_CONFIG_EMI, 379 + MX28_PAD_EMI_DQS1__EMI_DQS1 | MUX_CONFIG_EMI,
388 + MX28_PAD_EMI_DDR_OPEN__EMI_DDR_OPEN | MUX_CONFIG_EMI, 380 + MX28_PAD_EMI_DDR_OPEN__EMI_DDR_OPEN | MUX_CONFIG_EMI,
389 + 381 +
390 + MX28_PAD_EMI_A00__EMI_ADDR0 | MUX_CONFIG_EMI, 382 + MX28_PAD_EMI_A00__EMI_ADDR0 | MUX_CONFIG_EMI,
391 + MX28_PAD_EMI_A01__EMI_ADDR1 | MUX_CONFIG_EMI, 383 + MX28_PAD_EMI_A01__EMI_ADDR1 | MUX_CONFIG_EMI,
392 + MX28_PAD_EMI_A02__EMI_ADDR2 | MUX_CONFIG_EMI, 384 + MX28_PAD_EMI_A02__EMI_ADDR2 | MUX_CONFIG_EMI,
393 + MX28_PAD_EMI_A03__EMI_ADDR3 | MUX_CONFIG_EMI, 385 + MX28_PAD_EMI_A03__EMI_ADDR3 | MUX_CONFIG_EMI,
394 + MX28_PAD_EMI_A04__EMI_ADDR4 | MUX_CONFIG_EMI, 386 + MX28_PAD_EMI_A04__EMI_ADDR4 | MUX_CONFIG_EMI,
395 + MX28_PAD_EMI_A05__EMI_ADDR5 | MUX_CONFIG_EMI, 387 + MX28_PAD_EMI_A05__EMI_ADDR5 | MUX_CONFIG_EMI,
396 + MX28_PAD_EMI_A06__EMI_ADDR6 | MUX_CONFIG_EMI, 388 + MX28_PAD_EMI_A06__EMI_ADDR6 | MUX_CONFIG_EMI,
397 + MX28_PAD_EMI_A07__EMI_ADDR7 | MUX_CONFIG_EMI, 389 + MX28_PAD_EMI_A07__EMI_ADDR7 | MUX_CONFIG_EMI,
398 + MX28_PAD_EMI_A08__EMI_ADDR8 | MUX_CONFIG_EMI, 390 + MX28_PAD_EMI_A08__EMI_ADDR8 | MUX_CONFIG_EMI,
399 + MX28_PAD_EMI_A09__EMI_ADDR9 | MUX_CONFIG_EMI, 391 + MX28_PAD_EMI_A09__EMI_ADDR9 | MUX_CONFIG_EMI,
400 + MX28_PAD_EMI_A10__EMI_ADDR10 | MUX_CONFIG_EMI, 392 + MX28_PAD_EMI_A10__EMI_ADDR10 | MUX_CONFIG_EMI,
401 + MX28_PAD_EMI_A11__EMI_ADDR11 | MUX_CONFIG_EMI, 393 + MX28_PAD_EMI_A11__EMI_ADDR11 | MUX_CONFIG_EMI,
402 + MX28_PAD_EMI_A12__EMI_ADDR12 | MUX_CONFIG_EMI, 394 + MX28_PAD_EMI_A12__EMI_ADDR12 | MUX_CONFIG_EMI,
403 + MX28_PAD_EMI_A13__EMI_ADDR13 | MUX_CONFIG_EMI, 395 + MX28_PAD_EMI_A13__EMI_ADDR13 | MUX_CONFIG_EMI,
404 + MX28_PAD_EMI_A14__EMI_ADDR14 | MUX_CONFIG_EMI, 396 + MX28_PAD_EMI_A14__EMI_ADDR14 | MUX_CONFIG_EMI,
405 + MX28_PAD_EMI_BA0__EMI_BA0 | MUX_CONFIG_EMI, 397 + MX28_PAD_EMI_BA0__EMI_BA0 | MUX_CONFIG_EMI,
406 + MX28_PAD_EMI_BA1__EMI_BA1 | MUX_CONFIG_EMI, 398 + MX28_PAD_EMI_BA1__EMI_BA1 | MUX_CONFIG_EMI,
407 + MX28_PAD_EMI_BA2__EMI_BA2 | MUX_CONFIG_EMI, 399 + MX28_PAD_EMI_BA2__EMI_BA2 | MUX_CONFIG_EMI,
408 + MX28_PAD_EMI_CASN__EMI_CASN | MUX_CONFIG_EMI, 400 + MX28_PAD_EMI_CASN__EMI_CASN | MUX_CONFIG_EMI,
409 + MX28_PAD_EMI_RASN__EMI_RASN | MUX_CONFIG_EMI, 401 + MX28_PAD_EMI_RASN__EMI_RASN | MUX_CONFIG_EMI,
410 + MX28_PAD_EMI_WEN__EMI_WEN | MUX_CONFIG_EMI, 402 + MX28_PAD_EMI_WEN__EMI_WEN | MUX_CONFIG_EMI,
411 + MX28_PAD_EMI_CE0N__EMI_CE0N | MUX_CONFIG_EMI, 403 + MX28_PAD_EMI_CE0N__EMI_CE0N | MUX_CONFIG_EMI,
412 + MX28_PAD_EMI_CE1N__EMI_CE1N | MUX_CONFIG_EMI, 404 + MX28_PAD_EMI_CE1N__EMI_CE1N | MUX_CONFIG_EMI,
413 + MX28_PAD_EMI_CKE__EMI_CKE | MUX_CONFIG_EMI, 405 + MX28_PAD_EMI_CKE__EMI_CKE | MUX_CONFIG_EMI,
414 + 406 +
415 + /* Revision pin(s) */ 407 + /* Revision pin(s) */
416 + MX28_PAD_LCD_D17__GPIO_1_17, 408 + MX28_PAD_LCD_D17__GPIO_1_17,
417 +}; 409 +};
418 + 410 +
419 +/* For revision 1 only */ 411 +/* For revision 1 only */
420 +const iomux_cfg_t iomux_setup_v1[] = { 412 +const iomux_cfg_t iomux_setup_v1[] = {
421 + /* PHY reset */ 413 + /* PHY reset */
422 + MX28_PAD_SSP0_DATA7__GPIO_2_7 | 414 + MX28_PAD_SSP0_DATA7__GPIO_2_7 |
423 + (MXS_PAD_4MA | MXS_PAD_3V3 | MXS_PAD_PULLUP), 415 + (MXS_PAD_4MA | MXS_PAD_3V3 | MXS_PAD_PULLUP),
424 + 416 +
425 + /* LEDs */ 417 + /* LEDs */
426 + MX28_PAD_AUART1_RX__GPIO_3_4, 418 + MX28_PAD_AUART1_RX__GPIO_3_4,
427 + MX28_PAD_AUART1_TX__GPIO_3_5, 419 + MX28_PAD_AUART1_TX__GPIO_3_5,
428 +}; 420 +};
429 + 421 +
430 +/* For revision 2 only */ 422 +/* For revision 2 only */
431 +const iomux_cfg_t iomux_setup_v2[] = { 423 +const iomux_cfg_t iomux_setup_v2[] = {
432 + /* eMMC (v2) */ 424 + /* eMMC (v2) */
433 + MX28_PAD_SSP0_DATA4__SSP0_D4 | MUX_CONFIG_SSP0, 425 + MX28_PAD_SSP0_DATA4__SSP0_D4 | MUX_CONFIG_SSP0,
434 + MX28_PAD_SSP0_DATA5__SSP0_D5 | MUX_CONFIG_SSP0, 426 + MX28_PAD_SSP0_DATA5__SSP0_D5 | MUX_CONFIG_SSP0,
435 + MX28_PAD_SSP0_DATA6__SSP0_D6 | MUX_CONFIG_SSP0, 427 + MX28_PAD_SSP0_DATA6__SSP0_D6 | MUX_CONFIG_SSP0,
436 + MX28_PAD_SSP0_DATA7__SSP0_D7 | MUX_CONFIG_SSP0, 428 + MX28_PAD_SSP0_DATA7__SSP0_D7 | MUX_CONFIG_SSP0,
437 + 429 +
438 + /* PHY reset */ 430 + /* PHY reset */
439 + MX28_PAD_GPMI_ALE__GPIO_0_26 | 431 + MX28_PAD_GPMI_ALE__GPIO_0_26 |
440 + (MXS_PAD_4MA | MXS_PAD_3V3 | MXS_PAD_PULLUP), 432 + (MXS_PAD_4MA | MXS_PAD_3V3 | MXS_PAD_PULLUP),
441 + 433 +
442 + /* LEDs */ 434 + /* LEDs */
443 + MX28_PAD_SAIF0_LRCLK__GPIO_3_21, 435 + MX28_PAD_SAIF0_LRCLK__GPIO_3_21,
444 + MX28_PAD_SAIF0_MCLK__GPIO_3_20, 436 + MX28_PAD_SAIF0_MCLK__GPIO_3_20,
445 +}; 437 +};
446 + 438 +
447 +#define HW_DRAM_CTL29 (0x74 >> 2) 439 +#define HW_DRAM_CTL29 (0x74 >> 2)
448 +#define CS_MAP 0xf 440 +#define CS_MAP 0xf
449 +#define COLUMN_SIZE 0x2 441 +#define COLUMN_SIZE 0x2
450 +#define ADDR_PINS 0x1 442 +#define ADDR_PINS 0x1
451 +#define APREBIT 0xa 443 +#define APREBIT 0xa
452 + 444 +
453 +#define HW_DRAM_CTL29_CONFIG (CS_MAP << 24 | COLUMN_SIZE << 16 | \ 445 +#define HW_DRAM_CTL29_CONFIG (CS_MAP << 24 | COLUMN_SIZE << 16 | \
454 + ADDR_PINS << 8 | APREBIT) 446 + ADDR_PINS << 8 | APREBIT)
455 + 447 +
456 +void mxs_adjust_memory_params(uint32_t *dram_vals) 448 +void mxs_adjust_memory_params(uint32_t *dram_vals)
457 +{ 449 +{
458 + dram_vals[HW_DRAM_CTL29] = HW_DRAM_CTL29_CONFIG; 450 + dram_vals[HW_DRAM_CTL29] = HW_DRAM_CTL29_CONFIG;
459 +} 451 +}
460 + 452 +
461 +void board_init_ll(const uint32_t arg, const uint32_t *resptr) 453 +void board_init_ll(const uint32_t arg, const uint32_t *resptr)
462 +{ 454 +{
463 + mxs_common_spl_init(arg, resptr, iomux_setup, ARRAY_SIZE(iomux_setup)); 455 + mxs_common_spl_init(arg, resptr, iomux_setup, ARRAY_SIZE(iomux_setup));
464 + 456 +
465 + gpio_direction_input(MX28_PAD_LCD_D17__GPIO_1_17); 457 + gpio_direction_input(MX28_PAD_LCD_D17__GPIO_1_17);
466 + 458 +
467 + if (gpio_get_value(MX28_PAD_LCD_D17__GPIO_1_17)) 459 + if (gpio_get_value(MX28_PAD_LCD_D17__GPIO_1_17))
468 + mxs_iomux_setup_multiple_pads(iomux_setup_v2, ARRAY_SIZE(iomux_setup_v2)); 460 + mxs_iomux_setup_multiple_pads(iomux_setup_v2, ARRAY_SIZE(iomux_setup_v2));
469 + else 461 + else
470 + mxs_iomux_setup_multiple_pads(iomux_setup_v1, ARRAY_SIZE(iomux_setup_v1)); 462 + mxs_iomux_setup_multiple_pads(iomux_setup_v1, ARRAY_SIZE(iomux_setup_v1));
471 +} 463 +}
472 diff --git a/configs/duckbill_defconfig b/configs/duckbill_defconfig -  
473 new file mode 100644 -  
474 index 0000000000..f92a67d53d -  
475 --- /dev/null 464 --- /dev/null
476 +++ b/configs/duckbill_defconfig 465 +++ b/configs/duckbill_defconfig
477 @@ -0,0 +1,38 @@ 466 @@ -0,0 +1,31 @@
478 +CONFIG_ARM=y 467 +CONFIG_ARM=y
479 +CONFIG_ARCH_MX28=y 468 +CONFIG_TARGET_DUCKBILL=y
480 +CONFIG_SYS_TEXT_BASE=0x40002000 -  
481 +CONFIG_SPL_GPIO_SUPPORT=y 469 +CONFIG_SPL_GPIO_SUPPORT=y
482 +CONFIG_SPL_LIBCOMMON_SUPPORT=y 470 +CONFIG_SPL_LIBCOMMON_SUPPORT=y
483 +CONFIG_SPL_LIBGENERIC_SUPPORT=y 471 +CONFIG_SPL_LIBGENERIC_SUPPORT=y
484 +CONFIG_TARGET_DUCKBILL=y -  
485 +CONFIG_SPL_SERIAL_SUPPORT=y 472 +CONFIG_SPL_SERIAL_SUPPORT=y
486 +CONFIG_SPL=y -  
487 +CONFIG_NR_DRAM_BANKS=1 -  
488 +CONFIG_BOOTDELAY=1 473 +CONFIG_BOOTDELAY=1
-   474 +# CONFIG_CONSOLE_MUX is not set
489 +CONFIG_SYS_CONSOLE_IS_IN_ENV=y 475 +CONFIG_SYS_CONSOLE_IS_IN_ENV=y
490 +CONFIG_VERSION_VARIABLE=y 476 +CONFIG_VERSION_VARIABLE=y
491 +# CONFIG_DISPLAY_BOARDINFO is not set 477 +# CONFIG_DISPLAY_BOARDINFO is not set
-   478 +# CONFIG_EFI_LOADER is not set
492 +CONFIG_ARCH_MISC_INIT=y 479 +CONFIG_ARCH_MISC_INIT=y
493 +# CONFIG_SPL_FRAMEWORK is not set 480 +CONFIG_SPL=y
494 +CONFIG_HUSH_PARSER=y 481 +CONFIG_HUSH_PARSER=y
495 +CONFIG_CMD_BOOTZ=y 482 +CONFIG_CMD_BOOTZ=y
496 +# CONFIG_CMD_ELF is not set 483 +# CONFIG_CMD_IMLS is not set
497 +CONFIG_CMD_UNZIP=y -  
498 +# CONFIG_CMD_FLASH is not set 484 +# CONFIG_CMD_FLASH is not set
499 +CONFIG_CMD_FUSE=y -  
500 +CONFIG_CMD_GPIO=y -  
501 +CONFIG_CMD_MMC=y 485 +CONFIG_CMD_MMC=y
502 +CONFIG_CMD_MMC_SWRITE=y 486 +CONFIG_CMD_GPIO=y
503 +CONFIG_CMD_DHCP=y 487 +CONFIG_CMD_DHCP=y
504 +CONFIG_CMD_MII=y 488 +CONFIG_CMD_MII=y
505 +CONFIG_CMD_PING=y 489 +CONFIG_CMD_PING=y
-   490 +CONFIG_CMD_CACHE=y
506 +CONFIG_CMD_EXT4=y 491 +CONFIG_CMD_EXT4=y
507 +CONFIG_CMD_EXT4_WRITE=y 492 +CONFIG_CMD_EXT4_WRITE=y
-   493 +CONFIG_CMD_FAT=y
508 +CONFIG_CMD_FS_GENERIC=y 494 +CONFIG_CMD_FS_GENERIC=y
509 +CONFIG_DOS_PARTITION=y -  
510 +CONFIG_ENV_IS_IN_MMC=y 495 +CONFIG_ENV_IS_IN_MMC=y
511 +CONFIG_MMC_MXS=y 496 +CONFIG_MMC_MXS=y
512 +CONFIG_MII=y -  
513 +CONFIG_CONS_INDEX=0 -  
514 +CONFIG_OF_LIBFDT=y 497 +CONFIG_OF_LIBFDT=y
515 +# CONFIG_EFI_LOADER is not set -  
516 diff --git a/include/configs/duckbill.h b/include/configs/duckbill.h -  
517 new file mode 100644 -  
518 index 0000000000..e7fce8843e -  
519 --- /dev/null 498 --- /dev/null
520 +++ b/include/configs/duckbill.h 499 +++ b/include/configs/duckbill.h
521 @@ -0,0 +1,179 @@ 500 @@ -0,0 +1,199 @@
522 +/* SPDX-License-Identifier: GPL-2.0+ */ -  
523 +/* 501 +/*
524 + * Copyright (C) 2014-2019 Michael Heimpold <mhei@heimpold.de> 502 + * Copyright (C) 2014-2015 Michael Heimpold <mhei@heimpold.de>
525 + * 503 + *
-   504 + * SPDX-License-Identifier: GPL-2.0+
526 + */ 505 + */
527 +#ifndef __CONFIGS_DUCKBILL_H__ 506 +#ifndef __CONFIGS_DUCKBILL_H__
528 +#define __CONFIGS_DUCKBILL_H__ 507 +#define __CONFIGS_DUCKBILL_H__
529 + 508 +
530 +/* System configurations */ 509 +/* System configurations */
-   510 +#define CONFIG_MX28 /* i.MX28 SoC */
531 +#define CONFIG_MACH_TYPE MACH_TYPE_DUCKBILL 511 +#define CONFIG_MACH_TYPE MACH_TYPE_DUCKBILL
532 + 512 +
533 +#define CONFIG_MISC_INIT_R 513 +#define CONFIG_MISC_INIT_R
534 + 514 +
535 +#define CONFIG_SYS_MXS_VDD5V_ONLY 515 +#define CONFIG_SYS_MXS_VDD5V_ONLY
536 + 516 +
-   517 +/* U-Boot Commands */
-   518 +#define CONFIG_CMD_FUSE
-   519 +#define CONFIG_CMD_UNZIP
-   520 +
537 +/* Memory configuration */ 521 +/* Memory configuration */
-   522 +#define CONFIG_NR_DRAM_BANKS 1 /* 1 bank of DRAM */
538 +#define PHYS_SDRAM_1 0x40000000 /* Base address */ 523 +#define PHYS_SDRAM_1 0x40000000 /* Base address */
539 +#define PHYS_SDRAM_1_SIZE 0x40000000 /* Max 1 GB RAM */ 524 +#define PHYS_SDRAM_1_SIZE 0x40000000 /* Max 1 GB RAM */
540 +#define CONFIG_SYS_SDRAM_BASE PHYS_SDRAM_1 525 +#define CONFIG_SYS_SDRAM_BASE PHYS_SDRAM_1
541 + 526 +
542 +/* Environment is in MMC */ 527 +/* Environment is in MMC */
543 +#define CONFIG_ENV_OVERWRITE 528 +#define CONFIG_ENV_OVERWRITE
544 +#define CONFIG_ENV_SIZE (128 * 1024) 529 +#define CONFIG_ENV_SIZE (128 * 1024)
545 +#define CONFIG_ENV_OFFSET (128 * 1024) 530 +#define CONFIG_ENV_OFFSET (128 * 1024)
546 +#define CONFIG_ENV_OFFSET_REDUND (256 * 1024) 531 +#define CONFIG_ENV_OFFSET_REDUND (256 * 1024)
547 +#define CONFIG_SYS_MMC_ENV_DEV 0 532 +#define CONFIG_SYS_MMC_ENV_DEV 0
548 +#define CONFIG_SYS_REDUNDAND_ENVIRONMENT 533 +#define CONFIG_SYS_REDUNDAND_ENVIRONMENT
549 + 534 +
550 +/* FEC Ethernet on SoC */ 535 +/* FEC Ethernet on SoC */
551 +#ifdef CONFIG_CMD_NET 536 +#ifdef CONFIG_CMD_NET
552 +#define CONFIG_FEC_MXC 537 +#define CONFIG_FEC_MXC
-   538 +#define CONFIG_NET_MULTI
553 +#define CONFIG_MX28_FEC_MAC_IN_OCOTP 539 +#define CONFIG_MX28_FEC_MAC_IN_OCOTP
-   540 +#define CONFIG_FEC_MXC_PHYADDR 1
554 +#define CONFIG_FEC_MXC_MDIO_BASE MXS_ENET0_BASE 541 +#define IMX_FEC_BASE MXS_ENET0_BASE
555 +#endif 542 +#endif
556 + 543 +
557 +#define CONFIG_IPADDR 192.168.1.10 544 +#define CONFIG_IPADDR 192.168.1.10
558 +#define CONFIG_SERVERIP 192.168.1.1 545 +#define CONFIG_SERVERIP 192.168.1.1
559 +#define CONFIG_NETMASK 255.255.255.0 546 +#define CONFIG_NETMASK 255.255.255.0
560 +#define CONFIG_GATEWAYIP 192.168.1.254 547 +#define CONFIG_GATEWAYIP 192.168.1.254
561 + 548 +
-   549 +/* BOOTP options */
-   550 +#define CONFIG_BOOTP_SUBNETMASK
-   551 +#define CONFIG_BOOTP_GATEWAY
-   552 +#define CONFIG_BOOTP_HOSTNAME
-   553 +
-   554 +/* SPI */
-   555 +#ifdef CONFIG_CMD_SPI
-   556 +#define CONFIG_DEFAULT_SPI_BUS 2
-   557 +#define CONFIG_DEFAULT_SPI_MODE SPI_MODE_0
-   558 +#endif
-   559 +
562 +/* Boot Linux */ 560 +/* Boot Linux */
563 +#define CONFIG_BOOTDELAY 1 561 +#define CONFIG_BOOTDELAY 1
564 +#define CONFIG_BOOTFILE "zImage" 562 +#define CONFIG_BOOTFILE "zImage"
565 +#define CONFIG_LOADADDR 0x42000000 563 +#define CONFIG_LOADADDR 0x42000000
566 +#define CONFIG_SYS_LOAD_ADDR CONFIG_LOADADDR 564 +#define CONFIG_SYS_LOAD_ADDR CONFIG_LOADADDR
567 +#define CONFIG_REVISION_TAG 565 +#define CONFIG_REVISION_TAG
568 +#define CONFIG_SERIAL_TAG 566 +#define CONFIG_SERIAL_TAG
569 +#define CONFIG_OF_BOARD_SETUP 567 +#define CONFIG_OF_BOARD_SETUP
570 +#define CONFIG_BOOT_RETRY_TIME 120 /* retry autoboot after 120 seconds */ 568 +#define CONFIG_BOOT_RETRY_TIME 120 /* retry autoboot after 120 seconds */
571 +#define CONFIG_AUTOBOOT_KEYED 569 +#define CONFIG_AUTOBOOT_KEYED
572 +#define CONFIG_AUTOBOOT_PROMPT "Autobooting in %d seconds, " \ 570 +#define CONFIG_AUTOBOOT_PROMPT "Autobooting in %d seconds, " \
573 + "press <c> to stop\n" 571 + "press <c> to stop\n"
574 +#define CONFIG_AUTOBOOT_DELAY_STR "\x63" /* allows retry after retry time */ 572 +#define CONFIG_AUTOBOOT_DELAY_STR "\x63" /* allows retry after retry time */
575 +#define CONFIG_AUTOBOOT_STOP_STR " " /* stop autoboot with <Space> */ 573 +#define CONFIG_AUTOBOOT_STOP_STR " " /* stop autoboot with <Space> */
576 +#define CONFIG_RESET_TO_RETRY /* reset board to retry booting */ 574 +#define CONFIG_RESET_TO_RETRY /* reset board to retry booting */
577 + 575 +
578 +/* Extra Environment */ 576 +/* Extra Environment */
579 +#define CONFIG_EXTRA_ENV_SETTINGS \ 577 +#define CONFIG_EXTRA_ENV_SETTINGS \
580 + "mmc_part2_offset=1000\0" \ 578 + "mmc_part2_offset=1000\0" \
581 + "mmc_part3_offset=19000\0" \ 579 + "mmc_part3_offset=19000\0" \
582 + "update_openwrt_firmware_filename=openwrt-mxs-root.ext4\0" \ 580 + "update_openwrt_firmware_filename=openwrt-mxs-root.ext4\0" \
583 + "update_openwrt_firmware=" \ 581 + "update_openwrt_firmware=" \
584 + "if mmc rescan; then " \ 582 + "if mmc rescan; then " \
585 + "if tftp ${update_openwrt_firmware_filename}; then " \ 583 + "if tftp ${update_openwrt_firmware_filename}; then " \
586 + "setexpr fw_sz ${filesize} + 1ff; " \ 584 + "setexpr fw_sz ${filesize} + 1ff; " \
587 + "setexpr fw_sz ${fw_sz} / 200; " \ 585 + "setexpr fw_sz ${fw_sz} / 200; " \
588 + "mmc write ${loadaddr} ${mmc_part2_offset} ${fw_sz}; " \ 586 + "mmc write ${loadaddr} ${mmc_part2_offset} ${fw_sz}; " \
589 + "mmc write ${loadaddr} ${mmc_part3_offset} ${fw_sz}; " \ 587 + "mmc write ${loadaddr} ${mmc_part3_offset} ${fw_sz}; " \
590 + "fi; " \ 588 + "fi; " \
591 + "fi\0" \ 589 + "fi\0" \
592 + "update_fw_filename_prefix=emmc.img.\0" \ 590 + "update_fw_filename_prefix=emmc.img.\0" \
593 + "update_fw_filename_suffix=.gz\0" \ 591 + "update_fw_filename_suffix=.gz\0" \
594 + "update_fw_parts=0x6\0" \ 592 + "update_fw_parts=0x6\0" \
595 + "update_fw_fsize_uncompressed=4000000\0" \ 593 + "update_fw_fsize_uncompressed=4000000\0" \
596 + "gzwrite_wbuf=100000\0" \ 594 + "gzwrite_wbuf=100000\0" \
597 + "update_emmc_firmware=" \ 595 + "update_emmc_firmware=" \
598 + "setexpr i ${update_fw_parts}; setexpr error 0; " \ 596 + "setexpr i ${update_fw_parts}; setexpr error 0; " \
599 + "while itest ${i} -gt 0; do " \ 597 + "while itest ${i} -gt 0; do " \
600 + "echo Transfering firmware image part ${i} of ${update_fw_parts}; " \ 598 + "echo Transfering firmware image part ${i} of ${update_fw_parts}; " \
601 + "if itest ${i} -le f; then " \ 599 + "if itest ${i} -le 9; then " \
602 + "setenv j 0${i}; " \ 600 + "setenv j 0${i}; " \
603 + "else " \ 601 + "else " \
604 + "setenv j ${i}; " \ 602 + "setenv j ${i}; " \
605 + "fi; " \ 603 + "fi; " \
606 + "if tftp ${loadaddr} ${update_fw_basedir}${update_fw_filename_prefix}${j}${update_fw_filename_suffix}; then " \ 604 + "if tftp ${loadaddr} ${update_fw_basedir}${update_fw_filename_prefix}${j}${update_fw_filename_suffix}; then " \
607 + "setexpr k ${i} - 1; " \ 605 + "setexpr k ${i} - 1; " \
608 + "setexpr offset ${update_fw_fsize_uncompressed} * ${k}; " \ 606 + "setexpr offset ${update_fw_fsize_uncompressed} * ${k}; " \
609 + "if gzwrite mmc ${mmcdev} ${loadaddr} ${filesize} ${gzwrite_wbuf} ${offset}; then " \ 607 + "if gzwrite mmc ${mmcdev} ${loadaddr} ${filesize} ${gzwrite_wbuf} ${offset}; then " \
610 + "setexpr i ${i} - 1; " \ 608 + "setexpr i ${i} - 1; " \
611 + "else " \ 609 + "else " \
612 + "setexpr i 0; " \ 610 + "setexpr i 0; " \
613 + "setexpr error 1; " \ 611 + "setexpr error 1; " \
614 + "fi; " \ 612 + "fi; " \
615 + "else " \ 613 + "else " \
616 + "setexpr i 0; " \ 614 + "setexpr i 0; " \
617 + "setexpr error 1; " \ 615 + "setexpr error 1; " \
618 + "fi; " \ 616 + "fi; " \
619 + "done; setenv i; setenv j; setenv k; setenv fsize; setenv filesize; setenv offset; " \ 617 + "done; setenv i; setenv j; setenv k; setenv fsize; setenv filesize; setenv offset; " \
620 + "if test ${error} -eq 1; then " \ 618 + "if test ${error} -eq 1; then " \
621 + "echo Firmware Update FAILED; " \ 619 + "echo Firmware Update FAILED; " \
622 + "else " \ 620 + "else " \
623 + "echo Firmware Update OK; " \ 621 + "echo Firmware Update OK; " \
624 + "fi; setenv error\0" \ 622 + "fi; setenv error\0" \
625 + "erase_mmc=mmc erase 0 2\0" \ 623 + "erase_mmc=mmc erase 0 2\0" \
626 + "erase_env1=mmc erase 100 100\0" \ 624 + "erase_env1=mmc erase 100 100\0" \
627 + "erase_env2=mmc erase 200 100\0" \ 625 + "erase_env2=mmc erase 200 100\0" \
628 + "image=zImage\0" \ 626 + "image=zImage\0" \
629 + "console=ttyAMA0\0" \ 627 + "console=ttyAMA0\0" \
-   628 + "fdt_file=imx28-duckbill-2.dtb\0" \
630 + "fdt_addr=0x41000000\0" \ 629 + "fdt_addr=0x41000000\0" \
631 + "boot_fdt=try\0" \ 630 + "boot_fdt=try\0" \
632 + "ip_dyn=yes\0" \ 631 + "ip_dyn=yes\0" \
633 + "bootsys=1\0" \ 632 + "bootsys=1\0" \
634 + "mmcdev=0\0" \ 633 + "mmcdev=0\0" \
635 + "mmcpart=2\0" \ 634 + "mmcpart=2\0" \
636 + "mmcroot=/dev/mmcblk0p2\0" \ 635 + "mmcroot=/dev/mmcblk0p2\0" \
637 + "mmcargs=setenv bootargs console=${console},${baudrate} " \ 636 + "mmcargs=setenv bootargs console=${console},${baudrate} " \
638 + "root=${mmcroot} " \ 637 + "root=${mmcroot} " \
639 + "rootwait bootsys=${bootsys} panic=1 ${extraargs}\0" \ 638 + "rootwait bootsys=${bootsys} panic=1\0" \
640 + "loadimage=ext4load mmc ${mmcdev}:${mmcpart} ${loadaddr} /boot/${image}\0" \ 639 + "loadimage=ext4load mmc ${mmcdev}:${mmcpart} ${loadaddr} /boot/${image}\0" \
641 + "loadfdt=ext4load mmc ${mmcdev}:${mmcpart} ${fdt_addr} /boot/${fdt_file}\0" \ 640 + "loadfdt=ext4load mmc ${mmcdev}:${mmcpart} ${fdt_addr} /boot/${fdt_file}\0" \
642 + "mmcboot=echo Booting from mmc ...; " \ 641 + "mmcboot=echo Booting from mmc ...; " \
643 + "setexpr mmcpart 1 + ${bootsys}; " \ 642 + "setexpr mmcpart 1 + ${bootsys}; " \
644 + "setenv mmcroot /dev/mmcblk0p${mmcpart}; " \ 643 + "setenv mmcroot /dev/mmcblk0p${mmcpart}; " \
645 + "run mmcargs; " \ 644 + "run mmcargs; " \
646 + "if test ${boot_fdt} = yes || test ${boot_fdt} = try; then " \ 645 + "if test ${boot_fdt} = yes || test ${boot_fdt} = try; then " \
647 + "if run loadfdt; then " \ 646 + "if run loadfdt; then " \
648 + "bootz ${loadaddr} - ${fdt_addr}; " \ 647 + "bootz ${loadaddr} - ${fdt_addr}; " \
649 + "else " \ 648 + "else " \
650 + "if test ${boot_fdt} = try; then " \ 649 + "if test ${boot_fdt} = try; then " \
651 + "bootz; " \ 650 + "bootz; " \
652 + "else " \ 651 + "else " \
653 + "echo WARN: Cannot load the DT; " \ 652 + "echo WARN: Cannot load the DT; " \
654 + "fi; " \ 653 + "fi; " \
655 + "fi; " \ 654 + "fi; " \
656 + "else " \ 655 + "else " \
657 + "bootz; " \ 656 + "bootz; " \
658 + "fi\0" \ 657 + "fi\0" \
659 + "nfsroot=/\0" \ 658 + "nfsroot=/\0" \
660 + "netargs=setenv bootargs console=${console},${baudrate} " \ 659 + "netargs=setenv bootargs console=${console},${baudrate} " \
661 + "root=/dev/nfs " \ 660 + "root=/dev/nfs " \
662 + "ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp ${extraargs}\0" \ 661 + "ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp\0" \
663 + "netboot=echo Booting from net ...; " \ 662 + "netboot=echo Booting from net ...; " \
664 + "run netargs; " \ 663 + "run netargs; " \
665 + "if test ${ip_dyn} = yes; then " \ 664 + "if test ${ip_dyn} = yes; then " \
666 + "setenv get_cmd dhcp; " \ 665 + "setenv get_cmd dhcp; " \
667 + "else " \ 666 + "else " \
668 + "setenv get_cmd tftp; " \ 667 + "setenv get_cmd tftp; " \
669 + "fi; " \ 668 + "fi; " \
670 + "${get_cmd} ${image}; " \ 669 + "${get_cmd} ${image}; " \
671 + "if test ${boot_fdt} = yes || test ${boot_fdt} = try; then " \ 670 + "if test ${boot_fdt} = yes || test ${boot_fdt} = try; then " \
672 + "if ${get_cmd} ${fdt_addr} ${fdt_file}; then " \ 671 + "if ${get_cmd} ${fdt_addr} ${fdt_file}; then " \
673 + "bootz ${loadaddr} - ${fdt_addr}; " \ 672 + "bootz ${loadaddr} - ${fdt_addr}; " \
674 + "else " \ 673 + "else " \
675 + "if test ${boot_fdt} = try; then " \ 674 + "if test ${boot_fdt} = try; then " \
676 + "bootz; " \ 675 + "bootz; " \
677 + "else " \ 676 + "else " \
678 + "echo WARN: Cannot load the DT; " \ 677 + "echo WARN: Cannot load the DT; " \
679 + "fi;" \ 678 + "fi;" \
680 + "fi; " \ 679 + "fi; " \
681 + "else " \ 680 + "else " \
682 + "bootz; " \ 681 + "bootz; " \
683 + "fi\0" 682 + "fi\0"
684 + 683 +
685 +#define CONFIG_BOOTCOMMAND \ 684 +#define CONFIG_BOOTCOMMAND \
686 + "mmc dev ${mmcdev}; " \ 685 + "mmc dev ${mmcdev}; " \
687 + "if mmc rescan; then " \ 686 + "if mmc rescan; then " \
688 + "if run loadimage; then " \ 687 + "if run loadimage; then " \
689 + "run mmcboot; " \ 688 + "run mmcboot; " \
690 + "else " \ 689 + "else " \
691 + "run netboot; " \ 690 + "run netboot; " \
692 + "fi; " \ 691 + "fi; " \
693 + "else " \ 692 + "else " \
694 + "run netboot; " \ 693 + "run netboot; " \
695 + "fi" 694 + "fi"
696 + 695 +
697 +/* The rest of the configuration is shared */ 696 +/* The rest of the configuration is shared */
698 +#include <configs/mxs.h> 697 +#include <configs/mxs.h>
699 + 698 +
700 +#endif /* __CONFIGS_DUCKBILL_H__ */ 699 +#endif /* __CONFIGS_DUCKBILL_H__ */
701 -- -  
702 2.17.1 -  
703   -  
704   700  
705   701  
706
Generated by GNU Enscript 1.6.5.90.
702
Generated by GNU Enscript 1.6.5.90.
707   703  
708   704  
709   705