xref: /f-stack/dpdk/drivers/net/nfp/nfpcore/nfp_nffw.h (revision d30ea906)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2018 Netronome Systems, Inc.
3  * All rights reserved.
4  */
5 
6 #ifndef __NFP_NFFW_H__
7 #define __NFP_NFFW_H__
8 
9 #include "nfp-common/nfp_platform.h"
10 #include "nfp_cpp.h"
11 
12 /*
13  * Init-CSR owner IDs for firmware map to firmware IDs which start at 4.
14  * Lower IDs are reserved for target and loader IDs.
15  */
16 #define NFFW_FWID_EXT   3	/* For active MEs that we didn't load. */
17 #define NFFW_FWID_BASE  4
18 
19 #define NFFW_FWID_ALL   255
20 
21 /* Init-CSR owner IDs for firmware map to firmware IDs which start at 4.
22  * Lower IDs are reserved for target and loader IDs.
23  */
24 #define NFFW_FWID_EXT   3 /* For active MEs that we didn't load. */
25 #define NFFW_FWID_BASE  4
26 
27 #define NFFW_FWID_ALL   255
28 
29 /**
30  * NFFW_INFO_VERSION history:
31  * 0: This was never actually used (before versioning), but it refers to
32  *    the previous struct which had FWINFO_CNT = MEINFO_CNT = 120 that later
33  *    changed to 200.
34  * 1: First versioned struct, with
35  *     FWINFO_CNT = 120
36  *     MEINFO_CNT = 120
37  * 2:  FWINFO_CNT = 200
38  *     MEINFO_CNT = 200
39  */
40 #define NFFW_INFO_VERSION_CURRENT 2
41 
42 /* Enough for all current chip families */
43 #define NFFW_MEINFO_CNT_V1 120
44 #define NFFW_FWINFO_CNT_V1 120
45 #define NFFW_MEINFO_CNT_V2 200
46 #define NFFW_FWINFO_CNT_V2 200
47 
48 struct nffw_meinfo {
49 	uint32_t ctxmask__fwid__meid;
50 };
51 
52 struct nffw_fwinfo {
53 	uint32_t loaded__mu_da__mip_off_hi;
54 	uint32_t mip_cppid; /* 0 means no MIP */
55 	uint32_t mip_offset_lo;
56 };
57 
58 struct nfp_nffw_info_v1 {
59 	struct nffw_meinfo meinfo[NFFW_MEINFO_CNT_V1];
60 	struct nffw_fwinfo fwinfo[NFFW_FWINFO_CNT_V1];
61 };
62 
63 struct nfp_nffw_info_v2 {
64 	struct nffw_meinfo meinfo[NFFW_MEINFO_CNT_V2];
65 	struct nffw_fwinfo fwinfo[NFFW_FWINFO_CNT_V2];
66 };
67 
68 struct nfp_nffw_info_data {
69 	uint32_t flags[2];
70 	union {
71 		struct nfp_nffw_info_v1 v1;
72 		struct nfp_nffw_info_v2 v2;
73 	} info;
74 };
75 
76 struct nfp_nffw_info {
77 	struct nfp_cpp *cpp;
78 	struct nfp_resource *res;
79 
80 	struct nfp_nffw_info_data fwinf;
81 };
82 
83 struct nfp_nffw_info *nfp_nffw_info_open(struct nfp_cpp *cpp);
84 void nfp_nffw_info_close(struct nfp_nffw_info *state);
85 
86 #endif
87