]> git.karo-electronics.de Git - linux-beck.git/commitdiff
of/pci: Add of_pci_get_max_link_speed() to parse max-link-speed from DT
authorShawn Lin <shawn.lin@rock-chips.com>
Mon, 14 Nov 2016 21:21:14 +0000 (15:21 -0600)
committerBjorn Helgaas <bhelgaas@google.com>
Mon, 14 Nov 2016 21:21:14 +0000 (15:21 -0600)
This new helper function could be used by host drivers to get the limitaion
of max link speed provided by DT.  If the property isn't assigned or is
invalid, it will return -EINVAL to the caller.

Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Acked-by: Rob Herring <robh@kernel.org>
drivers/of/of_pci.c
include/linux/of_pci.h

index b58be12ab27770bbbe40c25eb220a96204c71d3d..0ee42c3e66a1900db49408577c8ae69e698e7223 100644 (file)
@@ -119,6 +119,27 @@ int of_get_pci_domain_nr(struct device_node *node)
 }
 EXPORT_SYMBOL_GPL(of_get_pci_domain_nr);
 
+/**
+ * This function will try to find the limitation of link speed by finding
+ * a property called "max-link-speed" of the given device node.
+ *
+ * @node: device tree node with the max link speed information
+ *
+ * Returns the associated max link speed from DT, or a negative value if the
+ * required property is not found or is invalid.
+ */
+int of_pci_get_max_link_speed(struct device_node *node)
+{
+       u32 max_link_speed;
+
+       if (of_property_read_u32(node, "max-link-speed", &max_link_speed) ||
+           max_link_speed > 4)
+               return -EINVAL;
+
+       return max_link_speed;
+}
+EXPORT_SYMBOL_GPL(of_pci_get_max_link_speed);
+
 /**
  * of_pci_check_probe_only - Setup probe only mode if linux,pci-probe-only
  *                           is present and valid
index 7fd5cfce91403f0571335fc4b172d889e6ad371e..0e0974eceb803b64cee8f8f67a7bde55d58f8f4a 100644 (file)
@@ -16,6 +16,7 @@ int of_pci_get_devfn(struct device_node *np);
 int of_irq_parse_and_map_pci(const struct pci_dev *dev, u8 slot, u8 pin);
 int of_pci_parse_bus_range(struct device_node *node, struct resource *res);
 int of_get_pci_domain_nr(struct device_node *node);
+int of_pci_get_max_link_speed(struct device_node *node);
 void of_pci_check_probe_only(void);
 int of_pci_map_rid(struct device_node *np, u32 rid,
                   const char *map_name, const char *map_mask_name,
@@ -62,6 +63,12 @@ static inline int of_pci_map_rid(struct device_node *np, u32 rid,
        return -EINVAL;
 }
 
+static inline int
+of_pci_get_max_link_speed(struct device_node *node)
+{
+       return -EINVAL;
+}
+
 static inline void of_pci_check_probe_only(void) { }
 #endif