Index: sys/arm64/arm64/intr_machdep.c =================================================================== --- sys/arm64/arm64/intr_machdep.c +++ sys/arm64/arm64/intr_machdep.c @@ -429,6 +429,7 @@ intr_irq_config(u_int hw_irq, enum intr_trigger trig, enum intr_polarity pol) { struct arm64_intr_entry *intr; + int rv; mtx_lock_spin(&intr_list_lock); intr = intr_lookup_locked(hw_irq); @@ -439,10 +440,15 @@ intr->i_trig = trig; intr->i_pol = pol; + /* + * Return success if PIC cannot be called yet. The interrupt will be + * configured at a later time based on i_trig and i_pol. + */ + rv = 0; if (!cold && root_pic != NULL) - PIC_CONFIG(root_pic, intr->i_hw_irq, trig, pol); + rv = PIC_CONFIG(root_pic, hw_irq, trig, pol); - return (0); + return (rv); } void Index: sys/arm64/arm64/pic_if.m =================================================================== --- sys/arm64/arm64/pic_if.m +++ sys/arm64/arm64/pic_if.m @@ -78,7 +78,7 @@ enum intr_polarity *pol; } DEFAULT pic_translate_code_default; -METHOD void config { +METHOD int config { device_t dev; u_int irq; enum intr_trigger trig;