After hours of tearing my hair out over this one, I've finally found it.
Apparently as part of the PC spec UART (8250, 16450, etc) the user pin OUT2 is used as an interrupt enable. FFS!
I eventually traced it down to the line where I set up the MCR according to the chosen flow control protocol. I had ignored bit 3 (OUT2), but after digging I found. https://wiki.osdev.org/Serial_Ports
Where it states:
Most PC serial ports use OUT2 to control a circuit that disconnects (tristates) the IRQ line. This makes it possible for multiple serial ports to share a single IRQ line, as long as only one port is enabled at a time.
Nix wrote: ↑Thu Nov 28, 2024 11:40 pm
I eventually traced it down to the line where I set up the MCR according to the chosen flow control protocol. I had ignored bit 3 (OUT2), but after digging I found.
Thanks for the update. I never noticed - was using a PC hardware book in which this bit was documented.
Unrelated to this specific issue, better make sure to use a card with 16550, not 16450.