summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2015-09-12 08:45:19 -0600
committerSimon Glass <sjg@chromium.org>2015-10-05 15:47:49 +0100
commit84d26e296ab62b172f73b5367d9b7295309dfdd5 (patch)
tree9b7b34af512bbe3e5df68ca9fb379860e26b6203
parent996ec1dcc58a34b53891acde0ec5df9141b5fcc2 (diff)
downloadu-boot-imx-84d26e296ab62b172f73b5367d9b7295309dfdd5.zip
u-boot-imx-84d26e296ab62b172f73b5367d9b7295309dfdd5.tar.gz
u-boot-imx-84d26e296ab62b172f73b5367d9b7295309dfdd5.tar.bz2
dm: core: Don't use pinctrl for the root device
Currently when driver model starts up it finds the root uclass and the pinctrl uclass. This is because even the root node handles pinctrl processing. But this is not useful. The root node is not a real hardware device so cannot require any particular pinmux settings. Also it means that the memory leak tests fails, since they end up freeing more memory than they allocate: the marker it set after the root device and pinctrl uclass are allocated, and later once the pinctrl uclass is freed the memory used by driver model is less than when the marker was set. If a platform needs 'core' pin mulitplex settings it can do this with a driver that is probed on start-up. It would be an abuse of the root node to use this for pinctrl. To avoid this problem, only process pinctrl settings for non-root nodes. Signed-off-by: Simon Glass <sjg@chromium.org>
-rw-r--r--drivers/core/device.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/drivers/core/device.c b/drivers/core/device.c
index 0bc04d4..833a803 100644
--- a/drivers/core/device.c
+++ b/drivers/core/device.c
@@ -289,8 +289,12 @@ int device_probe_child(struct udevice *dev, void *parent_priv)
dev->flags |= DM_FLAG_ACTIVATED;
- /* continue regardless of the result of pinctrl */
- pinctrl_select_state(dev, "default");
+ /*
+ * Process pinctrl for everything except the root device, and
+ * continue regardless of the result of pinctrl.
+ */
+ if (dev->parent)
+ pinctrl_select_state(dev, "default");
ret = uclass_pre_probe_device(dev);
if (ret)