diff --git a/executables/nr-uesoftmodem.c b/executables/nr-uesoftmodem.c index 3e5df6f9ca..b40901e435 100644 --- a/executables/nr-uesoftmodem.c +++ b/executables/nr-uesoftmodem.c @@ -338,6 +338,7 @@ int main(int argc, char **argv) uint16_t nr_band = get_softmodem_params()->band; mac->nr_band = nr_band; mac->ssb_start_subcarrier = UE_CC->frame_parms.ssb_start_subcarrier; + mac->dl_frequency = downlink_frequency[CC_id][0]; nr_init_frame_parms_ue_sa(&UE_CC->frame_parms, downlink_frequency[CC_id][0], uplink_frequency_offset[CC_id][0], diff --git a/openair2/LAYER2/NR_MAC_UE/config_ue.c b/openair2/LAYER2/NR_MAC_UE/config_ue.c index aada96566a..b3195894a4 100644 --- a/openair2/LAYER2/NR_MAC_UE/config_ue.c +++ b/openair2/LAYER2/NR_MAC_UE/config_ue.c @@ -150,7 +150,7 @@ static void config_common_ue_sa(NR_UE_MAC_INST_t *mac, NR_ServingCellConfigCommo // 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); + cfg->carrier_config.dl_frequency = mac->dl_frequency / 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, @@ -180,19 +180,28 @@ static void config_common_ue_sa(NR_UE_MAC_INST_t *mac, NR_ServingCellConfigCommo cfg->carrier_config.uplink_bandwidth = get_supported_bw_mhz(mac->frequency_range, bw_index); /** 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. */ + * 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) + // Initial cell selection: derive from DL frequency or frequencyInfoUL->absoluteFrequencyPointA + 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); + LOG_I(NR_MAC, + "Initial cell selection: uplink_frequency=%u kHz (from dl_frequency=%u kHz)\n", + cfg->carrier_config.uplink_frequency, + cfg->carrier_config.dl_frequency); + } else { + cfg->carrier_config.uplink_frequency = from_nrarfcn(*frequencyInfoUL->frequencyBandList->list.array[0]->freqBandIndicatorNR, + frequencyInfoUL->scs_SpecificCarrierList.list.array[0]->subcarrierSpacing, + *frequencyInfoUL->absoluteFrequencyPointA) + / 1000; // freq in kHz + LOG_I(NR_MAC, + "Initial cell selection: uplink_frequency=%u kHz (from absoluteFrequencyPointA=%ld, band=%ld, scs=%ld)\n", + cfg->carrier_config.uplink_frequency, + *frequencyInfoUL->absoluteFrequencyPointA, + *frequencyInfoUL->frequencyBandList->list.array[0]->freqBandIndicatorNR, + frequencyInfoUL->scs_SpecificCarrierList.list.array[0]->subcarrierSpacing); + } } for (int i = 0; i < 5; i++) { diff --git a/openair2/LAYER2/NR_MAC_UE/mac_defs.h b/openair2/LAYER2/NR_MAC_UE/mac_defs.h index 0f0532dd4c..11996d8394 100644 --- a/openair2/LAYER2/NR_MAC_UE/mac_defs.h +++ b/openair2/LAYER2/NR_MAC_UE/mac_defs.h @@ -615,6 +615,7 @@ typedef struct NR_UE_MAC_INST_s { uint16_t nr_band; uint8_t ssb_subcarrier_offset; int ssb_start_subcarrier; + uint64_t dl_frequency; int numerology; NR_SSB_meas_t ssb_measurements[MAX_NB_SSB];