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