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
|
// SPDX-License-Identifier: GPL-2.0-or-later
/*
* Copyright (C) 2012 Freescale Semiconductor, Inc.
* Author: Fabio Estevam <[email protected]>
*
* ported SabreSD to TQMa6x
* Copyright (c) 2013-2014 TQ-Systems GmbH <[email protected]>,
* D-82229 Seefeld, Germany.
* Author: Markus Niebel
*/
#include <init.h>
#include <asm/arch/clock.h>
#include <asm/arch/mx6-pins.h>
#include <asm/arch/imx-regs.h>
#include <asm/arch/iomux.h>
#include <asm/arch/sys_proto.h>
#include <env.h>
#include <fdt_support.h>
#include <asm/global_data.h>
#include <linux/errno.h>
#include <asm/gpio.h>
#include <asm/io.h>
#include <linux/libfdt.h>
#include <mmc.h>
#include <power/pfuze100_pmic.h>
#include <power/pmic.h>
#include "tqma6_emmc.h"
#include "../common/tq_bb.h"
DECLARE_GLOBAL_DATA_PTR;
int dram_init(void)
{
gd->ram_size = imx_ddr_size();
return 0;
}
int board_early_init_f(void)
{
return tq_bb_board_early_init_f();
}
int board_init(void)
{
struct mmc *mmc = find_mmc_device(0);
/* address of boot parameters */
gd->bd->bi_boot_params = PHYS_SDRAM + 0x100;
tqma6_mmc_detect_card_type(mmc);
tq_bb_board_init();
return 0;
}
static const char *tqma6_get_boardname(void)
{
u32 cpurev = get_cpu_rev();
switch ((cpurev & 0xFF000) >> 12) {
case MXC_CPU_MX6SOLO:
return "TQMa6S";
case MXC_CPU_MX6DL:
return "TQMa6DL";
case MXC_CPU_MX6D:
return "TQMa6D";
case MXC_CPU_MX6Q:
return "TQMa6Q";
default:
return "??";
};
}
#if CONFIG_IS_ENABLED(DM_PMIC)
/* setup board specific PMIC */
int power_init_board(void)
{
struct udevice *dev;
u32 reg, rev;
int ret;
ret = pmic_get("pmic@8", &dev);
if (ret < 0)
return 0;
reg = pmic_reg_read(dev, PFUZE100_DEVICEID);
rev = pmic_reg_read(dev, PFUZE100_REVID);
printf("PMIC: PFUZE100 ID=0x%02x REV=0x%02x\n", reg, rev);
return 0;
}
#endif
int board_late_init(void)
{
env_set("board_name", tqma6_get_boardname());
tq_bb_board_late_init();
printf("Board: %s on a %s\n", tqma6_get_boardname(),
tq_bb_get_boardname());
return tq_bb_checkboard();
}
/*
* Device Tree Support
*/
#if defined(CONFIG_OF_BOARD_SETUP) && defined(CONFIG_OF_LIBFDT)
#define MODELSTRLEN 32u
int ft_board_setup(void *blob, struct bd_info *bd)
{
struct mmc *mmc = find_mmc_device(0);
char modelstr[MODELSTRLEN];
snprintf(modelstr, MODELSTRLEN, "TQ %s on %s", tqma6_get_boardname(),
tq_bb_get_boardname());
do_fixup_by_path_string(blob, "/", "model", modelstr);
fdt_fixup_memory(blob, (u64)PHYS_SDRAM, (u64)gd->ram_size);
/* bring in eMMC dsr settings if needed */
if (mmc && (!mmc_init(mmc))) {
if (tqma6_emmc_need_dsr(mmc) > 0) {
tqma6_ft_fixup_emmc_dsr(blob,
"/soc/bus@2100000/mmc@2198000",
TQMA6_EMMC_DSR);
}
} else {
puts("eMMC: not present?\n");
}
return 0;
}
#endif /* defined(CONFIG_OF_BOARD_SETUP) && defined(CONFIG_OF_LIBFDT) */
|