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