root/arch/powerpc/kernel/pci_dn.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. pci_bus_to_pdn
  2. pci_get_pdn_by_devfn
  3. pci_get_pdn
  4. add_one_dev_pci_data
  5. add_dev_pci_data
  6. remove_dev_pci_data
  7. pci_add_device_node_info
  8. pci_remove_device_node_info
  9. pci_traverse_device_nodes
  10. pci_dn_next_one
  11. traverse_pci_dn
  12. add_pdn
  13. pci_devs_phb_init_dynamic
  14. pci_devs_phb_init
  15. pci_dev_pdn_setup

   1 // SPDX-License-Identifier: GPL-2.0-or-later
   2 /*
   3  * pci_dn.c
   4  *
   5  * Copyright (C) 2001 Todd Inglett, IBM Corporation
   6  *
   7  * PCI manipulation via device_nodes.
   8  */
   9 #include <linux/kernel.h>
  10 #include <linux/pci.h>
  11 #include <linux/string.h>
  12 #include <linux/export.h>
  13 #include <linux/init.h>
  14 #include <linux/gfp.h>
  15 
  16 #include <asm/io.h>
  17 #include <asm/prom.h>
  18 #include <asm/pci-bridge.h>
  19 #include <asm/ppc-pci.h>
  20 #include <asm/firmware.h>
  21 #include <asm/eeh.h>
  22 
  23 /*
  24  * The function is used to find the firmware data of one
  25  * specific PCI device, which is attached to the indicated
  26  * PCI bus. For VFs, their firmware data is linked to that
  27  * one of PF's bridge. For other devices, their firmware
  28  * data is linked to that of their bridge.
  29  */
  30 static struct pci_dn *pci_bus_to_pdn(struct pci_bus *bus)
  31 {
  32         struct pci_bus *pbus;
  33         struct device_node *dn;
  34         struct pci_dn *pdn;
  35 
  36         /*
  37          * We probably have virtual bus which doesn't
  38          * have associated bridge.
  39          */
  40         pbus = bus;
  41         while (pbus) {
  42                 if (pci_is_root_bus(pbus) || pbus->self)
  43                         break;
  44 
  45                 pbus = pbus->parent;
  46         }
  47 
  48         /*
  49          * Except virtual bus, all PCI buses should
  50          * have device nodes.
  51          */
  52         dn = pci_bus_to_OF_node(pbus);
  53         pdn = dn ? PCI_DN(dn) : NULL;
  54 
  55         return pdn;
  56 }
  57 
  58 struct pci_dn *pci_get_pdn_by_devfn(struct pci_bus *bus,
  59                                     int devfn)
  60 {
  61         struct device_node *dn = NULL;
  62         struct pci_dn *parent, *pdn;
  63         struct pci_dev *pdev = NULL;
  64 
  65         /* Fast path: fetch from PCI device */
  66         list_for_each_entry(pdev, &bus->devices, bus_list) {
  67                 if (pdev->devfn == devfn) {
  68                         if (pdev->dev.archdata.pci_data)
  69                                 return pdev->dev.archdata.pci_data;
  70 
  71                         dn = pci_device_to_OF_node(pdev);
  72                         break;
  73                 }
  74         }
  75 
  76         /* Fast path: fetch from device node */
  77         pdn = dn ? PCI_DN(dn) : NULL;
  78         if (pdn)
  79                 return pdn;
  80 
  81         /* Slow path: fetch from firmware data hierarchy */
  82         parent = pci_bus_to_pdn(bus);
  83         if (!parent)
  84                 return NULL;
  85 
  86         list_for_each_entry(pdn, &parent->child_list, list) {
  87                 if (pdn->busno == bus->number &&
  88                     pdn->devfn == devfn)
  89                         return pdn;
  90         }
  91 
  92         return NULL;
  93 }
  94 
  95 struct pci_dn *pci_get_pdn(struct pci_dev *pdev)
  96 {
  97         struct device_node *dn;
  98         struct pci_dn *parent, *pdn;
  99 
 100         /* Search device directly */
 101         if (pdev->dev.archdata.pci_data)
 102                 return pdev->dev.archdata.pci_data;
 103 
 104         /* Check device node */
 105         dn = pci_device_to_OF_node(pdev);
 106         pdn = dn ? PCI_DN(dn) : NULL;
 107         if (pdn)
 108                 return pdn;
 109 
 110         /*
 111          * VFs don't have device nodes. We hook their
 112          * firmware data to PF's bridge.
 113          */
 114         parent = pci_bus_to_pdn(pdev->bus);
 115         if (!parent)
 116                 return NULL;
 117 
 118         list_for_each_entry(pdn, &parent->child_list, list) {
 119                 if (pdn->busno == pdev->bus->number &&
 120                     pdn->devfn == pdev->devfn)
 121                         return pdn;
 122         }
 123 
 124         return NULL;
 125 }
 126 
 127 #ifdef CONFIG_PCI_IOV
 128 static struct pci_dn *add_one_dev_pci_data(struct pci_dn *parent,
 129                                            int vf_index,
 130                                            int busno, int devfn)
 131 {
 132         struct pci_dn *pdn;
 133 
 134         /* Except PHB, we always have the parent */
 135         if (!parent)
 136                 return NULL;
 137 
 138         pdn = kzalloc(sizeof(*pdn), GFP_KERNEL);
 139         if (!pdn)
 140                 return NULL;
 141 
 142         pdn->phb = parent->phb;
 143         pdn->parent = parent;
 144         pdn->busno = busno;
 145         pdn->devfn = devfn;
 146         pdn->vf_index = vf_index;
 147         pdn->pe_number = IODA_INVALID_PE;
 148         INIT_LIST_HEAD(&pdn->child_list);
 149         INIT_LIST_HEAD(&pdn->list);
 150         list_add_tail(&pdn->list, &parent->child_list);
 151 
 152         return pdn;
 153 }
 154 #endif
 155 
 156 struct pci_dn *add_dev_pci_data(struct pci_dev *pdev)
 157 {
 158 #ifdef CONFIG_PCI_IOV
 159         struct pci_dn *parent, *pdn;
 160         int i;
 161 
 162         /* Only support IOV for now */
 163         if (!pdev->is_physfn)
 164                 return pci_get_pdn(pdev);
 165 
 166         /* Check if VFs have been populated */
 167         pdn = pci_get_pdn(pdev);
 168         if (!pdn || (pdn->flags & PCI_DN_FLAG_IOV_VF))
 169                 return NULL;
 170 
 171         pdn->flags |= PCI_DN_FLAG_IOV_VF;
 172         parent = pci_bus_to_pdn(pdev->bus);
 173         if (!parent)
 174                 return NULL;
 175 
 176         for (i = 0; i < pci_sriov_get_totalvfs(pdev); i++) {
 177                 struct eeh_dev *edev __maybe_unused;
 178 
 179                 pdn = add_one_dev_pci_data(parent, i,
 180                                            pci_iov_virtfn_bus(pdev, i),
 181                                            pci_iov_virtfn_devfn(pdev, i));
 182                 if (!pdn) {
 183                         dev_warn(&pdev->dev, "%s: Cannot create firmware data for VF#%d\n",
 184                                  __func__, i);
 185                         return NULL;
 186                 }
 187 
 188 #ifdef CONFIG_EEH
 189                 /* Create the EEH device for the VF */
 190                 edev = eeh_dev_init(pdn);
 191                 BUG_ON(!edev);
 192                 edev->physfn = pdev;
 193 #endif /* CONFIG_EEH */
 194         }
 195 #endif /* CONFIG_PCI_IOV */
 196 
 197         return pci_get_pdn(pdev);
 198 }
 199 
 200 void remove_dev_pci_data(struct pci_dev *pdev)
 201 {
 202 #ifdef CONFIG_PCI_IOV
 203         struct pci_dn *parent;
 204         struct pci_dn *pdn, *tmp;
 205         int i;
 206 
 207         /*
 208          * VF and VF PE are created/released dynamically, so we need to
 209          * bind/unbind them.  Otherwise the VF and VF PE would be mismatched
 210          * when re-enabling SR-IOV.
 211          */
 212         if (pdev->is_virtfn) {
 213                 pdn = pci_get_pdn(pdev);
 214                 pdn->pe_number = IODA_INVALID_PE;
 215                 return;
 216         }
 217 
 218         /* Only support IOV PF for now */
 219         if (!pdev->is_physfn)
 220                 return;
 221 
 222         /* Check if VFs have been populated */
 223         pdn = pci_get_pdn(pdev);
 224         if (!pdn || !(pdn->flags & PCI_DN_FLAG_IOV_VF))
 225                 return;
 226 
 227         pdn->flags &= ~PCI_DN_FLAG_IOV_VF;
 228         parent = pci_bus_to_pdn(pdev->bus);
 229         if (!parent)
 230                 return;
 231 
 232         /*
 233          * We might introduce flag to pci_dn in future
 234          * so that we can release VF's firmware data in
 235          * a batch mode.
 236          */
 237         for (i = 0; i < pci_sriov_get_totalvfs(pdev); i++) {
 238                 struct eeh_dev *edev __maybe_unused;
 239 
 240                 list_for_each_entry_safe(pdn, tmp,
 241                         &parent->child_list, list) {
 242                         if (pdn->busno != pci_iov_virtfn_bus(pdev, i) ||
 243                             pdn->devfn != pci_iov_virtfn_devfn(pdev, i))
 244                                 continue;
 245 
 246 #ifdef CONFIG_EEH
 247                         /*
 248                          * Release EEH state for this VF. The PCI core
 249                          * has already torn down the pci_dev for this VF, but
 250                          * we're responsible to removing the eeh_dev since it
 251                          * has the same lifetime as the pci_dn that spawned it.
 252                          */
 253                         edev = pdn_to_eeh_dev(pdn);
 254                         if (edev) {
 255                                 /*
 256                                  * We allocate pci_dn's for the totalvfs count,
 257                                  * but only only the vfs that were activated
 258                                  * have a configured PE.
 259                                  */
 260                                 if (edev->pe)
 261                                         eeh_rmv_from_parent_pe(edev);
 262 
 263                                 pdn->edev = NULL;
 264                                 kfree(edev);
 265                         }
 266 #endif /* CONFIG_EEH */
 267 
 268                         if (!list_empty(&pdn->list))
 269                                 list_del(&pdn->list);
 270 
 271                         kfree(pdn);
 272                 }
 273         }
 274 #endif /* CONFIG_PCI_IOV */
 275 }
 276 
 277 struct pci_dn *pci_add_device_node_info(struct pci_controller *hose,
 278                                         struct device_node *dn)
 279 {
 280         const __be32 *type = of_get_property(dn, "ibm,pci-config-space-type", NULL);
 281         const __be32 *regs;
 282         struct device_node *parent;
 283         struct pci_dn *pdn;
 284 #ifdef CONFIG_EEH
 285         struct eeh_dev *edev;
 286 #endif
 287 
 288         pdn = kzalloc(sizeof(*pdn), GFP_KERNEL);
 289         if (pdn == NULL)
 290                 return NULL;
 291         dn->data = pdn;
 292         pdn->phb = hose;
 293         pdn->pe_number = IODA_INVALID_PE;
 294         regs = of_get_property(dn, "reg", NULL);
 295         if (regs) {
 296                 u32 addr = of_read_number(regs, 1);
 297 
 298                 /* First register entry is addr (00BBSS00)  */
 299                 pdn->busno = (addr >> 16) & 0xff;
 300                 pdn->devfn = (addr >> 8) & 0xff;
 301         }
 302 
 303         /* vendor/device IDs and class code */
 304         regs = of_get_property(dn, "vendor-id", NULL);
 305         pdn->vendor_id = regs ? of_read_number(regs, 1) : 0;
 306         regs = of_get_property(dn, "device-id", NULL);
 307         pdn->device_id = regs ? of_read_number(regs, 1) : 0;
 308         regs = of_get_property(dn, "class-code", NULL);
 309         pdn->class_code = regs ? of_read_number(regs, 1) : 0;
 310 
 311         /* Extended config space */
 312         pdn->pci_ext_config_space = (type && of_read_number(type, 1) == 1);
 313 
 314         /* Create EEH device */
 315 #ifdef CONFIG_EEH
 316         edev = eeh_dev_init(pdn);
 317         if (!edev) {
 318                 kfree(pdn);
 319                 return NULL;
 320         }
 321 #endif
 322 
 323         /* Attach to parent node */
 324         INIT_LIST_HEAD(&pdn->child_list);
 325         INIT_LIST_HEAD(&pdn->list);
 326         parent = of_get_parent(dn);
 327         pdn->parent = parent ? PCI_DN(parent) : NULL;
 328         if (pdn->parent)
 329                 list_add_tail(&pdn->list, &pdn->parent->child_list);
 330 
 331         return pdn;
 332 }
 333 EXPORT_SYMBOL_GPL(pci_add_device_node_info);
 334 
 335 void pci_remove_device_node_info(struct device_node *dn)
 336 {
 337         struct pci_dn *pdn = dn ? PCI_DN(dn) : NULL;
 338         struct device_node *parent;
 339         struct pci_dev *pdev;
 340 #ifdef CONFIG_EEH
 341         struct eeh_dev *edev = pdn_to_eeh_dev(pdn);
 342 
 343         if (edev)
 344                 edev->pdn = NULL;
 345 #endif
 346 
 347         if (!pdn)
 348                 return;
 349 
 350         WARN_ON(!list_empty(&pdn->child_list));
 351         list_del(&pdn->list);
 352 
 353         /* Drop the parent pci_dn's ref to our backing dt node */
 354         parent = of_get_parent(dn);
 355         if (parent)
 356                 of_node_put(parent);
 357 
 358         /*
 359          * At this point we *might* still have a pci_dev that was
 360          * instantiated from this pci_dn. So defer free()ing it until
 361          * the pci_dev's release function is called.
 362          */
 363         pdev = pci_get_domain_bus_and_slot(pdn->phb->global_number,
 364                         pdn->busno, pdn->devfn);
 365         if (pdev) {
 366                 /* NB: pdev has a ref to dn */
 367                 pci_dbg(pdev, "marked pdn (from %pOF) as dead\n", dn);
 368                 pdn->flags |= PCI_DN_FLAG_DEAD;
 369         } else {
 370                 dn->data = NULL;
 371                 kfree(pdn);
 372         }
 373 
 374         pci_dev_put(pdev);
 375 }
 376 EXPORT_SYMBOL_GPL(pci_remove_device_node_info);
 377 
 378 /*
 379  * Traverse a device tree stopping each PCI device in the tree.
 380  * This is done depth first.  As each node is processed, a "pre"
 381  * function is called and the children are processed recursively.
 382  *
 383  * The "pre" func returns a value.  If non-zero is returned from
 384  * the "pre" func, the traversal stops and this value is returned.
 385  * This return value is useful when using traverse as a method of
 386  * finding a device.
 387  *
 388  * NOTE: we do not run the func for devices that do not appear to
 389  * be PCI except for the start node which we assume (this is good
 390  * because the start node is often a phb which may be missing PCI
 391  * properties).
 392  * We use the class-code as an indicator. If we run into
 393  * one of these nodes we also assume its siblings are non-pci for
 394  * performance.
 395  */
 396 void *pci_traverse_device_nodes(struct device_node *start,
 397                                 void *(*fn)(struct device_node *, void *),
 398                                 void *data)
 399 {
 400         struct device_node *dn, *nextdn;
 401         void *ret;
 402 
 403         /* We started with a phb, iterate all childs */
 404         for (dn = start->child; dn; dn = nextdn) {
 405                 const __be32 *classp;
 406                 u32 class = 0;
 407 
 408                 nextdn = NULL;
 409                 classp = of_get_property(dn, "class-code", NULL);
 410                 if (classp)
 411                         class = of_read_number(classp, 1);
 412 
 413                 if (fn) {
 414                         ret = fn(dn, data);
 415                         if (ret)
 416                                 return ret;
 417                 }
 418 
 419                 /* If we are a PCI bridge, go down */
 420                 if (dn->child && ((class >> 8) == PCI_CLASS_BRIDGE_PCI ||
 421                                   (class >> 8) == PCI_CLASS_BRIDGE_CARDBUS))
 422                         /* Depth first...do children */
 423                         nextdn = dn->child;
 424                 else if (dn->sibling)
 425                         /* ok, try next sibling instead. */
 426                         nextdn = dn->sibling;
 427                 if (!nextdn) {
 428                         /* Walk up to next valid sibling. */
 429                         do {
 430                                 dn = dn->parent;
 431                                 if (dn == start)
 432                                         return NULL;
 433                         } while (dn->sibling == NULL);
 434                         nextdn = dn->sibling;
 435                 }
 436         }
 437         return NULL;
 438 }
 439 EXPORT_SYMBOL_GPL(pci_traverse_device_nodes);
 440 
 441 static struct pci_dn *pci_dn_next_one(struct pci_dn *root,
 442                                       struct pci_dn *pdn)
 443 {
 444         struct list_head *next = pdn->child_list.next;
 445 
 446         if (next != &pdn->child_list)
 447                 return list_entry(next, struct pci_dn, list);
 448 
 449         while (1) {
 450                 if (pdn == root)
 451                         return NULL;
 452 
 453                 next = pdn->list.next;
 454                 if (next != &pdn->parent->child_list)
 455                         break;
 456 
 457                 pdn = pdn->parent;
 458         }
 459 
 460         return list_entry(next, struct pci_dn, list);
 461 }
 462 
 463 void *traverse_pci_dn(struct pci_dn *root,
 464                       void *(*fn)(struct pci_dn *, void *),
 465                       void *data)
 466 {
 467         struct pci_dn *pdn = root;
 468         void *ret;
 469 
 470         /* Only scan the child nodes */
 471         for (pdn = pci_dn_next_one(root, pdn); pdn;
 472              pdn = pci_dn_next_one(root, pdn)) {
 473                 ret = fn(pdn, data);
 474                 if (ret)
 475                         return ret;
 476         }
 477 
 478         return NULL;
 479 }
 480 
 481 static void *add_pdn(struct device_node *dn, void *data)
 482 {
 483         struct pci_controller *hose = data;
 484         struct pci_dn *pdn;
 485 
 486         pdn = pci_add_device_node_info(hose, dn);
 487         if (!pdn)
 488                 return ERR_PTR(-ENOMEM);
 489 
 490         return NULL;
 491 }
 492 
 493 /** 
 494  * pci_devs_phb_init_dynamic - setup pci devices under this PHB
 495  * phb: pci-to-host bridge (top-level bridge connecting to cpu)
 496  *
 497  * This routine is called both during boot, (before the memory
 498  * subsystem is set up, before kmalloc is valid) and during the 
 499  * dynamic lpar operation of adding a PHB to a running system.
 500  */
 501 void pci_devs_phb_init_dynamic(struct pci_controller *phb)
 502 {
 503         struct device_node *dn = phb->dn;
 504         struct pci_dn *pdn;
 505 
 506         /* PHB nodes themselves must not match */
 507         pdn = pci_add_device_node_info(phb, dn);
 508         if (pdn) {
 509                 pdn->devfn = pdn->busno = -1;
 510                 pdn->vendor_id = pdn->device_id = pdn->class_code = 0;
 511                 pdn->phb = phb;
 512                 phb->pci_data = pdn;
 513         }
 514 
 515         /* Update dn->phb ptrs for new phb and children devices */
 516         pci_traverse_device_nodes(dn, add_pdn, phb);
 517 }
 518 
 519 /** 
 520  * pci_devs_phb_init - Initialize phbs and pci devs under them.
 521  * 
 522  * This routine walks over all phb's (pci-host bridges) on the
 523  * system, and sets up assorted pci-related structures 
 524  * (including pci info in the device node structs) for each
 525  * pci device found underneath.  This routine runs once,
 526  * early in the boot sequence.
 527  */
 528 static int __init pci_devs_phb_init(void)
 529 {
 530         struct pci_controller *phb, *tmp;
 531 
 532         /* This must be done first so the device nodes have valid pci info! */
 533         list_for_each_entry_safe(phb, tmp, &hose_list, list_node)
 534                 pci_devs_phb_init_dynamic(phb);
 535 
 536         return 0;
 537 }
 538 
 539 core_initcall(pci_devs_phb_init);
 540 
 541 static void pci_dev_pdn_setup(struct pci_dev *pdev)
 542 {
 543         struct pci_dn *pdn;
 544 
 545         if (pdev->dev.archdata.pci_data)
 546                 return;
 547 
 548         /* Setup the fast path */
 549         pdn = pci_get_pdn(pdev);
 550         pdev->dev.archdata.pci_data = pdn;
 551 }
 552 DECLARE_PCI_FIXUP_EARLY(PCI_ANY_ID, PCI_ANY_ID, pci_dev_pdn_setup);

/* [<][>][^][v][top][bottom][index][help] */