blob: 5fc617edf10856b88fda394c3a7456a0b9888ec7 [file] [log] [blame]
Greg Kroah-Hartmanb2441312017-11-01 15:07:57 +01001// SPDX-License-Identifier: GPL-2.0
Andi Kleen92c05fc2006-03-23 14:35:12 -08002#include <linux/pci.h>
3#include <linux/init.h>
Jaswinder Singh Rajput82487712008-12-27 18:32:28 +05304#include <asm/pci_x86.h>
Thomas Gleixnerd5d0e882010-02-22 05:42:04 -08005#include <asm/x86_init.h>
Andi Kleen92c05fc2006-03-23 14:35:12 -08006
7/* arch_initcall has too random ordering, so call the initializers
8 in the right sequence from here. */
Robert Richter8dd779b2008-07-02 22:50:29 +02009static __init int pci_arch_init(void)
Andi Kleen92c05fc2006-03-23 14:35:12 -080010{
Andi Kleen5e544d62006-09-26 10:52:40 +020011#ifdef CONFIG_PCI_DIRECT
Yinghai Lubb63b422008-02-28 23:56:50 -080012 int type = 0;
13
Andi Kleen5e544d62006-09-26 10:52:40 +020014 type = pci_direct_probe();
15#endif
Linus Torvalds5f78e4d2008-04-29 08:26:51 -070016
Jacob Pan23a36002008-12-08 09:44:16 -080017 if (!(pci_probe & PCI_PROBE_NOEARLY))
18 pci_mmcfg_early_init();
Yinghai Lubb63b422008-02-28 23:56:50 -080019
Thomas Gleixnerd5d0e882010-02-22 05:42:04 -080020 if (x86_init.pci.arch_init && !x86_init.pci.arch_init())
21 return 0;
22
Andi Kleen92c05fc2006-03-23 14:35:12 -080023#ifdef CONFIG_PCI_BIOS
24 pci_pcbios_init();
25#endif
Daniel Ritz954c0b72006-08-22 07:29:08 -070026 /*
27 * don't check for raw_pci_ops here because we want pcbios as last
28 * fallback, yet it's needed to run first to set pcibios_last_bus
29 * in case legacy PCI probing is used. otherwise detecting peer busses
30 * fails.
31 */
Andi Kleen92c05fc2006-03-23 14:35:12 -080032#ifdef CONFIG_PCI_DIRECT
Andi Kleen5e544d62006-09-26 10:52:40 +020033 pci_direct_init(type);
Andi Kleen92c05fc2006-03-23 14:35:12 -080034#endif
Yinghai Lubb63b422008-02-28 23:56:50 -080035 if (!raw_pci_ops && !raw_pci_ext_ops)
Andi Kleenf015c6c2006-10-05 18:47:22 +020036 printk(KERN_ERR
37 "PCI: Fatal: No config space access function found\n");
38
Yinghai Lu0df18ff2008-04-14 15:40:37 -070039 dmi_check_pciprobe();
40
Yinghai Lu13a6ddb2008-03-27 01:31:18 -070041 dmi_check_skip_isa_align();
42
Andi Kleen92c05fc2006-03-23 14:35:12 -080043 return 0;
44}
Robert Richter8dd779b2008-07-02 22:50:29 +020045arch_initcall(pci_arch_init);