]> git.ipfire.org Git - thirdparty/openwrt.git/commitdiff
ltq-ptm: add NVMEM MAC support for ADSL
authorRosen Penev <rosenp@gmail.com>
Thu, 28 Aug 2025 00:21:44 +0000 (17:21 -0700)
committerHauke Mehrtens <hauke@hauke-m.de>
Tue, 23 Sep 2025 21:24:33 +0000 (23:24 +0200)
fcc48204d2 added support for VDSL. This is the same commit but for ADSL.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/19910
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
package/kernel/lantiq/ltq-ptm/Makefile
package/kernel/lantiq/ltq-ptm/src/ifxmips_ptm_adsl.c

index f4d5f766c7e9a2724b81e6d68bb54987eee490ea..5fffe6dfe7c24b27ff0099686378fdfd138122f7 100644 (file)
@@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk
 include $(INCLUDE_DIR)/kernel.mk
 
 PKG_NAME:=ltq-ptm
-PKG_RELEASE:=5
+PKG_RELEASE:=6
 
 PKG_MAINTAINER:=John Crispin <john@phrozen.org>
 PKG_LICENSE:=GPL-2.0+
index 23460501e144162c6060ef1b918d3a3b03f85995..944c941d8b60f9196370edf414e1cf31c8b92cf8 100644 (file)
@@ -46,6 +46,7 @@
 #include <linux/netdevice.h>
 #include <linux/platform_device.h>
 #include <linux/of_device.h>
+#include <linux/of_net.h>
 #include <asm/io.h>
 
 /*
@@ -119,7 +120,7 @@ MODULE_PARM_DESC(eth_efmtc_crc_cfg, "Configuration for PTM TX/RX ethernet/efm-tc
 /*
  *  Network Operations
  */
-static void ptm_setup(struct net_device *, int);
+static int ptm_setup(struct device_node *np, struct net_device *, int);
 static struct net_device_stats *ptm_get_stats(struct net_device *);
 static int ptm_open(struct net_device *);
 static int ptm_stop(struct net_device *);
@@ -275,9 +276,10 @@ static int g_showtime = 0;
  * ####################################
  */
 
-static void ptm_setup(struct net_device *dev, int ndev)
+static int ptm_setup(struct device_node *np, struct net_device *dev, int ndev)
 {
     u8 addr[ETH_ALEN];
+    int err;
 
 #if defined(CONFIG_IFXMIPS_DSL_CPE_MEI) || defined(CONFIG_IFXMIPS_DSL_CPE_MEI_MODULE)
     netif_carrier_off(dev);
@@ -294,13 +296,20 @@ static void ptm_setup(struct net_device *dev, int ndev)
 #endif
     dev->watchdog_timeo  = ETH_WATCHDOG_TIMEOUT;
 
-    addr[0] = 0x00;
-    addr[1] = 0x20;
-    addr[2] = 0xda;
-    addr[3] = 0x86;
-    addr[4] = 0x23;
-    addr[5] = 0x75 + ndev;
-    eth_hw_addr_set(dev, addr);
+    err = of_get_ethdev_address(np, dev);
+    if (err == -EPROBE_DEFER)
+           return err;
+    if (err) {
+        addr[0] = 0x00;
+        addr[1] = 0x20;
+        addr[2] = 0xda;
+        addr[3] = 0x86;
+        addr[4] = 0x23;
+        addr[5] = 0x75 + ndev;
+        eth_hw_addr_set(dev, addr);
+    }
+
+    return 0;
 }
 
 static struct net_device_stats *ptm_get_stats(struct net_device *dev)
@@ -1463,6 +1472,7 @@ static int ltq_ptm_probe(struct platform_device *pdev)
 {
     int ret;
     struct port_cell_info port_cell = {0};
+    struct device_node *np = pdev->dev.of_node;
     void *xdata_addr = NULL;
     int i;
     char ver_str[256];
@@ -1482,7 +1492,9 @@ static int ltq_ptm_probe(struct platform_device *pdev)
         g_net_dev[i] = alloc_netdev(0, g_net_dev_name[i], NET_NAME_UNKNOWN, ether_setup);
         if ( g_net_dev[i] == NULL )
             goto ALLOC_NETDEV_FAIL;
-        ptm_setup(g_net_dev[i], i);
+        ret = ptm_setup(np, g_net_dev[i], i);
+        if (ret == -EPROBE_DEFER)
+            goto ALLOC_NETDEV_FAIL;
     }
 
     for ( i = 0; i < ARRAY_SIZE(g_net_dev); i++ ) {