Skip to content

Commit 76845fe

Browse files
committed
drivers: ethernet: eth_xilinx_axienet : Add runtime MAC address generation
Add support to generate the random MAC if 'zephyr,random-mac-address' is set,uses 'local-mac-address' from DT if available, or falls back to a default Xilinx OUI-based MAC with zeroed bytes Signed-off-by: Venkatesh Odela <venkatesh.odela@amd.com>
1 parent ad4c3e3 commit 76845fe

File tree

1 file changed

+14
-0
lines changed

1 file changed

+14
-0
lines changed

drivers/ethernet/eth_xilinx_axienet.c

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ LOG_MODULE_REGISTER(eth_xilinx_axienet, CONFIG_ETHERNET_LOG_LEVEL);
1616
#include <zephyr/net/phy.h>
1717
#include <zephyr/irq.h>
1818
#include <zephyr/sys/barrier.h>
19+
#include "eth.h"
1920

2021
#include "../dma/dma_xilinx_axi_dma.h"
2122

@@ -48,6 +49,11 @@ LOG_MODULE_REGISTER(eth_xilinx_axienet, CONFIG_ETHERNET_LOG_LEVEL);
4849
#define XILINX_AXIENET_UNICAST_ADDRESS_WORD_0_OFFSET 0x00000700
4950
#define XILINX_AXIENET_UNICAST_ADDRESS_WORD_1_OFFSET 0x00000704
5051

52+
/* Xilinx OUI (Organizationally Unique Identifier) for MAC */
53+
#define XILINX_OUI_BYTE_0 0x00
54+
#define XILINX_OUI_BYTE_1 0x0A
55+
#define XILINX_OUI_BYTE_2 0x35
56+
5157
#if (CONFIG_DCACHE_LINE_SIZE > 0)
5258
/* cache-line aligned to allow selective cache-line invalidation on the buffer */
5359
#define XILINX_AXIENET_ETH_ALIGN CONFIG_DCACHE_LINE_SIZE
@@ -95,6 +101,8 @@ struct xilinx_axienet_config {
95101

96102
bool have_rx_csum_offload;
97103
bool have_tx_csum_offload;
104+
105+
bool have_random_mac;
98106
};
99107

100108
static void xilinx_axienet_write_register(const struct xilinx_axienet_config *config,
@@ -540,6 +548,11 @@ static int xilinx_axienet_probe(const struct device *dev)
540548
LOG_INF("TX Checksum offloading %s",
541549
config->have_tx_csum_offload ? "requested" : "disabled");
542550

551+
if (config->have_random_mac) {
552+
gen_random_mac(data->mac_addr,
553+
XILINX_OUI_BYTE_0, XILINX_OUI_BYTE_1, XILINX_OUI_BYTE_2);
554+
}
555+
543556
xilinx_axienet_set_mac_address(config, data);
544557

545558
for (int i = 0; i < CONFIG_ETH_XILINX_AXIENET_BUFFER_NUM_RX - 1; i++) {
@@ -597,6 +610,7 @@ static const struct ethernet_api xilinx_axienet_api = {
597610
.have_irq = DT_INST_NODE_HAS_PROP(inst, interrupts), \
598611
.have_tx_csum_offload = DT_INST_PROP_OR(inst, xlnx_txcsum, 0x0) == 0x2, \
599612
.have_rx_csum_offload = DT_INST_PROP_OR(inst, xlnx_rxcsum, 0x0) == 0x2, \
613+
.have_random_mac = DT_INST_PROP(inst, zephyr_random_mac_address), \
600614
}; \
601615
\
602616
ETH_NET_DEVICE_DT_INST_DEFINE(inst, xilinx_axienet_probe, NULL, &data_##inst, \

0 commit comments

Comments
 (0)