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 | config HNS3 | ||||||
| 	tristate "Hisilicon Network Subsystem Support HNS3 (Framework)" | 	tristate "Hisilicon Network Subsystem Support HNS3 (Framework)" | ||||||
| 	depends on PCI | 	depends on PCI | ||||||
|  | 	select NET_DEVLINK | ||||||
| 	help | 	help | ||||||
| 	  This selects the framework support for Hisilicon Network Subsystem 3. | 	  This selects the framework support for Hisilicon Network Subsystem 3. | ||||||
| 	  This layer facilitates clients like ENET, RoCE and user-space ethernet | 	  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) | ccflags-y += -I $(srctree)/$(src) | ||||||
| 
 | 
 | ||||||
| obj-$(CONFIG_HNS3_HCLGE) += hclge.o | 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 | 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_tm.h" | ||||||
| #include "hclge_err.h" | #include "hclge_err.h" | ||||||
| #include "hnae3.h" | #include "hnae3.h" | ||||||
|  | #include "hclge_devlink.h" | ||||||
| 
 | 
 | ||||||
| #define HCLGE_NAME			"hclge" | #define HCLGE_NAME			"hclge" | ||||||
| #define HCLGE_STATS_READ(p, offset) (*(u64 *)((u8 *)(p) + (offset))) | #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) | 	if (ret) | ||||||
| 		goto out; | 		goto out; | ||||||
| 
 | 
 | ||||||
|  | 	ret = hclge_devlink_init(hdev); | ||||||
|  | 	if (ret) | ||||||
|  | 		goto err_pci_uninit; | ||||||
|  | 
 | ||||||
| 	/* Firmware command queue initialize */ | 	/* Firmware command queue initialize */ | ||||||
| 	ret = hclge_cmd_queue_init(hdev); | 	ret = hclge_cmd_queue_init(hdev); | ||||||
| 	if (ret) | 	if (ret) | ||||||
| 		goto err_pci_uninit; | 		goto err_devlink_uninit; | ||||||
| 
 | 
 | ||||||
| 	/* Firmware command initialize */ | 	/* Firmware command initialize */ | ||||||
| 	ret = hclge_cmd_init(hdev); | 	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); | 	pci_free_irq_vectors(pdev); | ||||||
| err_cmd_uninit: | err_cmd_uninit: | ||||||
| 	hclge_cmd_uninit(hdev); | 	hclge_cmd_uninit(hdev); | ||||||
|  | err_devlink_uninit: | ||||||
|  | 	hclge_devlink_uninit(hdev); | ||||||
| err_pci_uninit: | err_pci_uninit: | ||||||
| 	pcim_iounmap(pdev, hdev->hw.io_base); | 	pcim_iounmap(pdev, hdev->hw.io_base); | ||||||
| 	pci_clear_master(pdev); | 	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_cmd_uninit(hdev); | ||||||
| 	hclge_misc_irq_uninit(hdev); | 	hclge_misc_irq_uninit(hdev); | ||||||
|  | 	hclge_devlink_uninit(hdev); | ||||||
| 	hclge_pci_uninit(hdev); | 	hclge_pci_uninit(hdev); | ||||||
| 	mutex_destroy(&hdev->vport_lock); | 	mutex_destroy(&hdev->vport_lock); | ||||||
| 	hclge_uninit_vport_vlan_table(hdev); | 	hclge_uninit_vport_vlan_table(hdev); | ||||||
|  |  | ||||||
|  | @ -8,6 +8,7 @@ | ||||||
| #include <linux/phy.h> | #include <linux/phy.h> | ||||||
| #include <linux/if_vlan.h> | #include <linux/if_vlan.h> | ||||||
| #include <linux/kfifo.h> | #include <linux/kfifo.h> | ||||||
|  | #include <net/devlink.h> | ||||||
| 
 | 
 | ||||||
| #include "hclge_cmd.h" | #include "hclge_cmd.h" | ||||||
| #include "hclge_ptp.h" | #include "hclge_ptp.h" | ||||||
|  | @ -943,6 +944,7 @@ struct hclge_dev { | ||||||
| 	cpumask_t affinity_mask; | 	cpumask_t affinity_mask; | ||||||
| 	struct irq_affinity_notify affinity_notify; | 	struct irq_affinity_notify affinity_notify; | ||||||
| 	struct hclge_ptp *ptp; | 	struct hclge_ptp *ptp; | ||||||
|  | 	struct devlink *devlink; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| /* VPort level vlan tag configuration for TX direction */ | /* VPort level vlan tag configuration for TX direction */ | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Yufeng Mo
						Yufeng Mo