aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux
diff options
context:
space:
mode:
authorGabor Juhos <juhosg@openwrt.org>2013-08-23 17:07:20 +0000
committerGabor Juhos <juhosg@openwrt.org>2013-08-23 17:07:20 +0000
commit1331b3cd5bf20f94aca60a55d995b13e753a186e (patch)
treee2fd1be776fc0706d2bb2dafc06e258fdb8577c6 /target/linux
parentb44ba6cd5e7b038bb9c54e7613eb3be88b21a2ab (diff)
downloadupstream-1331b3cd5bf20f94aca60a55d995b13e753a186e.tar.gz
upstream-1331b3cd5bf20f94aca60a55d995b13e753a186e.tar.bz2
upstream-1331b3cd5bf20f94aca60a55d995b13e753a186e.zip
kernel/3.10: backport of_pci_get_devfn function from 3.11
Fixes the following build error on ramips/rt3883: arch/mips/pci/pci-rt3883.c:488:3: error: implicit declaration of function \ 'of_pci_get_devfn' [-Werror=implicit-function-declaration] cc1: some warnings being treated as errors Although the function is only used by the PCI driver of the RT3883 SoC but at the moment but it might be useful for other targets as well. Signed-off-by: Michael Lee <igvtee@gmail.com> Signed-off-by: Gabor Juhos <juhosg@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@37826 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux')
-rw-r--r--target/linux/generic/patches-3.10/003-of-pci-Add-of_pci_get_devfn-function.patch78
1 files changed, 78 insertions, 0 deletions
diff --git a/target/linux/generic/patches-3.10/003-of-pci-Add-of_pci_get_devfn-function.patch b/target/linux/generic/patches-3.10/003-of-pci-Add-of_pci_get_devfn-function.patch
new file mode 100644
index 0000000000..d786d6b5c5
--- /dev/null
+++ b/target/linux/generic/patches-3.10/003-of-pci-Add-of_pci_get_devfn-function.patch
@@ -0,0 +1,78 @@
+From 45ab9702fb47d18dca116b3a0509efa19fbcb27a Mon Sep 17 00:00:00 2001
+From: Thierry Reding <thierry.reding@avionic-design.de>
+Date: Thu, 16 May 2013 17:55:18 +0200
+Subject: [PATCH] of/pci: Add of_pci_get_devfn() function
+
+commit 45ab9702fb47d18dca116b3a0509efa19fbcb27a upstream.
+
+This function can be used to parse the device and function number from a
+standard 5-cell PCI resource. PCI_SLOT() and PCI_FUNC() can be used on
+the returned value obtain the device and function numbers respectively.
+
+Signed-off-by: Thierry Reding <thierry.reding@avionic-design.de>
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+Signed-off-by: Jason Cooper <jason@lakedaemon.net>
+---
+ drivers/of/of_pci.c | 34 +++++++++++++++++++++++++++++-----
+ include/linux/of_pci.h | 1 +
+ 2 files changed, 30 insertions(+), 5 deletions(-)
+
+--- a/drivers/of/of_pci.c
++++ b/drivers/of/of_pci.c
+@@ -5,14 +5,15 @@
+ #include <asm/prom.h>
+
+ static inline int __of_pci_pci_compare(struct device_node *node,
+- unsigned int devfn)
++ unsigned int data)
+ {
+- unsigned int size;
+- const __be32 *reg = of_get_property(node, "reg", &size);
++ int devfn;
+
+- if (!reg || size < 5 * sizeof(__be32))
++ devfn = of_pci_get_devfn(node);
++ if (devfn < 0)
+ return 0;
+- return ((be32_to_cpup(&reg[0]) >> 8) & 0xff) == devfn;
++
++ return devfn == data;
+ }
+
+ struct device_node *of_pci_find_child_device(struct device_node *parent,
+@@ -40,3 +41,26 @@ struct device_node *of_pci_find_child_de
+ return NULL;
+ }
+ EXPORT_SYMBOL_GPL(of_pci_find_child_device);
++
++/**
++ * of_pci_get_devfn() - Get device and function numbers for a device node
++ * @np: device node
++ *
++ * Parses a standard 5-cell PCI resource and returns an 8-bit value that can
++ * be passed to the PCI_SLOT() and PCI_FUNC() macros to extract the device
++ * and function numbers respectively. On error a negative error code is
++ * returned.
++ */
++int of_pci_get_devfn(struct device_node *np)
++{
++ unsigned int size;
++ const __be32 *reg;
++
++ reg = of_get_property(np, "reg", &size);
++
++ if (!reg || size < 5 * sizeof(__be32))
++ return -EINVAL;
++
++ return (be32_to_cpup(reg) >> 8) & 0xff;
++}
++EXPORT_SYMBOL_GPL(of_pci_get_devfn);
+--- a/include/linux/of_pci.h
++++ b/include/linux/of_pci.h
+@@ -10,5 +10,6 @@ int of_irq_map_pci(const struct pci_dev
+ struct device_node;
+ struct device_node *of_pci_find_child_device(struct device_node *parent,
+ unsigned int devfn);
++int of_pci_get_devfn(struct device_node *np);
+
+ #endif