@@ -59,9 +59,6 @@ struct sy1xx_mac_dev_config {
59
59
uint32_t base_addr ;
60
60
/* optional - enable promiscuous mode */
61
61
bool promiscuous_mode ;
62
- /* optional - device tree mac */
63
- bool use_local_mac_address ;
64
- uint8_t local_mac_address [6 ];
65
62
/* optional - random mac */
66
63
bool use_zephyr_random_mac ;
67
64
@@ -160,26 +157,25 @@ static int sy1xx_mac_set_promiscuous_mode(const struct device *dev, bool promisc
160
157
return 0 ;
161
158
}
162
159
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 )
164
161
{
165
162
struct sy1xx_mac_dev_config * cfg = (struct sy1xx_mac_dev_config * )dev -> config ;
166
163
struct sy1xx_mac_dev_data * data = (struct sy1xx_mac_dev_data * )dev -> data ;
167
164
int ret ;
168
165
uint32_t v_low , v_high ;
169
166
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 ]);
172
170
173
171
/* update mac in controller */
174
- v_low = sys_get_le32 (& mac_addr [0 ]);
172
+ v_low = sys_get_le32 (& data -> mac_addr [0 ]);
175
173
sys_write32 (v_low , cfg -> ctrl_addr + SY1XX_MAC_ADDRESS_LOW_REG );
176
174
177
175
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 ]);
179
177
sys_write32 (v_high , cfg -> ctrl_addr + SY1XX_MAC_ADDRESS_HIGH_REG );
180
178
181
- memcpy (data -> mac_addr , mac_addr , 6 );
182
-
183
179
/* Register Ethernet MAC Address with the upper layer */
184
180
ret = net_if_set_link_addr (data -> iface , data -> mac_addr , sizeof (data -> mac_addr ),
185
181
NET_LINK_ETHERNET );
@@ -208,20 +204,16 @@ static int sy1xx_mac_start(const struct device *dev)
208
204
sys_write32 (0x0001 , cfg -> ctrl_addr + SY1XX_MAC_CTRL_REG );
209
205
sys_write32 (0x0000 , cfg -> ctrl_addr + SY1XX_MAC_CTRL_REG );
210
206
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 ) {
216
208
/* 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 );
218
210
/* 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
+
223
213
}
224
214
215
+ sy1xx_mac_set_mac_addr (dev );
216
+
225
217
sy1xx_mac_set_promiscuous_mode (dev , cfg -> promiscuous_mode );
226
218
227
219
k_thread_resume (& data -> rx_data_thread );
@@ -355,6 +347,7 @@ static enum ethernet_hw_caps sy1xx_mac_get_caps(const struct device *dev)
355
347
static int sy1xx_mac_set_config (const struct device * dev , enum ethernet_config_type type ,
356
348
const struct ethernet_config * config )
357
349
{
350
+ struct sy1xx_mac_dev_data * data = (struct sy1xx_mac_dev_data * )dev -> data ;
358
351
int ret = 0 ;
359
352
360
353
switch (type ) {
@@ -364,7 +357,8 @@ static int sy1xx_mac_set_config(const struct device *dev, enum ethernet_config_t
364
357
break ;
365
358
366
359
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 );
368
362
break ;
369
363
default :
370
364
return - ENOTSUP ;
@@ -578,15 +572,14 @@ const struct ethernet_api sy1xx_mac_driver_api = {
578
572
.base_addr = DT_INST_REG_ADDR_BY_NAME(n, data), \
579
573
.pcfg = PINCTRL_DT_INST_DEV_CONFIG_GET(n), \
580
574
.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), \
583
575
.use_zephyr_random_mac = DT_INST_NODE_HAS_PROP(n, zephyr_random_mac_address), \
584
576
.phy_dev = DEVICE_DT_GET(DT_INST_PHANDLE(0, phy_handle))}; \
585
577
\
586
578
static struct sy1xx_mac_dma_buffers __attribute__((section(".udma_access"))) \
587
579
__aligned(4) sy1xx_mac_dma_buffers_##n; \
588
580
\
589
581
static struct sy1xx_mac_dev_data sy1xx_mac_dev_data##n = { \
582
+ .mac_addr = DT_INST_PROP_OR(n, local_mac_address, {0}), \
590
583
.dma_buffers = &sy1xx_mac_dma_buffers_##n, \
591
584
}; \
592
585
\
0 commit comments