summaryrefslogtreecommitdiff
path: root/include/configs/starfive-visionfive2.h
blob: 37a51004cacbbd5c4fac2c011bd21fae84e4a131 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
// SPDX-License-Identifier: GPL-2.0+
/*
 * Copyright (C) 2021 Shanghai StarFive Technology Co., Ltd.
 * YanHong  Wang <yanhong.wang@starfivetech.com>
 */


#ifndef _STARFIVE_VISIONFIVE2_H
#define _STARFIVE_VISIONFIVE2_H

#include <version.h>
#include <linux/sizes.h>

#ifdef CONFIG_SPL

#define CONFIG_SPL_MAX_SIZE		0x00040000
#define CONFIG_SPL_BSS_START_ADDR	0x08040000
#define CONFIG_SPL_BSS_MAX_SIZE		0x00010000
#define CONFIG_SYS_SPL_MALLOC_START	0x42000000

#define CONFIG_SYS_SPL_MALLOC_SIZE	0x00800000

#define CONFIG_SPL_STACK		(0x08000000 + 0x00180000 - \
					 GENERATED_GBL_DATA_SIZE)
#define STARFIVE_SPL_BOOT_LOAD_ADDR	0x60000000
#endif

#define CONFIG_SYS_BOOTM_LEN            SZ_64M


#define CONFIG_SYS_CACHELINE_SIZE 64

/*
 * Miscellaneous configurable options
 */
#define CONFIG_SYS_CBSIZE	1024	/* Console I/O Buffer Size */

/*
 * Print Buffer Size
 */
#define CONFIG_SYS_PBSIZE					\
	(CONFIG_SYS_CBSIZE + sizeof(CONFIG_SYS_PROMPT) + 16)

/*
 * max number of command args
 */
#define CONFIG_SYS_MAXARGS	16

/*
 * Boot Argument Buffer Size
 */
#define CONFIG_SYS_BARGSIZE	CONFIG_SYS_CBSIZE

/*
 * Size of malloc() pool
 * 512kB is suggested, (CONFIG_ENV_SIZE + 128 * 1024) was not enough
 */
#define CONFIG_SYS_MALLOC_LEN		SZ_8M

#define CONFIG_SYS_SDRAM_BASE		0x40000000

/* Init Stack Pointer */
#define CONFIG_SYS_INIT_SP_ADDR		(CONFIG_SYS_SDRAM_BASE + SZ_8M)

#define CONFIG_SYS_LOAD_ADDR		(CONFIG_SYS_SDRAM_BASE + SZ_16M)
#define CONFIG_STANDALONE_LOAD_ADDR	(CONFIG_SYS_SDRAM_BASE + SZ_16M)

#define CONFIG_SYS_PCI_64BIT		/* enable 64-bit PCI resources */

/*
 * Ethernet
 */
#ifdef CONFIG_CMD_NET
#define CONFIG_DW_ALTDESCRIPTOR
#define CONFIG_ARP_TIMEOUT	500
#define CONFIG_NETMASK		255.255.255.0
#define CONFIG_IPADDR		192.168.120.230
#define CONFIG_IP_DEFRAG
#ifndef CONFIG_NET_MAXDEFRAG
#define CONFIG_NET_MAXDEFRAG	16384
#endif
#endif

/* HACK these should have '#if defined (stuff) around them like zynqp*/
#define BOOT_TARGET_DEVICES(func) func(MMC, mmc, 0) func(DHCP, dhcp, na)

#include <config_distro_bootcmd.h>


#include <environment/distro/sf.h>

#define TYPE_GUID_LOADER1	"5B193300-FC78-40CD-8002-E86C45580B47"
#define TYPE_GUID_LOADER2	"2E54B353-1271-4842-806F-E436D6AF6985"
#define TYPE_GUID_SYSTEM	"0FC63DAF-8483-4772-8E79-3D69D8477DE4"

#define CPU_VOL_1020_SET \
	"cpu_vol_1020_set=" 			\
	"fdt set /opp-table-0/opp-1500000000 opp-microvolt <1020000>;\0"

#define CPU_VOL_1040_SET \
	"cpu_vol_1040_set="			\
	"fdt set /opp-table-0/opp-1500000000 opp-microvolt <1040000>;\0"

#define CPU_VOL_1060_SET \
	"cpu_vol_1060_set="			\
	"fdt set /opp-table-0/opp-1500000000 opp-microvolt <1060000>;\0"

#define CPU_SPEED_1250_SET \
	"cpu_speed_1250_set="			\
	"fdt rm /opp-table-0/opp-375000000;"	\
	"fdt rm /opp-table-0/opp-500000000;"	\
	"fdt rm /opp-table-0/opp-750000000;"	\
	"fdt rm /opp-table-0/opp-1500000000;\0"

#define CPU_SPEED_1500_SET \
	"cpu_speed_1500_set="			\
	"fdt rm /opp-table-0/opp-312500000;"	\
	"fdt rm /opp-table-0/opp-417000000;"	\
	"fdt rm /opp-table-0/opp-625000000;"	\
	"fdt rm /opp-table-0/opp-1250000000;\0"

#define CPU_FREQ_VOL_SET \
	"cpu_vol_set="						\
	"if test ${cpu_max_vol} = 1000000; then "		\
		"run cpu_speed_1250_set; "			\
	"else "							\
		"run cpu_speed_1500_set; "			\
		"if test ${cpu_max_vol} = 1060000; then "	\
			"run cpu_vol_1060_set; "		\
		"elif test ${cpu_max_vol} = 1020000; then "	\
			"run cpu_vol_1020_set; "		\
		"else "						\
			"run cpu_vol_1040_set; "		\
		"fi; "						\
	"fi; \0"

#define CMA_SIZE_SET \
	"cma_start=70000000\0"					\
	"cma_1g=b000000\0"					\
	"cma_2g=20000000\0"					\
	"cma_4g=40000000\0"	 				\
	"cma_8g=60000000\0"					\
	"cma_node=/reserved-memory/linux,cma\0"			\
	"cma_ddr1g_set="					\
	"fdt set ${cma_node} size <0x0 0x${cma_1g}>;"		\
	"fdt set ${cma_node} alloc-ranges <0x0 0x${cma_start} 0x0 0x${cma_1g}>;\0" \
	"cma_ddr2g_set="					\
	"fdt set ${cma_node} size <0x0 0x${cma_2g}>;"		\
	"fdt set ${cma_node} alloc-ranges <0x0 0x${cma_start} 0x0 0x${cma_2g}>;\0" \
	"cma_ddr4g_set="					\
	"fdt set ${cma_node} size <0x0 0x${cma_4g}>;"		\
	"fdt set ${cma_node} alloc-ranges <0x0 0x${cma_start} 0x0 0x${cma_4g}>;\0" \
	"cma_ddr8g_set="					\
	"fdt set ${cma_node} size <0x0 0x${cma_8g}>;"		\
	"fdt set ${cma_node} alloc-ranges <0x0 0x${cma_start} 0x0 0x${cma_8g}>;\0" \
	"cma_resize="						\
	"if test ${memory_size} -eq 40000000; then "		\
		"run cma_ddr1g_set;"				\
	"elif test ${memory_size} -eq 80000000; then "		\
		"run cma_ddr2g_set;"				\
	"elif test ${memory_size} -eq 100000000; then "		\
		"run cma_ddr4g_set;"				\
	"elif test ${memory_size} -ge 200000000; then "		\
		"run cma_ddr8g_set;"				\
	"fi; \0 "

#define PARTS_DEFAULT							\
	"name=loader1,start=17K,size=1M,type=${type_guid_gpt_loader1};" \
	"name=loader2,size=4MB,type=${type_guid_gpt_loader2};"		\
	"name=system,size=-,bootable,type=${type_guid_gpt_system};"

#define CHIPA_GMAC_SET	\
	"chipa_gmac_set="	\
	"fdt set /soc/ethernet@16030000/ethernet-phy@0 tx_inverted_10 <0x0>;"	\
	"fdt set /soc/ethernet@16030000/ethernet-phy@0 tx_inverted_100 <0x0>;"	\
	"fdt set /soc/ethernet@16030000/ethernet-phy@0 tx_inverted_1000 <0x0>;"	\
	"fdt set /soc/ethernet@16030000/ethernet-phy@0 tx_delay_sel <0x9>;"	\
	"fdt set /soc/ethernet@16040000/ethernet-phy@1 tx_inverted_10 <0x0>;"	\
	"fdt set /soc/ethernet@16040000/ethernet-phy@1 tx_inverted_100 <0x0>;"	\
	"fdt set /soc/ethernet@16040000/ethernet-phy@1 tx_inverted_1000 <0x0>;"	\
	"fdt set /soc/ethernet@16040000/ethernet-phy@1 tx_delay_sel <0x9> \0"

#define VISIONFIVE2_MEM_SET	\
	"visionfive2_mem_set="	\
	"fdt memory ${memory_addr} ${memory_size};" \
	"run cma_resize; \0"

#define CHIPA_SET	\
	"chipa_set="				\
	"if test ${chip_vision} = A; then "	\
		"run chipa_gmac_set;"		\
	"fi; \0"				\
	"chipa_set_uboot="			\
	"fdt addr ${uboot_fdt_addr};"		\
	"run chipa_set;\0"			\
	"chipa_set_linux="			\
	"fdt addr ${fdt_addr_r};"		\
	"run visionfive2_mem_set;"		\
	"run chipa_set;\0"

#define VF2_SDK_BOOTENV			\
	"bootenv=uEnv.txt\0"		\
	"bootenv_sdk=vf2_uEnv.txt\0"	\
	"boot_devs=mmc nvme\0"		\
	"emmc_devnum=0\0" 		\
	"sd_devnum=1\0"			\
	"mmc_devnum_l=1 0\0"		\
	"nvme_devnum_l=0 0\0"

#define JH7110_SDK_BOOTENV		\
	"bootdir=/boot\0"		\
	"bootpart=3\0"			\
	"rootpart=4\0"			\
	"load_sdk_uenv="		\
		"fatload ${bootdev} ${devnum}:${bootpart} ${loadaddr} ${bootenv_sdk};"	\
		"env import -t ${loadaddr} ${filesize}; \0"				\
	"mmc_test_and_boot="				\
		"if mmc dev ${devnum}; then "	\
			"echo Try booting from MMC${devnum} ...; "	\
			"setenv sdev_blk mmcblk${devnum}p${rootpart};"	\
			"run load_sdk_uenv; run boot2;"	\
		"fi;\0"							\
	"bootenv_mmc="					\
		"setenv bootdev mmc;"			\
		"if test ${bootmode} = flash; then "	\
			"for mmc_devnum in ${mmc_devnum_l}; do " \
				"setenv devnum ${mmc_devnum}; " \
				"run mmc_test_and_boot;"	\
			"done;"					\
		"fi; "						\
		"if test ${bootmode} = sd; then "	\
			"setenv devnum ${sd_devnum};" 	\
			"run mmc_test_and_boot;"	\
		"fi; " 					\
		"if test ${bootmode} = emmc; then "	\
			"setenv devnum  ${emmc_devnum};"\
			"run mmc_test_and_boot;"	\
		"fi; \0"				\
	"bootenv_nvme="					\
		"if test ${bootmode} = flash; then "	\
			"for nvme_devnum in ${nvme_devnum_l}; do " \
				"setenv devnum ${nvme_devnum};" \
				"if pci enum; then "		\
					"nvme scan; "		\
				"fi; "				\
				"if nvme dev ${devnum}; then "	\
					"echo Try booting from NVME${devnum} ...; "	\
					"setenv bootdev nvme;"	\
					"setenv sdev_blk nvme${devnum}n1p${rootpart};"	\
					"run load_sdk_uenv; run boot2;"	\
				"fi; "				\
			"done; "				\
		"fi; \0"					\
	"sdk_boot_env="			\
		"for bootdev_s in ${boot_devs}; do "	\
		"run bootenv_${bootdev_s}; "		\
		"done;\0"				\
	"fdtfile=" CONFIG_DEFAULT_FDT_FILE "\0"

#define JH7110_DISTRO_BOOTENV	\
	"bootdir=/boot\0"	\
	"bootpart=3\0"		\
	"rootpart=4\0"		\
	"load_distro_uenv="						\
		"fatload ${bootdev} ${devnum}:${bootpart} ${loadaddr} /${bootenv}; " \
		"env import ${loadaddr} ${filesize}; \0" \
	"fdt_loaddtb="		\
		"fatload ${bootdev} ${devnum}:${bootpart} ${fdt_addr_r} /dtbs/${fdtfile}; fdt addr ${fdt_addr_r}; \0" \
	"fdt_sizecheck="	\
		"fatsize ${bootdev} ${devnum}:${bootpart} /dtbs/${fdtfile}; \0" \
	"set_fdt_distro="	\
		"run chipa_set_linux; run cpu_vol_set;" \
		"fatwrite ${bootdev} ${devnum}:${bootpart} ${fdt_addr_r} /dtbs/${fdtfile} ${filesize}; \0" \
	"bootcmd_distro="	\
		"run load_distro_uenv; " \
		"run fdt_loaddtb; run fdt_sizecheck; run set_fdt_distro; "	\
		"sysboot ${bootdev} ${devnum}:${bootpart} fat ${scriptaddr} /${boot_syslinux_conf}; \0" \
	"distro_mmc_test_and_boot="					\
		"if mmc dev ${devnum}; then "				\
			"echo Try booting from MMC${devnum} ...; "	\
			"run bootcmd_distro;"				\
		"fi;\0" 						\
	"distro_bootenv_mmc="					\
		"setenv bootdev mmc;"			\
		"if test ${bootmode} = flash; then "	\
			"for mmc_devnum in ${mmc_devnum_l}; do "\
				"setenv devnum ${mmc_devnum}; " \
				"run distro_mmc_test_and_boot;" \
			"done;" 				\
		"fi; "						\
		"if test ${bootmode} = sd; then "	\
			"setenv devnum ${sd_devnum};"	\
			"run distro_mmc_test_and_boot;" \
		"fi; "					\
		"if test ${bootmode} = emmc; then "	\
			"setenv devnum	${emmc_devnum};"\
			"run distro_mmc_test_and_boot;" \
		"fi; \0"				\
	"distro_bootenv_nvme="				\
		"if test ${bootmode} = flash; then "	\
			"for nvme_devnum in ${nvme_devnum_l}; do " \
				"setenv devnum ${nvme_devnum};" \
				"if pci enum; then "		\
					"nvme scan; "		\
				"fi; "				\
				"if nvme dev ${devnum}; then "	\
					"echo Try booting from NVME${devnum} ...; "	\
					"setenv bootdev nvme;"	\
					"run bootcmd_distro; "	\
				"fi; "				\
			"done; "				\
		"fi; \0"					\
	"distro_boot_env="		\
		"echo Tring booting distro ...;"		\
		"for bootdev_s in ${boot_devs}; do "		\
			"run distro_bootenv_${bootdev_s}; "	\
		"done; \0"

#define CONFIG_EXTRA_ENV_SETTINGS			\
	"fdt_high=0xffffffffffffffff\0"			\
	"initrd_high=0xffffffffffffffff\0"		\
	"kernel_addr_r=0x40200000\0"			\
	"kernel_comp_addr_r=0x5a000000\0"		\
	"kernel_comp_size=0x4000000\0"			\
	"fdt_addr_r=0x46000000\0"			\
	"scriptaddr=0x43900000\0"			\
	"script_offset_f=0x1fff000\0"			\
	"script_size_f=0x1000\0"			\
	"pxefile_addr_r=0x45900000\0"			\
	"ramdisk_addr_r=0x46100000\0"			\
	"fdtoverlay_addr_r=0x4f000000\0"		\
	"loadaddr=0x60000000\0"				\
	VF2_SDK_BOOTENV					\
	JH7110_SDK_BOOTENV				\
	JH7110_DISTRO_BOOTENV				\
	CHIPA_GMAC_SET					\
	CHIPA_SET					\
	CPU_VOL_1020_SET				\
	CPU_VOL_1040_SET				\
	CPU_VOL_1060_SET				\
	CPU_SPEED_1250_SET				\
	CPU_SPEED_1500_SET				\
	CPU_FREQ_VOL_SET				\
	CMA_SIZE_SET					\
	VISIONFIVE2_MEM_SET				\
	"type_guid_gpt_loader1=" TYPE_GUID_LOADER1 "\0" \
	"type_guid_gpt_loader2=" TYPE_GUID_LOADER2 "\0" \
	"type_guid_gpt_system=" TYPE_GUID_SYSTEM "\0"	\
	"partitions=" PARTS_DEFAULT "\0"		\
	BOOTENV						\
	BOOTENV_SF

#define CONFIG_SYS_BAUDRATE_TABLE {9600, 19200, 38400, 57600, 115200, 230400, 460800, 921600}
#define CONFIG_SYS_LOADS_BAUD_CHANGE 1		/* allow baudrate change */

/* 6.25MHz RTC clock, StarFive JH7110*/
#define CONFIG_SYS_HZ_CLOCK	4000000

#define __io

#define memset_io(c, v, l)	memset((c), (v), (l))
#define memcpy_fromio(a, c, l)	memcpy((a), (c), (l))
#define memcpy_toio(c, a, l)	memcpy((c), (a), (l))

#define CONFIG_VIDEO_BMP_LOGO
#define CONFIG_VIDEO_LOGO
#define CONFIG_BMP_16BPP
#define CONFIG_BMP_24BPP
#define CONFIG_BMP_32BPP

#define CONFIG_ID_EEPROM

#endif /* _STARFIVE_VISIONFIVE2_H */