Hi Simon, On Sun, Dec 22, 2019 at 2:16 AM Simon Glass <[email protected]> wrote: > > Add an IRQ type to each driver and use irq_first_device_type() to find > and probe the correct one. > > Signed-off-by: Simon Glass <[email protected]> > --- > > Changes in v2: None > > arch/x86/cpu/apollolake/fsp_s.c | 4 ++-- > arch/x86/cpu/apollolake/itss.c | 2 +- > arch/x86/cpu/i386/interrupt.c | 3 ++- > arch/x86/cpu/irq.c | 3 ++- > drivers/pinctrl/intel/pinctrl.c | 2 +- > include/irq.h | 2 ++ > 6 files changed, 10 insertions(+), 6 deletions(-) > > diff --git a/arch/x86/cpu/apollolake/fsp_s.c b/arch/x86/cpu/apollolake/fsp_s.c > index f8fa4dec8f..b2d9130841 100644 > --- a/arch/x86/cpu/apollolake/fsp_s.c > +++ b/arch/x86/cpu/apollolake/fsp_s.c > @@ -535,7 +535,7 @@ int arch_fsps_preinit(void) > struct udevice *itss; > int ret; > > - ret = uclass_first_device_err(UCLASS_IRQ, &itss); > + ret = irq_first_device_type(X86_IRQT_ITSS, &itss); > if (ret) > return log_msg_ret("no itss", ret); > /* > @@ -576,7 +576,7 @@ int arch_fsp_init_r(void) > if (ret) > return ret; > > - ret = uclass_first_device_err(UCLASS_IRQ, &itss); > + ret = irq_first_device_type(X86_IRQT_ITSS, &itss); > if (ret) > return log_msg_ret("no itss", ret); > /* Restore GPIO IRQ polarities back to previous settings */ > diff --git a/arch/x86/cpu/apollolake/itss.c b/arch/x86/cpu/apollolake/itss.c > index 8789f8e6bb..9a4d159ebf 100644 > --- a/arch/x86/cpu/apollolake/itss.c > +++ b/arch/x86/cpu/apollolake/itss.c > @@ -199,7 +199,7 @@ static const struct irq_ops apl_itss_ops = { > }; > > static const struct udevice_id apl_itss_ids[] = { > - { .compatible = "intel,apl-itss"}, > + { .compatible = "intel,apl-itss", .data = X86_IRQT_ITSS }, > { } > }; > > diff --git a/arch/x86/cpu/i386/interrupt.c b/arch/x86/cpu/i386/interrupt.c > index 78aa51a3ea..5a886fd031 100644 > --- a/arch/x86/cpu/i386/interrupt.c > +++ b/arch/x86/cpu/i386/interrupt.c > @@ -13,6 +13,7 @@ > #include <common.h> > #include <dm.h> > #include <efi_loader.h> > +#include <irq.h> > #include <irq_func.h> > #include <asm/control_regs.h> > #include <asm/i8259.h> > @@ -262,7 +263,7 @@ int interrupt_init(void) > int ret; > > /* Try to set up the interrupt router, but don't require one */ > - ret = uclass_first_device_err(UCLASS_IRQ, &dev); > + ret = irq_first_device_type(X86_IRQT_BASE, &dev); > if (ret && ret != -ENODEV) > return ret; > > diff --git a/arch/x86/cpu/irq.c b/arch/x86/cpu/irq.c > index ed9938f7f7..bafa031082 100644 > --- a/arch/x86/cpu/irq.c > +++ b/arch/x86/cpu/irq.c > @@ -7,6 +7,7 @@ > #include <dm.h> > #include <errno.h> > #include <fdtdec.h> > +#include <irq.h> > #include <malloc.h> > #include <asm/io.h> > #include <asm/irq.h> > @@ -351,7 +352,7 @@ int irq_router_probe(struct udevice *dev) > } > > static const struct udevice_id irq_router_ids[] = { > - { .compatible = "intel,irq-router" }, > + { .compatible = "intel,irq-router", .data = X86_IRQT_BASE }, > { } > }; > > diff --git a/drivers/pinctrl/intel/pinctrl.c b/drivers/pinctrl/intel/pinctrl.c > index 4875a3b0b5..bd58b85dd8 100644 > --- a/drivers/pinctrl/intel/pinctrl.c > +++ b/drivers/pinctrl/intel/pinctrl.c > @@ -613,7 +613,7 @@ int intel_pinctrl_ofdata_to_platdata(struct udevice *dev, > log_err("Cannot find community for pid %d\n", pplat->pid); > return -EDOM; > } > - ret = uclass_first_device_err(UCLASS_IRQ, &priv->itss); > + ret = irq_first_device_type(X86_IRQT_ITSS, &priv->itss); > if (ret) > return log_msg_ret("Cannot find ITSS", ret); > priv->comm = comm; > diff --git a/include/irq.h b/include/irq.h > index 1db97b5c3f..8b4e2ecfc0 100644 > --- a/include/irq.h > +++ b/include/irq.h > @@ -99,6 +99,8 @@ int irq_restore_polarities(struct udevice *dev); > /** > * irq_first_device_type() - Get a particular interrupt controller > * > + * On success this returns an activated interrupt device.
This change should be in the previous patch, where this new API was added. > + * > * @type: Type to find > * @devp: Returns the device, if found > * @return 0 if OK, -ENODEV if not found, other -ve error if uclass failed to > -- Regards, Bin

