ZOOM1 Remove more legacy NAND defines.
[platform/kernel/u-boot.git] / board / davinci / common / misc.c
1 /*
2  * Miscelaneous DaVinci functions.
3  *
4  * Copyright (C) 2007 Sergey Kubushyn <ksi@koi8.net>
5  * Copyright (C) 2008 Lyrtech <www.lyrtech.com>
6  * Copyright (C) 2004 Texas Instruments.
7  *
8  * See file CREDITS for list of people who contributed to this
9  * project.
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 #include <common.h>
27 #include <i2c.h>
28 #include <net.h>
29 #include <asm/arch/hardware.h>
30
31 DECLARE_GLOBAL_DATA_PTR;
32
33 int dram_init(void)
34 {
35         gd->bd->bi_dram[0].start = PHYS_SDRAM_1;
36         gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE;
37
38         return(0);
39 }
40
41 static int dv_get_pllm_output(uint32_t pllm)
42 {
43         return (pllm + 1) * (CONFIG_SYS_HZ_CLOCK / 1000000);
44 }
45
46 void dv_display_clk_infos(void)
47 {
48         printf("ARM Clock: %dMHz\n", dv_get_pllm_output(REG(PLL1_PLLM)) / 2);
49         printf("DDR Clock: %dMHz\n", dv_get_pllm_output(REG(PLL2_PLLM)) /
50                ((REG(PLL2_DIV2) & 0x1f) + 1) / 2);
51 }
52
53 #ifdef CONFIG_DRIVER_TI_EMAC
54
55 /* Read ethernet MAC address from EEPROM for DVEVM compatible boards.
56  * Returns 1 if found, 0 otherwise.
57  */
58 int dvevm_read_mac_address(uint8_t *buf)
59 {
60 #ifdef CONFIG_SYS_I2C_EEPROM_ADDR
61         /* Read MAC address. */
62         if (i2c_read(CONFIG_SYS_I2C_EEPROM_ADDR, 0x7F00, CONFIG_SYS_I2C_EEPROM_ADDR_LEN,
63                      (uint8_t *) &buf[0], 6))
64                 goto i2cerr;
65
66         /* Check that MAC address is valid. */
67         if (!is_valid_ether_addr(buf))
68                 goto err;
69
70         return 1; /* Found */
71
72 i2cerr:
73         printf("Read from EEPROM @ 0x%02x failed\n", CONFIG_SYS_I2C_EEPROM_ADDR);
74 err:
75 #endif /* CONFIG_SYS_I2C_EEPROM_ADDR */
76
77         return 0;
78 }
79
80 /* If there is a MAC address in the environment, and if it is not identical to
81  * the MAC address in the EEPROM, then a warning is printed and the MAC address
82  * from the environment is used.
83  *
84  * If there is no MAC address in the environment, then it will be initialized
85  * (silently) from the value in the EEPROM.
86  */
87 void dv_configure_mac_address(uint8_t *rom_enetaddr)
88 {
89         int i;
90         u_int8_t env_enetaddr[6];
91         char *tmp = getenv("ethaddr");
92         char *end;
93
94         /* Read Ethernet MAC address from the U-Boot environment.
95          * If it is not defined, env_enetaddr[] will be cleared. */
96         for (i = 0; i < 6; i++) {
97                 env_enetaddr[i] = tmp ? simple_strtoul(tmp, &end, 16) : 0;
98                 if (tmp)
99                         tmp = (*end) ? end+1 : end;
100         }
101
102         /* Check if EEPROM and U-Boot environment MAC addresses match. */
103         if (memcmp(env_enetaddr, "\0\0\0\0\0\0", 6) != 0 &&
104             memcmp(env_enetaddr, rom_enetaddr, 6) != 0) {
105                 printf("Warning: MAC addresses don't match:\n");
106                 printf("  EEPROM MAC address: %pM\n", rom_enetaddr);
107                 printf("     \"ethaddr\" value: %pM\n", env_enetaddr) ;
108                 debug("### Using MAC address from environment\n");
109         }
110         if (!tmp) {
111                 char ethaddr[20];
112
113                 /* There is no MAC address in the environment, so we initialize
114                  * it from the value in the EEPROM. */
115                 sprintf(ethaddr, "%pM", rom_enetaddr) ;
116                 debug("### Setting environment from EEPROM MAC address = \"%s\"\n",
117                       ethaddr);
118                 setenv("ethaddr", ethaddr);
119         }
120 }
121
122 #endif  /* DAVINCI_EMAC */