Skip to content

Commit b741269

Browse files
Yufeng Modavem330
authored andcommitted
net: hns3: add support for registering devlink for PF
Add devlink register support for HNS3 ethernet PF driver. Signed-off-by: Yufeng Mo <moyufeng@huawei.com> Signed-off-by: Guangbin Huang <huangguangbin2@huawei.com> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent 6149ab6 commit b741269

File tree

6 files changed

+82
-2
lines changed

6 files changed

+82
-2
lines changed

drivers/net/ethernet/hisilicon/Kconfig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ config HNS_ENET
9090
config HNS3
9191
tristate "Hisilicon Network Subsystem Support HNS3 (Framework)"
9292
depends on PCI
93+
select NET_DEVLINK
9394
help
9495
This selects the framework support for Hisilicon Network Subsystem 3.
9596
This layer facilitates clients like ENET, RoCE and user-space ethernet

drivers/net/ethernet/hisilicon/hns3/hns3pf/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,6 @@ ccflags-y := -I $(srctree)/drivers/net/ethernet/hisilicon/hns3
77
ccflags-y += -I $(srctree)/$(src)
88

99
obj-$(CONFIG_HNS3_HCLGE) += hclge.o
10-
hclge-objs = hclge_main.o hclge_cmd.o hclge_mdio.o hclge_tm.o hclge_mbx.o hclge_err.o hclge_debugfs.o hclge_ptp.o
10+
hclge-objs = hclge_main.o hclge_cmd.o hclge_mdio.o hclge_tm.o hclge_mbx.o hclge_err.o hclge_debugfs.o hclge_ptp.o hclge_devlink.o
1111

1212
hclge-$(CONFIG_HNS3_DCB) += hclge_dcb.o
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
// SPDX-License-Identifier: GPL-2.0+
2+
/* Copyright (c) 2021 Hisilicon Limited. */
3+
4+
#include <net/devlink.h>
5+
6+
#include "hclge_devlink.h"
7+
8+
static const struct devlink_ops hclge_devlink_ops = {
9+
};
10+
11+
int hclge_devlink_init(struct hclge_dev *hdev)
12+
{
13+
struct pci_dev *pdev = hdev->pdev;
14+
struct hclge_devlink_priv *priv;
15+
struct devlink *devlink;
16+
int ret;
17+
18+
devlink = devlink_alloc(&hclge_devlink_ops,
19+
sizeof(struct hclge_devlink_priv));
20+
if (!devlink)
21+
return -ENOMEM;
22+
23+
priv = devlink_priv(devlink);
24+
priv->hdev = hdev;
25+
26+
ret = devlink_register(devlink, &pdev->dev);
27+
if (ret) {
28+
dev_err(&pdev->dev, "failed to register devlink, ret = %d\n",
29+
ret);
30+
goto out_reg_fail;
31+
}
32+
33+
hdev->devlink = devlink;
34+
35+
return 0;
36+
37+
out_reg_fail:
38+
devlink_free(devlink);
39+
return ret;
40+
}
41+
42+
void hclge_devlink_uninit(struct hclge_dev *hdev)
43+
{
44+
struct devlink *devlink = hdev->devlink;
45+
46+
if (!devlink)
47+
return;
48+
49+
devlink_unregister(devlink);
50+
51+
devlink_free(devlink);
52+
53+
hdev->devlink = NULL;
54+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
/* SPDX-License-Identifier: GPL-2.0+ */
2+
/* Copyright (c) 2021 Hisilicon Limited. */
3+
4+
#ifndef __HCLGE_DEVLINK_H
5+
#define __HCLGE_DEVLINK_H
6+
7+
#include "hclge_main.h"
8+
9+
struct hclge_devlink_priv {
10+
struct hclge_dev *hdev;
11+
};
12+
13+
int hclge_devlink_init(struct hclge_dev *hdev);
14+
void hclge_devlink_uninit(struct hclge_dev *hdev);
15+
#endif

drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
#include "hclge_tm.h"
2424
#include "hclge_err.h"
2525
#include "hnae3.h"
26+
#include "hclge_devlink.h"
2627

2728
#define HCLGE_NAME "hclge"
2829
#define HCLGE_STATS_READ(p, offset) (*(u64 *)((u8 *)(p) + (offset)))
@@ -11482,10 +11483,14 @@ static int hclge_init_ae_dev(struct hnae3_ae_dev *ae_dev)
1148211483
if (ret)
1148311484
goto out;
1148411485

11486+
ret = hclge_devlink_init(hdev);
11487+
if (ret)
11488+
goto err_pci_uninit;
11489+
1148511490
/* Firmware command queue initialize */
1148611491
ret = hclge_cmd_queue_init(hdev);
1148711492
if (ret)
11488-
goto err_pci_uninit;
11493+
goto err_devlink_uninit;
1148911494

1149011495
/* Firmware command initialize */
1149111496
ret = hclge_cmd_init(hdev);
@@ -11658,6 +11663,8 @@ static int hclge_init_ae_dev(struct hnae3_ae_dev *ae_dev)
1165811663
pci_free_irq_vectors(pdev);
1165911664
err_cmd_uninit:
1166011665
hclge_cmd_uninit(hdev);
11666+
err_devlink_uninit:
11667+
hclge_devlink_uninit(hdev);
1166111668
err_pci_uninit:
1166211669
pcim_iounmap(pdev, hdev->hw.io_base);
1166311670
pci_clear_master(pdev);
@@ -12048,6 +12055,7 @@ static void hclge_uninit_ae_dev(struct hnae3_ae_dev *ae_dev)
1204812055

1204912056
hclge_cmd_uninit(hdev);
1205012057
hclge_misc_irq_uninit(hdev);
12058+
hclge_devlink_uninit(hdev);
1205112059
hclge_pci_uninit(hdev);
1205212060
mutex_destroy(&hdev->vport_lock);
1205312061
hclge_uninit_vport_vlan_table(hdev);

drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#include <linux/phy.h>
99
#include <linux/if_vlan.h>
1010
#include <linux/kfifo.h>
11+
#include <net/devlink.h>
1112

1213
#include "hclge_cmd.h"
1314
#include "hclge_ptp.h"
@@ -943,6 +944,7 @@ struct hclge_dev {
943944
cpumask_t affinity_mask;
944945
struct irq_affinity_notify affinity_notify;
945946
struct hclge_ptp *ptp;
947+
struct devlink *devlink;
946948
};
947949

948950
/* VPort level vlan tag configuration for TX direction */

0 commit comments

Comments
 (0)