1 /*
2  * SPDX-FileCopyrightText: Copyright (c) 2022-2023 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 _CCI_CMIS_H_
25 #define _CCI_CMIS_H_
26 
27 // Based on CMIS 4.0/5.0 specification
28 
29 // Page 0h
30 #define CMIS_REV_BYTE                               1
31 #define CMIS_REV_BYTE_WHOLE                         7:4
32 #define CMIS_REV_BYTE_DECIMAL                       3:0
33 #define CMIS_CHARACTERISTICS_BYTE                   2
34 #define CMIS_CHARACTERISTICS_BYTE_FLAT_MEM          7:7
35 #define CMIS_MODULE_FLAGS_CUSTOM_BYTE               13
36 #define CMIS_OSFP_TEMPERATURE_BYTE                  14
37 #define CMIS_CDB_BLOCK_STATUS_BYTE(block)           ((block) + 37)
38 #define CMIS_CDB_BLOCK_STATUS_BYTE_BUSY             7:7
39 #define CMIS_CDB_BLOCK_STATUS_BYTE_BUSY_FALSE       0
40 #define CMIS_CDB_BLOCK_STATUS_BYTE_BUSY_TRUE        1
41 #define CMIS_ACTIVE_FW_MAJOR_REVISION               39
42 #define CMIS_ACTIVE_FW_MINOR_REVISION               40
43 #define CMIS_BANK_PAGE                              126
44 #define CMIS_MIT_BYTE                               212
45 #define CMIS_CHECKSUM_BYTE                          222
46 #define CMIS_CHECKSUM_LENGTH                        94
47 
48 // Media Interface Technology Table
49 #define CMIS_MIT_BYTE_COPPER                                           0xA
50 #define CMIS_MIT_BYTE_COPPER_UNEQUALIZED                               0xA
51 #define CMIS_MIT_BYTE_COPPER_PASSIVE_EQUALIZED                         0xB
52 #define CMIS_MIT_BYTE_COPPER_NEAR_FAR_END_LIMITING_ACTIVE_EQUALIZED    0xC
53 #define CMIS_MIT_BYTE_COPPER_FAR_END_LIMITING_ACTIVE_EQUALIZED         0xD
54 #define CMIS_MIT_BYTE_COPPER_NEAR_END_LIMITING_ACTIVE_EQUALIZED        0xE
55 #define CMIS_MIT_BYTE_COPPER_LINEAR_ACTIVE_EQUALIZED                   0xF
56 #define CMIS_MIT_BYTE_RESERVED                                         0x10
57 
58 // Page 01h
59 #define CMIS_SI_CONTROLS                                   161
60 #define CMIS_SI_CONTROLS_CDR_IMPLEMENTED                   0:0
61 #define CMIS_DATA_PATH_MAX_DURATION_BYTE                   144
62 #define CMIS_DATA_PATH_MAX_DURATION_BYTE_DEINIT            7:4
63 #define CMIS_DATA_PATH_MAX_DURATION_BYTE_INIT              3:0
64 #define CMIS_MODULE_POWER_MAX_DURATION_BYTE                167
65 #define CMIS_MODULE_POWER_MAX_DURATION_BYTE_DOWN           7:4
66 #define CMIS_MODULE_POWER_MAX_DURATION_BYTE_UP             3:0
67 #define CMIS_DATA_PATH_TX_MAX_DURATION_BYTE                168
68 #define CMIS_DATA_PATH_TX_MAX_DURATION_BYTE_OFF            7:4
69 #define CMIS_DATA_PATH_TX_MAX_DURATION_BYTE_ON             3:0
70 
71 // Page 02h
72 #define CMIS_OSFP_OVERT_LIMIT_BYTE          128
73 #define CMIS_OSFP_WARN_LIMIT_BYTE           132
74 
75 
76 //
77 // CMIS 4.0: Table 8-29 State Duration Encoding
78 //           Stores time in ms
79 //           Times > 60s will be considered errors
80 //
81 static const NvU64 dur_en_map[] = {1, 5, 10, 50,
82                                    100, 500, 1000, 5*1000,
83                                    10*1000, 60*1000, 0, 0,
84                                    0, 0, 0, 0};
85 #define CMIS_MAX_DURATION_EN_TO_MS_MAP(en)                 (dur_en_map[en])
86 
87 // Page 10h
88 #define CMIS_DATA_PATH_CONTROL_BYTE           128
89 #define CMIS_STAGE_CONTROL_SET_0              143
90 #define CMIS_STAGE_CONTROL_SET_0_SIZE         35
91 #define CMIS_STAGE_CONTROL_SET_0_APP_SEL      145
92 
93 // Page 11h
94 #define CMIS_DATA_PATH_STATE                     128
95 // Used to determine which byte(128-131) encodes given lane's datapath state
96 #define CMIS_DATA_PATH_STATE_LANE_BYTE_MAP(lane) (lane/2)
97 #define CMIS_DATA_PATH_STATE_SIZE                4
98 #define CMIS_DATA_PATH_STATE_BYTE_LANE_0         3:0
99 #define CMIS_DATA_PATH_STATE_BYTE_LANE_1         7:4
100 #define CMIS_DATA_PATH_CONFIG_ERROR_CODES        202
101 #define CMIS_ACTIVE_CONTROL_SET                  206
102 #define CMIS_ACTIVE_CONTROL_SET_SIZE             29
103 
104 // Datapath states
105 #define CMIS_DATA_PATH_STATE_LANE_DEACTIVATED       0x1
106 #define CMIS_DATA_PATH_CONFIG_ALL_LANES_ACCEPTED    0x11111111
107 
108 // CDB command payload size
109 #define CMIS_CDB_LPL_MAX_SIZE 120
110 
111 //
112 // CMIS 4.0: Table 9-16 CDB Command 0100h: Get firmware Info
113 //           Index of information in LPL
114 //
115 #define CMIS_CDB_GET_FW_INFO_LPL_FW_STATUS_FLAGS                      0
116 #define CMIS_CDB_GET_FW_INFO_LPL_FW_STATUS_FLAGS_IMAGE_A_RUNNING      0:0
117 #define CMIS_CDB_GET_FW_INFO_LPL_FW_STATUS_FLAGS_IMAGE_A_COMMITTED    1:1
118 #define CMIS_CDB_GET_FW_INFO_LPL_FW_STATUS_FLAGS_IMAGE_A_EMPTY        2:2
119 #define CMIS_CDB_GET_FW_INFO_LPL_FW_STATUS_FLAGS_IMAGE_B_RUNNING      4:4
120 #define CMIS_CDB_GET_FW_INFO_LPL_FW_STATUS_FLAGS_IMAGE_B_COMMITTED    5:5
121 #define CMIS_CDB_GET_FW_INFO_LPL_FW_STATUS_FLAGS_IMAGE_B_EMPTY        6:6
122 #define CMIS_CDB_GET_FW_INFO_LPL_INFO_BLOCK                           1
123 #define CMIS_CDB_GET_FW_INFO_LPL_IMAGE_A_MAJOR_BYTE                   2
124 #define CMIS_CDB_GET_FW_INFO_LPL_IMAGE_A_MINOR_BYTE                   3
125 #define CMIS_CDB_GET_FW_INFO_LPL_IMAGE_A_BUILD                        4
126 #define CMIS_CDB_GET_FW_INFO_LPL_IMAGE_A_BUILD_SIZE                   2
127 #define CMIS_CDB_GET_FW_INFO_LPL_IMAGE_A_EXTRA_STRING                 6
128 #define CMIS_CDB_GET_FW_INFO_LPL_IMAGE_A_EXTRA_STRING_SIZE            32
129 #define CMIS_CDB_GET_FW_INFO_LPL_IMAGE_B_MAJOR_BYTE                   38
130 #define CMIS_CDB_GET_FW_INFO_LPL_IMAGE_B_MINOR_BYTE                   39
131 #define CMIS_CDB_GET_FW_INFO_LPL_IMAGE_B_BUILD                        40
132 #define CMIS_CDB_GET_FW_INFO_LPL_IMAGE_B_BUILD_SIZE                   2
133 #define CMIS_CDB_GET_FW_INFO_LPL_IMAGE_B_EXTRA_STRING                 42
134 #define CMIS_CDB_GET_FW_INFO_LPL_IMAGE_B_EXTRA_STRING_SIZE            32
135 #define CMIS_CDB_GET_FW_INFO_LPL_IMAGE_FACTORY_BOOT_MAJOR_BYTE        74
136 #define CMIS_CDB_GET_FW_INFO_LPL_IMAGE_FACTORY_BOOT_MINOR_BYTE        75
137 #define CMIS_CDB_GET_FW_INFO_LPL_IMAGE_FACTORY_BOOT_BUILD             76
138 #define CMIS_CDB_GET_FW_INFO_LPL_IMAGE_FACTORY_BOOT_BUILD_SIZE        2
139 #define CMIS_CDB_GET_FW_INFO_LPL_IMAGE_FACTORY_BOOT_EXTRA_STRING      78
140 #define CMIS_CDB_GET_FW_INFO_LPL_IMAGE_FACTORY_BOOT_EXTRA_STRING_SIZE 32
141 
142 #endif //_CCI_CMIS_H_
143