1 // SPDX-License-Identifier: GPL-2.0+
3 * PCI <-> OF mapping helpers
5 * Copyright 2011 IBM Corp.
7 #define pr_fmt(fmt) "PCI: OF: " fmt
9 #include <linux/irqdomain.h>
10 #include <linux/kernel.h>
11 #include <linux/pci.h>
13 #include <linux/of_irq.h>
14 #include <linux/of_address.h>
15 #include <linux/of_pci.h>
20 * pci_set_of_node - Find and set device's DT device_node
21 * @dev: the PCI device structure to fill
23 * Returns 0 on success with of_node set or when no device is described in the
24 * DT. Returns -ENODEV if the device is present, but disabled in the DT.
26 int pci_set_of_node(struct pci_dev *dev)
28 struct device_node *node;
30 if (!dev->bus->dev.of_node)
33 node = of_pci_find_child_device(dev->bus->dev.of_node, dev->devfn);
37 if (!of_device_is_available(node)) {
42 dev->dev.of_node = node;
43 dev->dev.fwnode = &node->fwnode;
47 void pci_release_of_node(struct pci_dev *dev)
49 of_node_put(dev->dev.of_node);
50 dev->dev.of_node = NULL;
51 dev->dev.fwnode = NULL;
54 void pci_set_bus_of_node(struct pci_bus *bus)
56 struct device_node *node;
58 if (bus->self == NULL) {
59 node = pcibios_get_phb_of_node(bus);
61 node = of_node_get(bus->self->dev.of_node);
62 if (node && of_property_read_bool(node, "external-facing"))
63 bus->self->external_facing = true;
66 bus->dev.of_node = node;
69 bus->dev.fwnode = &bus->dev.of_node->fwnode;
72 void pci_release_bus_of_node(struct pci_bus *bus)
74 of_node_put(bus->dev.of_node);
75 bus->dev.of_node = NULL;
76 bus->dev.fwnode = NULL;
79 struct device_node * __weak pcibios_get_phb_of_node(struct pci_bus *bus)
81 /* This should only be called for PHBs */
82 if (WARN_ON(bus->self || bus->parent))
86 * Look for a node pointer in either the intermediary device we
87 * create above the root bus or its own parent. Normally only
88 * the later is populated.
90 if (bus->bridge->of_node)
91 return of_node_get(bus->bridge->of_node);
92 if (bus->bridge->parent && bus->bridge->parent->of_node)
93 return of_node_get(bus->bridge->parent->of_node);
97 struct irq_domain *pci_host_bridge_of_msi_domain(struct pci_bus *bus)
99 #ifdef CONFIG_IRQ_DOMAIN
100 struct irq_domain *d;
102 if (!bus->dev.of_node)
105 /* Start looking for a phandle to an MSI controller. */
106 d = of_msi_get_domain(&bus->dev, bus->dev.of_node, DOMAIN_BUS_PCI_MSI);
111 * If we don't have an msi-parent property, look for a domain
112 * directly attached to the host bridge.
114 d = irq_find_matching_host(bus->dev.of_node, DOMAIN_BUS_PCI_MSI);
118 return irq_find_host(bus->dev.of_node);
124 bool pci_host_of_has_msi_map(struct device *dev)
126 if (dev && dev->of_node)
127 return of_get_property(dev->of_node, "msi-map", NULL);
131 static inline int __of_pci_pci_compare(struct device_node *node,
136 devfn = of_pci_get_devfn(node);
140 return devfn == data;
143 struct device_node *of_pci_find_child_device(struct device_node *parent,
146 struct device_node *node, *node2;
148 for_each_child_of_node(parent, node) {
149 if (__of_pci_pci_compare(node, devfn))
152 * Some OFs create a parent node "multifunc-device" as
153 * a fake root for all functions of a multi-function
154 * device we go down them as well.
156 if (of_node_name_eq(node, "multifunc-device")) {
157 for_each_child_of_node(node, node2) {
158 if (__of_pci_pci_compare(node2, devfn)) {
167 EXPORT_SYMBOL_GPL(of_pci_find_child_device);
170 * of_pci_get_devfn() - Get device and function numbers for a device node
173 * Parses a standard 5-cell PCI resource and returns an 8-bit value that can
174 * be passed to the PCI_SLOT() and PCI_FUNC() macros to extract the device
175 * and function numbers respectively. On error a negative error code is
178 int of_pci_get_devfn(struct device_node *np)
183 error = of_property_read_u32_array(np, "reg", reg, ARRAY_SIZE(reg));
187 return (reg[0] >> 8) & 0xff;
189 EXPORT_SYMBOL_GPL(of_pci_get_devfn);
192 * of_pci_parse_bus_range() - parse the bus-range property of a PCI device
194 * @res: address to a struct resource to return the bus-range
196 * Returns 0 on success or a negative error-code on failure.
198 int of_pci_parse_bus_range(struct device_node *node, struct resource *res)
203 error = of_property_read_u32_array(node, "bus-range", bus_range,
204 ARRAY_SIZE(bus_range));
208 res->name = node->name;
209 res->start = bus_range[0];
210 res->end = bus_range[1];
211 res->flags = IORESOURCE_BUS;
215 EXPORT_SYMBOL_GPL(of_pci_parse_bus_range);
218 * of_get_pci_domain_nr - Find the host bridge domain number
219 * of the given device node.
220 * @node: Device tree node with the domain information.
222 * This function will try to obtain the host bridge domain number by finding
223 * a property called "linux,pci-domain" of the given device node.
226 * * > 0 - On success, an associated domain number.
227 * * -EINVAL - The property "linux,pci-domain" does not exist.
228 * * -ENODATA - The linux,pci-domain" property does not have value.
229 * * -EOVERFLOW - Invalid "linux,pci-domain" property value.
231 * Returns the associated domain number from DT in the range [0-0xffff], or
232 * a negative value if the required property is not found.
234 int of_get_pci_domain_nr(struct device_node *node)
239 error = of_property_read_u32(node, "linux,pci-domain", &domain);
245 EXPORT_SYMBOL_GPL(of_get_pci_domain_nr);
248 * of_pci_check_probe_only - Setup probe only mode if linux,pci-probe-only
249 * is present and valid
251 void of_pci_check_probe_only(void)
256 ret = of_property_read_u32(of_chosen, "linux,pci-probe-only", &val);
258 if (ret == -ENODATA || ret == -EOVERFLOW)
259 pr_warn("linux,pci-probe-only without valid value, ignoring\n");
264 pci_add_flags(PCI_PROBE_ONLY);
266 pci_clear_flags(PCI_PROBE_ONLY);
268 pr_info("PROBE_ONLY %s\n", val ? "enabled" : "disabled");
270 EXPORT_SYMBOL_GPL(of_pci_check_probe_only);
273 * devm_of_pci_get_host_bridge_resources() - Resource-managed parsing of PCI
274 * host bridge resources from DT
275 * @dev: host bridge device
276 * @busno: bus number associated with the bridge root bus
277 * @bus_max: maximum number of buses for this bridge
278 * @resources: list where the range of resources will be added after DT parsing
279 * @ib_resources: list where the range of inbound resources (with addresses
280 * from 'dma-ranges') will be added after DT parsing
281 * @io_base: pointer to a variable that will contain on return the physical
282 * address for the start of the I/O range. Can be NULL if the caller doesn't
283 * expect I/O ranges to be present in the device tree.
285 * This function will parse the "ranges" property of a PCI host bridge device
286 * node and setup the resource mapping based on its content. It is expected
287 * that the property conforms with the Power ePAPR document.
289 * It returns zero if the range parsing has been successful or a standard error
290 * value if it failed.
292 static int devm_of_pci_get_host_bridge_resources(struct device *dev,
293 unsigned char busno, unsigned char bus_max,
294 struct list_head *resources,
295 struct list_head *ib_resources,
296 resource_size_t *io_base)
298 struct device_node *dev_node = dev->of_node;
299 struct resource *res, tmp_res;
300 struct resource *bus_range;
301 struct of_pci_range range;
302 struct of_pci_range_parser parser;
303 const char *range_type;
307 *io_base = (resource_size_t)OF_BAD_ADDR;
309 bus_range = devm_kzalloc(dev, sizeof(*bus_range), GFP_KERNEL);
313 dev_info(dev, "host bridge %pOF ranges:\n", dev_node);
315 err = of_pci_parse_bus_range(dev_node, bus_range);
317 bus_range->start = busno;
318 bus_range->end = bus_max;
319 bus_range->flags = IORESOURCE_BUS;
320 dev_info(dev, " No bus range found for %pOF, using %pR\n",
321 dev_node, bus_range);
323 if (bus_range->end > bus_range->start + bus_max)
324 bus_range->end = bus_range->start + bus_max;
326 pci_add_resource(resources, bus_range);
328 /* Check for ranges property */
329 err = of_pci_range_parser_init(&parser, dev_node);
333 dev_dbg(dev, "Parsing ranges property...\n");
334 for_each_of_pci_range(&parser, &range) {
335 /* Read next ranges element */
336 if ((range.flags & IORESOURCE_TYPE_BITS) == IORESOURCE_IO)
338 else if ((range.flags & IORESOURCE_TYPE_BITS) == IORESOURCE_MEM)
342 dev_info(dev, " %6s %#012llx..%#012llx -> %#012llx\n",
343 range_type, range.cpu_addr,
344 range.cpu_addr + range.size - 1, range.pci_addr);
347 * If we failed translation or got a zero-sized region
348 * then skip this range
350 if (range.cpu_addr == OF_BAD_ADDR || range.size == 0)
353 err = of_pci_range_to_resource(&range, dev_node, &tmp_res);
357 res = devm_kmemdup(dev, &tmp_res, sizeof(tmp_res), GFP_KERNEL);
363 if (resource_type(res) == IORESOURCE_IO) {
365 dev_err(dev, "I/O range found for %pOF. Please provide an io_base pointer to save CPU base address\n",
370 if (*io_base != (resource_size_t)OF_BAD_ADDR)
371 dev_warn(dev, "More than one I/O resource converted for %pOF. CPU base address for old range lost!\n",
373 *io_base = range.cpu_addr;
374 } else if (resource_type(res) == IORESOURCE_MEM) {
375 res->flags &= ~IORESOURCE_MEM_64;
378 pci_add_resource_offset(resources, res, res->start - range.pci_addr);
381 /* Check for dma-ranges property */
384 err = of_pci_dma_range_parser_init(&parser, dev_node);
388 dev_dbg(dev, "Parsing dma-ranges property...\n");
389 for_each_of_pci_range(&parser, &range) {
391 * If we failed translation or got a zero-sized region
392 * then skip this range
394 if (((range.flags & IORESOURCE_TYPE_BITS) != IORESOURCE_MEM) ||
395 range.cpu_addr == OF_BAD_ADDR || range.size == 0)
398 dev_info(dev, " %6s %#012llx..%#012llx -> %#012llx\n",
399 "IB MEM", range.cpu_addr,
400 range.cpu_addr + range.size - 1, range.pci_addr);
403 err = of_pci_range_to_resource(&range, dev_node, &tmp_res);
407 res = devm_kmemdup(dev, &tmp_res, sizeof(tmp_res), GFP_KERNEL);
413 pci_add_resource_offset(ib_resources, res,
414 res->start - range.pci_addr);
420 pci_free_resource_list(resources);
424 #if IS_ENABLED(CONFIG_OF_IRQ)
426 * of_irq_parse_pci - Resolve the interrupt for a PCI device
427 * @pdev: the device whose interrupt is to be resolved
428 * @out_irq: structure of_phandle_args filled by this function
430 * This function resolves the PCI interrupt for a given PCI device. If a
431 * device-node exists for a given pci_dev, it will use normal OF tree
432 * walking. If not, it will implement standard swizzling and walk up the
433 * PCI tree until an device-node is found, at which point it will finish
434 * resolving using the OF tree walking.
436 static int of_irq_parse_pci(const struct pci_dev *pdev, struct of_phandle_args *out_irq)
438 struct device_node *dn, *ppnode = NULL;
439 struct pci_dev *ppdev;
445 * Check if we have a device node, if yes, fallback to standard
446 * device tree parsing
448 dn = pci_device_to_OF_node(pdev);
450 rc = of_irq_parse_one(dn, 0, out_irq);
456 * Ok, we don't, time to have fun. Let's start by building up an
457 * interrupt spec. we assume #interrupt-cells is 1, which is standard
458 * for PCI. If you do different, then don't use that routine.
460 rc = pci_read_config_byte(pdev, PCI_INTERRUPT_PIN, &pin);
463 /* No pin, exit with no error message. */
467 /* Local interrupt-map in the device node? Use it! */
468 if (of_property_present(dn, "interrupt-map")) {
469 pin = pci_swizzle_interrupt_pin(pdev, pin);
473 /* Now we walk up the PCI tree */
475 /* Get the pci_dev of our parent */
476 ppdev = pdev->bus->self;
478 /* Ouch, it's a host bridge... */
480 ppnode = pci_bus_to_OF_node(pdev->bus);
482 /* No node for host bridge ? give up */
483 if (ppnode == NULL) {
488 /* We found a P2P bridge, check if it has a node */
489 ppnode = pci_device_to_OF_node(ppdev);
493 * Ok, we have found a parent with a device-node, hand over to
494 * the OF parsing code.
495 * We build a unit address from the linux device to be used for
496 * resolution. Note that we use the linux bus number which may
497 * not match your firmware bus numbering.
498 * Fortunately, in most cases, interrupt-map-mask doesn't
499 * include the bus number as part of the matching.
500 * You should still be careful about that though if you intend
501 * to rely on this function (you ship a firmware that doesn't
502 * create device nodes for all PCI devices).
508 * We can only get here if we hit a P2P bridge with no node;
509 * let's do standard swizzling and try again
511 pin = pci_swizzle_interrupt_pin(pdev, pin);
515 out_irq->np = ppnode;
516 out_irq->args_count = 1;
517 out_irq->args[0] = pin;
518 laddr[0] = cpu_to_be32((pdev->bus->number << 16) | (pdev->devfn << 8));
519 laddr[1] = laddr[2] = cpu_to_be32(0);
520 rc = of_irq_parse_raw(laddr, out_irq);
527 "%s: no interrupt-map found, INTx interrupts not available\n",
529 pr_warn_once("%s: possibly some PCI slots don't have level triggered interrupts capability\n",
532 dev_err(&pdev->dev, "%s: failed with rc=%d\n", __func__, rc);
538 * of_irq_parse_and_map_pci() - Decode a PCI IRQ from the device tree and map to a VIRQ
539 * @dev: The PCI device needing an IRQ
540 * @slot: PCI slot number; passed when used as map_irq callback. Unused
541 * @pin: PCI IRQ pin number; passed when used as map_irq callback. Unused
543 * @slot and @pin are unused, but included in the function so that this
544 * function can be used directly as the map_irq callback to
545 * pci_assign_irq() and struct pci_host_bridge.map_irq pointer
547 int of_irq_parse_and_map_pci(const struct pci_dev *dev, u8 slot, u8 pin)
549 struct of_phandle_args oirq;
552 ret = of_irq_parse_pci(dev, &oirq);
554 return 0; /* Proper return code 0 == NO_IRQ */
556 return irq_create_of_mapping(&oirq);
558 EXPORT_SYMBOL_GPL(of_irq_parse_and_map_pci);
559 #endif /* CONFIG_OF_IRQ */
561 static int pci_parse_request_of_pci_ranges(struct device *dev,
562 struct pci_host_bridge *bridge)
564 int err, res_valid = 0;
565 resource_size_t iobase;
566 struct resource_entry *win, *tmp;
568 INIT_LIST_HEAD(&bridge->windows);
569 INIT_LIST_HEAD(&bridge->dma_ranges);
571 err = devm_of_pci_get_host_bridge_resources(dev, 0, 0xff, &bridge->windows,
572 &bridge->dma_ranges, &iobase);
576 err = devm_request_pci_bus_resources(dev, &bridge->windows);
580 resource_list_for_each_entry_safe(win, tmp, &bridge->windows) {
581 struct resource *res = win->res;
583 switch (resource_type(res)) {
585 err = devm_pci_remap_iospace(dev, res, iobase);
587 dev_warn(dev, "error %d: failed to map resource %pR\n",
589 resource_list_destroy_entry(win);
593 res_valid |= !(res->flags & IORESOURCE_PREFETCH);
595 if (!(res->flags & IORESOURCE_PREFETCH))
596 if (upper_32_bits(resource_size(res)))
597 dev_warn(dev, "Memory resource size exceeds max for 32 bits\n");
604 dev_warn(dev, "non-prefetchable memory resource required\n");
609 int devm_of_pci_bridge_init(struct device *dev, struct pci_host_bridge *bridge)
614 bridge->swizzle_irq = pci_common_swizzle;
615 bridge->map_irq = of_irq_parse_and_map_pci;
617 return pci_parse_request_of_pci_ranges(dev, bridge);
620 #endif /* CONFIG_PCI */
623 * of_pci_get_max_link_speed - Find the maximum link speed of the given device node.
624 * @node: Device tree node with the maximum link speed information.
626 * This function will try to find the limitation of link speed by finding
627 * a property called "max-link-speed" of the given device node.
630 * * > 0 - On success, a maximum link speed.
631 * * -EINVAL - Invalid "max-link-speed" property value, or failure to access
632 * the property of the device tree node.
634 * Returns the associated max link speed from DT, or a negative value if the
635 * required property is not found or is invalid.
637 int of_pci_get_max_link_speed(struct device_node *node)
641 if (of_property_read_u32(node, "max-link-speed", &max_link_speed) ||
642 max_link_speed == 0 || max_link_speed > 4)
645 return max_link_speed;
647 EXPORT_SYMBOL_GPL(of_pci_get_max_link_speed);
650 * of_pci_get_slot_power_limit - Parses the "slot-power-limit-milliwatt"
653 * @node: device tree node with the slot power limit information
654 * @slot_power_limit_value: pointer where the value should be stored in PCIe
655 * Slot Capabilities Register format
656 * @slot_power_limit_scale: pointer where the scale should be stored in PCIe
657 * Slot Capabilities Register format
659 * Returns the slot power limit in milliwatts and if @slot_power_limit_value
660 * and @slot_power_limit_scale pointers are non-NULL, fills in the value and
661 * scale in format used by PCIe Slot Capabilities Register.
663 * If the property is not found or is invalid, returns 0.
665 u32 of_pci_get_slot_power_limit(struct device_node *node,
666 u8 *slot_power_limit_value,
667 u8 *slot_power_limit_scale)
669 u32 slot_power_limit_mw;
672 if (of_property_read_u32(node, "slot-power-limit-milliwatt",
673 &slot_power_limit_mw))
674 slot_power_limit_mw = 0;
676 /* Calculate Slot Power Limit Value and Slot Power Limit Scale */
677 if (slot_power_limit_mw == 0) {
680 } else if (slot_power_limit_mw <= 255) {
681 value = slot_power_limit_mw;
683 } else if (slot_power_limit_mw <= 255*10) {
684 value = slot_power_limit_mw / 10;
686 slot_power_limit_mw = slot_power_limit_mw / 10 * 10;
687 } else if (slot_power_limit_mw <= 255*100) {
688 value = slot_power_limit_mw / 100;
690 slot_power_limit_mw = slot_power_limit_mw / 100 * 100;
691 } else if (slot_power_limit_mw <= 239*1000) {
692 value = slot_power_limit_mw / 1000;
694 slot_power_limit_mw = slot_power_limit_mw / 1000 * 1000;
695 } else if (slot_power_limit_mw < 250*1000) {
698 slot_power_limit_mw = 239*1000;
699 } else if (slot_power_limit_mw <= 600*1000) {
700 value = 0xF0 + (slot_power_limit_mw / 1000 - 250) / 25;
702 slot_power_limit_mw = slot_power_limit_mw / (1000*25) * (1000*25);
706 slot_power_limit_mw = 600*1000;
709 if (slot_power_limit_value)
710 *slot_power_limit_value = value;
712 if (slot_power_limit_scale)
713 *slot_power_limit_scale = scale;
715 return slot_power_limit_mw;
717 EXPORT_SYMBOL_GPL(of_pci_get_slot_power_limit);