@@ -570,11 +570,55 @@ static const struct device *eth_nxp_enet_qos_get_phy(const struct device *dev)
570570 return config -> phy_dev ;
571571}
572572
573+
574+
575+ static int eth_nxp_enet_qos_set_config (const struct device * dev ,
576+ enum ethernet_config_type type ,
577+ const struct ethernet_config * cfg )
578+ {
579+ const struct nxp_enet_qos_mac_config * config = dev -> config ;
580+ struct nxp_enet_qos_mac_data * data = dev -> data ;
581+ struct nxp_enet_qos_config * module_cfg = ENET_QOS_MODULE_CFG (config -> enet_dev );
582+ enet_qos_t * base = module_cfg -> base ;
583+
584+ switch (type ) {
585+ case ETHERNET_CONFIG_TYPE_MAC_ADDRESS :
586+ memcpy (data -> mac_addr .addr ,
587+ cfg -> mac_address .addr ,
588+ sizeof (data -> mac_addr .addr ));
589+ /* Set MAC address */
590+ base -> MAC_ADDRESS0_HIGH =
591+ ENET_QOS_REG_PREP (MAC_ADDRESS0_HIGH , ADDRHI ,
592+ data -> mac_addr .addr [5 ] << 8 |
593+ data -> mac_addr .addr [4 ]);
594+ base -> MAC_ADDRESS0_LOW =
595+ ENET_QOS_REG_PREP (MAC_ADDRESS0_LOW , ADDRLO ,
596+ data -> mac_addr .addr [3 ] << 24 |
597+ data -> mac_addr .addr [2 ] << 16 |
598+ data -> mac_addr .addr [1 ] << 8 |
599+ data -> mac_addr .addr [0 ]);
600+ net_if_set_link_addr (data -> iface , data -> mac_addr .addr ,
601+ sizeof (data -> mac_addr .addr ),
602+ NET_LINK_ETHERNET );
603+ LOG_DBG ("%s MAC set to %02x:%02x:%02x:%02x:%02x:%02x" ,
604+ dev -> name ,
605+ data -> mac_addr .addr [0 ], data -> mac_addr .addr [1 ],
606+ data -> mac_addr .addr [2 ], data -> mac_addr .addr [3 ],
607+ data -> mac_addr .addr [4 ], data -> mac_addr .addr [5 ]);
608+ return 0 ;
609+ default :
610+ break ;
611+ }
612+
613+ return - ENOTSUP ;
614+ }
615+
573616static const struct ethernet_api api_funcs = {
574617 .iface_api .init = eth_nxp_enet_qos_iface_init ,
575618 .send = eth_nxp_enet_qos_tx ,
576619 .get_capabilities = eth_nxp_enet_qos_get_capabilities ,
577620 .get_phy = eth_nxp_enet_qos_get_phy ,
621+ .set_config = eth_nxp_enet_qos_set_config ,
578622};
579623
580624#define NXP_ENET_QOS_NODE_HAS_MAC_ADDR_CHECK (n ) \
0 commit comments