In WindCore/windermere.cpp the interrupt end-of-interrupt register offsets are
present but commented out:
// BLEOI = 0x410,
// MCEOI = 0x414,
MCEOI is the EOI for the media-change FIQ. Because the register is not
decoded, a write to it does nothing and pendingInterrupts keeps the FIQ bit
set, so the interrupt can never be acknowledged.
Symptom
With a PC card present and a media-change event raised, the media-change FIQ
re-fires continuously. Measured on s5mx_uk16_v260.rom: 292 repetitions of the
handler per boot. After decoding MCEOI (clearing the corresponding bit in
pendingInterrupts) the same boot shows the handler running exactly once.
BLEOI (backlight) is commented out alongside it and looks like the same
oversight, although it was not exercised by our tests — we only confirmed the
MCEOI behaviour.
Investigation and testing by @ajfa, with Claude (Anthropic) assisting.
In
WindCore/windermere.cppthe interrupt end-of-interrupt register offsets arepresent but commented out:
MCEOIis the EOI for the media-change FIQ. Because the register is notdecoded, a write to it does nothing and
pendingInterruptskeeps the FIQ bitset, so the interrupt can never be acknowledged.
Symptom
With a PC card present and a media-change event raised, the media-change FIQ
re-fires continuously. Measured on
s5mx_uk16_v260.rom: 292 repetitions of thehandler per boot. After decoding
MCEOI(clearing the corresponding bit inpendingInterrupts) the same boot shows the handler running exactly once.BLEOI(backlight) is commented out alongside it and looks like the sameoversight, although it was not exercised by our tests — we only confirmed the
MCEOIbehaviour.Investigation and testing by @ajfa, with Claude (Anthropic) assisting.