~pmdj/ubuntu/trusty/qemu/2.9+applesmc+fadtv3

« back to all changes in this revision

Viewing changes to roms/u-boot/board/timll/devkit8000/devkit8000.c

  • Committer: Phil Dennis-Jordan
  • Date: 2017-07-21 08:03:43 UTC
  • mfrom: (1.1.1)
  • Revision ID: phil@philjordan.eu-20170721080343-2yr2vdj7713czahv
New upstream release 2.9.0.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * (C) Copyright 2004-2008
 
3
 * Texas Instruments, <www.ti.com>
 
4
 *
 
5
 * Author :
 
6
 *      Sunil Kumar <sunilsaini05@gmail.com>
 
7
 *      Shashi Ranjan <shashiranjanmca05@gmail.com>
 
8
 *
 
9
 * (C) Copyright 2009
 
10
 * Frederik Kriewitz <frederik@kriewitz.eu>
 
11
 *
 
12
 * Derived from Beagle Board and 3430 SDP code by
 
13
 *      Richard Woodruff <r-woodruff2@ti.com>
 
14
 *      Syed Mohammed Khasim <khasim@ti.com>
 
15
 *
 
16
 *
 
17
 * SPDX-License-Identifier:     GPL-2.0+
 
18
 */
 
19
#include <common.h>
 
20
#include <twl4030.h>
 
21
#include <asm/io.h>
 
22
#include <asm/arch/mmc_host_def.h>
 
23
#include <asm/arch/mux.h>
 
24
#include <asm/arch/sys_proto.h>
 
25
#include <asm/arch/mem.h>
 
26
#include <asm/mach-types.h>
 
27
#include "devkit8000.h"
 
28
#include <asm/gpio.h>
 
29
#ifdef CONFIG_DRIVER_DM9000
 
30
#include <net.h>
 
31
#include <netdev.h>
 
32
#endif
 
33
 
 
34
DECLARE_GLOBAL_DATA_PTR;
 
35
 
 
36
static u32 gpmc_net_config[GPMC_MAX_REG] = {
 
37
        NET_GPMC_CONFIG1,
 
38
        NET_GPMC_CONFIG2,
 
39
        NET_GPMC_CONFIG3,
 
40
        NET_GPMC_CONFIG4,
 
41
        NET_GPMC_CONFIG5,
 
42
        NET_GPMC_CONFIG6,
 
43
        0
 
44
};
 
45
 
 
46
/*
 
47
 * Routine: board_init
 
48
 * Description: Early hardware init.
 
49
 */
 
50
int board_init(void)
 
51
{
 
52
        gpmc_init(); /* in SRAM or SDRAM, finish GPMC */
 
53
        /* board id for Linux */
 
54
        gd->bd->bi_arch_number = MACH_TYPE_DEVKIT8000;
 
55
        /* boot param addr */
 
56
        gd->bd->bi_boot_params = (OMAP34XX_SDRC_CS0 + 0x100);
 
57
 
 
58
        return 0;
 
59
}
 
60
 
 
61
/* Configure GPMC registers for DM9000 */
 
62
static void gpmc_dm9000_config(void)
 
63
{
 
64
        enable_gpmc_cs_config(gpmc_net_config, &gpmc_cfg->cs[6],
 
65
                CONFIG_DM9000_BASE, GPMC_SIZE_16M);
 
66
}
 
67
 
 
68
/*
 
69
 * Routine: misc_init_r
 
70
 * Description: Configure board specific parts
 
71
 */
 
72
int misc_init_r(void)
 
73
{
 
74
        struct ctrl_id *id_base = (struct ctrl_id *)OMAP34XX_ID_L4_IO_BASE;
 
75
#ifdef CONFIG_DRIVER_DM9000
 
76
        uchar enetaddr[6];
 
77
        u32 die_id_0;
 
78
#endif
 
79
 
 
80
        twl4030_power_init();
 
81
#ifdef CONFIG_TWL4030_LED
 
82
        twl4030_led_init(TWL4030_LED_LEDEN_LEDAON | TWL4030_LED_LEDEN_LEDBON);
 
83
#endif
 
84
 
 
85
#ifdef CONFIG_DRIVER_DM9000
 
86
        /* Configure GPMC registers for DM9000 */
 
87
        enable_gpmc_cs_config(gpmc_net_config, &gpmc_cfg->cs[6],
 
88
                        CONFIG_DM9000_BASE, GPMC_SIZE_16M);
 
89
 
 
90
        /* Use OMAP DIE_ID as MAC address */
 
91
        if (!eth_getenv_enetaddr("ethaddr", enetaddr)) {
 
92
                printf("ethaddr not set, using Die ID\n");
 
93
                die_id_0 = readl(&id_base->die_id_0);
 
94
                enetaddr[0] = 0x02; /* locally administered */
 
95
                enetaddr[1] = readl(&id_base->die_id_1) & 0xff;
 
96
                enetaddr[2] = (die_id_0 & 0xff000000) >> 24;
 
97
                enetaddr[3] = (die_id_0 & 0x00ff0000) >> 16;
 
98
                enetaddr[4] = (die_id_0 & 0x0000ff00) >> 8;
 
99
                enetaddr[5] = (die_id_0 & 0x000000ff);
 
100
                eth_setenv_enetaddr("ethaddr", enetaddr);
 
101
        }
 
102
#endif
 
103
 
 
104
        dieid_num_r();
 
105
 
 
106
        return 0;
 
107
}
 
108
 
 
109
/*
 
110
 * Routine: set_muxconf_regs
 
111
 * Description: Setting up the configuration Mux registers specific to the
 
112
 *              hardware. Many pins need to be moved from protect to primary
 
113
 *              mode.
 
114
 */
 
115
void set_muxconf_regs(void)
 
116
{
 
117
        MUX_DEVKIT8000();
 
118
}
 
119
 
 
120
#if defined(CONFIG_GENERIC_MMC) && !defined(CONFIG_SPL_BUILD)
 
121
int board_mmc_init(bd_t *bis)
 
122
{
 
123
        return omap_mmc_init(0, 0, 0, -1, -1);
 
124
}
 
125
#endif
 
126
 
 
127
#if defined(CONFIG_DRIVER_DM9000) & !defined(CONFIG_SPL_BUILD)
 
128
/*
 
129
 * Routine: board_eth_init
 
130
 * Description: Setting up the Ethernet hardware.
 
131
 */
 
132
int board_eth_init(bd_t *bis)
 
133
{
 
134
        return dm9000_initialize(bis);
 
135
}
 
136
#endif
 
137
 
 
138
#ifdef CONFIG_SPL_OS_BOOT
 
139
/*
 
140
 * Do board specific preperation before SPL
 
141
 * Linux boot
 
142
 */
 
143
void spl_board_prepare_for_linux(void)
 
144
{
 
145
        gpmc_dm9000_config();
 
146
}
 
147
 
 
148
/*
 
149
 * devkit8000 specific implementation of spl_start_uboot()
 
150
 *
 
151
 * RETURN
 
152
 * 0 if the button is not pressed
 
153
 * 1 if the button is pressed
 
154
 */
 
155
int spl_start_uboot(void)
 
156
{
 
157
        int val = 0;
 
158
        if (!gpio_request(SPL_OS_BOOT_KEY, "U-Boot key")) {
 
159
                gpio_direction_input(SPL_OS_BOOT_KEY);
 
160
                val = gpio_get_value(SPL_OS_BOOT_KEY);
 
161
                gpio_free(SPL_OS_BOOT_KEY);
 
162
        }
 
163
        return !val;
 
164
}
 
165
#endif
 
166
 
 
167
/*
 
168
 * Routine: get_board_mem_timings
 
169
 * Description: If we use SPL then there is no x-loader nor config header
 
170
 * so we have to setup the DDR timings ourself on the first bank.  This
 
171
 * provides the timing values back to the function that configures
 
172
 * the memory.  We have either one or two banks of 128MB DDR.
 
173
 */
 
174
void get_board_mem_timings(struct board_sdrc_timings *timings)
 
175
{
 
176
        /* General SDRC config */
 
177
        timings->mcfg = MICRON_V_MCFG_165(128 << 20);
 
178
        timings->rfr_ctrl = SDP_3430_SDRC_RFR_CTRL_165MHz;
 
179
 
 
180
        /* AC timings */
 
181
        timings->ctrla = MICRON_V_ACTIMA_165;
 
182
        timings->ctrlb = MICRON_V_ACTIMB_165;
 
183
 
 
184
        timings->mr = MICRON_V_MR_165;
 
185
}