1/* SPDX-License-Identifier: GPL-2.0+ */
2/*
3 * Copyright (C) 2013, 2014, 2017 Markus Niebel <Markus.Niebel@tq-group.com>
4 *
5 * Configuration settings for the TQ-Systems TQMa6<Q,D,DL,S> module.
6 */
7
8#ifndef __CONFIG_H
9#define __CONFIG_H
10
11#include <linux/stringify.h>
12
13/* place code in last 4 MiB of RAM */
14
15#include "mx6_common.h"
16
17#if defined(CONFIG_TQMA6S)
18#define PHYS_SDRAM_SIZE			(512u * SZ_1M)
19#elif defined(CONFIG_TQMA6DL)
20#define PHYS_SDRAM_SIZE			(SZ_1G)
21#elif defined(CONFIG_TQMA6Q)
22#define PHYS_SDRAM_SIZE			(SZ_1G)
23#endif
24
25/* SPI Flash */
26
27#define TQMA6_SPI_FLASH_SECTOR_SIZE	SZ_64K
28
29/* I2C Configs */
30#define CFG_I2C_MULTI_BUS
31
32#if !defined(CONFIG_DM_PMIC)
33#define CFG_POWER_PFUZE100_I2C_ADDR	0x08
34#define TQMA6_PFUZE100_I2C_BUS		2
35#endif
36
37/* MMC Configs */
38#define CFG_SYS_FSL_ESDHC_ADDR	0
39
40/* USB Configs */
41#define CFG_MXC_USB_PORTSC	(PORT_PTS_UTMI | PORT_PTS_PTW)
42
43#if defined(CONFIG_TQMA6X_MMC_BOOT)
44
45#define TQMA6_UBOOT_OFFSET		SZ_1K
46#define TQMA6_UBOOT_SECTOR_START	0x2
47#define TQMA6_UBOOT_SECTOR_COUNT	0x7fe
48
49#define TQMA6_FDT_OFFSET		(2 * SZ_1M)
50#define TQMA6_FDT_SECTOR_START		0x1000
51#define TQMA6_FDT_SECTOR_COUNT		0x800
52
53#define TQMA6_KERNEL_SECTOR_START	0x2000
54#define TQMA6_KERNEL_SECTOR_COUNT	0x2000
55
56#define TQMA6_EXTRA_BOOTDEV_ENV_SETTINGS                                       \
57	"uboot_start="__stringify(TQMA6_UBOOT_SECTOR_START)"\0"                \
58	"uboot_size="__stringify(TQMA6_UBOOT_SECTOR_COUNT)"\0"                 \
59	"fdt_start="__stringify(TQMA6_FDT_SECTOR_START)"\0"                    \
60	"fdt_size="__stringify(TQMA6_FDT_SECTOR_COUNT)"\0"                     \
61	"kernel_start="__stringify(TQMA6_KERNEL_SECTOR_START)"\0"              \
62	"kernel_size="__stringify(TQMA6_KERNEL_SECTOR_COUNT)"\0"               \
63	"mmcdev="__stringify(CONFIG_SYS_MMC_ENV_DEV)"\0"                       \
64	"loadimage=mmc dev ${mmcdev}; "                                        \
65		"mmc read ${loadaddr} ${kernel_start} ${kernel_size};\0"       \
66	"loadfdt=mmc dev ${mmcdev}; "                                          \
67		"mmc read ${fdt_addr} ${fdt_start} ${fdt_size};\0"             \
68	"update_uboot=if tftp ${uboot}; then "                                 \
69		"if itest ${filesize} > 0; then "                              \
70			"mmc dev ${mmcdev}; mmc rescan; "                      \
71			"setexpr blkc ${filesize} + 0x1ff; "                   \
72			"setexpr blkc ${blkc} / 0x200; "                       \
73			"if itest ${blkc} <= ${uboot_size}; then "             \
74				"mmc write ${loadaddr} ${uboot_start} "        \
75					"${blkc}; "                            \
76			"fi; "                                                 \
77		"fi; fi; "                                                     \
78		"setenv filesize; setenv blkc \0"                              \
79	"update_kernel=run kernel_name; "                                      \
80		"if tftp ${kernel}; then "                                     \
81			"if itest ${filesize} > 0; then "                      \
82				"mmc dev ${mmcdev}; mmc rescan; "              \
83				"setexpr blkc ${filesize} + 0x1ff; "           \
84				"setexpr blkc ${blkc} / 0x200; "               \
85				"if itest ${blkc} <= ${kernel_size}; then "    \
86					"mmc write ${loadaddr} "               \
87						"${kernel_start} ${blkc}; "    \
88				"fi; "                                         \
89			"fi; "                                                 \
90		"fi; "                                                         \
91		"setenv filesize; setenv blkc \0"                              \
92	"update_fdt=if tftp ${fdt_file}; then "                                \
93		"if itest ${filesize} > 0; then "                              \
94			"mmc dev ${mmcdev}; mmc rescan; "                      \
95			"setexpr blkc ${filesize} + 0x1ff; "                   \
96			"setexpr blkc ${blkc} / 0x200; "                       \
97			"if itest ${blkc} <= ${fdt_size}; then "               \
98				"mmc write ${loadaddr} ${fdt_start} ${blkc}; " \
99			"fi; "                                                 \
100		"fi; fi; "                                                     \
101		"setenv filesize; setenv blkc \0"                              \
102
103#elif defined(CONFIG_TQMA6X_SPI_BOOT)
104
105#define TQMA6_UBOOT_OFFSET		0x400
106#define TQMA6_UBOOT_SECTOR_START	0x0
107/* max u-boot size: 512k */
108#define TQMA6_UBOOT_SECTOR_SIZE		TQMA6_SPI_FLASH_SECTOR_SIZE
109#define TQMA6_UBOOT_SECTOR_COUNT	0x8
110#define TQMA6_UBOOT_SIZE		(TQMA6_UBOOT_SECTOR_SIZE * \
111					 TQMA6_UBOOT_SECTOR_COUNT)
112
113#define TQMA6_FDT_OFFSET		(CONFIG_ENV_OFFSET_REDUND + \
114					 CONFIG_ENV_SECT_SIZE)
115#define TQMA6_FDT_SECT_SIZE		(TQMA6_SPI_FLASH_SECTOR_SIZE)
116
117#define TQMA6_FDT_SECTOR_START		0x0a /* 8 Sector u-boot, 2 Sector env */
118#define TQMA6_FDT_SECTOR_COUNT		0x01
119
120#define TQMA6_KERNEL_SECTOR_START	0x10
121#define TQMA6_KERNEL_SECTOR_COUNT	0x60
122
123#define TQMA6_EXTRA_BOOTDEV_ENV_SETTINGS                                       \
124	"mmcblkdev=0\0"                                                        \
125	"uboot_offset="__stringify(TQMA6_UBOOT_OFFSET)"\0"                     \
126	"uboot_sectors="__stringify(TQMA6_UBOOT_SECTOR_COUNT)"\0"              \
127	"fdt_start="__stringify(TQMA6_FDT_SECTOR_START)"\0"                    \
128	"fdt_sectors="__stringify(TQMA6_FDT_SECTOR_COUNT)"\0"                  \
129	"kernel_start="__stringify(TQMA6_KERNEL_SECTOR_START)"\0"              \
130	"kernel_sectors="__stringify(TQMA6_KERNEL_SECTOR_COUNT)"\0"            \
131	"update_uboot=if tftp ${uboot}; then "                                 \
132		"if itest ${filesize} > 0; then "                              \
133			"setexpr blkc ${filesize} + "                          \
134				__stringify(TQMA6_UBOOT_OFFSET) "; "           \
135			"setexpr size ${uboot_sectors} * "                     \
136				__stringify(TQMA6_SPI_FLASH_SECTOR_SIZE)"; "   \
137			"if itest ${blkc} <= ${size}; then "                   \
138				"sf probe; "                                   \
139				"sf erase 0 ${size}; "                         \
140				"sf write ${loadaddr} ${uboot_offset} "        \
141					"${filesize}; "                        \
142			"fi; "                                                 \
143		"fi; fi; "                                                     \
144		"setenv filesize 0; setenv blkc; setenv size \0"               \
145	"update_kernel=run kernel_name; if tftp ${kernel}; then "              \
146		"if itest ${filesize} > 0; then "                              \
147			"setexpr size ${kernel_sectors} * "                    \
148				__stringify(TQMA6_SPI_FLASH_SECTOR_SIZE)"; "   \
149			"setexpr offset ${kernel_start} * "                    \
150				__stringify(TQMA6_SPI_FLASH_SECTOR_SIZE)"; "   \
151			"if itest ${filesize} <= ${size}; then "               \
152				"sf probe; "                                   \
153				"sf erase ${offset} ${size}; "                 \
154				"sf write ${loadaddr} ${offset} "              \
155					"${filesize}; "                        \
156			"fi; "                                                 \
157		"fi; fi; "                                                     \
158		"setenv filesize 0; setenv size ; setenv offset\0"             \
159	"update_fdt=if tftp ${fdt_file}; then "                                \
160		"if itest ${filesize} > 0; then "                              \
161			"setexpr size ${fdt_sectors} * "                       \
162				__stringify(TQMA6_SPI_FLASH_SECTOR_SIZE)"; "   \
163			"setexpr offset ${fdt_start} * "                       \
164				__stringify(TQMA6_SPI_FLASH_SECTOR_SIZE)"; "   \
165			"if itest ${filesize} <= ${size}; then "               \
166				"sf probe; "                                   \
167				"sf erase ${offset} ${size}; "                 \
168				"sf write ${loadaddr} ${offset} "              \
169					"${filesize}; "                        \
170			"fi; "                                                 \
171		"fi; fi; "                                                     \
172		"setenv filesize 0; setenv size ; setenv offset\0"             \
173	"loadimage=sf probe; "                                                 \
174		"setexpr size ${kernel_sectors} * "                            \
175			__stringify(TQMA6_SPI_FLASH_SECTOR_SIZE)"; "           \
176		"setexpr offset ${kernel_start} * "                            \
177			__stringify(TQMA6_SPI_FLASH_SECTOR_SIZE)"; "           \
178		"sf read ${loadaddr} ${offset} ${size}; "                      \
179		"setenv size ; setenv offset\0"                                \
180	"loadfdt=sf probe; "                                                   \
181		"setexpr size ${fdt_sectors} * "                               \
182			__stringify(TQMA6_SPI_FLASH_SECTOR_SIZE)"; "           \
183		"setexpr offset ${fdt_start} * "                               \
184			__stringify(TQMA6_SPI_FLASH_SECTOR_SIZE)"; "           \
185		"sf read ${fdt_addr} ${offset} ${size}; "                      \
186		"setenv size ; setenv offset\0"
187#else
188
189#error "need to define boot source"
190
191#endif
192
193/* 128 MiB offset as in ARM related docu for linux suggested */
194#define TQMA6_FDT_ADDRESS		0x18000000
195
196/* set to a resonable value, changeable by user */
197#define TQMA6_CMA_SIZE                 160M
198
199#define CFG_EXTRA_ENV_SETTINGS                                              \
200	"board=tqma6\0"                                                        \
201	"uimage=uImage\0"                                                      \
202	"zimage=zImage\0"                                                      \
203	"boot_type=bootz\0"                                                    \
204	"kernel_name=if test \"${boot_type}\" != bootz; then "                 \
205		"setenv kernel ${uimage}; "                                    \
206		"else setenv kernel ${zimage}; fi\0"                           \
207	"uboot=u-boot.imx\0"                                                   \
208	"fdt_file=" CONFIG_DEFAULT_FDT_FILE "\0"                               \
209	"fdt_addr="__stringify(TQMA6_FDT_ADDRESS)"\0"                          \
210	"console=" CONSOLE_DEV "\0"                                            \
211	"cma_size="__stringify(TQMA6_CMA_SIZE)"\0"                             \
212	"fdt_high=0xffffffff\0"                                                \
213	"initrd_high=0xffffffff\0"                                             \
214	"rootfsmode=ro\0"                                                      \
215	"addcma=setenv bootargs ${bootargs} cma=${cma_size}\0"                 \
216	"addtty=setenv bootargs ${bootargs} console=${console},${baudrate}\0"  \
217	"addfb=setenv bootargs ${bootargs} "                                   \
218		"imx-fbdev.legacyfb_depth=32 consoleblank=0\0"                 \
219	"mmcpart=2\0"                                                          \
220	"mmcblkdev=0\0"                                                        \
221	"mmcargs=run addmmc addtty addfb addcma\0"                             \
222	"addmmc=setenv bootargs ${bootargs} "                                  \
223		"root=/dev/mmcblk${mmcblkdev}p${mmcpart} ${rootfsmode} "       \
224		"rootwait\0"                                                   \
225	"mmcboot=echo Booting from mmc ...; "                                  \
226		"setenv bootargs; "                                            \
227		"run mmcargs; "                                                \
228		"run loadimage; "                                              \
229		"if run loadfdt; then "                                        \
230			"echo boot device tree kernel ...; "                   \
231			"${boot_type} ${loadaddr} - ${fdt_addr}; "             \
232		"else "                                                        \
233			"${boot_type}; "                                       \
234		"fi;\0"                                                        \
235		"setenv bootargs \0"                                           \
236	"netdev=eth0\0"                                                        \
237	"rootpath=/srv/nfs/tqma6\0"                                            \
238	"ipmode=static\0"                                                      \
239	"netargs=run addnfs addip addtty addfb addcma\0"                       \
240	"addnfs=setenv bootargs ${bootargs} "                                  \
241		"root=/dev/nfs rw "                                            \
242		"nfsroot=${serverip}:${rootpath},v3,tcp;\0"                    \
243	"addip_static=setenv bootargs ${bootargs} "                            \
244		"ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:"            \
245		"${hostname}:${netdev}:off\0"                                  \
246	"addip_dynamic=setenv bootargs ${bootargs} ip=dhcp\0"                  \
247	"addip=if test \"${ipmode}\" != static; then "                         \
248		"run addip_dynamic; else run addip_static; fi\0"               \
249	"set_getcmd=if test \"${ipmode}\" != static; then "                    \
250		"setenv getcmd dhcp; setenv autoload yes; "                    \
251		"else setenv getcmd tftp; setenv autoload no; fi\0"            \
252	"netboot=echo Booting from net ...; "                                  \
253		"run kernel_name; "                                            \
254		"run set_getcmd; "                                             \
255		"setenv bootargs; "                                            \
256		"run netargs; "                                                \
257		"if ${getcmd} ${kernel}; then "                                \
258			"if ${getcmd} ${fdt_addr} ${fdt_file}; then "          \
259				"${boot_type} ${loadaddr} - ${fdt_addr}; "     \
260			"fi; "                                                 \
261		"fi; "                                                         \
262		"echo ... failed\0"                                            \
263	"panicboot=echo No boot device !!! reset\0"                            \
264	TQMA6_EXTRA_BOOTDEV_ENV_SETTINGS                                      \
265
266/* Physical Memory Map */
267#define PHYS_SDRAM			MMDC0_ARB_BASE_ADDR
268
269#define CFG_SYS_SDRAM_BASE		PHYS_SDRAM
270#define CFG_SYS_INIT_RAM_ADDR	IRAM_BASE_ADDR
271#define CFG_SYS_INIT_RAM_SIZE	IRAM_SIZE
272
273/*
274 * All the defines above are for the TQMa6 SoM
275 *
276 * Now include the baseboard specific configuration
277 */
278#ifdef CONFIG_MBA6
279#include "tqma6_mba6.h"
280#elif CONFIG_WRU4
281#include "tqma6_wru4.h"
282#else
283#error "No baseboard for the TQMa6 defined!"
284#endif
285
286/* Support at least the sensor on TQMa6 SOM */
287
288#endif /* __CONFIG_H */
289