1 // SPDX-License-Identifier: GPL-2.0+ 2 /* 3 * Copyright (C) 2017-2020 Hitachi Power Grids 4 */ 5 #include <common.h> 6 #include <i2c.h> 7 #include <asm/gpio.h> 8 9 #include "../common/common.h" 10 11 /* 12 * For FU1, the MAC address associated with the mgmt port should 13 * be the base address (as read from the IVM) + 4, and for FU2 it 14 * is + 10 15 */ 16 #define MAC_ADDRESS_OFFSET_FU1 4 17 #define MAC_ADDRESS_OFFSET_FU2 10 18 19 /* 20 * This function reads the state of GPIO40 and returns true (non-zero) 21 * if it is '1' and false(0) otherwise. 22 * 23 * This pin is routed to a pull-up on FU2 and a pull-down on 24 */ 25 #define GPIO_FU_DETECTION 40 26 secu1_is_fu2(void)27int secu1_is_fu2(void) 28 { 29 int value; 30 int ret = gpio_request(GPIO_FU_DETECTION, "secu"); 31 32 if (ret) { 33 printf("gpio: failed to request pin for FU detection\n"); 34 return 1; 35 } 36 gpio_direction_input(GPIO_FU_DETECTION); 37 value = gpio_get_value(GPIO_FU_DETECTION); 38 39 if (value == 1) 40 printf("FU2 detected\n"); 41 else 42 printf("FU1 detected\n"); 43 44 return value; 45 } 46 47 static uchar ivm_content[CONFIG_SYS_IVM_EEPROM_MAX_LEN]; 48 49 #if defined(CONFIG_HUSH_INIT_VAR) hush_init_var(void)50int hush_init_var(void) 51 { 52 ivm_analyze_eeprom(ivm_content, CONFIG_SYS_IVM_EEPROM_MAX_LEN); 53 return 0; 54 } 55 #endif 56 misc_init_r(void)57int misc_init_r(void) 58 { 59 if (secu1_is_fu2()) 60 ivm_read_eeprom(ivm_content, CONFIG_SYS_IVM_EEPROM_MAX_LEN, 61 MAC_ADDRESS_OFFSET_FU2); 62 else 63 ivm_read_eeprom(ivm_content, CONFIG_SYS_IVM_EEPROM_MAX_LEN, 64 MAC_ADDRESS_OFFSET_FU1); 65 66 return 0; 67 } 68