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