@@ -2114,10 +2114,14 @@ static void *radio_ccm_ext_rx_pkt_set(struct ccm *cnf, uint8_t phy, uint8_t pdu_
21142114 NRF_CCM -> ENABLE = CCM_ENABLE_ENABLE_Disabled ;
21152115 NRF_CCM -> ENABLE = CCM_ENABLE_ENABLE_Enabled ;
21162116
2117- mode = (CCM_MODE_MODE_Decryption << CCM_MODE_MODE_Pos ) &
2117+ /* Select the CCM decryption mode for the SoC */
2118+ #if defined(CONFIG_SOC_COMPATIBLE_NRF54LX )
2119+ /* NOTE: Use fast decryption as rx data is decrypt after payload is received, compared to
2120+ * decrypting in parallel with radio reception of address in nRF51/nRF52/nRF53.
2121+ */
2122+ mode = (CCM_MODE_MODE_FastDecryption << CCM_MODE_MODE_Pos ) &
21182123 CCM_MODE_MODE_Msk ;
21192124
2120- #if defined(CONFIG_SOC_COMPATIBLE_NRF54LX )
21212125 /* Enable CCM Protocol Mode Bluetooth LE */
21222126 mode |= (CCM_MODE_PROTOCOL_Ble << CCM_MODE_PROTOCOL_Pos ) &
21232127 CCM_MODE_PROTOCOL_Msk ;
@@ -2126,21 +2130,30 @@ static void *radio_ccm_ext_rx_pkt_set(struct ccm *cnf, uint8_t phy, uint8_t pdu_
21262130 mode |= (CCM_MODE_MACLEN_M4 << CCM_MODE_MACLEN_Pos ) &
21272131 CCM_MODE_MACLEN_Msk ;
21282132
2129- #elif !defined(CONFIG_SOC_SERIES_NRF51X )
2133+ #elif defined(CONFIG_SOC_COMPATIBLE_NRF52X ) || defined(CONFIG_SOC_COMPATIBLE_NRF5340_CPUNET )
2134+ mode = (CCM_MODE_MODE_Decryption << CCM_MODE_MODE_Pos ) &
2135+ CCM_MODE_MODE_Msk ;
2136+
21302137 /* Enable CCM support for 8-bit length field PDUs. */
21312138 mode |= (CCM_MODE_LENGTH_Extended << CCM_MODE_LENGTH_Pos ) &
21322139 CCM_MODE_LENGTH_Msk ;
2133- #endif /* !CONFIG_SOC_SERIES_NRF51X */
2140+
2141+ #elif defined(CONFIG_SOC_SERIES_NRF51X )
2142+ mode = (CCM_MODE_MODE_Decryption << CCM_MODE_MODE_Pos ) &
2143+ CCM_MODE_MODE_Msk ;
2144+
2145+ #else
2146+ #error "H/w accelerated decryption unsupported."
2147+ #endif
21342148
21352149 /* Select CCM data rate based on current PHY in use. */
21362150 switch (phy ) {
21372151 default :
21382152 case PHY_1M :
2139- #if !defined(CONFIG_SOC_SERIES_NRF51X )
2140- mode |= (CCM_MODE_DATARATE_1Mbit <<
2141- CCM_MODE_DATARATE_Pos ) &
2153+ #if !defined(CONFIG_SOC_SERIES_NRF51X ) && !defined(CONFIG_SOC_COMPATIBLE_NRF54LX )
2154+ mode |= (CCM_MODE_DATARATE_1Mbit << CCM_MODE_DATARATE_Pos ) &
21422155 CCM_MODE_DATARATE_Msk ;
2143- #endif /* !CONFIG_SOC_SERIES_NRF51X */
2156+ #endif /* !CONFIG_SOC_SERIES_NRF51X && !CONFIG_SOC_COMPATIBLE_NRF54LX */
21442157
21452158 if (false) {
21462159
@@ -2163,11 +2176,10 @@ static void *radio_ccm_ext_rx_pkt_set(struct ccm *cnf, uint8_t phy, uint8_t pdu_
21632176 break ;
21642177
21652178 case PHY_2M :
2166- #if !defined(CONFIG_SOC_SERIES_NRF51X )
2167- mode |= (CCM_MODE_DATARATE_2Mbit <<
2168- CCM_MODE_DATARATE_Pos ) &
2179+ #if !defined(CONFIG_SOC_SERIES_NRF51X ) && !defined(CONFIG_SOC_COMPATIBLE_NRF54LX )
2180+ mode |= (CCM_MODE_DATARATE_2Mbit << CCM_MODE_DATARATE_Pos ) &
21692181 CCM_MODE_DATARATE_Msk ;
2170- #endif /* !CONFIG_SOC_SERIES_NRF51X */
2182+ #endif /* !CONFIG_SOC_SERIES_NRF51X && !CONFIG_SOC_COMPATIBLE_NRF54LX */
21712183
21722184 hal_trigger_crypt_ppi_config ();
21732185 hal_radio_nrf_ppi_channels_enable (BIT (HAL_TRIGGER_CRYPT_PPI ));
@@ -2177,9 +2189,10 @@ static void *radio_ccm_ext_rx_pkt_set(struct ccm *cnf, uint8_t phy, uint8_t pdu_
21772189#if defined(CONFIG_BT_CTLR_PHY_CODED )
21782190#if defined(CONFIG_HAS_HW_NRF_RADIO_BLE_CODED )
21792191 case PHY_CODED :
2180- mode |= ( CCM_MODE_DATARATE_125Kbps <<
2181- CCM_MODE_DATARATE_Pos ) &
2192+ #if !defined( CONFIG_SOC_COMPATIBLE_NRF54LX )
2193+ mode |= ( CCM_MODE_DATARATE_125Kbps << CCM_MODE_DATARATE_Pos ) &
21822194 CCM_MODE_DATARATE_Msk ;
2195+ #endif /* !CONFIG_SOC_COMPATIBLE_NRF54LX */
21832196
21842197 NRF_CCM -> RATEOVERRIDE =
21852198 (CCM_RATEOVERRIDE_RATEOVERRIDE_500Kbps <<
@@ -2346,22 +2359,11 @@ static void *radio_ccm_ext_tx_pkt_set(struct ccm *cnf, uint8_t pdu_type, void *p
23462359 NRF_CCM -> ENABLE = CCM_ENABLE_ENABLE_Disabled ;
23472360 NRF_CCM -> ENABLE = CCM_ENABLE_ENABLE_Enabled ;
23482361
2362+ /* Select the CCM encryption mode for the SoC */
2363+ #if defined(CONFIG_SOC_COMPATIBLE_NRF54LX )
23492364 mode = (CCM_MODE_MODE_Encryption << CCM_MODE_MODE_Pos ) &
23502365 CCM_MODE_MODE_Msk ;
23512366
2352- #if defined(CONFIG_SOC_COMPATIBLE_NRF52X ) || \
2353- defined(CONFIG_SOC_COMPATIBLE_NRF53X )
2354- /* Enable CCM support for 8-bit length field PDUs. */
2355- mode |= (CCM_MODE_LENGTH_Extended << CCM_MODE_LENGTH_Pos ) &
2356- CCM_MODE_LENGTH_Msk ;
2357-
2358- /* NOTE: use fastest data rate as tx data needs to be prepared before
2359- * radio Tx on any PHY.
2360- */
2361- mode |= (CCM_MODE_DATARATE_2Mbit << CCM_MODE_DATARATE_Pos ) &
2362- CCM_MODE_DATARATE_Msk ;
2363-
2364- #elif defined(CONFIG_SOC_COMPATIBLE_NRF54LX )
23652367 /* Enable CCM Protocol Mode Bluetooth LE */
23662368 mode |= (CCM_MODE_PROTOCOL_Ble << CCM_MODE_PROTOCOL_Pos ) &
23672369 CCM_MODE_PROTOCOL_Msk ;
@@ -2375,6 +2377,27 @@ static void *radio_ccm_ext_tx_pkt_set(struct ccm *cnf, uint8_t pdu_type, void *p
23752377 /* Enable CCM MAC Length 4 bytes */
23762378 mode |= (CCM_MODE_MACLEN_M4 << CCM_MODE_MACLEN_Pos ) &
23772379 CCM_MODE_MACLEN_Msk ;
2380+
2381+ #elif defined(CONFIG_SOC_COMPATIBLE_NRF52X ) || defined(CONFIG_SOC_COMPATIBLE_NRF5340_CPUNET )
2382+ mode = (CCM_MODE_MODE_Encryption << CCM_MODE_MODE_Pos ) &
2383+ CCM_MODE_MODE_Msk ;
2384+
2385+ /* Enable CCM support for 8-bit length field PDUs. */
2386+ mode |= (CCM_MODE_LENGTH_Extended << CCM_MODE_LENGTH_Pos ) &
2387+ CCM_MODE_LENGTH_Msk ;
2388+
2389+ /* NOTE: use fastest data rate as tx data needs to be prepared before
2390+ * radio Tx on any PHY.
2391+ */
2392+ mode |= (CCM_MODE_DATARATE_2Mbit << CCM_MODE_DATARATE_Pos ) &
2393+ CCM_MODE_DATARATE_Msk ;
2394+
2395+ #elif defined(CONFIG_SOC_SERIES_NRF51X )
2396+ mode = (CCM_MODE_MODE_Encryption << CCM_MODE_MODE_Pos ) &
2397+ CCM_MODE_MODE_Msk ;
2398+
2399+ #else
2400+ #error "H/w accelerated encryption unsupported."
23782401#endif
23792402
23802403 NRF_CCM -> MODE = mode ;
0 commit comments