Skip to content

Commit eb1dc02

Browse files
committed
24.06 2024.06.24
New features: - ONLP support for X732Q-T (a new onl plugin update required). - Support to build BSP via CMake. Major bugfix. - Fix a bug of getting tx/rx power by bf_qsfp_get_transciever_info. - Fix a bug of misorder of PSU power in/out for X732Q-T. - Fix an issue of mixed-up LED colors on the X308P-T. - Fix a bug of linking libi2c on ubuntu
1 parent a1d0229 commit eb1dc02

File tree

15 files changed

+257
-150
lines changed

15 files changed

+257
-150
lines changed

CMakeLists.txt

Lines changed: 44 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -4,41 +4,36 @@
44
#
55
# Hang Tsi (tsihang@asterfusion.com)
66
#
7-
# Belowing shows how to build bf-bsp-lts via CMake.
8-
#
9-
# cd bf-bsp-lts
10-
# ./autogen.sh
11-
# mkdir build && cd build
12-
# cmake .. -DCMAKE_MODULE_PATH=`pwd`/../cmake -DCMAKE_INSTALL_PREFIX=$SDE_INSTALL
13-
# make -j4 install
14-
#
15-
#
167

178
cmake_minimum_required(VERSION 3.5)
189

19-
option(STANDALONE "Build outside of pkgsrc" ON)
20-
option(FORCE32 "Force a 32bit compile on 64bit" OFF)
10+
option(LASER_ON "Force default laser enabled when modules plugged-in" OFF)
2111
option(THRIFT-DRIVER "Build with thrift support" ON)
22-
option(COVERAGE "Build with gcov" OFF)
23-
option(TOFINO "Build for TOFINO" ON)
24-
option(TOFINO2 "Build for TOFINO2" OFF)
2512
option(ASTERFUSION-DIAGS "Build Asterfusion Diags" OFF)
13+
option(FORCE32 "Force a 32bit compile on 64bit" OFF)
14+
option(COVERAGE "Build with gcov" OFF)
2615

16+
#
2717
# Pass OS_NAME/OS_VERSION/SDE_VERSION by cmake CLI. Take belowing as an example:
2818
# cmake .. -DCMAKE_MODULE_PATH=`pwd`/../cmake -DCMAKE_INSTALL_PREFIX=$SDE_INSTALL \
2919
# -DOS_NAME=(Debian|Ubuntu) \
30-
# -DOS_VERSION=[(8|9|10|11|12),(14.04|16.04|18.04|20.04|22.04)] \
31-
# -DSDE_VERSION=(900|911|933|954|975|991|9112|9133)
20+
# -DOS_VERSION=[(8|9|10|11|12),(1404|1604|1804|2004|2204)] \
21+
# -DSDE_VERSION=(900|911|933|954|975|991|9112|9133) \
22+
# -DTRIFT-DRIVER=on \
23+
# -DLASER_ON=off
24+
#
25+
# The defaut value of variables listed below if none of them passed by cmake CLI:
26+
# OS_NAME=Debian, OS_VERSION=9, SDE_VERSION=9133, THRIFT-DRIVER=on, LASER_ON=off.
3227
#
3328
message(STATUS "Supported -DOS_NAME=(Debian|Ubuntu)")
34-
message(STATUS "Supported -DOS_VERSION=[(8|9|10|11|12),(14.04|16.04|18.04|20.04|22.04)]")
29+
message(STATUS "Supported -DOS_VERSION=[(8|9|10|11|12),(1404|1604|1804|2004|2204)]")
3530
message(STATUS "Supported -DSDE_VERSION=(900|911|933|954|975|991|9112|9133)")
3631
cmake_host_system_information(RESULT HOST_NAME QUERY HOSTNAME)
3732
message(STATUS "${HOST_NAME}")
3833

3934
if(NOT DEFINED SDE_VERSION)
4035
# Default SDE_VERSION
41-
set(SDE_VERSION 9130)
36+
set(SDE_VERSION 9133)
4237
endif()
4338

4439
if(NOT DEFINED OS_VERSION)
@@ -61,13 +56,23 @@ endif()
6156
message(STATUS "Giving -DOS_NAME=${OS_NAME}")
6257
message(STATUS "Giving -DOS_VERSION=${OS_VERSION}")
6358
message(STATUS "Giving -DSDE_VERSION=${SDE_VERSION}")
59+
message(STATUS "Giving -DTHRIFT_ENABLED=${THRIFT-DRIVER}")
60+
message(STATUS "Giving -DDEFAULT_LASER_ON=${LASER_ON}")
61+
message(STATUS "Giving -DASTERFUSION-DIAGS=${ASTERFUSION-DIAGS}")
62+
message(STATUS "Giving -DCOVERAGE=${COVERAGE}")
6463

65-
# Please see drivers/include/bf_pltfm_types/bf_pltfm_types.h +34
64+
# Please see drivers/include/bf_pltfm_types/bf_pltfm_types.h +34 for reference.
6665
add_definitions(-DOS_NAME=${OS_NAME})
6766
add_definitions(-DOS_VERSION=${OS_VERSION})
6867
add_definitions(-DSDE_VERSION=${SDE_VERSION})
6968
# Unused
7069
add_definitions(-DDEVICE_IS_ASIC)
70+
if (LASER_ON)
71+
# Please see drivers/include/bf_qsfp/bf_qsfp.h +45 for reference.
72+
add_definitions(-DDEFAULT_LASER_ON)
73+
#set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DDEFAULT_LASER_ON")
74+
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DDEFAULT_LASER_ON")
75+
endif()
7176

7277
if(${SDE_VERSION} LESS 990)
7378
set(bfutils_lib "bfutils")
@@ -78,6 +83,18 @@ else()
7883
endif()
7984
message(STATUS "Linking ${bfutils_lib} ${bfsys_lib}")
8085

86+
set(private_lib "cgos")
87+
88+
# to avoid empty variable.
89+
set(i2c_lib "m")
90+
if((${OS_NAME} STREQUAL "Debian") AND (${OS_VERSION} GREATER 9))
91+
set(i2c_lib "i2c")
92+
endif()
93+
if((${OS_NAME} STREQUAL "Ubuntu") AND (${OS_VERSION} GREATER 1604))
94+
set(i2c_lib "i2c")
95+
endif()
96+
message(STATUS "Linking ${i2c_lib}")
97+
8198
if(FORCE32)
8299
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32")
83100
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32")
@@ -100,10 +117,7 @@ set(C_CXX_FLAGS "-Wall -Wextra -Werror -Wundef -Wshadow -Wno-missing-field-initi
100117
if(COVERAGE)
101118
set(C_CXX_FLAGS "${C_CXX_FLAGS} --coverage")
102119
endif()
103-
if(FORCE32)
104-
set(CMAKE_C_FLAGS "-m32")
105-
set(CMAKE_CXX_FLAGS "-m32")
106-
endif()
120+
107121
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${C_CXX_FLAGS}")
108122
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${C_CXX_FLAGS}")
109123

@@ -197,7 +211,7 @@ add_library(asterfusionbf_driver_o OBJECT
197211
)
198212
add_library(asterfusionbf_driver SHARED $<TARGET_OBJECTS:asterfusionbf_driver_o>)
199213
set_target_properties(asterfusionbf_driver PROPERTIES VERSION 0.0.0 SOVERSION 0)
200-
target_link_libraries(asterfusionbf_driver ${bfsys_lib} curl usb-1.0 ${bfutils_lib} cgos)
214+
target_link_libraries(asterfusionbf_driver ${bfsys_lib} curl usb-1.0 ${bfutils_lib} ${private_lib})
201215
add_library(pltfm_driver_o OBJECT
202216
drivers/src/bf_bd_cfg/bf_bd_cfg_intf.c
203217
drivers/src/bf_bd_cfg/bf_bd_cfg_intf_ucli.c
@@ -233,9 +247,9 @@ set_target_properties(pltfm_mgr PROPERTIES VERSION 0.0.0 SOVERSION 0)
233247
#thrift
234248
if (THRIFT-DRIVER)
235249
add_subdirectory(platforms/asterfusion-bf/thrift)
236-
target_link_libraries(pltfm_mgr PUBLIC pltfm_mgr_thrift ${bfsys_lib} curl usb-1.0)
250+
target_link_libraries(pltfm_mgr PUBLIC pltfm_mgr_thrift ${bfsys_lib} curl usb-1.0 ${private_lib})
237251
else()
238-
target_link_libraries(pltfm_mgr PUBLIC ${bfsys_lib} curl usb-1.0)
252+
target_link_libraries(pltfm_mgr PUBLIC ${bfsys_lib} curl usb-1.0 ${private_lib})
239253
endif()
240254

241255
add_library(asterfusion_bin_srcs_o OBJECT
@@ -254,22 +268,22 @@ add_executable(spi_i2c_util
254268
platforms/asterfusion-bf/tofino_spi_util/tofino_porting_spi.c
255269
$<TARGET_OBJECTS:asterfusion_bin_srcs_o>
256270
)
257-
target_link_libraries(spi_i2c_util ${bfsys_lib} usb-1.0 curl m ${bfutils_lib} cgos)
271+
target_link_libraries(spi_i2c_util ${bfsys_lib} usb-1.0 curl m ${bfutils_lib} ${private_lib} ${i2c_lib})
258272
install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/spi_i2c_util DESTINATION bin)
259273

260274
add_executable(cp2112_util
261275
platforms/asterfusion-bf/cp2112_util/cp2112_util.c
262276
$<TARGET_OBJECTS:asterfusion_bin_srcs_o>
263277
)
264-
target_link_libraries(cp2112_util ${bfsys_lib} usb-1.0 curl m ${bfutils_lib} cgos)
278+
target_link_libraries(cp2112_util ${bfsys_lib} usb-1.0 curl m ${bfutils_lib} ${private_lib} ${i2c_lib})
265279
target_compile_options(cp2112_util PRIVATE -Wno-implicit-function-declaration -Wno-sign-compare)
266280
install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/cp2112_util DESTINATION bin)
267281

268282
add_executable(uart_util
269283
platforms/asterfusion-bf/uart_util/uart_util.c
270284
$<TARGET_OBJECTS:asterfusion_bin_srcs_o>
271285
)
272-
target_link_libraries(uart_util ${bfsys_lib} usb-1.0 curl m ${bfutils_lib} cgos)
286+
target_link_libraries(uart_util ${bfsys_lib} usb-1.0 curl m ${bfutils_lib} ${private_lib} ${i2c_lib})
273287
target_compile_options(uart_util PRIVATE -Wno-implicit-function-declaration -Wno-sign-compare)
274288
install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/uart_util DESTINATION bin)
275289

@@ -280,7 +294,7 @@ add_executable(syseeprom_util
280294
$<TARGET_OBJECTS:asterfusion_bin_srcs_o>
281295
)
282296
set_target_properties(syseeprom_util PROPERTIES COMPILE_FLAGS -DNO_MAIN)
283-
target_link_libraries(syseeprom_util ${bfsys_lib} usb-1.0 curl m ${bfutils_lib} cgos)
297+
target_link_libraries(syseeprom_util ${bfsys_lib} usb-1.0 curl m ${bfutils_lib} ${private_lib} ${i2c_lib})
284298
target_compile_options(syseeprom_util PRIVATE -Wno-error)
285299
install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/syseeprom_util DESTINATION bin)
286300

README.md

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ Table of Contents
66
- [Environment Variables](#environment-variables)
77
- [Build BSP](#build-bsp)
88
- [Clone repo](#clone-repo)
9-
- [Build BSP via CMAKE](#build-bsp-via-cmake)
9+
- [Build BSP via CMake](#build-bsp-via-cmake)
1010
- [Build BSP via an Outdated Way](#build-bsp-via-an-outdated-way)
1111
- [Launch](#launch)
1212
- [Generate Launching Variables](#generate-launching-variables)
@@ -89,22 +89,29 @@ root@localhost:~/bf-bsp-lts#
8989

9090
There're `2 ways` to build BSP.
9191

92-
#### <a name="build-bsp-via-cmake"></a>Build BSP via CMAKE
92+
#### <a name="build-bsp-via-cmake"></a>Build BSP via CMake
9393
The `1st` (also recommended) one is by cmake:
9494
```
9595
root@localhost:~/bf-bsp-lts# ./autogen.sh
9696
root@localhost:~/bf-bsp-lts# mkdir build && cd build/
97-
root@localhost:~/bf-bsp-lts/build# cmake .. \
98-
-DCMAKE_MODULE_PATH=`pwd`/../cmake \
99-
-DCMAKE_INSTALL_PREFIX=$SDE_INSTALL \
100-
-DOS_NAME=Debian \
101-
-DOS_VERSION=9 \
102-
-DSDE_VERSION=9130
97+
root@localhost:~/bf-bsp-lts/build# cmake .. -DCMAKE_MODULE_PATH=`pwd`/../cmake \
98+
-DCMAKE_INSTALL_PREFIX=$SDE_INSTALL \
99+
-DOS_NAME=Debian \
100+
-DOS_VERSION=9 \
101+
-DSDE_VERSION=9133
103102
root@localhost:~/bf-bsp-lts/build# make -j15 install
104103
```
105-
The defaut value of variables listed below if none of them passed by cmake CLI:
104+
The defaut value of supported variables are listed below if none of them passed by CMake CLI:
106105

107-
`OS_NAME=Debian`, `OS_VERSION=9`, `SDE_VERSION=9130`
106+
`OS_NAME=Debian`,
107+
108+
`OS_VERSION=9`,
109+
110+
`SDE_VERSION=9133`,
111+
112+
`THRIFT-DRIVER=on`,
113+
114+
`LASER_ON=off`
108115

109116
#### <a name="build-bsp-via-an-outdated-way"></a>Build BSP via an Outdated Way
110117

autogen.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,5 +66,5 @@ else
6666
EOF
6767
fi
6868

69-
exec autoreconf -fi -v
69+
#exec autoreconf -fi -v
7070

drivers/include/bf_pltfm_types/bf_pltfm_types.h

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -161,8 +161,18 @@ extern "C" {
161161
#define AF_LOG_MSG_SIZE 512
162162
#define AF_LOG_EXT(...) \
163163
do { \
164+
FILE *xfp = fopen (BF_DRIVERS_LOG_EXT, "r"); \
165+
if (xfp == NULL) { \
166+
if (bf_pltfm_mgr_ctx()->extended_log_hdl) { \
167+
fclose(bf_pltfm_mgr_ctx()->extended_log_hdl); \
168+
bf_pltfm_mgr_ctx()->extended_log_hdl = NULL; \
169+
} \
170+
} else { \
171+
fclose(xfp); \
172+
} \
164173
if (bf_pltfm_mgr_ctx()->extended_log_hdl == NULL) { \
165-
bf_pltfm_mgr_ctx()->extended_log_hdl = fopen (BF_DRIVERS_LOG_EXT, "a+");\
174+
bf_pltfm_mgr_ctx()->extended_log_hdl = \
175+
fopen (BF_DRIVERS_LOG_EXT, "a+"); \
166176
} \
167177
if (bf_pltfm_mgr_ctx()->extended_log_hdl) { \
168178
fflush (bf_pltfm_mgr_ctx()->extended_log_hdl); \
@@ -189,8 +199,7 @@ extern "C" {
189199
fprintf (bf_pltfm_mgr_ctx()->extended_log_hdl, "%s\n", ____info); \
190200
fflush (bf_pltfm_mgr_ctx()->extended_log_hdl); \
191201
} \
192-
} while (0);/*\
193-
//LOG_WARNING(__VA_ARGS__);*/
202+
} while (0);
194203

195204
#define MAX_CHAN_PER_CONNECTOR 8
196205

drivers/include/bf_qsfp/bf_qsfp.h

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,16 @@ extern "C" {
3232
* remote for some kind of cases. Also, this feature can be implemented
3333
* to a transceiver as well by clearing flags BF_TRANS_CTRLMASK_LASER_OFF
3434
* in /etc/transceiver-cases.conf if you know its Vendor and PN.
35-
* .
36-
* by tsihang, 2023/09/01. */
35+
*
36+
* by tsihang, 2023/09/01.
37+
*
38+
*
39+
* This macro can be optionally given by CMake CLI with '-DLASER_ON=on'
40+
* To be highlighted, please make clean & make install to make sure all sources
41+
* fully compiled after -DLASER_ON flags changed.
42+
*
43+
* by tsihang, 2024/06/17.
44+
*/
3745
//#define DEFAULT_LASER_ON
3846

3947
/* Control word added by tsihang for /etc/transceiver-cases.conf, 2023/05/05. */

drivers/src/bf_qsfp/bf_qsfp_comm.c

Lines changed: 53 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -3194,6 +3194,8 @@ bool bf_qsfp_get_chan_tx_bias (int port,
31943194
qsfp_channel_t *chn)
31953195
{
31963196
uint8_t data[16];
3197+
uint8_t scaleValue;
3198+
double scale;
31973199
int i;
31983200
int chmask = bf_qsfp_chmask_get (port);
31993201

@@ -3216,17 +3218,36 @@ bool bf_qsfp_get_chan_tx_bias (int port,
32163218

32173219
/* Update cache. */
32183220
if (bf_qsfp_is_cmis (port)) {
3219-
/* TBD */
3221+
/* CMIS */
3222+
/* Support for CMIS since 2024-06-19. */
3223+
bf_qsfp_module_read (
3224+
port, QSFP_BANKNA, QSFP_PAGE1, 160, 1,
3225+
&scaleValue);
3226+
3227+
scale = pow(2.0, (scaleValue >> 3) & 3);
3228+
3229+
for (i = 0; i < 16; i++) {
3230+
bf_qsfp_info_arr[port].page17[i + 170 - MAX_QSFP_PAGE_SIZE] = data[i];
3231+
}
3232+
3233+
for (i = 0; i < bf_qsfp_get_media_ch_cnt(port) &&
3234+
i < MAX_CHAN_PER_CONNECTOR;
3235+
i++) {
3236+
uint16_t val = data[i * 2] << 8 | data[ (i * 2) +
3237+
1];
3238+
chn[i].sensors.tx_bias.value = scale * (131.0 * val) / 65535;
3239+
chn[i].sensors.tx_bias._isset.value = true;
3240+
}
32203241
} else {
32213242
/* SFF-8636 */
32223243
/* Currently only update the first eight bytes to support SFF-8636.
32233244
* Support for CMIS will be added in the future.
32243245
* by sunzheng, 2023-08-04. */
3225-
for (i=0; i < 8; i++) {
3246+
for (i = 0; i < 8; i++) {
32263247
bf_qsfp_info_arr[port].idprom[i + 42] = data[i];
32273248
}
32283249

3229-
for (i = 0; i < bf_qsfp_info_arr[port].num_ch &&
3250+
for (i = 0; i < bf_qsfp_get_media_ch_cnt(port) &&
32303251
i < MAX_CHAN_PER_CONNECTOR;
32313252
i++) {
32323253
uint16_t val = data[i * 2] << 8 | data[ (i * 2) +
@@ -3262,24 +3283,27 @@ bool bf_qsfp_get_chan_tx_pwr (int port,
32623283
return false;
32633284
}
32643285

3286+
for (i = 0; i < bf_qsfp_get_media_ch_cnt(port) &&
3287+
i < MAX_CHAN_PER_CONNECTOR;
3288+
i++) {
3289+
uint16_t val = data[i * 2] << 8 | data[ (i * 2) +
3290+
1];
3291+
/* Convert to dBm. */
3292+
chn[i].sensors.tx_pwr.value = ((val == 0) ? (-40 * 1.0) : (get_pwr (val)));
3293+
chn[i].sensors.tx_pwr._isset.value = true;
3294+
}
3295+
32653296
/* Update cache. */
32663297
if (bf_qsfp_is_cmis (port)) {
3267-
/* TBD */
3298+
/* CMIS */
3299+
for (i = 0; i < 16; i++) {
3300+
bf_qsfp_info_arr[port].page17[i + 154 - MAX_QSFP_PAGE_SIZE] = data[i];
3301+
}
32683302
} else {
32693303
/* SFF-8636 */
32703304
for (i=0; i < 8; i++) {
32713305
bf_qsfp_info_arr[port].idprom[i + 50] = data[i];
32723306
}
3273-
3274-
for (i = 0; i < bf_qsfp_info_arr[port].num_ch &&
3275-
i < MAX_CHAN_PER_CONNECTOR;
3276-
i++) {
3277-
uint16_t val = data[i * 2] << 8 | data[ (i * 2) +
3278-
1];
3279-
/* Convert to dBm. */
3280-
chn[i].sensors.tx_pwr.value = ((val == 0) ? (-40 * 1.0) : (get_pwr (val)));
3281-
chn[i].sensors.tx_pwr._isset.value = true;
3282-
}
32833307
}
32843308
return true;
32853309
}
@@ -3308,25 +3332,29 @@ bool bf_qsfp_get_chan_rx_pwr (int port,
33083332
return false;
33093333
}
33103334

3335+
for (i = 0; i < bf_qsfp_get_media_ch_cnt(port) &&
3336+
i < MAX_CHAN_PER_CONNECTOR;
3337+
i++) {
3338+
uint16_t val = data[i * 2] << 8 | data[ (i * 2) +
3339+
1];
3340+
/* Convert to dBm. */
3341+
chn[i].sensors.rx_pwr.value = ((val == 0) ? (-40 * 1.0) : (get_pwr (val)));
3342+
chn[i].sensors.rx_pwr._isset.value = true;
3343+
}
3344+
33113345
/* Update cache. */
33123346
if (bf_qsfp_is_cmis (port)) {
3313-
/* TBD */
3347+
/* CMIS */
3348+
for (i = 0; i < 16; i++) {
3349+
bf_qsfp_info_arr[port].page17[i + 186 - MAX_QSFP_PAGE_SIZE] = data[i];
3350+
}
33143351
} else {
33153352
/* SFF-8636 */
33163353
for (i=0; i < 8; i++) {
33173354
bf_qsfp_info_arr[port].idprom[i + 34] = data[i];
33183355
}
3319-
3320-
for (i = 0; i < bf_qsfp_info_arr[port].num_ch &&
3321-
i < MAX_CHAN_PER_CONNECTOR;
3322-
i++) {
3323-
uint16_t val = data[i * 2] << 8 | data[ (i * 2) +
3324-
1];
3325-
/* Convert to dBm. */
3326-
chn[i].sensors.rx_pwr.value = ((val == 0) ? (-40 * 1.0) : (get_pwr (val)));
3327-
chn[i].sensors.rx_pwr._isset.value = true;
3328-
}
33293356
}
3357+
33303358
return true;
33313359
}
33323360

0 commit comments

Comments
 (0)