Per AN945, it is possible to start the EFM8 bootloader by performing a SW reset with a value of 0xA5 in register R0. However, when I write a value of 0x10 to RSTSRC, nothing happens and my code just keeps running. Why isn't this working?
As described in application note "AN945: EFM8 Factory Bootloader User Guide" and the "How does the EFM8 device enter bootloader mode?" knowledge base article, you can enter the factory bootloader "on demand" by setting the signature value 0xA5 in R0 in Bank 0 and then initiating a SW reset. However, SFRs cannot be written indirectly, so you must write to RSTSRC using direct addressing to successfully initiate a SW reset.
As discussed in the "Rainbow Blinky Example" section in AN945, a special "blinky" example is provided in the AN945SW archive linked from the 8-bit App Notes page (www.silabs.com/8bit-appnotes) - also available within Simplicity Studio - that demonstrates how to enter the factory bootloader on-demand from within application firmware.