It takes time but it's also possible to load the whole image and restore bricked SFP module without removing flash.
For Windows users this excellent software has support for xmodem and Kermit transfer protocols.
XMODEM - to transfer U-Boot(extract FFDD0022-1020BF from mtd0)
At uboot prompt 'loadb' command will use Kermit protocol to transfer mtd1/mtd2 into memory. It takes around 25 minutes for 7.6MB file. Step 2, 'sf' to write from memory to flash.
I will post exact commands and offsets next week.
Edit:
The modified mtd0 (1224ABORT.bin) will ignore the locked mtd1 (uboot_env).
1224ABORT.bin md5sum: 10e94a4b4acdc82dec20c7904b69e5c0
The name comes from U-Boot version 1.22.4 in case someone is wondering.
Use it with XMODEM after shorting pins 4 and 5 on the Windbond flash to return to the default unlocked environment.
After getting access to uboot_env on flash let's set permament access to the module. UART connected to pin#2 and pin#7 is required for this step.
FALCON => setenv bootdelay 5
FALCON => setenv asc0 0
FALCON => setenv preboot "gpio input 105;gpio input 106;gpio input 107;gpio input 108;gpio set 3;gpio set 109;gpio set 110;gpio clear 423; gpio clear 422; gpio clear 325; gpio clear402; gpio clear 424"
FALCON => saveenv
Recovery of bricked module. Confirmed working for MA5671A and G-010S-P modules.
#verify memstart and flashstart addresses
FALCON => bdinfo
boot_params = 0x83F37F98
memstart = 0x80000000
memsize = 0x04000000
flashstart = 0xB0000000
flashsize = 0x8A40A5C0
flashoffset = 0x00000000
#transfer desired file by Kermit into memory
FALCON => loadb
## Ready for binary (kermit) download to 0x80800000 at 115200 bps...
## Total Size = 0x00040000 = 262144 Bytes
## Start Addr = 0x80800000
#general syntax
#sf write "from memory address" "to flash offset" "length"
#to write mtd0(uboot)
sf probe 0
sf erase 0 40000
sf write 80800000 0 40000
#to write mtd1(uboot_env)
sf probe 0
sf erase 40000 80000
sf write 80800000 40000 80000
#to write mtd2(image0)
sf probe 0
sf erase C0000 740000
sf write 80800000 C0000 740000
#to write mtd5(image1)
sf probe 0
sf erase 800000 740000
sf write 80800000 800000 740000
#example of writing mtd0(uboot)
FALCON => sf probe 0
SF: Detected W25Q128BV with page size 256 Bytes, erase size 4 KiB, total 16 MiB
FALCON => sf erase 0 40000
SF: 262144 bytes @ 0x0 Erased: OK
FALCON => sf write 80800000 0 40000
SF: 262144 bytes @ 0x0 Written: OK
FALCON =>
#display memory or flash content
md 80800000
md B0000000 (flash uboot)
md B0040000 (flash uboot_env)
md B00C0000 (flash image0)