From: Gabor Juhos Date: Fri, 23 Aug 2013 17:07:20 +0000 (+0000) Subject: kernel/3.10: backport of_pci_get_devfn function from 3.11 X-Git-Tag: reboot~9451 X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=2d89ba8210f23a4091cf1696ca51dd53c2e6df8c;p=openwrt%2Fstaging%2Fchunkeey.git 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 Signed-off-by: Gabor Juhos SVN-Revision: 37826 --- 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 +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 +Signed-off-by: Thomas Petazzoni +Signed-off-by: Jason Cooper +--- + 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 + + 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(®[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