uboot/board/innokom/innokom.c
<<
>>
Prefs
   1/*
   2 * (C) Copyright 2002
   3 * Robert Schwebel, Pengutronix, r.schwebel@pengutronix.de
   4 * Kyle Harris, Nexus Technologies, Inc., kharris@nexus-tech.net
   5 * Marius Groeger, Sysgo Real-Time Solutions GmbH, mgroeger@sysgo.de
   6 *
   7 * See file CREDITS for list of people who contributed to this
   8 * project.
   9 *
  10 * This program is free software; you can redistribute it and/or
  11 * modify it under the terms of the GNU General Public License as
  12 * published by the Free Software Foundation; either version 2 of
  13 * the License, or (at your option) any later version.
  14 *
  15 * This program is distributed in the hope that it will be useful,
  16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  18 * GNU General Public License for more details.
  19 *
  20 * You should have received a copy of the GNU General Public License
  21 * along with this program; if not, write to the Free Software
  22 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
  23 * MA 02111-1307 USA
  24 */
  25
  26#include <common.h>
  27#include <netdev.h>
  28#include <asm/arch/pxa-regs.h>
  29#include <asm/mach-types.h>
  30#include <asm/io.h>
  31
  32DECLARE_GLOBAL_DATA_PTR;
  33
  34#ifdef CONFIG_SHOW_BOOT_PROGRESS
  35# define SHOW_BOOT_PROGRESS(arg)        show_boot_progress(arg)
  36#else
  37# define SHOW_BOOT_PROGRESS(arg)
  38#endif
  39
  40/**
  41 * i2c_init_board - reset i2c bus. When the board is powercycled during a
  42 * bus transfer it might hang; for details see doc/I2C_Edge_Conditions.
  43 * The Innokom board has GPIO70 connected to SCLK which can be toggled
  44 * until all chips think that their current cycles are finished.
  45 */
  46int i2c_init_board(void)
  47{
  48        int i, icr;
  49
  50        /* disable I2C controller first, otherwhise it thinks we want to    */
  51        /* talk to the slave port...                                        */
  52        icr = readl(ICR);
  53        writel(readl(ICR) & ~(ICR_SCLE | ICR_IUE), ICR);
  54
  55        /* set gpio pin low _before_ we change direction to output          */
  56        writel(GPIO_bit(70), GPCR(70));
  57
  58        /* now toggle between output=low and high-impedance                 */
  59        for (i = 0; i < 20; i++) {
  60                writel(readl(GPDR(70)) | GPIO_bit(70), GPDR(70));  /* output */
  61                udelay(10);
  62                writel(readl(GPDR(70)) & ~GPIO_bit(70), GPDR(70)); /* input  */
  63                udelay(10);
  64        }
  65
  66        writel(icr, ICR);
  67
  68        return 0;
  69}
  70
  71
  72/**
  73 * misc_init_r: - misc initialisation routines
  74 */
  75
  76int misc_init_r(void)
  77{
  78        char *str;
  79
  80        /* determine if the software update key is pressed during startup   */
  81        if (readl(GPLR0) & 0x00000800) {
  82                printf("using bootcmd_normal (sw-update button not pressed)\n");
  83                str = getenv("bootcmd_normal");
  84        } else {
  85                printf("using bootcmd_update (sw-update button pressed)\n");
  86                str = getenv("bootcmd_update");
  87        }
  88
  89        setenv("bootcmd",str);
  90
  91        return 0;
  92}
  93
  94
  95/**
  96 * board_init: - setup some data structures
  97 *
  98 * @return: 0 in case of success
  99 */
 100
 101int board_init (void)
 102{
 103        /* We have RAM, disable cache */
 104        dcache_disable();
 105        icache_disable();
 106
 107        gd->bd->bi_arch_number = MACH_TYPE_INNOKOM;
 108        gd->bd->bi_boot_params = 0xa0000100;
 109        gd->bd->bi_baudrate = CONFIG_BAUDRATE;
 110
 111        return 0;
 112}
 113
 114extern void pxa_dram_init(void);
 115int dram_init(void)
 116{
 117        pxa_dram_init();
 118        gd->ram_size = PHYS_SDRAM_1_SIZE;
 119        return 0;
 120}
 121
 122void dram_init_banksize(void)
 123{
 124        gd->bd->bi_dram[0].start = PHYS_SDRAM_1;
 125        gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE;
 126}
 127
 128/**
 129 * innokom_set_led: - switch LEDs on or off
 130 *
 131 * @param led:   LED to switch (0,1,2)
 132 * @param state: switch on (1) or off (0)
 133 */
 134
 135void innokom_set_led(int led, int state)
 136{
 137        switch(led) {
 138/*
 139                case 0: if (state==1) {
 140                                GPCR0 |= CSB226_USER_LED0;
 141                        } else if (state==0) {
 142                                GPSR0 |= CSB226_USER_LED0;
 143                        }
 144                        break;
 145
 146                case 1: if (state==1) {
 147                                GPCR0 |= CSB226_USER_LED1;
 148                        } else if (state==0) {
 149                                GPSR0 |= CSB226_USER_LED1;
 150                        }
 151                        break;
 152
 153                case 2: if (state==1) {
 154                                GPCR0 |= CSB226_USER_LED2;
 155                        } else if (state==0) {
 156                                GPSR0 |= CSB226_USER_LED2;
 157                        }
 158                        break;
 159*/
 160        }
 161
 162        return;
 163}
 164
 165
 166/**
 167 * show_boot_progress: - indicate state of the boot process
 168 *
 169 * @param status: Status number - see README for details.
 170 *
 171 * The CSB226 does only have 3 LEDs, so we switch them on at the most
 172 * important states (1, 5, 15).
 173 */
 174
 175void show_boot_progress (int status)
 176{
 177        switch(status) {
 178/*
 179                case  1: csb226_set_led(0,1); break;
 180                case  5: csb226_set_led(1,1); break;
 181                case 15: csb226_set_led(2,1); break;
 182*/
 183        }
 184
 185        return;
 186}
 187
 188#ifdef CONFIG_CMD_NET
 189int board_eth_init(bd_t *bis)
 190{
 191        int rc = 0;
 192#ifdef CONFIG_SMC91111
 193        rc = smc91111_initialize(0, CONFIG_SMC91111_BASE);
 194#endif
 195        return rc;
 196}
 197#endif
 198