Thread (24 messages) flat view 24 messages, 5 authors, 2025-08-27

Re: [PATCH net-next v01 01/12] hinic3: HW initialization

From: Vadim Fedorenko <vadim.fedorenko@linux.dev>
Date: 2025-08-26 11:37:40
Also in: linux-doc, lkml

On 26/08/2025 10:05, Fan Gong wrote:
quoted hunk ↗ jump to hunk
Add the hardware resource data structures, functions for HW initialization,
configuration and releasement.

Co-developed-by: Xin Guo <redacted>
Signed-off-by: Xin Guo <redacted>
Co-developed-by: Zhu Yikai <redacted>
Signed-off-by: Zhu Yikai <redacted>
Signed-off-by: Fan Gong <gongfan1@huawei.com>
---
  .../net/ethernet/huawei/hinic3/hinic3_hwdev.c |  67 ++++-
  .../net/ethernet/huawei/hinic3/hinic3_hwif.c  | 240 ++++++++++++++++++
  .../net/ethernet/huawei/hinic3/hinic3_hwif.h  |  13 +
  .../net/ethernet/huawei/hinic3/hinic3_lld.c   |   8 +-
  .../huawei/hinic3/hinic3_pci_id_tbl.h         |  10 +
  5 files changed, 334 insertions(+), 4 deletions(-)
diff --git a/drivers/net/ethernet/huawei/hinic3/hinic3_hwdev.c b/drivers/net/ethernet/huawei/hinic3/hinic3_hwdev.c
index 6e8788a64925..d145d3b05e19 100644
--- a/drivers/net/ethernet/huawei/hinic3/hinic3_hwdev.c
+++ b/drivers/net/ethernet/huawei/hinic3/hinic3_hwdev.c
@@ -7,15 +7,76 @@
  #include "hinic3_mbox.h"
  #include "hinic3_mgmt.h"
  
+#define HINIC3_HWDEV_WQ_NAME    "hinic3_hardware"
+#define HINIC3_WQ_MAX_REQ       10
+
+enum hinic3_hwdev_init_state {
+	HINIC3_HWDEV_MBOX_INITED = 2,
+	HINIC3_HWDEV_CMDQ_INITED = 3,
+};
+
+static int init_hwdev(struct pci_dev *pdev)
+{
+	struct hinic3_pcidev *pci_adapter = pci_get_drvdata(pdev);
+	struct hinic3_hwdev *hwdev;
+
+	hwdev = kzalloc(sizeof(*hwdev), GFP_KERNEL);
+	if (!hwdev)
+		return -ENOMEM;
+
+	pci_adapter->hwdev = hwdev;
+	hwdev->adapter = pci_adapter;
+	hwdev->pdev = pci_adapter->pdev;
+	hwdev->dev = &pci_adapter->pdev->dev;
+	hwdev->func_state = 0;
+	memset(hwdev->features, 0, sizeof(hwdev->features));
no need to init values to zeros as you use kzalloc to allocate the
memory
+	spin_lock_init(&hwdev->channel_lock);
+
+	return 0;
+}
+
  int hinic3_init_hwdev(struct pci_dev *pdev)
  {
-	/* Completed by later submission due to LoC limit. */
-	return -EFAULT;
+	struct hinic3_pcidev *pci_adapter = pci_get_drvdata(pdev);
+	struct hinic3_hwdev *hwdev;
+	int err;
+
+	err = init_hwdev(pdev);
I think there is no reason to have another init function
+	if (err)
+		return err;
+
+	hwdev = pci_adapter->hwdev;
+	err = hinic3_init_hwif(hwdev);
+	if (err) {
+		dev_err(hwdev->dev, "Failed to init hwif\n");
+		goto err_free_hwdev;
+	}
+
+	hwdev->workq = alloc_workqueue(HINIC3_HWDEV_WQ_NAME, WQ_MEM_RECLAIM,
+				       HINIC3_WQ_MAX_REQ);
+	if (!hwdev->workq) {
+		dev_err(hwdev->dev, "Failed to alloc hardware workq\n");
+		err = -ENOMEM;
+		goto err_free_hwif;
+	}
+
+	return 0;
+
+err_free_hwif:
+	hinic3_free_hwif(hwdev);
+
+err_free_hwdev:
+	pci_adapter->hwdev = NULL;
+	kfree(hwdev);
+
+	return err;
  }
[...]
quoted hunk ↗ jump to hunk
@@ -121,6 +122,7 @@ static int hinic3_attach_aux_devices(struct hinic3_hwdev *hwdev)
  			goto err_del_adevs;
  	}
  	mutex_unlock(&pci_adapter->pdev_mutex);
+
  	return 0;
  
  err_del_adevs:
@@ -132,6 +134,7 @@ static int hinic3_attach_aux_devices(struct hinic3_hwdev *hwdev)
  		}
  	}
  	mutex_unlock(&pci_adapter->pdev_mutex);
+
  	return -ENOMEM;
  }
  
@@ -153,6 +156,7 @@ struct hinic3_hwdev *hinic3_adev_get_hwdev(struct auxiliary_device *adev)
  	struct hinic3_adev *hadev;
  
  	hadev = container_of(adev, struct hinic3_adev, adev);
+
  	return hadev->hwdev;
  }
  
@@ -333,6 +337,7 @@ static int hinic3_probe_func(struct hinic3_pcidev *pci_adapter)
  
  err_out:
  	dev_err(&pdev->dev, "PCIe device probe function failed\n");
+
  	return err;
  }
  
@@ -365,6 +370,7 @@ static int hinic3_probe(struct pci_dev *pdev, const struct pci_device_id *id)
  
  err_out:
  	dev_err(&pdev->dev, "PCIe device probe failed\n");
+
  	return err;
  }
  
not sure it's good to have this empty lines in this particular patch
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help