From bff9c169c6180466b1dd906ae0f1dde08c7c16ca Mon Sep 17 00:00:00 2001 From: Sakthivel Velumani Date: Sun, 20 Apr 2025 10:18:36 -0400 Subject: [PATCH 1/5] Update MTU for Foxconn to 9600 After capturing the FH packets, we observed that the RU supports the MTU value for jumbo frames. Therefore, no fragmentation needed on DL. Co-authored-by: Teodora Vladic --- doc/ORAN_FHI7.2_Tutorial.md | 2 +- .../CONF/gnb.sa.band78.273prb.fhi72.4x4-foxconn.conf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/ORAN_FHI7.2_Tutorial.md b/doc/ORAN_FHI7.2_Tutorial.md index df72be82c6..da4a06bbcc 100644 --- a/doc/ORAN_FHI7.2_Tutorial.md +++ b/doc/ORAN_FHI7.2_Tutorial.md @@ -709,7 +709,7 @@ At this stage, RU must be rebooted so the changes apply. The OAI configuration file [`gnb.sa.band78.273prb.fhi72.4X4-foxconn.conf`](../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.273prb.fhi72.4X4-foxconn.conf) corresponds to: - TDD pattern `DDDSU`, 2.5ms - Bandwidth 100MHz -- MTU 8000 +- MTU 9600 #### RU configuration diff --git a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.273prb.fhi72.4x4-foxconn.conf b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.273prb.fhi72.4x4-foxconn.conf index 97fd75bda8..bd4cd59f06 100644 --- a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.273prb.fhi72.4x4-foxconn.conf +++ b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.273prb.fhi72.4x4-foxconn.conf @@ -257,7 +257,7 @@ fhi_72 = { io_core = 1; worker_cores = (2); ru_addr = ("6c:ad:ad:00:04:dc", "6c:ad:ad:00:04:dc"); - mtu = 8000; + mtu = 9600; fh_config = ({ T1a_cp_dl = (285, 470); T1a_cp_ul = (285, 429); From 83afb8b852227ff0c9133be1ab69320af32a989b Mon Sep 17 00:00:00 2001 From: Teodora Date: Mon, 5 May 2025 11:34:36 +0200 Subject: [PATCH 2/5] Set common E&F releases for CUS and CUSM --- radio/fhi_72/CMakeLists.txt | 9 ++++++--- radio/fhi_72/mplane/CMakeLists.txt | 4 ++-- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/radio/fhi_72/CMakeLists.txt b/radio/fhi_72/CMakeLists.txt index 0b78bf055b..c9addac423 100644 --- a/radio/fhi_72/CMakeLists.txt +++ b/radio/fhi_72/CMakeLists.txt @@ -16,13 +16,16 @@ add_library(oran_fhlib_5g MODULE oran-init.c ) +set(E_VERSION 5.1.5) +set(F_VERSION 6.1.2) + find_package(xran REQUIRED) -if(xran_VERSION VERSION_EQUAL 5.1.5) +if(xran_VERSION VERSION_EQUAL E_VERSION) target_compile_definitions(oran_fhlib_5g PRIVATE E_RELEASE) -elseif(xran_VERSION VERSION_EQUAL 6.1.2) +elseif(xran_VERSION VERSION_EQUAL F_VERSION) target_compile_definitions(oran_fhlib_5g PRIVATE F_RELEASE) else() - message(FATAL_ERROR "Found xran version ${xran_VERSION} but needed 5.1.5 (E release) or 6.1.2 (F release)") + message(FATAL_ERROR "Found xran version ${xran_VERSION} but needed ${E_VERSION} (E release) or ${F_VERSION} (F release)") endif() # Ignore xran-specific warning: we don't care/can't change the following warning, so suppress diff --git a/radio/fhi_72/mplane/CMakeLists.txt b/radio/fhi_72/mplane/CMakeLists.txt index a6bd7e62d7..65faa6dfbd 100644 --- a/radio/fhi_72/mplane/CMakeLists.txt +++ b/radio/fhi_72/mplane/CMakeLists.txt @@ -6,9 +6,9 @@ add_library(oran_fhlib_5g_mplane MODULE ) add_dependencies(oran_fhlib_5g_mplane oran_fhlib_5g) -if(xran_VERSION VERSION_EQUAL 5.1.4) +if(xran_VERSION VERSION_EQUAL E_VERSION) target_compile_definitions(oran_fhlib_5g_mplane PRIVATE E_RELEASE) -elseif(xran_VERSION VERSION_EQUAL 6.1.1) +elseif(xran_VERSION VERSION_EQUAL F_VERSION) target_compile_definitions(oran_fhlib_5g_mplane PRIVATE F_RELEASE) endif() From 3a1fc2ef65888b050319aa654750ec0242beeb3c Mon Sep 17 00:00:00 2001 From: Teodora Date: Tue, 29 Apr 2025 11:00:42 +0200 Subject: [PATCH 3/5] Fix Liteon for xran F release and improve docs 1. Closes #884 - increase the XRAN_MAX_FRAGMENT from 4 to 6 (sufficient for MTU 1500 with compression 8b) 2. Add new firmware version that supports jumbo frames 3. Update the config file to align with the new Liteon unit in our lab - center frequency, jumbo frames, compression and RU MAC address, as well as the max DL MIMO layers. --- .../F/oaioran_F.patch | 15 ++++++-- doc/ORAN_FHI7.2_Tutorial.md | 36 +++++++++---------- radio/fhi_72/CMakeLists.txt | 2 +- ...gnb.sa.band78.273prb.fhi72.4x4-liteon.conf | 19 +++++----- 4 files changed, 40 insertions(+), 32 deletions(-) diff --git a/cmake_targets/tools/oran_fhi_integration_patches/F/oaioran_F.patch b/cmake_targets/tools/oran_fhi_integration_patches/F/oaioran_F.patch index 5f55996d76..b8d09cf862 100644 --- a/cmake_targets/tools/oran_fhi_integration_patches/F/oaioran_F.patch +++ b/cmake_targets/tools/oran_fhi_integration_patches/F/oaioran_F.patch @@ -1,5 +1,5 @@ diff --git a/fhi_lib/app/src/common.h b/fhi_lib/app/src/common.h -index ac5f471..bbd39fe 100644 +index ac5f471..9ebbcab 100644 --- a/fhi_lib/app/src/common.h +++ b/fhi_lib/app/src/common.h @@ -28,7 +28,7 @@ @@ -7,7 +7,7 @@ index ac5f471..bbd39fe 100644 #include -#define VERSIONX "oran_f_release_v1.0" -+#define VERSIONX "oran_f_release_v1.2" ++#define VERSIONX "oran_f_release_v1.3" #define APP_O_DU 0 #define APP_O_RU 1 @@ -164,9 +164,18 @@ index eccc4ae..b1b8f4b 100644 CPP_FLAGS_FULL := $(CPP_FLAGS) $(CPP_COMP) $(INC) $(DEF) CPP_FLAGS_FULL_SNC := $(CPP_FLAGS) $(CPP_COMP_SNC) $(INC) $(DEF) diff --git a/fhi_lib/lib/api/xran_fh_o_du.h b/fhi_lib/lib/api/xran_fh_o_du.h -index bacf597..90a42a2 100644 +index bacf597..8bd7c66 100644 --- a/fhi_lib/lib/api/xran_fh_o_du.h +++ b/fhi_lib/lib/api/xran_fh_o_du.h +@@ -141,7 +141,7 @@ extern "C" { + #define XRAN_MAX_SECTIONS_PER_SYM (XRAN_MAX_SECTIONS_PER_SLOT) /**< Max number of different sections in single slot (section may be equal to RB allocation for UE) */ + #define XRAN_MIN_SECTIONS_PER_SYM (XRAN_MIN_SECTIONS_PER_SLOT) /**< Min number of different sections in single slot (section may be equal to RB allocation for UE) */ + +-#define XRAN_MAX_FRAGMENT (4) /**< Max number of fragmentations in single symbol */ ++#define XRAN_MAX_FRAGMENT (6) /**< Max number of fragmentations in single symbol */ + #define XRAN_MAX_SET_BFWS (64) /**< Assumed 64Ant, BFP 9bit with 9K jumbo frame */ + + #define XRAN_MAX_PKT_BURST (448+4) /**< 4x14x8 symbols per ms */ @@ -1193,6 +1193,31 @@ int32_t xran_reg_physide_cb_by_dev_id(void *pHandle, xran_fh_tti_callback_fn Cb, */ int32_t xran_get_slot_idx (uint32_t PortId, uint32_t *nFrameIdx, uint32_t *nSubframeIdx, uint32_t *nSlotIdx, uint64_t *nSecond); diff --git a/doc/ORAN_FHI7.2_Tutorial.md b/doc/ORAN_FHI7.2_Tutorial.md index da4a06bbcc..7744d79ae4 100644 --- a/doc/ORAN_FHI7.2_Tutorial.md +++ b/doc/ORAN_FHI7.2_Tutorial.md @@ -68,13 +68,13 @@ We have only verified LLS-C3 configuration in our lab, i.e. using an external grandmaster, a switch as a boundary clock, and the gNB/DU and RU. We haven't tested any RU without S-plane. Radio units we are testing/integrating: -|Vendor |Software Version | -|-----------------|----------------------| -|VVDN LPRU |03-v3.0.5 | -|LiteON RU |01.00.08/02.00.03 | -|Benetel 650 |RAN650-1v1.0.4-dda1bf5| -|Benetel 550 CAT-A|RAN550-1v1.0.4-605a25a| -|Foxconn RPQN |v3.1.15q.551_rc10 | +|Vendor |Software Version | +|-----------------|---------------------------------------------| +|VVDN LPRU |03-v3.0.5 | +|LiteON RU |01.00.08/02.00.03/02.00.10 | +|Benetel 650 |RAN650-1v1.0.4-dda1bf5 | +|Benetel 550 CAT-A|RAN550-1v1.0.4-605a25a | +|Foxconn RPQN |v3.1.15q.551_rc10 | Tested libxran releases: @@ -590,11 +590,11 @@ dl_tuning_special_slot=0x13b6 ### LITEON -**Verson 01.00.08** The OAI configuration file [`gnb.sa.band78.273prb.fhi72.4x4-liteon.conf`](../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.273prb.fhi72.4x4-liteon.conf) corresponds to: - TDD pattern `DDDSU`, 2.5ms - Bandwidth 100MHz -- MTU 1500 (the above mentioned LITEON version doesn't support jumbo frames) +- MTU 1500 +- MTU 9600: v02.00.10 #### RU configuration @@ -614,18 +614,16 @@ Once the RU is PTP synced, and RF state and DPD are `Ready`, write `configure te - Bandwidth - Compression Bitwidth - TX/RX attenuation +- PRACH eAxC IDs +- DU MAC address +... -After each reboot, the PRACH has to be manually configured. -To do so, please login to RU as user `root` and run below commands: +The configuration mode example: ```bash -devmem 0x80001014 32 0x00050004 -devmem 0x80001018 32 0x00070006 -devmem 0x8000201C 32 0x00000001 -``` - -If you have RU version that supports jumbo frames, please enable it as: -```bash -devmem 0x8000200C 32 0x00000001 +compression-bit 9 # set IQ bitwidth for PxSCH/PRACH +eAXC_id 4 5 6 7 # set PRACH eAxC IDs +jumboframe 1 # enable jumbo frame +... ``` ### VVDN LPRU diff --git a/radio/fhi_72/CMakeLists.txt b/radio/fhi_72/CMakeLists.txt index c9addac423..a874d4cc01 100644 --- a/radio/fhi_72/CMakeLists.txt +++ b/radio/fhi_72/CMakeLists.txt @@ -17,7 +17,7 @@ add_library(oran_fhlib_5g MODULE ) set(E_VERSION 5.1.5) -set(F_VERSION 6.1.2) +set(F_VERSION 6.1.3) find_package(xran REQUIRED) if(xran_VERSION VERSION_EQUAL E_VERSION) diff --git a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.273prb.fhi72.4x4-liteon.conf b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.273prb.fhi72.4x4-liteon.conf index 465bb6d71e..43f6f9cef8 100644 --- a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.273prb.fhi72.4x4-liteon.conf +++ b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.273prb.fhi72.4x4-liteon.conf @@ -19,7 +19,7 @@ gNBs = pdsch_AntennaPorts_XP = 2; pdsch_AntennaPorts_N1 = 2; - maxMIMO_layers = 2; + maxMIMO_layers = 4; pusch_AntennaPorts = 4; do_CSIRS = 1; do_SRS = 0; @@ -33,12 +33,12 @@ gNBs = # n_TimingAdvanceOffset = 0; # downlinkConfigCommon #frequencyInfoDL - # center frequency = 3450.72 MHz - # selected SSB frequency = 3450.72 MHz - absoluteFrequencySSB = 630048; + # center frequency = 3350.01 MHz + # selected SSB frequency = 3349.92 MHz + absoluteFrequencySSB = 623328; dl_frequencyBand = 78; - # frequency point A = 3401.58 MHz - dl_absoluteFrequencyPointA = 626772; + # frequency point A = 3300.87 MHz + dl_absoluteFrequencyPointA = 620058; #scs-SpecificCarrierList dl_offstToCarrier = 0; # subcarrierSpacing @@ -257,15 +257,16 @@ fhi_72 = { system_core = 0; io_core = 1; worker_cores = (2); - ru_addr = ("e8:c7:4f:1e:c7:11", "e8:c7:4f:1e:c7:11"); + ru_addr = ("e8:c7:4f:25:81:b3", "e8:c7:4f:25:81:b3"); + mtu = 9600; # note: 1500 works as well, with both E and F releases fh_config = ({ T1a_cp_dl = (285, 429); T1a_cp_ul = (285, 429); T1a_up = (96, 196); Ta4 = (110, 180); ru_config = { - iq_width = 8; - iq_width_prach = 8; + iq_width = 9; + iq_width_prach = 9; }; prach_config = { kbar = 0; From 29acc08f9e2b2b53f3194f180dd9ee54a0ecb7dc Mon Sep 17 00:00:00 2001 From: Teodora Date: Tue, 29 Apr 2025 11:17:49 +0200 Subject: [PATCH 4/5] Add new Benetel supported versions --- doc/ORAN_FHI7.2_Tutorial.md | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/doc/ORAN_FHI7.2_Tutorial.md b/doc/ORAN_FHI7.2_Tutorial.md index 7744d79ae4..b486bdb6bf 100644 --- a/doc/ORAN_FHI7.2_Tutorial.md +++ b/doc/ORAN_FHI7.2_Tutorial.md @@ -66,14 +66,15 @@ PTP enabled switches and grandmaster clock we have in are lab: We have only verified LLS-C3 configuration in our lab, i.e. using an external grandmaster, a switch as a boundary clock, and the gNB/DU and RU. We haven't -tested any RU without S-plane. Radio units we are testing/integrating: +tested any RU without S-plane. +We tested the category A radio units listed below. |Vendor |Software Version | |-----------------|---------------------------------------------| |VVDN LPRU |03-v3.0.5 | |LiteON RU |01.00.08/02.00.03/02.00.10 | -|Benetel 650 |RAN650-1v1.0.4-dda1bf5 | -|Benetel 550 CAT-A|RAN550-1v1.0.4-605a25a | +|Benetel 650 |RAN650-1v1.0.4-dda1bf5|RAN650-1v1.2.2-2fa04bc| +|Benetel 550 |RAN550-1v1.0.4-605a25a|RAN550-1v1.2.2-2fa04bc| |Foxconn RPQN |v3.1.15q.551_rc10 | Tested libxran releases: @@ -534,8 +535,6 @@ Contact the RU vendor and get the configuration manual to understand the below c ### Benetel 650 -**Valid only for version RAN650-1v1.0.4-dda1bf5** - The OAI configuration file [`gnb-du.sa.band77.273prb.fhi72.4x4-benetel650.conf`](../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb-du.sa.band77.273prb.fhi72.4x4-benetel650.conf) corresponds to: - TDD pattern `DDDSU`, 2.5ms - Bandwidth 100MHz @@ -562,8 +561,6 @@ dl_ul_tuning_special_slot=0xfd00000 ### Benetel 550 -**Valid only for version RAN550-1v1.0.4-605a25a** - The OAI configuration file [`gnb.sa.band78.273prb.fhi72.4x4-benetel550.conf`](../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.273prb.fhi72.4x4-benetel550.conf) corresponds to: - TDD pattern `DDDDDDDSUU`, 5ms - Bandwidth 100MHz From e6e9aaed7fb908276c814dd4eccaebda7915628b Mon Sep 17 00:00:00 2001 From: Teodora Date: Tue, 29 Apr 2025 11:53:55 +0200 Subject: [PATCH 5/5] Clarification on the packet length needed to configure VFs As per CUS spec, the MTU can be 1500 or 9000 B, where MTU = IQ data format. Packet length = ethernet header + RTE_PKTMBUF_HEADROOM + MTU However, xran assumes different definitions of the MTU: (1) in xran_init_mbuf_pool(): MTU = ethernet header + IQ data format; (2) in xran_get_num_prb_elm(), xran_init_PrbMap_from_cfg(), xran_init_PrbMap_from_cfg_for_rx(), xran_init_PrbMap_by_symbol_from_cfg(): MTU = complitely wrong (as the IQ data format is not well included). Additionally, xran assumes that the max MTU 9600 B, instead of 9000 B as per spec. Nevertheless, I left 9600 B in all config files and docs due to wrong calculation of (2) for the total number of PRBs per fragment. --- doc/ORAN_FHI7.2_Tutorial.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/ORAN_FHI7.2_Tutorial.md b/doc/ORAN_FHI7.2_Tutorial.md index b486bdb6bf..7aff02f9df 100644 --- a/doc/ORAN_FHI7.2_Tutorial.md +++ b/doc/ORAN_FHI7.2_Tutorial.md @@ -745,7 +745,7 @@ In the following, we will use these short hands: - `IF_NAME`: Physical network interface through which you can access the RU - `VLAN`: the VLAN tag as recommended by the RU vendor -- `MTU`: the MTU as specified by the RU vendor, and supported by the NIC +- `MTU`: this MTU must be higher than supported by the RU vendor due to additional ethernet header of 14 B and DPDK packet header `RTE_PKTMBUF_HEADROOM` of 128 B - `DU_U_PLANE_MAC_ADD`: DU U plane MAC address - `U_PLANE_PCI_BUS_ADD`: PCI bus address of the VF for U plane - `DU_C_PLANE_MAC_ADD`: DU C plane MAC address