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 * SPDX-License-Identifier: GPL-2.0+ 10 */ 11 12 #include <common.h> 13 #include <environment.h> 14 #include <i2c.h> 15 #include <net.h> 16 #include <asm/arch/hardware.h> 17 #include <asm/io.h> 18 #include <asm/arch/davinci_misc.h> 19 20 DECLARE_GLOBAL_DATA_PTR; 21 22 #ifndef CONFIG_SPL_BUILD 23 int dram_init(void) 24 { 25 /* dram_init must store complete ramsize in gd->ram_size */ 26 gd->ram_size = get_ram_size( 27 (void *)CONFIG_SYS_SDRAM_BASE, 28 CONFIG_MAX_RAM_BANK_SIZE); 29 return 0; 30 } 31 32 int dram_init_banksize(void) 33 { 34 gd->bd->bi_dram[0].start = CONFIG_SYS_SDRAM_BASE; 35 gd->bd->bi_dram[0].size = gd->ram_size; 36 37 return 0; 38 } 39 #endif 40 41 #ifdef CONFIG_DRIVER_TI_EMAC 42 /* 43 * Read ethernet MAC address from EEPROM for DVEVM compatible boards. 44 * Returns 1 if found, 0 otherwise. 45 */ 46 int dvevm_read_mac_address(uint8_t *buf) 47 { 48 #ifdef CONFIG_SYS_I2C_EEPROM_ADDR 49 /* Read MAC address. */ 50 if (i2c_read(CONFIG_SYS_I2C_EEPROM_ADDR, 0x7F00, 51 CONFIG_SYS_I2C_EEPROM_ADDR_LEN, (uint8_t *) &buf[0], 6)) 52 goto i2cerr; 53 54 /* Check that MAC address is valid. */ 55 if (!is_valid_ethaddr(buf)) 56 goto err; 57 58 return 1; /* Found */ 59 60 i2cerr: 61 printf("Read from EEPROM @ 0x%02x failed\n", 62 CONFIG_SYS_I2C_EEPROM_ADDR); 63 err: 64 #endif /* CONFIG_SYS_I2C_EEPROM_ADDR */ 65 66 return 0; 67 } 68 69 /* 70 * Set the mii mode as MII or RMII 71 */ 72 #if defined(CONFIG_SOC_DA8XX) 73 void davinci_emac_mii_mode_sel(int mode_sel) 74 { 75 int val; 76 77 val = readl(&davinci_syscfg_regs->cfgchip3); 78 if (mode_sel == 0) 79 val &= ~(1 << 8); 80 else 81 val |= (1 << 8); 82 writel(val, &davinci_syscfg_regs->cfgchip3); 83 } 84 #endif 85 /* 86 * If there is no MAC address in the environment, then it will be initialized 87 * (silently) from the value in the EEPROM. 88 */ 89 void davinci_sync_env_enetaddr(uint8_t *rom_enetaddr) 90 { 91 uint8_t env_enetaddr[6]; 92 int ret; 93 94 ret = eth_env_get_enetaddr_by_index("eth", 0, env_enetaddr); 95 if (!ret) { 96 /* 97 * There is no MAC address in the environment, so we 98 * initialize it from the value in the EEPROM. 99 */ 100 debug("### Setting environment from EEPROM MAC address = " 101 "\"%pM\"\n", 102 env_enetaddr); 103 ret = !eth_env_set_enetaddr("ethaddr", rom_enetaddr); 104 } 105 if (!ret) 106 printf("Failed to set mac address from EEPROM: %d\n", ret); 107 } 108 #endif /* CONFIG_DRIVER_TI_EMAC */ 109 110 #if defined(CONFIG_SOC_DA8XX) 111 void irq_init(void) 112 { 113 /* 114 * Mask all IRQs by clearing the global enable and setting 115 * the enable clear for all the 90 interrupts. 116 */ 117 writel(0, &davinci_aintc_regs->ger); 118 119 writel(0, &davinci_aintc_regs->hier); 120 121 writel(0xffffffff, &davinci_aintc_regs->ecr1); 122 writel(0xffffffff, &davinci_aintc_regs->ecr2); 123 writel(0xffffffff, &davinci_aintc_regs->ecr3); 124 } 125 126 /* 127 * Enable PSC for various peripherals. 128 */ 129 int da8xx_configure_lpsc_items(const struct lpsc_resource *item, 130 const int n_items) 131 { 132 int i; 133 134 for (i = 0; i < n_items; i++) 135 lpsc_on(item[i].lpsc_no); 136 137 return 0; 138 } 139 #endif 140