Merge remote-tracking branch 'origin/revert_fapi_trp_scheme_byte' into integration_2025_w37 (!3631)

Revert "Removed TRP-scheme byte from UL BF PDU to Interop with Aerial 25-1 (FAPI 10.02)"

This commit broke compatibility with Aerial when compiled with
-DSCF_FAPI_10_04_SRS=ON. It was decided that this should become the
default.

Modify documentation, and use a dedicated image name to make it clear in
the CI that it has SRS.
This commit is contained in:
Robert Schmidt
2025-09-11 10:51:01 +02:00
7 changed files with 11 additions and 9 deletions
@@ -23,7 +23,7 @@ services:
- ../../../cmake_targets/share:/opt/cuBB/share
userns_mode: host
ipc: "shareable"
image: cubb-build:25-2
image: cubb-build:25-2-srs
environment:
- cuBB_SDK=/opt/nvidia/cuBB
command: bash -c "sudo rm -rf /tmp/phy.log && sudo chmod +x /opt/nvidia/cuBB/aerial_l1_entrypoint.sh && /opt/nvidia/cuBB/aerial_l1_entrypoint.sh"
+2
View File
@@ -66,6 +66,8 @@ The UEs that have been tested and confirmed working with Aerial are the followin
To set up the L1 and install the components manually refer to this [instructions page](https://docs.nvidia.com/aerial/cuda-accelerated-ran/index.html).
**Note**:
- As of wk36, the L1 must be compiled with the following CMake flag: `-DSCF_FAPI_10_04_SRS=ON` , this is due to the usage
of the FAPI 10.04 version of the SRS PDU, and RX_Beamforming PDU.
- To configure the Gigabyte server please refer to these [instructions](https://gitlab.eurecom.fr/oai/openairinterface5g/-/blob/2025.w13/doc/Aerial_FAPI_Split_Tutorial.md)
- The last release to support the Gigabyte server is **Aerial CUDA-Accelerated RAN 24-1**.
+2 -2
View File
@@ -708,7 +708,7 @@ static uint8_t pack_nr_rx_beamforming_pdu(const nfapi_nr_ul_beamforming_t *beamf
uint8_t **ppWritePackedMsg,
uint8_t *end)
{ // Pack RX Beamforming PDU
if (!(push16(beamforming_pdu->num_prgs, ppWritePackedMsg, end)
if (!(push8(beamforming_pdu->trp_scheme, ppWritePackedMsg, end) && push16(beamforming_pdu->num_prgs, ppWritePackedMsg, end)
&& push16(beamforming_pdu->prg_size, ppWritePackedMsg, end)
&& push8(beamforming_pdu->dig_bf_interface, ppWritePackedMsg, end))) {
return 0;
@@ -1033,7 +1033,7 @@ uint8_t pack_ul_tti_request(void *msg, uint8_t **ppWritePackedMsg, uint8_t *end,
static uint8_t unpack_nr_rx_beamforming_pdu(nfapi_nr_ul_beamforming_t *beamforming_pdu, uint8_t **ppReadPackedMsg, uint8_t *end)
{ // Unpack RX Beamforming PDU
if (!(pull16(ppReadPackedMsg, &beamforming_pdu->num_prgs, end)
if (!(pull8(ppReadPackedMsg, &beamforming_pdu->trp_scheme, end) && pull16(ppReadPackedMsg, &beamforming_pdu->num_prgs, end)
&& pull16(ppReadPackedMsg, &beamforming_pdu->prg_size, end)
&& pull8(ppReadPackedMsg, &beamforming_pdu->dig_bf_interface, end))) {
return 0;
+3 -3
View File
@@ -214,7 +214,7 @@ bool eq_dl_tti_request(const nfapi_nr_dl_tti_request_t *a, const nfapi_nr_dl_tti
static bool eq_ul_tti_beamforming(const nfapi_nr_ul_beamforming_t *a, const nfapi_nr_ul_beamforming_t *b)
{
// EQ(a->trp_scheme, b->trp_scheme);
EQ(a->trp_scheme, b->trp_scheme);
EQ(a->num_prgs, b->num_prgs);
EQ(a->prg_size, b->prg_size);
EQ(a->dig_bf_interface, b->dig_bf_interface);
@@ -1174,7 +1174,7 @@ void copy_dl_tti_request(const nfapi_nr_dl_tti_request_t *src, nfapi_nr_dl_tti_r
static void copy_ul_tti_beamforming(const nfapi_nr_ul_beamforming_t *src, nfapi_nr_ul_beamforming_t *dst)
{
// dst->trp_scheme = src->trp_scheme;
dst->trp_scheme = src->trp_scheme;
dst->num_prgs = src->num_prgs;
dst->prg_size = src->prg_size;
dst->dig_bf_interface = src->dig_bf_interface;
@@ -2201,7 +2201,7 @@ void dump_dl_tti_request(const nfapi_nr_dl_tti_request_t *msg)
static void dump_ul_tti_beamforming(const nfapi_nr_ul_beamforming_t *pdu, int depth)
{
// INDENTED_PRINTF("TRP Scheme = %d\n", pdu->trp_scheme);
INDENTED_PRINTF("TRP Scheme = %d\n", pdu->trp_scheme);
INDENTED_PRINTF("numPRGs = %d\n", pdu->num_prgs);
INDENTED_PRINTF("prgSize = %d\n", pdu->prg_size);
INDENTED_PRINTF("digBFInterface = %d\n", pdu->dig_bf_interface);
@@ -1219,7 +1219,7 @@ typedef struct
typedef struct
{
// uint8_t trp_scheme; // This field shall be set to 0, to identify that this table is used. Not part of FAPI 10.02, thus removed
uint8_t trp_scheme; // This field shall be set to 0, to identify that this table is used.
uint16_t num_prgs; // Number of PRGs spanning this allocation. Value : 1->275
uint16_t prg_size; // Size in RBs of a precoding resource block group (PRG) – to which the same digital beamforming gets applied. Value: 1->275
uint8_t dig_bf_interface; // Number of logical antenna ports (parallel streams) resulting from the Rx combining. Value: 0->255
+1 -1
View File
@@ -24,7 +24,7 @@
static void fill_ul_tti_request_beamforming(nfapi_nr_ul_beamforming_t *beamforming_pdu)
{
// beamforming_pdu->trp_scheme = rand8(); // not part of 10.02
beamforming_pdu->trp_scheme = rand8();
beamforming_pdu->num_prgs = rand16_range(1, NFAPI_MAX_NUM_PRGS);
beamforming_pdu->prg_size = rand16_range(1, 275);
beamforming_pdu->dig_bf_interface = rand8_range(1,NFAPI_MAX_NUM_BG_IF);
@@ -463,7 +463,7 @@ static void nr_configure_srs(gNB_MAC_INST *nrmac,
srs_pdu->srs_parameters_v4.prg_size = 1;
srs_pdu->srs_parameters_v4.num_total_ue_antennas = 1 << srs_pdu->num_ant_ports;
if (srs_resource_set->usage == NR_SRS_ResourceSet__usage_beamManagement) {
// srs_pdu->beamforming.trp_scheme = 0;
srs_pdu->beamforming.trp_scheme = 0;
srs_pdu->beamforming.num_prgs = m_SRS[srs_pdu->config_index];
srs_pdu->beamforming.prg_size = srs_pdu->srs_parameters_v4.srs_bandwidth_size;
}