LCOV - code coverage report
Current view: top level - drivers/pci - probe.c (source / functions) Hit Total Coverage
Test: combined.info Lines: 535 1301 41.1 %
Date: 2022-04-01 14:58:12 Functions: 41 84 48.8 %
Branches: 156 730 21.4 %

           Branch data     Line data    Source code
       1                 :            : // SPDX-License-Identifier: GPL-2.0
       2                 :            : /*
       3                 :            :  * PCI detection and setup code
       4                 :            :  */
       5                 :            : 
       6                 :            : #include <linux/kernel.h>
       7                 :            : #include <linux/delay.h>
       8                 :            : #include <linux/init.h>
       9                 :            : #include <linux/pci.h>
      10                 :            : #include <linux/msi.h>
      11                 :            : #include <linux/of_device.h>
      12                 :            : #include <linux/of_pci.h>
      13                 :            : #include <linux/pci_hotplug.h>
      14                 :            : #include <linux/slab.h>
      15                 :            : #include <linux/module.h>
      16                 :            : #include <linux/cpumask.h>
      17                 :            : #include <linux/aer.h>
      18                 :            : #include <linux/acpi.h>
      19                 :            : #include <linux/hypervisor.h>
      20                 :            : #include <linux/irqdomain.h>
      21                 :            : #include <linux/pm_runtime.h>
      22                 :            : #include "pci.h"
      23                 :            : 
      24                 :            : #define CARDBUS_LATENCY_TIMER   176     /* secondary latency timer */
      25                 :            : #define CARDBUS_RESERVE_BUSNR   3
      26                 :            : 
      27                 :            : static struct resource busn_resource = {
      28                 :            :         .name   = "PCI busn",
      29                 :            :         .start  = 0,
      30                 :            :         .end    = 255,
      31                 :            :         .flags  = IORESOURCE_BUS,
      32                 :            : };
      33                 :            : 
      34                 :            : /* Ugh.  Need to stop exporting this to modules. */
      35                 :            : LIST_HEAD(pci_root_buses);
      36                 :            : EXPORT_SYMBOL(pci_root_buses);
      37                 :            : 
      38                 :            : static LIST_HEAD(pci_domain_busn_res_list);
      39                 :            : 
      40                 :            : struct pci_domain_busn_res {
      41                 :            :         struct list_head list;
      42                 :            :         struct resource res;
      43                 :            :         int domain_nr;
      44                 :            : };
      45                 :            : 
      46                 :          3 : static struct resource *get_pci_domain_busn_res(int domain_nr)
      47                 :            : {
      48                 :          3 :         struct pci_domain_busn_res *r;
      49                 :            : 
      50         [ -  + ]:          3 :         list_for_each_entry(r, &pci_domain_busn_res_list, list)
      51         [ #  # ]:          0 :                 if (r->domain_nr == domain_nr)
      52                 :          0 :                         return &r->res;
      53                 :            : 
      54                 :          3 :         r = kzalloc(sizeof(*r), GFP_KERNEL);
      55         [ +  - ]:          3 :         if (!r)
      56                 :            :                 return NULL;
      57                 :            : 
      58                 :          3 :         r->domain_nr = domain_nr;
      59                 :          3 :         r->res.start = 0;
      60                 :          3 :         r->res.end = 0xff;
      61                 :          3 :         r->res.flags = IORESOURCE_BUS | IORESOURCE_PCI_FIXED;
      62                 :            : 
      63                 :          3 :         list_add_tail(&r->list, &pci_domain_busn_res_list);
      64                 :            : 
      65                 :          3 :         return &r->res;
      66                 :            : }
      67                 :            : 
      68                 :            : /*
      69                 :            :  * Some device drivers need know if PCI is initiated.
      70                 :            :  * Basically, we think PCI is not initiated when there
      71                 :            :  * is no device to be found on the pci_bus_type.
      72                 :            :  */
      73                 :          0 : int no_pci_devices(void)
      74                 :            : {
      75                 :          0 :         struct device *dev;
      76                 :          0 :         int no_devices;
      77                 :            : 
      78                 :          0 :         dev = bus_find_next_device(&pci_bus_type, NULL);
      79                 :          0 :         no_devices = (dev == NULL);
      80                 :          0 :         put_device(dev);
      81                 :          0 :         return no_devices;
      82                 :            : }
      83                 :            : EXPORT_SYMBOL(no_pci_devices);
      84                 :            : 
      85                 :            : /*
      86                 :            :  * PCI Bus Class
      87                 :            :  */
      88                 :          0 : static void release_pcibus_dev(struct device *dev)
      89                 :            : {
      90                 :          0 :         struct pci_bus *pci_bus = to_pci_bus(dev);
      91                 :            : 
      92                 :          0 :         put_device(pci_bus->bridge);
      93                 :          0 :         pci_bus_remove_resources(pci_bus);
      94                 :          0 :         pci_release_bus_of_node(pci_bus);
      95                 :          0 :         kfree(pci_bus);
      96                 :          0 : }
      97                 :            : 
      98                 :            : static struct class pcibus_class = {
      99                 :            :         .name           = "pci_bus",
     100                 :            :         .dev_release    = &release_pcibus_dev,
     101                 :            :         .dev_groups     = pcibus_groups,
     102                 :            : };
     103                 :            : 
     104                 :          3 : static int __init pcibus_class_init(void)
     105                 :            : {
     106                 :          3 :         return class_register(&pcibus_class);
     107                 :            : }
     108                 :            : postcore_initcall(pcibus_class_init);
     109                 :            : 
     110                 :         24 : static u64 pci_size(u64 base, u64 maxbase, u64 mask)
     111                 :            : {
     112                 :         24 :         u64 size = mask & maxbase;  /* Find the significant bits */
     113                 :         24 :         if (!size)
     114                 :            :                 return 0;
     115                 :            : 
     116                 :            :         /*
     117                 :            :          * Get the lowest of them to find the decode size, and from that
     118                 :            :          * the extent.
     119                 :            :          */
     120                 :         24 :         size = size & ~(size-1);
     121                 :            : 
     122                 :            :         /*
     123                 :            :          * base == maxbase can be valid only if the BAR has already been
     124                 :            :          * programmed with all 1s.
     125                 :            :          */
     126   [ -  +  -  - ]:         24 :         if (base == maxbase && ((base | (size - 1)) & mask) != mask)
     127                 :            :                 return 0;
     128                 :            : 
     129                 :            :         return size;
     130                 :            : }
     131                 :            : 
     132                 :        126 : static inline unsigned long decode_bar(struct pci_dev *dev, u32 bar)
     133                 :            : {
     134                 :        126 :         u32 mem_type;
     135                 :        126 :         unsigned long flags;
     136                 :            : 
     137                 :        126 :         if ((bar & PCI_BASE_ADDRESS_SPACE) == PCI_BASE_ADDRESS_SPACE_IO) {
     138                 :          3 :                 flags = bar & ~PCI_BASE_ADDRESS_IO_MASK;
     139                 :          3 :                 flags |= IORESOURCE_IO;
     140                 :          3 :                 return flags;
     141                 :            :         }
     142                 :            : 
     143                 :        123 :         flags = bar & ~PCI_BASE_ADDRESS_MEM_MASK;
     144                 :        123 :         flags |= IORESOURCE_MEM;
     145         [ +  + ]:        123 :         if (flags & PCI_BASE_ADDRESS_MEM_PREFETCH)
     146                 :          3 :                 flags |= IORESOURCE_PREFETCH;
     147                 :            : 
     148                 :        123 :         mem_type = bar & PCI_BASE_ADDRESS_MEM_TYPE_MASK;
     149         [ -  + ]:        123 :         switch (mem_type) {
     150                 :            :         case PCI_BASE_ADDRESS_MEM_TYPE_32:
     151                 :            :                 break;
     152                 :            :         case PCI_BASE_ADDRESS_MEM_TYPE_1M:
     153                 :            :                 /* 1M mem BAR treated as 32-bit BAR */
     154                 :            :                 break;
     155                 :          0 :         case PCI_BASE_ADDRESS_MEM_TYPE_64:
     156                 :          0 :                 flags |= IORESOURCE_MEM_64;
     157                 :          0 :                 break;
     158                 :            :         default:
     159                 :            :                 /* mem unknown type treated as 32-bit BAR */
     160                 :            :                 break;
     161                 :            :         }
     162                 :            :         return flags;
     163                 :            : }
     164                 :            : 
     165                 :            : #define PCI_COMMAND_DECODE_ENABLE       (PCI_COMMAND_MEMORY | PCI_COMMAND_IO)
     166                 :            : 
     167                 :            : /**
     168                 :            :  * pci_read_base - Read a PCI BAR
     169                 :            :  * @dev: the PCI device
     170                 :            :  * @type: type of the BAR
     171                 :            :  * @res: resource buffer to be filled in
     172                 :            :  * @pos: BAR position in the config space
     173                 :            :  *
     174                 :            :  * Returns 1 if the BAR is 64-bit, or 0 if 32-bit.
     175                 :            :  */
     176                 :        147 : int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type,
     177                 :            :                     struct resource *res, unsigned int pos)
     178                 :            : {
     179                 :        147 :         u32 l = 0, sz = 0, mask;
     180                 :        147 :         u64 l64, sz64, mask64;
     181                 :        147 :         u16 orig_cmd;
     182                 :        147 :         struct pci_bus_region region, inverted_region;
     183                 :            : 
     184         [ +  + ]:        147 :         mask = type ? PCI_ROM_ADDRESS_MASK : ~0;
     185                 :            : 
     186                 :            :         /* No printks while decoding is disabled! */
     187         [ +  + ]:        147 :         if (!dev->mmio_always_on) {
     188                 :        126 :                 pci_read_config_word(dev, PCI_COMMAND, &orig_cmd);
     189         [ +  - ]:        126 :                 if (orig_cmd & PCI_COMMAND_DECODE_ENABLE) {
     190                 :        126 :                         pci_write_config_word(dev, PCI_COMMAND,
     191                 :            :                                 orig_cmd & ~PCI_COMMAND_DECODE_ENABLE);
     192                 :            :                 }
     193                 :            :         }
     194                 :            : 
     195         [ +  - ]:        147 :         res->name = pci_name(dev);
     196                 :            : 
     197                 :        147 :         pci_read_config_dword(dev, pos, &l);
     198                 :        147 :         pci_write_config_dword(dev, pos, l | mask);
     199                 :        147 :         pci_read_config_dword(dev, pos, &sz);
     200                 :        147 :         pci_write_config_dword(dev, pos, l);
     201                 :            : 
     202                 :            :         /*
     203                 :            :          * All bits set in sz means the device isn't working properly.
     204                 :            :          * If the BAR isn't implemented, all bits must be 0.  If it's a
     205                 :            :          * memory BAR or a ROM, bit 0 must be clear; if it's an io BAR, bit
     206                 :            :          * 1 must be clear.
     207                 :            :          */
     208         [ -  + ]:        147 :         if (sz == 0xffffffff)
     209                 :          0 :                 sz = 0;
     210                 :            : 
     211                 :            :         /*
     212                 :            :          * I don't know how l can have all bits set.  Copied from old code.
     213                 :            :          * Maybe it fixes a bug on some ancient platform.
     214                 :            :          */
     215         [ -  + ]:        147 :         if (l == 0xffffffff)
     216                 :          0 :                 l = 0;
     217                 :            : 
     218         [ +  + ]:        147 :         if (type == pci_bar_unknown) {
     219         [ +  + ]:        126 :                 res->flags = decode_bar(dev, l);
     220                 :        126 :                 res->flags |= IORESOURCE_SIZEALIGN;
     221         [ +  + ]:        126 :                 if (res->flags & IORESOURCE_IO) {
     222                 :          3 :                         l64 = l & PCI_BASE_ADDRESS_IO_MASK;
     223                 :          3 :                         sz64 = sz & PCI_BASE_ADDRESS_IO_MASK;
     224                 :          3 :                         mask64 = PCI_BASE_ADDRESS_IO_MASK & (u32)IO_SPACE_LIMIT;
     225                 :            :                 } else {
     226                 :        123 :                         l64 = l & PCI_BASE_ADDRESS_MEM_MASK;
     227                 :        123 :                         sz64 = sz & PCI_BASE_ADDRESS_MEM_MASK;
     228                 :        123 :                         mask64 = (u32)PCI_BASE_ADDRESS_MEM_MASK;
     229                 :            :                 }
     230                 :            :         } else {
     231         [ -  + ]:         21 :                 if (l & PCI_ROM_ADDRESS_ENABLE)
     232                 :          0 :                         res->flags |= IORESOURCE_ROM_ENABLE;
     233                 :         21 :                 l64 = l & PCI_ROM_ADDRESS_MASK;
     234                 :         21 :                 sz64 = sz & PCI_ROM_ADDRESS_MASK;
     235                 :         21 :                 mask64 = PCI_ROM_ADDRESS_MASK;
     236                 :            :         }
     237                 :            : 
     238         [ -  + ]:        147 :         if (res->flags & IORESOURCE_MEM_64) {
     239                 :          0 :                 pci_read_config_dword(dev, pos + 4, &l);
     240                 :          0 :                 pci_write_config_dword(dev, pos + 4, ~0);
     241                 :          0 :                 pci_read_config_dword(dev, pos + 4, &sz);
     242                 :          0 :                 pci_write_config_dword(dev, pos + 4, l);
     243                 :            : 
     244                 :          0 :                 l64 |= ((u64)l << 32);
     245                 :          0 :                 sz64 |= ((u64)sz << 32);
     246                 :          0 :                 mask64 |= ((u64)~0 << 32);
     247                 :            :         }
     248                 :            : 
     249   [ +  +  +  - ]:        147 :         if (!dev->mmio_always_on && (orig_cmd & PCI_COMMAND_DECODE_ENABLE))
     250                 :        126 :                 pci_write_config_word(dev, PCI_COMMAND, orig_cmd);
     251                 :            : 
     252         [ +  + ]:        147 :         if (!sz64)
     253                 :        123 :                 goto fail;
     254                 :            : 
     255         [ +  - ]:         24 :         sz64 = pci_size(l64, sz64, mask64);
     256         [ -  + ]:         24 :         if (!sz64) {
     257                 :          0 :                 pci_info(dev, FW_BUG "reg 0x%x: invalid BAR (can't size)\n",
     258                 :            :                          pos);
     259                 :          0 :                 goto fail;
     260                 :            :         }
     261                 :            : 
     262                 :         24 :         if (res->flags & IORESOURCE_MEM_64) {
     263                 :            :                 if ((sizeof(pci_bus_addr_t) < 8 || sizeof(resource_size_t) < 8)
     264                 :            :                     && sz64 > 0x100000000ULL) {
     265                 :            :                         res->flags |= IORESOURCE_UNSET | IORESOURCE_DISABLED;
     266                 :            :                         res->start = 0;
     267                 :            :                         res->end = 0;
     268                 :            :                         pci_err(dev, "reg 0x%x: can't handle BAR larger than 4GB (size %#010llx)\n",
     269                 :            :                                 pos, (unsigned long long)sz64);
     270                 :            :                         goto out;
     271                 :            :                 }
     272                 :            : 
     273                 :            :                 if ((sizeof(pci_bus_addr_t) < 8) && l) {
     274                 :            :                         /* Above 32-bit boundary; try to reallocate */
     275                 :            :                         res->flags |= IORESOURCE_UNSET;
     276                 :            :                         res->start = 0;
     277                 :            :                         res->end = sz64 - 1;
     278                 :            :                         pci_info(dev, "reg 0x%x: can't handle BAR above 4GB (bus address %#010llx)\n",
     279                 :            :                                  pos, (unsigned long long)l64);
     280                 :            :                         goto out;
     281                 :            :                 }
     282                 :            :         }
     283                 :            : 
     284                 :         24 :         region.start = l64;
     285                 :         24 :         region.end = l64 + sz64 - 1;
     286                 :            : 
     287                 :         24 :         pcibios_bus_to_resource(dev->bus, res, &region);
     288                 :         24 :         pcibios_resource_to_bus(dev->bus, &inverted_region, res);
     289                 :            : 
     290                 :            :         /*
     291                 :            :          * If "A" is a BAR value (a bus address), "bus_to_resource(A)" is
     292                 :            :          * the corresponding resource address (the physical address used by
     293                 :            :          * the CPU.  Converting that resource address back to a bus address
     294                 :            :          * should yield the original BAR value:
     295                 :            :          *
     296                 :            :          *     resource_to_bus(bus_to_resource(A)) == A
     297                 :            :          *
     298                 :            :          * If it doesn't, CPU accesses to "bus_to_resource(A)" will not
     299                 :            :          * be claimed by the device.
     300                 :            :          */
     301         [ -  + ]:         24 :         if (inverted_region.start != region.start) {
     302                 :          0 :                 res->flags |= IORESOURCE_UNSET;
     303                 :          0 :                 res->start = 0;
     304                 :          0 :                 res->end = region.end - region.start;
     305                 :          0 :                 pci_info(dev, "reg 0x%x: initial BAR value %#010llx invalid\n",
     306                 :            :                          pos, (unsigned long long)region.start);
     307                 :            :         }
     308                 :            : 
     309                 :         24 :         goto out;
     310                 :            : 
     311                 :            : 
     312                 :        123 : fail:
     313                 :        123 :         res->flags = 0;
     314                 :        147 : out:
     315         [ +  + ]:        147 :         if (res->flags)
     316                 :         24 :                 pci_info(dev, "reg 0x%x: %pR\n", pos, res);
     317                 :            : 
     318                 :        147 :         return (res->flags & IORESOURCE_MEM_64) ? 1 : 0;
     319                 :            : }
     320                 :            : 
     321                 :         21 : static void pci_read_bases(struct pci_dev *dev, unsigned int howmany, int rom)
     322                 :            : {
     323                 :         21 :         unsigned int pos, reg;
     324                 :            : 
     325         [ +  - ]:         21 :         if (dev->non_compliant_bars)
     326                 :            :                 return;
     327                 :            : 
     328                 :            :         /* Per PCIe r4.0, sec 9.3.4.1.11, the VF BARs are all RO Zero */
     329         [ +  - ]:         21 :         if (dev->is_virtfn)
     330                 :            :                 return;
     331                 :            : 
     332         [ +  + ]:        147 :         for (pos = 0; pos < howmany; pos++) {
     333                 :        126 :                 struct resource *res = &dev->resource[pos];
     334                 :        126 :                 reg = PCI_BASE_ADDRESS_0 + (pos << 2);
     335                 :        126 :                 pos += __pci_read_base(dev, pci_bar_unknown, res, reg);
     336                 :            :         }
     337                 :            : 
     338         [ +  - ]:         21 :         if (rom) {
     339                 :         21 :                 struct resource *res = &dev->resource[PCI_ROM_RESOURCE];
     340                 :         21 :                 dev->rom_base_reg = rom;
     341                 :         21 :                 res->flags = IORESOURCE_MEM | IORESOURCE_PREFETCH |
     342                 :            :                                 IORESOURCE_READONLY | IORESOURCE_SIZEALIGN;
     343                 :         21 :                 __pci_read_base(dev, pci_bar_mem32, res, rom);
     344                 :            :         }
     345                 :            : }
     346                 :            : 
     347                 :          0 : static void pci_read_bridge_windows(struct pci_dev *bridge)
     348                 :            : {
     349                 :          0 :         u16 io;
     350                 :          0 :         u32 pmem, tmp;
     351                 :            : 
     352                 :          0 :         pci_read_config_word(bridge, PCI_IO_BASE, &io);
     353         [ #  # ]:          0 :         if (!io) {
     354                 :          0 :                 pci_write_config_word(bridge, PCI_IO_BASE, 0xe0f0);
     355                 :          0 :                 pci_read_config_word(bridge, PCI_IO_BASE, &io);
     356                 :          0 :                 pci_write_config_word(bridge, PCI_IO_BASE, 0x0);
     357                 :            :         }
     358         [ #  # ]:          0 :         if (io)
     359                 :          0 :                 bridge->io_window = 1;
     360                 :            : 
     361                 :            :         /*
     362                 :            :          * DECchip 21050 pass 2 errata: the bridge may miss an address
     363                 :            :          * disconnect boundary by one PCI data phase.  Workaround: do not
     364                 :            :          * use prefetching on this device.
     365                 :            :          */
     366         [ #  # ]:          0 :         if (bridge->vendor == PCI_VENDOR_ID_DEC && bridge->device == 0x0001)
     367                 :          0 :                 return;
     368                 :            : 
     369                 :          0 :         pci_read_config_dword(bridge, PCI_PREF_MEMORY_BASE, &pmem);
     370         [ #  # ]:          0 :         if (!pmem) {
     371                 :          0 :                 pci_write_config_dword(bridge, PCI_PREF_MEMORY_BASE,
     372                 :            :                                                0xffe0fff0);
     373                 :          0 :                 pci_read_config_dword(bridge, PCI_PREF_MEMORY_BASE, &pmem);
     374                 :          0 :                 pci_write_config_dword(bridge, PCI_PREF_MEMORY_BASE, 0x0);
     375                 :            :         }
     376         [ #  # ]:          0 :         if (!pmem)
     377                 :            :                 return;
     378                 :            : 
     379                 :          0 :         bridge->pref_window = 1;
     380                 :            : 
     381         [ #  # ]:          0 :         if ((pmem & PCI_PREF_RANGE_TYPE_MASK) == PCI_PREF_RANGE_TYPE_64) {
     382                 :            : 
     383                 :            :                 /*
     384                 :            :                  * Bridge claims to have a 64-bit prefetchable memory
     385                 :            :                  * window; verify that the upper bits are actually
     386                 :            :                  * writable.
     387                 :            :                  */
     388                 :          0 :                 pci_read_config_dword(bridge, PCI_PREF_BASE_UPPER32, &pmem);
     389                 :          0 :                 pci_write_config_dword(bridge, PCI_PREF_BASE_UPPER32,
     390                 :            :                                        0xffffffff);
     391                 :          0 :                 pci_read_config_dword(bridge, PCI_PREF_BASE_UPPER32, &tmp);
     392                 :          0 :                 pci_write_config_dword(bridge, PCI_PREF_BASE_UPPER32, pmem);
     393         [ #  # ]:          0 :                 if (tmp)
     394                 :          0 :                         bridge->pref_64_window = 1;
     395                 :            :         }
     396                 :            : }
     397                 :            : 
     398                 :            : static void pci_read_bridge_io(struct pci_bus *child)
     399                 :            : {
     400                 :            :         struct pci_dev *dev = child->self;
     401                 :            :         u8 io_base_lo, io_limit_lo;
     402                 :            :         unsigned long io_mask, io_granularity, base, limit;
     403                 :            :         struct pci_bus_region region;
     404                 :            :         struct resource *res;
     405                 :            : 
     406                 :            :         io_mask = PCI_IO_RANGE_MASK;
     407                 :            :         io_granularity = 0x1000;
     408                 :            :         if (dev->io_window_1k) {
     409                 :            :                 /* Support 1K I/O space granularity */
     410                 :            :                 io_mask = PCI_IO_1K_RANGE_MASK;
     411                 :            :                 io_granularity = 0x400;
     412                 :            :         }
     413                 :            : 
     414                 :            :         res = child->resource[0];
     415                 :            :         pci_read_config_byte(dev, PCI_IO_BASE, &io_base_lo);
     416                 :            :         pci_read_config_byte(dev, PCI_IO_LIMIT, &io_limit_lo);
     417                 :            :         base = (io_base_lo & io_mask) << 8;
     418                 :            :         limit = (io_limit_lo & io_mask) << 8;
     419                 :            : 
     420                 :            :         if ((io_base_lo & PCI_IO_RANGE_TYPE_MASK) == PCI_IO_RANGE_TYPE_32) {
     421                 :            :                 u16 io_base_hi, io_limit_hi;
     422                 :            : 
     423                 :            :                 pci_read_config_word(dev, PCI_IO_BASE_UPPER16, &io_base_hi);
     424                 :            :                 pci_read_config_word(dev, PCI_IO_LIMIT_UPPER16, &io_limit_hi);
     425                 :            :                 base |= ((unsigned long) io_base_hi << 16);
     426                 :            :                 limit |= ((unsigned long) io_limit_hi << 16);
     427                 :            :         }
     428                 :            : 
     429                 :            :         if (base <= limit) {
     430                 :            :                 res->flags = (io_base_lo & PCI_IO_RANGE_TYPE_MASK) | IORESOURCE_IO;
     431                 :            :                 region.start = base;
     432                 :            :                 region.end = limit + io_granularity - 1;
     433                 :            :                 pcibios_bus_to_resource(dev->bus, res, &region);
     434                 :            :                 pci_info(dev, "  bridge window %pR\n", res);
     435                 :            :         }
     436                 :            : }
     437                 :            : 
     438                 :            : static void pci_read_bridge_mmio(struct pci_bus *child)
     439                 :            : {
     440                 :            :         struct pci_dev *dev = child->self;
     441                 :            :         u16 mem_base_lo, mem_limit_lo;
     442                 :            :         unsigned long base, limit;
     443                 :            :         struct pci_bus_region region;
     444                 :            :         struct resource *res;
     445                 :            : 
     446                 :            :         res = child->resource[1];
     447                 :            :         pci_read_config_word(dev, PCI_MEMORY_BASE, &mem_base_lo);
     448                 :            :         pci_read_config_word(dev, PCI_MEMORY_LIMIT, &mem_limit_lo);
     449                 :            :         base = ((unsigned long) mem_base_lo & PCI_MEMORY_RANGE_MASK) << 16;
     450                 :            :         limit = ((unsigned long) mem_limit_lo & PCI_MEMORY_RANGE_MASK) << 16;
     451                 :            :         if (base <= limit) {
     452                 :            :                 res->flags = (mem_base_lo & PCI_MEMORY_RANGE_TYPE_MASK) | IORESOURCE_MEM;
     453                 :            :                 region.start = base;
     454                 :            :                 region.end = limit + 0xfffff;
     455                 :            :                 pcibios_bus_to_resource(dev->bus, res, &region);
     456                 :            :                 pci_info(dev, "  bridge window %pR\n", res);
     457                 :            :         }
     458                 :            : }
     459                 :            : 
     460                 :            : static void pci_read_bridge_mmio_pref(struct pci_bus *child)
     461                 :            : {
     462                 :            :         struct pci_dev *dev = child->self;
     463                 :            :         u16 mem_base_lo, mem_limit_lo;
     464                 :            :         u64 base64, limit64;
     465                 :            :         pci_bus_addr_t base, limit;
     466                 :            :         struct pci_bus_region region;
     467                 :            :         struct resource *res;
     468                 :            : 
     469                 :            :         res = child->resource[2];
     470                 :            :         pci_read_config_word(dev, PCI_PREF_MEMORY_BASE, &mem_base_lo);
     471                 :            :         pci_read_config_word(dev, PCI_PREF_MEMORY_LIMIT, &mem_limit_lo);
     472                 :            :         base64 = (mem_base_lo & PCI_PREF_RANGE_MASK) << 16;
     473                 :            :         limit64 = (mem_limit_lo & PCI_PREF_RANGE_MASK) << 16;
     474                 :            : 
     475                 :            :         if ((mem_base_lo & PCI_PREF_RANGE_TYPE_MASK) == PCI_PREF_RANGE_TYPE_64) {
     476                 :            :                 u32 mem_base_hi, mem_limit_hi;
     477                 :            : 
     478                 :            :                 pci_read_config_dword(dev, PCI_PREF_BASE_UPPER32, &mem_base_hi);
     479                 :            :                 pci_read_config_dword(dev, PCI_PREF_LIMIT_UPPER32, &mem_limit_hi);
     480                 :            : 
     481                 :            :                 /*
     482                 :            :                  * Some bridges set the base > limit by default, and some
     483                 :            :                  * (broken) BIOSes do not initialize them.  If we find
     484                 :            :                  * this, just assume they are not being used.
     485                 :            :                  */
     486                 :            :                 if (mem_base_hi <= mem_limit_hi) {
     487                 :            :                         base64 |= (u64) mem_base_hi << 32;
     488                 :            :                         limit64 |= (u64) mem_limit_hi << 32;
     489                 :            :                 }
     490                 :            :         }
     491                 :            : 
     492                 :            :         base = (pci_bus_addr_t) base64;
     493                 :            :         limit = (pci_bus_addr_t) limit64;
     494                 :            : 
     495                 :            :         if (base != base64) {
     496                 :            :                 pci_err(dev, "can't handle bridge window above 4GB (bus address %#010llx)\n",
     497                 :            :                         (unsigned long long) base64);
     498                 :            :                 return;
     499                 :            :         }
     500                 :            : 
     501                 :            :         if (base <= limit) {
     502                 :            :                 res->flags = (mem_base_lo & PCI_PREF_RANGE_TYPE_MASK) |
     503                 :            :                                          IORESOURCE_MEM | IORESOURCE_PREFETCH;
     504                 :            :                 if (res->flags & PCI_PREF_RANGE_TYPE_64)
     505                 :            :                         res->flags |= IORESOURCE_MEM_64;
     506                 :            :                 region.start = base;
     507                 :            :                 region.end = limit + 0xfffff;
     508                 :            :                 pcibios_bus_to_resource(dev->bus, res, &region);
     509                 :            :                 pci_info(dev, "  bridge window %pR\n", res);
     510                 :            :         }
     511                 :            : }
     512                 :            : 
     513                 :          3 : void pci_read_bridge_bases(struct pci_bus *child)
     514                 :            : {
     515                 :          3 :         struct pci_dev *dev = child->self;
     516                 :          3 :         struct resource *res;
     517                 :          3 :         int i;
     518                 :            : 
     519         [ -  + ]:          3 :         if (pci_is_root_bus(child))     /* It's a host bus, nothing to read */
     520                 :            :                 return;
     521                 :            : 
     522         [ #  # ]:          0 :         pci_info(dev, "PCI bridge to %pR%s\n",
     523                 :            :                  &child->busn_res,
     524                 :            :                  dev->transparent ? " (subtractive decode)" : "");
     525                 :            : 
     526                 :          0 :         pci_bus_remove_resources(child);
     527         [ #  # ]:          0 :         for (i = 0; i < PCI_BRIDGE_RESOURCE_NUM; i++)
     528                 :          0 :                 child->resource[i] = &dev->resource[PCI_BRIDGE_RESOURCES+i];
     529                 :            : 
     530                 :          0 :         pci_read_bridge_io(child);
     531                 :          0 :         pci_read_bridge_mmio(child);
     532                 :          0 :         pci_read_bridge_mmio_pref(child);
     533                 :            : 
     534         [ #  # ]:          0 :         if (dev->transparent) {
     535   [ #  #  #  # ]:          0 :                 pci_bus_for_each_resource(child->parent, res, i) {
     536   [ #  #  #  # ]:          0 :                         if (res && res->flags) {
     537                 :          0 :                                 pci_bus_add_resource(child, res,
     538                 :            :                                                      PCI_SUBTRACTIVE_DECODE);
     539                 :          0 :                                 pci_info(dev, "  bridge window %pR (subtractive decode)\n",
     540                 :            :                                            res);
     541                 :            :                         }
     542                 :            :                 }
     543                 :            :         }
     544                 :            : }
     545                 :            : 
     546                 :            : static struct pci_bus *pci_alloc_bus(struct pci_bus *parent)
     547                 :            : {
     548                 :            :         struct pci_bus *b;
     549                 :            : 
     550                 :            :         b = kzalloc(sizeof(*b), GFP_KERNEL);
     551                 :            :         if (!b)
     552                 :            :                 return NULL;
     553                 :            : 
     554                 :            :         INIT_LIST_HEAD(&b->node);
     555                 :            :         INIT_LIST_HEAD(&b->children);
     556                 :            :         INIT_LIST_HEAD(&b->devices);
     557                 :            :         INIT_LIST_HEAD(&b->slots);
     558                 :            :         INIT_LIST_HEAD(&b->resources);
     559                 :            :         b->max_bus_speed = PCI_SPEED_UNKNOWN;
     560                 :            :         b->cur_bus_speed = PCI_SPEED_UNKNOWN;
     561                 :            : #ifdef CONFIG_PCI_DOMAINS_GENERIC
     562                 :            :         if (parent)
     563                 :            :                 b->domain_nr = parent->domain_nr;
     564                 :            : #endif
     565                 :            :         return b;
     566                 :            : }
     567                 :            : 
     568                 :          0 : static void devm_pci_release_host_bridge_dev(struct device *dev)
     569                 :            : {
     570                 :          0 :         struct pci_host_bridge *bridge = to_pci_host_bridge(dev);
     571                 :            : 
     572         [ #  # ]:          0 :         if (bridge->release_fn)
     573                 :          0 :                 bridge->release_fn(bridge);
     574                 :            : 
     575                 :          0 :         pci_free_resource_list(&bridge->windows);
     576                 :          0 :         pci_free_resource_list(&bridge->dma_ranges);
     577                 :          0 : }
     578                 :            : 
     579                 :          0 : static void pci_release_host_bridge_dev(struct device *dev)
     580                 :            : {
     581                 :          0 :         devm_pci_release_host_bridge_dev(dev);
     582                 :          0 :         kfree(to_pci_host_bridge(dev));
     583                 :          0 : }
     584                 :            : 
     585                 :          3 : static void pci_init_host_bridge(struct pci_host_bridge *bridge)
     586                 :            : {
     587                 :          3 :         INIT_LIST_HEAD(&bridge->windows);
     588                 :          3 :         INIT_LIST_HEAD(&bridge->dma_ranges);
     589                 :            : 
     590                 :            :         /*
     591                 :            :          * We assume we can manage these PCIe features.  Some systems may
     592                 :            :          * reserve these for use by the platform itself, e.g., an ACPI BIOS
     593                 :            :          * may implement its own AER handling and use _OSC to prevent the
     594                 :            :          * OS from interfering.
     595                 :            :          */
     596                 :          3 :         bridge->native_aer = 1;
     597                 :          3 :         bridge->native_pcie_hotplug = 1;
     598                 :          3 :         bridge->native_shpc_hotplug = 1;
     599                 :          3 :         bridge->native_pme = 1;
     600                 :          3 :         bridge->native_ltr = 1;
     601                 :            : }
     602                 :            : 
     603                 :          3 : struct pci_host_bridge *pci_alloc_host_bridge(size_t priv)
     604                 :            : {
     605                 :          3 :         struct pci_host_bridge *bridge;
     606                 :            : 
     607                 :          3 :         bridge = kzalloc(sizeof(*bridge) + priv, GFP_KERNEL);
     608         [ +  - ]:          3 :         if (!bridge)
     609                 :            :                 return NULL;
     610                 :            : 
     611                 :          3 :         pci_init_host_bridge(bridge);
     612                 :          3 :         bridge->dev.release = pci_release_host_bridge_dev;
     613                 :            : 
     614                 :          3 :         return bridge;
     615                 :            : }
     616                 :            : EXPORT_SYMBOL(pci_alloc_host_bridge);
     617                 :            : 
     618                 :          0 : struct pci_host_bridge *devm_pci_alloc_host_bridge(struct device *dev,
     619                 :            :                                                    size_t priv)
     620                 :            : {
     621                 :          0 :         struct pci_host_bridge *bridge;
     622                 :            : 
     623                 :          0 :         bridge = devm_kzalloc(dev, sizeof(*bridge) + priv, GFP_KERNEL);
     624         [ #  # ]:          0 :         if (!bridge)
     625                 :            :                 return NULL;
     626                 :            : 
     627                 :          0 :         pci_init_host_bridge(bridge);
     628                 :          0 :         bridge->dev.release = devm_pci_release_host_bridge_dev;
     629                 :            : 
     630                 :          0 :         return bridge;
     631                 :            : }
     632                 :            : EXPORT_SYMBOL(devm_pci_alloc_host_bridge);
     633                 :            : 
     634                 :          0 : void pci_free_host_bridge(struct pci_host_bridge *bridge)
     635                 :            : {
     636                 :          0 :         pci_free_resource_list(&bridge->windows);
     637                 :          0 :         pci_free_resource_list(&bridge->dma_ranges);
     638                 :            : 
     639                 :          0 :         kfree(bridge);
     640                 :          0 : }
     641                 :            : EXPORT_SYMBOL(pci_free_host_bridge);
     642                 :            : 
     643                 :            : static const unsigned char pcix_bus_speed[] = {
     644                 :            :         PCI_SPEED_UNKNOWN,              /* 0 */
     645                 :            :         PCI_SPEED_66MHz_PCIX,           /* 1 */
     646                 :            :         PCI_SPEED_100MHz_PCIX,          /* 2 */
     647                 :            :         PCI_SPEED_133MHz_PCIX,          /* 3 */
     648                 :            :         PCI_SPEED_UNKNOWN,              /* 4 */
     649                 :            :         PCI_SPEED_66MHz_PCIX_ECC,       /* 5 */
     650                 :            :         PCI_SPEED_100MHz_PCIX_ECC,      /* 6 */
     651                 :            :         PCI_SPEED_133MHz_PCIX_ECC,      /* 7 */
     652                 :            :         PCI_SPEED_UNKNOWN,              /* 8 */
     653                 :            :         PCI_SPEED_66MHz_PCIX_266,       /* 9 */
     654                 :            :         PCI_SPEED_100MHz_PCIX_266,      /* A */
     655                 :            :         PCI_SPEED_133MHz_PCIX_266,      /* B */
     656                 :            :         PCI_SPEED_UNKNOWN,              /* C */
     657                 :            :         PCI_SPEED_66MHz_PCIX_533,       /* D */
     658                 :            :         PCI_SPEED_100MHz_PCIX_533,      /* E */
     659                 :            :         PCI_SPEED_133MHz_PCIX_533       /* F */
     660                 :            : };
     661                 :            : 
     662                 :            : const unsigned char pcie_link_speed[] = {
     663                 :            :         PCI_SPEED_UNKNOWN,              /* 0 */
     664                 :            :         PCIE_SPEED_2_5GT,               /* 1 */
     665                 :            :         PCIE_SPEED_5_0GT,               /* 2 */
     666                 :            :         PCIE_SPEED_8_0GT,               /* 3 */
     667                 :            :         PCIE_SPEED_16_0GT,              /* 4 */
     668                 :            :         PCIE_SPEED_32_0GT,              /* 5 */
     669                 :            :         PCI_SPEED_UNKNOWN,              /* 6 */
     670                 :            :         PCI_SPEED_UNKNOWN,              /* 7 */
     671                 :            :         PCI_SPEED_UNKNOWN,              /* 8 */
     672                 :            :         PCI_SPEED_UNKNOWN,              /* 9 */
     673                 :            :         PCI_SPEED_UNKNOWN,              /* A */
     674                 :            :         PCI_SPEED_UNKNOWN,              /* B */
     675                 :            :         PCI_SPEED_UNKNOWN,              /* C */
     676                 :            :         PCI_SPEED_UNKNOWN,              /* D */
     677                 :            :         PCI_SPEED_UNKNOWN,              /* E */
     678                 :            :         PCI_SPEED_UNKNOWN               /* F */
     679                 :            : };
     680                 :            : 
     681                 :          0 : void pcie_update_link_speed(struct pci_bus *bus, u16 linksta)
     682                 :            : {
     683                 :          0 :         bus->cur_bus_speed = pcie_link_speed[linksta & PCI_EXP_LNKSTA_CLS];
     684                 :          0 : }
     685                 :            : EXPORT_SYMBOL_GPL(pcie_update_link_speed);
     686                 :            : 
     687                 :            : static unsigned char agp_speeds[] = {
     688                 :            :         AGP_UNKNOWN,
     689                 :            :         AGP_1X,
     690                 :            :         AGP_2X,
     691                 :            :         AGP_4X,
     692                 :            :         AGP_8X
     693                 :            : };
     694                 :            : 
     695                 :          0 : static enum pci_bus_speed agp_speed(int agp3, int agpstat)
     696                 :            : {
     697                 :          0 :         int index = 0;
     698                 :            : 
     699                 :          0 :         if (agpstat & 4)
     700                 :            :                 index = 3;
     701   [ #  #  #  # ]:          0 :         else if (agpstat & 2)
     702                 :            :                 index = 2;
     703   [ #  #  #  # ]:          0 :         else if (agpstat & 1)
     704                 :            :                 index = 1;
     705                 :            :         else
     706                 :          0 :                 goto out;
     707                 :            : 
     708   [ #  #  #  # ]:          0 :         if (agp3) {
     709                 :          0 :                 index += 2;
     710   [ #  #  #  # ]:          0 :                 if (index == 5)
     711                 :          0 :                         index = 0;
     712                 :            :         }
     713                 :            : 
     714                 :          0 :  out:
     715                 :          0 :         return agp_speeds[index];
     716                 :            : }
     717                 :            : 
     718                 :          0 : static void pci_set_bus_speed(struct pci_bus *bus)
     719                 :            : {
     720                 :          0 :         struct pci_dev *bridge = bus->self;
     721                 :          0 :         int pos;
     722                 :            : 
     723                 :          0 :         pos = pci_find_capability(bridge, PCI_CAP_ID_AGP);
     724         [ #  # ]:          0 :         if (!pos)
     725                 :          0 :                 pos = pci_find_capability(bridge, PCI_CAP_ID_AGP3);
     726         [ #  # ]:          0 :         if (pos) {
     727                 :          0 :                 u32 agpstat, agpcmd;
     728                 :            : 
     729                 :          0 :                 pci_read_config_dword(bridge, pos + PCI_AGP_STATUS, &agpstat);
     730         [ #  # ]:          0 :                 bus->max_bus_speed = agp_speed(agpstat & 8, agpstat & 7);
     731                 :            : 
     732                 :          0 :                 pci_read_config_dword(bridge, pos + PCI_AGP_COMMAND, &agpcmd);
     733         [ #  # ]:          0 :                 bus->cur_bus_speed = agp_speed(agpstat & 8, agpcmd & 7);
     734                 :            :         }
     735                 :            : 
     736                 :          0 :         pos = pci_find_capability(bridge, PCI_CAP_ID_PCIX);
     737         [ #  # ]:          0 :         if (pos) {
     738                 :          0 :                 u16 status;
     739                 :          0 :                 enum pci_bus_speed max;
     740                 :            : 
     741                 :          0 :                 pci_read_config_word(bridge, pos + PCI_X_BRIDGE_SSTATUS,
     742                 :            :                                      &status);
     743                 :            : 
     744         [ #  # ]:          0 :                 if (status & PCI_X_SSTATUS_533MHZ) {
     745                 :            :                         max = PCI_SPEED_133MHz_PCIX_533;
     746         [ #  # ]:          0 :                 } else if (status & PCI_X_SSTATUS_266MHZ) {
     747                 :            :                         max = PCI_SPEED_133MHz_PCIX_266;
     748         [ #  # ]:          0 :                 } else if (status & PCI_X_SSTATUS_133MHZ) {
     749         [ #  # ]:          0 :                         if ((status & PCI_X_SSTATUS_VERS) == PCI_X_SSTATUS_V2)
     750                 :            :                                 max = PCI_SPEED_133MHz_PCIX_ECC;
     751                 :            :                         else
     752                 :          0 :                                 max = PCI_SPEED_133MHz_PCIX;
     753                 :            :                 } else {
     754                 :            :                         max = PCI_SPEED_66MHz_PCIX;
     755                 :            :                 }
     756                 :            : 
     757                 :          0 :                 bus->max_bus_speed = max;
     758                 :          0 :                 bus->cur_bus_speed = pcix_bus_speed[
     759                 :          0 :                         (status & PCI_X_SSTATUS_FREQ) >> 6];
     760                 :            : 
     761                 :          0 :                 return;
     762                 :            :         }
     763                 :            : 
     764         [ #  # ]:          0 :         if (pci_is_pcie(bridge)) {
     765                 :          0 :                 u32 linkcap;
     766                 :          0 :                 u16 linksta;
     767                 :            : 
     768                 :          0 :                 pcie_capability_read_dword(bridge, PCI_EXP_LNKCAP, &linkcap);
     769                 :          0 :                 bus->max_bus_speed = pcie_link_speed[linkcap & PCI_EXP_LNKCAP_SLS];
     770                 :          0 :                 bridge->link_active_reporting = !!(linkcap & PCI_EXP_LNKCAP_DLLLARC);
     771                 :            : 
     772                 :          0 :                 pcie_capability_read_word(bridge, PCI_EXP_LNKSTA, &linksta);
     773                 :          0 :                 pcie_update_link_speed(bus, linksta);
     774                 :            :         }
     775                 :            : }
     776                 :            : 
     777                 :          3 : static struct irq_domain *pci_host_bridge_msi_domain(struct pci_bus *bus)
     778                 :            : {
     779                 :          3 :         struct irq_domain *d;
     780                 :            : 
     781                 :            :         /*
     782                 :            :          * Any firmware interface that can resolve the msi_domain
     783                 :            :          * should be called from here.
     784                 :            :          */
     785                 :          3 :         d = pci_host_bridge_of_msi_domain(bus);
     786                 :          3 :         if (!d)
     787                 :          3 :                 d = pci_host_bridge_acpi_msi_domain(bus);
     788                 :            : 
     789                 :            : #ifdef CONFIG_PCI_MSI_IRQ_DOMAIN
     790                 :            :         /*
     791                 :            :          * If no IRQ domain was found via the OF tree, try looking it up
     792                 :            :          * directly through the fwnode_handle.
     793                 :            :          */
     794         [ +  - ]:          3 :         if (!d) {
     795         [ -  + ]:          3 :                 struct fwnode_handle *fwnode = pci_root_bus_fwnode(bus);
     796                 :            : 
     797         [ -  + ]:          3 :                 if (fwnode)
     798                 :          0 :                         d = irq_find_matching_fwnode(fwnode,
     799                 :            :                                                      DOMAIN_BUS_PCI_MSI);
     800                 :            :         }
     801                 :            : #endif
     802                 :            : 
     803                 :          3 :         return d;
     804                 :            : }
     805                 :            : 
     806                 :          3 : static void pci_set_bus_msi_domain(struct pci_bus *bus)
     807                 :            : {
     808                 :          3 :         struct irq_domain *d;
     809                 :          3 :         struct pci_bus *b;
     810                 :            : 
     811                 :            :         /*
     812                 :            :          * The bus can be a root bus, a subordinate bus, or a virtual bus
     813                 :            :          * created by an SR-IOV device.  Walk up to the first bridge device
     814                 :            :          * found or derive the domain from the host bridge.
     815                 :            :          */
     816   [ +  -  -  + ]:          3 :         for (b = bus, d = NULL; !d && !pci_is_root_bus(b); b = b->parent) {
     817         [ #  # ]:          0 :                 if (b->self)
     818                 :          0 :                         d = dev_get_msi_domain(&b->self->dev);
     819                 :            :         }
     820                 :            : 
     821         [ +  - ]:          3 :         if (!d)
     822                 :          3 :                 d = pci_host_bridge_msi_domain(b);
     823                 :            : 
     824                 :          3 :         dev_set_msi_domain(&bus->dev, d);
     825                 :          3 : }
     826                 :            : 
     827                 :          3 : static int pci_register_host_bridge(struct pci_host_bridge *bridge)
     828                 :            : {
     829                 :          3 :         struct device *parent = bridge->dev.parent;
     830                 :          3 :         struct resource_entry *window, *n;
     831                 :          3 :         struct pci_bus *bus, *b;
     832                 :          3 :         resource_size_t offset;
     833                 :          3 :         LIST_HEAD(resources);
     834                 :          3 :         struct resource *res;
     835                 :          3 :         char addr[64], *fmt;
     836                 :          3 :         const char *name;
     837                 :          3 :         int err;
     838                 :            : 
     839                 :          3 :         bus = pci_alloc_bus(NULL);
     840         [ +  - ]:          3 :         if (!bus)
     841                 :            :                 return -ENOMEM;
     842                 :            : 
     843                 :          3 :         bridge->bus = bus;
     844                 :            : 
     845                 :            :         /* Temporarily move resources off the list */
     846         [ +  - ]:          3 :         list_splice_init(&bridge->windows, &resources);
     847                 :          3 :         bus->sysdata = bridge->sysdata;
     848                 :          3 :         bus->msi = bridge->msi;
     849                 :          3 :         bus->ops = bridge->ops;
     850                 :          3 :         bus->number = bus->busn_res.start = bridge->busnr;
     851                 :            : #ifdef CONFIG_PCI_DOMAINS_GENERIC
     852                 :            :         bus->domain_nr = pci_bus_find_domain_nr(bus, parent);
     853                 :            : #endif
     854                 :            : 
     855                 :          3 :         b = pci_find_bus(pci_domain_nr(bus), bridge->busnr);
     856         [ -  + ]:          3 :         if (b) {
     857                 :            :                 /* Ignore it if we already got here via a different bridge */
     858                 :          0 :                 dev_dbg(&b->dev, "bus already known\n");
     859                 :          0 :                 err = -EEXIST;
     860                 :          0 :                 goto free;
     861                 :            :         }
     862                 :            : 
     863                 :          3 :         dev_set_name(&bridge->dev, "pci%04x:%02x", pci_domain_nr(bus),
     864                 :            :                      bridge->busnr);
     865                 :            : 
     866                 :          3 :         err = pcibios_root_bridge_prepare(bridge);
     867         [ -  + ]:          3 :         if (err)
     868                 :          0 :                 goto free;
     869                 :            : 
     870                 :          3 :         err = device_register(&bridge->dev);
     871         [ -  + ]:          3 :         if (err)
     872                 :          0 :                 put_device(&bridge->dev);
     873                 :            : 
     874                 :          3 :         bus->bridge = get_device(&bridge->dev);
     875         [ +  - ]:          3 :         device_enable_async_suspend(bus->bridge);
     876                 :          3 :         pci_set_bus_of_node(bus);
     877                 :          3 :         pci_set_bus_msi_domain(bus);
     878                 :            : 
     879         [ +  - ]:          3 :         if (!parent)
     880                 :          3 :                 set_dev_node(bus->bridge, pcibus_to_node(bus));
     881                 :            : 
     882                 :          3 :         bus->dev.class = &pcibus_class;
     883                 :          3 :         bus->dev.parent = bus->bridge;
     884                 :            : 
     885                 :          3 :         dev_set_name(&bus->dev, "%04x:%02x", pci_domain_nr(bus), bus->number);
     886         [ +  - ]:          3 :         name = dev_name(&bus->dev);
     887                 :            : 
     888                 :          3 :         err = device_register(&bus->dev);
     889         [ -  + ]:          3 :         if (err)
     890                 :          0 :                 goto unregister;
     891                 :            : 
     892                 :          3 :         pcibios_add_bus(bus);
     893                 :            : 
     894                 :            :         /* Create legacy_io and legacy_mem files for this bus */
     895         [ -  + ]:          3 :         pci_create_legacy_files(bus);
     896                 :            : 
     897         [ -  + ]:          3 :         if (parent)
     898                 :          0 :                 dev_info(parent, "PCI host bridge to bus %s\n", name);
     899                 :            :         else
     900                 :          3 :                 pr_info("PCI host bridge to bus %s\n", name);
     901                 :            : 
     902   [ -  +  -  - ]:          3 :         if (nr_node_ids > 1 && pcibus_to_node(bus) == NUMA_NO_NODE)
     903                 :          0 :                 dev_warn(&bus->dev, "Unknown NUMA node; performance will be reduced\n");
     904                 :            : 
     905                 :            :         /* Add initial resources to the bus */
     906         [ +  + ]:         18 :         resource_list_for_each_entry_safe(window, n, &resources) {
     907         [ +  + ]:         15 :                 list_move_tail(&window->node, &bridge->windows);
     908                 :         15 :                 offset = window->offset;
     909                 :         15 :                 res = window->res;
     910                 :            : 
     911         [ +  + ]:         15 :                 if (res->flags & IORESOURCE_BUS)
     912                 :          3 :                         pci_bus_insert_busn_res(bus, bus->number, res->end);
     913                 :            :                 else
     914                 :         12 :                         pci_bus_add_resource(bus, res, 0);
     915                 :            : 
     916         [ -  + ]:         15 :                 if (offset) {
     917         [ #  # ]:          0 :                         if (resource_type(res) == IORESOURCE_IO)
     918                 :            :                                 fmt = " (bus address [%#06llx-%#06llx])";
     919                 :            :                         else
     920                 :          0 :                                 fmt = " (bus address [%#010llx-%#010llx])";
     921                 :            : 
     922                 :          0 :                         snprintf(addr, sizeof(addr), fmt,
     923                 :          0 :                                  (unsigned long long)(res->start - offset),
     924                 :          0 :                                  (unsigned long long)(res->end - offset));
     925                 :            :                 } else
     926                 :         15 :                         addr[0] = '\0';
     927                 :            : 
     928                 :         15 :                 dev_info(&bus->dev, "root bus resource %pR%s\n", res, addr);
     929                 :            :         }
     930                 :            : 
     931                 :          3 :         down_write(&pci_bus_sem);
     932                 :          3 :         list_add_tail(&bus->node, &pci_root_buses);
     933                 :          3 :         up_write(&pci_bus_sem);
     934                 :            : 
     935                 :          3 :         return 0;
     936                 :            : 
     937                 :            : unregister:
     938                 :          0 :         put_device(&bridge->dev);
     939                 :          0 :         device_unregister(&bridge->dev);
     940                 :            : 
     941                 :          0 : free:
     942                 :          0 :         kfree(bus);
     943                 :          0 :         return err;
     944                 :            : }
     945                 :            : 
     946                 :          0 : static bool pci_bridge_child_ext_cfg_accessible(struct pci_dev *bridge)
     947                 :            : {
     948                 :          0 :         int pos;
     949                 :          0 :         u32 status;
     950                 :            : 
     951                 :            :         /*
     952                 :            :          * If extended config space isn't accessible on a bridge's primary
     953                 :            :          * bus, we certainly can't access it on the secondary bus.
     954                 :            :          */
     955         [ #  # ]:          0 :         if (bridge->bus->bus_flags & PCI_BUS_FLAGS_NO_EXTCFG)
     956                 :            :                 return false;
     957                 :            : 
     958                 :            :         /*
     959                 :            :          * PCIe Root Ports and switch ports are PCIe on both sides, so if
     960                 :            :          * extended config space is accessible on the primary, it's also
     961                 :            :          * accessible on the secondary.
     962                 :            :          */
     963   [ #  #  #  # ]:          0 :         if (pci_is_pcie(bridge) &&
     964         [ #  # ]:          0 :             (pci_pcie_type(bridge) == PCI_EXP_TYPE_ROOT_PORT ||
     965         [ #  # ]:          0 :              pci_pcie_type(bridge) == PCI_EXP_TYPE_UPSTREAM ||
     966                 :            :              pci_pcie_type(bridge) == PCI_EXP_TYPE_DOWNSTREAM))
     967                 :            :                 return true;
     968                 :            : 
     969                 :            :         /*
     970                 :            :          * For the other bridge types:
     971                 :            :          *   - PCI-to-PCI bridges
     972                 :            :          *   - PCIe-to-PCI/PCI-X forward bridges
     973                 :            :          *   - PCI/PCI-X-to-PCIe reverse bridges
     974                 :            :          * extended config space on the secondary side is only accessible
     975                 :            :          * if the bridge supports PCI-X Mode 2.
     976                 :            :          */
     977                 :          0 :         pos = pci_find_capability(bridge, PCI_CAP_ID_PCIX);
     978         [ #  # ]:          0 :         if (!pos)
     979                 :            :                 return false;
     980                 :            : 
     981                 :          0 :         pci_read_config_dword(bridge, pos + PCI_X_STATUS, &status);
     982                 :          0 :         return status & (PCI_X_STATUS_266MHZ | PCI_X_STATUS_533MHZ);
     983                 :            : }
     984                 :            : 
     985                 :          0 : static struct pci_bus *pci_alloc_child_bus(struct pci_bus *parent,
     986                 :            :                                            struct pci_dev *bridge, int busnr)
     987                 :            : {
     988                 :          0 :         struct pci_bus *child;
     989                 :          0 :         int i;
     990                 :          0 :         int ret;
     991                 :            : 
     992                 :            :         /* Allocate a new bus and inherit stuff from the parent */
     993                 :          0 :         child = pci_alloc_bus(parent);
     994         [ #  # ]:          0 :         if (!child)
     995                 :            :                 return NULL;
     996                 :            : 
     997                 :          0 :         child->parent = parent;
     998                 :          0 :         child->ops = parent->ops;
     999                 :          0 :         child->msi = parent->msi;
    1000                 :          0 :         child->sysdata = parent->sysdata;
    1001                 :          0 :         child->bus_flags = parent->bus_flags;
    1002                 :            : 
    1003                 :            :         /*
    1004                 :            :          * Initialize some portions of the bus device, but don't register
    1005                 :            :          * it now as the parent is not properly set up yet.
    1006                 :            :          */
    1007                 :          0 :         child->dev.class = &pcibus_class;
    1008                 :          0 :         dev_set_name(&child->dev, "%04x:%02x", pci_domain_nr(child), busnr);
    1009                 :            : 
    1010                 :            :         /* Set up the primary, secondary and subordinate bus numbers */
    1011                 :          0 :         child->number = child->busn_res.start = busnr;
    1012                 :          0 :         child->primary = parent->busn_res.start;
    1013                 :          0 :         child->busn_res.end = 0xff;
    1014                 :            : 
    1015         [ #  # ]:          0 :         if (!bridge) {
    1016                 :          0 :                 child->dev.parent = parent->bridge;
    1017                 :          0 :                 goto add_dev;
    1018                 :            :         }
    1019                 :            : 
    1020                 :          0 :         child->self = bridge;
    1021                 :          0 :         child->bridge = get_device(&bridge->dev);
    1022                 :          0 :         child->dev.parent = child->bridge;
    1023                 :          0 :         pci_set_bus_of_node(child);
    1024                 :          0 :         pci_set_bus_speed(child);
    1025                 :            : 
    1026                 :            :         /*
    1027                 :            :          * Check whether extended config space is accessible on the child
    1028                 :            :          * bus.  Note that we currently assume it is always accessible on
    1029                 :            :          * the root bus.
    1030                 :            :          */
    1031         [ #  # ]:          0 :         if (!pci_bridge_child_ext_cfg_accessible(bridge)) {
    1032                 :          0 :                 child->bus_flags |= PCI_BUS_FLAGS_NO_EXTCFG;
    1033                 :          0 :                 pci_info(child, "extended config space not accessible\n");
    1034                 :            :         }
    1035                 :            : 
    1036                 :            :         /* Set up default resource pointers and names */
    1037         [ #  # ]:          0 :         for (i = 0; i < PCI_BRIDGE_RESOURCE_NUM; i++) {
    1038                 :          0 :                 child->resource[i] = &bridge->resource[PCI_BRIDGE_RESOURCES+i];
    1039                 :          0 :                 child->resource[i]->name = child->name;
    1040                 :            :         }
    1041                 :          0 :         bridge->subordinate = child;
    1042                 :            : 
    1043                 :          0 : add_dev:
    1044                 :          0 :         pci_set_bus_msi_domain(child);
    1045                 :          0 :         ret = device_register(&child->dev);
    1046         [ #  # ]:          0 :         WARN_ON(ret < 0);
    1047                 :            : 
    1048                 :          0 :         pcibios_add_bus(child);
    1049                 :            : 
    1050         [ #  # ]:          0 :         if (child->ops->add_bus) {
    1051                 :          0 :                 ret = child->ops->add_bus(child);
    1052   [ #  #  #  # ]:          0 :                 if (WARN_ON(ret < 0))
    1053                 :          0 :                         dev_err(&child->dev, "failed to add bus: %d\n", ret);
    1054                 :            :         }
    1055                 :            : 
    1056                 :            :         /* Create legacy_io and legacy_mem files for this bus */
    1057                 :            :         pci_create_legacy_files(child);
    1058                 :            : 
    1059                 :            :         return child;
    1060                 :            : }
    1061                 :            : 
    1062                 :          0 : struct pci_bus *pci_add_new_bus(struct pci_bus *parent, struct pci_dev *dev,
    1063                 :            :                                 int busnr)
    1064                 :            : {
    1065                 :          0 :         struct pci_bus *child;
    1066                 :            : 
    1067                 :          0 :         child = pci_alloc_child_bus(parent, dev, busnr);
    1068         [ #  # ]:          0 :         if (child) {
    1069                 :          0 :                 down_write(&pci_bus_sem);
    1070                 :          0 :                 list_add_tail(&child->node, &parent->children);
    1071                 :          0 :                 up_write(&pci_bus_sem);
    1072                 :            :         }
    1073                 :          0 :         return child;
    1074                 :            : }
    1075                 :            : EXPORT_SYMBOL(pci_add_new_bus);
    1076                 :            : 
    1077                 :          0 : static void pci_enable_crs(struct pci_dev *pdev)
    1078                 :            : {
    1079                 :          0 :         u16 root_cap = 0;
    1080                 :            : 
    1081                 :            :         /* Enable CRS Software Visibility if supported */
    1082                 :          0 :         pcie_capability_read_word(pdev, PCI_EXP_RTCAP, &root_cap);
    1083         [ #  # ]:          0 :         if (root_cap & PCI_EXP_RTCAP_CRSVIS)
    1084                 :          0 :                 pcie_capability_set_word(pdev, PCI_EXP_RTCTL,
    1085                 :            :                                          PCI_EXP_RTCTL_CRSSVE);
    1086                 :          0 : }
    1087                 :            : 
    1088                 :            : static unsigned int pci_scan_child_bus_extend(struct pci_bus *bus,
    1089                 :            :                                               unsigned int available_buses);
    1090                 :            : /**
    1091                 :            :  * pci_ea_fixed_busnrs() - Read fixed Secondary and Subordinate bus
    1092                 :            :  * numbers from EA capability.
    1093                 :            :  * @dev: Bridge
    1094                 :            :  * @sec: updated with secondary bus number from EA
    1095                 :            :  * @sub: updated with subordinate bus number from EA
    1096                 :            :  *
    1097                 :            :  * If @dev is a bridge with EA capability that specifies valid secondary
    1098                 :            :  * and subordinate bus numbers, return true with the bus numbers in @sec
    1099                 :            :  * and @sub.  Otherwise return false.
    1100                 :            :  */
    1101                 :          0 : static bool pci_ea_fixed_busnrs(struct pci_dev *dev, u8 *sec, u8 *sub)
    1102                 :            : {
    1103                 :          0 :         int ea, offset;
    1104                 :          0 :         u32 dw;
    1105                 :          0 :         u8 ea_sec, ea_sub;
    1106                 :            : 
    1107         [ #  # ]:          0 :         if (dev->hdr_type != PCI_HEADER_TYPE_BRIDGE)
    1108                 :            :                 return false;
    1109                 :            : 
    1110                 :            :         /* find PCI EA capability in list */
    1111                 :          0 :         ea = pci_find_capability(dev, PCI_CAP_ID_EA);
    1112         [ #  # ]:          0 :         if (!ea)
    1113                 :            :                 return false;
    1114                 :            : 
    1115                 :          0 :         offset = ea + PCI_EA_FIRST_ENT;
    1116                 :          0 :         pci_read_config_dword(dev, offset, &dw);
    1117                 :          0 :         ea_sec =  dw & PCI_EA_SEC_BUS_MASK;
    1118                 :          0 :         ea_sub = (dw & PCI_EA_SUB_BUS_MASK) >> PCI_EA_SUB_BUS_SHIFT;
    1119         [ #  # ]:          0 :         if (ea_sec  == 0 || ea_sub < ea_sec)
    1120                 :            :                 return false;
    1121                 :            : 
    1122                 :          0 :         *sec = ea_sec;
    1123                 :          0 :         *sub = ea_sub;
    1124                 :          0 :         return true;
    1125                 :            : }
    1126                 :            : 
    1127                 :            : /*
    1128                 :            :  * pci_scan_bridge_extend() - Scan buses behind a bridge
    1129                 :            :  * @bus: Parent bus the bridge is on
    1130                 :            :  * @dev: Bridge itself
    1131                 :            :  * @max: Starting subordinate number of buses behind this bridge
    1132                 :            :  * @available_buses: Total number of buses available for this bridge and
    1133                 :            :  *                   the devices below. After the minimal bus space has
    1134                 :            :  *                   been allocated the remaining buses will be
    1135                 :            :  *                   distributed equally between hotplug-capable bridges.
    1136                 :            :  * @pass: Either %0 (scan already configured bridges) or %1 (scan bridges
    1137                 :            :  *        that need to be reconfigured.
    1138                 :            :  *
    1139                 :            :  * If it's a bridge, configure it and scan the bus behind it.
    1140                 :            :  * For CardBus bridges, we don't scan behind as the devices will
    1141                 :            :  * be handled by the bridge driver itself.
    1142                 :            :  *
    1143                 :            :  * We need to process bridges in two passes -- first we scan those
    1144                 :            :  * already configured by the BIOS and after we are done with all of
    1145                 :            :  * them, we proceed to assigning numbers to the remaining buses in
    1146                 :            :  * order to avoid overlaps between old and new bus numbers.
    1147                 :            :  *
    1148                 :            :  * Return: New subordinate number covering all buses behind this bridge.
    1149                 :            :  */
    1150                 :          0 : static int pci_scan_bridge_extend(struct pci_bus *bus, struct pci_dev *dev,
    1151                 :            :                                   int max, unsigned int available_buses,
    1152                 :            :                                   int pass)
    1153                 :            : {
    1154                 :          0 :         struct pci_bus *child;
    1155                 :          0 :         int is_cardbus = (dev->hdr_type == PCI_HEADER_TYPE_CARDBUS);
    1156                 :          0 :         u32 buses, i, j = 0;
    1157                 :          0 :         u16 bctl;
    1158                 :          0 :         u8 primary, secondary, subordinate;
    1159                 :          0 :         int broken = 0;
    1160                 :          0 :         bool fixed_buses;
    1161                 :          0 :         u8 fixed_sec, fixed_sub;
    1162                 :          0 :         int next_busnr;
    1163                 :            : 
    1164                 :            :         /*
    1165                 :            :          * Make sure the bridge is powered on to be able to access config
    1166                 :            :          * space of devices below it.
    1167                 :            :          */
    1168                 :          0 :         pm_runtime_get_sync(&dev->dev);
    1169                 :            : 
    1170                 :          0 :         pci_read_config_dword(dev, PCI_PRIMARY_BUS, &buses);
    1171                 :          0 :         primary = buses & 0xFF;
    1172                 :          0 :         secondary = (buses >> 8) & 0xFF;
    1173                 :          0 :         subordinate = (buses >> 16) & 0xFF;
    1174                 :            : 
    1175                 :          0 :         pci_dbg(dev, "scanning [bus %02x-%02x] behind bridge, pass %d\n",
    1176                 :            :                 secondary, subordinate, pass);
    1177                 :            : 
    1178   [ #  #  #  #  :          0 :         if (!primary && (primary != bus->number) && secondary && subordinate) {
                   #  # ]
    1179                 :          0 :                 pci_warn(dev, "Primary bus is hard wired to 0\n");
    1180                 :          0 :                 primary = bus->number;
    1181                 :            :         }
    1182                 :            : 
    1183                 :            :         /* Check if setup is sensible at all */
    1184         [ #  # ]:          0 :         if (!pass &&
    1185   [ #  #  #  #  :          0 :             (primary != bus->number || secondary <= bus->number ||
                   #  # ]
    1186                 :            :              secondary > subordinate)) {
    1187                 :          0 :                 pci_info(dev, "bridge configuration invalid ([bus %02x-%02x]), reconfiguring\n",
    1188                 :            :                          secondary, subordinate);
    1189                 :          0 :                 broken = 1;
    1190                 :            :         }
    1191                 :            : 
    1192                 :            :         /*
    1193                 :            :          * Disable Master-Abort Mode during probing to avoid reporting of
    1194                 :            :          * bus errors in some architectures.
    1195                 :            :          */
    1196                 :          0 :         pci_read_config_word(dev, PCI_BRIDGE_CONTROL, &bctl);
    1197                 :          0 :         pci_write_config_word(dev, PCI_BRIDGE_CONTROL,
    1198                 :          0 :                               bctl & ~PCI_BRIDGE_CTL_MASTER_ABORT);
    1199                 :            : 
    1200                 :          0 :         pci_enable_crs(dev);
    1201                 :            : 
    1202   [ #  #  #  # ]:          0 :         if ((secondary || subordinate) && !pcibios_assign_all_busses() &&
    1203         [ #  # ]:          0 :             !is_cardbus && !broken) {
    1204                 :          0 :                 unsigned int cmax;
    1205                 :            : 
    1206                 :            :                 /*
    1207                 :            :                  * Bus already configured by firmware, process it in the
    1208                 :            :                  * first pass and just note the configuration.
    1209                 :            :                  */
    1210         [ #  # ]:          0 :                 if (pass)
    1211                 :          0 :                         goto out;
    1212                 :            : 
    1213                 :            :                 /*
    1214                 :            :                  * The bus might already exist for two reasons: Either we
    1215                 :            :                  * are rescanning the bus or the bus is reachable through
    1216                 :            :                  * more than one bridge. The second case can happen with
    1217                 :            :                  * the i450NX chipset.
    1218                 :            :                  */
    1219                 :          0 :                 child = pci_find_bus(pci_domain_nr(bus), secondary);
    1220         [ #  # ]:          0 :                 if (!child) {
    1221                 :          0 :                         child = pci_add_new_bus(bus, dev, secondary);
    1222         [ #  # ]:          0 :                         if (!child)
    1223                 :          0 :                                 goto out;
    1224                 :          0 :                         child->primary = primary;
    1225                 :          0 :                         pci_bus_insert_busn_res(child, secondary, subordinate);
    1226                 :          0 :                         child->bridge_ctl = bctl;
    1227                 :            :                 }
    1228                 :            : 
    1229                 :          0 :                 cmax = pci_scan_child_bus(child);
    1230         [ #  # ]:          0 :                 if (cmax > subordinate)
    1231                 :          0 :                         pci_warn(dev, "bridge has subordinate %02x but max busn %02x\n",
    1232                 :            :                                  subordinate, cmax);
    1233                 :            : 
    1234                 :            :                 /* Subordinate should equal child->busn_res.end */
    1235                 :          0 :                 if (subordinate > max)
    1236                 :            :                         max = subordinate;
    1237                 :            :         } else {
    1238                 :            : 
    1239                 :            :                 /*
    1240                 :            :                  * We need to assign a number to this bus which we always
    1241                 :            :                  * do in the second pass.
    1242                 :            :                  */
    1243         [ #  # ]:          0 :                 if (!pass) {
    1244   [ #  #  #  # ]:          0 :                         if (pcibios_assign_all_busses() || broken || is_cardbus)
    1245                 :            : 
    1246                 :            :                                 /*
    1247                 :            :                                  * Temporarily disable forwarding of the
    1248                 :            :                                  * configuration cycles on all bridges in
    1249                 :            :                                  * this bus segment to avoid possible
    1250                 :            :                                  * conflicts in the second pass between two
    1251                 :            :                                  * bridges programmed with overlapping bus
    1252                 :            :                                  * ranges.
    1253                 :            :                                  */
    1254                 :          0 :                                 pci_write_config_dword(dev, PCI_PRIMARY_BUS,
    1255                 :            :                                                        buses & ~0xffffff);
    1256                 :          0 :                         goto out;
    1257                 :            :                 }
    1258                 :            : 
    1259                 :            :                 /* Clear errors */
    1260                 :          0 :                 pci_write_config_word(dev, PCI_STATUS, 0xffff);
    1261                 :            : 
    1262                 :            :                 /* Read bus numbers from EA Capability (if present) */
    1263                 :          0 :                 fixed_buses = pci_ea_fixed_busnrs(dev, &fixed_sec, &fixed_sub);
    1264         [ #  # ]:          0 :                 if (fixed_buses)
    1265                 :          0 :                         next_busnr = fixed_sec;
    1266                 :            :                 else
    1267                 :          0 :                         next_busnr = max + 1;
    1268                 :            : 
    1269                 :            :                 /*
    1270                 :            :                  * Prevent assigning a bus number that already exists.
    1271                 :            :                  * This can happen when a bridge is hot-plugged, so in this
    1272                 :            :                  * case we only re-scan this bus.
    1273                 :            :                  */
    1274                 :          0 :                 child = pci_find_bus(pci_domain_nr(bus), next_busnr);
    1275         [ #  # ]:          0 :                 if (!child) {
    1276                 :          0 :                         child = pci_add_new_bus(bus, dev, next_busnr);
    1277         [ #  # ]:          0 :                         if (!child)
    1278                 :          0 :                                 goto out;
    1279                 :          0 :                         pci_bus_insert_busn_res(child, next_busnr,
    1280                 :          0 :                                                 bus->busn_res.end);
    1281                 :            :                 }
    1282                 :          0 :                 max++;
    1283         [ #  # ]:          0 :                 if (available_buses)
    1284                 :          0 :                         available_buses--;
    1285                 :            : 
    1286                 :          0 :                 buses = (buses & 0xff000000)
    1287                 :          0 :                       | ((unsigned int)(child->primary)     <<  0)
    1288                 :          0 :                       | ((unsigned int)(child->busn_res.start)   <<  8)
    1289                 :          0 :                       | ((unsigned int)(child->busn_res.end) << 16);
    1290                 :            : 
    1291                 :            :                 /*
    1292                 :            :                  * yenta.c forces a secondary latency timer of 176.
    1293                 :            :                  * Copy that behaviour here.
    1294                 :            :                  */
    1295         [ #  # ]:          0 :                 if (is_cardbus) {
    1296                 :          0 :                         buses &= ~0xff000000;
    1297                 :          0 :                         buses |= CARDBUS_LATENCY_TIMER << 24;
    1298                 :            :                 }
    1299                 :            : 
    1300                 :            :                 /* We need to blast all three values with a single write */
    1301                 :          0 :                 pci_write_config_dword(dev, PCI_PRIMARY_BUS, buses);
    1302                 :            : 
    1303         [ #  # ]:          0 :                 if (!is_cardbus) {
    1304                 :          0 :                         child->bridge_ctl = bctl;
    1305                 :          0 :                         max = pci_scan_child_bus_extend(child, available_buses);
    1306                 :            :                 } else {
    1307                 :            : 
    1308                 :            :                         /*
    1309                 :            :                          * For CardBus bridges, we leave 4 bus numbers as
    1310                 :            :                          * cards with a PCI-to-PCI bridge can be inserted
    1311                 :            :                          * later.
    1312                 :            :                          */
    1313         [ #  # ]:          0 :                         for (i = 0; i < CARDBUS_RESERVE_BUSNR; i++) {
    1314                 :          0 :                                 struct pci_bus *parent = bus;
    1315         [ #  # ]:          0 :                                 if (pci_find_bus(pci_domain_nr(bus),
    1316                 :          0 :                                                         max+i+1))
    1317                 :            :                                         break;
    1318         [ #  # ]:          0 :                                 while (parent->parent) {
    1319         [ #  # ]:          0 :                                         if ((!pcibios_assign_all_busses()) &&
    1320         [ #  # ]:          0 :                                             (parent->busn_res.end > max) &&
    1321         [ #  # ]:          0 :                                             (parent->busn_res.end <= max+i)) {
    1322                 :          0 :                                                 j = 1;
    1323                 :            :                                         }
    1324                 :          0 :                                         parent = parent->parent;
    1325                 :            :                                 }
    1326         [ #  # ]:          0 :                                 if (j) {
    1327                 :            : 
    1328                 :            :                                         /*
    1329                 :            :                                          * Often, there are two CardBus
    1330                 :            :                                          * bridges -- try to leave one
    1331                 :            :                                          * valid bus number for each one.
    1332                 :            :                                          */
    1333                 :          0 :                                         i /= 2;
    1334                 :          0 :                                         break;
    1335                 :            :                                 }
    1336                 :            :                         }
    1337                 :          0 :                         max += i;
    1338                 :            :                 }
    1339                 :            : 
    1340                 :            :                 /*
    1341                 :            :                  * Set subordinate bus number to its real value.
    1342                 :            :                  * If fixed subordinate bus number exists from EA
    1343                 :            :                  * capability then use it.
    1344                 :            :                  */
    1345         [ #  # ]:          0 :                 if (fixed_buses)
    1346                 :          0 :                         max = fixed_sub;
    1347                 :          0 :                 pci_bus_update_busn_res_end(child, max);
    1348                 :          0 :                 pci_write_config_byte(dev, PCI_SUBORDINATE_BUS, max);
    1349                 :            :         }
    1350                 :            : 
    1351                 :          0 :         sprintf(child->name,
    1352                 :            :                 (is_cardbus ? "PCI CardBus %04x:%02x" : "PCI Bus %04x:%02x"),
    1353         [ #  # ]:          0 :                 pci_domain_nr(bus), child->number);
    1354                 :            : 
    1355                 :            :         /* Check that all devices are accessible */
    1356         [ #  # ]:          0 :         while (bus->parent) {
    1357         [ #  # ]:          0 :                 if ((child->busn_res.end > bus->busn_res.end) ||
    1358         [ #  # ]:          0 :                     (child->number > bus->busn_res.end) ||
    1359         [ #  # ]:          0 :                     (child->number < bus->number) ||
    1360         [ #  # ]:          0 :                     (child->busn_res.end < bus->number)) {
    1361                 :          0 :                         dev_info(&dev->dev, "devices behind bridge are unusable because %pR cannot be assigned for them\n",
    1362                 :            :                                  &child->busn_res);
    1363                 :          0 :                         break;
    1364                 :            :                 }
    1365                 :            :                 bus = bus->parent;
    1366                 :            :         }
    1367                 :            : 
    1368                 :          0 : out:
    1369                 :          0 :         pci_write_config_word(dev, PCI_BRIDGE_CONTROL, bctl);
    1370                 :            : 
    1371                 :          0 :         pm_runtime_put(&dev->dev);
    1372                 :            : 
    1373                 :          0 :         return max;
    1374                 :            : }
    1375                 :            : 
    1376                 :            : /*
    1377                 :            :  * pci_scan_bridge() - Scan buses behind a bridge
    1378                 :            :  * @bus: Parent bus the bridge is on
    1379                 :            :  * @dev: Bridge itself
    1380                 :            :  * @max: Starting subordinate number of buses behind this bridge
    1381                 :            :  * @pass: Either %0 (scan already configured bridges) or %1 (scan bridges
    1382                 :            :  *        that need to be reconfigured.
    1383                 :            :  *
    1384                 :            :  * If it's a bridge, configure it and scan the bus behind it.
    1385                 :            :  * For CardBus bridges, we don't scan behind as the devices will
    1386                 :            :  * be handled by the bridge driver itself.
    1387                 :            :  *
    1388                 :            :  * We need to process bridges in two passes -- first we scan those
    1389                 :            :  * already configured by the BIOS and after we are done with all of
    1390                 :            :  * them, we proceed to assigning numbers to the remaining buses in
    1391                 :            :  * order to avoid overlaps between old and new bus numbers.
    1392                 :            :  *
    1393                 :            :  * Return: New subordinate number covering all buses behind this bridge.
    1394                 :            :  */
    1395                 :          0 : int pci_scan_bridge(struct pci_bus *bus, struct pci_dev *dev, int max, int pass)
    1396                 :            : {
    1397                 :          0 :         return pci_scan_bridge_extend(bus, dev, max, 0, pass);
    1398                 :            : }
    1399                 :            : EXPORT_SYMBOL(pci_scan_bridge);
    1400                 :            : 
    1401                 :            : /*
    1402                 :            :  * Read interrupt line and base address registers.
    1403                 :            :  * The architecture-dependent code can tweak these, of course.
    1404                 :            :  */
    1405                 :         21 : static void pci_read_irq(struct pci_dev *dev)
    1406                 :            : {
    1407                 :         21 :         unsigned char irq;
    1408                 :            : 
    1409                 :            :         /* VFs are not allowed to use INTx, so skip the config reads */
    1410         [ -  + ]:         21 :         if (dev->is_virtfn) {
    1411                 :          0 :                 dev->pin = 0;
    1412                 :          0 :                 dev->irq = 0;
    1413                 :          0 :                 return;
    1414                 :            :         }
    1415                 :            : 
    1416                 :         21 :         pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &irq);
    1417                 :         21 :         dev->pin = irq;
    1418         [ +  + ]:         21 :         if (irq)
    1419                 :          6 :                 pci_read_config_byte(dev, PCI_INTERRUPT_LINE, &irq);
    1420                 :         21 :         dev->irq = irq;
    1421                 :            : }
    1422                 :            : 
    1423                 :         21 : void set_pcie_port_type(struct pci_dev *pdev)
    1424                 :            : {
    1425                 :         21 :         int pos;
    1426                 :         21 :         u16 reg16;
    1427                 :         21 :         int type;
    1428                 :         21 :         struct pci_dev *parent;
    1429                 :            : 
    1430                 :         21 :         pos = pci_find_capability(pdev, PCI_CAP_ID_EXP);
    1431         [ -  + ]:         21 :         if (!pos)
    1432                 :         21 :                 return;
    1433                 :            : 
    1434                 :          0 :         pdev->pcie_cap = pos;
    1435                 :          0 :         pci_read_config_word(pdev, pos + PCI_EXP_FLAGS, &reg16);
    1436                 :          0 :         pdev->pcie_flags_reg = reg16;
    1437                 :          0 :         pci_read_config_word(pdev, pos + PCI_EXP_DEVCAP, &reg16);
    1438                 :          0 :         pdev->pcie_mpss = reg16 & PCI_EXP_DEVCAP_PAYLOAD;
    1439                 :            : 
    1440         [ #  # ]:          0 :         parent = pci_upstream_bridge(pdev);
    1441         [ #  # ]:          0 :         if (!parent)
    1442                 :            :                 return;
    1443                 :            : 
    1444                 :            :         /*
    1445                 :            :          * Some systems do not identify their upstream/downstream ports
    1446                 :            :          * correctly so detect impossible configurations here and correct
    1447                 :            :          * the port type accordingly.
    1448                 :            :          */
    1449         [ #  # ]:          0 :         type = pci_pcie_type(pdev);
    1450         [ #  # ]:          0 :         if (type == PCI_EXP_TYPE_DOWNSTREAM) {
    1451                 :            :                 /*
    1452                 :            :                  * If pdev claims to be downstream port but the parent
    1453                 :            :                  * device is also downstream port assume pdev is actually
    1454                 :            :                  * upstream port.
    1455                 :            :                  */
    1456   [ #  #  #  # ]:          0 :                 if (pcie_downstream_port(parent)) {
    1457                 :          0 :                         pci_info(pdev, "claims to be downstream port but is acting as upstream port, correcting type\n");
    1458                 :          0 :                         pdev->pcie_flags_reg &= ~PCI_EXP_FLAGS_TYPE;
    1459                 :          0 :                         pdev->pcie_flags_reg |= PCI_EXP_TYPE_UPSTREAM;
    1460                 :            :                 }
    1461         [ #  # ]:          0 :         } else if (type == PCI_EXP_TYPE_UPSTREAM) {
    1462                 :            :                 /*
    1463                 :            :                  * If pdev claims to be upstream port but the parent
    1464                 :            :                  * device is also upstream port assume pdev is actually
    1465                 :            :                  * downstream port.
    1466                 :            :                  */
    1467         [ #  # ]:          0 :                 if (pci_pcie_type(parent) == PCI_EXP_TYPE_UPSTREAM) {
    1468                 :          0 :                         pci_info(pdev, "claims to be upstream port but is acting as downstream port, correcting type\n");
    1469                 :          0 :                         pdev->pcie_flags_reg &= ~PCI_EXP_FLAGS_TYPE;
    1470                 :          0 :                         pdev->pcie_flags_reg |= PCI_EXP_TYPE_DOWNSTREAM;
    1471                 :            :                 }
    1472                 :            :         }
    1473                 :            : }
    1474                 :            : 
    1475                 :          0 : void set_pcie_hotplug_bridge(struct pci_dev *pdev)
    1476                 :            : {
    1477                 :          0 :         u32 reg32;
    1478                 :            : 
    1479                 :          0 :         pcie_capability_read_dword(pdev, PCI_EXP_SLTCAP, &reg32);
    1480   [ #  #  #  # ]:          0 :         if (reg32 & PCI_EXP_SLTCAP_HPC)
    1481                 :          0 :                 pdev->is_hotplug_bridge = 1;
    1482                 :          0 : }
    1483                 :            : 
    1484                 :         21 : static void set_pcie_thunderbolt(struct pci_dev *dev)
    1485                 :            : {
    1486                 :         21 :         int vsec = 0;
    1487                 :         21 :         u32 header;
    1488                 :            : 
    1489         [ -  + ]:         21 :         while ((vsec = pci_find_next_ext_capability(dev, vsec,
    1490                 :            :                                                     PCI_EXT_CAP_ID_VNDR))) {
    1491                 :          0 :                 pci_read_config_dword(dev, vsec + PCI_VNDR_HEADER, &header);
    1492                 :            : 
    1493                 :            :                 /* Is the device part of a Thunderbolt controller? */
    1494         [ #  # ]:          0 :                 if (dev->vendor == PCI_VENDOR_ID_INTEL &&
    1495         [ #  # ]:          0 :                     PCI_VNDR_HEADER_ID(header) == PCI_VSEC_ID_INTEL_TBT) {
    1496                 :          0 :                         dev->is_thunderbolt = 1;
    1497                 :          0 :                         return;
    1498                 :            :                 }
    1499                 :            :         }
    1500                 :            : }
    1501                 :            : 
    1502                 :         21 : static void set_pcie_untrusted(struct pci_dev *dev)
    1503                 :            : {
    1504                 :         21 :         struct pci_dev *parent;
    1505                 :            : 
    1506                 :            :         /*
    1507                 :            :          * If the upstream bridge is untrusted we treat this device
    1508                 :            :          * untrusted as well.
    1509                 :            :          */
    1510                 :         21 :         parent = pci_upstream_bridge(dev);
    1511   [ #  #  #  # ]:          0 :         if (parent && parent->untrusted)
    1512                 :          0 :                 dev->untrusted = true;
    1513                 :            : }
    1514                 :            : 
    1515                 :            : /**
    1516                 :            :  * pci_ext_cfg_is_aliased - Is ext config space just an alias of std config?
    1517                 :            :  * @dev: PCI device
    1518                 :            :  *
    1519                 :            :  * PCI Express to PCI/PCI-X Bridge Specification, rev 1.0, 4.1.4 says that
    1520                 :            :  * when forwarding a type1 configuration request the bridge must check that
    1521                 :            :  * the extended register address field is zero.  The bridge is not permitted
    1522                 :            :  * to forward the transactions and must handle it as an Unsupported Request.
    1523                 :            :  * Some bridges do not follow this rule and simply drop the extended register
    1524                 :            :  * bits, resulting in the standard config space being aliased, every 256
    1525                 :            :  * bytes across the entire configuration space.  Test for this condition by
    1526                 :            :  * comparing the first dword of each potential alias to the vendor/device ID.
    1527                 :            :  * Known offenders:
    1528                 :            :  *   ASM1083/1085 PCIe-to-PCI Reversible Bridge (1b21:1080, rev 01 & 03)
    1529                 :            :  *   AMD/ATI SBx00 PCI to PCI Bridge (1002:4384, rev 40)
    1530                 :            :  */
    1531                 :          0 : static bool pci_ext_cfg_is_aliased(struct pci_dev *dev)
    1532                 :            : {
    1533                 :            : #ifdef CONFIG_PCI_QUIRKS
    1534                 :          0 :         int pos;
    1535                 :          0 :         u32 header, tmp;
    1536                 :            : 
    1537                 :          0 :         pci_read_config_dword(dev, PCI_VENDOR_ID, &header);
    1538                 :            : 
    1539                 :          0 :         for (pos = PCI_CFG_SPACE_SIZE;
    1540         [ #  # ]:          0 :              pos < PCI_CFG_SPACE_EXP_SIZE; pos += PCI_CFG_SPACE_SIZE) {
    1541         [ #  # ]:          0 :                 if (pci_read_config_dword(dev, pos, &tmp) != PCIBIOS_SUCCESSFUL
    1542         [ #  # ]:          0 :                     || header != tmp)
    1543                 :            :                         return false;
    1544                 :            :         }
    1545                 :            : 
    1546                 :            :         return true;
    1547                 :            : #else
    1548                 :            :         return false;
    1549                 :            : #endif
    1550                 :            : }
    1551                 :            : 
    1552                 :            : /**
    1553                 :            :  * pci_cfg_space_size - Get the configuration space size of the PCI device
    1554                 :            :  * @dev: PCI device
    1555                 :            :  *
    1556                 :            :  * Regular PCI devices have 256 bytes, but PCI-X 2 and PCI Express devices
    1557                 :            :  * have 4096 bytes.  Even if the device is capable, that doesn't mean we can
    1558                 :            :  * access it.  Maybe we don't have a way to generate extended config space
    1559                 :            :  * accesses, or the device is behind a reverse Express bridge.  So we try
    1560                 :            :  * reading the dword at 0x100 which must either be 0 or a valid extended
    1561                 :            :  * capability header.
    1562                 :            :  */
    1563                 :          3 : static int pci_cfg_space_size_ext(struct pci_dev *dev)
    1564                 :            : {
    1565                 :          3 :         u32 status;
    1566                 :          3 :         int pos = PCI_CFG_SPACE_SIZE;
    1567                 :            : 
    1568         [ -  + ]:          3 :         if (pci_read_config_dword(dev, pos, &status) != PCIBIOS_SUCCESSFUL)
    1569                 :            :                 return PCI_CFG_SPACE_SIZE;
    1570   [ #  #  #  # ]:          0 :         if (status == 0xffffffff || pci_ext_cfg_is_aliased(dev))
    1571                 :          0 :                 return PCI_CFG_SPACE_SIZE;
    1572                 :            : 
    1573                 :            :         return PCI_CFG_SPACE_EXP_SIZE;
    1574                 :            : }
    1575                 :            : 
    1576                 :         21 : int pci_cfg_space_size(struct pci_dev *dev)
    1577                 :            : {
    1578                 :         21 :         int pos;
    1579                 :         21 :         u32 status;
    1580                 :         21 :         u16 class;
    1581                 :            : 
    1582                 :            : #ifdef CONFIG_PCI_IOV
    1583                 :            :         /*
    1584                 :            :          * Per the SR-IOV specification (rev 1.1, sec 3.5), VFs are required to
    1585                 :            :          * implement a PCIe capability and therefore must implement extended
    1586                 :            :          * config space.  We can skip the NO_EXTCFG test below and the
    1587                 :            :          * reachability/aliasing test in pci_cfg_space_size_ext() by virtue of
    1588                 :            :          * the fact that the SR-IOV capability on the PF resides in extended
    1589                 :            :          * config space and must be accessible and non-aliased to have enabled
    1590                 :            :          * support for this VF.  This is a micro performance optimization for
    1591                 :            :          * systems supporting many VFs.
    1592                 :            :          */
    1593                 :            :         if (dev->is_virtfn)
    1594                 :            :                 return PCI_CFG_SPACE_EXP_SIZE;
    1595                 :            : #endif
    1596                 :            : 
    1597         [ +  - ]:         21 :         if (dev->bus->bus_flags & PCI_BUS_FLAGS_NO_EXTCFG)
    1598                 :            :                 return PCI_CFG_SPACE_SIZE;
    1599                 :            : 
    1600                 :         21 :         class = dev->class >> 8;
    1601         [ +  + ]:         21 :         if (class == PCI_CLASS_BRIDGE_HOST)
    1602                 :          3 :                 return pci_cfg_space_size_ext(dev);
    1603                 :            : 
    1604         [ -  + ]:         18 :         if (pci_is_pcie(dev))
    1605                 :          0 :                 return pci_cfg_space_size_ext(dev);
    1606                 :            : 
    1607                 :         18 :         pos = pci_find_capability(dev, PCI_CAP_ID_PCIX);
    1608         [ -  + ]:         18 :         if (!pos)
    1609                 :            :                 return PCI_CFG_SPACE_SIZE;
    1610                 :            : 
    1611                 :          0 :         pci_read_config_dword(dev, pos + PCI_X_STATUS, &status);
    1612         [ #  # ]:          0 :         if (status & (PCI_X_STATUS_266MHZ | PCI_X_STATUS_533MHZ))
    1613                 :          0 :                 return pci_cfg_space_size_ext(dev);
    1614                 :            : 
    1615                 :            :         return PCI_CFG_SPACE_SIZE;
    1616                 :            : }
    1617                 :            : 
    1618                 :         21 : static u32 pci_class(struct pci_dev *dev)
    1619                 :            : {
    1620                 :         21 :         u32 class;
    1621                 :            : 
    1622                 :            : #ifdef CONFIG_PCI_IOV
    1623                 :            :         if (dev->is_virtfn)
    1624                 :            :                 return dev->physfn->sriov->class;
    1625                 :            : #endif
    1626                 :         21 :         pci_read_config_dword(dev, PCI_CLASS_REVISION, &class);
    1627                 :         21 :         return class;
    1628                 :            : }
    1629                 :            : 
    1630                 :         21 : static void pci_subsystem_ids(struct pci_dev *dev, u16 *vendor, u16 *device)
    1631                 :            : {
    1632                 :            : #ifdef CONFIG_PCI_IOV
    1633                 :            :         if (dev->is_virtfn) {
    1634                 :            :                 *vendor = dev->physfn->sriov->subsystem_vendor;
    1635                 :            :                 *device = dev->physfn->sriov->subsystem_device;
    1636                 :            :                 return;
    1637                 :            :         }
    1638                 :            : #endif
    1639                 :         21 :         pci_read_config_word(dev, PCI_SUBSYSTEM_VENDOR_ID, vendor);
    1640                 :         21 :         pci_read_config_word(dev, PCI_SUBSYSTEM_ID, device);
    1641                 :            : }
    1642                 :            : 
    1643                 :         21 : static u8 pci_hdr_type(struct pci_dev *dev)
    1644                 :            : {
    1645                 :         21 :         u8 hdr_type;
    1646                 :            : 
    1647                 :            : #ifdef CONFIG_PCI_IOV
    1648                 :            :         if (dev->is_virtfn)
    1649                 :            :                 return dev->physfn->sriov->hdr_type;
    1650                 :            : #endif
    1651                 :         21 :         pci_read_config_byte(dev, PCI_HEADER_TYPE, &hdr_type);
    1652                 :         21 :         return hdr_type;
    1653                 :            : }
    1654                 :            : 
    1655                 :            : #define LEGACY_IO_RESOURCE      (IORESOURCE_IO | IORESOURCE_PCI_FIXED)
    1656                 :            : 
    1657                 :         21 : static void pci_msi_setup_pci_dev(struct pci_dev *dev)
    1658                 :            : {
    1659                 :            :         /*
    1660                 :            :          * Disable the MSI hardware to avoid screaming interrupts
    1661                 :            :          * during boot.  This is the power on reset default so
    1662                 :            :          * usually this should be a noop.
    1663                 :            :          */
    1664                 :         21 :         dev->msi_cap = pci_find_capability(dev, PCI_CAP_ID_MSI);
    1665         [ -  + ]:         21 :         if (dev->msi_cap)
    1666                 :          0 :                 pci_msi_set_enable(dev, 0);
    1667                 :            : 
    1668                 :         21 :         dev->msix_cap = pci_find_capability(dev, PCI_CAP_ID_MSIX);
    1669         [ +  + ]:         21 :         if (dev->msix_cap)
    1670                 :          3 :                 pci_msix_clear_and_set_ctrl(dev, PCI_MSIX_FLAGS_ENABLE, 0);
    1671                 :         21 : }
    1672                 :            : 
    1673                 :            : /**
    1674                 :            :  * pci_intx_mask_broken - Test PCI_COMMAND_INTX_DISABLE writability
    1675                 :            :  * @dev: PCI device
    1676                 :            :  *
    1677                 :            :  * Test whether PCI_COMMAND_INTX_DISABLE is writable for @dev.  Check this
    1678                 :            :  * at enumeration-time to avoid modifying PCI_COMMAND at run-time.
    1679                 :            :  */
    1680                 :         21 : static int pci_intx_mask_broken(struct pci_dev *dev)
    1681                 :            : {
    1682                 :         21 :         u16 orig, toggle, new;
    1683                 :            : 
    1684                 :         21 :         pci_read_config_word(dev, PCI_COMMAND, &orig);
    1685                 :         21 :         toggle = orig ^ PCI_COMMAND_INTX_DISABLE;
    1686                 :         21 :         pci_write_config_word(dev, PCI_COMMAND, toggle);
    1687                 :         21 :         pci_read_config_word(dev, PCI_COMMAND, &new);
    1688                 :            : 
    1689                 :         21 :         pci_write_config_word(dev, PCI_COMMAND, orig);
    1690                 :            : 
    1691                 :            :         /*
    1692                 :            :          * PCI_COMMAND_INTX_DISABLE was reserved and read-only prior to PCI
    1693                 :            :          * r2.3, so strictly speaking, a device is not *broken* if it's not
    1694                 :            :          * writable.  But we'll live with the misnomer for now.
    1695                 :            :          */
    1696         [ -  + ]:         21 :         if (new != toggle)
    1697                 :          0 :                 return 1;
    1698                 :            :         return 0;
    1699                 :            : }
    1700                 :            : 
    1701                 :          0 : static void early_dump_pci_device(struct pci_dev *pdev)
    1702                 :            : {
    1703                 :          0 :         u32 value[256 / 4];
    1704                 :          0 :         int i;
    1705                 :            : 
    1706                 :          0 :         pci_info(pdev, "config space:\n");
    1707                 :            : 
    1708         [ #  # ]:          0 :         for (i = 0; i < 256; i += 4)
    1709                 :          0 :                 pci_read_config_dword(pdev, i, &value[i / 4]);
    1710                 :            : 
    1711                 :          0 :         print_hex_dump(KERN_INFO, "", DUMP_PREFIX_OFFSET, 16, 1,
    1712                 :            :                        value, 256, false);
    1713                 :          0 : }
    1714                 :            : 
    1715                 :            : /**
    1716                 :            :  * pci_setup_device - Fill in class and map information of a device
    1717                 :            :  * @dev: the device structure to fill
    1718                 :            :  *
    1719                 :            :  * Initialize the device structure with information about the device's
    1720                 :            :  * vendor,class,memory and IO-space addresses, IRQ lines etc.
    1721                 :            :  * Called at initialisation of the PCI subsystem and by CardBus services.
    1722                 :            :  * Returns 0 on success and negative if unknown type of device (not normal,
    1723                 :            :  * bridge or CardBus).
    1724                 :            :  */
    1725                 :         21 : int pci_setup_device(struct pci_dev *dev)
    1726                 :            : {
    1727                 :         21 :         u32 class;
    1728                 :         21 :         u16 cmd;
    1729                 :         21 :         u8 hdr_type;
    1730                 :         21 :         int pos = 0;
    1731                 :         21 :         struct pci_bus_region region;
    1732                 :         21 :         struct resource *res;
    1733                 :            : 
    1734                 :         21 :         hdr_type = pci_hdr_type(dev);
    1735                 :            : 
    1736                 :         21 :         dev->sysdata = dev->bus->sysdata;
    1737                 :         21 :         dev->dev.parent = dev->bus->bridge;
    1738                 :         21 :         dev->dev.bus = &pci_bus_type;
    1739                 :         21 :         dev->hdr_type = hdr_type & 0x7f;
    1740                 :         21 :         dev->multifunction = !!(hdr_type & 0x80);
    1741                 :         21 :         dev->error_state = pci_channel_io_normal;
    1742                 :         21 :         set_pcie_port_type(dev);
    1743                 :            : 
    1744                 :         21 :         pci_dev_assign_slot(dev);
    1745                 :            : 
    1746                 :            :         /*
    1747                 :            :          * Assume 32-bit PCI; let 64-bit PCI cards (which are far rarer)
    1748                 :            :          * set this higher, assuming the system even supports it.
    1749                 :            :          */
    1750                 :         21 :         dev->dma_mask = 0xffffffff;
    1751                 :            : 
    1752                 :         21 :         dev_set_name(&dev->dev, "%04x:%02x:%02x.%d", pci_domain_nr(dev->bus),
    1753                 :         21 :                      dev->bus->number, PCI_SLOT(dev->devfn),
    1754                 :         21 :                      PCI_FUNC(dev->devfn));
    1755                 :            : 
    1756                 :         21 :         class = pci_class(dev);
    1757                 :            : 
    1758                 :         21 :         dev->revision = class & 0xff;
    1759                 :         21 :         dev->class = class >> 8;                   /* upper 3 bytes */
    1760                 :            : 
    1761                 :         21 :         pci_info(dev, "[%04x:%04x] type %02x class %#08x\n",
    1762                 :            :                    dev->vendor, dev->device, dev->hdr_type, dev->class);
    1763                 :            : 
    1764         [ -  + ]:         21 :         if (pci_early_dump)
    1765                 :          0 :                 early_dump_pci_device(dev);
    1766                 :            : 
    1767                 :            :         /* Need to have dev->class ready */
    1768                 :         21 :         dev->cfg_size = pci_cfg_space_size(dev);
    1769                 :            : 
    1770                 :            :         /* Need to have dev->cfg_size ready */
    1771                 :         21 :         set_pcie_thunderbolt(dev);
    1772                 :            : 
    1773         [ -  + ]:         21 :         set_pcie_untrusted(dev);
    1774                 :            : 
    1775                 :            :         /* "Unknown power state" */
    1776                 :         21 :         dev->current_state = PCI_UNKNOWN;
    1777                 :            : 
    1778                 :            :         /* Early fixups, before probing the BARs */
    1779                 :         21 :         pci_fixup_device(pci_fixup_early, dev);
    1780                 :            : 
    1781                 :            :         /* Device class may be changed after fixup */
    1782                 :         21 :         class = dev->class >> 8;
    1783                 :            : 
    1784         [ -  + ]:         21 :         if (dev->non_compliant_bars) {
    1785                 :          0 :                 pci_read_config_word(dev, PCI_COMMAND, &cmd);
    1786         [ #  # ]:          0 :                 if (cmd & (PCI_COMMAND_IO | PCI_COMMAND_MEMORY)) {
    1787                 :          0 :                         pci_info(dev, "device has non-compliant BARs; disabling IO/MEM decoding\n");
    1788                 :          0 :                         cmd &= ~PCI_COMMAND_IO;
    1789                 :          0 :                         cmd &= ~PCI_COMMAND_MEMORY;
    1790                 :          0 :                         pci_write_config_word(dev, PCI_COMMAND, cmd);
    1791                 :            :                 }
    1792                 :            :         }
    1793                 :            : 
    1794                 :         21 :         dev->broken_intx_masking = pci_intx_mask_broken(dev);
    1795                 :            : 
    1796   [ +  -  -  - ]:         21 :         switch (dev->hdr_type) {                 /* header type */
    1797                 :         21 :         case PCI_HEADER_TYPE_NORMAL:                /* standard header */
    1798         [ -  + ]:         21 :                 if (class == PCI_CLASS_BRIDGE_PCI)
    1799                 :          0 :                         goto bad;
    1800                 :         21 :                 pci_read_irq(dev);
    1801                 :         21 :                 pci_read_bases(dev, 6, PCI_ROM_ADDRESS);
    1802                 :            : 
    1803                 :         21 :                 pci_subsystem_ids(dev, &dev->subsystem_vendor, &dev->subsystem_device);
    1804                 :            : 
    1805                 :            :                 /*
    1806                 :            :                  * Do the ugly legacy mode stuff here rather than broken chip
    1807                 :            :                  * quirk code. Legacy mode ATA controllers have fixed
    1808                 :            :                  * addresses. These are not always echoed in BAR0-3, and
    1809                 :            :                  * BAR0-3 in a few cases contain junk!
    1810                 :            :                  */
    1811         [ +  + ]:         21 :                 if (class == PCI_CLASS_STORAGE_IDE) {
    1812                 :          3 :                         u8 progif;
    1813                 :          3 :                         pci_read_config_byte(dev, PCI_CLASS_PROG, &progif);
    1814         [ +  - ]:          3 :                         if ((progif & 1) == 0) {
    1815                 :          3 :                                 region.start = 0x1F0;
    1816                 :          3 :                                 region.end = 0x1F7;
    1817                 :          3 :                                 res = &dev->resource[0];
    1818                 :          3 :                                 res->flags = LEGACY_IO_RESOURCE;
    1819                 :          3 :                                 pcibios_bus_to_resource(dev->bus, res, &region);
    1820                 :          3 :                                 pci_info(dev, "legacy IDE quirk: reg 0x10: %pR\n",
    1821                 :            :                                          res);
    1822                 :          3 :                                 region.start = 0x3F6;
    1823                 :          3 :                                 region.end = 0x3F6;
    1824                 :          3 :                                 res = &dev->resource[1];
    1825                 :          3 :                                 res->flags = LEGACY_IO_RESOURCE;
    1826                 :          3 :                                 pcibios_bus_to_resource(dev->bus, res, &region);
    1827                 :          3 :                                 pci_info(dev, "legacy IDE quirk: reg 0x14: %pR\n",
    1828                 :            :                                          res);
    1829                 :            :                         }
    1830         [ +  - ]:          3 :                         if ((progif & 4) == 0) {
    1831                 :          3 :                                 region.start = 0x170;
    1832                 :          3 :                                 region.end = 0x177;
    1833                 :          3 :                                 res = &dev->resource[2];
    1834                 :          3 :                                 res->flags = LEGACY_IO_RESOURCE;
    1835                 :          3 :                                 pcibios_bus_to_resource(dev->bus, res, &region);
    1836                 :          3 :                                 pci_info(dev, "legacy IDE quirk: reg 0x18: %pR\n",
    1837                 :            :                                          res);
    1838                 :          3 :                                 region.start = 0x376;
    1839                 :          3 :                                 region.end = 0x376;
    1840                 :          3 :                                 res = &dev->resource[3];
    1841                 :          3 :                                 res->flags = LEGACY_IO_RESOURCE;
    1842                 :          3 :                                 pcibios_bus_to_resource(dev->bus, res, &region);
    1843                 :          3 :                                 pci_info(dev, "legacy IDE quirk: reg 0x1c: %pR\n",
    1844                 :            :                                          res);
    1845                 :            :                         }
    1846                 :            :                 }
    1847                 :            :                 break;
    1848                 :            : 
    1849                 :          0 :         case PCI_HEADER_TYPE_BRIDGE:                /* bridge header */
    1850                 :            :                 /*
    1851                 :            :                  * The PCI-to-PCI bridge spec requires that subtractive
    1852                 :            :                  * decoding (i.e. transparent) bridge must have programming
    1853                 :            :                  * interface code of 0x01.
    1854                 :            :                  */
    1855                 :          0 :                 pci_read_irq(dev);
    1856                 :          0 :                 dev->transparent = ((dev->class & 0xff) == 1);
    1857                 :          0 :                 pci_read_bases(dev, 2, PCI_ROM_ADDRESS1);
    1858                 :          0 :                 pci_read_bridge_windows(dev);
    1859                 :          0 :                 set_pcie_hotplug_bridge(dev);
    1860                 :          0 :                 pos = pci_find_capability(dev, PCI_CAP_ID_SSVID);
    1861         [ #  # ]:          0 :                 if (pos) {
    1862                 :          0 :                         pci_read_config_word(dev, pos + PCI_SSVID_VENDOR_ID, &dev->subsystem_vendor);
    1863                 :          0 :                         pci_read_config_word(dev, pos + PCI_SSVID_DEVICE_ID, &dev->subsystem_device);
    1864                 :            :                 }
    1865                 :            :                 break;
    1866                 :            : 
    1867                 :          0 :         case PCI_HEADER_TYPE_CARDBUS:               /* CardBus bridge header */
    1868         [ #  # ]:          0 :                 if (class != PCI_CLASS_BRIDGE_CARDBUS)
    1869                 :          0 :                         goto bad;
    1870                 :          0 :                 pci_read_irq(dev);
    1871                 :          0 :                 pci_read_bases(dev, 1, 0);
    1872                 :          0 :                 pci_read_config_word(dev, PCI_CB_SUBSYSTEM_VENDOR_ID, &dev->subsystem_vendor);
    1873                 :          0 :                 pci_read_config_word(dev, PCI_CB_SUBSYSTEM_ID, &dev->subsystem_device);
    1874                 :          0 :                 break;
    1875                 :            : 
    1876                 :          0 :         default:                                    /* unknown header */
    1877                 :          0 :                 pci_err(dev, "unknown header type %02x, ignoring device\n",
    1878                 :            :                         dev->hdr_type);
    1879                 :          0 :                 return -EIO;
    1880                 :            : 
    1881                 :          0 :         bad:
    1882                 :          0 :                 pci_err(dev, "ignoring class %#08x (doesn't match header type %02x)\n",
    1883                 :            :                         dev->class, dev->hdr_type);
    1884                 :          0 :                 dev->class = PCI_CLASS_NOT_DEFINED << 8;
    1885                 :            :         }
    1886                 :            : 
    1887                 :            :         /* We found a fine healthy device, go go go... */
    1888                 :            :         return 0;
    1889                 :            : }
    1890                 :            : 
    1891                 :         21 : static void pci_configure_mps(struct pci_dev *dev)
    1892                 :            : {
    1893         [ -  + ]:         21 :         struct pci_dev *bridge = pci_upstream_bridge(dev);
    1894                 :         21 :         int mps, mpss, p_mps, rc;
    1895                 :            : 
    1896   [ -  +  -  -  :         21 :         if (!pci_is_pcie(dev) || !bridge || !pci_is_pcie(bridge))
                   -  - ]
    1897                 :            :                 return;
    1898                 :            : 
    1899                 :            :         /* MPS and MRRS fields are of type 'RsvdP' for VFs, short-circuit out */
    1900         [ #  # ]:          0 :         if (dev->is_virtfn)
    1901                 :            :                 return;
    1902                 :            : 
    1903                 :          0 :         mps = pcie_get_mps(dev);
    1904                 :          0 :         p_mps = pcie_get_mps(bridge);
    1905                 :            : 
    1906         [ #  # ]:          0 :         if (mps == p_mps)
    1907                 :            :                 return;
    1908                 :            : 
    1909         [ #  # ]:          0 :         if (pcie_bus_config == PCIE_BUS_TUNE_OFF) {
    1910         [ #  # ]:          0 :                 pci_warn(dev, "Max Payload Size %d, but upstream %s set to %d; if necessary, use \"pci=pcie_bus_safe\" and report a bug\n",
    1911                 :            :                          mps, pci_name(bridge), p_mps);
    1912                 :          0 :                 return;
    1913                 :            :         }
    1914                 :            : 
    1915                 :            :         /*
    1916                 :            :          * Fancier MPS configuration is done later by
    1917                 :            :          * pcie_bus_configure_settings()
    1918                 :            :          */
    1919         [ #  # ]:          0 :         if (pcie_bus_config != PCIE_BUS_DEFAULT)
    1920                 :            :                 return;
    1921                 :            : 
    1922                 :          0 :         mpss = 128 << dev->pcie_mpss;
    1923   [ #  #  #  # ]:          0 :         if (mpss < p_mps && pci_pcie_type(bridge) == PCI_EXP_TYPE_ROOT_PORT) {
    1924                 :          0 :                 pcie_set_mps(bridge, mpss);
    1925                 :          0 :                 pci_info(dev, "Upstream bridge's Max Payload Size set to %d (was %d, max %d)\n",
    1926                 :            :                          mpss, p_mps, 128 << bridge->pcie_mpss);
    1927                 :          0 :                 p_mps = pcie_get_mps(bridge);
    1928                 :            :         }
    1929                 :            : 
    1930                 :          0 :         rc = pcie_set_mps(dev, p_mps);
    1931         [ #  # ]:          0 :         if (rc) {
    1932                 :          0 :                 pci_warn(dev, "can't set Max Payload Size to %d; if necessary, use \"pci=pcie_bus_safe\" and report a bug\n",
    1933                 :            :                          p_mps);
    1934                 :          0 :                 return;
    1935                 :            :         }
    1936                 :            : 
    1937                 :          0 :         pci_info(dev, "Max Payload Size set to %d (was %d, max %d)\n",
    1938                 :            :                  p_mps, mps, mpss);
    1939                 :            : }
    1940                 :            : 
    1941                 :         21 : int pci_configure_extended_tags(struct pci_dev *dev, void *ign)
    1942                 :            : {
    1943                 :         21 :         struct pci_host_bridge *host;
    1944                 :         21 :         u32 cap;
    1945                 :         21 :         u16 ctl;
    1946                 :         21 :         int ret;
    1947                 :            : 
    1948         [ -  + ]:         21 :         if (!pci_is_pcie(dev))
    1949                 :            :                 return 0;
    1950                 :            : 
    1951                 :          0 :         ret = pcie_capability_read_dword(dev, PCI_EXP_DEVCAP, &cap);
    1952         [ #  # ]:          0 :         if (ret)
    1953                 :            :                 return 0;
    1954                 :            : 
    1955         [ #  # ]:          0 :         if (!(cap & PCI_EXP_DEVCAP_EXT_TAG))
    1956                 :            :                 return 0;
    1957                 :            : 
    1958                 :          0 :         ret = pcie_capability_read_word(dev, PCI_EXP_DEVCTL, &ctl);
    1959         [ #  # ]:          0 :         if (ret)
    1960                 :            :                 return 0;
    1961                 :            : 
    1962                 :          0 :         host = pci_find_host_bridge(dev->bus);
    1963         [ #  # ]:          0 :         if (!host)
    1964                 :            :                 return 0;
    1965                 :            : 
    1966                 :            :         /*
    1967                 :            :          * If some device in the hierarchy doesn't handle Extended Tags
    1968                 :            :          * correctly, make sure they're disabled.
    1969                 :            :          */
    1970         [ #  # ]:          0 :         if (host->no_ext_tags) {
    1971         [ #  # ]:          0 :                 if (ctl & PCI_EXP_DEVCTL_EXT_TAG) {
    1972                 :          0 :                         pci_info(dev, "disabling Extended Tags\n");
    1973                 :          0 :                         pcie_capability_clear_word(dev, PCI_EXP_DEVCTL,
    1974                 :            :                                                    PCI_EXP_DEVCTL_EXT_TAG);
    1975                 :            :                 }
    1976                 :          0 :                 return 0;
    1977                 :            :         }
    1978                 :            : 
    1979         [ #  # ]:          0 :         if (!(ctl & PCI_EXP_DEVCTL_EXT_TAG)) {
    1980                 :          0 :                 pci_info(dev, "enabling Extended Tags\n");
    1981                 :          0 :                 pcie_capability_set_word(dev, PCI_EXP_DEVCTL,
    1982                 :            :                                          PCI_EXP_DEVCTL_EXT_TAG);
    1983                 :            :         }
    1984                 :            :         return 0;
    1985                 :            : }
    1986                 :            : 
    1987                 :            : /**
    1988                 :            :  * pcie_relaxed_ordering_enabled - Probe for PCIe relaxed ordering enable
    1989                 :            :  * @dev: PCI device to query
    1990                 :            :  *
    1991                 :            :  * Returns true if the device has enabled relaxed ordering attribute.
    1992                 :            :  */
    1993                 :         21 : bool pcie_relaxed_ordering_enabled(struct pci_dev *dev)
    1994                 :            : {
    1995                 :         21 :         u16 v;
    1996                 :            : 
    1997                 :          0 :         pcie_capability_read_word(dev, PCI_EXP_DEVCTL, &v);
    1998                 :            : 
    1999                 :         21 :         return !!(v & PCI_EXP_DEVCTL_RELAX_EN);
    2000                 :            : }
    2001                 :            : EXPORT_SYMBOL(pcie_relaxed_ordering_enabled);
    2002                 :            : 
    2003                 :         21 : static void pci_configure_relaxed_ordering(struct pci_dev *dev)
    2004                 :            : {
    2005                 :         21 :         struct pci_dev *root;
    2006                 :            : 
    2007                 :            :         /* PCI_EXP_DEVICE_RELAX_EN is RsvdP in VFs */
    2008         [ +  - ]:         21 :         if (dev->is_virtfn)
    2009                 :            :                 return;
    2010                 :            : 
    2011         [ -  + ]:         21 :         if (!pcie_relaxed_ordering_enabled(dev))
    2012                 :            :                 return;
    2013                 :            : 
    2014                 :            :         /*
    2015                 :            :          * For now, we only deal with Relaxed Ordering issues with Root
    2016                 :            :          * Ports. Peer-to-Peer DMA is another can of worms.
    2017                 :            :          */
    2018                 :          0 :         root = pci_find_pcie_root_port(dev);
    2019         [ #  # ]:          0 :         if (!root)
    2020                 :            :                 return;
    2021                 :            : 
    2022         [ #  # ]:          0 :         if (root->dev_flags & PCI_DEV_FLAGS_NO_RELAXED_ORDERING) {
    2023                 :          0 :                 pcie_capability_clear_word(dev, PCI_EXP_DEVCTL,
    2024                 :            :                                            PCI_EXP_DEVCTL_RELAX_EN);
    2025                 :          0 :                 pci_info(dev, "Relaxed Ordering disabled because the Root Port didn't support it\n");
    2026                 :            :         }
    2027                 :            : }
    2028                 :            : 
    2029                 :         21 : static void pci_configure_ltr(struct pci_dev *dev)
    2030                 :            : {
    2031                 :            : #ifdef CONFIG_PCIEASPM
    2032                 :         21 :         struct pci_host_bridge *host = pci_find_host_bridge(dev->bus);
    2033                 :         21 :         struct pci_dev *bridge;
    2034                 :         21 :         u32 cap, ctl;
    2035                 :            : 
    2036         [ -  + ]:         21 :         if (!pci_is_pcie(dev))
    2037                 :         21 :                 return;
    2038                 :            : 
    2039                 :          0 :         pcie_capability_read_dword(dev, PCI_EXP_DEVCAP2, &cap);
    2040         [ #  # ]:          0 :         if (!(cap & PCI_EXP_DEVCAP2_LTR))
    2041                 :            :                 return;
    2042                 :            : 
    2043                 :          0 :         pcie_capability_read_dword(dev, PCI_EXP_DEVCTL2, &ctl);
    2044         [ #  # ]:          0 :         if (ctl & PCI_EXP_DEVCTL2_LTR_EN) {
    2045         [ #  # ]:          0 :                 if (pci_pcie_type(dev) == PCI_EXP_TYPE_ROOT_PORT) {
    2046                 :          0 :                         dev->ltr_path = 1;
    2047                 :          0 :                         return;
    2048                 :            :                 }
    2049                 :            : 
    2050         [ #  # ]:          0 :                 bridge = pci_upstream_bridge(dev);
    2051   [ #  #  #  # ]:          0 :                 if (bridge && bridge->ltr_path)
    2052                 :          0 :                         dev->ltr_path = 1;
    2053                 :            : 
    2054                 :          0 :                 return;
    2055                 :            :         }
    2056                 :            : 
    2057         [ #  # ]:          0 :         if (!host->native_ltr)
    2058                 :            :                 return;
    2059                 :            : 
    2060                 :            :         /*
    2061                 :            :          * Software must not enable LTR in an Endpoint unless the Root
    2062                 :            :          * Complex and all intermediate Switches indicate support for LTR.
    2063                 :            :          * PCIe r4.0, sec 6.18.
    2064                 :            :          */
    2065   [ #  #  #  # ]:          0 :         if (pci_pcie_type(dev) == PCI_EXP_TYPE_ROOT_PORT ||
    2066   [ #  #  #  # ]:          0 :             ((bridge = pci_upstream_bridge(dev)) &&
    2067                 :            :               bridge->ltr_path)) {
    2068                 :          0 :                 pcie_capability_set_word(dev, PCI_EXP_DEVCTL2,
    2069                 :            :                                          PCI_EXP_DEVCTL2_LTR_EN);
    2070                 :          0 :                 dev->ltr_path = 1;
    2071                 :            :         }
    2072                 :            : #endif
    2073                 :            : }
    2074                 :            : 
    2075                 :         21 : static void pci_configure_eetlp_prefix(struct pci_dev *dev)
    2076                 :            : {
    2077                 :            : #ifdef CONFIG_PCI_PASID
    2078                 :         21 :         struct pci_dev *bridge;
    2079                 :         21 :         int pcie_type;
    2080                 :         21 :         u32 cap;
    2081                 :            : 
    2082         [ -  + ]:         21 :         if (!pci_is_pcie(dev))
    2083                 :         21 :                 return;
    2084                 :            : 
    2085                 :          0 :         pcie_capability_read_dword(dev, PCI_EXP_DEVCAP2, &cap);
    2086         [ #  # ]:          0 :         if (!(cap & PCI_EXP_DEVCAP2_EE_PREFIX))
    2087                 :            :                 return;
    2088                 :            : 
    2089         [ #  # ]:          0 :         pcie_type = pci_pcie_type(dev);
    2090                 :          0 :         if (pcie_type == PCI_EXP_TYPE_ROOT_PORT ||
    2091         [ #  # ]:          0 :             pcie_type == PCI_EXP_TYPE_RC_END)
    2092                 :          0 :                 dev->eetlp_prefix_path = 1;
    2093                 :            :         else {
    2094         [ #  # ]:          0 :                 bridge = pci_upstream_bridge(dev);
    2095   [ #  #  #  # ]:          0 :                 if (bridge && bridge->eetlp_prefix_path)
    2096                 :          0 :                         dev->eetlp_prefix_path = 1;
    2097                 :            :         }
    2098                 :            : #endif
    2099                 :            : }
    2100                 :            : 
    2101                 :         21 : static void pci_configure_serr(struct pci_dev *dev)
    2102                 :            : {
    2103                 :         21 :         u16 control;
    2104                 :            : 
    2105         [ -  + ]:         21 :         if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE) {
    2106                 :            : 
    2107                 :            :                 /*
    2108                 :            :                  * A bridge will not forward ERR_ messages coming from an
    2109                 :            :                  * endpoint unless SERR# forwarding is enabled.
    2110                 :            :                  */
    2111                 :          0 :                 pci_read_config_word(dev, PCI_BRIDGE_CONTROL, &control);
    2112         [ #  # ]:          0 :                 if (!(control & PCI_BRIDGE_CTL_SERR)) {
    2113                 :          0 :                         control |= PCI_BRIDGE_CTL_SERR;
    2114                 :          0 :                         pci_write_config_word(dev, PCI_BRIDGE_CONTROL, control);
    2115                 :            :                 }
    2116                 :            :         }
    2117                 :         21 : }
    2118                 :            : 
    2119                 :         21 : static void pci_configure_device(struct pci_dev *dev)
    2120                 :            : {
    2121                 :         21 :         pci_configure_mps(dev);
    2122                 :         21 :         pci_configure_extended_tags(dev, NULL);
    2123                 :         21 :         pci_configure_relaxed_ordering(dev);
    2124                 :         21 :         pci_configure_ltr(dev);
    2125                 :         21 :         pci_configure_eetlp_prefix(dev);
    2126                 :         21 :         pci_configure_serr(dev);
    2127                 :            : 
    2128                 :         21 :         pci_acpi_program_hp_params(dev);
    2129                 :         21 : }
    2130                 :            : 
    2131                 :          0 : static void pci_release_capabilities(struct pci_dev *dev)
    2132                 :            : {
    2133                 :          0 :         pci_aer_exit(dev);
    2134                 :          0 :         pci_vpd_release(dev);
    2135                 :          0 :         pci_iov_release(dev);
    2136                 :          0 :         pci_free_cap_save_buffers(dev);
    2137                 :          0 : }
    2138                 :            : 
    2139                 :            : /**
    2140                 :            :  * pci_release_dev - Free a PCI device structure when all users of it are
    2141                 :            :  *                   finished
    2142                 :            :  * @dev: device that's been disconnected
    2143                 :            :  *
    2144                 :            :  * Will be called only by the device core when all users of this PCI device are
    2145                 :            :  * done.
    2146                 :            :  */
    2147                 :          0 : static void pci_release_dev(struct device *dev)
    2148                 :            : {
    2149                 :          0 :         struct pci_dev *pci_dev;
    2150                 :            : 
    2151                 :          0 :         pci_dev = to_pci_dev(dev);
    2152                 :          0 :         pci_release_capabilities(pci_dev);
    2153                 :          0 :         pci_release_of_node(pci_dev);
    2154                 :          0 :         pcibios_release_device(pci_dev);
    2155                 :          0 :         pci_bus_put(pci_dev->bus);
    2156                 :          0 :         kfree(pci_dev->driver_override);
    2157                 :          0 :         bitmap_free(pci_dev->dma_alias_mask);
    2158                 :          0 :         kfree(pci_dev);
    2159                 :          0 : }
    2160                 :            : 
    2161                 :         21 : struct pci_dev *pci_alloc_dev(struct pci_bus *bus)
    2162                 :            : {
    2163                 :         21 :         struct pci_dev *dev;
    2164                 :            : 
    2165                 :         21 :         dev = kzalloc(sizeof(struct pci_dev), GFP_KERNEL);
    2166         [ +  - ]:         21 :         if (!dev)
    2167                 :            :                 return NULL;
    2168                 :            : 
    2169                 :         21 :         INIT_LIST_HEAD(&dev->bus_list);
    2170                 :         21 :         dev->dev.type = &pci_dev_type;
    2171                 :         21 :         dev->bus = pci_bus_get(bus);
    2172                 :            : 
    2173                 :         21 :         return dev;
    2174                 :            : }
    2175                 :            : EXPORT_SYMBOL(pci_alloc_dev);
    2176                 :            : 
    2177                 :         39 : static bool pci_bus_crs_vendor_id(u32 l)
    2178                 :            : {
    2179                 :         39 :         return (l & 0xffff) == 0x0001;
    2180                 :            : }
    2181                 :            : 
    2182                 :          0 : static bool pci_bus_wait_crs(struct pci_bus *bus, int devfn, u32 *l,
    2183                 :            :                              int timeout)
    2184                 :            : {
    2185                 :          0 :         int delay = 1;
    2186                 :            : 
    2187         [ #  # ]:          0 :         if (!pci_bus_crs_vendor_id(*l))
    2188                 :            :                 return true;    /* not a CRS completion */
    2189                 :            : 
    2190         [ #  # ]:          0 :         if (!timeout)
    2191                 :            :                 return false;   /* CRS, but caller doesn't want to wait */
    2192                 :            : 
    2193                 :            :         /*
    2194                 :            :          * We got the reserved Vendor ID that indicates a completion with
    2195                 :            :          * Configuration Request Retry Status (CRS).  Retry until we get a
    2196                 :            :          * valid Vendor ID or we time out.
    2197                 :            :          */
    2198         [ #  # ]:          0 :         while (pci_bus_crs_vendor_id(*l)) {
    2199         [ #  # ]:          0 :                 if (delay > timeout) {
    2200                 :          0 :                         pr_warn("pci %04x:%02x:%02x.%d: not ready after %dms; giving up\n",
    2201                 :            :                                 pci_domain_nr(bus), bus->number,
    2202                 :            :                                 PCI_SLOT(devfn), PCI_FUNC(devfn), delay - 1);
    2203                 :            : 
    2204                 :          0 :                         return false;
    2205                 :            :                 }
    2206         [ #  # ]:          0 :                 if (delay >= 1000)
    2207                 :          0 :                         pr_info("pci %04x:%02x:%02x.%d: not ready after %dms; waiting\n",
    2208                 :            :                                 pci_domain_nr(bus), bus->number,
    2209                 :            :                                 PCI_SLOT(devfn), PCI_FUNC(devfn), delay - 1);
    2210                 :            : 
    2211                 :          0 :                 msleep(delay);
    2212                 :          0 :                 delay *= 2;
    2213                 :            : 
    2214         [ #  # ]:          0 :                 if (pci_bus_read_config_dword(bus, devfn, PCI_VENDOR_ID, l))
    2215                 :            :                         return false;
    2216                 :            :         }
    2217                 :            : 
    2218         [ #  # ]:          0 :         if (delay >= 1000)
    2219                 :          0 :                 pr_info("pci %04x:%02x:%02x.%d: ready after %dms\n",
    2220                 :            :                         pci_domain_nr(bus), bus->number,
    2221                 :            :                         PCI_SLOT(devfn), PCI_FUNC(devfn), delay - 1);
    2222                 :            : 
    2223                 :            :         return true;
    2224                 :            : }
    2225                 :            : 
    2226                 :        216 : bool pci_bus_generic_read_dev_vendor_id(struct pci_bus *bus, int devfn, u32 *l,
    2227                 :            :                                         int timeout)
    2228                 :            : {
    2229         [ +  - ]:        216 :         if (pci_bus_read_config_dword(bus, devfn, PCI_VENDOR_ID, l))
    2230                 :            :                 return false;
    2231                 :            : 
    2232                 :            :         /* Some broken boards return 0 or ~0 if a slot is empty: */
    2233         [ +  + ]:        216 :         if (*l == 0xffffffff || *l == 0x00000000 ||
    2234         [ +  - ]:         39 :             *l == 0x0000ffff || *l == 0xffff0000)
    2235                 :            :                 return false;
    2236                 :            : 
    2237         [ -  + ]:         39 :         if (pci_bus_crs_vendor_id(*l))
    2238                 :          0 :                 return pci_bus_wait_crs(bus, devfn, l, timeout);
    2239                 :            : 
    2240                 :            :         return true;
    2241                 :            : }
    2242                 :            : 
    2243                 :        216 : bool pci_bus_read_dev_vendor_id(struct pci_bus *bus, int devfn, u32 *l,
    2244                 :            :                                 int timeout)
    2245                 :            : {
    2246                 :            : #ifdef CONFIG_PCI_QUIRKS
    2247                 :        216 :         struct pci_dev *bridge = bus->self;
    2248                 :            : 
    2249                 :            :         /*
    2250                 :            :          * Certain IDT switches have an issue where they improperly trigger
    2251                 :            :          * ACS Source Validation errors on completions for config reads.
    2252                 :            :          */
    2253   [ -  +  -  - ]:        216 :         if (bridge && bridge->vendor == PCI_VENDOR_ID_IDT &&
    2254                 :            :             bridge->device == 0x80b5)
    2255                 :          0 :                 return pci_idt_bus_quirk(bus, devfn, l, timeout);
    2256                 :            : #endif
    2257                 :            : 
    2258                 :        216 :         return pci_bus_generic_read_dev_vendor_id(bus, devfn, l, timeout);
    2259                 :            : }
    2260                 :            : EXPORT_SYMBOL(pci_bus_read_dev_vendor_id);
    2261                 :            : 
    2262                 :            : /*
    2263                 :            :  * Read the config data for a PCI device, sanity-check it,
    2264                 :            :  * and fill in the dev structure.
    2265                 :            :  */
    2266                 :        117 : static struct pci_dev *pci_scan_device(struct pci_bus *bus, int devfn)
    2267                 :            : {
    2268                 :        117 :         struct pci_dev *dev;
    2269                 :        117 :         u32 l;
    2270                 :            : 
    2271         [ +  + ]:        117 :         if (!pci_bus_read_dev_vendor_id(bus, devfn, &l, 60*1000))
    2272                 :            :                 return NULL;
    2273                 :            : 
    2274                 :         21 :         dev = pci_alloc_dev(bus);
    2275         [ +  - ]:         21 :         if (!dev)
    2276                 :            :                 return NULL;
    2277                 :            : 
    2278                 :         21 :         dev->devfn = devfn;
    2279                 :         21 :         dev->vendor = l & 0xffff;
    2280                 :         21 :         dev->device = (l >> 16) & 0xffff;
    2281                 :            : 
    2282                 :         21 :         pci_set_of_node(dev);
    2283                 :            : 
    2284         [ -  + ]:         21 :         if (pci_setup_device(dev)) {
    2285                 :          0 :                 pci_bus_put(dev->bus);
    2286                 :          0 :                 kfree(dev);
    2287                 :          0 :                 return NULL;
    2288                 :            :         }
    2289                 :            : 
    2290                 :            :         return dev;
    2291                 :            : }
    2292                 :            : 
    2293                 :         21 : void pcie_report_downtraining(struct pci_dev *dev)
    2294                 :            : {
    2295         [ -  + ]:         21 :         if (!pci_is_pcie(dev))
    2296                 :            :                 return;
    2297                 :            : 
    2298                 :            :         /* Look from the device up to avoid downstream ports with no devices */
    2299   [ #  #  #  # ]:          0 :         if ((pci_pcie_type(dev) != PCI_EXP_TYPE_ENDPOINT) &&
    2300         [ #  # ]:          0 :             (pci_pcie_type(dev) != PCI_EXP_TYPE_LEG_END) &&
    2301                 :            :             (pci_pcie_type(dev) != PCI_EXP_TYPE_UPSTREAM))
    2302                 :            :                 return;
    2303                 :            : 
    2304                 :            :         /* Multi-function PCIe devices share the same link/status */
    2305   [ #  #  #  # ]:          0 :         if (PCI_FUNC(dev->devfn) != 0 || dev->is_virtfn)
    2306                 :            :                 return;
    2307                 :            : 
    2308                 :            :         /* Print link status only if the device is constrained by the fabric */
    2309                 :          0 :         __pcie_print_link_status(dev, false);
    2310                 :            : }
    2311                 :            : 
    2312                 :         21 : static void pci_init_capabilities(struct pci_dev *dev)
    2313                 :            : {
    2314                 :         21 :         pci_ea_init(dev);               /* Enhanced Allocation */
    2315                 :            : 
    2316                 :            :         /* Setup MSI caps & disable MSI/MSI-X interrupts */
    2317                 :         21 :         pci_msi_setup_pci_dev(dev);
    2318                 :            : 
    2319                 :            :         /* Buffers for saving PCIe and PCI-X capabilities */
    2320                 :         21 :         pci_allocate_cap_save_buffers(dev);
    2321                 :            : 
    2322                 :         21 :         pci_pm_init(dev);               /* Power Management */
    2323                 :         21 :         pci_vpd_init(dev);              /* Vital Product Data */
    2324                 :         21 :         pci_configure_ari(dev);         /* Alternative Routing-ID Forwarding */
    2325                 :         21 :         pci_iov_init(dev);              /* Single Root I/O Virtualization */
    2326                 :         21 :         pci_ats_init(dev);              /* Address Translation Services */
    2327                 :         21 :         pci_pri_init(dev);              /* Page Request Interface */
    2328                 :         21 :         pci_pasid_init(dev);            /* Process Address Space ID */
    2329                 :         21 :         pci_enable_acs(dev);            /* Enable ACS P2P upstream forwarding */
    2330                 :         21 :         pci_ptm_init(dev);              /* Precision Time Measurement */
    2331                 :         21 :         pci_aer_init(dev);              /* Advanced Error Reporting */
    2332                 :            : 
    2333                 :         21 :         pcie_report_downtraining(dev);
    2334                 :            : 
    2335         [ +  + ]:         21 :         if (pci_probe_reset_function(dev) == 0)
    2336                 :          3 :                 dev->reset_fn = 1;
    2337                 :         21 : }
    2338                 :            : 
    2339                 :            : /*
    2340                 :            :  * This is the equivalent of pci_host_bridge_msi_domain() that acts on
    2341                 :            :  * devices. Firmware interfaces that can select the MSI domain on a
    2342                 :            :  * per-device basis should be called from here.
    2343                 :            :  */
    2344                 :         21 : static struct irq_domain *pci_dev_msi_domain(struct pci_dev *dev)
    2345                 :            : {
    2346                 :         21 :         struct irq_domain *d;
    2347                 :            : 
    2348                 :            :         /*
    2349                 :            :          * If a domain has been set through the pcibios_add_device()
    2350                 :            :          * callback, then this is the one (platform code knows best).
    2351                 :            :          */
    2352                 :         21 :         d = dev_get_msi_domain(&dev->dev);
    2353         [ +  - ]:         21 :         if (d)
    2354                 :            :                 return d;
    2355                 :            : 
    2356                 :            :         /*
    2357                 :            :          * Let's see if we have a firmware interface able to provide
    2358                 :            :          * the domain.
    2359                 :            :          */
    2360                 :         21 :         d = pci_msi_get_device_domain(dev);
    2361         [ -  + ]:         21 :         if (d)
    2362                 :            :                 return d;
    2363                 :            : 
    2364                 :            :         return NULL;
    2365                 :            : }
    2366                 :            : 
    2367                 :         21 : static void pci_set_msi_domain(struct pci_dev *dev)
    2368                 :            : {
    2369                 :         21 :         struct irq_domain *d;
    2370                 :            : 
    2371                 :            :         /*
    2372                 :            :          * If the platform or firmware interfaces cannot supply a
    2373                 :            :          * device-specific MSI domain, then inherit the default domain
    2374                 :            :          * from the host bridge itself.
    2375                 :            :          */
    2376         [ +  - ]:         21 :         d = pci_dev_msi_domain(dev);
    2377         [ #  # ]:          0 :         if (!d)
    2378                 :         21 :                 d = dev_get_msi_domain(&dev->bus->dev);
    2379                 :            : 
    2380                 :         21 :         dev_set_msi_domain(&dev->dev, d);
    2381                 :         21 : }
    2382                 :            : 
    2383                 :         21 : void pci_device_add(struct pci_dev *dev, struct pci_bus *bus)
    2384                 :            : {
    2385                 :         21 :         int ret;
    2386                 :            : 
    2387                 :         21 :         pci_configure_device(dev);
    2388                 :            : 
    2389                 :         21 :         device_initialize(&dev->dev);
    2390                 :         21 :         dev->dev.release = pci_release_dev;
    2391                 :            : 
    2392         [ +  - ]:         21 :         set_dev_node(&dev->dev, pcibus_to_node(bus));
    2393                 :         21 :         dev->dev.dma_mask = &dev->dma_mask;
    2394                 :         21 :         dev->dev.dma_parms = &dev->dma_parms;
    2395                 :         21 :         dev->dev.coherent_dma_mask = 0xffffffffull;
    2396                 :            : 
    2397         [ +  - ]:         21 :         dma_set_max_seg_size(&dev->dev, 65536);
    2398         [ +  - ]:         21 :         dma_set_seg_boundary(&dev->dev, 0xffffffff);
    2399                 :            : 
    2400                 :            :         /* Fix up broken headers */
    2401                 :         21 :         pci_fixup_device(pci_fixup_header, dev);
    2402                 :            : 
    2403                 :         21 :         pci_reassigndev_resource_alignment(dev);
    2404                 :            : 
    2405                 :         21 :         dev->state_saved = false;
    2406                 :            : 
    2407                 :         21 :         pci_init_capabilities(dev);
    2408                 :            : 
    2409                 :            :         /*
    2410                 :            :          * Add the device to our list of discovered devices
    2411                 :            :          * and the bus list for fixup functions, etc.
    2412                 :            :          */
    2413                 :         21 :         down_write(&pci_bus_sem);
    2414                 :         21 :         list_add_tail(&dev->bus_list, &bus->devices);
    2415                 :         21 :         up_write(&pci_bus_sem);
    2416                 :            : 
    2417                 :         21 :         ret = pcibios_add_device(dev);
    2418         [ -  + ]:         21 :         WARN_ON(ret < 0);
    2419                 :            : 
    2420                 :            :         /* Set up MSI IRQ domain */
    2421                 :         21 :         pci_set_msi_domain(dev);
    2422                 :            : 
    2423                 :            :         /* Notifier could use PCI capabilities */
    2424                 :         21 :         dev->match_driver = false;
    2425                 :         21 :         ret = device_add(&dev->dev);
    2426         [ -  + ]:         21 :         WARN_ON(ret < 0);
    2427                 :         21 : }
    2428                 :            : 
    2429                 :        117 : struct pci_dev *pci_scan_single_device(struct pci_bus *bus, int devfn)
    2430                 :            : {
    2431                 :        117 :         struct pci_dev *dev;
    2432                 :            : 
    2433                 :        117 :         dev = pci_get_slot(bus, devfn);
    2434         [ -  + ]:        117 :         if (dev) {
    2435                 :          0 :                 pci_dev_put(dev);
    2436                 :          0 :                 return dev;
    2437                 :            :         }
    2438                 :            : 
    2439                 :        117 :         dev = pci_scan_device(bus, devfn);
    2440         [ +  + ]:        117 :         if (!dev)
    2441                 :            :                 return NULL;
    2442                 :            : 
    2443                 :         21 :         pci_device_add(dev, bus);
    2444                 :            : 
    2445                 :         21 :         return dev;
    2446                 :            : }
    2447                 :            : EXPORT_SYMBOL(pci_scan_single_device);
    2448                 :            : 
    2449                 :         36 : static unsigned next_fn(struct pci_bus *bus, struct pci_dev *dev, unsigned fn)
    2450                 :            : {
    2451                 :         36 :         int pos;
    2452                 :         36 :         u16 cap = 0;
    2453                 :         36 :         unsigned next_fn;
    2454                 :            : 
    2455   [ -  +  -  + ]:         72 :         if (pci_ari_enabled(bus)) {
    2456         [ #  # ]:          0 :                 if (!dev)
    2457                 :            :                         return 0;
    2458                 :          0 :                 pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ARI);
    2459         [ #  # ]:          0 :                 if (!pos)
    2460                 :            :                         return 0;
    2461                 :            : 
    2462                 :          0 :                 pci_read_config_word(dev, pos + PCI_ARI_CAP, &cap);
    2463                 :          0 :                 next_fn = PCI_ARI_CAP_NFN(cap);
    2464         [ #  # ]:          0 :                 if (next_fn <= fn)
    2465                 :            :                         return 0;       /* protect against malformed list */
    2466                 :            : 
    2467                 :          0 :                 return next_fn;
    2468                 :            :         }
    2469                 :            : 
    2470                 :            :         /* dev may be NULL for non-contiguous multifunction devices */
    2471   [ +  +  +  + ]:         36 :         if (!dev || dev->multifunction)
    2472                 :         24 :                 return (fn + 1) % 8;
    2473                 :            : 
    2474                 :            :         return 0;
    2475                 :            : }
    2476                 :            : 
    2477                 :            : static int only_one_child(struct pci_bus *bus)
    2478                 :            : {
    2479                 :            :         struct pci_dev *bridge = bus->self;
    2480                 :            : 
    2481                 :            :         /*
    2482                 :            :          * Systems with unusual topologies set PCI_SCAN_ALL_PCIE_DEVS so
    2483                 :            :          * we scan for all possible devices, not just Device 0.
    2484                 :            :          */
    2485                 :            :         if (pci_has_flag(PCI_SCAN_ALL_PCIE_DEVS))
    2486                 :            :                 return 0;
    2487                 :            : 
    2488                 :            :         /*
    2489                 :            :          * A PCIe Downstream Port normally leads to a Link with only Device
    2490                 :            :          * 0 on it (PCIe spec r3.1, sec 7.3.1).  As an optimization, scan
    2491                 :            :          * only for Device 0 in that situation.
    2492                 :            :          */
    2493                 :            :         if (bridge && pci_is_pcie(bridge) && pcie_downstream_port(bridge))
    2494                 :            :                 return 1;
    2495                 :            : 
    2496                 :            :         return 0;
    2497                 :            : }
    2498                 :            : 
    2499                 :            : /**
    2500                 :            :  * pci_scan_slot - Scan a PCI slot on a bus for devices
    2501                 :            :  * @bus: PCI bus to scan
    2502                 :            :  * @devfn: slot number to scan (must have zero function)
    2503                 :            :  *
    2504                 :            :  * Scan a PCI slot on the specified PCI bus for devices, adding
    2505                 :            :  * discovered devices to the @bus->devices list.  New devices
    2506                 :            :  * will not have is_added set.
    2507                 :            :  *
    2508                 :            :  * Returns the number of new devices found.
    2509                 :            :  */
    2510                 :         96 : int pci_scan_slot(struct pci_bus *bus, int devfn)
    2511                 :            : {
    2512                 :         96 :         unsigned fn, nr = 0;
    2513                 :         96 :         struct pci_dev *dev;
    2514                 :            : 
    2515   [ -  +  -  - ]:         96 :         if (only_one_child(bus) && (devfn > 0))
    2516                 :            :                 return 0; /* Already scanned the entire slot */
    2517                 :            : 
    2518                 :         96 :         dev = pci_scan_single_device(bus, devfn);
    2519         [ +  + ]:         96 :         if (!dev)
    2520                 :            :                 return 0;
    2521         [ +  - ]:         15 :         if (!pci_dev_is_added(dev))
    2522                 :         15 :                 nr++;
    2523                 :            : 
    2524         [ +  + ]:         36 :         for (fn = next_fn(bus, dev, 0); fn > 0; fn = next_fn(bus, dev, fn)) {
    2525                 :         21 :                 dev = pci_scan_single_device(bus, devfn + fn);
    2526         [ +  + ]:         21 :                 if (dev) {
    2527         [ +  - ]:          6 :                         if (!pci_dev_is_added(dev))
    2528                 :          6 :                                 nr++;
    2529                 :          6 :                         dev->multifunction = 1;
    2530                 :            :                 }
    2531                 :            :         }
    2532                 :            : 
    2533                 :            :         /* Only one slot has PCIe device */
    2534   [ -  +  -  - ]:         15 :         if (bus->self && nr)
    2535                 :          0 :                 pcie_aspm_init_link_state(bus->self);
    2536                 :            : 
    2537                 :         15 :         return nr;
    2538                 :            : }
    2539                 :            : EXPORT_SYMBOL(pci_scan_slot);
    2540                 :            : 
    2541                 :          0 : static int pcie_find_smpss(struct pci_dev *dev, void *data)
    2542                 :            : {
    2543                 :          0 :         u8 *smpss = data;
    2544                 :            : 
    2545         [ #  # ]:          0 :         if (!pci_is_pcie(dev))
    2546                 :            :                 return 0;
    2547                 :            : 
    2548                 :            :         /*
    2549                 :            :          * We don't have a way to change MPS settings on devices that have
    2550                 :            :          * drivers attached.  A hot-added device might support only the minimum
    2551                 :            :          * MPS setting (MPS=128).  Therefore, if the fabric contains a bridge
    2552                 :            :          * where devices may be hot-added, we limit the fabric MPS to 128 so
    2553                 :            :          * hot-added devices will work correctly.
    2554                 :            :          *
    2555                 :            :          * However, if we hot-add a device to a slot directly below a Root
    2556                 :            :          * Port, it's impossible for there to be other existing devices below
    2557                 :            :          * the port.  We don't limit the MPS in this case because we can
    2558                 :            :          * reconfigure MPS on both the Root Port and the hot-added device,
    2559                 :            :          * and there are no other devices involved.
    2560                 :            :          *
    2561                 :            :          * Note that this PCIE_BUS_SAFE path assumes no peer-to-peer DMA.
    2562                 :            :          */
    2563   [ #  #  #  #  :          0 :         if (dev->is_hotplug_bridge &&
             #  #  #  # ]
    2564                 :            :             pci_pcie_type(dev) != PCI_EXP_TYPE_ROOT_PORT)
    2565                 :          0 :                 *smpss = 0;
    2566                 :            : 
    2567   [ #  #  #  # ]:          0 :         if (*smpss > dev->pcie_mpss)
    2568                 :          0 :                 *smpss = dev->pcie_mpss;
    2569                 :            : 
    2570                 :            :         return 0;
    2571                 :            : }
    2572                 :            : 
    2573                 :          0 : static void pcie_write_mps(struct pci_dev *dev, int mps)
    2574                 :            : {
    2575                 :          0 :         int rc;
    2576                 :            : 
    2577         [ #  # ]:          0 :         if (pcie_bus_config == PCIE_BUS_PERFORMANCE) {
    2578                 :          0 :                 mps = 128 << dev->pcie_mpss;
    2579                 :            : 
    2580         [ #  # ]:          0 :                 if (pci_pcie_type(dev) != PCI_EXP_TYPE_ROOT_PORT &&
    2581         [ #  # ]:          0 :                     dev->bus->self)
    2582                 :            : 
    2583                 :            :                         /*
    2584                 :            :                          * For "Performance", the assumption is made that
    2585                 :            :                          * downstream communication will never be larger than
    2586                 :            :                          * the MRRS.  So, the MPS only needs to be configured
    2587                 :            :                          * for the upstream communication.  This being the case,
    2588                 :            :                          * walk from the top down and set the MPS of the child
    2589                 :            :                          * to that of the parent bus.
    2590                 :            :                          *
    2591                 :            :                          * Configure the device MPS with the smaller of the
    2592                 :            :                          * device MPSS or the bridge MPS (which is assumed to be
    2593                 :            :                          * properly configured at this point to the largest
    2594                 :            :                          * allowable MPS based on its parent bus).
    2595                 :            :                          */
    2596                 :          0 :                         mps = min(mps, pcie_get_mps(dev->bus->self));
    2597                 :            :         }
    2598                 :            : 
    2599                 :          0 :         rc = pcie_set_mps(dev, mps);
    2600         [ #  # ]:          0 :         if (rc)
    2601                 :          0 :                 pci_err(dev, "Failed attempting to set the MPS\n");
    2602                 :          0 : }
    2603                 :            : 
    2604                 :          0 : static void pcie_write_mrrs(struct pci_dev *dev)
    2605                 :            : {
    2606                 :          0 :         int rc, mrrs;
    2607                 :            : 
    2608                 :            :         /*
    2609                 :            :          * In the "safe" case, do not configure the MRRS.  There appear to be
    2610                 :            :          * issues with setting MRRS to 0 on a number of devices.
    2611                 :            :          */
    2612         [ #  # ]:          0 :         if (pcie_bus_config != PCIE_BUS_PERFORMANCE)
    2613                 :            :                 return;
    2614                 :            : 
    2615                 :            :         /*
    2616                 :            :          * For max performance, the MRRS must be set to the largest supported
    2617                 :            :          * value.  However, it cannot be configured larger than the MPS the
    2618                 :            :          * device or the bus can support.  This should already be properly
    2619                 :            :          * configured by a prior call to pcie_write_mps().
    2620                 :            :          */
    2621                 :          0 :         mrrs = pcie_get_mps(dev);
    2622                 :            : 
    2623                 :            :         /*
    2624                 :            :          * MRRS is a R/W register.  Invalid values can be written, but a
    2625                 :            :          * subsequent read will verify if the value is acceptable or not.
    2626                 :            :          * If the MRRS value provided is not acceptable (e.g., too large),
    2627                 :            :          * shrink the value until it is acceptable to the HW.
    2628                 :            :          */
    2629   [ #  #  #  # ]:          0 :         while (mrrs != pcie_get_readrq(dev) && mrrs >= 128) {
    2630                 :          0 :                 rc = pcie_set_readrq(dev, mrrs);
    2631         [ #  # ]:          0 :                 if (!rc)
    2632                 :            :                         break;
    2633                 :            : 
    2634                 :          0 :                 pci_warn(dev, "Failed attempting to set the MRRS\n");
    2635                 :          0 :                 mrrs /= 2;
    2636                 :            :         }
    2637                 :            : 
    2638         [ #  # ]:          0 :         if (mrrs < 128)
    2639                 :          0 :                 pci_err(dev, "MRRS was unable to be configured with a safe value.  If problems are experienced, try running with pci=pcie_bus_safe\n");
    2640                 :            : }
    2641                 :            : 
    2642                 :          0 : static int pcie_bus_configure_set(struct pci_dev *dev, void *data)
    2643                 :            : {
    2644                 :          0 :         int mps, orig_mps;
    2645                 :            : 
    2646         [ #  # ]:          0 :         if (!pci_is_pcie(dev))
    2647                 :            :                 return 0;
    2648                 :            : 
    2649         [ #  # ]:          0 :         if (pcie_bus_config == PCIE_BUS_TUNE_OFF ||
    2650                 :            :             pcie_bus_config == PCIE_BUS_DEFAULT)
    2651                 :            :                 return 0;
    2652                 :            : 
    2653                 :          0 :         mps = 128 << *(u8 *)data;
    2654                 :          0 :         orig_mps = pcie_get_mps(dev);
    2655                 :            : 
    2656                 :          0 :         pcie_write_mps(dev, mps);
    2657                 :          0 :         pcie_write_mrrs(dev);
    2658                 :            : 
    2659                 :          0 :         pci_info(dev, "Max Payload Size set to %4d/%4d (was %4d), Max Read Rq %4d\n",
    2660                 :            :                  pcie_get_mps(dev), 128 << dev->pcie_mpss,
    2661                 :            :                  orig_mps, pcie_get_readrq(dev));
    2662                 :            : 
    2663                 :          0 :         return 0;
    2664                 :            : }
    2665                 :            : 
    2666                 :            : /*
    2667                 :            :  * pcie_bus_configure_settings() requires that pci_walk_bus work in a top-down,
    2668                 :            :  * parents then children fashion.  If this changes, then this code will not
    2669                 :            :  * work as designed.
    2670                 :            :  */
    2671                 :          0 : void pcie_bus_configure_settings(struct pci_bus *bus)
    2672                 :            : {
    2673                 :          0 :         u8 smpss = 0;
    2674                 :            : 
    2675         [ #  # ]:          0 :         if (!bus->self)
    2676                 :          0 :                 return;
    2677                 :            : 
    2678         [ #  # ]:          0 :         if (!pci_is_pcie(bus->self))
    2679                 :            :                 return;
    2680                 :            : 
    2681                 :            :         /*
    2682                 :            :          * FIXME - Peer to peer DMA is possible, though the endpoint would need
    2683                 :            :          * to be aware of the MPS of the destination.  To work around this,
    2684                 :            :          * simply force the MPS of the entire system to the smallest possible.
    2685                 :            :          */
    2686                 :          0 :         if (pcie_bus_config == PCIE_BUS_PEER2PEER)
    2687                 :            :                 smpss = 0;
    2688                 :            : 
    2689         [ #  # ]:          0 :         if (pcie_bus_config == PCIE_BUS_SAFE) {
    2690                 :          0 :                 smpss = bus->self->pcie_mpss;
    2691                 :            : 
    2692         [ #  # ]:          0 :                 pcie_find_smpss(bus->self, &smpss);
    2693                 :          0 :                 pci_walk_bus(bus, pcie_find_smpss, &smpss);
    2694                 :            :         }
    2695                 :            : 
    2696                 :          0 :         pcie_bus_configure_set(bus->self, &smpss);
    2697                 :          0 :         pci_walk_bus(bus, pcie_bus_configure_set, &smpss);
    2698                 :            : }
    2699                 :            : EXPORT_SYMBOL_GPL(pcie_bus_configure_settings);
    2700                 :            : 
    2701                 :            : /*
    2702                 :            :  * Called after each bus is probed, but before its children are examined.  This
    2703                 :            :  * is marked as __weak because multiple architectures define it.
    2704                 :            :  */
    2705                 :          0 : void __weak pcibios_fixup_bus(struct pci_bus *bus)
    2706                 :            : {
    2707                 :            :        /* nothing to do, expected to be removed in the future */
    2708                 :          0 : }
    2709                 :            : 
    2710                 :            : /**
    2711                 :            :  * pci_scan_child_bus_extend() - Scan devices below a bus
    2712                 :            :  * @bus: Bus to scan for devices
    2713                 :            :  * @available_buses: Total number of buses available (%0 does not try to
    2714                 :            :  *                   extend beyond the minimal)
    2715                 :            :  *
    2716                 :            :  * Scans devices below @bus including subordinate buses. Returns new
    2717                 :            :  * subordinate number including all the found devices. Passing
    2718                 :            :  * @available_buses causes the remaining bus space to be distributed
    2719                 :            :  * equally between hotplug-capable bridges to allow future extension of the
    2720                 :            :  * hierarchy.
    2721                 :            :  */
    2722                 :          3 : static unsigned int pci_scan_child_bus_extend(struct pci_bus *bus,
    2723                 :            :                                               unsigned int available_buses)
    2724                 :            : {
    2725                 :          3 :         unsigned int used_buses, normal_bridges = 0, hotplug_bridges = 0;
    2726                 :          3 :         unsigned int start = bus->busn_res.start;
    2727                 :          3 :         unsigned int devfn, fn, cmax, max = start;
    2728                 :          3 :         struct pci_dev *dev;
    2729                 :          3 :         int nr_devs;
    2730                 :            : 
    2731                 :          3 :         dev_dbg(&bus->dev, "scanning bus\n");
    2732                 :            : 
    2733                 :            :         /* Go find them, Rover! */
    2734         [ +  + ]:         99 :         for (devfn = 0; devfn < 256; devfn += 8) {
    2735                 :         96 :                 nr_devs = pci_scan_slot(bus, devfn);
    2736                 :            : 
    2737                 :            :                 /*
    2738                 :            :                  * The Jailhouse hypervisor may pass individual functions of a
    2739                 :            :                  * multi-function device to a guest without passing function 0.
    2740                 :            :                  * Look for them as well.
    2741                 :            :                  */
    2742                 :         96 :                 if (jailhouse_paravirt() && nr_devs == 0) {
    2743                 :            :                         for (fn = 1; fn < 8; fn++) {
    2744                 :            :                                 dev = pci_scan_single_device(bus, devfn + fn);
    2745                 :            :                                 if (dev)
    2746                 :            :                                         dev->multifunction = 1;
    2747                 :            :                         }
    2748                 :            :                 }
    2749                 :            :         }
    2750                 :            : 
    2751                 :            :         /* Reserve buses for SR-IOV capability */
    2752         [ +  - ]:          3 :         used_buses = pci_iov_bus_range(bus);
    2753                 :          3 :         max += used_buses;
    2754                 :            : 
    2755                 :            :         /*
    2756                 :            :          * After performing arch-dependent fixup of the bus, look behind
    2757                 :            :          * all PCI-to-PCI bridges on this bus.
    2758                 :            :          */
    2759         [ +  - ]:          3 :         if (!bus->is_added) {
    2760                 :          3 :                 dev_dbg(&bus->dev, "fixups for bus\n");
    2761                 :          3 :                 pcibios_fixup_bus(bus);
    2762                 :          3 :                 bus->is_added = 1;
    2763                 :            :         }
    2764                 :            : 
    2765                 :            :         /*
    2766                 :            :          * Calculate how many hotplug bridges and normal bridges there
    2767                 :            :          * are on this bus. We will distribute the additional available
    2768                 :            :          * buses between hotplug bridges.
    2769                 :            :          */
    2770   [ -  +  +  + ]:         24 :         for_each_pci_bridge(dev, bus) {
    2771         [ #  # ]:          0 :                 if (dev->is_hotplug_bridge)
    2772                 :          0 :                         hotplug_bridges++;
    2773                 :            :                 else
    2774                 :          0 :                         normal_bridges++;
    2775                 :            :         }
    2776                 :            : 
    2777                 :            :         /*
    2778                 :            :          * Scan bridges that are already configured. We don't touch them
    2779                 :            :          * unless they are misconfigured (which will be done in the second
    2780                 :            :          * scan below).
    2781                 :            :          */
    2782   [ -  +  +  + ]:         24 :         for_each_pci_bridge(dev, bus) {
    2783                 :          0 :                 cmax = max;
    2784                 :          0 :                 max = pci_scan_bridge_extend(bus, dev, max, 0, 0);
    2785                 :            : 
    2786                 :            :                 /*
    2787                 :            :                  * Reserve one bus for each bridge now to avoid extending
    2788                 :            :                  * hotplug bridges too much during the second scan below.
    2789                 :            :                  */
    2790                 :          0 :                 used_buses++;
    2791         [ #  # ]:          0 :                 if (cmax - max > 1)
    2792                 :          0 :                         used_buses += cmax - max - 1;
    2793                 :            :         }
    2794                 :            : 
    2795                 :            :         /* Scan bridges that need to be reconfigured */
    2796   [ -  +  +  + ]:         24 :         for_each_pci_bridge(dev, bus) {
    2797                 :          0 :                 unsigned int buses = 0;
    2798                 :            : 
    2799         [ #  # ]:          0 :                 if (!hotplug_bridges && normal_bridges == 1) {
    2800                 :            : 
    2801                 :            :                         /*
    2802                 :            :                          * There is only one bridge on the bus (upstream
    2803                 :            :                          * port) so it gets all available buses which it
    2804                 :            :                          * can then distribute to the possible hotplug
    2805                 :            :                          * bridges below.
    2806                 :            :                          */
    2807                 :            :                         buses = available_buses;
    2808         [ #  # ]:          0 :                 } else if (dev->is_hotplug_bridge) {
    2809                 :            : 
    2810                 :            :                         /*
    2811                 :            :                          * Distribute the extra buses between hotplug
    2812                 :            :                          * bridges if any.
    2813                 :            :                          */
    2814                 :          0 :                         buses = available_buses / hotplug_bridges;
    2815                 :          0 :                         buses = min(buses, available_buses - used_buses + 1);
    2816                 :            :                 }
    2817                 :            : 
    2818                 :          0 :                 cmax = max;
    2819                 :          0 :                 max = pci_scan_bridge_extend(bus, dev, cmax, buses, 1);
    2820                 :            :                 /* One bus is already accounted so don't add it again */
    2821         [ #  # ]:          0 :                 if (max - cmax > 1)
    2822                 :          0 :                         used_buses += max - cmax - 1;
    2823                 :            :         }
    2824                 :            : 
    2825                 :            :         /*
    2826                 :            :          * Make sure a hotplug bridge has at least the minimum requested
    2827                 :            :          * number of buses but allow it to grow up to the maximum available
    2828                 :            :          * bus number of there is room.
    2829                 :            :          */
    2830   [ -  +  -  - ]:          3 :         if (bus->self && bus->self->is_hotplug_bridge) {
    2831                 :          0 :                 used_buses = max_t(unsigned int, available_buses,
    2832                 :            :                                    pci_hotplug_bus_size - 1);
    2833         [ #  # ]:          0 :                 if (max - start < used_buses) {
    2834                 :          0 :                         max = start + used_buses;
    2835                 :            : 
    2836                 :            :                         /* Do not allocate more buses than we have room left */
    2837         [ #  # ]:          0 :                         if (max > bus->busn_res.end)
    2838                 :          0 :                                 max = bus->busn_res.end;
    2839                 :            : 
    2840                 :            :                         dev_dbg(&bus->dev, "%pR extended by %#02x\n",
    2841                 :            :                                 &bus->busn_res, max - start);
    2842                 :            :                 }
    2843                 :            :         }
    2844                 :            : 
    2845                 :            :         /*
    2846                 :            :          * We've scanned the bus and so we know all about what's on
    2847                 :            :          * the other side of any bridges that may be on this bus plus
    2848                 :            :          * any devices.
    2849                 :            :          *
    2850                 :            :          * Return how far we've got finding sub-buses.
    2851                 :            :          */
    2852                 :          3 :         dev_dbg(&bus->dev, "bus scan returning with max=%02x\n", max);
    2853                 :          3 :         return max;
    2854                 :            : }
    2855                 :            : 
    2856                 :            : /**
    2857                 :            :  * pci_scan_child_bus() - Scan devices below a bus
    2858                 :            :  * @bus: Bus to scan for devices
    2859                 :            :  *
    2860                 :            :  * Scans devices below @bus including subordinate buses. Returns new
    2861                 :            :  * subordinate number including all the found devices.
    2862                 :            :  */
    2863                 :          3 : unsigned int pci_scan_child_bus(struct pci_bus *bus)
    2864                 :            : {
    2865                 :          3 :         return pci_scan_child_bus_extend(bus, 0);
    2866                 :            : }
    2867                 :            : EXPORT_SYMBOL_GPL(pci_scan_child_bus);
    2868                 :            : 
    2869                 :            : /**
    2870                 :            :  * pcibios_root_bridge_prepare - Platform-specific host bridge setup
    2871                 :            :  * @bridge: Host bridge to set up
    2872                 :            :  *
    2873                 :            :  * Default empty implementation.  Replace with an architecture-specific setup
    2874                 :            :  * routine, if necessary.
    2875                 :            :  */
    2876                 :          0 : int __weak pcibios_root_bridge_prepare(struct pci_host_bridge *bridge)
    2877                 :            : {
    2878                 :          0 :         return 0;
    2879                 :            : }
    2880                 :            : 
    2881                 :          0 : void __weak pcibios_add_bus(struct pci_bus *bus)
    2882                 :            : {
    2883                 :          0 : }
    2884                 :            : 
    2885                 :          0 : void __weak pcibios_remove_bus(struct pci_bus *bus)
    2886                 :            : {
    2887                 :          0 : }
    2888                 :            : 
    2889                 :          3 : struct pci_bus *pci_create_root_bus(struct device *parent, int bus,
    2890                 :            :                 struct pci_ops *ops, void *sysdata, struct list_head *resources)
    2891                 :            : {
    2892                 :          3 :         int error;
    2893                 :          3 :         struct pci_host_bridge *bridge;
    2894                 :            : 
    2895                 :          3 :         bridge = pci_alloc_host_bridge(0);
    2896         [ +  - ]:          3 :         if (!bridge)
    2897                 :            :                 return NULL;
    2898                 :            : 
    2899                 :          3 :         bridge->dev.parent = parent;
    2900                 :            : 
    2901         [ +  - ]:          3 :         list_splice_init(resources, &bridge->windows);
    2902                 :          3 :         bridge->sysdata = sysdata;
    2903                 :          3 :         bridge->busnr = bus;
    2904                 :          3 :         bridge->ops = ops;
    2905                 :            : 
    2906                 :          3 :         error = pci_register_host_bridge(bridge);
    2907         [ -  + ]:          3 :         if (error < 0)
    2908                 :          0 :                 goto err_out;
    2909                 :            : 
    2910                 :          3 :         return bridge->bus;
    2911                 :            : 
    2912                 :            : err_out:
    2913                 :          0 :         kfree(bridge);
    2914                 :          0 :         return NULL;
    2915                 :            : }
    2916                 :            : EXPORT_SYMBOL_GPL(pci_create_root_bus);
    2917                 :            : 
    2918                 :          0 : int pci_host_probe(struct pci_host_bridge *bridge)
    2919                 :            : {
    2920                 :          0 :         struct pci_bus *bus, *child;
    2921                 :          0 :         int ret;
    2922                 :            : 
    2923                 :          0 :         ret = pci_scan_root_bus_bridge(bridge);
    2924         [ #  # ]:          0 :         if (ret < 0) {
    2925                 :          0 :                 dev_err(bridge->dev.parent, "Scanning root bridge failed");
    2926                 :          0 :                 return ret;
    2927                 :            :         }
    2928                 :            : 
    2929                 :          0 :         bus = bridge->bus;
    2930                 :            : 
    2931                 :            :         /*
    2932                 :            :          * We insert PCI resources into the iomem_resource and
    2933                 :            :          * ioport_resource trees in either pci_bus_claim_resources()
    2934                 :            :          * or pci_bus_assign_resources().
    2935                 :            :          */
    2936         [ #  # ]:          0 :         if (pci_has_flag(PCI_PROBE_ONLY)) {
    2937                 :          0 :                 pci_bus_claim_resources(bus);
    2938                 :            :         } else {
    2939                 :          0 :                 pci_bus_size_bridges(bus);
    2940                 :          0 :                 pci_bus_assign_resources(bus);
    2941                 :            : 
    2942         [ #  # ]:          0 :                 list_for_each_entry(child, &bus->children, node)
    2943                 :          0 :                         pcie_bus_configure_settings(child);
    2944                 :            :         }
    2945                 :            : 
    2946                 :          0 :         pci_bus_add_devices(bus);
    2947                 :          0 :         return 0;
    2948                 :            : }
    2949                 :            : EXPORT_SYMBOL_GPL(pci_host_probe);
    2950                 :            : 
    2951                 :          3 : int pci_bus_insert_busn_res(struct pci_bus *b, int bus, int bus_max)
    2952                 :            : {
    2953                 :          3 :         struct resource *res = &b->busn_res;
    2954                 :          3 :         struct resource *parent_res, *conflict;
    2955                 :            : 
    2956                 :          3 :         res->start = bus;
    2957                 :          3 :         res->end = bus_max;
    2958                 :          3 :         res->flags = IORESOURCE_BUS;
    2959                 :            : 
    2960         [ -  + ]:          3 :         if (!pci_is_root_bus(b))
    2961                 :          0 :                 parent_res = &b->parent->busn_res;
    2962                 :            :         else {
    2963                 :          3 :                 parent_res = get_pci_domain_busn_res(pci_domain_nr(b));
    2964                 :          3 :                 res->flags |= IORESOURCE_PCI_FIXED;
    2965                 :            :         }
    2966                 :            : 
    2967                 :          3 :         conflict = request_resource_conflict(parent_res, res);
    2968                 :            : 
    2969         [ -  + ]:          3 :         if (conflict)
    2970         [ #  # ]:          0 :                 dev_info(&b->dev,
    2971                 :            :                            "busn_res: can not insert %pR under %s%pR (conflicts with %s %pR)\n",
    2972                 :            :                             res, pci_is_root_bus(b) ? "domain " : "",
    2973                 :            :                             parent_res, conflict->name, conflict);
    2974                 :            : 
    2975                 :          3 :         return conflict == NULL;
    2976                 :            : }
    2977                 :            : 
    2978                 :          0 : int pci_bus_update_busn_res_end(struct pci_bus *b, int bus_max)
    2979                 :            : {
    2980                 :          0 :         struct resource *res = &b->busn_res;
    2981                 :          0 :         struct resource old_res = *res;
    2982                 :          0 :         resource_size_t size;
    2983                 :          0 :         int ret;
    2984                 :            : 
    2985         [ #  # ]:          0 :         if (res->start > bus_max)
    2986                 :            :                 return -EINVAL;
    2987                 :            : 
    2988                 :          0 :         size = bus_max - res->start + 1;
    2989                 :          0 :         ret = adjust_resource(res, res->start, size);
    2990         [ #  # ]:          0 :         dev_info(&b->dev, "busn_res: %pR end %s updated to %02x\n",
    2991                 :            :                         &old_res, ret ? "can not be" : "is", bus_max);
    2992                 :            : 
    2993   [ #  #  #  # ]:          0 :         if (!ret && !res->parent)
    2994                 :          0 :                 pci_bus_insert_busn_res(b, res->start, res->end);
    2995                 :            : 
    2996                 :            :         return ret;
    2997                 :            : }
    2998                 :            : 
    2999                 :          0 : void pci_bus_release_busn_res(struct pci_bus *b)
    3000                 :            : {
    3001                 :          0 :         struct resource *res = &b->busn_res;
    3002                 :          0 :         int ret;
    3003                 :            : 
    3004   [ #  #  #  # ]:          0 :         if (!res->flags || !res->parent)
    3005                 :            :                 return;
    3006                 :            : 
    3007                 :          0 :         ret = release_resource(res);
    3008         [ #  # ]:          0 :         dev_info(&b->dev, "busn_res: %pR %s released\n",
    3009                 :            :                         res, ret ? "can not be" : "is");
    3010                 :            : }
    3011                 :            : 
    3012                 :          0 : int pci_scan_root_bus_bridge(struct pci_host_bridge *bridge)
    3013                 :            : {
    3014                 :          0 :         struct resource_entry *window;
    3015                 :          0 :         bool found = false;
    3016                 :          0 :         struct pci_bus *b;
    3017                 :          0 :         int max, bus, ret;
    3018                 :            : 
    3019         [ #  # ]:          0 :         if (!bridge)
    3020                 :            :                 return -EINVAL;
    3021                 :            : 
    3022         [ #  # ]:          0 :         resource_list_for_each_entry(window, &bridge->windows)
    3023         [ #  # ]:          0 :                 if (window->res->flags & IORESOURCE_BUS) {
    3024                 :            :                         found = true;
    3025                 :            :                         break;
    3026                 :            :                 }
    3027                 :            : 
    3028                 :          0 :         ret = pci_register_host_bridge(bridge);
    3029         [ #  # ]:          0 :         if (ret < 0)
    3030                 :            :                 return ret;
    3031                 :            : 
    3032                 :          0 :         b = bridge->bus;
    3033                 :          0 :         bus = bridge->busnr;
    3034                 :            : 
    3035         [ #  # ]:          0 :         if (!found) {
    3036                 :          0 :                 dev_info(&b->dev,
    3037                 :            :                  "No busn resource found for root bus, will use [bus %02x-ff]\n",
    3038                 :            :                         bus);
    3039                 :          0 :                 pci_bus_insert_busn_res(b, bus, 255);
    3040                 :            :         }
    3041                 :            : 
    3042                 :          0 :         max = pci_scan_child_bus(b);
    3043                 :            : 
    3044         [ #  # ]:          0 :         if (!found)
    3045                 :          0 :                 pci_bus_update_busn_res_end(b, max);
    3046                 :            : 
    3047                 :            :         return 0;
    3048                 :            : }
    3049                 :            : EXPORT_SYMBOL(pci_scan_root_bus_bridge);
    3050                 :            : 
    3051                 :          0 : struct pci_bus *pci_scan_root_bus(struct device *parent, int bus,
    3052                 :            :                 struct pci_ops *ops, void *sysdata, struct list_head *resources)
    3053                 :            : {
    3054                 :          0 :         struct resource_entry *window;
    3055                 :          0 :         bool found = false;
    3056                 :          0 :         struct pci_bus *b;
    3057                 :          0 :         int max;
    3058                 :            : 
    3059         [ #  # ]:          0 :         resource_list_for_each_entry(window, resources)
    3060         [ #  # ]:          0 :                 if (window->res->flags & IORESOURCE_BUS) {
    3061                 :            :                         found = true;
    3062                 :            :                         break;
    3063                 :            :                 }
    3064                 :            : 
    3065                 :          0 :         b = pci_create_root_bus(parent, bus, ops, sysdata, resources);
    3066         [ #  # ]:          0 :         if (!b)
    3067                 :            :                 return NULL;
    3068                 :            : 
    3069         [ #  # ]:          0 :         if (!found) {
    3070                 :          0 :                 dev_info(&b->dev,
    3071                 :            :                  "No busn resource found for root bus, will use [bus %02x-ff]\n",
    3072                 :            :                         bus);
    3073                 :          0 :                 pci_bus_insert_busn_res(b, bus, 255);
    3074                 :            :         }
    3075                 :            : 
    3076                 :          0 :         max = pci_scan_child_bus(b);
    3077                 :            : 
    3078         [ #  # ]:          0 :         if (!found)
    3079                 :          0 :                 pci_bus_update_busn_res_end(b, max);
    3080                 :            : 
    3081                 :            :         return b;
    3082                 :            : }
    3083                 :            : EXPORT_SYMBOL(pci_scan_root_bus);
    3084                 :            : 
    3085                 :          0 : struct pci_bus *pci_scan_bus(int bus, struct pci_ops *ops,
    3086                 :            :                                         void *sysdata)
    3087                 :            : {
    3088                 :          0 :         LIST_HEAD(resources);
    3089                 :          0 :         struct pci_bus *b;
    3090                 :            : 
    3091                 :          0 :         pci_add_resource(&resources, &ioport_resource);
    3092                 :          0 :         pci_add_resource(&resources, &iomem_resource);
    3093                 :          0 :         pci_add_resource(&resources, &busn_resource);
    3094                 :          0 :         b = pci_create_root_bus(NULL, bus, ops, sysdata, &resources);
    3095         [ #  # ]:          0 :         if (b) {
    3096                 :          0 :                 pci_scan_child_bus(b);
    3097                 :            :         } else {
    3098                 :          0 :                 pci_free_resource_list(&resources);
    3099                 :            :         }
    3100                 :          0 :         return b;
    3101                 :            : }
    3102                 :            : EXPORT_SYMBOL(pci_scan_bus);
    3103                 :            : 
    3104                 :            : /**
    3105                 :            :  * pci_rescan_bus_bridge_resize - Scan a PCI bus for devices
    3106                 :            :  * @bridge: PCI bridge for the bus to scan
    3107                 :            :  *
    3108                 :            :  * Scan a PCI bus and child buses for new devices, add them,
    3109                 :            :  * and enable them, resizing bridge mmio/io resource if necessary
    3110                 :            :  * and possible.  The caller must ensure the child devices are already
    3111                 :            :  * removed for resizing to occur.
    3112                 :            :  *
    3113                 :            :  * Returns the max number of subordinate bus discovered.
    3114                 :            :  */
    3115                 :          0 : unsigned int pci_rescan_bus_bridge_resize(struct pci_dev *bridge)
    3116                 :            : {
    3117                 :          0 :         unsigned int max;
    3118                 :          0 :         struct pci_bus *bus = bridge->subordinate;
    3119                 :            : 
    3120                 :          0 :         max = pci_scan_child_bus(bus);
    3121                 :            : 
    3122                 :          0 :         pci_assign_unassigned_bridge_resources(bridge);
    3123                 :            : 
    3124                 :          0 :         pci_bus_add_devices(bus);
    3125                 :            : 
    3126                 :          0 :         return max;
    3127                 :            : }
    3128                 :            : 
    3129                 :            : /**
    3130                 :            :  * pci_rescan_bus - Scan a PCI bus for devices
    3131                 :            :  * @bus: PCI bus to scan
    3132                 :            :  *
    3133                 :            :  * Scan a PCI bus and child buses for new devices, add them,
    3134                 :            :  * and enable them.
    3135                 :            :  *
    3136                 :            :  * Returns the max number of subordinate bus discovered.
    3137                 :            :  */
    3138                 :          0 : unsigned int pci_rescan_bus(struct pci_bus *bus)
    3139                 :            : {
    3140                 :          0 :         unsigned int max;
    3141                 :            : 
    3142                 :          0 :         max = pci_scan_child_bus(bus);
    3143                 :          0 :         pci_assign_unassigned_bus_resources(bus);
    3144                 :          0 :         pci_bus_add_devices(bus);
    3145                 :            : 
    3146                 :          0 :         return max;
    3147                 :            : }
    3148                 :            : EXPORT_SYMBOL_GPL(pci_rescan_bus);
    3149                 :            : 
    3150                 :            : /*
    3151                 :            :  * pci_rescan_bus(), pci_rescan_bus_bridge_resize() and PCI device removal
    3152                 :            :  * routines should always be executed under this mutex.
    3153                 :            :  */
    3154                 :            : static DEFINE_MUTEX(pci_rescan_remove_lock);
    3155                 :            : 
    3156                 :          3 : void pci_lock_rescan_remove(void)
    3157                 :            : {
    3158                 :          3 :         mutex_lock(&pci_rescan_remove_lock);
    3159                 :          3 : }
    3160                 :            : EXPORT_SYMBOL_GPL(pci_lock_rescan_remove);
    3161                 :            : 
    3162                 :          3 : void pci_unlock_rescan_remove(void)
    3163                 :            : {
    3164                 :          3 :         mutex_unlock(&pci_rescan_remove_lock);
    3165                 :          3 : }
    3166                 :            : EXPORT_SYMBOL_GPL(pci_unlock_rescan_remove);
    3167                 :            : 
    3168                 :          0 : static int __init pci_sort_bf_cmp(const struct device *d_a,
    3169                 :            :                                   const struct device *d_b)
    3170                 :            : {
    3171                 :          0 :         const struct pci_dev *a = to_pci_dev(d_a);
    3172                 :          0 :         const struct pci_dev *b = to_pci_dev(d_b);
    3173                 :            : 
    3174         [ #  # ]:          0 :         if      (pci_domain_nr(a->bus) < pci_domain_nr(b->bus)) return -1;
    3175         [ #  # ]:          0 :         else if (pci_domain_nr(a->bus) > pci_domain_nr(b->bus)) return  1;
    3176                 :            : 
    3177         [ #  # ]:          0 :         if      (a->bus->number < b->bus->number) return -1;
    3178         [ #  # ]:          0 :         else if (a->bus->number > b->bus->number) return  1;
    3179                 :            : 
    3180         [ #  # ]:          0 :         if      (a->devfn < b->devfn) return -1;
    3181         [ #  # ]:          0 :         else if (a->devfn > b->devfn) return  1;
    3182                 :            : 
    3183                 :            :         return 0;
    3184                 :            : }
    3185                 :            : 
    3186                 :          0 : void __init pci_sort_breadthfirst(void)
    3187                 :            : {
    3188                 :          0 :         bus_sort_breadthfirst(&pci_bus_type, &pci_sort_bf_cmp);
    3189                 :          0 : }
    3190                 :            : 
    3191                 :          0 : int pci_hp_add_bridge(struct pci_dev *dev)
    3192                 :            : {
    3193                 :          0 :         struct pci_bus *parent = dev->bus;
    3194                 :          0 :         int busnr, start = parent->busn_res.start;
    3195                 :          0 :         unsigned int available_buses = 0;
    3196                 :          0 :         int end = parent->busn_res.end;
    3197                 :            : 
    3198         [ #  # ]:          0 :         for (busnr = start; busnr <= end; busnr++) {
    3199         [ #  # ]:          0 :                 if (!pci_find_bus(pci_domain_nr(parent), busnr))
    3200                 :            :                         break;
    3201                 :            :         }
    3202         [ #  # ]:          0 :         if (busnr-- > end) {
    3203                 :          0 :                 pci_err(dev, "No bus number available for hot-added bridge\n");
    3204                 :          0 :                 return -1;
    3205                 :            :         }
    3206                 :            : 
    3207                 :            :         /* Scan bridges that are already configured */
    3208                 :          0 :         busnr = pci_scan_bridge(parent, dev, busnr, 0);
    3209                 :            : 
    3210                 :            :         /*
    3211                 :            :          * Distribute the available bus numbers between hotplug-capable
    3212                 :            :          * bridges to make extending the chain later possible.
    3213                 :            :          */
    3214                 :          0 :         available_buses = end - busnr;
    3215                 :            : 
    3216                 :            :         /* Scan bridges that need to be reconfigured */
    3217                 :          0 :         pci_scan_bridge_extend(parent, dev, busnr, available_buses, 1);
    3218                 :            : 
    3219         [ #  # ]:          0 :         if (!dev->subordinate)
    3220                 :          0 :                 return -1;
    3221                 :            : 
    3222                 :            :         return 0;
    3223                 :            : }
    3224                 :            : EXPORT_SYMBOL_GPL(pci_hp_add_bridge);

Generated by: LCOV version 1.14