NAND Format Invalid
OK, if you were already using 3.0 then this process should "just work". However, if you had already upgraded to 3.1 you will encounted a nasty error: "The iPhone "iPhone" could not be restored.
An unknown error occured (1015).". This is expected behavior.
For people who are curious, what has happened is that a section of the NAND storage has been slightly reorganized in 3.1, and the 3.0 iBoot can no longer parse it. If we pulled out iRecovery and checked the iBoot logs over USB we'd see the following messages (the typos are Apple's).
[WMR:ERR] NAND format invalid (mismatch, corrupt, read error or blank NAND device) [WMR:ERR] boolSignatureFound false boolProductionFormatVerified true nSig 0x0 ****************************************************************************** ****************************************************************************** AND: NAND initialisaton failed due to format mismatch or uninitialised NAND. AND: Please reboot with reformatting enabled. ****************************************************************************** ****************************************************************************** NAND FTL failed initialisation
The first time this happened to me I actually spent a while with MuscleNerd working out how to do what it asked: "reboot with reformatting enabled". That was a
severe waste of time: after you fix this, it still won't boot, and
you will need to go through a second restore to finish the process.
However, it turns out a second restore also formats the NAND correctly by itself. So, without bothering to do anything else to the device (leaving it in the recovery mode it is now in: DFU is no longer required), just start the restore over again in the same manner as before, once again selecting the 3.0 firmware.
Stuck in Restore
Unfortuntaely, this second restore is also going to fail (*sigh*), and irritatingly enough it is going to cause the
exact same error message: "The iPhone "iPhone" could not be restored.
An unknown error occured (1015).". This is still expected behavior.
For those who are again curious, what has happened is that when the device turns on it has to decide what it is going to do: wait for instructions over USB, or continue into the boot process. This is determined by an NVRAM variable named auto-boot, which is currently set to "false".
Normally this is set at the end of the restore process, but technically we were unable to finish the restore: it is my understanding that this is because upgrading to 3.1 installed the 3.1 baseband (which is currently not unlockable, btw), and the baseband upgrade in the 3.0 release then fails, stopping the restore.
However, that seems to be the last and least important part of the restore, so we technically won: we are never, though, going to be able to restore back to 3.0 without hitting this 1015 again, though.