183d290c5STom Rini // SPDX-License-Identifier: GPL-2.0+ 21e23737dSCarlo Caione /* 31e23737dSCarlo Caione * (C) Copyright 2016 Beniamino Galvani <b.galvani@gmail.com> 41e23737dSCarlo Caione */ 51e23737dSCarlo Caione 61e23737dSCarlo Caione #include <common.h> 79d922450SSimon Glass #include <dm.h> 89925f1dbSAlex Kiernan #include <environment.h> 91e23737dSCarlo Caione #include <asm/io.h> 10f0f3762cSNeil Armstrong #include <asm/arch/gx.h> 111e23737dSCarlo Caione #include <asm/arch/sm.h> 129a41746fSNeil Armstrong #include <asm/arch/eth.h> 13c7be3e5aSNeil Armstrong #include <asm/arch/mem.h> 141e23737dSCarlo Caione 151e23737dSCarlo Caione #define EFUSE_SN_OFFSET 20 161e23737dSCarlo Caione #define EFUSE_SN_SIZE 16 171e23737dSCarlo Caione #define EFUSE_MAC_OFFSET 52 181e23737dSCarlo Caione #define EFUSE_MAC_SIZE 6 191e23737dSCarlo Caione misc_init_r(void)201e23737dSCarlo Caioneint misc_init_r(void) 211e23737dSCarlo Caione { 221e23737dSCarlo Caione u8 mac_addr[EFUSE_MAC_SIZE]; 23cb86d374SMartin Böh char serial[EFUSE_SN_SIZE]; 241e23737dSCarlo Caione ssize_t len; 251e23737dSCarlo Caione 26*33e33780SJerome Brunet meson_eth_init(PHY_INTERFACE_MODE_RGMII, 0); 271e23737dSCarlo Caione 2835affd7aSSimon Glass if (!eth_env_get_enetaddr("ethaddr", mac_addr)) { 291e23737dSCarlo Caione len = meson_sm_read_efuse(EFUSE_MAC_OFFSET, 301e23737dSCarlo Caione mac_addr, EFUSE_MAC_SIZE); 311e23737dSCarlo Caione if (len == EFUSE_MAC_SIZE && is_valid_ethaddr(mac_addr)) 32fd1e959eSSimon Glass eth_env_set_enetaddr("ethaddr", mac_addr); 331e23737dSCarlo Caione } 341e23737dSCarlo Caione 3500caae6dSSimon Glass if (!env_get("serial#")) { 36cb86d374SMartin Böh len = meson_sm_read_efuse(EFUSE_SN_OFFSET, serial, 37cb86d374SMartin Böh EFUSE_SN_SIZE); 38cb86d374SMartin Böh if (len == EFUSE_SN_SIZE) 39382bee57SSimon Glass env_set("serial#", serial); 40cb86d374SMartin Böh } 41cb86d374SMartin Böh 421e23737dSCarlo Caione return 0; 431e23737dSCarlo Caione } 44