summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorMichal Simek <[email protected]>2022-01-07 16:38:09 +0100
committerSimon Glass <[email protected]>2022-01-13 09:13:41 -0700
commitd8ef446fec1d5dde5a6238f452d04cda81f8752a (patch)
tree19659b3f5bf0674d3532c409ac5f38afd9db3cc9 /drivers
parent743c562d0c5269740236864bdb0002e73ec3e614 (diff)
dm: core: Switch order of pinctrl and power domain calls
The commit 3ad307784847 ("dm: core: device: enable power domain in probe") introduced enabling power domain when device is probed. By checking this sequence in Linux kernel was found that power domain is handled first followed by pinctrl setting. This patch is switching this order to follow Linux kernel that power domains are handled first follow by pinctrl setting. The issue was found on Xilinx Kria SOM where firmware is blocking setting up pin configuration/muxes without enabling power domain for the specific IP first. Signed-off-by: Michal Simek <[email protected]> Reviewed-by: Simon Glass <[email protected]>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/core/device.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/drivers/core/device.c b/drivers/core/device.c
index 4873c47d10b..d917d4e82da 100644
--- a/drivers/core/device.c
+++ b/drivers/core/device.c
@@ -518,6 +518,14 @@ int device_probe(struct udevice *dev)
dev_or_flags(dev, DM_FLAG_ACTIVATED);
+ if (CONFIG_IS_ENABLED(POWER_DOMAIN) && dev->parent &&
+ (device_get_uclass_id(dev) != UCLASS_POWER_DOMAIN) &&
+ !(drv->flags & DM_FLAG_DEFAULT_PD_CTRL_OFF)) {
+ ret = dev_power_domain_on(dev);
+ if (ret)
+ goto fail;
+ }
+
/*
* Process pinctrl for everything except the root device, and
* continue regardless of the result of pinctrl. Don't process pinctrl
@@ -540,14 +548,6 @@ int device_probe(struct udevice *dev)
dev->name, ret, errno_str(ret));
}
- if (CONFIG_IS_ENABLED(POWER_DOMAIN) && dev->parent &&
- (device_get_uclass_id(dev) != UCLASS_POWER_DOMAIN) &&
- !(drv->flags & DM_FLAG_DEFAULT_PD_CTRL_OFF)) {
- ret = dev_power_domain_on(dev);
- if (ret)
- goto fail;
- }
-
if (CONFIG_IS_ENABLED(IOMMU) && dev->parent &&
(device_get_uclass_id(dev) != UCLASS_IOMMU)) {
ret = dev_iommu_enable(dev);