diff --git a/embassy-rp/src/uart/mod.rs b/embassy-rp/src/uart/mod.rs
index 9f5ba4e8a..f372cb640 100644
--- a/embassy-rp/src/uart/mod.rs
+++ b/embassy-rp/src/uart/mod.rs
@@ -604,8 +604,8 @@ impl<'d, T: Instance> UartRx<'d, T, Async> {
             return match (all_full, last_was_break) {
                 (true, true) | (false, _) => {
                     // We got less than the full amount + a break, or the full amount
-                    // and the last byte was a break. Subtract the break off.
-                    Ok((next_addr - 1) - sval)
+                    // and the last byte was a break. Subtract the break off by adding one to sval.
+                    Ok(next_addr.saturating_sub(1 + sval))
                 }
                 (true, false) => {
                     // We finished the whole DMA, and the last DMA'd byte was NOT a break