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
commit2d89ba8210f23a4091cf1696ca51dd53c2e6df8c (patch)
tree52eda3b07966857cf55ea2e0b578ca88715aae06 /target/linux
parent756cfaa10278c7ce71ff53b7db12f78571bcda0c (diff)
downloadupstream-2d89ba8210f23a4091cf1696ca51dd53c2e6df8c.tar.gz
upstream-2d89ba8210f23a4091cf1696ca51dd53c2e6df8c.tar.bz2
upstream-2d89ba8210f23a4091cf1696ca51dd53c2e6df8c.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> SVN-Revision: 37826
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