board.c 2.0 KB
Newer Older
1
// SPDX-License-Identifier: GPL-2.0+
M
Michal Simek 已提交
2 3
/*
 * (C) Copyright 2012 Michal Simek <monstr@monstr.eu>
4
 * (C) Copyright 2013 - 2018 Xilinx, Inc.
M
Michal Simek 已提交
5 6 7
 */

#include <common.h>
8
#include <dm/uclass.h>
9
#include <fdtdec.h>
M
Michal Simek 已提交
10
#include <fpga.h>
11
#include <malloc.h>
M
Michal Simek 已提交
12
#include <mmc.h>
13
#include <watchdog.h>
14
#include <wdt.h>
15
#include <zynqpl.h>
M
Michal Simek 已提交
16 17
#include <asm/arch/hardware.h>
#include <asm/arch/sys_proto.h>
M
Michal Simek 已提交
18 19 20

DECLARE_GLOBAL_DATA_PTR;

21 22 23 24 25 26 27
#if !defined(CONFIG_SPL_BUILD) && defined(CONFIG_BOARD_EARLY_INIT_F)
int board_early_init_f(void)
{
	return 0;
}
#endif

M
Michal Simek 已提交
28 29 30 31 32
int board_init(void)
{
	return 0;
}

33 34
int board_late_init(void)
{
35 36 37 38 39
	int env_targets_len = 0;
	const char *mode;
	char *new_targets;
	char *env_targets;

40
	switch ((zynq_slcr_get_boot_mode()) & ZYNQ_BM_MASK) {
41
	case ZYNQ_BM_QSPI:
42
		mode = "qspi";
S
Simon Glass 已提交
43
		env_set("modeboot", "qspiboot");
44 45
		break;
	case ZYNQ_BM_NAND:
46
		mode = "nand";
S
Simon Glass 已提交
47
		env_set("modeboot", "nandboot");
48
		break;
49
	case ZYNQ_BM_NOR:
50
		mode = "nor";
S
Simon Glass 已提交
51
		env_set("modeboot", "norboot");
52 53
		break;
	case ZYNQ_BM_SD:
54
		mode = "mmc";
S
Simon Glass 已提交
55
		env_set("modeboot", "sdboot");
56 57
		break;
	case ZYNQ_BM_JTAG:
58
		mode = "pxe dhcp";
S
Simon Glass 已提交
59
		env_set("modeboot", "jtagboot");
60 61
		break;
	default:
62
		mode = "";
S
Simon Glass 已提交
63
		env_set("modeboot", "");
64 65 66
		break;
	}

67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
	/*
	 * One terminating char + one byte for space between mode
	 * and default boot_targets
	 */
	env_targets = env_get("boot_targets");
	if (env_targets)
		env_targets_len = strlen(env_targets);

	new_targets = calloc(1, strlen(mode) + env_targets_len + 2);
	if (!new_targets)
		return -ENOMEM;

	sprintf(new_targets, "%s %s", mode,
		env_targets ? env_targets : "");

	env_set("boot_targets", new_targets);

84 85
	return 0;
}
M
Michal Simek 已提交
86

87
#if !defined(CONFIG_SYS_SDRAM_BASE) && !defined(CONFIG_SYS_SDRAM_SIZE)
88
int dram_init_banksize(void)
89
{
90
	return fdtdec_setup_memory_banksize();
91
}
M
Michal Simek 已提交
92

93 94
int dram_init(void)
{
95
	if (fdtdec_setup_mem_size_base() != 0)
96
		return -EINVAL;
97

98
	zynq_ddrc_init();
99

100
	return 0;
101 102 103 104
}
#else
int dram_init(void)
{
105 106
	gd->ram_size = get_ram_size((void *)CONFIG_SYS_SDRAM_BASE,
				    CONFIG_SYS_SDRAM_SIZE);
107

108 109
	zynq_ddrc_init();

M
Michal Simek 已提交
110 111
	return 0;
}
112
#endif