port-ofppc/60640: ofppc i8259 cascade interrupt wrong polarity.

"[email protected] via gnats" <[email protected]>
Newsgroups gmane.os.netbsd.bugs
Message-ID <[email protected]>
>Number:         60640
>Category:       port-ofppc
>Synopsis:       ofppc i8259 cascade interrupt wrong polarity.
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    port-ofppc-maintainer
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Tue Aug 25 10:15:00 +0000 2026
>Originator:     Jack Dunn
>Release:        current
>Organization:
>Environment:
NetBSD rs6000 11.99.7 NetBSD 11.99.7 (GENERIC) #9: Tue Aug 25 01:01:38 UTC 2026  jack@build:/home/jack/netbsd/obj/sys/arch/ofppc/compile/GENERIC ofppc

>Description:
On an ofppc machine which has a i8259 cascaded into an OpenPIC the kernel appears to hang shortly after autoconf. Holding a key down on the serial console makes forward progress. Investigation shows that pic_handle_intr() never leaves its pic_get_irq(PIC_GET_RECHECK) loop and the CPU spends 100% of its time in the interrupt handler.

The same issue occurs on two machines:
- Bull Escala T604e
- IBM RS/6000 7046 B50 / 7043 43p.

sys/arch/ofppc/ofppc/mainbus.c registers the i8259 cascade with IST_LEVEL. IST_LEVEL is an alias for IST_LEVEL_LOW but the i8259 is active high. 

Looks like opic_establish_irq() used to have a specical case which would handle this which was removed sometime around 2018 which caused the issue.

This issue only affects pic_openpic not pic_distopenpic or pic_mpcsoc.
>How-To-Repeat:
Boot ofppc on a machine with an OpenPIC/cascaded i8259. 
>Fix:
Change the line (sys/arch/ofppc/ofppc/mainbus.c)
intr_establish(16, IST_LEVEL, IPL_HIGH, pic_handle_intr, isa_pic);
to
intr_establish(16, IST_LEVEL_HIGH, IPL_HIGH, pic_handle_intr, isa_pic);
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.