xref: /openbmc/linux/drivers/acpi/pci_root.c (revision 930beb5a)
1 /*
2  *  pci_root.c - ACPI PCI Root Bridge Driver ($Revision: 40 $)
3  *
4  *  Copyright (C) 2001, 2002 Andy Grover <andrew.grover@intel.com>
5  *  Copyright (C) 2001, 2002 Paul Diefenbaugh <paul.s.diefenbaugh@intel.com>
6  *
7  * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
8  *
9  *  This program is free software; you can redistribute it and/or modify
10  *  it under the terms of the GNU General Public License as published by
11  *  the Free Software Foundation; either version 2 of the License, or (at
12  *  your option) any later version.
13  *
14  *  This program is distributed in the hope that it will be useful, but
15  *  WITHOUT ANY WARRANTY; without even the implied warranty of
16  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17  *  General Public License for more details.
18  *
19  *  You should have received a copy of the GNU General Public License along
20  *  with this program; if not, write to the Free Software Foundation, Inc.,
21  *  59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
22  *
23  * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
24  */
25 
26 #include <linux/kernel.h>
27 #include <linux/module.h>
28 #include <linux/init.h>
29 #include <linux/types.h>
30 #include <linux/mutex.h>
31 #include <linux/pm.h>
32 #include <linux/pm_runtime.h>
33 #include <linux/pci.h>
34 #include <linux/pci-acpi.h>
35 #include <linux/pci-aspm.h>
36 #include <linux/acpi.h>
37 #include <linux/slab.h>
38 #include <acpi/acpi_bus.h>
39 #include <acpi/acpi_drivers.h>
40 #include <acpi/apei.h>
41 
42 #include "internal.h"
43 
44 #define PREFIX "ACPI: "
45 
46 #define _COMPONENT		ACPI_PCI_COMPONENT
47 ACPI_MODULE_NAME("pci_root");
48 #define ACPI_PCI_ROOT_CLASS		"pci_bridge"
49 #define ACPI_PCI_ROOT_DEVICE_NAME	"PCI Root Bridge"
50 static int acpi_pci_root_add(struct acpi_device *device,
51 			     const struct acpi_device_id *not_used);
52 static void acpi_pci_root_remove(struct acpi_device *device);
53 
54 #define ACPI_PCIE_REQ_SUPPORT (OSC_PCI_EXT_CONFIG_SUPPORT \
55 				| OSC_PCI_ASPM_SUPPORT \
56 				| OSC_PCI_CLOCK_PM_SUPPORT \
57 				| OSC_PCI_MSI_SUPPORT)
58 
59 static const struct acpi_device_id root_device_ids[] = {
60 	{"PNP0A03", 0},
61 	{"", 0},
62 };
63 
64 static struct acpi_scan_handler pci_root_handler = {
65 	.ids = root_device_ids,
66 	.attach = acpi_pci_root_add,
67 	.detach = acpi_pci_root_remove,
68 	.hotplug = {
69 		.ignore = true,
70 	},
71 };
72 
73 static DEFINE_MUTEX(osc_lock);
74 
75 /**
76  * acpi_is_root_bridge - determine whether an ACPI CA node is a PCI root bridge
77  * @handle - the ACPI CA node in question.
78  *
79  * Note: we could make this API take a struct acpi_device * instead, but
80  * for now, it's more convenient to operate on an acpi_handle.
81  */
82 int acpi_is_root_bridge(acpi_handle handle)
83 {
84 	int ret;
85 	struct acpi_device *device;
86 
87 	ret = acpi_bus_get_device(handle, &device);
88 	if (ret)
89 		return 0;
90 
91 	ret = acpi_match_device_ids(device, root_device_ids);
92 	if (ret)
93 		return 0;
94 	else
95 		return 1;
96 }
97 EXPORT_SYMBOL_GPL(acpi_is_root_bridge);
98 
99 static acpi_status
100 get_root_bridge_busnr_callback(struct acpi_resource *resource, void *data)
101 {
102 	struct resource *res = data;
103 	struct acpi_resource_address64 address;
104 	acpi_status status;
105 
106 	status = acpi_resource_to_address64(resource, &address);
107 	if (ACPI_FAILURE(status))
108 		return AE_OK;
109 
110 	if ((address.address_length > 0) &&
111 	    (address.resource_type == ACPI_BUS_NUMBER_RANGE)) {
112 		res->start = address.minimum;
113 		res->end = address.minimum + address.address_length - 1;
114 	}
115 
116 	return AE_OK;
117 }
118 
119 static acpi_status try_get_root_bridge_busnr(acpi_handle handle,
120 					     struct resource *res)
121 {
122 	acpi_status status;
123 
124 	res->start = -1;
125 	status =
126 	    acpi_walk_resources(handle, METHOD_NAME__CRS,
127 				get_root_bridge_busnr_callback, res);
128 	if (ACPI_FAILURE(status))
129 		return status;
130 	if (res->start == -1)
131 		return AE_ERROR;
132 	return AE_OK;
133 }
134 
135 struct pci_osc_bit_struct {
136 	u32 bit;
137 	char *desc;
138 };
139 
140 static struct pci_osc_bit_struct pci_osc_support_bit[] = {
141 	{ OSC_PCI_EXT_CONFIG_SUPPORT, "ExtendedConfig" },
142 	{ OSC_PCI_ASPM_SUPPORT, "ASPM" },
143 	{ OSC_PCI_CLOCK_PM_SUPPORT, "ClockPM" },
144 	{ OSC_PCI_SEGMENT_GROUPS_SUPPORT, "Segments" },
145 	{ OSC_PCI_MSI_SUPPORT, "MSI" },
146 };
147 
148 static struct pci_osc_bit_struct pci_osc_control_bit[] = {
149 	{ OSC_PCI_EXPRESS_NATIVE_HP_CONTROL, "PCIeHotplug" },
150 	{ OSC_PCI_SHPC_NATIVE_HP_CONTROL, "SHPCHotplug" },
151 	{ OSC_PCI_EXPRESS_PME_CONTROL, "PME" },
152 	{ OSC_PCI_EXPRESS_AER_CONTROL, "AER" },
153 	{ OSC_PCI_EXPRESS_CAPABILITY_CONTROL, "PCIeCapability" },
154 };
155 
156 static void decode_osc_bits(struct acpi_pci_root *root, char *msg, u32 word,
157 			    struct pci_osc_bit_struct *table, int size)
158 {
159 	char buf[80];
160 	int i, len = 0;
161 	struct pci_osc_bit_struct *entry;
162 
163 	buf[0] = '\0';
164 	for (i = 0, entry = table; i < size; i++, entry++)
165 		if (word & entry->bit)
166 			len += snprintf(buf + len, sizeof(buf) - len, "%s%s",
167 					len ? " " : "", entry->desc);
168 
169 	dev_info(&root->device->dev, "_OSC: %s [%s]\n", msg, buf);
170 }
171 
172 static void decode_osc_support(struct acpi_pci_root *root, char *msg, u32 word)
173 {
174 	decode_osc_bits(root, msg, word, pci_osc_support_bit,
175 			ARRAY_SIZE(pci_osc_support_bit));
176 }
177 
178 static void decode_osc_control(struct acpi_pci_root *root, char *msg, u32 word)
179 {
180 	decode_osc_bits(root, msg, word, pci_osc_control_bit,
181 			ARRAY_SIZE(pci_osc_control_bit));
182 }
183 
184 static u8 pci_osc_uuid_str[] = "33DB4D5B-1FF7-401C-9657-7441C03DD766";
185 
186 static acpi_status acpi_pci_run_osc(acpi_handle handle,
187 				    const u32 *capbuf, u32 *retval)
188 {
189 	struct acpi_osc_context context = {
190 		.uuid_str = pci_osc_uuid_str,
191 		.rev = 1,
192 		.cap.length = 12,
193 		.cap.pointer = (void *)capbuf,
194 	};
195 	acpi_status status;
196 
197 	status = acpi_run_osc(handle, &context);
198 	if (ACPI_SUCCESS(status)) {
199 		*retval = *((u32 *)(context.ret.pointer + 8));
200 		kfree(context.ret.pointer);
201 	}
202 	return status;
203 }
204 
205 static acpi_status acpi_pci_query_osc(struct acpi_pci_root *root,
206 					u32 support,
207 					u32 *control)
208 {
209 	acpi_status status;
210 	u32 result, capbuf[3];
211 
212 	support &= OSC_PCI_SUPPORT_MASKS;
213 	support |= root->osc_support_set;
214 
215 	capbuf[OSC_QUERY_DWORD] = OSC_QUERY_ENABLE;
216 	capbuf[OSC_SUPPORT_DWORD] = support;
217 	if (control) {
218 		*control &= OSC_PCI_CONTROL_MASKS;
219 		capbuf[OSC_CONTROL_DWORD] = *control | root->osc_control_set;
220 	} else {
221 		/* Run _OSC query only with existing controls. */
222 		capbuf[OSC_CONTROL_DWORD] = root->osc_control_set;
223 	}
224 
225 	status = acpi_pci_run_osc(root->device->handle, capbuf, &result);
226 	if (ACPI_SUCCESS(status)) {
227 		root->osc_support_set = support;
228 		if (control)
229 			*control = result;
230 	}
231 	return status;
232 }
233 
234 static acpi_status acpi_pci_osc_support(struct acpi_pci_root *root, u32 flags)
235 {
236 	acpi_status status;
237 
238 	mutex_lock(&osc_lock);
239 	status = acpi_pci_query_osc(root, flags, NULL);
240 	mutex_unlock(&osc_lock);
241 	return status;
242 }
243 
244 struct acpi_pci_root *acpi_pci_find_root(acpi_handle handle)
245 {
246 	struct acpi_pci_root *root;
247 	struct acpi_device *device;
248 
249 	if (acpi_bus_get_device(handle, &device) ||
250 	    acpi_match_device_ids(device, root_device_ids))
251 		return NULL;
252 
253 	root = acpi_driver_data(device);
254 
255 	return root;
256 }
257 EXPORT_SYMBOL_GPL(acpi_pci_find_root);
258 
259 struct acpi_handle_node {
260 	struct list_head node;
261 	acpi_handle handle;
262 };
263 
264 /**
265  * acpi_get_pci_dev - convert ACPI CA handle to struct pci_dev
266  * @handle: the handle in question
267  *
268  * Given an ACPI CA handle, the desired PCI device is located in the
269  * list of PCI devices.
270  *
271  * If the device is found, its reference count is increased and this
272  * function returns a pointer to its data structure.  The caller must
273  * decrement the reference count by calling pci_dev_put().
274  * If no device is found, %NULL is returned.
275  */
276 struct pci_dev *acpi_get_pci_dev(acpi_handle handle)
277 {
278 	int dev, fn;
279 	unsigned long long adr;
280 	acpi_status status;
281 	acpi_handle phandle;
282 	struct pci_bus *pbus;
283 	struct pci_dev *pdev = NULL;
284 	struct acpi_handle_node *node, *tmp;
285 	struct acpi_pci_root *root;
286 	LIST_HEAD(device_list);
287 
288 	/*
289 	 * Walk up the ACPI CA namespace until we reach a PCI root bridge.
290 	 */
291 	phandle = handle;
292 	while (!acpi_is_root_bridge(phandle)) {
293 		node = kzalloc(sizeof(struct acpi_handle_node), GFP_KERNEL);
294 		if (!node)
295 			goto out;
296 
297 		INIT_LIST_HEAD(&node->node);
298 		node->handle = phandle;
299 		list_add(&node->node, &device_list);
300 
301 		status = acpi_get_parent(phandle, &phandle);
302 		if (ACPI_FAILURE(status))
303 			goto out;
304 	}
305 
306 	root = acpi_pci_find_root(phandle);
307 	if (!root)
308 		goto out;
309 
310 	pbus = root->bus;
311 
312 	/*
313 	 * Now, walk back down the PCI device tree until we return to our
314 	 * original handle. Assumes that everything between the PCI root
315 	 * bridge and the device we're looking for must be a P2P bridge.
316 	 */
317 	list_for_each_entry(node, &device_list, node) {
318 		acpi_handle hnd = node->handle;
319 		status = acpi_evaluate_integer(hnd, "_ADR", NULL, &adr);
320 		if (ACPI_FAILURE(status))
321 			goto out;
322 		dev = (adr >> 16) & 0xffff;
323 		fn  = adr & 0xffff;
324 
325 		pdev = pci_get_slot(pbus, PCI_DEVFN(dev, fn));
326 		if (!pdev || hnd == handle)
327 			break;
328 
329 		pbus = pdev->subordinate;
330 		pci_dev_put(pdev);
331 
332 		/*
333 		 * This function may be called for a non-PCI device that has a
334 		 * PCI parent (eg. a disk under a PCI SATA controller).  In that
335 		 * case pdev->subordinate will be NULL for the parent.
336 		 */
337 		if (!pbus) {
338 			dev_dbg(&pdev->dev, "Not a PCI-to-PCI bridge\n");
339 			pdev = NULL;
340 			break;
341 		}
342 	}
343 out:
344 	list_for_each_entry_safe(node, tmp, &device_list, node)
345 		kfree(node);
346 
347 	return pdev;
348 }
349 EXPORT_SYMBOL_GPL(acpi_get_pci_dev);
350 
351 /**
352  * acpi_pci_osc_control_set - Request control of PCI root _OSC features.
353  * @handle: ACPI handle of a PCI root bridge (or PCIe Root Complex).
354  * @mask: Mask of _OSC bits to request control of, place to store control mask.
355  * @req: Mask of _OSC bits the control of is essential to the caller.
356  *
357  * Run _OSC query for @mask and if that is successful, compare the returned
358  * mask of control bits with @req.  If all of the @req bits are set in the
359  * returned mask, run _OSC request for it.
360  *
361  * The variable at the @mask address may be modified regardless of whether or
362  * not the function returns success.  On success it will contain the mask of
363  * _OSC bits the BIOS has granted control of, but its contents are meaningless
364  * on failure.
365  **/
366 acpi_status acpi_pci_osc_control_set(acpi_handle handle, u32 *mask, u32 req)
367 {
368 	struct acpi_pci_root *root;
369 	acpi_status status = AE_OK;
370 	u32 ctrl, capbuf[3];
371 
372 	if (!mask)
373 		return AE_BAD_PARAMETER;
374 
375 	ctrl = *mask & OSC_PCI_CONTROL_MASKS;
376 	if ((ctrl & req) != req)
377 		return AE_TYPE;
378 
379 	root = acpi_pci_find_root(handle);
380 	if (!root)
381 		return AE_NOT_EXIST;
382 
383 	mutex_lock(&osc_lock);
384 
385 	*mask = ctrl | root->osc_control_set;
386 	/* No need to evaluate _OSC if the control was already granted. */
387 	if ((root->osc_control_set & ctrl) == ctrl)
388 		goto out;
389 
390 	/* Need to check the available controls bits before requesting them. */
391 	while (*mask) {
392 		status = acpi_pci_query_osc(root, root->osc_support_set, mask);
393 		if (ACPI_FAILURE(status))
394 			goto out;
395 		if (ctrl == *mask)
396 			break;
397 		decode_osc_control(root, "platform does not support",
398 				   ctrl & ~(*mask));
399 		ctrl = *mask;
400 	}
401 
402 	if ((ctrl & req) != req) {
403 		decode_osc_control(root, "not requesting control; platform does not support",
404 				   req & ~(ctrl));
405 		status = AE_SUPPORT;
406 		goto out;
407 	}
408 
409 	capbuf[OSC_QUERY_DWORD] = 0;
410 	capbuf[OSC_SUPPORT_DWORD] = root->osc_support_set;
411 	capbuf[OSC_CONTROL_DWORD] = ctrl;
412 	status = acpi_pci_run_osc(handle, capbuf, mask);
413 	if (ACPI_SUCCESS(status))
414 		root->osc_control_set = *mask;
415 out:
416 	mutex_unlock(&osc_lock);
417 	return status;
418 }
419 EXPORT_SYMBOL(acpi_pci_osc_control_set);
420 
421 static void negotiate_os_control(struct acpi_pci_root *root, int *no_aspm,
422 				 int *clear_aspm)
423 {
424 	u32 support, control, requested;
425 	acpi_status status;
426 	struct acpi_device *device = root->device;
427 	acpi_handle handle = device->handle;
428 
429 	/*
430 	 * All supported architectures that use ACPI have support for
431 	 * PCI domains, so we indicate this in _OSC support capabilities.
432 	 */
433 	support = OSC_PCI_SEGMENT_GROUPS_SUPPORT;
434 	if (pci_ext_cfg_avail())
435 		support |= OSC_PCI_EXT_CONFIG_SUPPORT;
436 	if (pcie_aspm_support_enabled())
437 		support |= OSC_PCI_ASPM_SUPPORT | OSC_PCI_CLOCK_PM_SUPPORT;
438 	if (pci_msi_enabled())
439 		support |= OSC_PCI_MSI_SUPPORT;
440 
441 	decode_osc_support(root, "OS supports", support);
442 	status = acpi_pci_osc_support(root, support);
443 	if (ACPI_FAILURE(status)) {
444 		dev_info(&device->dev, "_OSC failed (%s); disabling ASPM\n",
445 			 acpi_format_exception(status));
446 		*no_aspm = 1;
447 		return;
448 	}
449 
450 	if (pcie_ports_disabled) {
451 		dev_info(&device->dev, "PCIe port services disabled; not requesting _OSC control\n");
452 		return;
453 	}
454 
455 	if ((support & ACPI_PCIE_REQ_SUPPORT) != ACPI_PCIE_REQ_SUPPORT) {
456 		decode_osc_support(root, "not requesting OS control; OS requires",
457 				   ACPI_PCIE_REQ_SUPPORT);
458 		return;
459 	}
460 
461 	control = OSC_PCI_EXPRESS_CAPABILITY_CONTROL
462 		| OSC_PCI_EXPRESS_NATIVE_HP_CONTROL
463 		| OSC_PCI_EXPRESS_PME_CONTROL;
464 
465 	if (pci_aer_available()) {
466 		if (aer_acpi_firmware_first())
467 			dev_info(&device->dev,
468 				 "PCIe AER handled by firmware\n");
469 		else
470 			control |= OSC_PCI_EXPRESS_AER_CONTROL;
471 	}
472 
473 	requested = control;
474 	status = acpi_pci_osc_control_set(handle, &control,
475 					  OSC_PCI_EXPRESS_CAPABILITY_CONTROL);
476 	if (ACPI_SUCCESS(status)) {
477 		decode_osc_control(root, "OS now controls", control);
478 		if (acpi_gbl_FADT.boot_flags & ACPI_FADT_NO_ASPM) {
479 			/*
480 			 * We have ASPM control, but the FADT indicates
481 			 * that it's unsupported. Clear it.
482 			 */
483 			*clear_aspm = 1;
484 		}
485 	} else {
486 		decode_osc_control(root, "OS requested", requested);
487 		decode_osc_control(root, "platform willing to grant", control);
488 		dev_info(&device->dev, "_OSC failed (%s); disabling ASPM\n",
489 			acpi_format_exception(status));
490 
491 		/*
492 		 * We want to disable ASPM here, but aspm_disabled
493 		 * needs to remain in its state from boot so that we
494 		 * properly handle PCIe 1.1 devices.  So we set this
495 		 * flag here, to defer the action until after the ACPI
496 		 * root scan.
497 		 */
498 		*no_aspm = 1;
499 	}
500 }
501 
502 static int acpi_pci_root_add(struct acpi_device *device,
503 			     const struct acpi_device_id *not_used)
504 {
505 	unsigned long long segment, bus;
506 	acpi_status status;
507 	int result;
508 	struct acpi_pci_root *root;
509 	acpi_handle handle = device->handle;
510 	int no_aspm = 0, clear_aspm = 0;
511 
512 	root = kzalloc(sizeof(struct acpi_pci_root), GFP_KERNEL);
513 	if (!root)
514 		return -ENOMEM;
515 
516 	segment = 0;
517 	status = acpi_evaluate_integer(handle, METHOD_NAME__SEG, NULL,
518 				       &segment);
519 	if (ACPI_FAILURE(status) && status != AE_NOT_FOUND) {
520 		dev_err(&device->dev,  "can't evaluate _SEG\n");
521 		result = -ENODEV;
522 		goto end;
523 	}
524 
525 	/* Check _CRS first, then _BBN.  If no _BBN, default to zero. */
526 	root->secondary.flags = IORESOURCE_BUS;
527 	status = try_get_root_bridge_busnr(handle, &root->secondary);
528 	if (ACPI_FAILURE(status)) {
529 		/*
530 		 * We need both the start and end of the downstream bus range
531 		 * to interpret _CBA (MMCONFIG base address), so it really is
532 		 * supposed to be in _CRS.  If we don't find it there, all we
533 		 * can do is assume [_BBN-0xFF] or [0-0xFF].
534 		 */
535 		root->secondary.end = 0xFF;
536 		dev_warn(&device->dev,
537 			 FW_BUG "no secondary bus range in _CRS\n");
538 		status = acpi_evaluate_integer(handle, METHOD_NAME__BBN,
539 					       NULL, &bus);
540 		if (ACPI_SUCCESS(status))
541 			root->secondary.start = bus;
542 		else if (status == AE_NOT_FOUND)
543 			root->secondary.start = 0;
544 		else {
545 			dev_err(&device->dev, "can't evaluate _BBN\n");
546 			result = -ENODEV;
547 			goto end;
548 		}
549 	}
550 
551 	root->device = device;
552 	root->segment = segment & 0xFFFF;
553 	strcpy(acpi_device_name(device), ACPI_PCI_ROOT_DEVICE_NAME);
554 	strcpy(acpi_device_class(device), ACPI_PCI_ROOT_CLASS);
555 	device->driver_data = root;
556 
557 	pr_info(PREFIX "%s [%s] (domain %04x %pR)\n",
558 	       acpi_device_name(device), acpi_device_bid(device),
559 	       root->segment, &root->secondary);
560 
561 	root->mcfg_addr = acpi_pci_root_get_mcfg_addr(handle);
562 
563 	negotiate_os_control(root, &no_aspm, &clear_aspm);
564 
565 	/*
566 	 * TBD: Need PCI interface for enumeration/configuration of roots.
567 	 */
568 
569 	/*
570 	 * Scan the Root Bridge
571 	 * --------------------
572 	 * Must do this prior to any attempt to bind the root device, as the
573 	 * PCI namespace does not get created until this call is made (and
574 	 * thus the root bridge's pci_dev does not exist).
575 	 */
576 	root->bus = pci_acpi_scan_root(root);
577 	if (!root->bus) {
578 		dev_err(&device->dev,
579 			"Bus %04x:%02x not present in PCI namespace\n",
580 			root->segment, (unsigned int)root->secondary.start);
581 		device->driver_data = NULL;
582 		result = -ENODEV;
583 		goto end;
584 	}
585 
586 	if (clear_aspm) {
587 		dev_info(&device->dev, "Disabling ASPM (FADT indicates it is unsupported)\n");
588 		pcie_clear_aspm(root->bus);
589 	}
590 	if (no_aspm)
591 		pcie_no_aspm();
592 
593 	pci_acpi_add_bus_pm_notifier(device, root->bus);
594 	if (device->wakeup.flags.run_wake)
595 		device_set_run_wake(root->bus->bridge, true);
596 
597 	if (system_state != SYSTEM_BOOTING) {
598 		pcibios_resource_survey_bus(root->bus);
599 		pci_assign_unassigned_root_bus_resources(root->bus);
600 	}
601 
602 	pci_bus_add_devices(root->bus);
603 	return 1;
604 
605 end:
606 	kfree(root);
607 	return result;
608 }
609 
610 static void acpi_pci_root_remove(struct acpi_device *device)
611 {
612 	struct acpi_pci_root *root = acpi_driver_data(device);
613 
614 	pci_stop_root_bus(root->bus);
615 
616 	device_set_run_wake(root->bus->bridge, false);
617 	pci_acpi_remove_bus_pm_notifier(device);
618 
619 	pci_remove_root_bus(root->bus);
620 
621 	kfree(root);
622 }
623 
624 void __init acpi_pci_root_init(void)
625 {
626 	acpi_hest_init();
627 
628 	if (!acpi_pci_disabled) {
629 		pci_acpi_crs_quirks();
630 		acpi_scan_add_handler(&pci_root_handler);
631 	}
632 }
633 /* Support root bridge hotplug */
634 
635 static void handle_root_bridge_insertion(acpi_handle handle)
636 {
637 	struct acpi_device *device;
638 
639 	if (!acpi_bus_get_device(handle, &device)) {
640 		dev_printk(KERN_DEBUG, &device->dev,
641 			   "acpi device already exists; ignoring notify\n");
642 		return;
643 	}
644 
645 	if (acpi_bus_scan(handle))
646 		acpi_handle_err(handle, "cannot add bridge to acpi list\n");
647 }
648 
649 static void hotplug_event_root(void *data, u32 type)
650 {
651 	acpi_handle handle = data;
652 	struct acpi_pci_root *root;
653 
654 	acpi_scan_lock_acquire();
655 
656 	root = acpi_pci_find_root(handle);
657 
658 	switch (type) {
659 	case ACPI_NOTIFY_BUS_CHECK:
660 		/* bus enumerate */
661 		acpi_handle_printk(KERN_DEBUG, handle,
662 				   "Bus check notify on %s\n", __func__);
663 		if (root)
664 			acpiphp_check_host_bridge(handle);
665 		else
666 			handle_root_bridge_insertion(handle);
667 
668 		break;
669 
670 	case ACPI_NOTIFY_DEVICE_CHECK:
671 		/* device check */
672 		acpi_handle_printk(KERN_DEBUG, handle,
673 				   "Device check notify on %s\n", __func__);
674 		if (!root)
675 			handle_root_bridge_insertion(handle);
676 		break;
677 
678 	case ACPI_NOTIFY_EJECT_REQUEST:
679 		/* request device eject */
680 		acpi_handle_printk(KERN_DEBUG, handle,
681 				   "Device eject notify on %s\n", __func__);
682 		if (!root)
683 			break;
684 
685 		get_device(&root->device->dev);
686 
687 		acpi_scan_lock_release();
688 
689 		acpi_bus_device_eject(root->device, ACPI_NOTIFY_EJECT_REQUEST);
690 		return;
691 	default:
692 		acpi_handle_warn(handle,
693 				 "notify_handler: unknown event type 0x%x\n",
694 				 type);
695 		break;
696 	}
697 
698 	acpi_scan_lock_release();
699 }
700 
701 static void handle_hotplug_event_root(acpi_handle handle, u32 type,
702 					void *context)
703 {
704 	acpi_hotplug_execute(hotplug_event_root, handle, type);
705 }
706 
707 static acpi_status __init
708 find_root_bridges(acpi_handle handle, u32 lvl, void *context, void **rv)
709 {
710 	acpi_status status;
711 	int *count = (int *)context;
712 
713 	if (!acpi_is_root_bridge(handle))
714 		return AE_OK;
715 
716 	(*count)++;
717 
718 	status = acpi_install_notify_handler(handle, ACPI_SYSTEM_NOTIFY,
719 					handle_hotplug_event_root, NULL);
720 	if (ACPI_FAILURE(status))
721 		acpi_handle_printk(KERN_DEBUG, handle,
722 			"notify handler is not installed, exit status: %u\n",
723 			 (unsigned int)status);
724 	else
725 		acpi_handle_printk(KERN_DEBUG, handle,
726 				   "notify handler is installed\n");
727 
728 	return AE_OK;
729 }
730 
731 void __init acpi_pci_root_hp_init(void)
732 {
733 	int num = 0;
734 
735 	acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT,
736 		ACPI_UINT32_MAX, find_root_bridges, NULL, &num, NULL);
737 
738 	printk(KERN_DEBUG "Found %d acpi root devices\n", num);
739 }
740