linux/drivers/pci/of.c
<<
>>
Prefs
   1/*
   2 * PCI <-> OF mapping helpers
   3 *
   4 * Copyright 2011 IBM Corp.
   5 *
   6 * This program is free software; you can redistribute it and/or
   7 * modify it under the terms of the GNU General Public License
   8 * as published by the Free Software Foundation; either version
   9 * 2 of the License, or (at your option) any later version.
  10 */
  11
  12#include <linux/kernel.h>
  13#include <linux/pci.h>
  14#include <linux/of.h>
  15#include <linux/of_pci.h>
  16#include "pci.h"
  17
  18void pci_set_of_node(struct pci_dev *dev)
  19{
  20        if (!dev->bus->dev.of_node)
  21                return;
  22        dev->dev.of_node = of_pci_find_child_device(dev->bus->dev.of_node,
  23                                                    dev->devfn);
  24}
  25
  26void pci_release_of_node(struct pci_dev *dev)
  27{
  28        of_node_put(dev->dev.of_node);
  29        dev->dev.of_node = NULL;
  30}
  31
  32void pci_set_bus_of_node(struct pci_bus *bus)
  33{
  34        if (bus->self == NULL)
  35                bus->dev.of_node = pcibios_get_phb_of_node(bus);
  36        else
  37                bus->dev.of_node = of_node_get(bus->self->dev.of_node);
  38}
  39
  40void pci_release_bus_of_node(struct pci_bus *bus)
  41{
  42        of_node_put(bus->dev.of_node);
  43        bus->dev.of_node = NULL;
  44}
  45
  46struct device_node * __weak pcibios_get_phb_of_node(struct pci_bus *bus)
  47{
  48        /* This should only be called for PHBs */
  49        if (WARN_ON(bus->self || bus->parent))
  50                return NULL;
  51
  52        /* Look for a node pointer in either the intermediary device we
  53         * create above the root bus or it's own parent. Normally only
  54         * the later is populated.
  55         */
  56        if (bus->bridge->of_node)
  57                return of_node_get(bus->bridge->of_node);
  58        if (bus->bridge->parent && bus->bridge->parent->of_node)
  59                return of_node_get(bus->bridge->parent->of_node);
  60        return NULL;
  61}
  62
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.