@@ -26,6 +26,7 @@ struct phy_mii_dev_config {
26
26
bool no_reset ;
27
27
bool fixed ;
28
28
int fixed_speed ;
29
+ enum phy_link_speed default_speeds ;
29
30
const struct device * const mdio ;
30
31
};
31
32
@@ -610,13 +611,8 @@ static int phy_mii_initialize_dynamic_link(const struct device *dev)
610
611
k_work_init_delayable (& data -> monitor_work , monitor_work_handler );
611
612
k_work_init_delayable (& data -> autoneg_work , autoneg_work_handler );
612
613
613
- /* Advertise all speeds */
614
- phy_mii_cfg_link (dev , LINK_HALF_10BASE |
615
- LINK_FULL_10BASE |
616
- LINK_HALF_100BASE |
617
- LINK_FULL_100BASE |
618
- LINK_HALF_1000BASE |
619
- LINK_FULL_1000BASE );
614
+ /* Advertise default speeds */
615
+ phy_mii_cfg_link (dev , cfg -> default_speeds );
620
616
621
617
monitor_work_handler (& data -> monitor_work .work );
622
618
@@ -636,12 +632,24 @@ static DEVICE_API(ethphy, phy_mii_driver_api) = {
636
632
#endif
637
633
};
638
634
635
+ #define PHY_MII_GENERATE_DEFAULT_SPEEDS (n ) \
636
+ ((DT_INST_ENUM_HAS_VALUE(n, default_speeds, 10base_half_duplex) ? LINK_HALF_10BASE : 0) | \
637
+ (DT_INST_ENUM_HAS_VALUE(n, default_speeds, 10base_full_duplex) ? LINK_FULL_10BASE : 0) | \
638
+ (DT_INST_ENUM_HAS_VALUE(n, default_speeds, 100base_half_duplex) ? LINK_HALF_100BASE : 0) | \
639
+ (DT_INST_ENUM_HAS_VALUE(n, default_speeds, 100base_full_duplex) ? LINK_FULL_100BASE : 0) | \
640
+ (DT_INST_ENUM_HAS_VALUE(n, default_speeds, 1000base_half_duplex) ? LINK_HALF_1000BASE : 0) | \
641
+ (DT_INST_ENUM_HAS_VALUE(n, default_speeds, 1000base_full_duplex) ? LINK_FULL_1000BASE : 0))
642
+
639
643
#define PHY_MII_CONFIG (n ) \
644
+ BUILD_ASSERT(PHY_MII_GENERATE_DEFAULT_SPEEDS(n) != 0, \
645
+ "At least one valid speed must be configured for this driver"); \
646
+ \
640
647
static const struct phy_mii_dev_config phy_mii_dev_config_##n = { \
641
648
.phy_addr = DT_INST_REG_ADDR(n), \
642
649
.no_reset = DT_INST_PROP(n, no_reset), \
643
650
.fixed = IS_FIXED_LINK(n), \
644
651
.fixed_speed = DT_INST_ENUM_IDX_OR(n, fixed_link, 0), \
652
+ .default_speeds = PHY_MII_GENERATE_DEFAULT_SPEEDS(n), \
645
653
.mdio = UTIL_AND(UTIL_NOT(IS_FIXED_LINK(n)), \
646
654
DEVICE_DT_GET(DT_INST_BUS(n))) \
647
655
};
0 commit comments