xref: /openbmc/linux/drivers/base/dd.c (revision b97d6790d03b763eca08847a9a5869a4291b9f9a)
1989d42e8SGreg Kroah-Hartman // SPDX-License-Identifier: GPL-2.0
207e4a3e2Smochel@digitalimplant.org /*
307e4a3e2Smochel@digitalimplant.org  * drivers/base/dd.c - The core device/driver interactions.
407e4a3e2Smochel@digitalimplant.org  *
507e4a3e2Smochel@digitalimplant.org  * This file contains the (sometimes tricky) code that controls the
607e4a3e2Smochel@digitalimplant.org  * interactions between devices and drivers, which primarily includes
707e4a3e2Smochel@digitalimplant.org  * driver binding and unbinding.
807e4a3e2Smochel@digitalimplant.org  *
907e4a3e2Smochel@digitalimplant.org  * All of this code used to exist in drivers/base/bus.c, but was
1007e4a3e2Smochel@digitalimplant.org  * relocated to here in the name of compartmentalization (since it wasn't
1107e4a3e2Smochel@digitalimplant.org  * strictly code just for the 'struct bus_type'.
1207e4a3e2Smochel@digitalimplant.org  *
1307e4a3e2Smochel@digitalimplant.org  * Copyright (c) 2002-5 Patrick Mochel
1407e4a3e2Smochel@digitalimplant.org  * Copyright (c) 2002-3 Open Source Development Labs
15b4028437SGreg Kroah-Hartman  * Copyright (c) 2007-2009 Greg Kroah-Hartman <gregkh@suse.de>
16b4028437SGreg Kroah-Hartman  * Copyright (c) 2007-2009 Novell Inc.
1707e4a3e2Smochel@digitalimplant.org  */
1807e4a3e2Smochel@digitalimplant.org 
1928af109aSJavier Martinez Canillas #include <linux/debugfs.h>
2007e4a3e2Smochel@digitalimplant.org #include <linux/device.h>
21216773a7SArjan van de Ven #include <linux/delay.h>
220a0f0d8bSChristoph Hellwig #include <linux/dma-map-ops.h>
231f5000bdSTodd Poynor #include <linux/init.h>
2407e4a3e2Smochel@digitalimplant.org #include <linux/module.h>
25d779249eSGreg Kroah-Hartman #include <linux/kthread.h>
26735a7ffbSAndrew Morton #include <linux/wait.h>
27216773a7SArjan van de Ven #include <linux/async.h>
285e928f77SRafael J. Wysocki #include <linux/pm_runtime.h>
29ab78029eSLinus Walleij #include <linux/pinctrl/devinfo.h>
30d090b70eSAndrzej Hajda #include <linux/slab.h>
3107e4a3e2Smochel@digitalimplant.org 
3207e4a3e2Smochel@digitalimplant.org #include "base.h"
3307e4a3e2Smochel@digitalimplant.org #include "power/power.h"
3407e4a3e2Smochel@digitalimplant.org 
35d1c3414cSGrant Likely /*
36d1c3414cSGrant Likely  * Deferred Probe infrastructure.
37d1c3414cSGrant Likely  *
38d1c3414cSGrant Likely  * Sometimes driver probe order matters, but the kernel doesn't always have
39d1c3414cSGrant Likely  * dependency information which means some drivers will get probed before a
40d1c3414cSGrant Likely  * resource it depends on is available.  For example, an SDHCI driver may
41d1c3414cSGrant Likely  * first need a GPIO line from an i2c GPIO controller before it can be
42d1c3414cSGrant Likely  * initialized.  If a required resource is not available yet, a driver can
43d1c3414cSGrant Likely  * request probing to be deferred by returning -EPROBE_DEFER from its probe hook
44d1c3414cSGrant Likely  *
45d1c3414cSGrant Likely  * Deferred probe maintains two lists of devices, a pending list and an active
46d1c3414cSGrant Likely  * list.  A driver returning -EPROBE_DEFER causes the device to be added to the
47d1c3414cSGrant Likely  * pending list.  A successful driver probe will trigger moving all devices
48d1c3414cSGrant Likely  * from the pending to the active list so that the workqueue will eventually
49d1c3414cSGrant Likely  * retry them.
50d1c3414cSGrant Likely  *
51d1c3414cSGrant Likely  * The deferred_probe_mutex must be held any time the deferred_probe_*_list
52ef8a3fd6SGreg Kroah-Hartman  * of the (struct device*)->p->deferred_probe pointers are manipulated
53d1c3414cSGrant Likely  */
54d1c3414cSGrant Likely static DEFINE_MUTEX(deferred_probe_mutex);
55d1c3414cSGrant Likely static LIST_HEAD(deferred_probe_pending_list);
56d1c3414cSGrant Likely static LIST_HEAD(deferred_probe_active_list);
5758b116bcSGrant Likely static atomic_t deferred_trigger_count = ATOMIC_INIT(0);
5825b4e70dSRob Herring static bool initcalls_done;
59d1c3414cSGrant Likely 
601ea61b68SFeng Tang /* Save the async probe drivers' name from kernel cmdline */
611ea61b68SFeng Tang #define ASYNC_DRV_NAMES_MAX_LEN	256
621ea61b68SFeng Tang static char async_probe_drv_names[ASYNC_DRV_NAMES_MAX_LEN];
63f79f662eSSaravana Kannan static bool async_probe_default;
641ea61b68SFeng Tang 
6541575335SThierry Reding /*
66013c074fSStrashko, Grygorii  * In some cases, like suspend to RAM or hibernation, It might be reasonable
67013c074fSStrashko, Grygorii  * to prohibit probing of devices as it could be unsafe.
68013c074fSStrashko, Grygorii  * Once defer_all_probes is true all drivers probes will be forcibly deferred.
69013c074fSStrashko, Grygorii  */
70013c074fSStrashko, Grygorii static bool defer_all_probes;
71013c074fSStrashko, Grygorii 
__device_set_deferred_probe_reason(const struct device * dev,char * reason)7272a91f19SAhmad Fatoum static void __device_set_deferred_probe_reason(const struct device *dev, char *reason)
7372a91f19SAhmad Fatoum {
7472a91f19SAhmad Fatoum 	kfree(dev->p->deferred_probe_reason);
7572a91f19SAhmad Fatoum 	dev->p->deferred_probe_reason = reason;
7672a91f19SAhmad Fatoum }
7772a91f19SAhmad Fatoum 
78013c074fSStrashko, Grygorii /*
79d1c3414cSGrant Likely  * deferred_probe_work_func() - Retry probing devices in the active list.
80d1c3414cSGrant Likely  */
deferred_probe_work_func(struct work_struct * work)81d1c3414cSGrant Likely static void deferred_probe_work_func(struct work_struct *work)
82d1c3414cSGrant Likely {
83d1c3414cSGrant Likely 	struct device *dev;
84ef8a3fd6SGreg Kroah-Hartman 	struct device_private *private;
85d1c3414cSGrant Likely 	/*
86d1c3414cSGrant Likely 	 * This block processes every device in the deferred 'active' list.
87d1c3414cSGrant Likely 	 * Each device is removed from the active list and passed to
88d1c3414cSGrant Likely 	 * bus_probe_device() to re-attempt the probe.  The loop continues
89d1c3414cSGrant Likely 	 * until every device in the active list is removed and retried.
90d1c3414cSGrant Likely 	 *
91d1c3414cSGrant Likely 	 * Note: Once the device is removed from the list and the mutex is
92d1c3414cSGrant Likely 	 * released, it is possible for the device get freed by another thread
93d1c3414cSGrant Likely 	 * and cause a illegal pointer dereference.  This code uses
94d1c3414cSGrant Likely 	 * get/put_device() to ensure the device structure cannot disappear
95d1c3414cSGrant Likely 	 * from under our feet.
96d1c3414cSGrant Likely 	 */
97d1c3414cSGrant Likely 	mutex_lock(&deferred_probe_mutex);
98d1c3414cSGrant Likely 	while (!list_empty(&deferred_probe_active_list)) {
99ef8a3fd6SGreg Kroah-Hartman 		private = list_first_entry(&deferred_probe_active_list,
100ef8a3fd6SGreg Kroah-Hartman 					typeof(*dev->p), deferred_probe);
101ef8a3fd6SGreg Kroah-Hartman 		dev = private->device;
102ef8a3fd6SGreg Kroah-Hartman 		list_del_init(&private->deferred_probe);
103d1c3414cSGrant Likely 
104d1c3414cSGrant Likely 		get_device(dev);
105d1c3414cSGrant Likely 
10672a91f19SAhmad Fatoum 		__device_set_deferred_probe_reason(dev, NULL);
107f0acf637SAhmad Fatoum 
1088b0372a2SGreg Kroah-Hartman 		/*
1098b0372a2SGreg Kroah-Hartman 		 * Drop the mutex while probing each device; the probe path may
1108b0372a2SGreg Kroah-Hartman 		 * manipulate the deferred list
1118b0372a2SGreg Kroah-Hartman 		 */
112d1c3414cSGrant Likely 		mutex_unlock(&deferred_probe_mutex);
1138153584eSMark Brown 
1148153584eSMark Brown 		/*
1158153584eSMark Brown 		 * Force the device to the end of the dpm_list since
1168153584eSMark Brown 		 * the PM code assumes that the order we add things to
1178153584eSMark Brown 		 * the list is a good order for suspend but deferred
1188153584eSMark Brown 		 * probe makes that very unsafe.
1198153584eSMark Brown 		 */
120494fd7b7SFeng Kan 		device_pm_move_to_tail(dev);
1218153584eSMark Brown 
122d1c3414cSGrant Likely 		dev_dbg(dev, "Retrying from deferred list\n");
123d1c3414cSGrant Likely 		bus_probe_device(dev);
124d1c3414cSGrant Likely 		mutex_lock(&deferred_probe_mutex);
125d1c3414cSGrant Likely 
126d1c3414cSGrant Likely 		put_device(dev);
127d1c3414cSGrant Likely 	}
128d1c3414cSGrant Likely 	mutex_unlock(&deferred_probe_mutex);
129d1c3414cSGrant Likely }
130d1c3414cSGrant Likely static DECLARE_WORK(deferred_probe_work, deferred_probe_work_func);
131d1c3414cSGrant Likely 
driver_deferred_probe_add(struct device * dev)132e7dd4010SRafael J. Wysocki void driver_deferred_probe_add(struct device *dev)
133d1c3414cSGrant Likely {
134f2db85b6SSaravana Kannan 	if (!dev->can_match)
135f2db85b6SSaravana Kannan 		return;
136f2db85b6SSaravana Kannan 
137d1c3414cSGrant Likely 	mutex_lock(&deferred_probe_mutex);
138ef8a3fd6SGreg Kroah-Hartman 	if (list_empty(&dev->p->deferred_probe)) {
139d1c3414cSGrant Likely 		dev_dbg(dev, "Added to deferred list\n");
1401d29cfa5SKuninori Morimoto 		list_add_tail(&dev->p->deferred_probe, &deferred_probe_pending_list);
141d1c3414cSGrant Likely 	}
142d1c3414cSGrant Likely 	mutex_unlock(&deferred_probe_mutex);
143d1c3414cSGrant Likely }
144d1c3414cSGrant Likely 
driver_deferred_probe_del(struct device * dev)145d1c3414cSGrant Likely void driver_deferred_probe_del(struct device *dev)
146d1c3414cSGrant Likely {
147d1c3414cSGrant Likely 	mutex_lock(&deferred_probe_mutex);
148ef8a3fd6SGreg Kroah-Hartman 	if (!list_empty(&dev->p->deferred_probe)) {
149d1c3414cSGrant Likely 		dev_dbg(dev, "Removed from deferred list\n");
150ef8a3fd6SGreg Kroah-Hartman 		list_del_init(&dev->p->deferred_probe);
15172a91f19SAhmad Fatoum 		__device_set_deferred_probe_reason(dev, NULL);
152d1c3414cSGrant Likely 	}
153d1c3414cSGrant Likely 	mutex_unlock(&deferred_probe_mutex);
154d1c3414cSGrant Likely }
155d1c3414cSGrant Likely 
15690158138Slizhe static bool driver_deferred_probe_enable;
157d1c3414cSGrant Likely /**
158d1c3414cSGrant Likely  * driver_deferred_probe_trigger() - Kick off re-probing deferred devices
159d1c3414cSGrant Likely  *
160d1c3414cSGrant Likely  * This functions moves all devices from the pending list to the active
161d1c3414cSGrant Likely  * list and schedules the deferred probe workqueue to process them.  It
162d1c3414cSGrant Likely  * should be called anytime a driver is successfully bound to a device.
16358b116bcSGrant Likely  *
16458b116bcSGrant Likely  * Note, there is a race condition in multi-threaded probe. In the case where
16558b116bcSGrant Likely  * more than one device is probing at the same time, it is possible for one
16658b116bcSGrant Likely  * probe to complete successfully while another is about to defer. If the second
16758b116bcSGrant Likely  * depends on the first, then it will get put on the pending list after the
1689ba8af66SShailendra Verma  * trigger event has already occurred and will be stuck there.
16958b116bcSGrant Likely  *
17058b116bcSGrant Likely  * The atomic 'deferred_trigger_count' is used to determine if a successful
17158b116bcSGrant Likely  * trigger has occurred in the midst of probing a driver. If the trigger count
17258b116bcSGrant Likely  * changes in the midst of a probe, then deferred processing should be triggered
17358b116bcSGrant Likely  * again.
174d1c3414cSGrant Likely  */
driver_deferred_probe_trigger(void)1752f8c3ae8SSaravana Kannan void driver_deferred_probe_trigger(void)
176d1c3414cSGrant Likely {
177d1c3414cSGrant Likely 	if (!driver_deferred_probe_enable)
178d1c3414cSGrant Likely 		return;
179d1c3414cSGrant Likely 
1808b0372a2SGreg Kroah-Hartman 	/*
1818b0372a2SGreg Kroah-Hartman 	 * A successful probe means that all the devices in the pending list
182d1c3414cSGrant Likely 	 * should be triggered to be reprobed.  Move all the deferred devices
1838b0372a2SGreg Kroah-Hartman 	 * into the active list so they can be retried by the workqueue
1848b0372a2SGreg Kroah-Hartman 	 */
185d1c3414cSGrant Likely 	mutex_lock(&deferred_probe_mutex);
18658b116bcSGrant Likely 	atomic_inc(&deferred_trigger_count);
187d1c3414cSGrant Likely 	list_splice_tail_init(&deferred_probe_pending_list,
188d1c3414cSGrant Likely 			      &deferred_probe_active_list);
189d1c3414cSGrant Likely 	mutex_unlock(&deferred_probe_mutex);
190d1c3414cSGrant Likely 
1918b0372a2SGreg Kroah-Hartman 	/*
1928b0372a2SGreg Kroah-Hartman 	 * Kick the re-probe thread.  It may already be scheduled, but it is
1938b0372a2SGreg Kroah-Hartman 	 * safe to kick it again.
1948b0372a2SGreg Kroah-Hartman 	 */
195e611f8cdSYogesh Lal 	queue_work(system_unbound_wq, &deferred_probe_work);
196d1c3414cSGrant Likely }
197d1c3414cSGrant Likely 
198d1c3414cSGrant Likely /**
199dbf03d65SRandy Dunlap  * device_block_probing() - Block/defer device's probes
200013c074fSStrashko, Grygorii  *
201013c074fSStrashko, Grygorii  *	It will disable probing of devices and defer their probes instead.
202013c074fSStrashko, Grygorii  */
device_block_probing(void)203013c074fSStrashko, Grygorii void device_block_probing(void)
204013c074fSStrashko, Grygorii {
205013c074fSStrashko, Grygorii 	defer_all_probes = true;
206013c074fSStrashko, Grygorii 	/* sync with probes to avoid races. */
207013c074fSStrashko, Grygorii 	wait_for_device_probe();
208013c074fSStrashko, Grygorii }
209013c074fSStrashko, Grygorii 
210013c074fSStrashko, Grygorii /**
211013c074fSStrashko, Grygorii  * device_unblock_probing() - Unblock/enable device's probes
212013c074fSStrashko, Grygorii  *
213013c074fSStrashko, Grygorii  *	It will restore normal behavior and trigger re-probing of deferred
214013c074fSStrashko, Grygorii  * devices.
215013c074fSStrashko, Grygorii  */
device_unblock_probing(void)216013c074fSStrashko, Grygorii void device_unblock_probing(void)
217013c074fSStrashko, Grygorii {
218013c074fSStrashko, Grygorii 	defer_all_probes = false;
219013c074fSStrashko, Grygorii 	driver_deferred_probe_trigger();
220013c074fSStrashko, Grygorii }
221013c074fSStrashko, Grygorii 
222d090b70eSAndrzej Hajda /**
223d090b70eSAndrzej Hajda  * device_set_deferred_probe_reason() - Set defer probe reason message for device
224d090b70eSAndrzej Hajda  * @dev: the pointer to the struct device
225d090b70eSAndrzej Hajda  * @vaf: the pointer to va_format structure with message
226d090b70eSAndrzej Hajda  */
device_set_deferred_probe_reason(const struct device * dev,struct va_format * vaf)227d090b70eSAndrzej Hajda void device_set_deferred_probe_reason(const struct device *dev, struct va_format *vaf)
228d090b70eSAndrzej Hajda {
229d090b70eSAndrzej Hajda 	const char *drv = dev_driver_string(dev);
23072a91f19SAhmad Fatoum 	char *reason;
231d090b70eSAndrzej Hajda 
232d090b70eSAndrzej Hajda 	mutex_lock(&deferred_probe_mutex);
233d090b70eSAndrzej Hajda 
23472a91f19SAhmad Fatoum 	reason = kasprintf(GFP_KERNEL, "%s: %pV", drv, vaf);
23572a91f19SAhmad Fatoum 	__device_set_deferred_probe_reason(dev, reason);
236d090b70eSAndrzej Hajda 
237d090b70eSAndrzej Hajda 	mutex_unlock(&deferred_probe_mutex);
238d090b70eSAndrzej Hajda }
239d090b70eSAndrzej Hajda 
24028af109aSJavier Martinez Canillas /*
24128af109aSJavier Martinez Canillas  * deferred_devs_show() - Show the devices in the deferred probe pending list.
24228af109aSJavier Martinez Canillas  */
deferred_devs_show(struct seq_file * s,void * data)24328af109aSJavier Martinez Canillas static int deferred_devs_show(struct seq_file *s, void *data)
24428af109aSJavier Martinez Canillas {
24528af109aSJavier Martinez Canillas 	struct device_private *curr;
24628af109aSJavier Martinez Canillas 
24728af109aSJavier Martinez Canillas 	mutex_lock(&deferred_probe_mutex);
24828af109aSJavier Martinez Canillas 
24928af109aSJavier Martinez Canillas 	list_for_each_entry(curr, &deferred_probe_pending_list, deferred_probe)
250d090b70eSAndrzej Hajda 		seq_printf(s, "%s\t%s", dev_name(curr->device),
251d090b70eSAndrzej Hajda 			   curr->device->p->deferred_probe_reason ?: "\n");
25228af109aSJavier Martinez Canillas 
25328af109aSJavier Martinez Canillas 	mutex_unlock(&deferred_probe_mutex);
25428af109aSJavier Martinez Canillas 
25528af109aSJavier Martinez Canillas 	return 0;
25628af109aSJavier Martinez Canillas }
25728af109aSJavier Martinez Canillas DEFINE_SHOW_ATTRIBUTE(deferred_devs);
25828af109aSJavier Martinez Canillas 
259f516d01bSSaravana Kannan #ifdef CONFIG_MODULES
260504fa212SJavier Martinez Canillas static int driver_deferred_probe_timeout = 10;
261f516d01bSSaravana Kannan #else
262504fa212SJavier Martinez Canillas static int driver_deferred_probe_timeout;
263f516d01bSSaravana Kannan #endif
264f516d01bSSaravana Kannan 
deferred_probe_timeout_setup(char * str)26525b4e70dSRob Herring static int __init deferred_probe_timeout_setup(char *str)
26625b4e70dSRob Herring {
26763c98047SMuchun Song 	int timeout;
26863c98047SMuchun Song 
26963c98047SMuchun Song 	if (!kstrtoint(str, 10, &timeout))
27064c775fbSJohn Stultz 		driver_deferred_probe_timeout = timeout;
27125b4e70dSRob Herring 	return 1;
27225b4e70dSRob Herring }
27325b4e70dSRob Herring __setup("deferred_probe_timeout=", deferred_probe_timeout_setup);
27425b4e70dSRob Herring 
27513a8e0f6SSaravana Kannan /**
27613a8e0f6SSaravana Kannan  * driver_deferred_probe_check_state() - Check deferred probe state
27713a8e0f6SSaravana Kannan  * @dev: device to check
27813a8e0f6SSaravana Kannan  *
27913a8e0f6SSaravana Kannan  * Return:
28013a8e0f6SSaravana Kannan  * * -ENODEV if initcalls have completed and modules are disabled.
28113a8e0f6SSaravana Kannan  * * -ETIMEDOUT if the deferred probe timeout was set and has expired
28213a8e0f6SSaravana Kannan  *   and modules are enabled.
28313a8e0f6SSaravana Kannan  * * -EPROBE_DEFER in other cases.
28413a8e0f6SSaravana Kannan  *
28513a8e0f6SSaravana Kannan  * Drivers or subsystems can opt-in to calling this function instead of directly
28613a8e0f6SSaravana Kannan  * returning -EPROBE_DEFER.
28713a8e0f6SSaravana Kannan  */
driver_deferred_probe_check_state(struct device * dev)28813a8e0f6SSaravana Kannan int driver_deferred_probe_check_state(struct device *dev)
28913a8e0f6SSaravana Kannan {
29013a8e0f6SSaravana Kannan 	if (!IS_ENABLED(CONFIG_MODULES) && initcalls_done) {
29113a8e0f6SSaravana Kannan 		dev_warn(dev, "ignoring dependency for device, assuming no driver\n");
29213a8e0f6SSaravana Kannan 		return -ENODEV;
29313a8e0f6SSaravana Kannan 	}
29413a8e0f6SSaravana Kannan 
29513a8e0f6SSaravana Kannan 	if (!driver_deferred_probe_timeout && initcalls_done) {
29613a8e0f6SSaravana Kannan 		dev_warn(dev, "deferred probe timeout, ignoring dependency\n");
29713a8e0f6SSaravana Kannan 		return -ETIMEDOUT;
29813a8e0f6SSaravana Kannan 	}
29913a8e0f6SSaravana Kannan 
30013a8e0f6SSaravana Kannan 	return -EPROBE_DEFER;
30113a8e0f6SSaravana Kannan }
30213a8e0f6SSaravana Kannan EXPORT_SYMBOL_GPL(driver_deferred_probe_check_state);
30313a8e0f6SSaravana Kannan 
deferred_probe_timeout_work_func(struct work_struct * work)30425b4e70dSRob Herring static void deferred_probe_timeout_work_func(struct work_struct *work)
30525b4e70dSRob Herring {
306eed6e418SSaravana Kannan 	struct device_private *p;
30725b4e70dSRob Herring 
308d46f3e3eSSaravana Kannan 	fw_devlink_drivers_done();
309d46f3e3eSSaravana Kannan 
31013a8e0f6SSaravana Kannan 	driver_deferred_probe_timeout = 0;
31125b4e70dSRob Herring 	driver_deferred_probe_trigger();
31225b4e70dSRob Herring 	flush_work(&deferred_probe_work);
31325b4e70dSRob Herring 
314eed6e418SSaravana Kannan 	mutex_lock(&deferred_probe_mutex);
315eed6e418SSaravana Kannan 	list_for_each_entry(p, &deferred_probe_pending_list, deferred_probe)
316eed6e418SSaravana Kannan 		dev_info(p->device, "deferred probe pending\n");
317eed6e418SSaravana Kannan 	mutex_unlock(&deferred_probe_mutex);
318ffbe08a8SSaravana Kannan 
319ffbe08a8SSaravana Kannan 	fw_devlink_probing_done();
32025b4e70dSRob Herring }
32125b4e70dSRob Herring static DECLARE_DELAYED_WORK(deferred_probe_timeout_work, deferred_probe_timeout_work_func);
32225b4e70dSRob Herring 
deferred_probe_extend_timeout(void)3232b28a1a8SSaravana Kannan void deferred_probe_extend_timeout(void)
3242b28a1a8SSaravana Kannan {
3252b28a1a8SSaravana Kannan 	/*
3262b28a1a8SSaravana Kannan 	 * If the work hasn't been queued yet or if the work expired, don't
3272b28a1a8SSaravana Kannan 	 * start a new one.
3282b28a1a8SSaravana Kannan 	 */
3292b28a1a8SSaravana Kannan 	if (cancel_delayed_work(&deferred_probe_timeout_work)) {
3302b28a1a8SSaravana Kannan 		schedule_delayed_work(&deferred_probe_timeout_work,
3312b28a1a8SSaravana Kannan 				driver_deferred_probe_timeout * HZ);
3322b28a1a8SSaravana Kannan 		pr_debug("Extended deferred probe timeout by %d secs\n",
3332b28a1a8SSaravana Kannan 					driver_deferred_probe_timeout);
3342b28a1a8SSaravana Kannan 	}
3352b28a1a8SSaravana Kannan }
3362b28a1a8SSaravana Kannan 
337013c074fSStrashko, Grygorii /**
338d1c3414cSGrant Likely  * deferred_probe_initcall() - Enable probing of deferred devices
339d1c3414cSGrant Likely  *
340d1c3414cSGrant Likely  * We don't want to get in the way when the bulk of drivers are getting probed.
341d1c3414cSGrant Likely  * Instead, this initcall makes sure that deferred probing is delayed until
342d1c3414cSGrant Likely  * late_initcall time.
343d1c3414cSGrant Likely  */
deferred_probe_initcall(void)344d1c3414cSGrant Likely static int deferred_probe_initcall(void)
345d1c3414cSGrant Likely {
3462942df67SGreg Kroah-Hartman 	debugfs_create_file("devices_deferred", 0444, NULL, NULL,
3472942df67SGreg Kroah-Hartman 			    &deferred_devs_fops);
34828af109aSJavier Martinez Canillas 
349d1c3414cSGrant Likely 	driver_deferred_probe_enable = true;
350d1c3414cSGrant Likely 	driver_deferred_probe_trigger();
351d72cca1eSGrant Likely 	/* Sort as many dependencies as possible before exiting initcalls */
3522c507e46SBhaktipriya Shridhar 	flush_work(&deferred_probe_work);
35325b4e70dSRob Herring 	initcalls_done = true;
35425b4e70dSRob Herring 
355d46f3e3eSSaravana Kannan 	if (!IS_ENABLED(CONFIG_MODULES))
356d46f3e3eSSaravana Kannan 		fw_devlink_drivers_done();
357d46f3e3eSSaravana Kannan 
35825b4e70dSRob Herring 	/*
35925b4e70dSRob Herring 	 * Trigger deferred probe again, this time we won't defer anything
36025b4e70dSRob Herring 	 * that is optional
36125b4e70dSRob Herring 	 */
36225b4e70dSRob Herring 	driver_deferred_probe_trigger();
36325b4e70dSRob Herring 	flush_work(&deferred_probe_work);
36425b4e70dSRob Herring 
36564c775fbSJohn Stultz 	if (driver_deferred_probe_timeout > 0) {
36625b4e70dSRob Herring 		schedule_delayed_work(&deferred_probe_timeout_work,
36764c775fbSJohn Stultz 			driver_deferred_probe_timeout * HZ);
36825b4e70dSRob Herring 	}
369ffbe08a8SSaravana Kannan 
370ffbe08a8SSaravana Kannan 	if (!IS_ENABLED(CONFIG_MODULES))
371ffbe08a8SSaravana Kannan 		fw_devlink_probing_done();
372ffbe08a8SSaravana Kannan 
373d1c3414cSGrant Likely 	return 0;
374d1c3414cSGrant Likely }
375d1c3414cSGrant Likely late_initcall(deferred_probe_initcall);
37607e4a3e2Smochel@digitalimplant.org 
deferred_probe_exit(void)37728af109aSJavier Martinez Canillas static void __exit deferred_probe_exit(void)
37828af109aSJavier Martinez Canillas {
37936c893d3SGreg Kroah-Hartman 	debugfs_lookup_and_remove("devices_deferred", NULL);
38028af109aSJavier Martinez Canillas }
38128af109aSJavier Martinez Canillas __exitcall(deferred_probe_exit);
38228af109aSJavier Martinez Canillas 
3836b9cb427STomeu Vizoso /**
3846b9cb427STomeu Vizoso  * device_is_bound() - Check if device is bound to a driver
3856b9cb427STomeu Vizoso  * @dev: device to check
3866b9cb427STomeu Vizoso  *
3876b9cb427STomeu Vizoso  * Returns true if passed device has already finished probing successfully
3886b9cb427STomeu Vizoso  * against a driver.
3896b9cb427STomeu Vizoso  *
3906b9cb427STomeu Vizoso  * This function must be called with the device lock held.
3916b9cb427STomeu Vizoso  */
device_is_bound(struct device * dev)3926b9cb427STomeu Vizoso bool device_is_bound(struct device *dev)
3936b9cb427STomeu Vizoso {
3943ded9104SRafael J. Wysocki 	return dev->p && klist_node_attached(&dev->p->knode_driver);
3956b9cb427STomeu Vizoso }
3966b9cb427STomeu Vizoso 
driver_bound(struct device * dev)3971901fb26SKay Sievers static void driver_bound(struct device *dev)
3981901fb26SKay Sievers {
3996b9cb427STomeu Vizoso 	if (device_is_bound(dev)) {
400eb7fbc9fSChristophe JAILLET 		pr_warn("%s: device %s already bound\n",
4012b3a302aSHarvey Harrison 			__func__, kobject_name(&dev->kobj));
4021901fb26SKay Sievers 		return;
4031901fb26SKay Sievers 	}
4041901fb26SKay Sievers 
40594f8cc0eSFrank Rowand 	pr_debug("driver: '%s': %s: bound to device '%s'\n", dev->driver->name,
40694f8cc0eSFrank Rowand 		 __func__, dev_name(dev));
4071901fb26SKay Sievers 
408fbb88fadSStefani Seibold 	klist_add_tail(&dev->p->knode_driver, &dev->driver->p->klist_devices);
4099ed98953SRafael J. Wysocki 	device_links_driver_bound(dev);
410fbb88fadSStefani Seibold 
411aa8e54b5STomeu Vizoso 	device_pm_check_callbacks(dev);
412aa8e54b5STomeu Vizoso 
4138b0372a2SGreg Kroah-Hartman 	/*
4148b0372a2SGreg Kroah-Hartman 	 * Make sure the device is no longer in one of the deferred lists and
4158b0372a2SGreg Kroah-Hartman 	 * kick off retrying all pending devices
4168b0372a2SGreg Kroah-Hartman 	 */
417d1c3414cSGrant Likely 	driver_deferred_probe_del(dev);
418d1c3414cSGrant Likely 	driver_deferred_probe_trigger();
419d1c3414cSGrant Likely 
420ed9f9181SGreg Kroah-Hartman 	bus_notify(dev, BUS_NOTIFY_BOUND_DRIVER);
4211455cf8dSDmitry Torokhov 	kobject_uevent(&dev->kobj, KOBJ_BIND);
4221901fb26SKay Sievers }
4231901fb26SKay Sievers 
coredump_store(struct device * dev,struct device_attribute * attr,const char * buf,size_t count)4243c47d19fSArend van Spriel static ssize_t coredump_store(struct device *dev, struct device_attribute *attr,
4253c47d19fSArend van Spriel 			    const char *buf, size_t count)
4263c47d19fSArend van Spriel {
4273c47d19fSArend van Spriel 	device_lock(dev);
4283c47d19fSArend van Spriel 	dev->driver->coredump(dev);
4293c47d19fSArend van Spriel 	device_unlock(dev);
4303c47d19fSArend van Spriel 
4313c47d19fSArend van Spriel 	return count;
4323c47d19fSArend van Spriel }
4333c47d19fSArend van Spriel static DEVICE_ATTR_WO(coredump);
4343c47d19fSArend van Spriel 
driver_sysfs_add(struct device * dev)4351901fb26SKay Sievers static int driver_sysfs_add(struct device *dev)
4361901fb26SKay Sievers {
4371901fb26SKay Sievers 	int ret;
4381901fb26SKay Sievers 
439ed9f9181SGreg Kroah-Hartman 	bus_notify(dev, BUS_NOTIFY_BIND_DRIVER);
44045daef0fSMagnus Damm 
441e5dd1278SGreg Kroah-Hartman 	ret = sysfs_create_link(&dev->driver->p->kobj, &dev->kobj,
4421901fb26SKay Sievers 				kobject_name(&dev->kobj));
4433c47d19fSArend van Spriel 	if (ret)
4443c47d19fSArend van Spriel 		goto fail;
4453c47d19fSArend van Spriel 
446e5dd1278SGreg Kroah-Hartman 	ret = sysfs_create_link(&dev->kobj, &dev->driver->p->kobj,
4471901fb26SKay Sievers 				"driver");
4481901fb26SKay Sievers 	if (ret)
4493c47d19fSArend van Spriel 		goto rm_dev;
4503c47d19fSArend van Spriel 
451d225ef6fSJia-Ju Bai 	if (!IS_ENABLED(CONFIG_DEV_COREDUMP) || !dev->driver->coredump)
452d225ef6fSJia-Ju Bai 		return 0;
453d225ef6fSJia-Ju Bai 
454d225ef6fSJia-Ju Bai 	ret = device_create_file(dev, &dev_attr_coredump);
455d225ef6fSJia-Ju Bai 	if (!ret)
4563c47d19fSArend van Spriel 		return 0;
4573c47d19fSArend van Spriel 
4583c47d19fSArend van Spriel 	sysfs_remove_link(&dev->kobj, "driver");
4593c47d19fSArend van Spriel 
4603c47d19fSArend van Spriel rm_dev:
461e5dd1278SGreg Kroah-Hartman 	sysfs_remove_link(&dev->driver->p->kobj,
4621901fb26SKay Sievers 			  kobject_name(&dev->kobj));
4633c47d19fSArend van Spriel 
4643c47d19fSArend van Spriel fail:
4651901fb26SKay Sievers 	return ret;
4661901fb26SKay Sievers }
4671901fb26SKay Sievers 
driver_sysfs_remove(struct device * dev)4681901fb26SKay Sievers static void driver_sysfs_remove(struct device *dev)
4691901fb26SKay Sievers {
4701901fb26SKay Sievers 	struct device_driver *drv = dev->driver;
4711901fb26SKay Sievers 
4721901fb26SKay Sievers 	if (drv) {
4733c47d19fSArend van Spriel 		if (drv->coredump)
4743c47d19fSArend van Spriel 			device_remove_file(dev, &dev_attr_coredump);
475e5dd1278SGreg Kroah-Hartman 		sysfs_remove_link(&drv->p->kobj, kobject_name(&dev->kobj));
4761901fb26SKay Sievers 		sysfs_remove_link(&dev->kobj, "driver");
4771901fb26SKay Sievers 	}
4781901fb26SKay Sievers }
4791901fb26SKay Sievers 
48007e4a3e2Smochel@digitalimplant.org /**
48107e4a3e2Smochel@digitalimplant.org  * device_bind_driver - bind a driver to one device.
48207e4a3e2Smochel@digitalimplant.org  * @dev: device.
48307e4a3e2Smochel@digitalimplant.org  *
48407e4a3e2Smochel@digitalimplant.org  * Allow manual attachment of a driver to a device.
48507e4a3e2Smochel@digitalimplant.org  * Caller must have already set @dev->driver.
48607e4a3e2Smochel@digitalimplant.org  *
487fe940d73SLukas Wunner  * Note that this does not modify the bus reference count.
488fe940d73SLukas Wunner  * Please verify that is accounted for before calling this.
489fe940d73SLukas Wunner  * (It is ok to call with no other effort from a driver's probe() method.)
4900d3e5a2eSPatrick Mochel  *
4918e9394ceSGreg Kroah-Hartman  * This function must be called with the device lock held.
4920d9f837cSJason Gunthorpe  *
4930d9f837cSJason Gunthorpe  * Callers should prefer to use device_driver_attach() instead.
49407e4a3e2Smochel@digitalimplant.org  */
device_bind_driver(struct device * dev)495f86db396SAndrew Morton int device_bind_driver(struct device *dev)
49607e4a3e2Smochel@digitalimplant.org {
497cb986b74SCornelia Huck 	int ret;
498cb986b74SCornelia Huck 
499cb986b74SCornelia Huck 	ret = driver_sysfs_add(dev);
500b6f617dfSSaravana Kannan 	if (!ret) {
501b6f617dfSSaravana Kannan 		device_links_force_bind(dev);
5021901fb26SKay Sievers 		driver_bound(dev);
503b6f617dfSSaravana Kannan 	}
504ed9f9181SGreg Kroah-Hartman 	else
505ed9f9181SGreg Kroah-Hartman 		bus_notify(dev, BUS_NOTIFY_DRIVER_NOT_BOUND);
506cb986b74SCornelia Huck 	return ret;
50707e4a3e2Smochel@digitalimplant.org }
5084a3ad20cSGreg Kroah-Hartman EXPORT_SYMBOL_GPL(device_bind_driver);
50907e4a3e2Smochel@digitalimplant.org 
510d779249eSGreg Kroah-Hartman static atomic_t probe_count = ATOMIC_INIT(0);
511735a7ffbSAndrew Morton static DECLARE_WAIT_QUEUE_HEAD(probe_waitqueue);
512735a7ffbSAndrew Morton 
state_synced_store(struct device * dev,struct device_attribute * attr,const char * buf,size_t count)513f8fb5766SSaravana Kannan static ssize_t state_synced_store(struct device *dev,
514f8fb5766SSaravana Kannan 				  struct device_attribute *attr,
515f8fb5766SSaravana Kannan 				  const char *buf, size_t count)
516f8fb5766SSaravana Kannan {
517f8fb5766SSaravana Kannan 	int ret = 0;
518f8fb5766SSaravana Kannan 
519f8fb5766SSaravana Kannan 	if (strcmp("1", buf))
520f8fb5766SSaravana Kannan 		return -EINVAL;
521f8fb5766SSaravana Kannan 
522f8fb5766SSaravana Kannan 	device_lock(dev);
523f8fb5766SSaravana Kannan 	if (!dev->state_synced) {
524f8fb5766SSaravana Kannan 		dev->state_synced = true;
525f8fb5766SSaravana Kannan 		dev_sync_state(dev);
526f8fb5766SSaravana Kannan 	} else {
527f8fb5766SSaravana Kannan 		ret = -EINVAL;
528f8fb5766SSaravana Kannan 	}
529f8fb5766SSaravana Kannan 	device_unlock(dev);
530f8fb5766SSaravana Kannan 
531f8fb5766SSaravana Kannan 	return ret ? ret : count;
532f8fb5766SSaravana Kannan }
533f8fb5766SSaravana Kannan 
state_synced_show(struct device * dev,struct device_attribute * attr,char * buf)5348fd456ecSSaravana Kannan static ssize_t state_synced_show(struct device *dev,
5358fd456ecSSaravana Kannan 				 struct device_attribute *attr, char *buf)
5368fd456ecSSaravana Kannan {
5378fd456ecSSaravana Kannan 	bool val;
5388fd456ecSSaravana Kannan 
5398fd456ecSSaravana Kannan 	device_lock(dev);
5408fd456ecSSaravana Kannan 	val = dev->state_synced;
5418fd456ecSSaravana Kannan 	device_unlock(dev);
542948b3edbSJoe Perches 
543aa838896SJoe Perches 	return sysfs_emit(buf, "%u\n", val);
5448fd456ecSSaravana Kannan }
545f8fb5766SSaravana Kannan static DEVICE_ATTR_RW(state_synced);
5468fd456ecSSaravana Kannan 
device_unbind_cleanup(struct device * dev)5479ad30721SRob Herring static void device_unbind_cleanup(struct device *dev)
5489ad30721SRob Herring {
5499ad30721SRob Herring 	devres_release_all(dev);
5509ad30721SRob Herring 	arch_teardown_dma_ops(dev);
5519ad30721SRob Herring 	kfree(dev->dma_range_map);
5529ad30721SRob Herring 	dev->dma_range_map = NULL;
5539ad30721SRob Herring 	dev->driver = NULL;
5549ad30721SRob Herring 	dev_set_drvdata(dev, NULL);
5559ad30721SRob Herring 	if (dev->pm_domain && dev->pm_domain->dismiss)
5569ad30721SRob Herring 		dev->pm_domain->dismiss(dev);
5579ad30721SRob Herring 	pm_runtime_reinit(dev);
5589ad30721SRob Herring 	dev_pm_set_driver_flags(dev, 0);
5599ad30721SRob Herring }
560e1499647SChristoph Hellwig 
device_remove(struct device * dev)5614b775aafSRob Herring static void device_remove(struct device *dev)
5624b775aafSRob Herring {
5634b775aafSRob Herring 	device_remove_file(dev, &dev_attr_state_synced);
5644b775aafSRob Herring 	device_remove_groups(dev, dev->driver->dev_groups);
5654b775aafSRob Herring 
5664b775aafSRob Herring 	if (dev->bus && dev->bus->remove)
5674b775aafSRob Herring 		dev->bus->remove(dev);
5684b775aafSRob Herring 	else if (dev->driver->remove)
5694b775aafSRob Herring 		dev->driver->remove(dev);
5704b775aafSRob Herring }
5714b775aafSRob Herring 
call_driver_probe(struct device * dev,struct device_driver * drv)572e1499647SChristoph Hellwig static int call_driver_probe(struct device *dev, struct device_driver *drv)
573e1499647SChristoph Hellwig {
574e1499647SChristoph Hellwig 	int ret = 0;
575e1499647SChristoph Hellwig 
576e1499647SChristoph Hellwig 	if (dev->bus->probe)
577e1499647SChristoph Hellwig 		ret = dev->bus->probe(dev);
578e1499647SChristoph Hellwig 	else if (drv->probe)
579e1499647SChristoph Hellwig 		ret = drv->probe(dev);
580e1499647SChristoph Hellwig 
581e1499647SChristoph Hellwig 	switch (ret) {
582e1499647SChristoph Hellwig 	case 0:
583e1499647SChristoph Hellwig 		break;
584e1499647SChristoph Hellwig 	case -EPROBE_DEFER:
585e1499647SChristoph Hellwig 		/* Driver requested deferred probing */
586e1499647SChristoph Hellwig 		dev_dbg(dev, "Driver %s requests probe deferral\n", drv->name);
587e1499647SChristoph Hellwig 		break;
588e1499647SChristoph Hellwig 	case -ENODEV:
589e1499647SChristoph Hellwig 	case -ENXIO:
590e1499647SChristoph Hellwig 		pr_debug("%s: probe of %s rejects match %d\n",
591e1499647SChristoph Hellwig 			 drv->name, dev_name(dev), ret);
592e1499647SChristoph Hellwig 		break;
593e1499647SChristoph Hellwig 	default:
594e1499647SChristoph Hellwig 		/* driver matched but the probe failed */
595e1499647SChristoph Hellwig 		pr_warn("%s: probe of %s failed with error %d\n",
596e1499647SChristoph Hellwig 			drv->name, dev_name(dev), ret);
597e1499647SChristoph Hellwig 		break;
598e1499647SChristoph Hellwig 	}
599e1499647SChristoph Hellwig 
600e1499647SChristoph Hellwig 	return ret;
601e1499647SChristoph Hellwig }
602e1499647SChristoph Hellwig 
really_probe(struct device * dev,struct device_driver * drv)60321c7f30bSCornelia Huck static int really_probe(struct device *dev, struct device_driver *drv)
60407e4a3e2Smochel@digitalimplant.org {
605c5f06274SRob Herring 	bool test_remove = IS_ENABLED(CONFIG_DEBUG_TEST_DRIVER_REMOVE) &&
606c5f06274SRob Herring 			   !drv->suppress_bind_attrs;
6072f8c3ae8SSaravana Kannan 	int ret, link_ret;
60807e4a3e2Smochel@digitalimplant.org 
609013c074fSStrashko, Grygorii 	if (defer_all_probes) {
610013c074fSStrashko, Grygorii 		/*
611013c074fSStrashko, Grygorii 		 * Value of defer_all_probes can be set only by
612dbf03d65SRandy Dunlap 		 * device_block_probing() which, in turn, will call
613013c074fSStrashko, Grygorii 		 * wait_for_device_probe() right after that to avoid any races.
614013c074fSStrashko, Grygorii 		 */
615013c074fSStrashko, Grygorii 		dev_dbg(dev, "Driver %s force probe deferral\n", drv->name);
61645ddcb42SChristoph Hellwig 		return -EPROBE_DEFER;
617013c074fSStrashko, Grygorii 	}
618013c074fSStrashko, Grygorii 
6192f8c3ae8SSaravana Kannan 	link_ret = device_links_check_suppliers(dev);
6202f8c3ae8SSaravana Kannan 	if (link_ret == -EPROBE_DEFER)
6212f8c3ae8SSaravana Kannan 		return link_ret;
6229ed98953SRafael J. Wysocki 
6237dc72b28SGreg Kroah-Hartman 	pr_debug("bus: '%s': %s: probing driver %s with device %s\n",
6241e0b2cf9SKay Sievers 		 drv->bus->name, __func__, drv->name, dev_name(dev));
6257c35e699SGeert Uytterhoeven 	if (!list_empty(&dev->devres_head)) {
6267c35e699SGeert Uytterhoeven 		dev_crit(dev, "Resources present before probing\n");
627b292b50bSTetsuo Handa 		ret = -EBUSY;
628b292b50bSTetsuo Handa 		goto done;
6297c35e699SGeert Uytterhoeven 	}
63007e4a3e2Smochel@digitalimplant.org 
631bea5b158SRob Herring re_probe:
63207e4a3e2Smochel@digitalimplant.org 	dev->driver = drv;
633ab78029eSLinus Walleij 
634ab78029eSLinus Walleij 	/* If using pinctrl, bind pins now before probing */
635ab78029eSLinus Walleij 	ret = pinctrl_bind_pins(dev);
636ab78029eSLinus Walleij 	if (ret)
63714b6257aSAndy Shevchenko 		goto pinctrl_bind_failed;
638ab78029eSLinus Walleij 
639ccf640f4SChristoph Hellwig 	if (dev->bus->dma_configure) {
640ccf640f4SChristoph Hellwig 		ret = dev->bus->dma_configure(dev);
64109515ef5SSricharan R 		if (ret)
64200eb74eaSLu Baolu 			goto pinctrl_bind_failed;
643ccf640f4SChristoph Hellwig 	}
64409515ef5SSricharan R 
645f04948deSZhen Lei 	ret = driver_sysfs_add(dev);
646f04948deSZhen Lei 	if (ret) {
647eb7fbc9fSChristophe JAILLET 		pr_err("%s: driver_sysfs_add(%s) failed\n",
6481e0b2cf9SKay Sievers 		       __func__, dev_name(dev));
649885e5025SLu Baolu 		goto sysfs_failed;
6501901fb26SKay Sievers 	}
6511901fb26SKay Sievers 
652e90d5532SRafael J. Wysocki 	if (dev->pm_domain && dev->pm_domain->activate) {
653e90d5532SRafael J. Wysocki 		ret = dev->pm_domain->activate(dev);
654e90d5532SRafael J. Wysocki 		if (ret)
655e90d5532SRafael J. Wysocki 			goto probe_failed;
656e90d5532SRafael J. Wysocki 	}
657e90d5532SRafael J. Wysocki 
65845ddcb42SChristoph Hellwig 	ret = call_driver_probe(dev, drv);
65945ddcb42SChristoph Hellwig 	if (ret) {
660e1499647SChristoph Hellwig 		/*
6612f8c3ae8SSaravana Kannan 		 * If fw_devlink_best_effort is active (denoted by -EAGAIN), the
6622f8c3ae8SSaravana Kannan 		 * device might actually probe properly once some of its missing
6632f8c3ae8SSaravana Kannan 		 * suppliers have probed. So, treat this as if the driver
6642f8c3ae8SSaravana Kannan 		 * returned -EPROBE_DEFER.
6652f8c3ae8SSaravana Kannan 		 */
6662f8c3ae8SSaravana Kannan 		if (link_ret == -EAGAIN)
6672f8c3ae8SSaravana Kannan 			ret = -EPROBE_DEFER;
6682f8c3ae8SSaravana Kannan 
6692f8c3ae8SSaravana Kannan 		/*
670ef6dcbddSChristoph Hellwig 		 * Return probe errors as positive values so that the callers
671ef6dcbddSChristoph Hellwig 		 * can distinguish them from other errors.
672e1499647SChristoph Hellwig 		 */
67345ddcb42SChristoph Hellwig 		ret = -ret;
674d779249eSGreg Kroah-Hartman 		goto probe_failed;
67507e4a3e2Smochel@digitalimplant.org 	}
6761901fb26SKay Sievers 
677f04948deSZhen Lei 	ret = device_add_groups(dev, drv->dev_groups);
678f04948deSZhen Lei 	if (ret) {
67923b69044SDmitry Torokhov 		dev_err(dev, "device_add_groups() failed\n");
68023b69044SDmitry Torokhov 		goto dev_groups_failed;
68123b69044SDmitry Torokhov 	}
68223b69044SDmitry Torokhov 
683f04948deSZhen Lei 	if (dev_has_sync_state(dev)) {
684f04948deSZhen Lei 		ret = device_create_file(dev, &dev_attr_state_synced);
685f04948deSZhen Lei 		if (ret) {
6868fd456ecSSaravana Kannan 			dev_err(dev, "state_synced sysfs add failed\n");
6878fd456ecSSaravana Kannan 			goto dev_sysfs_state_synced_failed;
6888fd456ecSSaravana Kannan 		}
689f04948deSZhen Lei 	}
6908fd456ecSSaravana Kannan 
691bea5b158SRob Herring 	if (test_remove) {
692bea5b158SRob Herring 		test_remove = false;
693bea5b158SRob Herring 
6944b775aafSRob Herring 		device_remove(dev);
695bea5b158SRob Herring 		driver_sysfs_remove(dev);
696f429378aSJason Gunthorpe 		if (dev->bus && dev->bus->dma_cleanup)
697f429378aSJason Gunthorpe 			dev->bus->dma_cleanup(dev);
6989ad30721SRob Herring 		device_unbind_cleanup(dev);
699bea5b158SRob Herring 
700bea5b158SRob Herring 		goto re_probe;
701bea5b158SRob Herring 	}
702bea5b158SRob Herring 
703ef0eebc0SDouglas Anderson 	pinctrl_init_done(dev);
704ef0eebc0SDouglas Anderson 
705e90d5532SRafael J. Wysocki 	if (dev->pm_domain && dev->pm_domain->sync)
706e90d5532SRafael J. Wysocki 		dev->pm_domain->sync(dev);
707e90d5532SRafael J. Wysocki 
7081901fb26SKay Sievers 	driver_bound(dev);
7097dc72b28SGreg Kroah-Hartman 	pr_debug("bus: '%s': %s: bound device %s to driver %s\n",
7101e0b2cf9SKay Sievers 		 drv->bus->name, __func__, dev_name(dev), drv->name);
711d779249eSGreg Kroah-Hartman 	goto done;
7120d3e5a2eSPatrick Mochel 
7138fd456ecSSaravana Kannan dev_sysfs_state_synced_failed:
71423b69044SDmitry Torokhov dev_groups_failed:
7154b775aafSRob Herring 	device_remove(dev);
716d779249eSGreg Kroah-Hartman probe_failed:
717885e5025SLu Baolu 	driver_sysfs_remove(dev);
718885e5025SLu Baolu sysfs_failed:
719ed9f9181SGreg Kroah-Hartman 	bus_notify(dev, BUS_NOTIFY_DRIVER_NOT_BOUND);
72025f3bcfcSLu Baolu 	if (dev->bus && dev->bus->dma_cleanup)
72125f3bcfcSLu Baolu 		dev->bus->dma_cleanup(dev);
72214b6257aSAndy Shevchenko pinctrl_bind_failed:
7239ed98953SRafael J. Wysocki 	device_links_no_driver(dev);
7249ad30721SRob Herring 	device_unbind_cleanup(dev);
725d779249eSGreg Kroah-Hartman done:
726d779249eSGreg Kroah-Hartman 	return ret;
727d779249eSGreg Kroah-Hartman }
728d779249eSGreg Kroah-Hartman 
7290a50f61cSTodd Poynor /*
7300a50f61cSTodd Poynor  * For initcall_debug, show the driver probe time.
7310a50f61cSTodd Poynor  */
really_probe_debug(struct device * dev,struct device_driver * drv)7320a50f61cSTodd Poynor static int really_probe_debug(struct device *dev, struct device_driver *drv)
7330a50f61cSTodd Poynor {
734e3aa745fSZenghui Yu 	ktime_t calltime, rettime;
7350a50f61cSTodd Poynor 	int ret;
7360a50f61cSTodd Poynor 
7370a50f61cSTodd Poynor 	calltime = ktime_get();
7380a50f61cSTodd Poynor 	ret = really_probe(dev, drv);
7390a50f61cSTodd Poynor 	rettime = ktime_get();
740e2f06aa8SStephen Boyd 	/*
741e2f06aa8SStephen Boyd 	 * Don't change this to pr_debug() because that requires
742e2f06aa8SStephen Boyd 	 * CONFIG_DYNAMIC_DEBUG and we want a simple 'initcall_debug' on the
743e2f06aa8SStephen Boyd 	 * kernel commandline to print this all the time at the debug level.
744e2f06aa8SStephen Boyd 	 */
745e2f06aa8SStephen Boyd 	printk(KERN_DEBUG "probe of %s returned %d after %lld usecs\n",
746e3aa745fSZenghui Yu 		 dev_name(dev), ret, ktime_us_delta(rettime, calltime));
7470a50f61cSTodd Poynor 	return ret;
7480a50f61cSTodd Poynor }
7490a50f61cSTodd Poynor 
750d779249eSGreg Kroah-Hartman /**
751d779249eSGreg Kroah-Hartman  * driver_probe_done
752d779249eSGreg Kroah-Hartman  * Determine if the probe sequence is finished or not.
753d779249eSGreg Kroah-Hartman  *
754d779249eSGreg Kroah-Hartman  * Should somehow figure out how to use a semaphore, not an atomic variable...
755d779249eSGreg Kroah-Hartman  */
driver_probe_done(void)756aa5f6ed8SChristoph Hellwig bool __init driver_probe_done(void)
757d779249eSGreg Kroah-Hartman {
758927f8287SAndy Shevchenko 	int local_probe_count = atomic_read(&probe_count);
759927f8287SAndy Shevchenko 
760927f8287SAndy Shevchenko 	pr_debug("%s: probe_count = %d\n", __func__, local_probe_count);
761aa5f6ed8SChristoph Hellwig 	return !local_probe_count;
762d779249eSGreg Kroah-Hartman }
763d779249eSGreg Kroah-Hartman 
764d779249eSGreg Kroah-Hartman /**
765216773a7SArjan van de Ven  * wait_for_device_probe
766216773a7SArjan van de Ven  * Wait for device probing to be completed.
767216773a7SArjan van de Ven  */
wait_for_device_probe(void)768b23530ebSMing Lei void wait_for_device_probe(void)
769216773a7SArjan van de Ven {
770013c074fSStrashko, Grygorii 	/* wait for the deferred probe workqueue to finish */
7712c507e46SBhaktipriya Shridhar 	flush_work(&deferred_probe_work);
772013c074fSStrashko, Grygorii 
773216773a7SArjan van de Ven 	/* wait for the known devices to complete their probing */
774b23530ebSMing Lei 	wait_event(probe_waitqueue, atomic_read(&probe_count) == 0);
775216773a7SArjan van de Ven 	async_synchronize_full();
776216773a7SArjan van de Ven }
777d4d5291cSArjan van de Ven EXPORT_SYMBOL_GPL(wait_for_device_probe);
778216773a7SArjan van de Ven 
__driver_probe_device(struct device_driver * drv,struct device * dev)77945ddcb42SChristoph Hellwig static int __driver_probe_device(struct device_driver *drv, struct device *dev)
780d779249eSGreg Kroah-Hartman {
781d779249eSGreg Kroah-Hartman 	int ret = 0;
782d779249eSGreg Kroah-Hartman 
783204db60cSJason Gunthorpe 	if (dev->p->dead || !device_is_registered(dev))
784f2eaae19SAlan Stern 		return -ENODEV;
785204db60cSJason Gunthorpe 	if (dev->driver)
786204db60cSJason Gunthorpe 		return -EBUSY;
787d779249eSGreg Kroah-Hartman 
788f2db85b6SSaravana Kannan 	dev->can_match = true;
7897dc72b28SGreg Kroah-Hartman 	pr_debug("bus: '%s': %s: matched device %s with driver %s\n",
7901e0b2cf9SKay Sievers 		 drv->bus->name, __func__, dev_name(dev), drv->name);
791d779249eSGreg Kroah-Hartman 
792b06c0b2fSRafael J. Wysocki 	pm_runtime_get_suppliers(dev);
793ddef08ddSRafael J. Wysocki 	if (dev->parent)
794ddef08ddSRafael J. Wysocki 		pm_runtime_get_sync(dev->parent);
795ddef08ddSRafael J. Wysocki 
7965e928f77SRafael J. Wysocki 	pm_runtime_barrier(dev);
7970a50f61cSTodd Poynor 	if (initcall_debug)
7980a50f61cSTodd Poynor 		ret = really_probe_debug(dev, drv);
7990a50f61cSTodd Poynor 	else
80021c7f30bSCornelia Huck 		ret = really_probe(dev, drv);
801fa180eb4SUlf Hansson 	pm_request_idle(dev);
802d779249eSGreg Kroah-Hartman 
803ddef08ddSRafael J. Wysocki 	if (dev->parent)
804ddef08ddSRafael J. Wysocki 		pm_runtime_put(dev->parent);
805ddef08ddSRafael J. Wysocki 
806b06c0b2fSRafael J. Wysocki 	pm_runtime_put_suppliers(dev);
8070d3e5a2eSPatrick Mochel 	return ret;
80807e4a3e2Smochel@digitalimplant.org }
80907e4a3e2Smochel@digitalimplant.org 
81045ddcb42SChristoph Hellwig /**
81145ddcb42SChristoph Hellwig  * driver_probe_device - attempt to bind device & driver together
81245ddcb42SChristoph Hellwig  * @drv: driver to bind a device to
81345ddcb42SChristoph Hellwig  * @dev: device to try to bind to the driver
81445ddcb42SChristoph Hellwig  *
81545ddcb42SChristoph Hellwig  * This function returns -ENODEV if the device is not registered, -EBUSY if it
81645ddcb42SChristoph Hellwig  * already has a driver, 0 if the device is bound successfully and a positive
81745ddcb42SChristoph Hellwig  * (inverted) error code for failures from the ->probe method.
81845ddcb42SChristoph Hellwig  *
81945ddcb42SChristoph Hellwig  * This function must be called with @dev lock held.  When called for a
82045ddcb42SChristoph Hellwig  * USB interface, @dev->parent lock must be held as well.
82145ddcb42SChristoph Hellwig  *
82245ddcb42SChristoph Hellwig  * If the device has a parent, runtime-resume the parent before driver probing.
82345ddcb42SChristoph Hellwig  */
driver_probe_device(struct device_driver * drv,struct device * dev)82445ddcb42SChristoph Hellwig static int driver_probe_device(struct device_driver *drv, struct device *dev)
82545ddcb42SChristoph Hellwig {
82645ddcb42SChristoph Hellwig 	int trigger_count = atomic_read(&deferred_trigger_count);
82745ddcb42SChristoph Hellwig 	int ret;
82845ddcb42SChristoph Hellwig 
82945ddcb42SChristoph Hellwig 	atomic_inc(&probe_count);
83045ddcb42SChristoph Hellwig 	ret = __driver_probe_device(drv, dev);
83145ddcb42SChristoph Hellwig 	if (ret == -EPROBE_DEFER || ret == EPROBE_DEFER) {
83245ddcb42SChristoph Hellwig 		driver_deferred_probe_add(dev);
83345ddcb42SChristoph Hellwig 
83445ddcb42SChristoph Hellwig 		/*
83545ddcb42SChristoph Hellwig 		 * Did a trigger occur while probing? Need to re-trigger if yes
83645ddcb42SChristoph Hellwig 		 */
83745ddcb42SChristoph Hellwig 		if (trigger_count != atomic_read(&deferred_trigger_count) &&
83845ddcb42SChristoph Hellwig 		    !defer_all_probes)
83945ddcb42SChristoph Hellwig 			driver_deferred_probe_trigger();
84045ddcb42SChristoph Hellwig 	}
84145ddcb42SChristoph Hellwig 	atomic_dec(&probe_count);
84245ddcb42SChristoph Hellwig 	wake_up_all(&probe_waitqueue);
84345ddcb42SChristoph Hellwig 	return ret;
84445ddcb42SChristoph Hellwig }
84545ddcb42SChristoph Hellwig 
cmdline_requested_async_probing(const char * drv_name)8461ea61b68SFeng Tang static inline bool cmdline_requested_async_probing(const char *drv_name)
8471ea61b68SFeng Tang {
848f79f662eSSaravana Kannan 	bool async_drv;
849f79f662eSSaravana Kannan 
850f79f662eSSaravana Kannan 	async_drv = parse_option_str(async_probe_drv_names, drv_name);
851f79f662eSSaravana Kannan 
852f79f662eSSaravana Kannan 	return (async_probe_default != async_drv);
8531ea61b68SFeng Tang }
8541ea61b68SFeng Tang 
8551ea61b68SFeng Tang /* The option format is "driver_async_probe=drv_name1,drv_name2,..." */
save_async_options(char * buf)8561ea61b68SFeng Tang static int __init save_async_options(char *buf)
8571ea61b68SFeng Tang {
8581ea61b68SFeng Tang 	if (strlen(buf) >= ASYNC_DRV_NAMES_MAX_LEN)
859eb7fbc9fSChristophe JAILLET 		pr_warn("Too long list of driver names for 'driver_async_probe'!\n");
8601ea61b68SFeng Tang 
86107b7b883SWolfram Sang 	strscpy(async_probe_drv_names, buf, ASYNC_DRV_NAMES_MAX_LEN);
862f79f662eSSaravana Kannan 	async_probe_default = parse_option_str(async_probe_drv_names, "*");
863f79f662eSSaravana Kannan 
864f2aad547SRandy Dunlap 	return 1;
8651ea61b68SFeng Tang }
8661ea61b68SFeng Tang __setup("driver_async_probe=", save_async_options);
8671ea61b68SFeng Tang 
driver_allows_async_probing(struct device_driver * drv)868189a87f8SChristoph Hellwig static bool driver_allows_async_probing(struct device_driver *drv)
8692287c322Smochel@digitalimplant.org {
870d173a137SLuis R. Rodriguez 	switch (drv->probe_type) {
871d173a137SLuis R. Rodriguez 	case PROBE_PREFER_ASYNCHRONOUS:
872f2411da7SLuis R. Rodriguez 		return true;
873f2411da7SLuis R. Rodriguez 
874d173a137SLuis R. Rodriguez 	case PROBE_FORCE_SYNCHRONOUS:
875d173a137SLuis R. Rodriguez 		return false;
876d173a137SLuis R. Rodriguez 
877d173a137SLuis R. Rodriguez 	default:
8781ea61b68SFeng Tang 		if (cmdline_requested_async_probing(drv->name))
8791ea61b68SFeng Tang 			return true;
8801ea61b68SFeng Tang 
88180c6e146SDmitry Torokhov 		if (module_requested_async_probing(drv->owner))
882f2411da7SLuis R. Rodriguez 			return true;
883f2411da7SLuis R. Rodriguez 
884f2411da7SLuis R. Rodriguez 		return false;
885765230b5SDmitry Torokhov 	}
886d173a137SLuis R. Rodriguez }
887765230b5SDmitry Torokhov 
888765230b5SDmitry Torokhov struct device_attach_data {
889765230b5SDmitry Torokhov 	struct device *dev;
890765230b5SDmitry Torokhov 
891765230b5SDmitry Torokhov 	/*
892b4ae8c2fSTom Rix 	 * Indicates whether we are considering asynchronous probing or
893765230b5SDmitry Torokhov 	 * not. Only initial binding after device or driver registration
894765230b5SDmitry Torokhov 	 * (including deferral processing) may be done asynchronously, the
895765230b5SDmitry Torokhov 	 * rest is always synchronous, as we expect it is being done by
896765230b5SDmitry Torokhov 	 * request from userspace.
897765230b5SDmitry Torokhov 	 */
898765230b5SDmitry Torokhov 	bool check_async;
899765230b5SDmitry Torokhov 
900765230b5SDmitry Torokhov 	/*
901765230b5SDmitry Torokhov 	 * Indicates if we are binding synchronous or asynchronous drivers.
902765230b5SDmitry Torokhov 	 * When asynchronous probing is enabled we'll execute 2 passes
903765230b5SDmitry Torokhov 	 * over drivers: first pass doing synchronous probing and second
904765230b5SDmitry Torokhov 	 * doing asynchronous probing (if synchronous did not succeed -
905765230b5SDmitry Torokhov 	 * most likely because there was no driver requiring synchronous
906765230b5SDmitry Torokhov 	 * probing - and we found asynchronous driver during first pass).
907765230b5SDmitry Torokhov 	 * The 2 passes are done because we can't shoot asynchronous
908765230b5SDmitry Torokhov 	 * probe for given device and driver from bus_for_each_drv() since
909765230b5SDmitry Torokhov 	 * driver pointer is not guaranteed to stay valid once
910765230b5SDmitry Torokhov 	 * bus_for_each_drv() iterates to the next driver on the bus.
911765230b5SDmitry Torokhov 	 */
912765230b5SDmitry Torokhov 	bool want_async;
913765230b5SDmitry Torokhov 
914765230b5SDmitry Torokhov 	/*
915765230b5SDmitry Torokhov 	 * We'll set have_async to 'true' if, while scanning for matching
916765230b5SDmitry Torokhov 	 * driver, we'll encounter one that requests asynchronous probing.
917765230b5SDmitry Torokhov 	 */
918765230b5SDmitry Torokhov 	bool have_async;
919765230b5SDmitry Torokhov };
920765230b5SDmitry Torokhov 
__device_attach_driver(struct device_driver * drv,void * _data)921765230b5SDmitry Torokhov static int __device_attach_driver(struct device_driver *drv, void *_data)
922765230b5SDmitry Torokhov {
923765230b5SDmitry Torokhov 	struct device_attach_data *data = _data;
924765230b5SDmitry Torokhov 	struct device *dev = data->dev;
925765230b5SDmitry Torokhov 	bool async_allowed;
926656b8035STomeu Vizoso 	int ret;
927765230b5SDmitry Torokhov 
928656b8035STomeu Vizoso 	ret = driver_match_device(drv, dev);
929656b8035STomeu Vizoso 	if (ret == 0) {
930656b8035STomeu Vizoso 		/* no match */
93149b420a1SMing Lei 		return 0;
932656b8035STomeu Vizoso 	} else if (ret == -EPROBE_DEFER) {
933656b8035STomeu Vizoso 		dev_dbg(dev, "Device match requests probe deferral\n");
934f2db85b6SSaravana Kannan 		dev->can_match = true;
935656b8035STomeu Vizoso 		driver_deferred_probe_add(dev);
93625e9fbf0SIsaac J. Manjarres 		/*
93725e9fbf0SIsaac J. Manjarres 		 * Device can't match with a driver right now, so don't attempt
93825e9fbf0SIsaac J. Manjarres 		 * to match or bind with other drivers on the bus.
93925e9fbf0SIsaac J. Manjarres 		 */
94025e9fbf0SIsaac J. Manjarres 		return ret;
941656b8035STomeu Vizoso 	} else if (ret < 0) {
942eb7fbc9fSChristophe JAILLET 		dev_dbg(dev, "Bus failed to match device: %d\n", ret);
943656b8035STomeu Vizoso 		return ret;
944656b8035STomeu Vizoso 	} /* ret > 0 means positive match */
94549b420a1SMing Lei 
946765230b5SDmitry Torokhov 	async_allowed = driver_allows_async_probing(drv);
947765230b5SDmitry Torokhov 
948765230b5SDmitry Torokhov 	if (async_allowed)
949765230b5SDmitry Torokhov 		data->have_async = true;
950765230b5SDmitry Torokhov 
951765230b5SDmitry Torokhov 	if (data->check_async && async_allowed != data->want_async)
952765230b5SDmitry Torokhov 		return 0;
953765230b5SDmitry Torokhov 
954ef6dcbddSChristoph Hellwig 	/*
955ef6dcbddSChristoph Hellwig 	 * Ignore errors returned by ->probe so that the next driver can try
956ef6dcbddSChristoph Hellwig 	 * its luck.
957ef6dcbddSChristoph Hellwig 	 */
958ef6dcbddSChristoph Hellwig 	ret = driver_probe_device(drv, dev);
959ef6dcbddSChristoph Hellwig 	if (ret < 0)
960ef6dcbddSChristoph Hellwig 		return ret;
961ef6dcbddSChristoph Hellwig 	return ret == 0;
9622287c322Smochel@digitalimplant.org }
9632287c322Smochel@digitalimplant.org 
__device_attach_async_helper(void * _dev,async_cookie_t cookie)964765230b5SDmitry Torokhov static void __device_attach_async_helper(void *_dev, async_cookie_t cookie)
965765230b5SDmitry Torokhov {
966765230b5SDmitry Torokhov 	struct device *dev = _dev;
967765230b5SDmitry Torokhov 	struct device_attach_data data = {
968765230b5SDmitry Torokhov 		.dev		= dev,
969765230b5SDmitry Torokhov 		.check_async	= true,
970765230b5SDmitry Torokhov 		.want_async	= true,
971765230b5SDmitry Torokhov 	};
972765230b5SDmitry Torokhov 
973765230b5SDmitry Torokhov 	device_lock(dev);
974765230b5SDmitry Torokhov 
9753451a495SAlexander Duyck 	/*
9763451a495SAlexander Duyck 	 * Check if device has already been removed or claimed. This may
9773451a495SAlexander Duyck 	 * happen with driver loading, device discovery/registration,
9783451a495SAlexander Duyck 	 * and deferred probe processing happens all at once with
9793451a495SAlexander Duyck 	 * multiple threads.
9803451a495SAlexander Duyck 	 */
9813451a495SAlexander Duyck 	if (dev->p->dead || dev->driver)
9823451a495SAlexander Duyck 		goto out_unlock;
9833451a495SAlexander Duyck 
984ddef08ddSRafael J. Wysocki 	if (dev->parent)
985ddef08ddSRafael J. Wysocki 		pm_runtime_get_sync(dev->parent);
986ddef08ddSRafael J. Wysocki 
987765230b5SDmitry Torokhov 	bus_for_each_drv(dev->bus, NULL, &data, __device_attach_driver);
988765230b5SDmitry Torokhov 	dev_dbg(dev, "async probe completed\n");
989765230b5SDmitry Torokhov 
990765230b5SDmitry Torokhov 	pm_request_idle(dev);
991765230b5SDmitry Torokhov 
992ddef08ddSRafael J. Wysocki 	if (dev->parent)
993ddef08ddSRafael J. Wysocki 		pm_runtime_put(dev->parent);
9943451a495SAlexander Duyck out_unlock:
995765230b5SDmitry Torokhov 	device_unlock(dev);
996765230b5SDmitry Torokhov 
997765230b5SDmitry Torokhov 	put_device(dev);
998765230b5SDmitry Torokhov }
999765230b5SDmitry Torokhov 
__device_attach(struct device * dev,bool allow_async)1000802a87fdSDmitry Torokhov static int __device_attach(struct device *dev, bool allow_async)
1001765230b5SDmitry Torokhov {
1002765230b5SDmitry Torokhov 	int ret = 0;
1003b232b02bSZhang Wensheng 	bool async = false;
1004765230b5SDmitry Torokhov 
1005765230b5SDmitry Torokhov 	device_lock(dev);
100665488832SLukas Wunner 	if (dev->p->dead) {
100765488832SLukas Wunner 		goto out_unlock;
100865488832SLukas Wunner 	} else if (dev->driver) {
10096b9cb427STomeu Vizoso 		if (device_is_bound(dev)) {
1010765230b5SDmitry Torokhov 			ret = 1;
1011765230b5SDmitry Torokhov 			goto out_unlock;
1012765230b5SDmitry Torokhov 		}
1013765230b5SDmitry Torokhov 		ret = device_bind_driver(dev);
1014765230b5SDmitry Torokhov 		if (ret == 0)
1015765230b5SDmitry Torokhov 			ret = 1;
1016765230b5SDmitry Torokhov 		else {
1017765230b5SDmitry Torokhov 			dev->driver = NULL;
1018765230b5SDmitry Torokhov 			ret = 0;
1019765230b5SDmitry Torokhov 		}
1020765230b5SDmitry Torokhov 	} else {
1021765230b5SDmitry Torokhov 		struct device_attach_data data = {
1022765230b5SDmitry Torokhov 			.dev = dev,
1023765230b5SDmitry Torokhov 			.check_async = allow_async,
1024765230b5SDmitry Torokhov 			.want_async = false,
1025765230b5SDmitry Torokhov 		};
1026765230b5SDmitry Torokhov 
1027ddef08ddSRafael J. Wysocki 		if (dev->parent)
1028ddef08ddSRafael J. Wysocki 			pm_runtime_get_sync(dev->parent);
1029ddef08ddSRafael J. Wysocki 
1030765230b5SDmitry Torokhov 		ret = bus_for_each_drv(dev->bus, NULL, &data,
1031765230b5SDmitry Torokhov 					__device_attach_driver);
1032765230b5SDmitry Torokhov 		if (!ret && allow_async && data.have_async) {
1033765230b5SDmitry Torokhov 			/*
1034765230b5SDmitry Torokhov 			 * If we could not find appropriate driver
1035765230b5SDmitry Torokhov 			 * synchronously and we are allowed to do
1036765230b5SDmitry Torokhov 			 * async probes and there are drivers that
1037765230b5SDmitry Torokhov 			 * want to probe asynchronously, we'll
1038765230b5SDmitry Torokhov 			 * try them.
1039765230b5SDmitry Torokhov 			 */
1040765230b5SDmitry Torokhov 			dev_dbg(dev, "scheduling asynchronous probe\n");
1041765230b5SDmitry Torokhov 			get_device(dev);
1042b232b02bSZhang Wensheng 			async = true;
1043765230b5SDmitry Torokhov 		} else {
1044765230b5SDmitry Torokhov 			pm_request_idle(dev);
1045765230b5SDmitry Torokhov 		}
1046ddef08ddSRafael J. Wysocki 
1047ddef08ddSRafael J. Wysocki 		if (dev->parent)
1048ddef08ddSRafael J. Wysocki 			pm_runtime_put(dev->parent);
1049765230b5SDmitry Torokhov 	}
1050765230b5SDmitry Torokhov out_unlock:
1051765230b5SDmitry Torokhov 	device_unlock(dev);
1052b232b02bSZhang Wensheng 	if (async)
1053b232b02bSZhang Wensheng 		async_schedule_dev(__device_attach_async_helper, dev);
1054765230b5SDmitry Torokhov 	return ret;
1055765230b5SDmitry Torokhov }
1056765230b5SDmitry Torokhov 
105707e4a3e2Smochel@digitalimplant.org /**
105807e4a3e2Smochel@digitalimplant.org  * device_attach - try to attach device to a driver.
105907e4a3e2Smochel@digitalimplant.org  * @dev: device.
106007e4a3e2Smochel@digitalimplant.org  *
106107e4a3e2Smochel@digitalimplant.org  * Walk the list of drivers that the bus has and call
106207e4a3e2Smochel@digitalimplant.org  * driver_probe_device() for each pair. If a compatible
10635adc55daSAdrian Bunk  * pair is found, break out and return.
10640d3e5a2eSPatrick Mochel  *
1065ca2b94baSHannes Reinecke  * Returns 1 if the device was bound to a driver;
106659a3cd7fSDmitry Torokhov  * 0 if no matching driver was found;
1067c6a46696SCornelia Huck  * -ENODEV if the device is not registered.
1068bf74ad5bSAlan Stern  *
10698e9394ceSGreg Kroah-Hartman  * When called for a USB interface, @dev->parent lock must be held.
107007e4a3e2Smochel@digitalimplant.org  */
device_attach(struct device * dev)107107e4a3e2Smochel@digitalimplant.org int device_attach(struct device *dev)
107207e4a3e2Smochel@digitalimplant.org {
1073765230b5SDmitry Torokhov 	return __device_attach(dev, false);
10742287c322Smochel@digitalimplant.org }
10754a3ad20cSGreg Kroah-Hartman EXPORT_SYMBOL_GPL(device_attach);
10762287c322Smochel@digitalimplant.org 
device_initial_probe(struct device * dev)1077765230b5SDmitry Torokhov void device_initial_probe(struct device *dev)
1078765230b5SDmitry Torokhov {
1079765230b5SDmitry Torokhov 	__device_attach(dev, true);
1080765230b5SDmitry Torokhov }
1081765230b5SDmitry Torokhov 
1082ed88747cSAlexander Duyck /*
1083ed88747cSAlexander Duyck  * __device_driver_lock - acquire locks needed to manipulate dev->drv
1084ed88747cSAlexander Duyck  * @dev: Device we will update driver info for
1085ed88747cSAlexander Duyck  * @parent: Parent device. Needed if the bus requires parent lock
1086ed88747cSAlexander Duyck  *
1087ed88747cSAlexander Duyck  * This function will take the required locks for manipulating dev->drv.
1088ed88747cSAlexander Duyck  * Normally this will just be the @dev lock, but when called for a USB
1089ed88747cSAlexander Duyck  * interface, @parent lock will be held as well.
1090ed88747cSAlexander Duyck  */
__device_driver_lock(struct device * dev,struct device * parent)1091ed88747cSAlexander Duyck static void __device_driver_lock(struct device *dev, struct device *parent)
1092ed88747cSAlexander Duyck {
1093ed88747cSAlexander Duyck 	if (parent && dev->bus->need_parent_lock)
1094ed88747cSAlexander Duyck 		device_lock(parent);
1095ed88747cSAlexander Duyck 	device_lock(dev);
1096ed88747cSAlexander Duyck }
1097ed88747cSAlexander Duyck 
1098ed88747cSAlexander Duyck /*
1099ed88747cSAlexander Duyck  * __device_driver_unlock - release locks needed to manipulate dev->drv
1100ed88747cSAlexander Duyck  * @dev: Device we will update driver info for
1101ed88747cSAlexander Duyck  * @parent: Parent device. Needed if the bus requires parent lock
1102ed88747cSAlexander Duyck  *
1103ed88747cSAlexander Duyck  * This function will release the required locks for manipulating dev->drv.
1104b4ae8c2fSTom Rix  * Normally this will just be the @dev lock, but when called for a
1105ed88747cSAlexander Duyck  * USB interface, @parent lock will be released as well.
1106ed88747cSAlexander Duyck  */
__device_driver_unlock(struct device * dev,struct device * parent)1107ed88747cSAlexander Duyck static void __device_driver_unlock(struct device *dev, struct device *parent)
1108ed88747cSAlexander Duyck {
1109ed88747cSAlexander Duyck 	device_unlock(dev);
1110ed88747cSAlexander Duyck 	if (parent && dev->bus->need_parent_lock)
1111ed88747cSAlexander Duyck 		device_unlock(parent);
1112ed88747cSAlexander Duyck }
1113ed88747cSAlexander Duyck 
1114ed88747cSAlexander Duyck /**
1115ed88747cSAlexander Duyck  * device_driver_attach - attach a specific driver to a specific device
1116ed88747cSAlexander Duyck  * @drv: Driver to attach
1117ed88747cSAlexander Duyck  * @dev: Device to attach it to
1118ed88747cSAlexander Duyck  *
1119ed88747cSAlexander Duyck  * Manually attach driver to a device. Will acquire both @dev lock and
1120ef6dcbddSChristoph Hellwig  * @dev->parent lock if needed. Returns 0 on success, -ERR on failure.
1121ed88747cSAlexander Duyck  */
device_driver_attach(struct device_driver * drv,struct device * dev)1122ed88747cSAlexander Duyck int device_driver_attach(struct device_driver *drv, struct device *dev)
1123ed88747cSAlexander Duyck {
1124204db60cSJason Gunthorpe 	int ret;
1125ed88747cSAlexander Duyck 
1126ed88747cSAlexander Duyck 	__device_driver_lock(dev, dev->parent);
112745ddcb42SChristoph Hellwig 	ret = __driver_probe_device(drv, dev);
1128ed88747cSAlexander Duyck 	__device_driver_unlock(dev, dev->parent);
1129ed88747cSAlexander Duyck 
1130ef6dcbddSChristoph Hellwig 	/* also return probe errors as normal negative errnos */
1131ef6dcbddSChristoph Hellwig 	if (ret > 0)
1132ef6dcbddSChristoph Hellwig 		ret = -ret;
113345ddcb42SChristoph Hellwig 	if (ret == -EPROBE_DEFER)
113445ddcb42SChristoph Hellwig 		return -EAGAIN;
1135ed88747cSAlexander Duyck 	return ret;
1136ed88747cSAlexander Duyck }
11370d9f837cSJason Gunthorpe EXPORT_SYMBOL_GPL(device_driver_attach);
1138ed88747cSAlexander Duyck 
__driver_attach_async_helper(void * _dev,async_cookie_t cookie)1139ef0ff683SAlexander Duyck static void __driver_attach_async_helper(void *_dev, async_cookie_t cookie)
1140ef0ff683SAlexander Duyck {
1141ef0ff683SAlexander Duyck 	struct device *dev = _dev;
1142ef0ff683SAlexander Duyck 	struct device_driver *drv;
1143204db60cSJason Gunthorpe 	int ret;
1144ef0ff683SAlexander Duyck 
1145ef0ff683SAlexander Duyck 	__device_driver_lock(dev, dev->parent);
1146ef0ff683SAlexander Duyck 	drv = dev->p->async_driver;
114784e7c678SMark-PK Tsai 	dev->p->async_driver = NULL;
1148ef0ff683SAlexander Duyck 	ret = driver_probe_device(drv, dev);
1149ef0ff683SAlexander Duyck 	__device_driver_unlock(dev, dev->parent);
1150ef0ff683SAlexander Duyck 
1151ef0ff683SAlexander Duyck 	dev_dbg(dev, "driver %s async attach completed: %d\n", drv->name, ret);
1152ef0ff683SAlexander Duyck 
1153ef0ff683SAlexander Duyck 	put_device(dev);
1154ef0ff683SAlexander Duyck }
1155ef0ff683SAlexander Duyck 
__driver_attach(struct device * dev,void * data)11562287c322Smochel@digitalimplant.org static int __driver_attach(struct device *dev, void *data)
11572287c322Smochel@digitalimplant.org {
11582287c322Smochel@digitalimplant.org 	struct device_driver *drv = data;
115970fe7583SZhang Wensheng 	bool async = false;
1160656b8035STomeu Vizoso 	int ret;
11612287c322Smochel@digitalimplant.org 
11620d3e5a2eSPatrick Mochel 	/*
11630d3e5a2eSPatrick Mochel 	 * Lock device and try to bind to it. We drop the error
11640d3e5a2eSPatrick Mochel 	 * here and always return 0, because we need to keep trying
11650d3e5a2eSPatrick Mochel 	 * to bind to devices and some drivers will return an error
11660d3e5a2eSPatrick Mochel 	 * simply if it didn't support the device.
11670d3e5a2eSPatrick Mochel 	 *
11680d3e5a2eSPatrick Mochel 	 * driver_probe_device() will spit a warning if there
11690d3e5a2eSPatrick Mochel 	 * is an error.
11700d3e5a2eSPatrick Mochel 	 */
11710d3e5a2eSPatrick Mochel 
1172656b8035STomeu Vizoso 	ret = driver_match_device(drv, dev);
1173656b8035STomeu Vizoso 	if (ret == 0) {
1174656b8035STomeu Vizoso 		/* no match */
11756cd49586SArjan van de Ven 		return 0;
1176656b8035STomeu Vizoso 	} else if (ret == -EPROBE_DEFER) {
1177656b8035STomeu Vizoso 		dev_dbg(dev, "Device match requests probe deferral\n");
1178f2db85b6SSaravana Kannan 		dev->can_match = true;
1179656b8035STomeu Vizoso 		driver_deferred_probe_add(dev);
118025e9fbf0SIsaac J. Manjarres 		/*
118125e9fbf0SIsaac J. Manjarres 		 * Driver could not match with device, but may match with
118225e9fbf0SIsaac J. Manjarres 		 * another device on the bus.
118325e9fbf0SIsaac J. Manjarres 		 */
118425e9fbf0SIsaac J. Manjarres 		return 0;
1185656b8035STomeu Vizoso 	} else if (ret < 0) {
1186eb7fbc9fSChristophe JAILLET 		dev_dbg(dev, "Bus failed to match device: %d\n", ret);
118727c0d217SIsaac J. Manjarres 		/*
118827c0d217SIsaac J. Manjarres 		 * Driver could not match with device, but may match with
118927c0d217SIsaac J. Manjarres 		 * another device on the bus.
119027c0d217SIsaac J. Manjarres 		 */
119127c0d217SIsaac J. Manjarres 		return 0;
1192656b8035STomeu Vizoso 	} /* ret > 0 means positive match */
11936cd49586SArjan van de Ven 
1194ef0ff683SAlexander Duyck 	if (driver_allows_async_probing(drv)) {
1195ef0ff683SAlexander Duyck 		/*
1196ef0ff683SAlexander Duyck 		 * Instead of probing the device synchronously we will
1197ef0ff683SAlexander Duyck 		 * probe it asynchronously to allow for more parallelism.
1198ef0ff683SAlexander Duyck 		 *
1199ef0ff683SAlexander Duyck 		 * We only take the device lock here in order to guarantee
1200ef0ff683SAlexander Duyck 		 * that the dev->driver and async_driver fields are protected
1201ef0ff683SAlexander Duyck 		 */
1202ef0ff683SAlexander Duyck 		dev_dbg(dev, "probing driver %s asynchronously\n", drv->name);
1203ef0ff683SAlexander Duyck 		device_lock(dev);
120484e7c678SMark-PK Tsai 		if (!dev->driver && !dev->p->async_driver) {
1205ef0ff683SAlexander Duyck 			get_device(dev);
1206ef0ff683SAlexander Duyck 			dev->p->async_driver = drv;
120770fe7583SZhang Wensheng 			async = true;
1208ef0ff683SAlexander Duyck 		}
1209ef0ff683SAlexander Duyck 		device_unlock(dev);
121070fe7583SZhang Wensheng 		if (async)
121170fe7583SZhang Wensheng 			async_schedule_dev(__driver_attach_async_helper, dev);
1212ef0ff683SAlexander Duyck 		return 0;
1213ef0ff683SAlexander Duyck 	}
1214ef0ff683SAlexander Duyck 
1215ef6dcbddSChristoph Hellwig 	__device_driver_lock(dev, dev->parent);
1216ef6dcbddSChristoph Hellwig 	driver_probe_device(drv, dev);
1217ef6dcbddSChristoph Hellwig 	__device_driver_unlock(dev, dev->parent);
12180d3e5a2eSPatrick Mochel 
121907e4a3e2Smochel@digitalimplant.org 	return 0;
122007e4a3e2Smochel@digitalimplant.org }
122107e4a3e2Smochel@digitalimplant.org 
122207e4a3e2Smochel@digitalimplant.org /**
122307e4a3e2Smochel@digitalimplant.org  * driver_attach - try to bind driver to devices.
122407e4a3e2Smochel@digitalimplant.org  * @drv: driver.
122507e4a3e2Smochel@digitalimplant.org  *
122607e4a3e2Smochel@digitalimplant.org  * Walk the list of devices that the bus has on it and try to
122707e4a3e2Smochel@digitalimplant.org  * match the driver with each one.  If driver_probe_device()
122807e4a3e2Smochel@digitalimplant.org  * returns 0 and the @dev->driver is set, we've found a
122907e4a3e2Smochel@digitalimplant.org  * compatible pair.
123007e4a3e2Smochel@digitalimplant.org  */
driver_attach(struct device_driver * drv)1231f86db396SAndrew Morton int driver_attach(struct device_driver *drv)
123207e4a3e2Smochel@digitalimplant.org {
1233f86db396SAndrew Morton 	return bus_for_each_dev(drv->bus, NULL, drv, __driver_attach);
123407e4a3e2Smochel@digitalimplant.org }
12354a3ad20cSGreg Kroah-Hartman EXPORT_SYMBOL_GPL(driver_attach);
123607e4a3e2Smochel@digitalimplant.org 
1237ab71c6f0SStefan Richter /*
12388e9394ceSGreg Kroah-Hartman  * __device_release_driver() must be called with @dev lock held.
12398e9394ceSGreg Kroah-Hartman  * When called for a USB interface, @dev->parent lock must be held as well.
124007e4a3e2Smochel@digitalimplant.org  */
__device_release_driver(struct device * dev,struct device * parent)12419ed98953SRafael J. Wysocki static void __device_release_driver(struct device *dev, struct device *parent)
124207e4a3e2Smochel@digitalimplant.org {
12430d3e5a2eSPatrick Mochel 	struct device_driver *drv;
124407e4a3e2Smochel@digitalimplant.org 
1245ef2c5174SAlan Stern 	drv = dev->driver;
1246c95a6b05SAlan Stern 	if (drv) {
12479226c504SRafael J. Wysocki 		pm_runtime_get_sync(dev);
12489226c504SRafael J. Wysocki 
12499ed98953SRafael J. Wysocki 		while (device_links_busy(dev)) {
1250ed88747cSAlexander Duyck 			__device_driver_unlock(dev, parent);
12519ed98953SRafael J. Wysocki 
12529ed98953SRafael J. Wysocki 			device_links_unbind_consumers(dev);
12539ed98953SRafael J. Wysocki 
1254ed88747cSAlexander Duyck 			__device_driver_lock(dev, parent);
12559ed98953SRafael J. Wysocki 			/*
12569ed98953SRafael J. Wysocki 			 * A concurrent invocation of the same function might
12579ed98953SRafael J. Wysocki 			 * have released the driver successfully while this one
12589ed98953SRafael J. Wysocki 			 * was waiting, so check for that.
12599ed98953SRafael J. Wysocki 			 */
12609226c504SRafael J. Wysocki 			if (dev->driver != drv) {
12619226c504SRafael J. Wysocki 				pm_runtime_put(dev);
12629ed98953SRafael J. Wysocki 				return;
12639ed98953SRafael J. Wysocki 			}
12649226c504SRafael J. Wysocki 		}
12655e928f77SRafael J. Wysocki 
12661901fb26SKay Sievers 		driver_sysfs_remove(dev);
126794e7b1c5Smochel@digitalimplant.org 
1268ed9f9181SGreg Kroah-Hartman 		bus_notify(dev, BUS_NOTIFY_UNBIND_DRIVER);
1269116af378SBenjamin Herrenschmidt 
1270baab52deSRafael J. Wysocki 		pm_runtime_put_sync(dev);
1271e1866b33SRafael J. Wysocki 
12724b775aafSRob Herring 		device_remove(dev);
12739ed98953SRafael J. Wysocki 
127425f3bcfcSLu Baolu 		if (dev->bus && dev->bus->dma_cleanup)
127525f3bcfcSLu Baolu 			dev->bus->dma_cleanup(dev);
127625f3bcfcSLu Baolu 
12779ad30721SRob Herring 		device_unbind_cleanup(dev);
1278*e4eccf22SSaravana Kannan 		device_links_driver_cleanup(dev);
1279e90d5532SRafael J. Wysocki 
12808940b4f3SGreg Kroah-Hartman 		klist_remove(&dev->p->knode_driver);
1281aa8e54b5STomeu Vizoso 		device_pm_check_callbacks(dev);
12821455cf8dSDmitry Torokhov 
1283ed9f9181SGreg Kroah-Hartman 		bus_notify(dev, BUS_NOTIFY_UNBOUND_DRIVER);
12841455cf8dSDmitry Torokhov 		kobject_uevent(&dev->kobj, KOBJ_UNBIND);
12850d3e5a2eSPatrick Mochel 	}
1286c95a6b05SAlan Stern }
1287c95a6b05SAlan Stern 
device_release_driver_internal(struct device * dev,struct device_driver * drv,struct device * parent)12889ed98953SRafael J. Wysocki void device_release_driver_internal(struct device *dev,
12894bdb3550SRafael J. Wysocki 				    struct device_driver *drv,
12904bdb3550SRafael J. Wysocki 				    struct device *parent)
12914bdb3550SRafael J. Wysocki {
1292ed88747cSAlexander Duyck 	__device_driver_lock(dev, parent);
12934bdb3550SRafael J. Wysocki 
12944bdb3550SRafael J. Wysocki 	if (!drv || drv == dev->driver)
12959ed98953SRafael J. Wysocki 		__device_release_driver(dev, parent);
12964bdb3550SRafael J. Wysocki 
1297ed88747cSAlexander Duyck 	__device_driver_unlock(dev, parent);
12984bdb3550SRafael J. Wysocki }
12994bdb3550SRafael J. Wysocki 
1300ab71c6f0SStefan Richter /**
1301ab71c6f0SStefan Richter  * device_release_driver - manually detach device from driver.
1302ab71c6f0SStefan Richter  * @dev: device.
1303ab71c6f0SStefan Richter  *
1304ab71c6f0SStefan Richter  * Manually detach device from driver.
13058e9394ceSGreg Kroah-Hartman  * When called for a USB interface, @dev->parent lock must be held.
13069ed98953SRafael J. Wysocki  *
13079ed98953SRafael J. Wysocki  * If this function is to be called with @dev->parent lock held, ensure that
13089ed98953SRafael J. Wysocki  * the device's consumers are unbound in advance or that their locks can be
13099ed98953SRafael J. Wysocki  * acquired under the @dev->parent lock.
1310ab71c6f0SStefan Richter  */
device_release_driver(struct device * dev)1311c95a6b05SAlan Stern void device_release_driver(struct device *dev)
1312c95a6b05SAlan Stern {
1313c95a6b05SAlan Stern 	/*
1314c95a6b05SAlan Stern 	 * If anyone calls device_release_driver() recursively from
1315c95a6b05SAlan Stern 	 * within their ->remove callback for the same device, they
1316c95a6b05SAlan Stern 	 * will deadlock right here.
1317c95a6b05SAlan Stern 	 */
13184bdb3550SRafael J. Wysocki 	device_release_driver_internal(dev, NULL, NULL);
131907e4a3e2Smochel@digitalimplant.org }
13204a3ad20cSGreg Kroah-Hartman EXPORT_SYMBOL_GPL(device_release_driver);
132194e7b1c5Smochel@digitalimplant.org 
132207e4a3e2Smochel@digitalimplant.org /**
1323ed88747cSAlexander Duyck  * device_driver_detach - detach driver from a specific device
1324ed88747cSAlexander Duyck  * @dev: device to detach driver from
1325ed88747cSAlexander Duyck  *
1326ed88747cSAlexander Duyck  * Detach driver from device. Will acquire both @dev lock and @dev->parent
1327ed88747cSAlexander Duyck  * lock if needed.
1328ed88747cSAlexander Duyck  */
device_driver_detach(struct device * dev)1329ed88747cSAlexander Duyck void device_driver_detach(struct device *dev)
1330ed88747cSAlexander Duyck {
1331ed88747cSAlexander Duyck 	device_release_driver_internal(dev, NULL, dev->parent);
1332ed88747cSAlexander Duyck }
1333ed88747cSAlexander Duyck 
1334ed88747cSAlexander Duyck /**
133507e4a3e2Smochel@digitalimplant.org  * driver_detach - detach driver from all devices it controls.
133607e4a3e2Smochel@digitalimplant.org  * @drv: driver.
133707e4a3e2Smochel@digitalimplant.org  */
driver_detach(struct device_driver * drv)133807e4a3e2Smochel@digitalimplant.org void driver_detach(struct device_driver *drv)
133907e4a3e2Smochel@digitalimplant.org {
13408940b4f3SGreg Kroah-Hartman 	struct device_private *dev_prv;
1341c95a6b05SAlan Stern 	struct device *dev;
1342c95a6b05SAlan Stern 
1343c37d721cSAlexander Duyck 	if (driver_allows_async_probing(drv))
1344c37d721cSAlexander Duyck 		async_synchronize_full();
1345c37d721cSAlexander Duyck 
1346c95a6b05SAlan Stern 	for (;;) {
1347e5dd1278SGreg Kroah-Hartman 		spin_lock(&drv->p->klist_devices.k_lock);
1348e5dd1278SGreg Kroah-Hartman 		if (list_empty(&drv->p->klist_devices.k_list)) {
1349e5dd1278SGreg Kroah-Hartman 			spin_unlock(&drv->p->klist_devices.k_lock);
1350c95a6b05SAlan Stern 			break;
1351c95a6b05SAlan Stern 		}
1352a3a87d66SAndy Shevchenko 		dev_prv = list_last_entry(&drv->p->klist_devices.k_list,
13538940b4f3SGreg Kroah-Hartman 				     struct device_private,
13548940b4f3SGreg Kroah-Hartman 				     knode_driver.n_node);
13558940b4f3SGreg Kroah-Hartman 		dev = dev_prv->device;
1356c95a6b05SAlan Stern 		get_device(dev);
1357e5dd1278SGreg Kroah-Hartman 		spin_unlock(&drv->p->klist_devices.k_lock);
13584bdb3550SRafael J. Wysocki 		device_release_driver_internal(dev, drv, dev->parent);
1359c95a6b05SAlan Stern 		put_device(dev);
1360c95a6b05SAlan Stern 	}
136107e4a3e2Smochel@digitalimplant.org }
1362