Here is my U-Boot print of the IFC registers:
CSPR1:0x7C000105 AMASK1:0xFE000000 CSOR1:0x80008010
IFC_FTIM0:0x10010001
IFC_FTIM1:0x01000100
IFC_FTIM2:0x01040001
IFC_FTIM3:0x04000000
Which matches manually reading them from memory in Linux:
CSPR_EXT and CSPR:
01530018: 00000000
0153001c: 7c000105
AMASK
015300ac: fe000000
CSOR and CSOR_EXT
0153013c: 80008010
01530140: 00000000
FTIM0-3:
015301f0: 10010001
015301f4: 01000100
015301f8: 01040001
015301fc: 04000000
IFC_GPCM_EVTER_STAT
01531800: 00000000
01531804: 00000000
01531808: 00000000
0153180c: 05400000
01531810: 00000000
01531814: 00000000
01531818: 00000000
0153181c: 00000000
01531820: 00000000
01531824: 00000000
01531828: 00000000
0153182c: 00000000
01531830: 00000000
All of the FTIMs don't seem to apply to GASIC, so I've set them to 1 for each field. I didn't mention it in the original post, but the GPCM_EVTER_STAT registers don't change after the failed read. It will signal a parity error, even though I've disabled it in the CSOR, but masking off that bit in 153180c will prevent that and no error will be signaled in that case.
While checking that lead, I noticed that hardware does not ever to seem the SOFT_RST_ALL bit in the IFC GCR, but the reference manual states
If this bit is set, hardware will clear it once reset operation is completed. Software should poll this bit to get
cleared before initiating any new transaction.
Could this be an indication that something else is amiss with IFC? I'm running Linux from a ramdisk, and it is just the flash chip and FPGA on the IFC bus, so nothing else should be using IFC.