mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-07 13:44:29 +00:00
68 lines
1.4 KiB
C
68 lines
1.4 KiB
C
|
// SPDX-License-Identifier: GPL-2.0+
|
||
|
/*
|
||
|
* Copyright (C) 2017-2020 ABB
|
||
|
*/
|
||
|
#include <common.h>
|
||
|
#include <i2c.h>
|
||
|
#include <asm/gpio.h>
|
||
|
|
||
|
#include "../common/common.h"
|
||
|
|
||
|
/*
|
||
|
* For FU1, the MAC address associated with the mgmt port should
|
||
|
* be the base address (as read from the IVM) + 4, and for FU2 it
|
||
|
* is + 10
|
||
|
*/
|
||
|
#define MAC_ADDRESS_OFFSET_FU1 4
|
||
|
#define MAC_ADDRESS_OFFSET_FU2 10
|
||
|
|
||
|
/*
|
||
|
* This function reads the state of GPIO40 and returns true (non-zero)
|
||
|
* if it is '1' and false(0) otherwise.
|
||
|
*
|
||
|
* This pin is routed to a pull-up on FU2 and a pull-down on
|
||
|
*/
|
||
|
#define GPIO_FU_DETECTION 40
|
||
|
|
||
|
int secu1_is_fu2(void)
|
||
|
{
|
||
|
int value;
|
||
|
int ret = gpio_request(GPIO_FU_DETECTION, "secu");
|
||
|
|
||
|
if (ret) {
|
||
|
printf("gpio: failed to request pin for FU detection\n");
|
||
|
return 1;
|
||
|
}
|
||
|
gpio_direction_input(GPIO_FU_DETECTION);
|
||
|
value = gpio_get_value(GPIO_FU_DETECTION);
|
||
|
|
||
|
if (value == 1)
|
||
|
printf("FU2 detected\n");
|
||
|
else
|
||
|
printf("FU1 detected\n");
|
||
|
|
||
|
return value;
|
||
|
}
|
||
|
|
||
|
static uchar ivm_content[CONFIG_SYS_IVM_EEPROM_MAX_LEN];
|
||
|
|
||
|
#if defined(CONFIG_HUSH_INIT_VAR)
|
||
|
int hush_init_var(void)
|
||
|
{
|
||
|
ivm_analyze_eeprom(ivm_content, CONFIG_SYS_IVM_EEPROM_MAX_LEN);
|
||
|
return 0;
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
int misc_init_r(void)
|
||
|
{
|
||
|
if (secu1_is_fu2())
|
||
|
ivm_read_eeprom(ivm_content, CONFIG_SYS_IVM_EEPROM_MAX_LEN,
|
||
|
MAC_ADDRESS_OFFSET_FU2);
|
||
|
else
|
||
|
ivm_read_eeprom(ivm_content, CONFIG_SYS_IVM_EEPROM_MAX_LEN,
|
||
|
MAC_ADDRESS_OFFSET_FU1);
|
||
|
|
||
|
return 0;
|
||
|
}
|