uboot/board/davinci/schmoogie/schmoogie.c
<<
>>
Prefs
   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 <asm/arch/davinci_misc.h>
  31
  32DECLARE_GLOBAL_DATA_PTR;
  33
  34int 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
  66int 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        /* 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                setenv("serial#", "FAILED");
 111        } else {
 112                if (buf[0] != 0x70) {
 113                        /* Device Family Code */
 114                        printf("\nUID @ 0x%02x read FAILED!!!\n", CONFIG_SYS_UID_ADDR);
 115                        setenv("serial#", "FAILED");
 116                }
 117        }
 118        /* Now check CRC */
 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                /* 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                setenv("serial#", (char *)&tmp[0]);
 131        }
 132
 133        return(0);
 134}
 135