2 * Copyright (C) 2007 Sergey Kubushyn <ksi@koi8.net>
4 * Parts are shamelessly stolen from various TI sources, original copyright
6 * -----------------------------------------------------------------
8 * Copyright (C) 2004 Texas Instruments.
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.
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.
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 * ----------------------------------------------------------------------------
29 #include <asm/arch/hardware.h>
30 #include "../common/psc.h"
31 #include "../common/misc.h"
33 DECLARE_GLOBAL_DATA_PTR;
37 /* arch number of the board */
38 gd->bd->bi_arch_number = MACH_TYPE_SCHMOOGIE;
40 /* address of boot parameters */
41 gd->bd->bi_boot_params = LINUX_BOOT_PARAM_ADDR;
43 /* Configure AEMIF pins (although this should be configured at boot time
44 * with pull-up/pull-down resistors) */
45 REG(PINMUX0) = 0x00000c1f;
47 davinci_errata_workarounds();
49 /* Power on required peripherals */
50 lpsc_on(DAVINCI_LPSC_GPIO);
52 #if !defined(CONFIG_SYS_USE_DSPLINK)
55 #endif /* CONFIG_SYS_USE_DSPLINK */
57 davinci_enable_uart0();
58 davinci_enable_emac();
61 lpsc_on(DAVINCI_LPSC_TIMER1);
69 u_int8_t tmp[20], buf[10];
72 /* Set serial number from UID chip */
73 const u_int8_t crc_tbl[256] = {
74 0x00, 0x5e, 0xbc, 0xe2, 0x61, 0x3f, 0xdd, 0x83,
75 0xc2, 0x9c, 0x7e, 0x20, 0xa3, 0xfd, 0x1f, 0x41,
76 0x9d, 0xc3, 0x21, 0x7f, 0xfc, 0xa2, 0x40, 0x1e,
77 0x5f, 0x01, 0xe3, 0xbd, 0x3e, 0x60, 0x82, 0xdc,
78 0x23, 0x7d, 0x9f, 0xc1, 0x42, 0x1c, 0xfe, 0xa0,
79 0xe1, 0xbf, 0x5d, 0x03, 0x80, 0xde, 0x3c, 0x62,
80 0xbe, 0xe0, 0x02, 0x5c, 0xdf, 0x81, 0x63, 0x3d,
81 0x7c, 0x22, 0xc0, 0x9e, 0x1d, 0x43, 0xa1, 0xff,
82 0x46, 0x18, 0xfa, 0xa4, 0x27, 0x79, 0x9b, 0xc5,
83 0x84, 0xda, 0x38, 0x66, 0xe5, 0xbb, 0x59, 0x07,
84 0xdb, 0x85, 0x67, 0x39, 0xba, 0xe4, 0x06, 0x58,
85 0x19, 0x47, 0xa5, 0xfb, 0x78, 0x26, 0xc4, 0x9a,
86 0x65, 0x3b, 0xd9, 0x87, 0x04, 0x5a, 0xb8, 0xe6,
87 0xa7, 0xf9, 0x1b, 0x45, 0xc6, 0x98, 0x7a, 0x24,
88 0xf8, 0xa6, 0x44, 0x1a, 0x99, 0xc7, 0x25, 0x7b,
89 0x3a, 0x64, 0x86, 0xd8, 0x5b, 0x05, 0xe7, 0xb9,
90 0x8c, 0xd2, 0x30, 0x6e, 0xed, 0xb3, 0x51, 0x0f,
91 0x4e, 0x10, 0xf2, 0xac, 0x2f, 0x71, 0x93, 0xcd,
92 0x11, 0x4f, 0xad, 0xf3, 0x70, 0x2e, 0xcc, 0x92,
93 0xd3, 0x8d, 0x6f, 0x31, 0xb2, 0xec, 0x0e, 0x50,
94 0xaf, 0xf1, 0x13, 0x4d, 0xce, 0x90, 0x72, 0x2c,
95 0x6d, 0x33, 0xd1, 0x8f, 0x0c, 0x52, 0xb0, 0xee,
96 0x32, 0x6c, 0x8e, 0xd0, 0x53, 0x0d, 0xef, 0xb1,
97 0xf0, 0xae, 0x4c, 0x12, 0x91, 0xcf, 0x2d, 0x73,
98 0xca, 0x94, 0x76, 0x28, 0xab, 0xf5, 0x17, 0x49,
99 0x08, 0x56, 0xb4, 0xea, 0x69, 0x37, 0xd5, 0x8b,
100 0x57, 0x09, 0xeb, 0xb5, 0x36, 0x68, 0x8a, 0xd4,
101 0x95, 0xcb, 0x29, 0x77, 0xf4, 0xaa, 0x48, 0x16,
102 0xe9, 0xb7, 0x55, 0x0b, 0x88, 0xd6, 0x34, 0x6a,
103 0x2b, 0x75, 0x97, 0xc9, 0x4a, 0x14, 0xf6, 0xa8,
104 0x74, 0x2a, 0xc8, 0x96, 0x15, 0x4b, 0xa9, 0xf7,
105 0xb6, 0xe8, 0x0a, 0x54, 0xd7, 0x89, 0x6b, 0x35
108 dv_display_clk_infos();
110 /* Set serial number from UID chip */
111 if (i2c_read(CONFIG_SYS_UID_ADDR, 0, 1, buf, 8)) {
112 printf("\nUID @ 0x%02x read FAILED!!!\n", CONFIG_SYS_UID_ADDR);
113 forceenv("serial#", "FAILED");
115 if (buf[0] != 0x70) {
116 /* Device Family Code */
117 printf("\nUID @ 0x%02x read FAILED!!!\n", CONFIG_SYS_UID_ADDR);
118 forceenv("serial#", "FAILED");
123 for (i = 0; i < 8; i++)
124 tmp[0] = crc_tbl[tmp[0] ^ buf[i]];
127 printf("\nUID @ 0x%02x - BAD CRC!!!\n", CONFIG_SYS_UID_ADDR);
128 forceenv("serial#", "FAILED");
130 /* CRC OK, set "serial" env variable */
131 sprintf((char *)&tmp[0], "%02x%02x%02x%02x%02x%02x",
132 buf[6], buf[5], buf[4], buf[3], buf[2], buf[1]);
133 forceenv("serial#", (char *)&tmp[0]);
137 printf("ethernet init failed!\n");