]> git.ipfire.org Git - thirdparty/u-boot.git/blame - board/dhelectronics/common/dh_common.c
Revert "Merge patch series "arm: dts: am62-beagleplay: Fix Beagleplay Ethernet""
[thirdparty/u-boot.git] / board / dhelectronics / common / dh_common.c
CommitLineData
386f921c
PO
1// SPDX-License-Identifier: GPL-2.0+
2/*
3 * Copyright 2022 Marek Vasut <marex@denx.de>
4 * Copyright 2022 DENX Software Engineering GmbH, Philip Oberfichtner <pro@denx.de>
5 */
6
d678a59d 7#include <common.h>
386f921c
PO
8#include <dm.h>
9#include <i2c_eeprom.h>
10#include <net.h>
11
12#include "dh_common.h"
13
14bool dh_mac_is_in_env(const char *env)
15{
16 unsigned char enetaddr[6];
17
18 return eth_env_get_enetaddr(env, enetaddr);
19}
20
786af90d
MV
21int dh_get_mac_is_enabled(const char *alias)
22{
23 ofnode node = ofnode_path(alias);
24
25 if (!ofnode_valid(node))
26 return -EINVAL;
27
28 if (!ofnode_is_enabled(node))
29 return -ENODEV;
30
31 return 0;
32}
33
386f921c
PO
34int dh_get_mac_from_eeprom(unsigned char *enetaddr, const char *alias)
35{
36 struct udevice *dev;
37 int ret;
38 ofnode node;
39
40 node = ofnode_path(alias);
41 if (!ofnode_valid(node)) {
42 printf("%s: ofnode for %s not found!", __func__, alias);
43 return -ENOENT;
44 }
45
46 ret = uclass_get_device_by_ofnode(UCLASS_I2C_EEPROM, node, &dev);
47 if (ret) {
48 printf("%s: Cannot find EEPROM! ret = %d\n", __func__, ret);
49 return ret;
50 }
51
52 ret = i2c_eeprom_read(dev, 0xfa, enetaddr, 0x6);
53 if (ret) {
54 printf("%s: Error reading EEPROM! ret = %d\n", __func__, ret);
55 return ret;
56 }
57
58 if (!is_valid_ethaddr(enetaddr)) {
59 printf("%s: Address read from EEPROM is invalid!\n", __func__);
60 return -EINVAL;
61 }
62
63 return 0;
64}
65
66__weak int dh_setup_mac_address(void)
67{
68 unsigned char enetaddr[6];
69
70 if (dh_mac_is_in_env("ethaddr"))
71 return 0;
72
786af90d
MV
73 if (dh_get_mac_is_enabled("ethernet0"))
74 return 0;
75
386f921c
PO
76 if (!dh_get_mac_from_eeprom(enetaddr, "eeprom0"))
77 return eth_env_set_enetaddr("ethaddr", enetaddr);
78
79 printf("%s: Unable to set mac address!\n", __func__);
80 return -ENXIO;
81}