On Sat 12 Sep 07:51 CDT 2020, Marc Zyngier wrote: > Although we are trying to move to a world where a large number > of irqchip drivers can safely be built as platform drivers > the reality is that most endpoint drivers are not ready for that, > and will fail to probe as they expect their interrupt controller > to be up and running. > > A halfway house solution is to let the driver indicate that if > it is built-in (i.e. not a module), then it must use the earily > probe mechanism, IRQCHIP_DECLARE() style. Otherwise, it is a > normal module implemenenting a platform driver, and we can > fallback to the existing code. > > Hopefully we'll one day be able to drop this code altogether, > but that's not for tomorrow. > Reviewed-by: Bjorn Andersson <bjorn.andersson@xxxxxxxxxx> > Signed-off-by: Marc Zyngier <maz@xxxxxxxxxx> > --- > include/linux/irqchip.h | 12 ++++++++++++ > 1 file changed, 12 insertions(+) > > diff --git a/include/linux/irqchip.h b/include/linux/irqchip.h > index f8f25e9f8200..31fc9d00101f 100644 > --- a/include/linux/irqchip.h > +++ b/include/linux/irqchip.h > @@ -50,6 +50,18 @@ static struct platform_driver drv_name##_driver = { \ > }; \ > builtin_platform_driver(drv_name##_driver) > > +#ifdef MODULE > +#define IRQCHIP_HYBRID_DRIVER_BEGIN(drv) \ > + IRQCHIP_PLATFORM_DRIVER_BEGIN(drv) > +#define IRQCHIP_HYBRID_DRIVER_END(drv) \ > + IRQCHIP_PLATFORM_DRIVER_END(drv) > +#else > +#define IRQCHIP_HYBRID_DRIVER_BEGIN(drv) \ > + _OF_DECLARE_ARRAY_START(irqchip, drv) > +#define IRQCHIP_HYBRID_DRIVER_END(drv) \ > + _OF_DECLARE_ARRAY_END; > +#endif > + > /* > * This macro must be used by the different irqchip drivers to declare > * the association between their version and their initialization function. > -- > 2.28.0 >