{
        struct device_link *link;
 
-       list_for_each_entry(link, &dev->links.suppliers, c_node)
-               if (link->status == DL_STATE_CONSUMER_PROBE)
+       list_for_each_entry(link, &dev->links.suppliers, c_node) {
+               if (link->status != DL_STATE_CONSUMER_PROBE)
+                       continue;
+
+               if (link->supplier->links.status == DL_DEV_DRIVER_BOUND) {
                        WRITE_ONCE(link->status, DL_STATE_AVAILABLE);
+               } else {
+                       WARN_ON(!(link->flags & DL_FLAG_SYNC_STATE_ONLY));
+                       WRITE_ONCE(link->status, DL_STATE_DORMANT);
+               }
+       }
 }
 
 /**
        device_links_write_lock();
 
        list_for_each_entry(link, &dev->links.suppliers, c_node) {
-               if (!(link->flags & DL_FLAG_MANAGED) ||
-                   link->flags & DL_FLAG_SYNC_STATE_ONLY)
+               if (!(link->flags & DL_FLAG_MANAGED))
                        continue;
 
-               if (link->status != DL_STATE_AVAILABLE) {
+               if (link->status != DL_STATE_AVAILABLE &&
+                   !(link->flags & DL_FLAG_SYNC_STATE_ONLY)) {
                        device_links_missing_supplier(dev);
                        ret = -EPROBE_DEFER;
                        break;
                if (!(link->flags & DL_FLAG_MANAGED))
                        continue;
 
-               if (link->flags & DL_FLAG_AUTOREMOVE_CONSUMER)
+               if (link->flags & DL_FLAG_AUTOREMOVE_CONSUMER) {
                        device_link_drop_managed(link);
-               else if (link->status == DL_STATE_CONSUMER_PROBE ||
-                        link->status == DL_STATE_ACTIVE)
+                       continue;
+               }
+
+               if (link->status != DL_STATE_CONSUMER_PROBE &&
+                   link->status != DL_STATE_ACTIVE)
+                       continue;
+
+               if (link->supplier->links.status == DL_DEV_DRIVER_BOUND) {
                        WRITE_ONCE(link->status, DL_STATE_AVAILABLE);
+               } else {
+                       WARN_ON(!(link->flags & DL_FLAG_SYNC_STATE_ONLY));
+                       WRITE_ONCE(link->status, DL_STATE_DORMANT);
+               }
        }
 
        dev->links.status = DL_DEV_NO_DRIVER;