Skip to content

Commit 5f83aea

Browse files
maass-hamburgkartben
authored andcommitted
drivers: ethernet: sensry: 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. Signed-off-by: Fin Maaß <f.maass@vogl-electronic.com>
1 parent 4b6ccbd commit 5f83aea

File tree

1 file changed

+16
-23
lines changed

1 file changed

+16
-23
lines changed

drivers/ethernet/eth_sensry_sy1xx_mac.c

Lines changed: 16 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,6 @@ struct sy1xx_mac_dev_config {
5959
uint32_t base_addr;
6060
/* optional - enable promiscuous mode */
6161
bool promiscuous_mode;
62-
/* optional - device tree mac */
63-
bool use_local_mac_address;
64-
uint8_t local_mac_address[6];
6562
/* optional - random mac */
6663
bool use_zephyr_random_mac;
6764

@@ -160,26 +157,25 @@ static int sy1xx_mac_set_promiscuous_mode(const struct device *dev, bool promisc
160157
return 0;
161158
}
162159

163-
static int sy1xx_mac_set_mac_addr(const struct device *dev, uint8_t *mac_addr)
160+
static int sy1xx_mac_set_mac_addr(const struct device *dev)
164161
{
165162
struct sy1xx_mac_dev_config *cfg = (struct sy1xx_mac_dev_config *)dev->config;
166163
struct sy1xx_mac_dev_data *data = (struct sy1xx_mac_dev_data *)dev->data;
167164
int ret;
168165
uint32_t v_low, v_high;
169166

170-
LOG_INF("%s set link address %02x:%02x:%02x:%02x:%02x:%02x", dev->name, mac_addr[0],
171-
mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]);
167+
LOG_INF("%s set link address %02x:%02x:%02x:%02x:%02x:%02x", dev->name, data->mac_addr[0],
168+
data->mac_addr[1], data->mac_addr[2], data->mac_addr[3], data->mac_addr[4],
169+
data->mac_addr[5]);
172170

173171
/* update mac in controller */
174-
v_low = sys_get_le32(&mac_addr[0]);
172+
v_low = sys_get_le32(&data->mac_addr[0]);
175173
sys_write32(v_low, cfg->ctrl_addr + SY1XX_MAC_ADDRESS_LOW_REG);
176174

177175
v_high = sys_read32(cfg->ctrl_addr + SY1XX_MAC_ADDRESS_HIGH_REG);
178-
v_high |= (v_high & 0xffff0000) | sys_get_le16(&mac_addr[4]);
176+
v_high |= (v_high & 0xffff0000) | sys_get_le16(&data->mac_addr[4]);
179177
sys_write32(v_high, cfg->ctrl_addr + SY1XX_MAC_ADDRESS_HIGH_REG);
180178

181-
memcpy(data->mac_addr, mac_addr, 6);
182-
183179
/* Register Ethernet MAC Address with the upper layer */
184180
ret = net_if_set_link_addr(data->iface, data->mac_addr, sizeof(data->mac_addr),
185181
NET_LINK_ETHERNET);
@@ -208,20 +204,16 @@ static int sy1xx_mac_start(const struct device *dev)
208204
sys_write32(0x0001, cfg->ctrl_addr + SY1XX_MAC_CTRL_REG);
209205
sys_write32(0x0000, cfg->ctrl_addr + SY1XX_MAC_CTRL_REG);
210206

211-
/* preset mac addr */
212-
if (cfg->use_local_mac_address) {
213-
/* prio 0 -- from device tree */
214-
sy1xx_mac_set_mac_addr(dev, cfg->local_mac_address);
215-
} else if (cfg->use_zephyr_random_mac) {
207+
if (cfg->use_zephyr_random_mac) {
216208
/* prio 1 -- generate random, if set in device tree */
217-
sys_rand_get(&rand_mac_addr, 6);
209+
sys_rand_get(&data->mac_addr, 6);
218210
/* Set MAC address locally administered, unicast (LAA) */
219-
rand_mac_addr[0] |= 0x02;
220-
sy1xx_mac_set_mac_addr(dev, rand_mac_addr);
221-
} else {
222-
/* no preset mac address available */
211+
data->mac_addr[0] |= 0x02;
212+
223213
}
224214

215+
sy1xx_mac_set_mac_addr(dev);
216+
225217
sy1xx_mac_set_promiscuous_mode(dev, cfg->promiscuous_mode);
226218

227219
k_thread_resume(&data->rx_data_thread);
@@ -355,6 +347,7 @@ static enum ethernet_hw_caps sy1xx_mac_get_caps(const struct device *dev)
355347
static int sy1xx_mac_set_config(const struct device *dev, enum ethernet_config_type type,
356348
const struct ethernet_config *config)
357349
{
350+
struct sy1xx_mac_dev_data *data = (struct sy1xx_mac_dev_data *)dev->data;
358351
int ret = 0;
359352

360353
switch (type) {
@@ -364,7 +357,8 @@ static int sy1xx_mac_set_config(const struct device *dev, enum ethernet_config_t
364357
break;
365358

366359
case ETHERNET_CONFIG_TYPE_MAC_ADDRESS:
367-
ret = sy1xx_mac_set_mac_addr(dev, (uint8_t *)&(config->mac_address.addr));
360+
memcpy(data->mac_addr, config->mac_address.addr, sizeof(data->mac_addr));
361+
ret = sy1xx_mac_set_mac_addr(dev);
368362
break;
369363
default:
370364
return -ENOTSUP;
@@ -578,15 +572,14 @@ const struct ethernet_api sy1xx_mac_driver_api = {
578572
.base_addr = DT_INST_REG_ADDR_BY_NAME(n, data), \
579573
.pcfg = PINCTRL_DT_INST_DEV_CONFIG_GET(n), \
580574
.promiscuous_mode = DT_INST_PROP_OR(n, promiscuous_mode, false), \
581-
.local_mac_address = DT_INST_PROP_OR(n, local_mac_address, {0}), \
582-
.use_local_mac_address = DT_INST_NODE_HAS_PROP(n, local_mac_address), \
583575
.use_zephyr_random_mac = DT_INST_NODE_HAS_PROP(n, zephyr_random_mac_address), \
584576
.phy_dev = DEVICE_DT_GET(DT_INST_PHANDLE(0, phy_handle))}; \
585577
\
586578
static struct sy1xx_mac_dma_buffers __attribute__((section(".udma_access"))) \
587579
__aligned(4) sy1xx_mac_dma_buffers_##n; \
588580
\
589581
static struct sy1xx_mac_dev_data sy1xx_mac_dev_data##n = { \
582+
.mac_addr = DT_INST_PROP_OR(n, local_mac_address, {0}), \
590583
.dma_buffers = &sy1xx_mac_dma_buffers_##n, \
591584
}; \
592585
\

0 commit comments

Comments
 (0)