diff options
Diffstat (limited to 'drivers/of')
-rw-r--r-- | drivers/of/Kconfig | 6 | ||||
-rw-r--r-- | drivers/of/address.c | 2 | ||||
-rw-r--r-- | drivers/of/base.c | 32 | ||||
-rw-r--r-- | drivers/of/device.c | 1 | ||||
-rw-r--r-- | drivers/of/dynamic.c | 1 | ||||
-rw-r--r-- | drivers/of/fdt.c | 21 | ||||
-rw-r--r-- | drivers/of/fdt_address.c | 6 | ||||
-rw-r--r-- | drivers/of/irq.c | 9 | ||||
-rw-r--r-- | drivers/of/kobj.c | 2 | ||||
-rw-r--r-- | drivers/of/of_mdio.c | 14 | ||||
-rw-r--r-- | drivers/of/of_numa.c | 13 | ||||
-rw-r--r-- | drivers/of/of_private.h | 6 | ||||
-rw-r--r-- | drivers/of/of_reserved_mem.c | 6 | ||||
-rw-r--r-- | drivers/of/overlay.c | 5 | ||||
-rw-r--r-- | drivers/of/pdt.c | 6 | ||||
-rw-r--r-- | drivers/of/platform.c | 13 | ||||
-rw-r--r-- | drivers/of/property.c | 14 | ||||
-rw-r--r-- | drivers/of/resolver.c | 5 | ||||
-rw-r--r-- | drivers/of/unittest-data/Makefile | 19 | ||||
-rw-r--r-- | drivers/of/unittest-data/overlay_bad_symbol.dts | 1 | ||||
-rw-r--r-- | drivers/of/unittest.c | 11 |
21 files changed, 91 insertions, 102 deletions
diff --git a/drivers/of/Kconfig b/drivers/of/Kconfig index ee244c2e8c2b..783e0870bd22 100644 --- a/drivers/of/Kconfig +++ b/drivers/of/Kconfig @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0 config DTC bool @@ -13,7 +14,8 @@ if OF config OF_UNITTEST bool "Device Tree runtime unit tests" - depends on OF_IRQ + depends on !SPARC + select IRQ_DOMAIN select OF_EARLY_FLATTREE select OF_RESOLVE help @@ -61,7 +63,7 @@ config OF_DYNAMIC config OF_ADDRESS def_bool y - depends on !SPARC && HAS_IOMEM + depends on !SPARC && (HAS_IOMEM || UML) config OF_IRQ def_bool y diff --git a/drivers/of/address.c b/drivers/of/address.c index a4984e7364b1..ce4d3d8b85de 100644 --- a/drivers/of/address.c +++ b/drivers/of/address.c @@ -1,4 +1,4 @@ - +// SPDX-License-Identifier: GPL-2.0 #define pr_fmt(fmt) "OF: " fmt #include <linux/device.h> diff --git a/drivers/of/base.c b/drivers/of/base.c index 26618ba8f92a..ad28de96e13f 100644 --- a/drivers/of/base.c +++ b/drivers/of/base.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0+ /* * Procedures for creating, accessing and interpreting the device tree. * @@ -11,11 +12,6 @@ * * Reconsolidated from arch/x/kernel/prom.c by Stephen Rothwell and * Grant Likely. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version - * 2 of the License, or (at your option) any later version. */ #define pr_fmt(fmt) "OF: " fmt @@ -316,6 +312,32 @@ struct device_node *of_get_cpu_node(int cpu, unsigned int *thread) EXPORT_SYMBOL(of_get_cpu_node); /** + * of_cpu_node_to_id: Get the logical CPU number for a given device_node + * + * @cpu_node: Pointer to the device_node for CPU. + * + * Returns the logical CPU number of the given CPU device_node. + * Returns -ENODEV if the CPU is not found. + */ +int of_cpu_node_to_id(struct device_node *cpu_node) +{ + int cpu; + bool found = false; + struct device_node *np; + + for_each_possible_cpu(cpu) { + np = of_cpu_device_node_get(cpu); + found = (cpu_node == np); + of_node_put(np); + if (found) + return cpu; + } + + return -ENODEV; +} +EXPORT_SYMBOL(of_cpu_node_to_id); + +/** * __of_device_is_compatible() - Check if the node matches given constraints * @device: pointer to node * @compat: required compatible string, NULL or "" for any match diff --git a/drivers/of/device.c b/drivers/of/device.c index 25bddf9c9fe1..064c818105bd 100644 --- a/drivers/of/device.c +++ b/drivers/of/device.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0 #include <linux/string.h> #include <linux/kernel.h> #include <linux/of.h> diff --git a/drivers/of/dynamic.c b/drivers/of/dynamic.c index ab988d88704d..7bb33d22b4e2 100644 --- a/drivers/of/dynamic.c +++ b/drivers/of/dynamic.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Support for dynamic device trees. * diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c index 4675e5ac4d11..84aa9d676375 100644 --- a/drivers/of/fdt.c +++ b/drivers/of/fdt.c @@ -1,12 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Functions for working with the Flattened Device Tree data format * * Copyright 2009 Benjamin Herrenschmidt, IBM Corp * benh@kernel.crashing.org - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 as published by the Free Software Foundation. */ #define pr_fmt(fmt) "OF: fdt: " fmt @@ -14,6 +11,7 @@ #include <linux/crc32.h> #include <linux/kernel.h> #include <linux/initrd.h> +#include <linux/bootmem.h> #include <linux/memblock.h> #include <linux/mutex.h> #include <linux/of.h> @@ -1183,14 +1181,6 @@ int __init __weak early_init_dt_reserve_memory_arch(phys_addr_t base, return memblock_reserve(base, size); } -/* - * called from unflatten_device_tree() to bootstrap devicetree itself - * Architectures can override this definition if memblock isn't used - */ -void * __init __weak early_init_dt_alloc_memory_arch(u64 size, u64 align) -{ - return __va(memblock_alloc(size, align)); -} #else void __init __weak early_init_dt_add_memory_arch(u64 base, u64 size) { @@ -1209,13 +1199,12 @@ int __init __weak early_init_dt_reserve_memory_arch(phys_addr_t base, &base, &size, nomap ? " (nomap)" : ""); return -ENOSYS; } +#endif -void * __init __weak early_init_dt_alloc_memory_arch(u64 size, u64 align) +static void * __init early_init_dt_alloc_memory_arch(u64 size, u64 align) { - WARN_ON(1); - return NULL; + return memblock_virt_alloc(size, align); } -#endif bool __init early_init_dt_verify(void *params) { diff --git a/drivers/of/fdt_address.c b/drivers/of/fdt_address.c index 843a542dac7d..1dc15ab78b10 100644 --- a/drivers/of/fdt_address.c +++ b/drivers/of/fdt_address.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0+ /* * FDT Address translation based on u-boot fdt_support.c which in turn was * based on the kernel unflattened DT address translation code. @@ -6,11 +7,6 @@ * Gerald Van Baren, Custom IDEAS, vanbaren@cideas.com * * Copyright 2010-2011 Freescale Semiconductor, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. */ #define pr_fmt(fmt) "OF: fdt: " fmt diff --git a/drivers/of/irq.c b/drivers/of/irq.c index ec00ae7384c2..02ad93a304a4 100644 --- a/drivers/of/irq.c +++ b/drivers/of/irq.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0+ /* * Derived from arch/i386/kernel/irq.c * Copyright (C) 1992 Linus Torvalds @@ -8,11 +9,6 @@ * Adapted for Power Macintosh by Paul Mackerras * Copyright (C) 1996 Paul Mackerras (paulus@cs.anu.edu.au) * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version - * 2 of the License, or (at your option) any later version. - * * This file contains the code used to make IRQ descriptions in the * device tree to actual irq numbers on an interrupt controller * driver. @@ -83,9 +79,8 @@ EXPORT_SYMBOL_GPL(of_irq_find_parent); /** * of_irq_parse_raw - Low level interrupt tree parsing - * @parent: the device interrupt parent * @addr: address specifier (start of "reg" property of the device) in be32 format - * @out_irq: structure of_irq updated by this function + * @out_irq: structure of_phandle_args updated by this function * * Returns 0 on success and a negative number on error * diff --git a/drivers/of/kobj.c b/drivers/of/kobj.c index 250fc7bb550f..7a0a18980b98 100644 --- a/drivers/of/kobj.c +++ b/drivers/of/kobj.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0 #include <linux/of.h> #include <linux/slab.h> @@ -161,4 +162,3 @@ void __of_detach_node_sysfs(struct device_node *np) /* finally remove the kobj_init ref */ of_node_put(np); } - diff --git a/drivers/of/of_mdio.c b/drivers/of/of_mdio.c index 3481e69738b5..8c0c92712fc9 100644 --- a/drivers/of/of_mdio.c +++ b/drivers/of/of_mdio.c @@ -77,6 +77,11 @@ static int of_mdiobus_register_phy(struct mii_bus *mdio, if (of_property_read_bool(child, "broken-turn-around")) mdio->phy_ignore_ta_mask |= 1 << addr; + of_property_read_u32(child, "reset-assert-us", + &phy->mdio.reset_assert_delay); + of_property_read_u32(child, "reset-deassert-us", + &phy->mdio.reset_deassert_delay); + /* Associate the OF node with the device structure so it * can be looked up later */ of_node_get(child); @@ -231,7 +236,12 @@ int of_mdiobus_register(struct mii_bus *mdio, struct device_node *np) rc = of_mdiobus_register_phy(mdio, child, addr); else rc = of_mdiobus_register_device(mdio, child, addr); - if (rc) + + if (rc == -ENODEV) + dev_err(&mdio->dev, + "MDIO device at address %d is missing.\n", + addr); + else if (rc) goto unregister; } @@ -255,7 +265,7 @@ int of_mdiobus_register(struct mii_bus *mdio, struct device_node *np) if (of_mdiobus_child_is_phy(child)) { rc = of_mdiobus_register_phy(mdio, child, addr); - if (rc) + if (rc && rc != -ENODEV) goto unregister; } } diff --git a/drivers/of/of_numa.c b/drivers/of/of_numa.c index 2db1f7a04baf..f9d5480a4ae5 100644 --- a/drivers/of/of_numa.c +++ b/drivers/of/of_numa.c @@ -1,19 +1,8 @@ +// SPDX-License-Identifier: GPL-2.0 /* * OF NUMA Parsing support. * * Copyright (C) 2015 - 2016 Cavium Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #define pr_fmt(fmt) "OF: NUMA: " fmt diff --git a/drivers/of/of_private.h b/drivers/of/of_private.h index 92a9a3687446..0c609e7d0334 100644 --- a/drivers/of/of_private.h +++ b/drivers/of/of_private.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ #ifndef _LINUX_OF_PRIVATE_H #define _LINUX_OF_PRIVATE_H /* @@ -5,11 +6,6 @@ * * Paul Mackerras August 1996. * Copyright (C) 1996-2005 Paul Mackerras. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version - * 2 of the License, or (at your option) any later version. */ /** diff --git a/drivers/of/of_reserved_mem.c b/drivers/of/of_reserved_mem.c index 22b75c82e377..9a4f4246231d 100644 --- a/drivers/of/of_reserved_mem.c +++ b/drivers/of/of_reserved_mem.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0+ /* * Device tree based initialization code for reserved memory. * @@ -6,11 +7,6 @@ * http://www.samsung.com * Author: Marek Szyprowski <m.szyprowski@samsung.com> * Author: Josh Cartwright <joshc@codeaurora.org> - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License or (at your optional) any later version of the license. */ #define pr_fmt(fmt) "OF: reserved mem: " fmt diff --git a/drivers/of/overlay.c b/drivers/of/overlay.c index 3981b7da4fa9..3397d7642958 100644 --- a/drivers/of/overlay.c +++ b/drivers/of/overlay.c @@ -1,12 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Functions for working with device tree overlays * * Copyright (C) 2012 Pantelis Antoniou <panto@antoniou-consulting.com> * Copyright (C) 2012 Texas Instruments Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 as published by the Free Software Foundation. */ #define pr_fmt(fmt) "OF: overlay: " fmt diff --git a/drivers/of/pdt.c b/drivers/of/pdt.c index d2acae825af9..013e65de074a 100644 --- a/drivers/of/pdt.c +++ b/drivers/of/pdt.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0+ /* pdt.c: OF PROM device tree support code. * * Paul Mackerras August 1996. @@ -8,11 +9,6 @@ * * Adapted for sparc by David S. Miller davem@davemloft.net * Adapted for multiple architectures by Andres Salomon <dilinger@queued.net> - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version - * 2 of the License, or (at your option) any later version. */ #include <linux/kernel.h> diff --git a/drivers/of/platform.c b/drivers/of/platform.c index b7cf84b29737..c00d81dfac0b 100644 --- a/drivers/of/platform.c +++ b/drivers/of/platform.c @@ -1,15 +1,10 @@ +// SPDX-License-Identifier: GPL-2.0+ /* * Copyright (C) 2006 Benjamin Herrenschmidt, IBM Corp. * <benh@kernel.crashing.org> * and Arnd Bergmann, IBM Corp. * Merged from powerpc/kernel/of_platform.c and * sparc{,64}/kernel/of_device.c by Stephen Rothwell - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version - * 2 of the License, or (at your option) any later version. - * */ #define pr_fmt(fmt) "OF: " fmt @@ -518,6 +513,12 @@ static int __init of_platform_default_populate_init(void) for_each_matching_node(node, reserved_mem_matches) of_platform_device_create(node, NULL, NULL); + node = of_find_node_by_path("/firmware"); + if (node) { + of_platform_populate(node, NULL, NULL, NULL); + of_node_put(node); + } + /* Populate everything else. */ of_platform_default_populate(NULL, NULL, NULL); diff --git a/drivers/of/property.c b/drivers/of/property.c index 8ad33a44a7b8..36ed84e26d9c 100644 --- a/drivers/of/property.c +++ b/drivers/of/property.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0+ /* * drivers/of/property.c - Procedures for accessing and interpreting * Devicetree properties and graphs. @@ -16,11 +17,6 @@ * * Reconsolidated from arch/x/kernel/prom.c by Stephen Rothwell and * Grant Likely. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version - * 2 of the License, or (at your option) any later version. */ #define pr_fmt(fmt) "OF: " fmt @@ -981,10 +977,18 @@ static int of_fwnode_graph_parse_endpoint(const struct fwnode_handle *fwnode, return 0; } +static void * +of_fwnode_device_get_match_data(const struct fwnode_handle *fwnode, + const struct device *dev) +{ + return (void *)of_device_get_match_data(dev); +} + const struct fwnode_operations of_fwnode_ops = { .get = of_fwnode_get, .put = of_fwnode_put, .device_is_available = of_fwnode_device_is_available, + .device_get_match_data = of_fwnode_device_get_match_data, .property_present = of_fwnode_property_present, .property_read_int_array = of_fwnode_property_read_int_array, .property_read_string_array = of_fwnode_property_read_string_array, diff --git a/drivers/of/resolver.c b/drivers/of/resolver.c index cfaeef5f6cb1..740d19bde601 100644 --- a/drivers/of/resolver.c +++ b/drivers/of/resolver.c @@ -1,12 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Functions for dealing with DT resolution * * Copyright (C) 2012 Pantelis Antoniou <panto@antoniou-consulting.com> * Copyright (C) 2012 Texas Instruments Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 as published by the Free Software Foundation. */ #define pr_fmt(fmt) "OF: resolver: " fmt diff --git a/drivers/of/unittest-data/Makefile b/drivers/of/unittest-data/Makefile index 32389acfa616..df697976740a 100644 --- a/drivers/of/unittest-data/Makefile +++ b/drivers/of/unittest-data/Makefile @@ -2,19 +2,12 @@ DTC_FLAGS_testcases := -Wno-interrupts_property obj-y += testcases.dtb.o -targets += testcases.dtb testcases.dtb.S +obj-$(CONFIG_OF_OVERLAY) += overlay.dtb.o \ + overlay_bad_phandle.dtb.o \ + overlay_bad_symbol.dtb.o \ + overlay_base.dtb.o -ifdef CONFIG_OF_OVERLAY - -obj-y += overlay.dtb.o -obj-y += overlay_bad_phandle.dtb.o -obj-y += overlay_bad_symbol.dtb.o -obj-y += overlay_base.dtb.o - -targets += overlay.dtb overlay.dtb.S -targets += overlay_bad_phandle.dtb overlay_bad_phandle.dtb.S -targets += overlay_bad_symbol.dtb overlay_bad_symbol.dtb.S -targets += overlay_base.dtb overlay_base.dtb.S +targets += $(foreach suffix, dtb dtb.S, $(patsubst %.dtb.o,%.$(suffix),$(obj-y))) # enable creation of __symbols__ node DTC_FLAGS_overlay := -@ @@ -22,8 +15,6 @@ DTC_FLAGS_overlay_bad_phandle := -@ DTC_FLAGS_overlay_bad_symbol := -@ DTC_FLAGS_overlay_base := -@ -endif - .PRECIOUS: \ $(obj)/%.dtb.S \ $(obj)/%.dtb diff --git a/drivers/of/unittest-data/overlay_bad_symbol.dts b/drivers/of/unittest-data/overlay_bad_symbol.dts index 09261cb9a67e..135052ee1517 100644 --- a/drivers/of/unittest-data/overlay_bad_symbol.dts +++ b/drivers/of/unittest-data/overlay_bad_symbol.dts @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0 /dts-v1/; /plugin/; diff --git a/drivers/of/unittest.c b/drivers/of/unittest.c index 0f8052f1355c..7a9abaae874d 100644 --- a/drivers/of/unittest.c +++ b/drivers/of/unittest.c @@ -5,6 +5,7 @@ #define pr_fmt(fmt) "### dt-test ### " fmt +#include <linux/bootmem.h> #include <linux/clk.h> #include <linux/err.h> #include <linux/errno.h> @@ -2053,6 +2054,11 @@ static struct overlay_info overlays[] = { static struct device_node *overlay_base_root; +static void * __init dt_alloc_memory(u64 size, u64 align) +{ + return memblock_virt_alloc(size, align); +} + /* * Create base device tree for the overlay unittest. * @@ -2092,8 +2098,7 @@ void __init unittest_unflatten_overlay_base(void) return; } - info->data = early_init_dt_alloc_memory_arch(size, - roundup_pow_of_two(FDT_V17_SIZE)); + info->data = dt_alloc_memory(size, roundup_pow_of_two(FDT_V17_SIZE)); if (!info->data) { pr_err("alloc for dtb 'overlay_base' failed"); return; @@ -2102,7 +2107,7 @@ void __init unittest_unflatten_overlay_base(void) memcpy(info->data, info->dtb_begin, size); __unflatten_device_tree(info->data, NULL, &info->np_overlay, - early_init_dt_alloc_memory_arch, true); + dt_alloc_memory, true); overlay_base_root = info->np_overlay; } |