1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27#include <common.h>
28#include <i2c.h>
29#include <asm/arch/hardware.h>
30#include <asm/arch/davinci_misc.h>
31
32DECLARE_GLOBAL_DATA_PTR;
33
34int board_init(void)
35{
36
37 gd->bd->bi_arch_number = MACH_TYPE_SCHMOOGIE;
38
39
40 gd->bd->bi_boot_params = LINUX_BOOT_PARAM_ADDR;
41
42
43
44 REG(PINMUX0) = 0x00000c1f;
45
46 davinci_errata_workarounds();
47
48
49 lpsc_on(DAVINCI_LPSC_GPIO);
50
51#if !defined(CONFIG_SYS_USE_DSPLINK)
52
53 dsp_on();
54#endif
55
56 davinci_enable_uart0();
57 davinci_enable_emac();
58 davinci_enable_i2c();
59
60 lpsc_on(DAVINCI_LPSC_TIMER1);
61 timer_init();
62
63 return(0);
64}
65
66int misc_init_r(void)
67{
68 u_int8_t tmp[20], buf[10];
69 int i = 0;
70
71
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
105 };
106
107
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 setenv("serial#", "FAILED");
111 } else {
112 if (buf[0] != 0x70) {
113
114 printf("\nUID @ 0x%02x read FAILED!!!\n", CONFIG_SYS_UID_ADDR);
115 setenv("serial#", "FAILED");
116 }
117 }
118
119 tmp[0] = 0;
120 for (i = 0; i < 8; i++)
121 tmp[0] = crc_tbl[tmp[0] ^ buf[i]];
122
123 if (tmp[0] != 0) {
124 printf("\nUID @ 0x%02x - BAD CRC!!!\n", CONFIG_SYS_UID_ADDR);
125 setenv("serial#", "FAILED");
126 } else {
127
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 setenv("serial#", (char *)&tmp[0]);
131 }
132
133 return(0);
134}
135