uboot/board/actux1/actux1.c
<<
>>
Prefs
   1/*
   2 * (C) Copyright 2007
   3 * Michael Schwingen, michael@schwingen.org
   4 *
   5 * (C) Copyright 2006
   6 * Stefan Roese, DENX Software Engineering, sr@denx.de.
   7 *
   8 * (C) Copyright 2002
   9 * Kyle Harris, Nexus Technologies, Inc. kharris@nexus-tech.net
  10 *
  11 * (C) Copyright 2002
  12 * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
  13 * Marius Groeger <mgroeger@sysgo.de>
  14 *
  15 * See file CREDITS for list of people who contributed to this
  16 * project.
  17 *
  18 * This program is free software; you can redistribute it and/or
  19 * modify it under the terms of the GNU General Public License as
  20 * published by the Free Software Foundation; either version 2 of
  21 * the License, or (at your option) any later version.
  22 *
  23 * This program is distributed in the hope that it will be useful,
  24 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  25 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  26 * GNU General Public License for more details.
  27 *
  28 * You should have received a copy of the GNU General Public License
  29 * along with this program; if not, write to the Free Software
  30 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
  31 * MA 02111-1307 USA
  32 */
  33
  34#include <common.h>
  35#include <command.h>
  36#include <malloc.h>
  37#include <asm/arch/ixp425.h>
  38#include <asm/io.h>
  39#include <miiphy.h>
  40#ifdef CONFIG_PCI
  41#include <pci.h>
  42#include <asm/arch/ixp425pci.h>
  43#endif
  44
  45#include "actux1_hw.h"
  46
  47DECLARE_GLOBAL_DATA_PTR;
  48
  49int board_early_init_f(void)
  50{
  51        /* CS5: Debug port */
  52        writel(0x9d520003, IXP425_EXP_CS5);
  53        /* CS6: HwRel */
  54        writel(0x81860001, IXP425_EXP_CS6);
  55        /* CS7: LEDs */
  56        writel(0x80900003, IXP425_EXP_CS7);
  57        return 0;
  58}
  59
  60int board_init(void)
  61{
  62        gd->bd->bi_arch_number = MACH_TYPE_ACTUX1;
  63
  64        /* adress of boot parameters */
  65        gd->bd->bi_boot_params = 0x00000100;
  66
  67        GPIO_OUTPUT_CLEAR(CONFIG_SYS_GPIO_IORST);
  68        GPIO_OUTPUT_ENABLE(CONFIG_SYS_GPIO_IORST);
  69
  70        /* Setup GPIOs for PCI INTA */
  71        GPIO_OUTPUT_DISABLE(CONFIG_SYS_GPIO_PCI1_INTA);
  72        GPIO_INT_ACT_LOW_SET(CONFIG_SYS_GPIO_PCI1_INTA);
  73
  74        /* Setup GPIOs for 33MHz clock output */
  75        GPIO_OUTPUT_ENABLE(CONFIG_SYS_GPIO_PCI_CLK);
  76        GPIO_OUTPUT_ENABLE(CONFIG_SYS_GPIO_EXTBUS_CLK);
  77        writel(0x011001FF, IXP425_GPIO_GPCLKR);
  78
  79        udelay(533);
  80        GPIO_OUTPUT_SET(CONFIG_SYS_GPIO_IORST);
  81
  82        ACTUX1_LED1(2);
  83        ACTUX1_LED2(2);
  84        ACTUX1_LED3(0);
  85        ACTUX1_LED4(0);
  86        ACTUX1_LED5(0);
  87        ACTUX1_LED6(0);
  88        ACTUX1_LED7(0);
  89
  90        ACTUX1_HS(ACTUX1_HS_DCD);
  91
  92        return 0;
  93}
  94
  95/*
  96 * Check Board Identity
  97 */
  98int checkboard(void)
  99{
 100        char buf[64];
 101        int i = getenv_f("serial#", buf, sizeof(buf));
 102
 103        puts("Board: AcTux-1 rev.");
 104        putc(ACTUX1_BOARDREL + 'A' - 1);
 105
 106        if (i > 0) {
 107                puts(", serial# ");
 108                puts(buf);
 109        }
 110        putc('\n');
 111
 112        return 0;
 113}
 114
 115/*************************************************************************
 116 * get_board_rev() - setup to pass kernel board revision information
 117 * 0 = reserved
 118 * 1 = Rev. A
 119 * 2 = Rev. B
 120 *************************************************************************/
 121u32 get_board_rev(void)
 122{
 123        return ACTUX1_BOARDREL;
 124}
 125
 126int dram_init(void)
 127{
 128        gd->ram_size = get_ram_size(CONFIG_SYS_SDRAM_BASE, 128<<20);
 129        return 0;
 130}
 131
 132
 133#ifdef CONFIG_PCI
 134struct pci_controller hose;
 135
 136void pci_init_board(void)
 137{
 138        pci_ixp_init(&hose);
 139}
 140#endif
 141
 142void reset_phy(void)
 143{
 144        u16 id1, id2;
 145
 146        /* initialize the PHY */
 147        miiphy_reset("NPE0", CONFIG_PHY_ADDR);
 148
 149        miiphy_read("NPE0", CONFIG_PHY_ADDR, MII_PHYSID1, &id1);
 150        miiphy_read("NPE0", CONFIG_PHY_ADDR, MII_PHYSID2, &id2);
 151
 152        id2 &= 0xFFF0;          /* mask out revision bits */
 153
 154        if (id1 == 0x13 && id2 == 0x78e0) {
 155                /*
 156                 * LXT971/LXT972 PHY: set LED outputs:
 157                 * LED1(green) = Link/ACT,
 158                 * LED2 (unused) = LINK,
 159                 * LED3(red) = Coll
 160                 */
 161                miiphy_write("NPE0", CONFIG_PHY_ADDR, 20, 0xD432);
 162        } else if (id1 == 0x143 && id2 == 0xbc30) {
 163                /* BCM5241: default values are OK */
 164        } else
 165                printf("unknown ethernet PHY ID: %x %x\n", id1, id2);
 166}
 167