1 /* 2 * SPDX-FileCopyrightText: Copyright (c) 2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved. 3 * SPDX-License-Identifier: MIT 4 * 5 * Permission is hereby granted, free of charge, to any person obtaining a 6 * copy of this software and associated documentation files (the "Software"), 7 * to deal in the Software without restriction, including without limitation 8 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 9 * and/or sell copies of the Software, and to permit persons to whom the 10 * Software is furnished to do so, subject to the following conditions: 11 * 12 * The above copyright notice and this permission notice shall be included in 13 * all copies or substantial portions of the Software. 14 * 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 21 * DEALINGS IN THE SOFTWARE. 22 */ 23 24 #ifndef NV_FIRMWARE_H 25 #define NV_FIRMWARE_H 26 27 28 29 #include <nvtypes.h> 30 #include <nvmisc.h> 31 32 typedef enum 33 { 34 NV_FIRMWARE_TYPE_GSP, 35 NV_FIRMWARE_TYPE_GSP_LOG 36 } nv_firmware_type_t; 37 38 typedef enum 39 { 40 NV_FIRMWARE_CHIP_FAMILY_NULL = 0, 41 NV_FIRMWARE_CHIP_FAMILY_TU10X = 1, 42 NV_FIRMWARE_CHIP_FAMILY_TU11X = 2, 43 NV_FIRMWARE_CHIP_FAMILY_GA100 = 3, 44 NV_FIRMWARE_CHIP_FAMILY_GA10X = 4, 45 NV_FIRMWARE_CHIP_FAMILY_AD10X = 5, 46 NV_FIRMWARE_CHIP_FAMILY_GH100 = 6, 47 NV_FIRMWARE_CHIP_FAMILY_END, 48 } nv_firmware_chip_family_t; 49 50 static inline const char *nv_firmware_chip_family_to_string( 51 nv_firmware_chip_family_t fw_chip_family 52 ) 53 { 54 switch (fw_chip_family) { 55 case NV_FIRMWARE_CHIP_FAMILY_GH100: return "gh100"; 56 case NV_FIRMWARE_CHIP_FAMILY_AD10X: return "ad10x"; 57 case NV_FIRMWARE_CHIP_FAMILY_GA10X: return "ga10x"; 58 case NV_FIRMWARE_CHIP_FAMILY_GA100: return "ga100"; 59 case NV_FIRMWARE_CHIP_FAMILY_TU11X: return "tu11x"; 60 case NV_FIRMWARE_CHIP_FAMILY_TU10X: return "tu10x"; 61 62 case NV_FIRMWARE_CHIP_FAMILY_END: // fall through 63 case NV_FIRMWARE_CHIP_FAMILY_NULL: 64 return NULL; 65 } 66 return NULL; 67 } 68 69 // The includer (presumably nv.c) may optionally define 70 // NV_FIRMWARE_PATH_FOR_FILENAME(filename) 71 // to return a string "path" given a gsp_*.bin or gsp_log_*.bin filename. 72 // 73 // The function nv_firmware_path will then be available. 74 #if defined(NV_FIRMWARE_PATH_FOR_FILENAME) 75 static inline const char *nv_firmware_path( 76 nv_firmware_type_t fw_type, 77 nv_firmware_chip_family_t fw_chip_family 78 ) 79 { 80 if (fw_type == NV_FIRMWARE_TYPE_GSP) 81 { 82 switch (fw_chip_family) 83 { 84 case NV_FIRMWARE_CHIP_FAMILY_AD10X: // fall through 85 case NV_FIRMWARE_CHIP_FAMILY_GA10X: 86 return NV_FIRMWARE_PATH_FOR_FILENAME("gsp_ga10x.bin"); 87 88 case NV_FIRMWARE_CHIP_FAMILY_GH100: // fall through 89 case NV_FIRMWARE_CHIP_FAMILY_GA100: // fall through 90 case NV_FIRMWARE_CHIP_FAMILY_TU11X: // fall through 91 case NV_FIRMWARE_CHIP_FAMILY_TU10X: 92 return NV_FIRMWARE_PATH_FOR_FILENAME("gsp_tu10x.bin"); 93 94 case NV_FIRMWARE_CHIP_FAMILY_END: // fall through 95 case NV_FIRMWARE_CHIP_FAMILY_NULL: 96 return ""; 97 } 98 } 99 else if (fw_type == NV_FIRMWARE_TYPE_GSP_LOG) 100 { 101 switch (fw_chip_family) 102 { 103 case NV_FIRMWARE_CHIP_FAMILY_AD10X: // fall through 104 case NV_FIRMWARE_CHIP_FAMILY_GA10X: 105 return NV_FIRMWARE_PATH_FOR_FILENAME("gsp_log_ga10x.bin"); 106 107 case NV_FIRMWARE_CHIP_FAMILY_GH100: // fall through 108 case NV_FIRMWARE_CHIP_FAMILY_GA100: // fall through 109 case NV_FIRMWARE_CHIP_FAMILY_TU11X: // fall through 110 case NV_FIRMWARE_CHIP_FAMILY_TU10X: 111 return NV_FIRMWARE_PATH_FOR_FILENAME("gsp_log_tu10x.bin"); 112 113 case NV_FIRMWARE_CHIP_FAMILY_END: // fall through 114 case NV_FIRMWARE_CHIP_FAMILY_NULL: 115 return ""; 116 } 117 } 118 119 return ""; 120 } 121 #endif // defined(NV_FIRMWARE_PATH_FOR_FILENAME) 122 123 // The includer (presumably nv.c) may optionally define 124 // NV_FIRMWARE_DECLARE_GSP_FILENAME(filename) 125 // which will then be invoked (at the top-level) for each 126 // gsp_*.bin (but not gsp_log_*.bin) 127 #if defined(NV_FIRMWARE_DECLARE_GSP_FILENAME) 128 NV_FIRMWARE_DECLARE_GSP_FILENAME("gsp_ga10x.bin") 129 NV_FIRMWARE_DECLARE_GSP_FILENAME("gsp_tu10x.bin") 130 #endif // defined(NV_FIRMWARE_DECLARE_GSP_FILENAME) 131 132 #endif // NV_FIRMWARE_DECLARE_GSP_FILENAME 133