[Redmi Note 8 Questions & Answers] lueromat:
I think you guys may be on to something. I was also thinking that I somehow have to get out of EDL mode, either through waiting, or forcing. Opening the device is a PITA and I'd rather wait until the battery dies (which I guess may take weeks with the screen and all off - good I ordered the poco m3 as replacement :D).

So I tried the xml command via fh_loader, but it didn't quite work - see log below. either the xml syntax is wrong, or my phone is still in "sahara-mode" - whatever that is. I tried to play around with QFIL before, maybe it's because of that.

16:34:07: INFO: FH_LOADER WAS CALLED EXACTLY LIKE THIS
************************************************
fh_loader.exe --port=\\.\COM40 --sendxml=reboot.xml --showpercentagecomplete --zlpawarehost=1 --memoryname=emmc
************************************************

16:34:07: DEBUG: Binary build date: Jun 25 2019 @ 03:16:10

16:34:07: DEBUG: Build Version: 19.06.25.03.16.10

16:34:07: INFO: Current working dir (cwd): C:\Program Files (x86)\Qualcomm\QPST\bin\
16:34:07: INFO: Showing network mappings to allow debugging
16:34:07: DEBUG: New connections will be remembered.

16:34:07: DEBUG:

16:34:07: DEBUG: There are no entries in the list.

16:34:07: DEBUG:

16:34:07: INFO:

16:34:07: INFO: Trying to store 'reboot.xml' in string table
16:34:07: DEBUG: ==================================================================================
16:34:07: DEBUG: ==================================================================================
16:34:07: INFO: Looking for file 'reboot.xml'
16:34:07: DEBUG: 2. Calling stat(reboot.xml)
16:34:07: DEBUG: 2. Calling fopen('reboot.xml') with AccessMode='rb'
16:34:07: DEBUG: Trying get filesize, calling fseek()
16:34:07: DEBUG: Found 'reboot.xml' (65 bytes) in local directory 'C:\Program Files (x86)\Qualcomm\QPST\bin\
16:34:07: DEBUG: 2. Calling fopen('reboot.xml') with AccessMode='r'
16:34:07: DEBUG: Trying get filesize, calling fseek()
16:34:07: DEBUG: User set ZLPAWAREHOST to 1

16:34:07: INFO: User wants to talk to port '\\.\COM40'
16:34:07: DEBUG: port_fd=0xE0

16:34:07: INFO: Took 0.00000000 seconds to open port
16:34:07: INFO: Sorting TAGS to ensure order is <configure>,<erase>, others, <patch>,<power>
16:34:07: INFO: Sending <configure>
16:34:07: DEBUG: CHANNEL DATA (P0000) (H00202) ( 228 bytes) - HOST TO TARGET -->
===========================================================================================================
<?xml version="1.0" encoding="UTF-8" ?>
<data>
<configure MemoryName="emmc" Verbose="0" AlwaysValidate="0" MaxDigestTableSizeInBytes="8192" MaxPayloadSizeToTargetInBytes="1048576" ZlpAwareHost="1" SkipStorageInit="0" />
</data>

============================================================================================================

16:34:07: DEBUG: CharsInBuffer=0 Trying to read from USB 8192 bytes
16:34:07: DEBUG: CHANNEL DATA (64 bytes) <-- TARGET to HOST
16:34:07: DEBUG: CharsInBuffer = 64
16:34:07: DEBUG: printBuffer:6017 PRETTYPRINT Buffer is 64 bytes

16:34:07: DEBUG: printBuffer:6094 01 00 00 00 30 00 00 00 02 00 00 00 01 00 00 00 ....0...........
16:34:07: DEBUG: printBuffer:6094 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
16:34:07: DEBUG: printBuffer:6094 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
16:34:07: DEBUG: printBuffer:6094 04 00 00 00 10 00 00 00 0D 00 00 00 01 00 00 00 ................
16:34:07: DEBUG: printBuffer:6107

_____
| ___|
| |__ _ __ _ __ ___ _ __
| __| '__| '__/ _ \| '__|
| |__| | | | | (_) | |
\____/_| |_| \___/|_|

16:34:07: {ERROR: DetermineTag:6861 XML not formed correctly. Expected a &lt; character at loc 0

_____
| ___|
| |__ _ __ _ __ ___ _ __
| __| '__| '__/ _ \| '__|
| |__| | | | | (_) | |
\____/_| |_| \___/|_|

16:34:07: {ERROR: GetNextPacket:7935 3. TAG not found or recognized

_____
| ___|
| |__ _ __ _ __ ___ _ __
| __| '__| '__/ _ \| '__|
| |__| | | | | (_) | |
\____/_| |_| \___/|_|

16:34:07: {ERROR: GetNextPacket:7945

There is a chance your target is in SAHARA mode!!
There is a chance your target is in SAHARA mode!!
There is a chance your target is in SAHARA mode!!

This can mean
1. You forgot to send DeviceProgrammer first (i.e. QSaharaServer.exe -s 13:prog_emmc_firehose_8994_lite.mbn)
2. OR, you did send DeviceProgrammer, but it has crashed and/or is not correct for this target

Regardless this program speaks FIREHOSE protocol and your target is speaking SAHARA protcol, so this will not work