On Thu, Oct 26, 2023 at 12:04:08PM -0500, Bjorn Helgaas wrote: > On Thu, Oct 26, 2023 at 01:53:29AM +0530, Sunil V L wrote: > > On RISC-V platforms, apart from root interrupt controllers (which > > provide local interrupts and IPI), other interrupt controllers in the > > hierarchy are probed late. Enable this select this CONFIG option for > > RISC-V platforms so that device drivers which connect to deferred > > interrupt controllers can take appropriate action. > > Quite a bit of this series seems related to the question of interrupt > controllers being probed "late". > > I don't see anything specific about *how* late this might be, but from > the use of -EPROBE_DEFER in individual drivers (8250_pnp explicitly, > and acpi_register_gsi() and pnp_irq() and acpi_pci_irq_enable(), which > are called from driver .probe() paths) it seems like interrupt > controllers might be detected even after devices that use them. > > That seems like a fairly invasive change to the driver probe flow. > If we really need to do that, I think it might merit a little more > background as justification since we haven't had to do it for any > other arch yet. > Hi Bjorn, In RISC-V, the APLIC can be a converter from wired (GSI) to MSI interrupts. Hence, especially in this mode, it has to be a platform device to use device MSI domain. Also, according to Marc Zyngier there is no reason to probe interrupt controllers early apart from root controller. So, the device drivers which use wired interrupts need to be probed after APLIC. The PNP devices and PCI INTx GSI links use either acpi_dev_resource_interrupt() (PNP) or acpi_register_gsi() directly (PCI). The approach taken here is to follow the example of acpi_irq_get() which is enhanced to return EPROBE_DEFER and several platform device drivers which use platform_get_irq() seem to be handling this already. Using ResourceSource dependency (mbigen uses) in the namespace as part of Extended Interrupt Descriptor will not ensure the order since PNP/INTx GSI devices don't work with that. Is there any other better way to create dependency between IO devices and the interrupt controllers when interrupt controller itself is a platform device? While using core_initcall() for interrupt controllers seem to work which forces the interrupt controller to be probed first, Marc is not in favor of that approach since it is fragile. Thanks a lot for your help with review and feedback! Sunil