Skip to content

Commit 873b05f

Browse files
venodelanashif
authored andcommitted
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 e4a1905 commit 873b05f

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,
@@ -538,6 +546,11 @@ static int xilinx_axienet_probe(const struct device *dev)
538546
LOG_INF("TX Checksum offloading %s",
539547
config->have_tx_csum_offload ? "requested" : "disabled");
540548

549+
if (config->have_random_mac) {
550+
gen_random_mac(data->mac_addr,
551+
XILINX_OUI_BYTE_0, XILINX_OUI_BYTE_1, XILINX_OUI_BYTE_2);
552+
}
553+
541554
xilinx_axienet_set_mac_address(config, data);
542555

543556
for (int i = 0; i < CONFIG_ETH_XILINX_AXIENET_BUFFER_NUM_RX - 1; i++) {
@@ -595,6 +608,7 @@ static const struct ethernet_api xilinx_axienet_api = {
595608
.have_irq = DT_INST_NODE_HAS_PROP(inst, interrupts), \
596609
.have_tx_csum_offload = DT_INST_PROP_OR(inst, xlnx_txcsum, 0x0) == 0x2, \
597610
.have_rx_csum_offload = DT_INST_PROP_OR(inst, xlnx_rxcsum, 0x0) == 0x2, \
611+
.have_random_mac = DT_INST_PROP(inst, zephyr_random_mac_address), \
598612
}; \
599613
\
600614
ETH_NET_DEVICE_DT_INST_DEFINE(inst, xilinx_axienet_probe, NULL, &data_##inst, \

0 commit comments

Comments
 (0)