@@ -2114,10 +2114,14 @@ static void *radio_ccm_ext_rx_pkt_set(struct ccm *cnf, uint8_t phy, uint8_t pdu_
2114
2114
NRF_CCM -> ENABLE = CCM_ENABLE_ENABLE_Disabled ;
2115
2115
NRF_CCM -> ENABLE = CCM_ENABLE_ENABLE_Enabled ;
2116
2116
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 ) &
2118
2123
CCM_MODE_MODE_Msk ;
2119
2124
2120
- #if defined(CONFIG_SOC_COMPATIBLE_NRF54LX )
2121
2125
/* Enable CCM Protocol Mode Bluetooth LE */
2122
2126
mode |= (CCM_MODE_PROTOCOL_Ble << CCM_MODE_PROTOCOL_Pos ) &
2123
2127
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_
2126
2130
mode |= (CCM_MODE_MACLEN_M4 << CCM_MODE_MACLEN_Pos ) &
2127
2131
CCM_MODE_MACLEN_Msk ;
2128
2132
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
+
2130
2137
/* Enable CCM support for 8-bit length field PDUs. */
2131
2138
mode |= (CCM_MODE_LENGTH_Extended << CCM_MODE_LENGTH_Pos ) &
2132
2139
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
2134
2148
2135
2149
/* Select CCM data rate based on current PHY in use. */
2136
2150
switch (phy ) {
2137
2151
default :
2138
2152
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 ) &
2142
2155
CCM_MODE_DATARATE_Msk ;
2143
- #endif /* !CONFIG_SOC_SERIES_NRF51X */
2156
+ #endif /* !CONFIG_SOC_SERIES_NRF51X && !CONFIG_SOC_COMPATIBLE_NRF54LX */
2144
2157
2145
2158
if (false) {
2146
2159
@@ -2163,11 +2176,10 @@ static void *radio_ccm_ext_rx_pkt_set(struct ccm *cnf, uint8_t phy, uint8_t pdu_
2163
2176
break ;
2164
2177
2165
2178
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 ) &
2169
2181
CCM_MODE_DATARATE_Msk ;
2170
- #endif /* !CONFIG_SOC_SERIES_NRF51X */
2182
+ #endif /* !CONFIG_SOC_SERIES_NRF51X && !CONFIG_SOC_COMPATIBLE_NRF54LX */
2171
2183
2172
2184
hal_trigger_crypt_ppi_config ();
2173
2185
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_
2177
2189
#if defined(CONFIG_BT_CTLR_PHY_CODED )
2178
2190
#if defined(CONFIG_HAS_HW_NRF_RADIO_BLE_CODED )
2179
2191
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 ) &
2182
2194
CCM_MODE_DATARATE_Msk ;
2195
+ #endif /* !CONFIG_SOC_COMPATIBLE_NRF54LX */
2183
2196
2184
2197
NRF_CCM -> RATEOVERRIDE =
2185
2198
(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
2346
2359
NRF_CCM -> ENABLE = CCM_ENABLE_ENABLE_Disabled ;
2347
2360
NRF_CCM -> ENABLE = CCM_ENABLE_ENABLE_Enabled ;
2348
2361
2362
+ /* Select the CCM encryption mode for the SoC */
2363
+ #if defined(CONFIG_SOC_COMPATIBLE_NRF54LX )
2349
2364
mode = (CCM_MODE_MODE_Encryption << CCM_MODE_MODE_Pos ) &
2350
2365
CCM_MODE_MODE_Msk ;
2351
2366
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 )
2365
2367
/* Enable CCM Protocol Mode Bluetooth LE */
2366
2368
mode |= (CCM_MODE_PROTOCOL_Ble << CCM_MODE_PROTOCOL_Pos ) &
2367
2369
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
2375
2377
/* Enable CCM MAC Length 4 bytes */
2376
2378
mode |= (CCM_MODE_MACLEN_M4 << CCM_MODE_MACLEN_Pos ) &
2377
2379
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."
2378
2401
#endif
2379
2402
2380
2403
NRF_CCM -> MODE = mode ;
0 commit comments