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

Loading…
Cancel
Save