misc.c 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. /*
  2. * Miscelaneous DaVinci functions.
  3. *
  4. * Copyright (C) 2009 Nick Thompson, GE Fanuc Ltd, <nick.thompson@gefanuc.com>
  5. * Copyright (C) 2007 Sergey Kubushyn <ksi@koi8.net>
  6. * Copyright (C) 2008 Lyrtech <www.lyrtech.com>
  7. * Copyright (C) 2004 Texas Instruments.
  8. *
  9. * See file CREDITS for list of people who contributed to this
  10. * project.
  11. *
  12. * This program is free software; you can redistribute it and/or modify
  13. * it under the terms of the GNU General Public License as published by
  14. * the Free Software Foundation; either version 2 of the License, or
  15. * (at your option) any later version.
  16. *
  17. * This program is distributed in the hope that it will be useful,
  18. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  19. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  20. * GNU General Public License for more details.
  21. *
  22. * You should have received a copy of the GNU General Public License
  23. * along with this program; if not, write to the Free Software
  24. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  25. */
  26. #include <common.h>
  27. #include <i2c.h>
  28. #include <net.h>
  29. #include <asm/arch/hardware.h>
  30. #include <asm/io.h>
  31. #include <asm/arch/davinci_misc.h>
  32. DECLARE_GLOBAL_DATA_PTR;
  33. int dram_init(void)
  34. {
  35. /* dram_init must store complete ramsize in gd->ram_size */
  36. gd->ram_size = get_ram_size(
  37. (volatile void *)CONFIG_SYS_SDRAM_BASE,
  38. CONFIG_MAX_RAM_BANK_SIZE);
  39. return 0;
  40. }
  41. void dram_init_banksize(void)
  42. {
  43. gd->bd->bi_dram[0].start = CONFIG_SYS_SDRAM_BASE;
  44. gd->bd->bi_dram[0].size = gd->ram_size;
  45. }
  46. #ifdef CONFIG_DRIVER_TI_EMAC
  47. /* Read ethernet MAC address from EEPROM for DVEVM compatible boards.
  48. * Returns 1 if found, 0 otherwise.
  49. */
  50. int dvevm_read_mac_address(uint8_t *buf)
  51. {
  52. #ifdef CONFIG_SYS_I2C_EEPROM_ADDR
  53. /* Read MAC address. */
  54. if (i2c_read(CONFIG_SYS_I2C_EEPROM_ADDR, 0x7F00, CONFIG_SYS_I2C_EEPROM_ADDR_LEN,
  55. (uint8_t *) &buf[0], 6))
  56. goto i2cerr;
  57. /* Check that MAC address is valid. */
  58. if (!is_valid_ether_addr(buf))
  59. goto err;
  60. return 1; /* Found */
  61. i2cerr:
  62. printf("Read from EEPROM @ 0x%02x failed\n", CONFIG_SYS_I2C_EEPROM_ADDR);
  63. err:
  64. #endif /* CONFIG_SYS_I2C_EEPROM_ADDR */
  65. return 0;
  66. }
  67. /*
  68. * If there is no MAC address in the environment, then it will be initialized
  69. * (silently) from the value in the EEPROM.
  70. */
  71. void davinci_sync_env_enetaddr(uint8_t *rom_enetaddr)
  72. {
  73. uint8_t env_enetaddr[6];
  74. eth_getenv_enetaddr_by_index(0, env_enetaddr);
  75. if (!memcmp(env_enetaddr, "\0\0\0\0\0\0", 6)) {
  76. /* There is no MAC address in the environment, so we initialize
  77. * it from the value in the EEPROM. */
  78. debug("### Setting environment from EEPROM MAC address = "
  79. "\"%pM\"\n",
  80. env_enetaddr);
  81. eth_setenv_enetaddr("ethaddr", rom_enetaddr);
  82. }
  83. }
  84. #endif /* DAVINCI_EMAC */