SDK doesn't seem very helpful.
Address:0x4000a018 "Time-out value for triggering RTO interrupt (unit: bit time)"
So configure the device to generate a receive timeout after N bit times (probably a couple of character transmission lengths, remembering to include start and stop bits) time.
https://bouffalolab.github.io/bl_iot_sdk/Examples/peripheral/demo_uart/uart_dma.html doesn't look very good. You probably want to use the register to cause an RX timeout that, after you hosal_uart_callback_set a callback for the rx line idling and then _then triggers a callback to let you cancel the DMA and transact the pending I/O.
That driver interface just looks weird. This is so common that making the caller manage timers and multiple callbacks is strange. Time to dig into the per-chip code that implements it and look for that. If urx_rto_timer is missing, manage timer interrupts per rx device and handle them yourself, but that's very messy to manage calling context and such.