struct fwnode_handle *fwnode)
 {
        struct fwnode_handle *fixed_node;
+       bool pause, asym_pause, autoneg;
        const struct phy_setting *s;
        struct gpio_desc *desc;
        u32 speed;
        linkmode_copy(pl->link_config.advertising, pl->supported);
        phylink_validate(pl, pl->supported, &pl->link_config);
 
+       pause = phylink_test(pl->supported, Pause);
+       asym_pause = phylink_test(pl->supported, Asym_Pause);
+       autoneg = phylink_test(pl->supported, Autoneg);
        s = phy_lookup_setting(pl->link_config.speed, pl->link_config.duplex,
                               pl->supported, true);
        linkmode_zero(pl->supported);
        phylink_set(pl->supported, MII);
-       phylink_set(pl->supported, Pause);
-       phylink_set(pl->supported, Asym_Pause);
-       phylink_set(pl->supported, Autoneg);
+
+       if (pause)
+               phylink_set(pl->supported, Pause);
+
+       if (asym_pause)
+               phylink_set(pl->supported, Asym_Pause);
+
+       if (autoneg)
+               phylink_set(pl->supported, Autoneg);
+
        if (s) {
                __set_bit(s->bit, pl->supported);
                __set_bit(s->bit, pl->link_config.lp_advertising);