diff options
Diffstat (limited to 'board/davinci')
-rw-r--r-- | board/davinci/common/misc.c | 41 | ||||
-rw-r--r-- | board/davinci/common/misc.h | 2 | ||||
-rw-r--r-- | board/davinci/da8xxevm/config.mk | 2 | ||||
-rw-r--r-- | board/davinci/da8xxevm/da830evm.c | 12 | ||||
-rw-r--r-- | board/davinci/da8xxevm/da850evm.c | 89 | ||||
-rw-r--r-- | board/davinci/dm355evm/config.mk | 2 | ||||
-rw-r--r-- | board/davinci/dm355leopard/config.mk | 2 | ||||
-rw-r--r-- | board/davinci/dm365evm/config.mk | 2 | ||||
-rw-r--r-- | board/davinci/dm365evm/dm365evm.c | 2 | ||||
-rw-r--r-- | board/davinci/dm6467evm/config.mk | 2 | ||||
-rw-r--r-- | board/davinci/dvevm/config.mk | 2 | ||||
-rw-r--r-- | board/davinci/dvevm/dvevm.c | 2 | ||||
-rw-r--r-- | board/davinci/schmoogie/config.mk | 2 | ||||
-rw-r--r-- | board/davinci/schmoogie/schmoogie.c | 8 | ||||
-rw-r--r-- | board/davinci/sffsdr/config.mk | 2 | ||||
-rw-r--r-- | board/davinci/sffsdr/sffsdr.c | 2 | ||||
-rw-r--r-- | board/davinci/sonata/config.mk | 2 | ||||
-rw-r--r-- | board/davinci/sonata/sonata.c | 2 |
18 files changed, 124 insertions, 54 deletions
diff --git a/board/davinci/common/misc.c b/board/davinci/common/misc.c index 86a875eeaa..b60a46e96d 100644 --- a/board/davinci/common/misc.c +++ b/board/davinci/common/misc.c @@ -85,45 +85,22 @@ err: return 0; } -/* If there is a MAC address in the environment, and if it is not identical to - * the MAC address in the EEPROM, then a warning is printed and the MAC address - * from the environment is used. - * +/* * If there is no MAC address in the environment, then it will be initialized * (silently) from the value in the EEPROM. */ -void dv_configure_mac_address(uint8_t *rom_enetaddr) +void davinci_sync_env_enetaddr(uint8_t *rom_enetaddr) { - int i; - u_int8_t env_enetaddr[6]; - char *tmp = getenv("ethaddr"); - char *end; - - /* Read Ethernet MAC address from the U-Boot environment. - * If it is not defined, env_enetaddr[] will be cleared. */ - for (i = 0; i < 6; i++) { - env_enetaddr[i] = tmp ? simple_strtoul(tmp, &end, 16) : 0; - if (tmp) - tmp = (*end) ? end+1 : end; - } - - /* Check if EEPROM and U-Boot environment MAC addresses match. */ - if (memcmp(env_enetaddr, "\0\0\0\0\0\0", 6) != 0 && - memcmp(env_enetaddr, rom_enetaddr, 6) != 0) { - printf("Warning: MAC addresses don't match:\n"); - printf(" EEPROM MAC address: %pM\n", rom_enetaddr); - printf(" \"ethaddr\" value: %pM\n", env_enetaddr) ; - debug("### Using MAC address from environment\n"); - } - if (!tmp) { - char ethaddr[20]; + uint8_t env_enetaddr[6]; + eth_getenv_enetaddr_by_index(0, env_enetaddr); + if (!memcmp(env_enetaddr, "\0\0\0\0\0\0", 6)) { /* There is no MAC address in the environment, so we initialize * it from the value in the EEPROM. */ - sprintf(ethaddr, "%pM", rom_enetaddr) ; - debug("### Setting environment from EEPROM MAC address = \"%s\"\n", - ethaddr); - setenv("ethaddr", ethaddr); + debug("### Setting environment from EEPROM MAC address = " + "\"%pM\"\n", + env_enetaddr); + eth_setenv_enetaddr("ethaddr", rom_enetaddr); } } diff --git a/board/davinci/common/misc.h b/board/davinci/common/misc.h index 329c369763..a6ac3b9a56 100644 --- a/board/davinci/common/misc.h +++ b/board/davinci/common/misc.h @@ -46,7 +46,7 @@ struct pinmux_resource { } int dvevm_read_mac_address(uint8_t *buf); -void dv_configure_mac_address(uint8_t *rom_enetaddr); +void davinci_sync_env_enetaddr(uint8_t *rom_enetaddr); int davinci_configure_pin_mux(const struct pinmux_config *pins, int n_pins); int davinci_configure_pin_mux_items(const struct pinmux_resource *item, int n_items); diff --git a/board/davinci/da8xxevm/config.mk b/board/davinci/da8xxevm/config.mk index 6da29a979f..e176f7d51a 100644 --- a/board/davinci/da8xxevm/config.mk +++ b/board/davinci/da8xxevm/config.mk @@ -40,4 +40,4 @@ #Provide at least 16MB spacing between us and the Linux Kernel image -TEXT_BASE = 0xC1080000 +CONFIG_SYS_TEXT_BASE = 0xC1080000 diff --git a/board/davinci/da8xxevm/da830evm.c b/board/davinci/da8xxevm/da830evm.c index 6baa8603f1..8a9f9884d6 100644 --- a/board/davinci/da8xxevm/da830evm.c +++ b/board/davinci/da8xxevm/da830evm.c @@ -196,19 +196,17 @@ int board_eth_init(bd_t *bis) { u_int8_t mac_addr[6]; u_int8_t switch_start_cmd[2] = { 0x01, 0x23 }; + struct eth_device *dev; /* Read Ethernet MAC address from EEPROM */ if (dvevm_read_mac_address(mac_addr)) /* set address env if not already set */ - dv_configure_mac_address(mac_addr); + davinci_sync_env_enetaddr(mac_addr); /* read the address back from env */ if (!eth_getenv_enetaddr("ethaddr", mac_addr)) return -1; - /* provide the resulting addr to the driver */ - davinci_eth_set_mac_addr(mac_addr); - /* enable the Ethernet switch in the 3 port PHY */ if (i2c_write(PHY_SW_I2C_ADDR, 0, 0, switch_start_cmd, sizeof(switch_start_cmd))) { @@ -222,6 +220,12 @@ int board_eth_init(bd_t *bis) return -1; } + dev = eth_get_dev(); + + /* provide the resulting addr to the driver */ + memcpy(dev->enetaddr, mac_addr, 6); + dev->write_hwaddr(dev); + return 0; } #endif /* CONFIG_DRIVER_TI_EMAC */ diff --git a/board/davinci/da8xxevm/da850evm.c b/board/davinci/da8xxevm/da850evm.c index eeb456c67e..c8c5e1b30e 100644 --- a/board/davinci/da8xxevm/da850evm.c +++ b/board/davinci/da8xxevm/da850evm.c @@ -23,7 +23,11 @@ #include <common.h> #include <i2c.h> +#include <net.h> +#include <netdev.h> #include <asm/arch/hardware.h> +#include <asm/arch/emif_defs.h> +#include <asm/arch/emac_defs.h> #include <asm/io.h> #include "../common/misc.h" #include "common.h" @@ -48,18 +52,62 @@ static const struct pinmux_config uart_pins[] = { { pinmux(4), 2, 5 } }; +#ifdef CONFIG_DRIVER_TI_EMAC +static const struct pinmux_config emac_pins[] = { + { pinmux(2), 8, 1 }, + { pinmux(2), 8, 2 }, + { pinmux(2), 8, 3 }, + { pinmux(2), 8, 4 }, + { pinmux(2), 8, 5 }, + { pinmux(2), 8, 6 }, + { pinmux(2), 8, 7 }, + { pinmux(3), 8, 0 }, + { pinmux(3), 8, 1 }, + { pinmux(3), 8, 2 }, + { pinmux(3), 8, 3 }, + { pinmux(3), 8, 4 }, + { pinmux(3), 8, 5 }, + { pinmux(3), 8, 6 }, + { pinmux(3), 8, 7 }, + { pinmux(4), 8, 0 }, + { pinmux(4), 8, 1 } +}; +#endif /* CONFIG_DRIVER_TI_EMAC */ + /* I2C pin muxer settings */ static const struct pinmux_config i2c_pins[] = { { pinmux(4), 2, 2 }, { pinmux(4), 2, 3 } }; +#ifdef CONFIG_NAND_DAVINCI +const struct pinmux_config nand_pins[] = { + { pinmux(7), 1, 1 }, + { pinmux(7), 1, 2 }, + { pinmux(7), 1, 4 }, + { pinmux(7), 1, 5 }, + { pinmux(9), 1, 0 }, + { pinmux(9), 1, 1 }, + { pinmux(9), 1, 2 }, + { pinmux(9), 1, 3 }, + { pinmux(9), 1, 4 }, + { pinmux(9), 1, 5 }, + { pinmux(9), 1, 6 }, + { pinmux(9), 1, 7 }, + { pinmux(12), 1, 5 }, + { pinmux(12), 1, 6 } +}; +#endif + static const struct pinmux_resource pinmuxes[] = { #ifdef CONFIG_SPI_FLASH PINMUX_ITEM(spi1_pins), #endif PINMUX_ITEM(uart_pins), PINMUX_ITEM(i2c_pins), +#ifdef CONFIG_NAND_DAVINCI + PINMUX_ITEM(nand_pins), +#endif }; static const struct lpsc_resource lpsc[] = { @@ -76,6 +124,23 @@ int board_init(void) irq_init(); #endif + +#ifdef CONFIG_NAND_DAVINCI + /* + * NAND CS setup - cycle counts based on da850evm NAND timings in the + * Linux kernel @ 25MHz EMIFA + */ + writel((DAVINCI_ABCR_WSETUP(0) | + DAVINCI_ABCR_WSTROBE(0) | + DAVINCI_ABCR_WHOLD(0) | + DAVINCI_ABCR_RSETUP(0) | + DAVINCI_ABCR_RSTROBE(1) | + DAVINCI_ABCR_RHOLD(0) | + DAVINCI_ABCR_TA(0) | + DAVINCI_ABCR_ASIZE_8BIT), + &davinci_emif_regs->ab2cr); /* CS3 */ +#endif + /* arch number of the board */ gd->bd->bi_arch_number = MACH_TYPE_DAVINCI_DA850_EVM; @@ -102,6 +167,14 @@ int board_init(void) if (davinci_configure_pin_mux_items(pinmuxes, ARRAY_SIZE(pinmuxes))) return 1; +#ifdef CONFIG_DRIVER_TI_EMAC + if (davinci_configure_pin_mux(emac_pins, ARRAY_SIZE(emac_pins)) != 0) + return 1; + /* set cfgchip3 to select MII */ + writel(readl(&davinci_syscfg_regs->cfgchip3) & ~(1 << 8), + &davinci_syscfg_regs->cfgchip3); +#endif /* CONFIG_DRIVER_TI_EMAC */ + /* enable the console UART */ writel((DAVINCI_UART_PWREMU_MGMT_FREE | DAVINCI_UART_PWREMU_MGMT_URRST | DAVINCI_UART_PWREMU_MGMT_UTRST), @@ -109,3 +182,19 @@ int board_init(void) return 0; } + +#ifdef CONFIG_DRIVER_TI_EMAC + +/* + * Initializes on-board ethernet controllers. + */ +int board_eth_init(bd_t *bis) +{ + if (!davinci_emac_initialize()) { + printf("Error: Ethernet init failed!\n"); + return -1; + } + + return 0; +} +#endif /* CONFIG_DRIVER_TI_EMAC */ diff --git a/board/davinci/dm355evm/config.mk b/board/davinci/dm355evm/config.mk index c4e6e07b7c..9a063000c3 100644 --- a/board/davinci/dm355evm/config.mk +++ b/board/davinci/dm355evm/config.mk @@ -8,4 +8,4 @@ # #Provide at least 16MB spacing between us and the Linux Kernel image -TEXT_BASE = 0x81080000 +CONFIG_SYS_TEXT_BASE = 0x81080000 diff --git a/board/davinci/dm355leopard/config.mk b/board/davinci/dm355leopard/config.mk index d67df02ccf..28ff3f3d97 100644 --- a/board/davinci/dm355leopard/config.mk +++ b/board/davinci/dm355leopard/config.mk @@ -3,4 +3,4 @@ # #Provide at least 16MB spacing between us and the Linux Kernel image -TEXT_BASE = 0x81080000 +CONFIG_SYS_TEXT_BASE = 0x81080000 diff --git a/board/davinci/dm365evm/config.mk b/board/davinci/dm365evm/config.mk index 86472ff595..7b1e900e8c 100644 --- a/board/davinci/dm365evm/config.mk +++ b/board/davinci/dm365evm/config.mk @@ -8,4 +8,4 @@ # #Provide at least 16MB spacing between us and the Linux Kernel image -TEXT_BASE = 0x81080000 +CONFIG_SYS_TEXT_BASE = 0x81080000 diff --git a/board/davinci/dm365evm/dm365evm.c b/board/davinci/dm365evm/dm365evm.c index 290eb99749..85dbe2a9c3 100644 --- a/board/davinci/dm365evm/dm365evm.c +++ b/board/davinci/dm365evm/dm365evm.c @@ -68,7 +68,7 @@ int board_eth_init(bd_t *bis) /* Read Ethernet MAC address from EEPROM */ if (dvevm_read_mac_address(eeprom_enetaddr)) - dv_configure_mac_address(eeprom_enetaddr); + davinci_sync_env_enetaddr(eeprom_enetaddr); davinci_emac_initialize(); diff --git a/board/davinci/dm6467evm/config.mk b/board/davinci/dm6467evm/config.mk index ca801c2737..3751043890 100644 --- a/board/davinci/dm6467evm/config.mk +++ b/board/davinci/dm6467evm/config.mk @@ -1,2 +1,2 @@ #Provide at least 16MB spacing between us and the Linux Kernel image -TEXT_BASE = 0x81080000 +CONFIG_SYS_TEXT_BASE = 0x81080000 diff --git a/board/davinci/dvevm/config.mk b/board/davinci/dvevm/config.mk index c24ced7999..ed80707231 100644 --- a/board/davinci/dvevm/config.mk +++ b/board/davinci/dvevm/config.mk @@ -36,4 +36,4 @@ # #Provide at least 16MB spacing between us and the Linux Kernel image -TEXT_BASE = 0x81080000 +CONFIG_SYS_TEXT_BASE = 0x81080000 diff --git a/board/davinci/dvevm/dvevm.c b/board/davinci/dvevm/dvevm.c index 98937a9620..073c21a8cc 100644 --- a/board/davinci/dvevm/dvevm.c +++ b/board/davinci/dvevm/dvevm.c @@ -71,7 +71,7 @@ int misc_init_r(void) /* Read Ethernet MAC address from EEPROM if available. */ if (dvevm_read_mac_address(eeprom_enetaddr)) - dv_configure_mac_address(eeprom_enetaddr); + davinci_sync_env_enetaddr(eeprom_enetaddr); i2c_read(0x39, 0x00, 1, &video_mode, 1); diff --git a/board/davinci/schmoogie/config.mk b/board/davinci/schmoogie/config.mk index c24ced7999..ed80707231 100644 --- a/board/davinci/schmoogie/config.mk +++ b/board/davinci/schmoogie/config.mk @@ -36,4 +36,4 @@ # #Provide at least 16MB spacing between us and the Linux Kernel image -TEXT_BASE = 0x81080000 +CONFIG_SYS_TEXT_BASE = 0x81080000 diff --git a/board/davinci/schmoogie/schmoogie.c b/board/davinci/schmoogie/schmoogie.c index 19c95809aa..80a0f9fccc 100644 --- a/board/davinci/schmoogie/schmoogie.c +++ b/board/davinci/schmoogie/schmoogie.c @@ -107,12 +107,12 @@ int misc_init_r(void) /* Set serial number from UID chip */ if (i2c_read(CONFIG_SYS_UID_ADDR, 0, 1, buf, 8)) { printf("\nUID @ 0x%02x read FAILED!!!\n", CONFIG_SYS_UID_ADDR); - forceenv("serial#", "FAILED"); + setenv("serial#", "FAILED"); } else { if (buf[0] != 0x70) { /* Device Family Code */ printf("\nUID @ 0x%02x read FAILED!!!\n", CONFIG_SYS_UID_ADDR); - forceenv("serial#", "FAILED"); + setenv("serial#", "FAILED"); } } /* Now check CRC */ @@ -122,12 +122,12 @@ int misc_init_r(void) if (tmp[0] != 0) { printf("\nUID @ 0x%02x - BAD CRC!!!\n", CONFIG_SYS_UID_ADDR); - forceenv("serial#", "FAILED"); + setenv("serial#", "FAILED"); } else { /* CRC OK, set "serial" env variable */ sprintf((char *)&tmp[0], "%02x%02x%02x%02x%02x%02x", buf[6], buf[5], buf[4], buf[3], buf[2], buf[1]); - forceenv("serial#", (char *)&tmp[0]); + setenv("serial#", (char *)&tmp[0]); } return(0); diff --git a/board/davinci/sffsdr/config.mk b/board/davinci/sffsdr/config.mk index 31a1c9ec4d..4fe900799d 100644 --- a/board/davinci/sffsdr/config.mk +++ b/board/davinci/sffsdr/config.mk @@ -20,4 +20,4 @@ # # we load ourself to 8400'0000 to provide at least 32MB spacing # between us and the Integrity kernel image -TEXT_BASE = 0x84000000 +CONFIG_SYS_TEXT_BASE = 0x84000000 diff --git a/board/davinci/sffsdr/sffsdr.c b/board/davinci/sffsdr/sffsdr.c index c24b9e188c..657cf2b0d9 100644 --- a/board/davinci/sffsdr/sffsdr.c +++ b/board/davinci/sffsdr/sffsdr.c @@ -141,7 +141,7 @@ int misc_init_r(void) /* Read Ethernet MAC address from EEPROM if available. */ if (sffsdr_read_mac_address(eeprom_enetaddr)) - dv_configure_mac_address(eeprom_enetaddr); + davinci_sync_env_enetaddr(eeprom_enetaddr); return(0); } diff --git a/board/davinci/sonata/config.mk b/board/davinci/sonata/config.mk index c24ced7999..ed80707231 100644 --- a/board/davinci/sonata/config.mk +++ b/board/davinci/sonata/config.mk @@ -36,4 +36,4 @@ # #Provide at least 16MB spacing between us and the Linux Kernel image -TEXT_BASE = 0x81080000 +CONFIG_SYS_TEXT_BASE = 0x81080000 diff --git a/board/davinci/sonata/sonata.c b/board/davinci/sonata/sonata.c index 817970aeaa..1dc42c4087 100644 --- a/board/davinci/sonata/sonata.c +++ b/board/davinci/sonata/sonata.c @@ -70,7 +70,7 @@ int misc_init_r(void) /* Read Ethernet MAC address from EEPROM if available. */ if (dvevm_read_mac_address(eeprom_enetaddr)) - dv_configure_mac_address(eeprom_enetaddr); + davinci_sync_env_enetaddr(eeprom_enetaddr); return(0); } |