ZOOM1 Remove more legacy NAND defines.
[platform/kernel/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 "../common/misc.h"
31
32 DECLARE_GLOBAL_DATA_PTR;
33
34 int board_init(void)
35 {
36         /* arch number of the board */
37         gd->bd->bi_arch_number = MACH_TYPE_SCHMOOGIE;
38
39         /* address of boot parameters */
40         gd->bd->bi_boot_params = LINUX_BOOT_PARAM_ADDR;
41
42         /* Configure AEMIF pins (although this should be configured at boot time
43          * with pull-up/pull-down resistors) */
44         REG(PINMUX0) = 0x00000c1f;
45
46         davinci_errata_workarounds();
47
48         /* Power on required peripherals */
49         lpsc_on(DAVINCI_LPSC_GPIO);
50
51 #if !defined(CONFIG_SYS_USE_DSPLINK)
52         /* Powerup the DSP */
53         dsp_on();
54 #endif /* CONFIG_SYS_USE_DSPLINK */
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
66 int misc_init_r(void)
67 {
68         u_int8_t        tmp[20], buf[10];
69         int             i = 0;
70
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
105                 };
106
107         dv_display_clk_infos();
108
109         /* Set serial number from UID chip */
110         if (i2c_read(CONFIG_SYS_UID_ADDR, 0, 1, buf, 8)) {
111                 printf("\nUID @ 0x%02x read FAILED!!!\n", CONFIG_SYS_UID_ADDR);
112                 forceenv("serial#", "FAILED");
113         } else {
114                 if (buf[0] != 0x70) {
115                         /* Device Family Code */
116                         printf("\nUID @ 0x%02x read FAILED!!!\n", CONFIG_SYS_UID_ADDR);
117                         forceenv("serial#", "FAILED");
118                 }
119         }
120         /* Now check CRC */
121         tmp[0] = 0;
122         for (i = 0; i < 8; i++)
123                 tmp[0] = crc_tbl[tmp[0] ^ buf[i]];
124
125         if (tmp[0] != 0) {
126                 printf("\nUID @ 0x%02x - BAD CRC!!!\n", CONFIG_SYS_UID_ADDR);
127                 forceenv("serial#", "FAILED");
128         } else {
129                 /* CRC OK, set "serial" env variable */
130                 sprintf((char *)&tmp[0], "%02x%02x%02x%02x%02x%02x",
131                         buf[6], buf[5], buf[4], buf[3], buf[2], buf[1]);
132                 forceenv("serial#", (char *)&tmp[0]);
133         }
134
135         if (!eth_hw_init())
136                 printf("ethernet init failed!\n");
137
138         return(0);
139 }