projects
/
platform
/
kernel
/
u-boot.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge tag 'u-boot-atmel-fixes-2021.01-b' of https://gitlab.denx.de/u-boot/custodians...
[platform/kernel/u-boot.git]
/
drivers
/
core
/
device-remove.c
diff --git
a/drivers/core/device-remove.c
b/drivers/core/device-remove.c
index
444e34b
..
0924a57
100644
(file)
--- a/
drivers/core/device-remove.c
+++ b/
drivers/core/device-remove.c
@@
-10,6
+10,7
@@
#include <common.h>
#include <errno.h>
#include <common.h>
#include <errno.h>
+#include <log.h>
#include <malloc.h>
#include <dm/device.h>
#include <dm/device-internal.h>
#include <malloc.h>
#include <dm/device.h>
#include <dm/device-internal.h>
@@
-30,11
+31,14
@@
int device_chld_unbind(struct udevice *dev, struct driver *drv)
continue;
ret = device_unbind(pos);
continue;
ret = device_unbind(pos);
- if (ret && !saved_ret)
+ if (ret && !saved_ret) {
+ log_warning("device '%s' failed to unbind\n",
+ pos->name);
saved_ret = ret;
saved_ret = ret;
+ }
}
}
- return
saved_ret
;
+ return
log_ret(saved_ret)
;
}
int device_chld_remove(struct udevice *dev, struct driver *drv,
}
int device_chld_remove(struct udevice *dev, struct driver *drv,
@@
-63,13
+67,13
@@
int device_unbind(struct udevice *dev)
int ret;
if (!dev)
int ret;
if (!dev)
- return
-EINVAL
;
+ return
log_msg_ret("dev", -EINVAL)
;
if (dev->flags & DM_FLAG_ACTIVATED)
if (dev->flags & DM_FLAG_ACTIVATED)
- return
-EINVAL
;
+ return
log_msg_ret("active", -EINVAL)
;
if (!(dev->flags & DM_FLAG_BOUND))
if (!(dev->flags & DM_FLAG_BOUND))
- return
-EINVAL
;
+ return
log_msg_ret("not-bound", -EINVAL)
;
drv = dev->driver;
assert(drv);
drv = dev->driver;
assert(drv);
@@
-77,12
+81,12
@@
int device_unbind(struct udevice *dev)
if (drv->unbind) {
ret = drv->unbind(dev);
if (ret)
if (drv->unbind) {
ret = drv->unbind(dev);
if (ret)
- return
ret
;
+ return
log_msg_ret("unbind", ret)
;
}
ret = device_chld_unbind(dev, NULL);
if (ret)
}
ret = device_chld_unbind(dev, NULL);
if (ret)
- return
ret
;
+ return
log_msg_ret("child unbind", ret)
;
if (dev->flags & DM_FLAG_ALLOC_PDATA) {
free(dev->platdata);
if (dev->flags & DM_FLAG_ALLOC_PDATA) {
free(dev->platdata);
@@
-98,7
+102,7
@@
int device_unbind(struct udevice *dev)
}
ret = uclass_unbind_device(dev);
if (ret)
}
ret = uclass_unbind_device(dev);
if (ret)
- return
ret
;
+ return
log_msg_ret("uc", ret)
;
if (dev->parent)
list_del(&dev->sibling_node);
if (dev->parent)
list_del(&dev->sibling_node);
@@
-148,7
+152,7
@@
void device_free(struct udevice *dev)
static bool flags_remove(uint flags, uint drv_flags)
{
if ((flags & DM_REMOVE_NORMAL) ||
static bool flags_remove(uint flags, uint drv_flags)
{
if ((flags & DM_REMOVE_NORMAL) ||
- (flags & (drv_flags & (DM_FLAG_ACTIVE_DMA | DM_FLAG_OS_PREPARE))))
+ (flags &
&
(drv_flags & (DM_FLAG_ACTIVE_DMA | DM_FLAG_OS_PREPARE))))
return true;
return false;
return true;
return false;
@@
-194,8
+198,10
@@
int device_remove(struct udevice *dev, uint flags)
}
}
}
}
- if (!(drv->flags & DM_FLAG_DEFAULT_PD_CTRL_OFF) &&
- (dev != gd->cur_serial_dev))
+ if (!(flags & DM_REMOVE_NO_PD) &&
+ !(drv->flags &
+ (DM_FLAG_DEFAULT_PD_CTRL_OFF | DM_FLAG_REMOVE_WITH_PD_ON)) &&
+ dev != gd->cur_serial_dev)
dev_power_domain_off(dev);
if (flags_remove(flags, drv->flags)) {
dev_power_domain_off(dev);
if (flags_remove(flags, drv->flags)) {