RFAL timeout after switching to gcc 9.4/glibc 2.33.
I have a version of nfcPoller linked against rfal v1.3 on Linux 5.10.17. This has been working fine with gcc 7.5/glibc 2.31. We recently bumped our toolchain to gcc 9.4/glibc 2.33 and now I get timeouts while reading anything with an NDEF field (or anything other than a header). I'm testing with an card that reports as:
xampleRfalPollerActivation[exampleRfalPoller.c:900] INFO NFC-A T2T device activated
exampleRfalPollerRun[exampleRfalPoller.c:343] INFO atqa_sak: 004400
exampleRfalPollerRun[exampleRfalPoller.c:366] INFO MIFARE Ultralight UID: 04B89DB22F6680The code that causes this is in st25r3911/rfal_rfst25r3911.c, line 1900:
/* Only raise Timeout if NRE is detected with no Rx Start (NRT EMV mode) */
if( (irqs & ST25R3911_IRQ_MASK_NRE) && !(irqs & ST25R3911_IRQ_MASK_RXS) )
{
gRFAL.TxRx.status = ERR_TIMEOUT;
gRFAL.TxRx.state = RFAL_TXRX_STATE_RX_FAIL;
break;
}It seems I'm getting the NRE interrupt from the ST25R3911B interrupt register. I don't know how I get this or why it's showing up after switching toolchains. I also believe (but can't prove yet) that I'm not getting the same kind of gpio events. I switched the platform code to use libgpiod 1.4.3 since we're running a 5.10.17 kernel. Again, rfal v1.3.0, libgpiod 1.4.3 and kernel 5.10.17 all worked fine with gcc 7.5 / glibc 2.31.
I've tried changing a few timer settings but at best there was no change and at worse the app locked up. I've also tried v1.4.3, v2.1.2, v2.2 and v2.4.0. None of these worked at all - I get no gpio events at all with these. I'm assuming my porting didn't go right with those.
Is there anything I can do to dig deeper into why I'm getting this NRE interrupt? Are there specific timeout settings I can change that might impact what I'm seeing? I'm willing to try v2.4 again but may need help understanding why no gpio interrupts are being seen.
Thanks for any pointers.
