Introduce logging macros (DH_LOG_EMERG/ALERT/CRIT/ERR/WARN/INFO/DBG)
and helper definitions for ZTE DingHai driver debugging.

Signed-off-by: Junyang Han <han.junyang@zte.com.cn>
---
 drivers/net/ethernet/zte/dinghai/dh_log.h | 60 +++++++++++++++++++++++
 drivers/net/ethernet/zte/dinghai/en_pf.c  | 49 +++++++++++++++---
 2 files changed, 101 insertions(+), 8 deletions(-)
 create mode 100644 drivers/net/ethernet/zte/dinghai/dh_log.h

diff --git a/drivers/net/ethernet/zte/dinghai/dh_log.h b/drivers/net/ethernet/zte/dinghai/dh_log.h
new file mode 100644
index 000000000000..488c1968ae73
--- /dev/null
+++ b/drivers/net/ethernet/zte/dinghai/dh_log.h
@@ -0,0 +1,60 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * ZTE DingHai Ethernet driver - logging infrastructure
+ * Copyright (c) 2022-2026, ZTE Corporation.
+ */
+
+#ifndef __DH_LOG_H__
+#define __DH_LOG_H__
+
+#include <linux/device.h>
+#include <linux/kernel.h>
+#include <linux/printk.h>
+
+#define MODULE_CMD        "zxdh_cmd"
+#define MODULE_NP        "zxdh_np"
+#define MODULE_PF        "zxdh_pf"
+#define MODULE_PTP        "zxdh_ptp"
+#define MODULE_TSN        "zxdh_tsn"
+#define MODULE_LAG        "zxdh_lag"
+#define MODULE_DHTOOLS        "zxdh_tool"
+#define MODULE_SEC        "zxdh_sec"
+#define MODULE_MPF        "zxdh_mpf"
+#define MODULE_FUC_HP        "zxdh_func_hp"
+#define MODULE_UACCE        "zxdh_uacce"
+#define MODULE_HEAL        "zxdh_health"
+
+#define DH_LOG_EMERG(module, __dev, fmt, arg...)            \
+    dev_emerg((__dev)->device, "[%s][%s][%d] " fmt,            \
+          module, __func__, __LINE__, ##arg)
+
+#define DH_LOG_ALERT(module, __dev, fmt, arg...)            \
+    dev_alert((__dev)->device, "[%s][%s][%d] " fmt,            \
+          module, __func__, __LINE__, ##arg)
+
+#define DH_LOG_CRIT(module, __dev, fmt, arg...)            \
+    dev_crit((__dev)->device, "[%s][%s][%d] " fmt,            \
+          module, __func__, __LINE__, ##arg)
+
+#define DH_LOG_ERR(module, __dev, fmt, arg...)            \
+    dev_err((__dev)->device, "[%s][%s][%d] " fmt,            \
+         module, __func__, __LINE__, ##arg)
+
+#define DH_LOG_WARNING(module, __dev, fmt, arg...)        \
+    dev_warn((__dev)->device, "[%s][%s][%d] " fmt,            \
+         module, __func__, __LINE__, ##arg)
+
+#define DH_LOG_INFO(module, __dev, fmt, arg...)            \
+    dev_info((__dev)->device, "[%s][%s][%d] " fmt,            \
+          module, __func__, __LINE__, ##arg)
+
+#define DH_LOG_DEBUG(module, __dev, fmt, arg...)            \
+    dev_dbg((__dev)->device, "[%s][%s][%d] " fmt,            \
+         module, __func__, __LINE__, ##arg)
+
+#define LOG_ERR(__dev, fmt, arg...)        DH_LOG_ERR(MODULE_PF, __dev, fmt, ##arg)
+#define LOG_INFO(__dev, fmt, arg...)        DH_LOG_INFO(MODULE_PF, __dev, fmt, ##arg)
+#define LOG_DEBUG(__dev, fmt, arg...)        DH_LOG_DEBUG(MODULE_PF, __dev, fmt, ##arg)
+#define LOG_WARN(__dev, fmt, arg...)        DH_LOG_WARNING(MODULE_PF, __dev, fmt, ##arg)
+
+#endif /* __DH_LOG_H__ */
diff --git a/drivers/net/ethernet/zte/dinghai/en_pf.c b/drivers/net/ethernet/zte/dinghai/en_pf.c
index 5e13a8c24a28..70dad28de544 100644
--- a/drivers/net/ethernet/zte/dinghai/en_pf.c
+++ b/drivers/net/ethernet/zte/dinghai/en_pf.c
@@ -8,6 +8,7 @@
 #include <linux/pci.h>
 #include <net/devlink.h>
 #include "en_pf.h"
+#include "dh_log.h"
 
 MODULE_AUTHOR("Junyang Han <han.junyang@zte.com.cn>");
 MODULE_DESCRIPTION("ZTE Corporation network adapters (DingHai series) Ethernet driver");
@@ -31,26 +32,34 @@ static int dh_pf_pci_init(struct dh_core_dev *dev)
     pci_set_drvdata(dev->pdev, dev);
 
     ret = pci_enable_device(dev->pdev);
-    if (ret)
+    if (ret) {
+        LOG_ERR(dev, "pci_enable_device failed: %d\n", ret);
         return -ENOMEM;
+    }
 
     ret = dma_set_mask_and_coherent(dev->device, DMA_BIT_MASK(64));
     if (ret) {
         ret = dma_set_mask_and_coherent(dev->device, DMA_BIT_MASK(32));
-        if (ret)
+        if (ret) {
+            LOG_ERR(dev, "dma_set_mask_and_coherent failed: %d\n", ret);
             goto err_pci;
+        }
     }
 
     ret = pci_request_selected_regions(dev->pdev,
                        pci_select_bars(dev->pdev, IORESOURCE_MEM),
                        "dh-pf");
-    if (ret)
+    if (ret) {
+        LOG_ERR(dev, "pci_request_selected_regions failed: %d\n", ret);
         goto err_pci;
+    }
 
     pci_set_master(dev->pdev);
     ret = pci_save_state(dev->pdev);
-    if (ret)
+    if (ret) {
+        LOG_ERR(dev, "pci_save_state failed: %d\n", ret);
         goto err_pci_save_state;
+    }
 
     pf_dev = dev->priv;
     pf_dev->pci_ioremap_addr[0] =
@@ -58,6 +67,9 @@ static int dh_pf_pci_init(struct dh_core_dev *dev)
                   pci_resource_len(dev->pdev, 0));
     if (!pf_dev->pci_ioremap_addr[0]) {
         ret = -ENOMEM;
+        LOG_ERR(dev, "ioremap(0x%llx, 0x%llx) failed\n",
+            pci_resource_start(dev->pdev, 0),
+            pci_resource_len(dev->pdev, 0));
         goto err_pci_save_state;
     }
 
@@ -87,10 +99,13 @@ static int dh_pf_probe(struct pci_dev *pdev, const struct pci_device_id *id)
     struct devlink *devlink = NULL;
     int ret = 0;
 
+    dev_info(&pdev->dev, "pf level start\n");
     devlink = devlink_alloc(&dh_pf_devlink_ops, sizeof(struct dh_core_dev),
                 &pdev->dev);
-    if (!devlink)
+    if (!devlink) {
+        dev_err(&pdev->dev, "devlink alloc failed\n");
         return -ENOMEM;
+    }
 
     dh_dev = devlink_priv(devlink);
     dh_dev->device = &pdev->dev;
@@ -98,8 +113,10 @@ static int dh_pf_probe(struct pci_dev *pdev, const struct pci_device_id *id)
     dh_dev->devlink = devlink;
 
     pf_dev = dh_core_alloc_priv(dh_dev, sizeof(*pf_dev));
-    if (!pf_dev)
-        return -ENOMEM;
+    if (!pf_dev) {
+        LOG_ERR(dh_dev, "zxdh_pf_dev alloc failed\n");
+        goto err_pf_dev;
+    }
 
     pf_dev->bar_chan_valid = false;
     pf_dev->vepa = false;
@@ -107,10 +124,17 @@ static int dh_pf_probe(struct pci_dev *pdev, const struct pci_device_id *id)
     mutex_init(&pf_dev->irq_lock);
 
     dh_dev->coredev_type = GET_COREDEV_TYPE(pdev);
+    LOG_DEBUG(dh_dev, "%s device: %s\n",
+          (dh_dev->coredev_type == DH_COREDEV_PF) ? "PF" : "VF",
+          pci_name(pdev));
 
     ret = dh_pf_pci_init(dh_dev);
-    if (ret)
+    if (ret) {
+        LOG_ERR(dh_dev, "dh_pf_pci_init failed: %d\n", ret);
         goto err_cfg_init;
+    }
+
+    LOG_INFO(dh_dev, "pf level completed\n");
 
     return 0;
 
@@ -118,6 +142,7 @@ static int dh_pf_probe(struct pci_dev *pdev, const struct pci_device_id *id)
     mutex_destroy(&pf_dev->irq_lock);
     mutex_destroy(&dh_dev->lock);
     dh_core_free_priv(dh_dev);
+err_pf_dev:
     devlink_free(devlink);
     return -EPERM;
 }
@@ -128,12 +153,16 @@ static void dh_pf_remove(struct pci_dev *pdev)
     struct devlink *devlink = priv_to_devlink(dh_dev);
     struct zxdh_pf_device *pf_dev = dh_dev->priv;
 
+    LOG_INFO(dh_dev, "pf level start\n");
+
     dh_pf_pci_close(dh_dev);
     mutex_destroy(&pf_dev->irq_lock);
     mutex_destroy(&dh_dev->lock);
     dh_core_free_priv(dh_dev);
     devlink_free(devlink);
     pci_set_drvdata(pdev, NULL);
+
+    LOG_INFO(dh_dev, "pf level completed\n");
 }
 
 static void dh_pf_shutdown(struct pci_dev *pdev)
@@ -142,6 +171,8 @@ static void dh_pf_shutdown(struct pci_dev *pdev)
     struct devlink *devlink = priv_to_devlink(dh_dev);
     struct zxdh_pf_device *pf_dev = dh_dev->priv;
 
+    LOG_INFO(dh_dev, "pf level start\n");
+
     dh_pf_pci_close(dh_dev);
     mutex_destroy(&pf_dev->irq_lock);
     mutex_destroy(&dh_dev->lock);
@@ -149,6 +180,8 @@ static void dh_pf_shutdown(struct pci_dev *pdev)
     devlink_free(devlink);
 
     pci_set_drvdata(pdev, NULL);
+
+    LOG_INFO(dh_dev, "pf level completed\n");
 }
 
 static struct pci_driver dh_pf_driver = {
-- 
2.27.0