Skip to content

Commit 093abc4

Browse files
tunguyen4585mmahadevan108
authored andcommitted
nxp: mcux: drivers: flexcan: add the guards for unsupport features
MECR[HANCEI], MECR[FANCEI], MECR[CEI], MCR[WAKMSK], MCR[SLFWAK] , MCR[WAKSRC] are unsupported on S32Z27x devices, so add the guards to disable the related features Signed-off-by: Tu Nguyen Van <tu.nguyenvan@nxp.com>
1 parent 30bdef6 commit 093abc4

File tree

3 files changed

+66
-12
lines changed

3 files changed

+66
-12
lines changed

mcux/README

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,3 +100,4 @@ Patch List:
100100
- mcux-sdk/drivers/adc12/fsl_adc12.c: add guards to avoid compilation warnings when building
101101
with SDK clock control driver disabled.
102102
- Update the driver in mcux-sdk/drivers/cache/cache64/fsl_cache.c to use the non-secure flash address during cache invalidation.
103+
- mcux-sdk/drivers/flexcan/fsl_flexcan.c and mcux-sdk/drivers/flexcan/fsl_flexcan.h: add the guards for unsupport features on S32Z27x devices

mcux/mcux-sdk/drivers/flexcan/fsl_flexcan.c

Lines changed: 41 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1002,9 +1002,13 @@ void FLEXCAN_Init(CAN_Type *base, const flexcan_config_t *pConfig, uint32_t sour
10021002
mcrTemp = (mcrTemp & ~CAN_MCR_MAXMB_MASK) | CAN_MCR_MAXMB((uint32_t)pConfig->maxMbNum - 1U);
10031003

10041004
/* Enable Self Wake Up Mode and configure the wake up source. */
1005+
#if !(defined(FSL_FEATURE_FLEXCAN_HAS_NO_SLFWAK_SUPPORT) && FSL_FEATURE_FLEXCAN_HAS_NO_SLFWAK_SUPPORT)
10051006
mcrTemp = (pConfig->enableSelfWakeup) ? (mcrTemp | CAN_MCR_SLFWAK_MASK) : (mcrTemp & ~CAN_MCR_SLFWAK_MASK);
1007+
#endif
1008+
#if !(defined(FSL_FEATURE_FLEXCAN_HAS_NO_WAKSRC_SUPPORT) && FSL_FEATURE_FLEXCAN_HAS_NO_WAKSRC_SUPPORT)
10061009
mcrTemp = (kFLEXCAN_WakeupSrcFiltered == pConfig->wakeupSrc) ? (mcrTemp | CAN_MCR_WAKSRC_MASK) :
10071010
(mcrTemp & ~CAN_MCR_WAKSRC_MASK);
1011+
#endif
10081012
#if (defined(FSL_FEATURE_FLEXCAN_HAS_PN_MODE) && FSL_FEATURE_FLEXCAN_HAS_PN_MODE)
10091013
/* Enable Pretended Networking Mode? When Pretended Networking mode is set, Self Wake Up feature must be disabled.*/
10101014
mcrTemp = (pConfig->enablePretendedeNetworking) ? ((mcrTemp & ~CAN_MCR_SLFWAK_MASK) | CAN_MCR_PNET_EN_MASK) :
@@ -1270,8 +1274,12 @@ void FLEXCAN_GetDefaultConfig(flexcan_config_t *pConfig)
12701274
pConfig->maxMbNum = 16;
12711275
pConfig->enableLoopBack = false;
12721276
pConfig->enableTimerSync = true;
1277+
#if !(defined(FSL_FEATURE_FLEXCAN_HAS_NO_SLFWAK_SUPPORT) && FSL_FEATURE_FLEXCAN_HAS_NO_SLFWAK_SUPPORT)
12731278
pConfig->enableSelfWakeup = false;
1279+
#endif
1280+
#if !(defined(FSL_FEATURE_FLEXCAN_HAS_NO_WAKSRC_SUPPORT) && FSL_FEATURE_FLEXCAN_HAS_NO_WAKSRC_SUPPORT)
12741281
pConfig->wakeupSrc = kFLEXCAN_WakeupSrcUnfiltered;
1282+
#endif
12751283
pConfig->enableIndividMask = false;
12761284
pConfig->disableSelfReception = false;
12771285
pConfig->enableListenOnlyMode = false;
@@ -3545,33 +3553,49 @@ void FLEXCAN_TransferCreateHandle(CAN_Type *base,
35453553
{
35463554
FLEXCAN_EnableInterrupts(
35473555
base, (uint32_t)kFLEXCAN_BusOffInterruptEnable | (uint32_t)kFLEXCAN_ErrorInterruptEnable |
3548-
(uint32_t)kFLEXCAN_RxWarningInterruptEnable | (uint32_t)kFLEXCAN_TxWarningInterruptEnable |
3549-
(uint32_t)kFLEXCAN_WakeUpInterruptEnable
3556+
(uint32_t)kFLEXCAN_RxWarningInterruptEnable | (uint32_t)kFLEXCAN_TxWarningInterruptEnable
3557+
#if !(defined(FSL_FEATURE_FLEXCAN_HAS_NO_WAKMSK_SUPPORT) && FSL_FEATURE_FLEXCAN_HAS_NO_WAKMSK_SUPPORT)
3558+
|(uint32_t)kFLEXCAN_WakeUpInterruptEnable
3559+
#endif
35503560
#if (defined(FSL_FEATURE_FLEXCAN_HAS_PN_MODE) && FSL_FEATURE_FLEXCAN_HAS_PN_MODE)
35513561
| (uint64_t)kFLEXCAN_PNMatchWakeUpInterruptEnable |
35523562
(uint64_t)kFLEXCAN_PNTimeoutWakeUpInterruptEnable
35533563
#endif
35543564
#if (defined(FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL) && FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL)
3555-
| (uint64_t)kFLEXCAN_HostAccessNCErrorInterruptEnable |
3556-
(uint64_t)kFLEXCAN_FlexCanAccessNCErrorInterruptEnable |
3557-
(uint64_t)kFLEXCAN_HostOrFlexCanCErrorInterruptEnable
3565+
#if !(defined(FSL_FEATURE_FLEXCAN_HAS_NO_HANCEI_SUPPORT) && FSL_FEATURE_FLEXCAN_HAS_NO_HANCEI_SUPPORT)
3566+
| (uint64_t)kFLEXCAN_HostAccessNCErrorInterruptEnable |
3567+
#endif
3568+
#if !(defined(FSL_FEATURE_FLEXCAN_HAS_NO_FANCEI_SUPPORT) && FSL_FEATURE_FLEXCAN_HAS_NO_FANCEI_SUPPORT)
3569+
(uint64_t)kFLEXCAN_FlexCanAccessNCErrorInterruptEnable |
3570+
#endif
3571+
#if !(defined(FSL_FEATURE_FLEXCAN_HAS_NO_CEI_SUPPORT) && FSL_FEATURE_FLEXCAN_HAS_NO_CEI_SUPPORT)
3572+
(uint64_t)kFLEXCAN_HostOrFlexCanCErrorInterruptEnable
3573+
#endif
35583574
#endif
35593575
);
35603576
}
35613577
else
35623578
{
35633579
FLEXCAN_DisableInterrupts(
35643580
base, (uint32_t)kFLEXCAN_BusOffInterruptEnable | (uint32_t)kFLEXCAN_ErrorInterruptEnable |
3565-
(uint32_t)kFLEXCAN_RxWarningInterruptEnable | (uint32_t)kFLEXCAN_TxWarningInterruptEnable |
3566-
(uint32_t)kFLEXCAN_WakeUpInterruptEnable
3581+
(uint32_t)kFLEXCAN_RxWarningInterruptEnable | (uint32_t)kFLEXCAN_TxWarningInterruptEnable
3582+
#if !(defined(FSL_FEATURE_FLEXCAN_HAS_NO_WAKMSK_SUPPORT) && FSL_FEATURE_FLEXCAN_HAS_NO_WAKMSK_SUPPORT)
3583+
|(uint32_t)kFLEXCAN_WakeUpInterruptEnable
3584+
#endif
35673585
#if (defined(FSL_FEATURE_FLEXCAN_HAS_PN_MODE) && FSL_FEATURE_FLEXCAN_HAS_PN_MODE)
35683586
| (uint64_t)kFLEXCAN_PNMatchWakeUpInterruptEnable |
35693587
(uint64_t)kFLEXCAN_PNTimeoutWakeUpInterruptEnable
35703588
#endif
35713589
#if (defined(FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL) && FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL)
3572-
| (uint64_t)kFLEXCAN_HostAccessNCErrorInterruptEnable |
3573-
(uint64_t)kFLEXCAN_FlexCanAccessNCErrorInterruptEnable |
3574-
(uint64_t)kFLEXCAN_HostOrFlexCanCErrorInterruptEnable
3590+
#if !(defined(FSL_FEATURE_FLEXCAN_HAS_NO_HANCEI_SUPPORT) && FSL_FEATURE_FLEXCAN_HAS_NO_HANCEI_SUPPORT)
3591+
| (uint64_t)kFLEXCAN_HostAccessNCErrorInterruptEnable |
3592+
#endif
3593+
#if !(defined(FSL_FEATURE_FLEXCAN_HAS_NO_FANCEI_SUPPORT) && FSL_FEATURE_FLEXCAN_HAS_NO_FANCEI_SUPPORT)
3594+
(uint64_t)kFLEXCAN_FlexCanAccessNCErrorInterruptEnable |
3595+
#endif
3596+
#if !(defined(FSL_FEATURE_FLEXCAN_HAS_NO_CEI_SUPPORT) && FSL_FEATURE_FLEXCAN_HAS_NO_CEI_SUPPORT)
3597+
(uint64_t)kFLEXCAN_HostOrFlexCanCErrorInterruptEnable
3598+
#endif
35753599
#endif
35763600
);
35773601
}
@@ -4266,7 +4290,11 @@ static bool FLEXCAN_CheckUnhandleInterruptEvents(CAN_Type *base)
42664290
bool fgRet = false;
42674291

42684292
if (0U == (FLEXCAN_GetStatusFlags(base) &
4269-
(FLEXCAN_ERROR_AND_STATUS_INIT_FLAG | FLEXCAN_WAKE_UP_FLAG | FLEXCAN_MEMORY_ENHANCED_RX_FIFO_INIT_FLAG)))
4293+
(FLEXCAN_ERROR_AND_STATUS_INIT_FLAG
4294+
#if !(defined(FSL_FEATURE_FLEXCAN_HAS_NO_SLFWAK_SUPPORT) && FSL_FEATURE_FLEXCAN_HAS_NO_SLFWAK_SUPPORT)
4295+
| FLEXCAN_WAKE_UP_FLAG
4296+
#endif
4297+
| FLEXCAN_MEMORY_ENHANCED_RX_FIFO_INIT_FLAG)))
42704298
{
42714299
/* If no error, wake_up or enhanced RX FIFO status, Checking whether exist MB interrupt status and legacy RX
42724300
* FIFO interrupt status */
@@ -4759,11 +4787,13 @@ void FLEXCAN_TransferHandleIRQ(CAN_Type *base, flexcan_handle_t *handle)
47594787
/* Clear FlexCAN Error and Status Interrupt. */
47604788
FLEXCAN_ClearStatusFlags(base, FLEXCAN_ERROR_AND_STATUS_INIT_FLAG);
47614789
}
4790+
#if !(defined(FSL_FEATURE_FLEXCAN_HAS_NO_SLFWAK_SUPPORT) && FSL_FEATURE_FLEXCAN_HAS_NO_SLFWAK_SUPPORT)
47624791
else if (0U != (result & FLEXCAN_WAKE_UP_FLAG))
47634792
{
47644793
status = kStatus_FLEXCAN_WakeUp;
47654794
FLEXCAN_ClearStatusFlags(base, FLEXCAN_WAKE_UP_FLAG);
47664795
}
4796+
#endif
47674797
#if (defined(FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO) && FSL_FEATURE_FLEXCAN_HAS_ENHANCED_RX_FIFO)
47684798
else if (0U != (FLEXCAN_EFIFO_STATUS_UNMASK(result & FLEXCAN_MEMORY_ENHANCED_RX_FIFO_INIT_FLAG) & base->ERFIER))
47694799
{

mcux/mcux-sdk/drivers/flexcan/fsl_flexcan.h

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,11 +213,15 @@
213213
(uint32_t)kFLEXCAN_ErrorIntFlag | FLEXCAN_MEMORY_ERROR_INIT_FLAG)
214214
#endif
215215
#if (defined(FSL_FEATURE_FLEXCAN_HAS_PN_MODE) && FSL_FEATURE_FLEXCAN_HAS_PN_MODE)
216+
#if !(defined(FSL_FEATURE_FLEXCAN_HAS_NO_SLFWAK_SUPPORT) && FSL_FEATURE_FLEXCAN_HAS_NO_SLFWAK_SUPPORT)
216217
#define FLEXCAN_WAKE_UP_FLAG \
217218
((uint32_t)kFLEXCAN_WakeUpIntFlag | (uint64_t)kFLEXCAN_PNMatchIntFlag | (uint64_t)kFLEXCAN_PNTimeoutIntFlag)
219+
#endif
218220
#else
221+
#if !(defined(FSL_FEATURE_FLEXCAN_HAS_NO_SLFWAK_SUPPORT) && FSL_FEATURE_FLEXCAN_HAS_NO_SLFWAK_SUPPORT)
219222
#define FLEXCAN_WAKE_UP_FLAG ((uint32_t)kFLEXCAN_WakeUpIntFlag)
220223
#endif
224+
#endif
221225
#if (defined(FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL) && FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL)
222226
#define FLEXCAN_MEMORY_ERROR_INIT_FLAG ((uint64_t)kFLEXCAN_AllMemoryErrorFlag)
223227
#else
@@ -287,12 +291,14 @@ typedef enum _flexcan_clock_source
287291
kFLEXCAN_ClkSrc1 = 0x1U, /*!< FlexCAN Protocol Engine clock selected by user as SRC == 1. */
288292
} flexcan_clock_source_t;
289293

294+
#if !(defined(FSL_FEATURE_FLEXCAN_HAS_NO_WAKSRC_SUPPORT) && FSL_FEATURE_FLEXCAN_HAS_NO_WAKSRC_SUPPORT)
290295
/*! @brief FlexCAN wake up source. */
291296
typedef enum _flexcan_wake_up_source
292297
{
293298
kFLEXCAN_WakeupSrcUnfiltered = 0x0U, /*!< FlexCAN uses unfiltered Rx input to detect edge. */
294299
kFLEXCAN_WakeupSrcFiltered = 0x1U, /*!< FlexCAN uses filtered Rx input to detect edge. */
295300
} flexcan_wake_up_source_t;
301+
#endif
296302

297303
/*! @brief FlexCAN Rx Fifo Filter type. */
298304
typedef enum _flexcan_rx_fifo_filter_type
@@ -397,7 +403,9 @@ enum _flexcan_interrupt_enable
397403
kFLEXCAN_ErrorInterruptEnable = CAN_CTRL1_ERRMSK_MASK, /*!< CAN Error interrupt, use bit 14. */
398404
kFLEXCAN_TxWarningInterruptEnable = CAN_CTRL1_TWRNMSK_MASK, /*!< Tx Warning interrupt, use bit 11. */
399405
kFLEXCAN_RxWarningInterruptEnable = CAN_CTRL1_RWRNMSK_MASK, /*!< Rx Warning interrupt, use bit 10. */
406+
#if !(defined(FSL_FEATURE_FLEXCAN_HAS_NO_WAKMSK_SUPPORT) && FSL_FEATURE_FLEXCAN_HAS_NO_WAKMSK_SUPPORT)
400407
kFLEXCAN_WakeUpInterruptEnable = CAN_MCR_WAKMSK_MASK, /*!< Self Wake Up interrupt, use bit 26. */
408+
#endif
401409
#if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE)
402410
kFLEXCAN_FDErrorInterruptEnable = CAN_CTRL2_ERRMSK_FAST_MASK, /*!< CAN FD Error interrupt, use bit 31. */
403411
#endif
@@ -418,13 +426,19 @@ enum _flexcan_interrupt_enable
418426
kFLEXCAN_ERxFifoDataAvlInterruptEnable = FLEXCAN_EFIFO_INT_MASK(CAN_ERFIER_ERFDAIE_MASK),
419427
#endif
420428
#if (defined(FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL) && FSL_FEATURE_FLEXCAN_HAS_MEMORY_ERROR_CONTROL)
429+
#if !(defined(FSL_FEATURE_FLEXCAN_HAS_NO_HANCEI_SUPPORT) && FSL_FEATURE_FLEXCAN_HAS_NO_HANCEI_SUPPORT)
421430
/*! Host Access With Non-Correctable Errors interrupt, use high word bit 0. */
422431
kFLEXCAN_HostAccessNCErrorInterruptEnable = FLEXCAN_MECR_INT_MASK(CAN_MECR_HANCEI_MSK_MASK),
432+
#endif
433+
#if !(defined(FSL_FEATURE_FLEXCAN_HAS_NO_FANCEI_SUPPORT) && FSL_FEATURE_FLEXCAN_HAS_NO_FANCEI_SUPPORT)
423434
/*! FlexCAN Access With Non-Correctable Errors interrupt, use high word bit 2. */
424435
kFLEXCAN_FlexCanAccessNCErrorInterruptEnable = FLEXCAN_MECR_INT_MASK(CAN_MECR_FANCEI_MSK_MASK),
436+
#endif
437+
#if !(defined(FSL_FEATURE_FLEXCAN_HAS_NO_CEI_SUPPORT) && FSL_FEATURE_FLEXCAN_HAS_NO_CEI_SUPPORT)
425438
/*! Host or FlexCAN Access With Correctable Errors interrupt, use high word bit 3. */
426439
kFLEXCAN_HostOrFlexCanCErrorInterruptEnable = FLEXCAN_MECR_INT_MASK(CAN_MECR_CEI_MSK_MASK),
427440
#endif
441+
#endif
428442
};
429443

430444
/*!
@@ -450,7 +464,9 @@ enum _flexcan_flags
450464
kFLEXCAN_ReceivingFlag = CAN_ESR1_RX_MASK, /*!< FlexCAN In Reception Status. */
451465
kFLEXCAN_BusOffIntFlag = CAN_ESR1_BOFFINT_MASK, /*!< Bus Off Interrupt Flag. */
452466
kFLEXCAN_ErrorIntFlag = CAN_ESR1_ERRINT_MASK, /*!< CAN Error Interrupt Flag. */
467+
#if !(defined(FSL_FEATURE_FLEXCAN_HAS_NO_SLFWAK_SUPPORT) && FSL_FEATURE_FLEXCAN_HAS_NO_SLFWAK_SUPPORT)
453468
kFLEXCAN_WakeUpIntFlag = CAN_ESR1_WAKINT_MASK, /*!< Self Wake-Up Interrupt Flag. */
469+
#endif
454470
kFLEXCAN_ErrorFlag =
455471
(uint32_t)(/*!< All FlexCAN Read Clear Error Status. */
456472
#if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE)
@@ -745,11 +761,15 @@ typedef struct _flexcan_config
745761
};
746762
};
747763
flexcan_clock_source_t clkSrc; /*!< Clock source for FlexCAN Protocol Engine. */
764+
#if !(defined(FSL_FEATURE_FLEXCAN_HAS_NO_WAKSRC_SUPPORT) && FSL_FEATURE_FLEXCAN_HAS_NO_WAKSRC_SUPPORT)
748765
flexcan_wake_up_source_t wakeupSrc; /*!< Wake up source selection. */
766+
#endif
749767
uint8_t maxMbNum; /*!< The maximum number of Message Buffers used by user. */
750768
bool enableLoopBack; /*!< Enable or Disable Loop Back Self Test Mode. */
751769
bool enableTimerSync; /*!< Enable or Disable Timer Synchronization. */
770+
#if !(defined(FSL_FEATURE_FLEXCAN_HAS_NO_SLFWAK_SUPPORT) && FSL_FEATURE_FLEXCAN_HAS_NO_SLFWAK_SUPPORT)
752771
bool enableSelfWakeup; /*!< Enable or Disable Self Wakeup Mode. */
772+
#endif
753773
bool enableIndividMask; /*!< Enable or Disable Rx Individual Mask and Queue feature. */
754774
bool disableSelfReception; /*!< Enable or Disable Self Reflection. */
755775
bool enableListenOnlyMode; /*!< Enable or Disable Listen Only Mode. */
@@ -1666,9 +1686,10 @@ static inline void FLEXCAN_EnableInterrupts(CAN_Type *base, uint32_t mask)
16661686
#endif
16671687
{
16681688
uint32_t primask = DisableGlobalIRQ();
1669-
1689+
#if !(defined(FSL_FEATURE_FLEXCAN_HAS_NO_WAKMSK_SUPPORT) && FSL_FEATURE_FLEXCAN_HAS_NO_WAKMSK_SUPPORT)
16701690
/* Solve Self Wake Up interrupt. */
16711691
base->MCR |= (uint32_t)(mask & (uint32_t)kFLEXCAN_WakeUpInterruptEnable);
1692+
#endif
16721693

16731694
#if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE)
16741695
if (0 != FSL_FEATURE_FLEXCAN_INSTANCE_HAS_FLEXIBLE_DATA_RATEn(base))
@@ -1719,8 +1740,10 @@ static inline void FLEXCAN_DisableInterrupts(CAN_Type *base, uint32_t mask)
17191740
{
17201741
uint32_t primask = DisableGlobalIRQ();
17211742

1743+
#if !(defined(FSL_FEATURE_FLEXCAN_HAS_NO_WAKMSK_SUPPORT) && FSL_FEATURE_FLEXCAN_HAS_NO_WAKMSK_SUPPORT)
17221744
/* Solve Wake Up Interrupt. */
17231745
base->MCR &= ~(uint32_t)(mask & (uint32_t)kFLEXCAN_WakeUpInterruptEnable);
1746+
#endif
17241747

17251748
#if (defined(FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE) && FSL_FEATURE_FLEXCAN_HAS_FLEXIBLE_DATA_RATE)
17261749
if (0 != FSL_FEATURE_FLEXCAN_INSTANCE_HAS_FLEXIBLE_DATA_RATEn(base))

0 commit comments

Comments
 (0)