diff --git a/drivers/core/device.c b/drivers/core/device.c
index 92e8a57bf69b1bedc608cb9f5ace3585fe99777b..6bd4b26623d3716930cde9726d3300db374d25dc 100644
--- a/drivers/core/device.c
+++ b/drivers/core/device.c
@@ -243,14 +243,15 @@ int device_probe_child(struct udevice *dev, void *parent_priv)
 			goto fail;
 	}
 
+	dev->flags |= DM_FLAG_ACTIVATED;
 	if (drv->probe) {
 		ret = drv->probe(dev);
-		if (ret)
+		if (ret) {
+			dev->flags &= ~DM_FLAG_ACTIVATED;
 			goto fail;
+		}
 	}
 
-	dev->flags |= DM_FLAG_ACTIVATED;
-
 	ret = uclass_post_probe_device(dev);
 	if (ret) {
 		dev->flags &= ~DM_FLAG_ACTIVATED;