trxcon: get rid of the timer driven clock module
commit45c821aee08e5f91273b0e203a1a04cff60114c8
authorVadim Yanitskiy <vyanitskiy@sysmocom.de>
Sat, 26 Nov 2022 01:07:25 +0000 (26 08:07 +0700)
committerlaforge <laforge@osmocom.org>
Sun, 11 Jun 2023 19:25:31 +0000 (11 19:25 +0000)
tree979ff053e8ba8a6671388a5bde7732e730b44ef3
parentf5959f78cd19d20c2fd13607a19b1b1d6b085835
trxcon: get rid of the timer driven clock module

trxcon was heavily inspired by osmo-bts-trx, and among with many other
scheduling related parts also inherited the timer driven clock module.

This clock module is driving the Uplink burst scheduling, just like it
does drive the Downlink burst scheduling in osmo-bts-trx.  Just like
in osmo-bts-trx, the clock module relies on periodic CLCK indications
from the PHY, which are needed to compensate for the clock drifting.

The key difference is that trxcon is using Downlink bursts as the CLCK
indications, see 'bi.fn % 51' in trx_data_rx_cb().  This is possible
because the MS is a clock slave of the BTS: the MS PHY needs to sync
its freq. and clock first, and only after that it can Rx and Tx.

So far we've had no problems with the clock module in trxcon until we
started adding GPRS support and integrated the l1gprs.  While the CS
domain is quite flexible in terms of timings and delays, the PS domain
is a lot more sensetive to the timing issues.

Sometimes it happens that the trxcon's clock module is ticking quicker
than it should, resulting in Uplink PDCH blocks being scheduled earlier
than the respective Downlink PDCH blocks are received:

20230502021957724 l1sched_pull_burst(): PDTCH/U Tx time (fn=56103)
20230502021957744 (PDCH-7) Rx DL BLOCK.ind (fn=56103, len=23): ...
20230502021957747 l1sched_pull_burst(): PDTCH/U Tx time (fn=56108)
20230502021957765 l1sched_pull_burst(): PDTCH/U Tx time (fn=56112)
20230502021957767 (PDCH-7) Rx DL BLOCK.ind (fn=56108, len=23): ...
20230502021957768 (PDCH-7) Rx UL BLOCK.req (fn=56112, len=54): ...
20230502021957784 l1sched_pull_burst(): PDTCH/U Tx time (fn=56116)
20230502021957784 TS7-PDTCH dropping Tx primitive (current Fn=56116, prim Fn=56112)

This is impossible in reality, because Uplink is intentionally lagging
behind Downlink by 3 TDMA timeslot periods.  In a virtual setup this
causes sporadic dropping of Uplink PDCH blocks, as can be seen from
the logging snippet above, and significantly degrades the RLC/MAC
performance for GPRS.

Let's remove the internal clock module and trigger the Uplink burst
transmission each time we receive a Downlink burst.  This helps to
overcome the GPRS scheduling issues and replicates the approach of
osmo-trx-ms more closely.

Change-Id: Ic8a5b6277c6b16392026e0557376257d71c9d230
Related: OS#5500
src/host/trxcon/include/osmocom/bb/l1sched/l1sched.h
src/host/trxcon/include/osmocom/bb/trxcon/phyif.h
src/host/trxcon/include/osmocom/bb/trxcon/trx_if.h
src/host/trxcon/include/osmocom/bb/trxcon/trxcon.h
src/host/trxcon/src/Makefile.am
src/host/trxcon/src/sched_clck.c [deleted file]
src/host/trxcon/src/sched_trx.c
src/host/trxcon/src/trx_if.c
src/host/trxcon/src/trxcon_inst.c
src/host/trxcon/src/trxcon_main.c
src/host/trxcon/src/trxcon_shim.c