diff --git a/s/MemInfo b/s/MemInfo
index 176c2012e1c30023918474ae2e30e6326f432112..373fb5a9bc20db97e86d5e93315d782908b0b34d 100644
--- a/s/MemInfo
+++ b/s/MemInfo
@@ -546,9 +546,9 @@ meminfo_returncs
 ;       In:     r8,r9 = physical address
 ;               r7 = MaxCamEntry
 ;
-;       Out:    r5,r10-r11 corrupted
-;               CC => r3 = page number
-;               CS => invalid physical address, r3 corrupted
+;       Out:    r5,r10 corrupted
+;               CC => r3 = page number, low 12 bits of r11 = PhysRamTable flags
+;               CS => invalid physical address, r3+r11 corrupted
 ;
 ;       Convert physical address to physical page number.
 ;
@@ -1911,9 +1911,9 @@ DMAPrep_Translate
       ]
         MOV     r4, r5
         BL      logical_to_physical     ; r4 -> r8, r9
-        BLCC    physical_to_ppn         ; r7, r8, r9 -> r3
+        BLCC    physical_to_ppn         ; r7, r8, r9 -> r3, r11
         BCS     %BT95
-        ; r5,r10-r11 corrupt
+        ; r5,r10 corrupt
         ; Grab page flags
         ADD     lr, r6, r3, LSL #CAM_EntrySizeLog2
         LDR     lr, [lr, #CAM_PageFlags]
@@ -1926,9 +1926,9 @@ DMAPrep_Translate
       |
         UBFX    r9, r9, #20, #8
       ]
-        BL      physical_to_ppn         ; r7, r8, r9 -> r3
+        BL      physical_to_ppn         ; r7, r8, r9 -> r3, r11
         BCS     %BT95
-        ; r5, r10-r11 corrupt
+        ; r5, r10 corrupt
         ; Manual ppn -> logical so we can get the page flags at the same time
         ; TODO this won't deal with mapped out pages in a sensible manner (will output them all individually)
       [ AMB_LazyMapIn
@@ -1951,7 +1951,7 @@ DMAPrep_Translate
         MOV     r4, r3
       ]
 30
-        ; We now have r4 = log addr, r8,r9 = phys addr, lr = page flags
+        ; We now have r4 = log addr, r8,r9 = phys addr, lr = page flags, r11 = PhysRamTable flags
         LDR     r3, [sp, #DMAPrepW_InChunk+4]
         ; Combine the cacheability + phys offset into r6
         SUBS    r6, r8, r4              ; r6 = phys-log
@@ -1973,6 +1973,9 @@ DMAPrep_Translate
         LDRNE   lr, [sp, #DMAPrepW_Flags]
         EORNE   lr, lr, #DMAPrep_Phys64
         TSTNE   lr, #DMAPrep_Phys64
+        ; We also want to force bounce buffer usage for RAM chunks which have
+        ; been flagged by the HAL as not supporting DMA
+        TSTEQ   r11, #OSAddRAM_NoDMA
         ORRNE   r6, r6, #DMAPrep_UseBounceBuffer:SHL:DMAPrep_FlagOffset
         ; Work out how much of r12 fits into this page
         ; This is done by comparing against the length of the input region,