Merge remote-tracking branch 'origin/fix_reestablishment_after_handover' into integration_2026_w03 (!3812)
Fix reestablishment after handover
This commit is contained in:
@@ -142,9 +142,21 @@ static void config_common_ue_sa(NR_UE_MAC_INST_t *mac, NR_ServingCellConfigCommo
|
||||
frequencyInfoDL->scs_SpecificCarrierList.list.array[0]->carrierBandwidth);
|
||||
cfg->carrier_config.dl_bandwidth = get_supported_bw_mhz(mac->frequency_range, bw_index);
|
||||
|
||||
uint64_t dl_bw_khz = (12 * frequencyInfoDL->scs_SpecificCarrierList.list.array[0]->carrierBandwidth) *
|
||||
(15 << frequencyInfoDL->scs_SpecificCarrierList.list.array[0]->subcarrierSpacing);
|
||||
cfg->carrier_config.dl_frequency = (downlink_frequency[cc_idP][0]/1000) - (dl_bw_khz>>1);
|
||||
/** Only set frequency if not already initialized (e.g., from handover reconfigurationWithSync)
|
||||
* MAC maintains its own frequency state, don't overwrite it with command-line parameter which
|
||||
* is related to the initial cell selection. */
|
||||
if (cfg->carrier_config.dl_frequency == 0) {
|
||||
// Initial cell selection: derive from command-line parameter
|
||||
uint64_t dl_bw_khz = (12 * frequencyInfoDL->scs_SpecificCarrierList.list.array[0]->carrierBandwidth) *
|
||||
(15 << frequencyInfoDL->scs_SpecificCarrierList.list.array[0]->subcarrierSpacing);
|
||||
cfg->carrier_config.dl_frequency = (downlink_frequency[cc_idP][0]/1000) - (dl_bw_khz>>1);
|
||||
LOG_I(NR_MAC,
|
||||
"[UE %d] Initial cell selection: dl_frequency=%u kHz (from command-line, band=%d, scs=%ld)\n",
|
||||
mac->ue_id,
|
||||
cfg->carrier_config.dl_frequency,
|
||||
mac->nr_band,
|
||||
frequencyInfoDL->scs_SpecificCarrierList.list.array[0]->subcarrierSpacing);
|
||||
}
|
||||
|
||||
for (int i = 0; i < 5; i++) {
|
||||
if (i == frequencyInfoDL->scs_SpecificCarrierList.list.array[0]->subcarrierSpacing) {
|
||||
@@ -165,10 +177,21 @@ static void config_common_ue_sa(NR_UE_MAC_INST_t *mac, NR_ServingCellConfigCommo
|
||||
frequencyInfoUL->scs_SpecificCarrierList.list.array[0]->carrierBandwidth);
|
||||
cfg->carrier_config.uplink_bandwidth = get_supported_bw_mhz(mac->frequency_range, bw_index);
|
||||
|
||||
if (frequencyInfoUL->absoluteFrequencyPointA == NULL)
|
||||
cfg->carrier_config.uplink_frequency = cfg->carrier_config.dl_frequency;
|
||||
else
|
||||
cfg->carrier_config.uplink_frequency = cfg->carrier_config.dl_frequency + (uplink_frequency_offset[cc_idP][0] / 1000);
|
||||
/** Only set UL frequency if not already initialized (e.g., from handover reconfigurationWithSync)
|
||||
* MAC maintains its own frequency state, don't overwrite it with command-line parameter which
|
||||
* is related to the initial cell selection. */
|
||||
if (cfg->carrier_config.uplink_frequency == 0) {
|
||||
// Initial cell selection: derive from DL frequency
|
||||
LOG_I(NR_MAC,
|
||||
"Initial cell selection: uplink_frequency=%u kHz (from dl_frequency=%u kHz, uplink_frequency_offset=%u kHz)\n",
|
||||
cfg->carrier_config.uplink_frequency,
|
||||
cfg->carrier_config.dl_frequency,
|
||||
uplink_frequency_offset[cc_idP][0]);
|
||||
if (frequencyInfoUL->absoluteFrequencyPointA == NULL)
|
||||
cfg->carrier_config.uplink_frequency = cfg->carrier_config.dl_frequency;
|
||||
else
|
||||
cfg->carrier_config.uplink_frequency = cfg->carrier_config.dl_frequency + (uplink_frequency_offset[cc_idP][0] / 1000);
|
||||
}
|
||||
|
||||
for (int i = 0; i < 5; i++) {
|
||||
if (i == frequencyInfoUL->scs_SpecificCarrierList.list.array[0]->subcarrierSpacing) {
|
||||
@@ -437,6 +460,13 @@ static void config_common_ue(NR_UE_MAC_INST_t *mac, NR_ServingCellConfigCommon_t
|
||||
*scc->ssbSubcarrierSpacing,
|
||||
frequencyInfoDL->absoluteFrequencyPointA)
|
||||
/ 1000; // freq in kHz
|
||||
LOG_I(NR_MAC,
|
||||
"[UE %d] Set dl_frequency=%u kHz (from absoluteFrequencyPointA=%ld, band=%d, scs=%ld)\n",
|
||||
mac->ue_id,
|
||||
cfg->carrier_config.dl_frequency,
|
||||
frequencyInfoDL->absoluteFrequencyPointA,
|
||||
mac->nr_band,
|
||||
*scc->ssbSubcarrierSpacing);
|
||||
|
||||
for (int i = 0; i < 5; i++) {
|
||||
if (i == frequencyInfoDL->scs_SpecificCarrierList.list.array[0]->subcarrierSpacing) {
|
||||
|
||||
@@ -1114,9 +1114,9 @@ void nr_ra_succeeded(NR_UE_MAC_INST_t *mac, const uint8_t gNB_index, const frame
|
||||
RA_config_t *ra = &mac->ra;
|
||||
|
||||
if (ra->cfra) {
|
||||
LOG_I(MAC, "[UE %d][%d.%d][RAPROC] RA procedure succeeded. CFRA: RAR successfully received.\n", mac->ue_id, frame, slot);
|
||||
LOG_A(NR_MAC, "[UE %d][%d.%d][RAPROC] RA procedure succeeded. CFRA: RAR successfully received.\n", mac->ue_id, frame, slot);
|
||||
} else {
|
||||
LOG_A(MAC,
|
||||
LOG_A(NR_MAC,
|
||||
"[UE %d][%d.%d][RAPROC] %d-Step RA procedure succeeded. CBRA: Contention Resolution is successful.\n",
|
||||
mac->ue_id,
|
||||
frame,
|
||||
@@ -1127,6 +1127,10 @@ void nr_ra_succeeded(NR_UE_MAC_INST_t *mac, const uint8_t gNB_index, const frame
|
||||
nr_timer_stop(&ra->contention_resolution_timer);
|
||||
}
|
||||
|
||||
// rach-ConfigDedicated is one shot configuration to be used only for a specific instance of reconfiguration with sync
|
||||
if (ra->rach_ConfigDedicated)
|
||||
asn1cFreeStruc(asn_DEF_NR_RACH_ConfigDedicated, ra->rach_ConfigDedicated);
|
||||
|
||||
ra->RA_active = false;
|
||||
mac->msg3_C_RNTI = false;
|
||||
ra->ra_state = nrRA_SUCCEEDED;
|
||||
|
||||
Reference in New Issue
Block a user