uboot/board/davinci/sonata/sonata.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 * SPDX-License-Identifier:     GPL-2.0+
  12 * ----------------------------------------------------------------------------
  13 */
  14
  15#include <common.h>
  16#include <nand.h>
  17#include <asm/ti-common/davinci_nand.h>
  18#include <asm/arch/hardware.h>
  19#include <asm/arch/davinci_misc.h>
  20
  21DECLARE_GLOBAL_DATA_PTR;
  22
  23int board_init(void)
  24{
  25        /* address of boot parameters */
  26        gd->bd->bi_boot_params = LINUX_BOOT_PARAM_ADDR;
  27
  28        /* Configure AEMIF pins (although this should be configured at boot time
  29         * with pull-up/pull-down resistors) */
  30        REG(PINMUX0) = 0x00000c1f;
  31
  32        davinci_errata_workarounds();
  33
  34        /* Power on required peripherals */
  35        lpsc_on(DAVINCI_LPSC_GPIO);
  36
  37#if !defined(CONFIG_SYS_USE_DSPLINK)
  38        /* Powerup the DSP */
  39        dsp_on();
  40#endif /* CONFIG_SYS_USE_DSPLINK */
  41
  42        davinci_enable_uart0();
  43        davinci_enable_emac();
  44        davinci_enable_i2c();
  45
  46        lpsc_on(DAVINCI_LPSC_TIMER1);
  47        timer_init();
  48
  49        return(0);
  50}
  51
  52int misc_init_r(void)
  53{
  54        uint8_t eeprom_enetaddr[6];
  55
  56        /* Read Ethernet MAC address from EEPROM if available. */
  57        if (dvevm_read_mac_address(eeprom_enetaddr))
  58                davinci_sync_env_enetaddr(eeprom_enetaddr);
  59
  60        return(0);
  61}
  62
  63#ifdef CONFIG_NAND_DAVINCI
  64
  65/* Set WP on deselect, write enable on select */
  66static void nand_sonata_select_chip(struct mtd_info *mtd, int chip)
  67{
  68#define GPIO_SET_DATA01 0x01c67018
  69#define GPIO_CLR_DATA01 0x01c6701c
  70#define GPIO_NAND_WP    (1 << 4)
  71#ifdef SONATA_BOARD_GPIOWP
  72        if (chip < 0) {
  73                REG(GPIO_CLR_DATA01) |= GPIO_NAND_WP;
  74        } else {
  75                REG(GPIO_SET_DATA01) |= GPIO_NAND_WP;
  76        }
  77#endif
  78}
  79
  80int board_nand_init(struct nand_chip *nand)
  81{
  82        davinci_nand_init(nand);
  83        nand->select_chip = nand_sonata_select_chip;
  84        return 0;
  85}
  86
  87#endif /* CONFIG_NAND_DAVINCI */
  88