forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-01-05 071106ecf68c401173c58808b1cf5f68cc50d390
kernel/drivers/net/ethernet/netronome/nfp/nfp_net_main.c
....@@ -1,35 +1,5 @@
1
-/*
2
- * Copyright (C) 2015-2017 Netronome Systems, Inc.
3
- *
4
- * This software is dual licensed under the GNU General License Version 2,
5
- * June 1991 as shown in the file COPYING in the top-level directory of this
6
- * source tree or the BSD 2-Clause License provided below. You have the
7
- * option to license this software under the complete terms of either license.
8
- *
9
- * The BSD 2-Clause License:
10
- *
11
- * Redistribution and use in source and binary forms, with or
12
- * without modification, are permitted provided that the following
13
- * conditions are met:
14
- *
15
- * 1. Redistributions of source code must retain the above
16
- * copyright notice, this list of conditions and the following
17
- * disclaimer.
18
- *
19
- * 2. Redistributions in binary form must reproduce the above
20
- * copyright notice, this list of conditions and the following
21
- * disclaimer in the documentation and/or other materials
22
- * provided with the distribution.
23
- *
24
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
25
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
26
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
27
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
28
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
29
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
30
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
31
- * SOFTWARE.
32
- */
1
+// SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2
+/* Copyright (C) 2015-2018 Netronome Systems, Inc. */
333
344 /*
355 * nfp_net_main.c
....@@ -146,13 +116,13 @@
146116 n_rx_rings = readl(ctrl_bar + NFP_NET_CFG_MAX_RXRINGS);
147117
148118 /* Allocate and initialise the vNIC */
149
- nn = nfp_net_alloc(pf->pdev, needs_netdev, n_tx_rings, n_rx_rings);
119
+ nn = nfp_net_alloc(pf->pdev, ctrl_bar, needs_netdev,
120
+ n_tx_rings, n_rx_rings);
150121 if (IS_ERR(nn))
151122 return nn;
152123
153124 nn->app = pf->app;
154125 nfp_net_get_fw_version(&nn->fw_ver, ctrl_bar);
155
- nn->dp.ctrl_bar = ctrl_bar;
156126 nn->tx_bar = qc_bar + tx_base * NFP_QCP_QUEUE_ADDR_SZ;
157127 nn->rx_bar = qc_bar + rx_base * NFP_QCP_QUEUE_ADDR_SZ;
158128 nn->dp.is_vf = 0;
....@@ -180,34 +150,39 @@
180150
181151 nn->id = id;
182152
183
- err = nfp_net_init(nn);
184
- if (err)
185
- return err;
186
-
187
- nfp_net_debugfs_vnic_add(nn, pf->ddir);
188
-
189153 if (nn->port) {
190154 err = nfp_devlink_port_register(pf->app, nn->port);
191155 if (err)
192
- goto err_dfs_clean;
156
+ return err;
193157 }
158
+
159
+ err = nfp_net_init(nn);
160
+ if (err)
161
+ goto err_devlink_port_clean;
162
+
163
+ nfp_net_debugfs_vnic_add(nn, pf->ddir);
164
+
165
+ if (nn->port)
166
+ nfp_devlink_port_type_eth_set(nn->port);
194167
195168 nfp_net_info(nn);
196169
197170 if (nfp_net_is_data_vnic(nn)) {
198171 err = nfp_app_vnic_init(pf->app, nn);
199172 if (err)
200
- goto err_devlink_port_clean;
173
+ goto err_devlink_port_type_clean;
201174 }
202175
203176 return 0;
204177
178
+err_devlink_port_type_clean:
179
+ if (nn->port)
180
+ nfp_devlink_port_type_clear(nn->port);
181
+ nfp_net_debugfs_dir_clean(&nn->debugfs_dir);
182
+ nfp_net_clean(nn);
205183 err_devlink_port_clean:
206184 if (nn->port)
207185 nfp_devlink_port_unregister(nn->port);
208
-err_dfs_clean:
209
- nfp_net_debugfs_dir_clean(&nn->debugfs_dir);
210
- nfp_net_clean(nn);
211186 return err;
212187 }
213188
....@@ -230,10 +205,8 @@
230205 ctrl_bar += NFP_PF_CSR_SLICE_SIZE;
231206
232207 /* Kill the vNIC if app init marked it as invalid */
233
- if (nn->port && nn->port->type == NFP_PORT_INVALID) {
208
+ if (nn->port && nn->port->type == NFP_PORT_INVALID)
234209 nfp_net_pf_free_vnic(pf, nn);
235
- continue;
236
- }
237210 }
238211
239212 if (list_empty(&pf->vnics))
....@@ -251,9 +224,11 @@
251224 if (nfp_net_is_data_vnic(nn))
252225 nfp_app_vnic_clean(pf->app, nn);
253226 if (nn->port)
254
- nfp_devlink_port_unregister(nn->port);
227
+ nfp_devlink_port_type_clear(nn->port);
255228 nfp_net_debugfs_dir_clean(&nn->debugfs_dir);
256229 nfp_net_clean(nn);
230
+ if (nn->port)
231
+ nfp_devlink_port_unregister(nn->port);
257232 }
258233
259234 static int nfp_net_pf_alloc_irqs(struct nfp_pf *pf)
....@@ -470,8 +445,8 @@
470445
471446 static int nfp_net_pci_map_mem(struct nfp_pf *pf)
472447 {
448
+ u32 min_size, cpp_id;
473449 u8 __iomem *mem;
474
- u32 min_size;
475450 int err;
476451
477452 min_size = pf->max_data_vnics * NFP_PF_CSR_SLICE_SIZE;
....@@ -519,9 +494,9 @@
519494 pf->vfcfg_tbl2 = NULL;
520495 }
521496
522
- mem = nfp_cpp_map_area(pf->cpp, "net.qc", 0, 0,
523
- NFP_PCIE_QUEUE(0), NFP_QCP_QUEUE_AREA_SZ,
524
- &pf->qc_area);
497
+ cpp_id = NFP_CPP_ISLAND_ID(0, NFP_CPP_ACTION_RW, 0, 0);
498
+ mem = nfp_cpp_map_area(pf->cpp, "net.qc", cpp_id, NFP_PCIE_QUEUE(0),
499
+ NFP_QCP_QUEUE_AREA_SZ, &pf->qc_area);
525500 if (IS_ERR(mem)) {
526501 nfp_err(pf->cpp, "Failed to map Queue Controller area.\n");
527502 err = PTR_ERR(mem);
....@@ -734,6 +709,10 @@
734709 if (err)
735710 goto err_devlink_unreg;
736711
712
+ err = nfp_devlink_params_register(pf);
713
+ if (err)
714
+ goto err_shared_buf_unreg;
715
+
737716 mutex_lock(&pf->lock);
738717 pf->ddir = nfp_net_debugfs_device_add(pf->pdev);
739718
....@@ -767,6 +746,8 @@
767746 err_clean_ddir:
768747 nfp_net_debugfs_dir_clean(&pf->ddir);
769748 mutex_unlock(&pf->lock);
749
+ nfp_devlink_params_unregister(pf);
750
+err_shared_buf_unreg:
770751 nfp_shared_buf_unregister(pf);
771752 err_devlink_unreg:
772753 cancel_work_sync(&pf->port_refresh_work);
....@@ -796,6 +777,7 @@
796777
797778 mutex_unlock(&pf->lock);
798779
780
+ nfp_devlink_params_unregister(pf);
799781 nfp_shared_buf_unregister(pf);
800782 devlink_unregister(priv_to_devlink(pf));
801783