]> git.ipfire.org Git - people/ms/u-boot.git/blob - board/davinci/schmoogie/schmoogie.c
rename CFG_ macros to CONFIG_SYS
[people/ms/u-boot.git] / board / davinci / schmoogie / schmoogie.c
1 /*
2 * Copyright (C) 2007 Sergey Kubushyn <ksi@koi8.net>
3 *
4 * Parts are shamelessly stolen from various TI sources, original copyright
5 * follows:
6 * -----------------------------------------------------------------
7 *
8 * Copyright (C) 2004 Texas Instruments.
9 *
10 * ----------------------------------------------------------------------------
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License as published by
13 * the Free Software Foundation; either version 2 of the License, or
14 * (at your option) any later version.
15 *
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
20 *
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, write to the Free Software
23 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
24 * ----------------------------------------------------------------------------
25 */
26
27 #include <common.h>
28 #include <i2c.h>
29 #include <asm/arch/hardware.h>
30 #include <asm/arch/emac_defs.h>
31 #include "../common/psc.h"
32 #include "../common/misc.h"
33
34 DECLARE_GLOBAL_DATA_PTR;
35
36 int board_init(void)
37 {
38 /* arch number of the board */
39 gd->bd->bi_arch_number = MACH_TYPE_SCHMOOGIE;
40
41 /* address of boot parameters */
42 gd->bd->bi_boot_params = LINUX_BOOT_PARAM_ADDR;
43
44 /* Workaround for TMS320DM6446 errata 1.3.22 */
45 REG(PSC_SILVER_BULLET) = 0;
46
47 /* Power on required peripherals */
48 lpsc_on(DAVINCI_LPSC_EMAC);
49 lpsc_on(DAVINCI_LPSC_EMAC_WRAPPER);
50 lpsc_on(DAVINCI_LPSC_MDIO);
51 lpsc_on(DAVINCI_LPSC_I2C);
52 lpsc_on(DAVINCI_LPSC_UART0);
53 lpsc_on(DAVINCI_LPSC_TIMER1);
54 lpsc_on(DAVINCI_LPSC_GPIO);
55
56 #if !defined(CONFIG_SYS_USE_DSPLINK)
57 /* Powerup the DSP */
58 dsp_on();
59 #endif /* CONFIG_SYS_USE_DSPLINK */
60
61 /* Bringup UART0 out of reset */
62 REG(UART0_PWREMU_MGMT) = 0x0000e003;
63
64 /* Enable GIO3.3V cells used for EMAC */
65 REG(VDD3P3V_PWDN) = 0;
66
67 /* Enable UART0 MUX lines */
68 REG(PINMUX1) |= 1;
69
70 /* Enable EMAC and AEMIF pins */
71 REG(PINMUX0) = 0x80000c1f;
72
73 /* Enable I2C pin Mux */
74 REG(PINMUX1) |= (1 << 7);
75
76 /* Set the Bus Priority Register to appropriate value */
77 REG(VBPR) = 0x20;
78
79 timer_init();
80
81 return(0);
82 }
83
84 int misc_init_r(void)
85 {
86 u_int8_t tmp[20], buf[10];
87 int i = 0;
88
89 /* Set serial number from UID chip */
90 u_int8_t crc_tbl[256] = {
91 0x00, 0x5e, 0xbc, 0xe2, 0x61, 0x3f, 0xdd, 0x83,
92 0xc2, 0x9c, 0x7e, 0x20, 0xa3, 0xfd, 0x1f, 0x41,
93 0x9d, 0xc3, 0x21, 0x7f, 0xfc, 0xa2, 0x40, 0x1e,
94 0x5f, 0x01, 0xe3, 0xbd, 0x3e, 0x60, 0x82, 0xdc,
95 0x23, 0x7d, 0x9f, 0xc1, 0x42, 0x1c, 0xfe, 0xa0,
96 0xe1, 0xbf, 0x5d, 0x03, 0x80, 0xde, 0x3c, 0x62,
97 0xbe, 0xe0, 0x02, 0x5c, 0xdf, 0x81, 0x63, 0x3d,
98 0x7c, 0x22, 0xc0, 0x9e, 0x1d, 0x43, 0xa1, 0xff,
99 0x46, 0x18, 0xfa, 0xa4, 0x27, 0x79, 0x9b, 0xc5,
100 0x84, 0xda, 0x38, 0x66, 0xe5, 0xbb, 0x59, 0x07,
101 0xdb, 0x85, 0x67, 0x39, 0xba, 0xe4, 0x06, 0x58,
102 0x19, 0x47, 0xa5, 0xfb, 0x78, 0x26, 0xc4, 0x9a,
103 0x65, 0x3b, 0xd9, 0x87, 0x04, 0x5a, 0xb8, 0xe6,
104 0xa7, 0xf9, 0x1b, 0x45, 0xc6, 0x98, 0x7a, 0x24,
105 0xf8, 0xa6, 0x44, 0x1a, 0x99, 0xc7, 0x25, 0x7b,
106 0x3a, 0x64, 0x86, 0xd8, 0x5b, 0x05, 0xe7, 0xb9,
107 0x8c, 0xd2, 0x30, 0x6e, 0xed, 0xb3, 0x51, 0x0f,
108 0x4e, 0x10, 0xf2, 0xac, 0x2f, 0x71, 0x93, 0xcd,
109 0x11, 0x4f, 0xad, 0xf3, 0x70, 0x2e, 0xcc, 0x92,
110 0xd3, 0x8d, 0x6f, 0x31, 0xb2, 0xec, 0x0e, 0x50,
111 0xaf, 0xf1, 0x13, 0x4d, 0xce, 0x90, 0x72, 0x2c,
112 0x6d, 0x33, 0xd1, 0x8f, 0x0c, 0x52, 0xb0, 0xee,
113 0x32, 0x6c, 0x8e, 0xd0, 0x53, 0x0d, 0xef, 0xb1,
114 0xf0, 0xae, 0x4c, 0x12, 0x91, 0xcf, 0x2d, 0x73,
115 0xca, 0x94, 0x76, 0x28, 0xab, 0xf5, 0x17, 0x49,
116 0x08, 0x56, 0xb4, 0xea, 0x69, 0x37, 0xd5, 0x8b,
117 0x57, 0x09, 0xeb, 0xb5, 0x36, 0x68, 0x8a, 0xd4,
118 0x95, 0xcb, 0x29, 0x77, 0xf4, 0xaa, 0x48, 0x16,
119 0xe9, 0xb7, 0x55, 0x0b, 0x88, 0xd6, 0x34, 0x6a,
120 0x2b, 0x75, 0x97, 0xc9, 0x4a, 0x14, 0xf6, 0xa8,
121 0x74, 0x2a, 0xc8, 0x96, 0x15, 0x4b, 0xa9, 0xf7,
122 0xb6, 0xe8, 0x0a, 0x54, 0xd7, 0x89, 0x6b, 0x35
123 };
124
125 dv_display_clk_infos();
126
127 /* Set serial number from UID chip */
128 if (i2c_read(CONFIG_SYS_UID_ADDR, 0, 1, buf, 8)) {
129 printf("\nUID @ 0x%02x read FAILED!!!\n", CONFIG_SYS_UID_ADDR);
130 forceenv("serial#", "FAILED");
131 } else {
132 if (buf[0] != 0x70) {
133 /* Device Family Code */
134 printf("\nUID @ 0x%02x read FAILED!!!\n", CONFIG_SYS_UID_ADDR);
135 forceenv("serial#", "FAILED");
136 }
137 }
138 /* Now check CRC */
139 tmp[0] = 0;
140 for (i = 0; i < 8; i++)
141 tmp[0] = crc_tbl[tmp[0] ^ buf[i]];
142
143 if (tmp[0] != 0) {
144 printf("\nUID @ 0x%02x - BAD CRC!!!\n", CONFIG_SYS_UID_ADDR);
145 forceenv("serial#", "FAILED");
146 } else {
147 /* CRC OK, set "serial" env variable */
148 sprintf((char *)&tmp[0], "%02x%02x%02x%02x%02x%02x",
149 buf[6], buf[5], buf[4], buf[3], buf[2], buf[1]);
150 forceenv("serial#", (char *)&tmp[0]);
151 }
152
153 if (!eth_hw_init())
154 printf("ethernet init failed!\n");
155
156 return(0);
157 }