Reply 500 of 569, by LSS10999
rasteri wrote on 2024-04-28, 00:00:So I'm having the same problem as you (interrupts not firing), except using your latest code that doesn't touch 21h doesn't seem […]
LSS10999 wrote on 2024-04-14, 16:04:I've found the answer. Actually port 21h is being used for IRQ stuffs and should not be touched.
So I'm having the same problem as you (interrupts not firing), except using your latest code that doesn't touch 21h doesn't seem to help.
DMA is working great though.
Any ideas? Maybe I can set 21h to the same value as one of my other boards...
Which IRQ did you use for the sound card? If the IRQ in question is taken by at least one PCI IRQ line then the sound card cannot use it. No interrupt will be fired.
Also, did you check registers 60h and 68h on the LPC controller? You can use my PCICMD tool (part of LPCEXP).
pcicmd 0 1f 0 60
pcicmd 0 1f 0 68
Check if any of the bytes in the registers is 05h or 07h. 80h means unused and can be disregarded.
If you see both 05h and 07h you need to check which PCI device(s) are taking the IRQs in question.
I used RBPCI (PCICFG), though HWINFO can also be used. Run HWINFO before configuring the LPC controller and check IRQ assignments. If the IRQs in question are USED you need to look up the PCI device ID online for details, as HWINFO likely won't be able to outright tell you what it is, if it's too modern.
Whether or not you can work around this depends solely on the board's design. In my board's case IRQ7 is being used exclusively by the PIRQ line on which onboard audio is, so by disabling onboard I could free it without any side effect. IRQ5, on the other hand, is being used by the chipset USB3 controller (not the Asmedia one) and I don't want to disable it at the moment...
And another question... did those Chinese brand motherboards have BIOS options for managing IRQ/DMA assignments like old ones? If so, I wonder how such features are implemented and whether or not they are generally portable. Modern UEFI BIOSes don't offer such functions anymore so one can only use workarounds like disabling devices or letting the LPT port reserve it (if present).