of: net: move of_net under net/
authorJakub Kicinski <kuba@kernel.org>
Thu, 7 Oct 2021 01:06:54 +0000 (18:06 -0700)
committerDavid S. Miller <davem@davemloft.net>
Thu, 7 Oct 2021 12:39:51 +0000 (13:39 +0100)
Rob suggests to move of_net.c from under drivers/of/ somewhere
to the networking code.

Suggested-by: Rob Herring <robh@kernel.org>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Reviewed-by: Rob Herring <robh@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
12 files changed:
drivers/net/ethernet/amd/Kconfig
drivers/net/ethernet/arc/Kconfig
drivers/net/ethernet/ezchip/Kconfig
drivers/net/ethernet/litex/Kconfig
drivers/net/ethernet/mscc/Kconfig
drivers/of/Kconfig
drivers/of/Makefile
drivers/of/of_net.c [deleted file]
include/linux/of_net.h
net/core/Makefile
net/core/net-sysfs.c
net/core/of_net.c [new file with mode: 0644]

index 4786f0504691d665126e7641987ecb89b2c44191..899c8a2a34b6ba0a316f79581b5aaa9d00a009e6 100644 (file)
@@ -168,7 +168,7 @@ config SUNLANCE
 
 config AMD_XGBE
        tristate "AMD 10GbE Ethernet driver"
-       depends on ((OF_NET && OF_ADDRESS) || ACPI || PCI) && HAS_IOMEM
+       depends on (OF_ADDRESS || ACPI || PCI) && HAS_IOMEM
        depends on X86 || ARM64 || COMPILE_TEST
        depends on PTP_1588_CLOCK_OPTIONAL
        select BITREVERSE
index 37a41773dd4350d96fded737601db7afef3ee521..840a9ce7ba1c2e741c3b3007d33def5dfba26db2 100644 (file)
@@ -25,7 +25,7 @@ config ARC_EMAC_CORE
 config ARC_EMAC
        tristate "ARC EMAC support"
        select ARC_EMAC_CORE
-       depends on OF_IRQ && OF_NET
+       depends on OF_IRQ
        depends on ARC || COMPILE_TEST
        help
          On some legacy ARC (Synopsys) FPGA boards such as ARCAngel4/ML50x
@@ -35,7 +35,7 @@ config ARC_EMAC
 config EMAC_ROCKCHIP
        tristate "Rockchip EMAC support"
        select ARC_EMAC_CORE
-       depends on OF_IRQ && OF_NET && REGULATOR
+       depends on OF_IRQ && REGULATOR
        depends on ARCH_ROCKCHIP || COMPILE_TEST
        help
          Support for Rockchip RK3036/RK3066/RK3188 EMAC ethernet controllers.
index 38aa824efb25de663a1d6431d83d1e68abf9b0dd..9241b9b1c7a366caa16f056f530e304656226c7a 100644 (file)
@@ -18,7 +18,7 @@ if NET_VENDOR_EZCHIP
 
 config EZCHIP_NPS_MANAGEMENT_ENET
        tristate "EZchip NPS management enet support"
-       depends on OF_IRQ && OF_NET
+       depends on OF_IRQ
        depends on HAS_IOMEM
        help
          Simple LAN device for debug or management purposes.
index 63bf01d28f0cf0844b195767458a4e9b0afde5ff..f99adbf26ab4e355914d774e873a7b893f6b530c 100644 (file)
@@ -17,7 +17,7 @@ if NET_VENDOR_LITEX
 
 config LITEX_LITEETH
        tristate "LiteX Ethernet support"
-       depends on OF_NET
+       depends on OF
        help
          If you wish to compile a kernel for hardware with a LiteX LiteEth
          device then you should answer Y to this.
index b6a73d151dec11a09d273065319ece300f8f6cea..8dd8c7f425d2c93a43dbec9311c91296cbd1d581 100644 (file)
@@ -28,7 +28,7 @@ config MSCC_OCELOT_SWITCH
        depends on BRIDGE || BRIDGE=n
        depends on NET_SWITCHDEV
        depends on HAS_IOMEM
-       depends on OF_NET
+       depends on OF
        select MSCC_OCELOT_SWITCH_LIB
        select GENERIC_PHY
        help
index 3dfeae8912dfc43839bc4d87e0c9985ecd02cb9f..80b5fd44ab1c7f057f36529af36f53da7f805d57 100644 (file)
@@ -70,10 +70,6 @@ config OF_IRQ
        def_bool y
        depends on !SPARC && IRQ_DOMAIN
 
-config OF_NET
-       depends on NETDEVICES
-       def_bool y
-
 config OF_RESERVED_MEM
        def_bool OF_EARLY_FLATTREE
 
index c13b982084a3a9e9ea4c118a96a3d73905dbb558..e0360a44306e29f71ad94b91b854147823ef8a24 100644 (file)
@@ -7,7 +7,6 @@ obj-$(CONFIG_OF_EARLY_FLATTREE) += fdt_address.o
 obj-$(CONFIG_OF_PROMTREE) += pdt.o
 obj-$(CONFIG_OF_ADDRESS)  += address.o
 obj-$(CONFIG_OF_IRQ)    += irq.o
-obj-$(CONFIG_OF_NET)   += of_net.o
 obj-$(CONFIG_OF_UNITTEST) += unittest.o
 obj-$(CONFIG_OF_RESERVED_MEM) += of_reserved_mem.o
 obj-$(CONFIG_OF_RESOLVE)  += resolver.o
diff --git a/drivers/of/of_net.c b/drivers/of/of_net.c
deleted file mode 100644 (file)
index dbac3a1..0000000
+++ /dev/null
@@ -1,145 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/*
- * OF helpers for network devices.
- *
- * Initially copied out of arch/powerpc/kernel/prom_parse.c
- */
-#include <linux/etherdevice.h>
-#include <linux/kernel.h>
-#include <linux/of_net.h>
-#include <linux/of_platform.h>
-#include <linux/phy.h>
-#include <linux/export.h>
-#include <linux/device.h>
-#include <linux/nvmem-consumer.h>
-
-/**
- * of_get_phy_mode - Get phy mode for given device_node
- * @np:        Pointer to the given device_node
- * @interface: Pointer to the result
- *
- * The function gets phy interface string from property 'phy-mode' or
- * 'phy-connection-type'. The index in phy_modes table is set in
- * interface and 0 returned. In case of error interface is set to
- * PHY_INTERFACE_MODE_NA and an errno is returned, e.g. -ENODEV.
- */
-int of_get_phy_mode(struct device_node *np, phy_interface_t *interface)
-{
-       const char *pm;
-       int err, i;
-
-       *interface = PHY_INTERFACE_MODE_NA;
-
-       err = of_property_read_string(np, "phy-mode", &pm);
-       if (err < 0)
-               err = of_property_read_string(np, "phy-connection-type", &pm);
-       if (err < 0)
-               return err;
-
-       for (i = 0; i < PHY_INTERFACE_MODE_MAX; i++)
-               if (!strcasecmp(pm, phy_modes(i))) {
-                       *interface = i;
-                       return 0;
-               }
-
-       return -ENODEV;
-}
-EXPORT_SYMBOL_GPL(of_get_phy_mode);
-
-static int of_get_mac_addr(struct device_node *np, const char *name, u8 *addr)
-{
-       struct property *pp = of_find_property(np, name, NULL);
-
-       if (pp && pp->length == ETH_ALEN && is_valid_ether_addr(pp->value)) {
-               memcpy(addr, pp->value, ETH_ALEN);
-               return 0;
-       }
-       return -ENODEV;
-}
-
-static int of_get_mac_addr_nvmem(struct device_node *np, u8 *addr)
-{
-       struct platform_device *pdev = of_find_device_by_node(np);
-       struct nvmem_cell *cell;
-       const void *mac;
-       size_t len;
-       int ret;
-
-       /* Try lookup by device first, there might be a nvmem_cell_lookup
-        * associated with a given device.
-        */
-       if (pdev) {
-               ret = nvmem_get_mac_address(&pdev->dev, addr);
-               put_device(&pdev->dev);
-               return ret;
-       }
-
-       cell = of_nvmem_cell_get(np, "mac-address");
-       if (IS_ERR(cell))
-               return PTR_ERR(cell);
-
-       mac = nvmem_cell_read(cell, &len);
-       nvmem_cell_put(cell);
-
-       if (IS_ERR(mac))
-               return PTR_ERR(mac);
-
-       if (len != ETH_ALEN || !is_valid_ether_addr(mac)) {
-               kfree(mac);
-               return -EINVAL;
-       }
-
-       memcpy(addr, mac, ETH_ALEN);
-       kfree(mac);
-
-       return 0;
-}
-
-/**
- * of_get_mac_address()
- * @np:                Caller's Device Node
- * @addr:      Pointer to a six-byte array for the result
- *
- * Search the device tree for the best MAC address to use.  'mac-address' is
- * checked first, because that is supposed to contain to "most recent" MAC
- * address. If that isn't set, then 'local-mac-address' is checked next,
- * because that is the default address. If that isn't set, then the obsolete
- * 'address' is checked, just in case we're using an old device tree. If any
- * of the above isn't set, then try to get MAC address from nvmem cell named
- * 'mac-address'.
- *
- * Note that the 'address' property is supposed to contain a virtual address of
- * the register set, but some DTS files have redefined that property to be the
- * MAC address.
- *
- * All-zero MAC addresses are rejected, because those could be properties that
- * exist in the device tree, but were not set by U-Boot.  For example, the
- * DTS could define 'mac-address' and 'local-mac-address', with zero MAC
- * addresses.  Some older U-Boots only initialized 'local-mac-address'.  In
- * this case, the real MAC is in 'local-mac-address', and 'mac-address' exists
- * but is all zeros.
- *
- * Return: 0 on success and errno in case of error.
-*/
-int of_get_mac_address(struct device_node *np, u8 *addr)
-{
-       int ret;
-
-       if (!np)
-               return -ENODEV;
-
-       ret = of_get_mac_addr(np, "mac-address", addr);
-       if (!ret)
-               return 0;
-
-       ret = of_get_mac_addr(np, "local-mac-address", addr);
-       if (!ret)
-               return 0;
-
-       ret = of_get_mac_addr(np, "address", addr);
-       if (!ret)
-               return 0;
-
-       return of_get_mac_addr_nvmem(np, addr);
-}
-EXPORT_SYMBOL(of_get_mac_address);
index daef3b0d9270de0836852099527d3bff2bc81c08..cf31188329b5a4933cc755bd8cb23cac81a34ea4 100644 (file)
@@ -8,7 +8,7 @@
 
 #include <linux/phy.h>
 
-#ifdef CONFIG_OF_NET
+#ifdef CONFIG_OF
 #include <linux/of.h>
 
 struct net_device;
index 35ced6201814c15772297b51c924b6b5bd04c7f0..4268846f2f4759b4dbd759ea7206287781ef9a3d 100644 (file)
@@ -36,3 +36,4 @@ obj-$(CONFIG_FAILOVER) += failover.o
 obj-$(CONFIG_NET_SOCK_MSG) += skmsg.o
 obj-$(CONFIG_BPF_SYSCALL) += sock_map.o
 obj-$(CONFIG_BPF_SYSCALL) += bpf_sk_storage.o
+obj-$(CONFIG_OF)       += of_net.o
index f6197774048b62460eebe9f34b4c01c8c7e2722d..ae001c2ca2af610def89da6a7ab32a336db189c2 100644 (file)
@@ -1869,7 +1869,7 @@ static struct class net_class __ro_after_init = {
        .get_ownership = net_get_ownership,
 };
 
-#ifdef CONFIG_OF_NET
+#ifdef CONFIG_OF
 static int of_dev_node_match(struct device *dev, const void *data)
 {
        for (; dev; dev = dev->parent) {
diff --git a/net/core/of_net.c b/net/core/of_net.c
new file mode 100644 (file)
index 0000000..dbac3a1
--- /dev/null
@@ -0,0 +1,145 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * OF helpers for network devices.
+ *
+ * Initially copied out of arch/powerpc/kernel/prom_parse.c
+ */
+#include <linux/etherdevice.h>
+#include <linux/kernel.h>
+#include <linux/of_net.h>
+#include <linux/of_platform.h>
+#include <linux/phy.h>
+#include <linux/export.h>
+#include <linux/device.h>
+#include <linux/nvmem-consumer.h>
+
+/**
+ * of_get_phy_mode - Get phy mode for given device_node
+ * @np:        Pointer to the given device_node
+ * @interface: Pointer to the result
+ *
+ * The function gets phy interface string from property 'phy-mode' or
+ * 'phy-connection-type'. The index in phy_modes table is set in
+ * interface and 0 returned. In case of error interface is set to
+ * PHY_INTERFACE_MODE_NA and an errno is returned, e.g. -ENODEV.
+ */
+int of_get_phy_mode(struct device_node *np, phy_interface_t *interface)
+{
+       const char *pm;
+       int err, i;
+
+       *interface = PHY_INTERFACE_MODE_NA;
+
+       err = of_property_read_string(np, "phy-mode", &pm);
+       if (err < 0)
+               err = of_property_read_string(np, "phy-connection-type", &pm);
+       if (err < 0)
+               return err;
+
+       for (i = 0; i < PHY_INTERFACE_MODE_MAX; i++)
+               if (!strcasecmp(pm, phy_modes(i))) {
+                       *interface = i;
+                       return 0;
+               }
+
+       return -ENODEV;
+}
+EXPORT_SYMBOL_GPL(of_get_phy_mode);
+
+static int of_get_mac_addr(struct device_node *np, const char *name, u8 *addr)
+{
+       struct property *pp = of_find_property(np, name, NULL);
+
+       if (pp && pp->length == ETH_ALEN && is_valid_ether_addr(pp->value)) {
+               memcpy(addr, pp->value, ETH_ALEN);
+               return 0;
+       }
+       return -ENODEV;
+}
+
+static int of_get_mac_addr_nvmem(struct device_node *np, u8 *addr)
+{
+       struct platform_device *pdev = of_find_device_by_node(np);
+       struct nvmem_cell *cell;
+       const void *mac;
+       size_t len;
+       int ret;
+
+       /* Try lookup by device first, there might be a nvmem_cell_lookup
+        * associated with a given device.
+        */
+       if (pdev) {
+               ret = nvmem_get_mac_address(&pdev->dev, addr);
+               put_device(&pdev->dev);
+               return ret;
+       }
+
+       cell = of_nvmem_cell_get(np, "mac-address");
+       if (IS_ERR(cell))
+               return PTR_ERR(cell);
+
+       mac = nvmem_cell_read(cell, &len);
+       nvmem_cell_put(cell);
+
+       if (IS_ERR(mac))
+               return PTR_ERR(mac);
+
+       if (len != ETH_ALEN || !is_valid_ether_addr(mac)) {
+               kfree(mac);
+               return -EINVAL;
+       }
+
+       memcpy(addr, mac, ETH_ALEN);
+       kfree(mac);
+
+       return 0;
+}
+
+/**
+ * of_get_mac_address()
+ * @np:                Caller's Device Node
+ * @addr:      Pointer to a six-byte array for the result
+ *
+ * Search the device tree for the best MAC address to use.  'mac-address' is
+ * checked first, because that is supposed to contain to "most recent" MAC
+ * address. If that isn't set, then 'local-mac-address' is checked next,
+ * because that is the default address. If that isn't set, then the obsolete
+ * 'address' is checked, just in case we're using an old device tree. If any
+ * of the above isn't set, then try to get MAC address from nvmem cell named
+ * 'mac-address'.
+ *
+ * Note that the 'address' property is supposed to contain a virtual address of
+ * the register set, but some DTS files have redefined that property to be the
+ * MAC address.
+ *
+ * All-zero MAC addresses are rejected, because those could be properties that
+ * exist in the device tree, but were not set by U-Boot.  For example, the
+ * DTS could define 'mac-address' and 'local-mac-address', with zero MAC
+ * addresses.  Some older U-Boots only initialized 'local-mac-address'.  In
+ * this case, the real MAC is in 'local-mac-address', and 'mac-address' exists
+ * but is all zeros.
+ *
+ * Return: 0 on success and errno in case of error.
+*/
+int of_get_mac_address(struct device_node *np, u8 *addr)
+{
+       int ret;
+
+       if (!np)
+               return -ENODEV;
+
+       ret = of_get_mac_addr(np, "mac-address", addr);
+       if (!ret)
+               return 0;
+
+       ret = of_get_mac_addr(np, "local-mac-address", addr);
+       if (!ret)
+               return 0;
+
+       ret = of_get_mac_addr(np, "address", addr);
+       if (!ret)
+               return 0;
+
+       return of_get_mac_addr_nvmem(np, addr);
+}
+EXPORT_SYMBOL(of_get_mac_address);