]> git.ipfire.org Git - thirdparty/u-boot.git/blame - board/davinci/schmoogie/schmoogie.c
Add GPL-2.0+ SPDX-License-Identifier to source files
[thirdparty/u-boot.git] / board / davinci / schmoogie / schmoogie.c
CommitLineData
c74b2108
SK
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 * ----------------------------------------------------------------------------
1a459660 11 * SPDX-License-Identifier: GPL-2.0+
c74b2108
SK
12 * ----------------------------------------------------------------------------
13 */
14
15#include <common.h>
16#include <i2c.h>
17#include <asm/arch/hardware.h>
d7f9b503 18#include <asm/arch/davinci_misc.h>
c74b2108 19
66b3f24d
DB
20DECLARE_GLOBAL_DATA_PTR;
21
c74b2108
SK
22int board_init(void)
23{
c74b2108
SK
24 /* address of boot parameters */
25 gd->bd->bi_boot_params = LINUX_BOOT_PARAM_ADDR;
26
0cd18fa9
HV
27 /* Configure AEMIF pins (although this should be configured at boot time
28 * with pull-up/pull-down resistors) */
29 REG(PINMUX0) = 0x00000c1f;
30
31 davinci_errata_workarounds();
c74b2108
SK
32
33 /* Power on required peripherals */
c74b2108
SK
34 lpsc_on(DAVINCI_LPSC_GPIO);
35
6d0f6bcf 36#if !defined(CONFIG_SYS_USE_DSPLINK)
c74b2108
SK
37 /* Powerup the DSP */
38 dsp_on();
6d0f6bcf 39#endif /* CONFIG_SYS_USE_DSPLINK */
c74b2108 40
0cd18fa9
HV
41 davinci_enable_uart0();
42 davinci_enable_emac();
43 davinci_enable_i2c();
c74b2108 44
0cd18fa9 45 lpsc_on(DAVINCI_LPSC_TIMER1);
c74b2108
SK
46 timer_init();
47
48 return(0);
49}
50
264bbdd1 51int misc_init_r(void)
c74b2108
SK
52{
53 u_int8_t tmp[20], buf[10];
54 int i = 0;
c74b2108
SK
55
56 /* Set serial number from UID chip */
0cd18fa9 57 const u_int8_t crc_tbl[256] = {
c74b2108
SK
58 0x00, 0x5e, 0xbc, 0xe2, 0x61, 0x3f, 0xdd, 0x83,
59 0xc2, 0x9c, 0x7e, 0x20, 0xa3, 0xfd, 0x1f, 0x41,
60 0x9d, 0xc3, 0x21, 0x7f, 0xfc, 0xa2, 0x40, 0x1e,
61 0x5f, 0x01, 0xe3, 0xbd, 0x3e, 0x60, 0x82, 0xdc,
62 0x23, 0x7d, 0x9f, 0xc1, 0x42, 0x1c, 0xfe, 0xa0,
63 0xe1, 0xbf, 0x5d, 0x03, 0x80, 0xde, 0x3c, 0x62,
64 0xbe, 0xe0, 0x02, 0x5c, 0xdf, 0x81, 0x63, 0x3d,
65 0x7c, 0x22, 0xc0, 0x9e, 0x1d, 0x43, 0xa1, 0xff,
66 0x46, 0x18, 0xfa, 0xa4, 0x27, 0x79, 0x9b, 0xc5,
67 0x84, 0xda, 0x38, 0x66, 0xe5, 0xbb, 0x59, 0x07,
68 0xdb, 0x85, 0x67, 0x39, 0xba, 0xe4, 0x06, 0x58,
69 0x19, 0x47, 0xa5, 0xfb, 0x78, 0x26, 0xc4, 0x9a,
70 0x65, 0x3b, 0xd9, 0x87, 0x04, 0x5a, 0xb8, 0xe6,
71 0xa7, 0xf9, 0x1b, 0x45, 0xc6, 0x98, 0x7a, 0x24,
72 0xf8, 0xa6, 0x44, 0x1a, 0x99, 0xc7, 0x25, 0x7b,
73 0x3a, 0x64, 0x86, 0xd8, 0x5b, 0x05, 0xe7, 0xb9,
74 0x8c, 0xd2, 0x30, 0x6e, 0xed, 0xb3, 0x51, 0x0f,
75 0x4e, 0x10, 0xf2, 0xac, 0x2f, 0x71, 0x93, 0xcd,
76 0x11, 0x4f, 0xad, 0xf3, 0x70, 0x2e, 0xcc, 0x92,
77 0xd3, 0x8d, 0x6f, 0x31, 0xb2, 0xec, 0x0e, 0x50,
78 0xaf, 0xf1, 0x13, 0x4d, 0xce, 0x90, 0x72, 0x2c,
79 0x6d, 0x33, 0xd1, 0x8f, 0x0c, 0x52, 0xb0, 0xee,
80 0x32, 0x6c, 0x8e, 0xd0, 0x53, 0x0d, 0xef, 0xb1,
81 0xf0, 0xae, 0x4c, 0x12, 0x91, 0xcf, 0x2d, 0x73,
82 0xca, 0x94, 0x76, 0x28, 0xab, 0xf5, 0x17, 0x49,
83 0x08, 0x56, 0xb4, 0xea, 0x69, 0x37, 0xd5, 0x8b,
84 0x57, 0x09, 0xeb, 0xb5, 0x36, 0x68, 0x8a, 0xd4,
85 0x95, 0xcb, 0x29, 0x77, 0xf4, 0xaa, 0x48, 0x16,
86 0xe9, 0xb7, 0x55, 0x0b, 0x88, 0xd6, 0x34, 0x6a,
87 0x2b, 0x75, 0x97, 0xc9, 0x4a, 0x14, 0xf6, 0xa8,
88 0x74, 0x2a, 0xc8, 0x96, 0x15, 0x4b, 0xa9, 0xf7,
89 0xb6, 0xe8, 0x0a, 0x54, 0xd7, 0x89, 0x6b, 0x35
90 };
91
c74b2108 92 /* Set serial number from UID chip */
6d0f6bcf
JCPV
93 if (i2c_read(CONFIG_SYS_UID_ADDR, 0, 1, buf, 8)) {
94 printf("\nUID @ 0x%02x read FAILED!!!\n", CONFIG_SYS_UID_ADDR);
b6e7bd97 95 setenv("serial#", "FAILED");
c74b2108 96 } else {
264bbdd1
HV
97 if (buf[0] != 0x70) {
98 /* Device Family Code */
6d0f6bcf 99 printf("\nUID @ 0x%02x read FAILED!!!\n", CONFIG_SYS_UID_ADDR);
b6e7bd97 100 setenv("serial#", "FAILED");
c74b2108
SK
101 }
102 }
103 /* Now check CRC */
104 tmp[0] = 0;
105 for (i = 0; i < 8; i++)
106 tmp[0] = crc_tbl[tmp[0] ^ buf[i]];
107
108 if (tmp[0] != 0) {
6d0f6bcf 109 printf("\nUID @ 0x%02x - BAD CRC!!!\n", CONFIG_SYS_UID_ADDR);
b6e7bd97 110 setenv("serial#", "FAILED");
c74b2108
SK
111 } else {
112 /* CRC OK, set "serial" env variable */
b361acd6 113 sprintf((char *)&tmp[0], "%02x%02x%02x%02x%02x%02x",
c74b2108 114 buf[6], buf[5], buf[4], buf[3], buf[2], buf[1]);
b6e7bd97 115 setenv("serial#", (char *)&tmp[0]);
c74b2108
SK
116 }
117
c74b2108
SK
118 return(0);
119}