On Wed, Aug 5, 2020 at 1:19 PM Saravana Kannan <saravanak@xxxxxxxxxx> wrote: > On Wed, Aug 5, 2020 at 12:44 AM John Stultz <john.stultz@xxxxxxxxxx> wrote: > > On Fri, Jul 17, 2020 at 5:06 PM Saravana Kannan <saravanak@xxxxxxxxxx> wrote: > > > > > > Switch the driver to use the helper macros. In addition to reducing the > > > number of lines, this also adds module unload protection (if the driver > > > is compiled as a module) by switching from module_platform_driver to > > > builtin_platform_driver. > > > > > > Signed-off-by: Saravana Kannan <saravanak@xxxxxxxxxx> > > > --- > > > drivers/irqchip/qcom-pdc.c | 26 +++----------------------- > > > 1 file changed, 3 insertions(+), 23 deletions(-) > > > > > > diff --git a/drivers/irqchip/qcom-pdc.c b/drivers/irqchip/qcom-pdc.c > > > index 5b624e3295e4..c1c5dfad57cc 100644 > > > --- a/drivers/irqchip/qcom-pdc.c > > > +++ b/drivers/irqchip/qcom-pdc.c > > > @@ -432,28 +432,8 @@ static int qcom_pdc_init(struct device_node *node, struct device_node *parent) > > > return ret; > > > } > > > > > > -static int qcom_pdc_probe(struct platform_device *pdev) > > > -{ > > > - struct device_node *np = pdev->dev.of_node; > > > - struct device_node *parent = of_irq_find_parent(np); > > > - > > > - return qcom_pdc_init(np, parent); > > > -} > > > - > > > -static const struct of_device_id qcom_pdc_match_table[] = { > > > - { .compatible = "qcom,pdc" }, > > > - {} > > > -}; > > > -MODULE_DEVICE_TABLE(of, qcom_pdc_match_table); > > > - > > > -static struct platform_driver qcom_pdc_driver = { > > > - .probe = qcom_pdc_probe, > > > - .driver = { > > > - .name = "qcom-pdc", > > > - .of_match_table = qcom_pdc_match_table, > > > - .suppress_bind_attrs = true, > > > - }, > > > -}; > > > -module_platform_driver(qcom_pdc_driver); > > > +IRQCHIP_PLATFORM_DRIVER_BEGIN(qcom_pdc) > > > +IRQCHIP_MATCH("qcom,pdc", qcom_pdc_init) > > > +IRQCHIP_PLATFORM_DRIVER_END(qcom_pdc) > > > MODULE_DESCRIPTION("Qualcomm Technologies, Inc. Power Domain Controller"); > > > MODULE_LICENSE("GPL v2"); > > > > <sigh> > > So this is where I bashfully admit I didn't get a chance to try this > > patch series out, as I had success with a much older version of > > Saravana's macro magic. > > > > But unfortunately, now that this has landed in mainline, I'm seeing > > boot regressions on db845c. :( This is in the non-modular case, > > building the driver in. > > Does that mean the modular version is working? Or you haven't tried > that yet? I'll wait for your reply before I try to fix it. I don't > have the hardware, but it should be easy to guess this issue looking > at the code delta. I've not yet tested with modules with your patch. > The only significant change from what your probe function is doing is > this snippet. But it'd be surprising if this only affects the builtin > case. > > + if (par_np == np) > + par_np = NULL; > + > + /* > + * If there's a parent interrupt controller and none of the parent irq > + * domains have been registered, that means the parent interrupt > + * controller has not been initialized yet. it's not time for this > + * interrupt controller to initialize. So, defer probe of this > + * interrupt controller. The actual initialization callback of this > + * interrupt controller can check for specific domains as necessary. > + */ > + if (par_np && !irq_find_matching_host(np, DOMAIN_BUS_ANY)) > + return -EPROBE_DEFER; Yep. We're getting caught on the irq_find_matching_host() check. I'm a little lost as when I look at the qcom,pdc node in the dtsi its not under a parent controller (instead the soc node). Not sure if that's an issue in the dtsi or if par_np check needs to ignore the soc node and pass null? thanks -john