forked from mirrors/linux
		
	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>
This commit is contained in:
		
							parent
							
								
									6149ab604c
								
							
						
					
					
						commit
						b741269b27
					
				
					 6 changed files with 82 additions and 2 deletions
				
			
		|  | @ -90,6 +90,7 @@ config HNS_ENET | |||
| config HNS3 | ||||
| 	tristate "Hisilicon Network Subsystem Support HNS3 (Framework)" | ||||
| 	depends on PCI | ||||
| 	select NET_DEVLINK | ||||
| 	help | ||||
| 	  This selects the framework support for Hisilicon Network Subsystem 3. | ||||
| 	  This layer facilitates clients like ENET, RoCE and user-space ethernet | ||||
|  |  | |||
|  | @ -7,6 +7,6 @@ ccflags-y := -I $(srctree)/drivers/net/ethernet/hisilicon/hns3 | |||
| ccflags-y += -I $(srctree)/$(src) | ||||
| 
 | ||||
| obj-$(CONFIG_HNS3_HCLGE) += hclge.o | ||||
| 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-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 | ||||
| 
 | ||||
| hclge-$(CONFIG_HNS3_DCB) += hclge_dcb.o | ||||
|  |  | |||
							
								
								
									
										54
									
								
								drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_devlink.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_devlink.c
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,54 @@ | |||
| // SPDX-License-Identifier: GPL-2.0+
 | ||||
| /* Copyright (c) 2021 Hisilicon Limited. */ | ||||
| 
 | ||||
| #include <net/devlink.h> | ||||
| 
 | ||||
| #include "hclge_devlink.h" | ||||
| 
 | ||||
| static const struct devlink_ops hclge_devlink_ops = { | ||||
| }; | ||||
| 
 | ||||
| int hclge_devlink_init(struct hclge_dev *hdev) | ||||
| { | ||||
| 	struct pci_dev *pdev = hdev->pdev; | ||||
| 	struct hclge_devlink_priv *priv; | ||||
| 	struct devlink *devlink; | ||||
| 	int ret; | ||||
| 
 | ||||
| 	devlink = devlink_alloc(&hclge_devlink_ops, | ||||
| 				sizeof(struct hclge_devlink_priv)); | ||||
| 	if (!devlink) | ||||
| 		return -ENOMEM; | ||||
| 
 | ||||
| 	priv = devlink_priv(devlink); | ||||
| 	priv->hdev = hdev; | ||||
| 
 | ||||
| 	ret = devlink_register(devlink, &pdev->dev); | ||||
| 	if (ret) { | ||||
| 		dev_err(&pdev->dev, "failed to register devlink, ret = %d\n", | ||||
| 			ret); | ||||
| 		goto out_reg_fail; | ||||
| 	} | ||||
| 
 | ||||
| 	hdev->devlink = devlink; | ||||
| 
 | ||||
| 	return 0; | ||||
| 
 | ||||
| out_reg_fail: | ||||
| 	devlink_free(devlink); | ||||
| 	return ret; | ||||
| } | ||||
| 
 | ||||
| void hclge_devlink_uninit(struct hclge_dev *hdev) | ||||
| { | ||||
| 	struct devlink *devlink = hdev->devlink; | ||||
| 
 | ||||
| 	if (!devlink) | ||||
| 		return; | ||||
| 
 | ||||
| 	devlink_unregister(devlink); | ||||
| 
 | ||||
| 	devlink_free(devlink); | ||||
| 
 | ||||
| 	hdev->devlink = NULL; | ||||
| } | ||||
							
								
								
									
										15
									
								
								drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_devlink.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_devlink.h
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,15 @@ | |||
| /* SPDX-License-Identifier: GPL-2.0+ */ | ||||
| /* Copyright (c) 2021 Hisilicon Limited. */ | ||||
| 
 | ||||
| #ifndef __HCLGE_DEVLINK_H | ||||
| #define __HCLGE_DEVLINK_H | ||||
| 
 | ||||
| #include "hclge_main.h" | ||||
| 
 | ||||
| struct hclge_devlink_priv { | ||||
| 	struct hclge_dev *hdev; | ||||
| }; | ||||
| 
 | ||||
| int hclge_devlink_init(struct hclge_dev *hdev); | ||||
| void hclge_devlink_uninit(struct hclge_dev *hdev); | ||||
| #endif | ||||
|  | @ -23,6 +23,7 @@ | |||
| #include "hclge_tm.h" | ||||
| #include "hclge_err.h" | ||||
| #include "hnae3.h" | ||||
| #include "hclge_devlink.h" | ||||
| 
 | ||||
| #define HCLGE_NAME			"hclge" | ||||
| #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) | |||
| 	if (ret) | ||||
| 		goto out; | ||||
| 
 | ||||
| 	ret = hclge_devlink_init(hdev); | ||||
| 	if (ret) | ||||
| 		goto err_pci_uninit; | ||||
| 
 | ||||
| 	/* Firmware command queue initialize */ | ||||
| 	ret = hclge_cmd_queue_init(hdev); | ||||
| 	if (ret) | ||||
| 		goto err_pci_uninit; | ||||
| 		goto err_devlink_uninit; | ||||
| 
 | ||||
| 	/* Firmware command initialize */ | ||||
| 	ret = hclge_cmd_init(hdev); | ||||
|  | @ -11658,6 +11663,8 @@ static int hclge_init_ae_dev(struct hnae3_ae_dev *ae_dev) | |||
| 	pci_free_irq_vectors(pdev); | ||||
| err_cmd_uninit: | ||||
| 	hclge_cmd_uninit(hdev); | ||||
| err_devlink_uninit: | ||||
| 	hclge_devlink_uninit(hdev); | ||||
| err_pci_uninit: | ||||
| 	pcim_iounmap(pdev, hdev->hw.io_base); | ||||
| 	pci_clear_master(pdev); | ||||
|  | @ -12048,6 +12055,7 @@ static void hclge_uninit_ae_dev(struct hnae3_ae_dev *ae_dev) | |||
| 
 | ||||
| 	hclge_cmd_uninit(hdev); | ||||
| 	hclge_misc_irq_uninit(hdev); | ||||
| 	hclge_devlink_uninit(hdev); | ||||
| 	hclge_pci_uninit(hdev); | ||||
| 	mutex_destroy(&hdev->vport_lock); | ||||
| 	hclge_uninit_vport_vlan_table(hdev); | ||||
|  |  | |||
|  | @ -8,6 +8,7 @@ | |||
| #include <linux/phy.h> | ||||
| #include <linux/if_vlan.h> | ||||
| #include <linux/kfifo.h> | ||||
| #include <net/devlink.h> | ||||
| 
 | ||||
| #include "hclge_cmd.h" | ||||
| #include "hclge_ptp.h" | ||||
|  | @ -943,6 +944,7 @@ struct hclge_dev { | |||
| 	cpumask_t affinity_mask; | ||||
| 	struct irq_affinity_notify affinity_notify; | ||||
| 	struct hclge_ptp *ptp; | ||||
| 	struct devlink *devlink; | ||||
| }; | ||||
| 
 | ||||
| /* VPort level vlan tag configuration for TX direction */ | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Yufeng Mo
						Yufeng Mo