@@ -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)
355347static 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