Browse Source

drivers: ethernet: nxp: fix mac addr order

make sure, that zephyr,random-mac-address
has a higher prio, than local-mac-address, as
documented in ethernet-controller.yaml.

Also make sure, that no vaild mac address
doesn't lead to init fail, as it can still be
set later via set_config.

Signed-off-by: Fin Maaß <f.maass@vogl-electronic.com>
pull/92307/head
Fin Maaß 2 weeks ago committed by Benjamin Cabé
parent
commit
5638d9fa47
  1. 10
      drivers/ethernet/eth_nxp_enet.c
  2. 22
      drivers/ethernet/eth_nxp_enet_qos/eth_nxp_enet_qos_mac.c

10
drivers/ethernet/eth_nxp_enet.c

@ -738,8 +738,6 @@ static int eth_nxp_enet_init(const struct device *dev)
k_work_init(&data->rx_work, eth_nxp_enet_rx_thread); k_work_init(&data->rx_work, eth_nxp_enet_rx_thread);
switch (config->mac_addr_source) { switch (config->mac_addr_source) {
case MAC_ADDR_SOURCE_LOCAL:
break;
case MAC_ADDR_SOURCE_RANDOM: case MAC_ADDR_SOURCE_RANDOM:
gen_random_mac(data->mac_addr, gen_random_mac(data->mac_addr,
FREESCALE_OUI_B0, FREESCALE_OUI_B1, FREESCALE_OUI_B2); FREESCALE_OUI_B0, FREESCALE_OUI_B1, FREESCALE_OUI_B2);
@ -751,7 +749,7 @@ static int eth_nxp_enet_init(const struct device *dev)
nxp_enet_fused_mac(data->mac_addr); nxp_enet_fused_mac(data->mac_addr);
break; break;
default: default:
return -ENOTSUP; break;
} }
err = clock_control_get_rate(config->clock_dev, config->clock_subsys, err = clock_control_get_rate(config->clock_dev, config->clock_subsys,
@ -966,12 +964,12 @@ BUILD_ASSERT(NXP_ENET_PHY_MODE(DT_DRV_INST(n)) != NXP_ENET_RGMII_MODE || \
" and CONFIG_ETH_NXP_ENET_1G enabled"); " and CONFIG_ETH_NXP_ENET_1G enabled");
#define NXP_ENET_MAC_ADDR_SOURCE(n) \ #define NXP_ENET_MAC_ADDR_SOURCE(n) \
COND_CODE_1(DT_NODE_HAS_PROP(DT_DRV_INST(n), local_mac_address), \ COND_CODE_1(DT_INST_PROP(n, zephyr_random_mac_address), \
(MAC_ADDR_SOURCE_LOCAL), \
(COND_CODE_1(DT_INST_PROP(n, zephyr_random_mac_address), \
(MAC_ADDR_SOURCE_RANDOM), \ (MAC_ADDR_SOURCE_RANDOM), \
(COND_CODE_1(DT_INST_PROP(n, nxp_unique_mac), (MAC_ADDR_SOURCE_UNIQUE), \ (COND_CODE_1(DT_INST_PROP(n, nxp_unique_mac), (MAC_ADDR_SOURCE_UNIQUE), \
(COND_CODE_1(DT_INST_PROP(n, nxp_fused_mac), (MAC_ADDR_SOURCE_FUSED), \ (COND_CODE_1(DT_INST_PROP(n, nxp_fused_mac), (MAC_ADDR_SOURCE_FUSED), \
(COND_CODE_1(DT_NODE_HAS_PROP(DT_DRV_INST(n), local_mac_address), \
(MAC_ADDR_SOURCE_LOCAL), \
(MAC_ADDR_SOURCE_INVALID)))))))) (MAC_ADDR_SOURCE_INVALID))))))))
#define NXP_ENET_MAC_INIT(n) \ #define NXP_ENET_MAC_INIT(n) \

22
drivers/ethernet/eth_nxp_enet_qos/eth_nxp_enet_qos_mac.c

@ -641,13 +641,17 @@ static int eth_nxp_enet_qos_mac_init(const struct device *dev)
return ret; return ret;
} }
if (config->mac_addr_source == NXP_ENET_QOS_MAC_ADDR_SOURCE_LOCAL) { switch (config->mac_addr_source) {
/* Use the mac address provided in the devicetree */ case NXP_ENET_QOS_MAC_ADDR_SOURCE_RANDOM:
} else if (config->mac_addr_source == NXP_ENET_QOS_MAC_ADDR_SOURCE_UNIQUE) { gen_random_mac(data->mac_addr.addr, NXP_OUI_BYTE_0, NXP_OUI_BYTE_1, NXP_OUI_BYTE_2);
break;
case NXP_ENET_QOS_MAC_ADDR_SOURCE_UNIQUE:
nxp_enet_unique_mac(data->mac_addr.addr); nxp_enet_unique_mac(data->mac_addr.addr);
} else { break;
gen_random_mac(data->mac_addr.addr,
NXP_OUI_BYTE_0, NXP_OUI_BYTE_1, NXP_OUI_BYTE_2); default:
break;
} }
/* This driver cannot work without interrupts. */ /* This driver cannot work without interrupts. */
@ -776,12 +780,12 @@ static const struct ethernet_api api_funcs = {
"MAC address not specified on ENET QOS DT node"); "MAC address not specified on ENET QOS DT node");
#define NXP_ENET_QOS_MAC_ADDR_SOURCE(n) \ #define NXP_ENET_QOS_MAC_ADDR_SOURCE(n) \
COND_CODE_1(DT_NODE_HAS_PROP(DT_DRV_INST(n), local_mac_address), \ COND_CODE_1(DT_INST_PROP(n, zephyr_random_mac_address), \
(NXP_ENET_QOS_MAC_ADDR_SOURCE_LOCAL), \
(COND_CODE_1(DT_INST_PROP(n, zephyr_random_mac_address), \
(NXP_ENET_QOS_MAC_ADDR_SOURCE_RANDOM), \ (NXP_ENET_QOS_MAC_ADDR_SOURCE_RANDOM), \
(COND_CODE_1(DT_INST_PROP(n, nxp_unique_mac), \ (COND_CODE_1(DT_INST_PROP(n, nxp_unique_mac), \
(NXP_ENET_QOS_MAC_ADDR_SOURCE_UNIQUE), \ (NXP_ENET_QOS_MAC_ADDR_SOURCE_UNIQUE), \
(COND_CODE_1(DT_NODE_HAS_PROP(DT_DRV_INST(n), local_mac_address), \
(NXP_ENET_QOS_MAC_ADDR_SOURCE_LOCAL), \
(NXP_ENET_QOS_MAC_ADDR_SOURCE_INVALID)))))) (NXP_ENET_QOS_MAC_ADDR_SOURCE_INVALID))))))
#define NXP_ENET_QOS_CONNECT_IRQS(node_id, prop, idx) \ #define NXP_ENET_QOS_CONNECT_IRQS(node_id, prop, idx) \

Loading…
Cancel
Save