1 // SPDX-License-Identifier: GPL-2.0+ 2 /* 3 * Miscelaneous DaVinci functions. 4 * 5 * Copyright (C) 2009 Nick Thompson, GE Fanuc Ltd, <nick.thompson@gefanuc.com> 6 * Copyright (C) 2007 Sergey Kubushyn <ksi@koi8.net> 7 * Copyright (C) 2008 Lyrtech <www.lyrtech.com> 8 * Copyright (C) 2004 Texas Instruments. 9 */ 10 11 #include <common.h> 12 #include <environment.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 int 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 return 0; 37 } 38 #endif 39 40 #ifdef CONFIG_DRIVER_TI_EMAC 41 /* 42 * Read ethernet MAC address from EEPROM for DVEVM compatible boards. 43 * Returns 1 if found, 0 otherwise. 44 */ 45 int dvevm_read_mac_address(uint8_t *buf) 46 { 47 #ifdef CONFIG_SYS_I2C_EEPROM_ADDR 48 /* Read MAC address. */ 49 if (i2c_read(CONFIG_SYS_I2C_EEPROM_ADDR, 0x7F00, 50 CONFIG_SYS_I2C_EEPROM_ADDR_LEN, (uint8_t *) &buf[0], 6)) 51 goto i2cerr; 52 53 /* Check that MAC address is valid. */ 54 if (!is_valid_ethaddr(buf)) 55 goto err; 56 57 return 1; /* Found */ 58 59 i2cerr: 60 printf("Read from EEPROM @ 0x%02x failed\n", 61 CONFIG_SYS_I2C_EEPROM_ADDR); 62 err: 63 #endif /* CONFIG_SYS_I2C_EEPROM_ADDR */ 64 65 return 0; 66 } 67 68 /* 69 * Set the mii mode as MII or RMII 70 */ 71 #if defined(CONFIG_SOC_DA8XX) 72 void davinci_emac_mii_mode_sel(int mode_sel) 73 { 74 int val; 75 76 val = readl(&davinci_syscfg_regs->cfgchip3); 77 if (mode_sel == 0) 78 val &= ~(1 << 8); 79 else 80 val |= (1 << 8); 81 writel(val, &davinci_syscfg_regs->cfgchip3); 82 } 83 #endif 84 /* 85 * If there is no MAC address in the environment, then it will be initialized 86 * (silently) from the value in the EEPROM. 87 */ 88 void davinci_sync_env_enetaddr(uint8_t *rom_enetaddr) 89 { 90 uint8_t env_enetaddr[6]; 91 int ret; 92 93 ret = eth_env_get_enetaddr_by_index("eth", 0, env_enetaddr); 94 if (!ret) { 95 /* 96 * There is no MAC address in the environment, so we 97 * initialize it from the value in the EEPROM. 98 */ 99 debug("### Setting environment from EEPROM MAC address = " 100 "\"%pM\"\n", 101 env_enetaddr); 102 ret = !eth_env_set_enetaddr("ethaddr", rom_enetaddr); 103 } 104 if (!ret) 105 printf("Failed to set mac address from EEPROM: %d\n", ret); 106 } 107 #endif /* CONFIG_DRIVER_TI_EMAC */ 108 109 #if defined(CONFIG_SOC_DA8XX) 110 void irq_init(void) 111 { 112 /* 113 * Mask all IRQs by clearing the global enable and setting 114 * the enable clear for all the 90 interrupts. 115 */ 116 writel(0, &davinci_aintc_regs->ger); 117 118 writel(0, &davinci_aintc_regs->hier); 119 120 writel(0xffffffff, &davinci_aintc_regs->ecr1); 121 writel(0xffffffff, &davinci_aintc_regs->ecr2); 122 writel(0xffffffff, &davinci_aintc_regs->ecr3); 123 } 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