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