drivers: can: nxp_s32_canxl: calculate and set the TDCO

Calculate and set the Transceiver Delay Compensation Offset (TDCO).

Fixes #73824

Signed-off-by: Cong Nguyen Huu <cong.nguyenhuu@nxp.com>
This commit is contained in:
Cong Nguyen Huu 2024-06-07 11:13:39 +07:00 committed by Alberto Escolar
parent 7dc830e9db
commit 0781caf408

View file

@ -43,6 +43,8 @@
#define CAN_NXP_S32_MAX_BITRATE 8000000
#define CAN_NXP_S32_DATA_LENGTH 64
#define CAN_NXP_S32_TDCO_MAX FIELD_GET(CANXL_SIC_BTDCC_FTDCOFF_MASK, CANXL_SIC_BTDCC_FTDCOFF_MASK)
#ifdef CONFIG_CAN_NXP_S32_RX_FIFO
/* RX FIFO depth is fixed to the maximum value */
#define CAN_NXP_S32_RX_FIFO_DEPTH 32
@ -706,6 +708,9 @@ static int can_nxp_s32_set_timing_data(const struct device *dev,
/* Set timing for CAN FD instance*/
CanXL_SetFDBaudRate(config->base_sic, &can_fd_time_segment);
Canexcel_Ip_SetTDCOffsetFD(config->instance, true, false,
CAN_CALC_TDCO((timing_data), 0U, CAN_NXP_S32_TDCO_MAX));
return 0;
}
#endif
@ -964,6 +969,11 @@ static int can_nxp_s32_init(const struct device *dev)
/* Initialize CAN structure */
Canexcel_Ip_Init(config->instance, config->can_cfg, data->can_state);
#ifdef CAN_NXP_S32_FD_MODE
Canexcel_Ip_SetTDCOffsetFD(config->instance, true, false,
CAN_CALC_TDCO((&data->timing_data), 0U, CAN_NXP_S32_TDCO_MAX));
#endif
/* Configure time stamp */
#ifdef CONFIG_CAN_RX_TIMESTAMP
Canexcel_Ip_ConfigTimeStamp(config->instance, &time_stamp);