blob: 97e59fb324a15aa044a37da611f106ac3c836c5a [file] [log] [blame]
Thierry Redingbc2e7f82011-11-17 00:10:24 +00001/*
2 * (C) Copyright 2010,2011
3 * NVIDIA Corporation <www.nvidia.com>
4 * (C) Copyright 2011
5 * Avionic Design GmbH <www.avionic-design.de>
6 *
7 * See file CREDITS for list of people who contributed to this
8 * project.
9 *
10 * This program is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU General Public License as
12 * published by the Free Software Foundation; either version 2 of
13 * the License, or (at your option) any later version.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
23 * MA 02111-1307 USA
24 */
25
26#include <common.h>
27#include <ns16550.h>
28#include <asm/io.h>
29#include <asm/gpio.h>
Simon Glassa8ccc8b2011-11-28 15:04:40 +000030#include <asm/arch/board.h>
Thierry Redingbc2e7f82011-11-17 00:10:24 +000031#include <asm/arch/tegra2.h>
32#include <asm/arch/sys_proto.h>
33#include <asm/arch/clk_rst.h>
34#include <asm/arch/clock.h>
35#include <asm/arch/pinmux.h>
36#include <asm/arch/uart.h>
37#include <asm/arch/mmc.h>
38#include "tamonten.h"
39
40#ifdef CONFIG_TEGRA2_MMC
41#include <mmc.h>
42#endif
43
44DECLARE_GLOBAL_DATA_PTR;
45
46const struct tegra2_sysinfo sysinfo = {
47 CONFIG_TEGRA2_BOARD_STRING
48};
49
50/*
51 * Routine: timer_init
52 * Description: init the timestamp and lastinc value
53 */
54int timer_init(void)
55{
56 return 0;
57}
58
Thierry Redingbc2e7f82011-11-17 00:10:24 +000059#ifdef CONFIG_TEGRA2_MMC
60/*
61 * Routine: pin_mux_mmc
62 * Description: setup the pin muxes/tristate values for the SDMMC(s)
63 */
64static void pin_mux_mmc(void)
65{
66 /* SDMMC4: config 3, x8 on 2nd set of pins */
67 pinmux_set_func(PINGRP_ATB, PMUX_FUNC_SDIO4);
68 pinmux_set_func(PINGRP_GMA, PMUX_FUNC_SDIO4);
69 pinmux_set_func(PINGRP_GME, PMUX_FUNC_SDIO4);
70
71 pinmux_tristate_disable(PINGRP_ATB);
72 pinmux_tristate_disable(PINGRP_GMA);
73 pinmux_tristate_disable(PINGRP_GME);
74}
75#endif
76
77/*
78 * Routine: board_init
79 * Description: Early hardware init.
80 */
81int board_init(void)
82{
83 clock_init();
84 clock_verify();
85
86 /* boot param addr */
87 gd->bd->bi_boot_params = (NV_PA_SDRAM_BASE + 0x100);
88
89 return 0;
90}
91
92#ifdef CONFIG_TEGRA2_MMC
93/* this is a weak define that we are overriding */
94int board_mmc_init(bd_t *bd)
95{
96 debug("board_mmc_init called\n");
97 /* Enable muxes, etc. for SDMMC controllers */
98 pin_mux_mmc();
99 gpio_config_mmc();
100
101 debug("board_mmc_init: init eMMC\n");
102 /* init dev 0, eMMC chip, with 4-bit bus */
103 tegra2_mmc_init(0, 4, -1, GPIO_PH2);
104
105 return 0;
106}
107#endif
108
109#ifdef CONFIG_BOARD_EARLY_INIT_F
110int board_early_init_f(void)
111{
Simon Glassa8ccc8b2011-11-28 15:04:40 +0000112 /* Initialize selected UARTs */
113 board_init_uart_f();
Thierry Redingbc2e7f82011-11-17 00:10:24 +0000114 return 0;
115}
116#endif /* EARLY_INIT */