diff --git a/drivers/can/can_mcux_flexcan.c b/drivers/can/can_mcux_flexcan.c index 7a6c72e3eb3d0..0b7fecd2ccbd8 100644 --- a/drivers/can/can_mcux_flexcan.c +++ b/drivers/can/can_mcux_flexcan.c @@ -309,17 +309,18 @@ static int mcux_flexcan_start(const struct device *dev) timing.rJumpwidth = data->timing.sjw - 1U; timing.phaseSeg1 = data->timing.phase_seg1 - 1U; timing.phaseSeg2 = data->timing.phase_seg2 - 1U; -#if (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_BIT_TIMING_REG) && \ - FSL_FEATURE_FLEXCAN_HAS_ENHANCED_BIT_TIMING_REG) - /* No propagation segment configuration, so prop_seg must be 0 */ - timing.propSeg = data->timing.prop_seg; -#else timing.propSeg = data->timing.prop_seg - 1U; -#endif FLEXCAN_SetTimingConfig(base, &timing); #ifdef CONFIG_CAN_MCUX_FLEXCAN_FD if (config->flexcan_fd) { +#if (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_BIT_TIMING_REG) && \ + FSL_FEATURE_FLEXCAN_HAS_ENHANCED_BIT_TIMING_REG) + /* No propagation segment configuration, so prop_seg must be 0 */ + timing.propSeg = data->timing.prop_seg; + /* Reconfigure arbitration phase timing with prop_seg = 0 */ + FLEXCAN_SetTimingConfig(base, &timing); +#endif timing.fpreDivider = data->timing_data.prescaler - 1U; timing.frJumpwidth = data->timing_data.sjw - 1U; timing.fphaseSeg1 = data->timing_data.phase_seg1 - 1U; @@ -1262,13 +1263,7 @@ static int mcux_flexcan_init(const struct device *dev) flexcan_config.enableListenOnlyMode = true; flexcan_config.timingConfig.rJumpwidth = data->timing.sjw - 1U; -#if (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_BIT_TIMING_REG) && \ - FSL_FEATURE_FLEXCAN_HAS_ENHANCED_BIT_TIMING_REG) - /* No propagation segment configuration, so prop_seg must be 0 */ - flexcan_config.timingConfig.propSeg = data->timing.prop_seg; -#else flexcan_config.timingConfig.propSeg = data->timing.prop_seg - 1U; -#endif flexcan_config.timingConfig.phaseSeg1 = data->timing.phase_seg1 - 1U; flexcan_config.timingConfig.phaseSeg2 = data->timing.phase_seg2 - 1U; @@ -1276,6 +1271,11 @@ static int mcux_flexcan_init(const struct device *dev) #ifdef CONFIG_CAN_MCUX_FLEXCAN_FD if (config->flexcan_fd) { +#if (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_BIT_TIMING_REG) && \ + FSL_FEATURE_FLEXCAN_HAS_ENHANCED_BIT_TIMING_REG) + /* No propagation segment configuration, so prop_seg must be 0 */ + flexcan_config.timingConfig.propSeg = data->timing.prop_seg; +#endif flexcan_config.timingConfig.frJumpwidth = data->timing_data.sjw - 1U; flexcan_config.timingConfig.fpropSeg = data->timing_data.prop_seg; flexcan_config.timingConfig.fphaseSeg1 = data->timing_data.phase_seg1 - 1U;