drivers: eth: Get Manual MAC address from devicetree

Move from a Kconfig to select/initialize the MAC address to using the
"local-mac-address" property in devicetree.  If the property is set the
drivers will initialize the mac-address from the devicetree (unless the
mac address is all 0's).  The MAC address might get overwritten by
either a driver specific means or by the setting of
"zephyr,random-mac-address" in the devicetree.

Signed-off-by: Kumar Gala <kumar.gala@linaro.org>
This commit is contained in:
Kumar Gala 2020-04-23 12:37:38 -05:00 committed by Carles Cufí
parent 1de61b4c42
commit b19cf0bed3
9 changed files with 27 additions and 88 deletions

View file

@ -12,10 +12,6 @@ if ETH_SAM_GMAC
# Read MAC address from AT24MAC402 EEPROM
choice ETH_SAM_GMAC_MAC_SELECT
default ETH_SAM_GMAC_MAC_I2C_EEPROM
endchoice
config ETH_SAM_GMAC_MAC_I2C_SLAVE_ADDRESS
default 0x5F

View file

@ -13,9 +13,8 @@ if ETH_SAM_GMAC
# Read MAC address from AT24MAC402 EEPROM
choice ETH_SAM_GMAC_MAC_SELECT
default ETH_SAM_GMAC_MAC_I2C_EEPROM
endchoice
config ETH_SAM_GMAC_MAC_I2C_EEPROM
default y
config ETH_SAM_GMAC_MAC_I2C_SLAVE_ADDRESS
default 0x5F

View file

@ -34,52 +34,6 @@ config ETH_GECKO_RX_THREAD_PRIO
help
RX thread priority
choice ETH_GECKO_MAC_SELECT
prompt "MAC address"
help
Choose how to configure MAC address.
config ETH_GECKO_MAC_MANUAL
bool "Manual"
help
Assign an arbitrary MAC address.
endchoice # ETH_GECKO_MAC_SELECT
if ETH_GECKO_MAC_MANUAL
config ETH_GECKO_MAC0
hex "MAC Address Byte 0"
default 0
range 0 0xff
config ETH_GECKO_MAC1
hex "MAC Address Byte 1"
default 0
range 0 0xff
config ETH_GECKO_MAC2
hex "MAC Address Byte 2"
default 0
range 0 0xff
config ETH_GECKO_MAC3
hex "MAC Address Byte 3"
default 0
range 0 0xff
config ETH_GECKO_MAC4
hex "MAC Address Byte 4"
default 0
range 0 0xff
config ETH_GECKO_MAC5
hex "MAC Address Byte 5"
default 0
range 0 0xff
endif # ETH_GECKO_MAC_MANUAL
config ETH_GECKO_CARRIER_CHECK_RX_IDLE_TIMEOUT_MS
int "Carrier check timeout period (ms)"
default 500

View file

@ -65,12 +65,6 @@ config ETH_MCUX_0_UNIQUE_MAC
bool "Stable MAC address"
help
Generate MAC address from MCU's unique identification register.
config ETH_MCUX_0_MANUAL_MAC
bool "Manual MAC address"
help
Get MAC address from the device tree.
endchoice
endif # ETH_MCUX_0
@ -93,11 +87,6 @@ config ETH_MCUX_1_UNIQUE_MAC
help
Generate MAC address from MCU's unique identification register.
config ETH_MCUX_1_MANUAL_MAC
bool "Manual MAC address"
help
Get MAC address from the device tree.
endchoice
endif # ETH_MCUX_1

View file

@ -76,23 +76,11 @@ config ETH_SAM_GMAC_MONITOR_PERIOD
periodically executed to detect and report any changes in the PHY
link status to the operating system.
choice ETH_SAM_GMAC_MAC_SELECT
prompt "MAC address"
help
Choose how to configure MAC address.
config ETH_SAM_GMAC_MAC_MANUAL
bool "Manual"
help
Assign the MAC address specified in the device tree.
config ETH_SAM_GMAC_MAC_I2C_EEPROM
bool "Read from an I2C EEPROM"
help
Read MAC address from an I2C EEPROM.
endchoice
if ETH_SAM_GMAC_MAC_I2C_EEPROM
config ETH_SAM_GMAC_MAC_I2C_SLAVE_ADDRESS

View file

@ -9,6 +9,26 @@
#include <zephyr/types.h>
/* helper macro to return mac address octet from local_mac_address prop */
#define NODE_MAC_ADDR_OCTET(node, n) DT_PROP_BY_IDX(node, local_mac_address, n)
/* Determine if a mac address is all 0's */
#define NODE_MAC_ADDR_NULL(node) \
((NODE_MAC_ADDR_OCTET(node, 0) == 0) && \
(NODE_MAC_ADDR_OCTET(node, 1) == 0) && \
(NODE_MAC_ADDR_OCTET(node, 2) == 0) && \
(NODE_MAC_ADDR_OCTET(node, 3) == 0) && \
(NODE_MAC_ADDR_OCTET(node, 4) == 0) && \
(NODE_MAC_ADDR_OCTET(node, 5) == 0))
/* Given a device tree node for an ethernet controller will
* returns false if there is no local-mac-address property or
* the property is all zero's. Otherwise will return True
*/
#define NODE_HAS_VALID_MAC_ADDR(node) \
UTIL_AND(DT_NODE_HAS_PROP(node, local_mac_address),\
(!NODE_MAC_ADDR_NULL(node)))
static inline void gen_random_mac(u8_t *mac_addr, u8_t b0, u8_t b1, u8_t b2)
{
u32_t entropy;

View file

@ -659,15 +659,8 @@ static const struct eth_gecko_dev_cfg eth0_config = {
};
static struct eth_gecko_dev_data eth0_data = {
#ifdef CONFIG_ETH_GECKO_MAC_MANUAL
.mac_addr = {
CONFIG_ETH_GECKO_MAC0,
CONFIG_ETH_GECKO_MAC1,
CONFIG_ETH_GECKO_MAC2,
CONFIG_ETH_GECKO_MAC3,
CONFIG_ETH_GECKO_MAC4,
CONFIG_ETH_GECKO_MAC5,
},
#if NODE_HAS_VALID_MAC_ADDR(DT_DRV_INST(0))
.mac_addr = DT_INST_PROP(0, local_mac_address),
#endif
};

View file

@ -1210,7 +1210,7 @@ static struct eth_context eth_0_context = {
#if DT_INST_PROP(0, zephyr_random_mac_address)
.generate_mac = generate_random_mac,
#endif
#if defined(CONFIG_ETH_MCUX_0_MANUAL_MAC)
#if NODE_HAS_VALID_MAC_ADDR(DT_DRV_INST(0))
.mac_addr = DT_INST_PROP(0, local_mac_address),
.generate_mac = NULL,
#endif
@ -1277,7 +1277,7 @@ static struct eth_context eth_1_context = {
#if DT_INST_PROP(1, zephyr_random_mac_address)
.generate_mac = generate_random_mac,
#endif
#if defined(CONFIG_ETH_MCUX_1_MANUAL_MAC)
#if NODE_HAS_VALID_MAC_ADDR(DT_DRV_INST(1))
.mac_addr = DT_INST_PROP(1, local_mac_address),
.generate_mac = NULL,
#endif

View file

@ -2201,7 +2201,7 @@ static const struct eth_sam_dev_cfg eth0_config = {
};
static struct eth_sam_dev_data eth0_data = {
#ifdef CONFIG_ETH_SAM_GMAC_MAC_MANUAL
#if NODE_HAS_VALID_MAC_ADDR(DT_DRV_INST(0))
.mac_addr = DT_INST_PROP(0, local_mac_address),
#endif
.queue_list = {