Uplink CS/MCS control is broken osmo-pcu is used with osmo-bts-trx/osmo-trx
Not sure which project to assign this to.
GprsMs::update_cs_ul() function (osmo-pcu/src/gprs_ms.cpp) is used to control the UL CS/MCS mode and in its current implementation is relies on the Quality "Q" value reported by L1. Osmo-trx does not really calculate the SNR of the link and thus osmo-bts-trx always report Q as 0. This misleads the current algorithm which always drops the CS/MCS to the lowest possible mode (CS-1/MCS-1).
Possible solutions I see:
1) Use another metric, like BER which are reported by osmo-bts-trx. A similar method is already used by the DL CS/MCS control.
2) Implement SNR calculation in osmo-trx. A better way, but much more involved.