If something like this is used, msm-timer require interrupts. Without this configuration, the device is unbootable as the system froze on system bootup. timer@200a000 { compatible = "qcom,kpss-timer", "qcom,msm-timer"; interrupts = <GIC_PPI 1 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_EDGE_RISING)>, <GIC_PPI 2 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_EDGE_RISING)>, <GIC_PPI 3 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_EDGE_RISING)>, <GIC_PPI 4 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_EDGE_RISING)>, <GIC_PPI 5 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_EDGE_RISING)>; no-pretimeout; reg = <0x0200a000 0x100>; clock-frequency = <25000000>, <32768>; clocks = <&sleep_clk>; clock-names = "sleep"; cpu-offset = <0x80000>; }; > On Tue, Feb 04, 2020 at 04:21:01PM +0100, Ansuel Smith wrote: > > Some platform like ipq806x doesn't support pretimeout. > > As the driver check if there are available interrupts and ipq806x > > use msm-timer that require interrupts, the watchdog fail to probe > > as request_irq tries to use a ppi interrupt. Add an option to skip > > pretimeout setup and use the normal watchdog probe. > > > > Signed-off-by: Ansuel Smith <ansuelsmth@xxxxxxxxx> > > --- > > drivers/watchdog/qcom-wdt.c | 5 ++++- > > 1 file changed, 4 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/watchdog/qcom-wdt.c b/drivers/watchdog/qcom-wdt.c > > index a494543d3ae1..e689e97e883e 100644 > > --- a/drivers/watchdog/qcom-wdt.c > > +++ b/drivers/watchdog/qcom-wdt.c > > @@ -189,6 +189,7 @@ static int qcom_wdt_probe(struct platform_device > *pdev) > > u32 percpu_offset; > > int irq, ret; > > struct clk *clk; > > + bool nopretimeout; > > > > regs = of_device_get_match_data(dev); > > if (!regs) { > > @@ -204,6 +205,8 @@ static int qcom_wdt_probe(struct platform_device > *pdev) > > if (!res) > > return -ENOMEM; > > > > + nopretimeout = of_property_read_bool(np, "no-pretimeout"); > > + > > /* We use CPU0's DGT for the watchdog */ > > if (of_property_read_u32(np, "cpu-offset", &percpu_offset)) > > percpu_offset = 0; > > @@ -247,7 +250,7 @@ static int qcom_wdt_probe(struct platform_device > *pdev) > > > > /* check if there is pretimeout support */ > > irq = platform_get_irq(pdev, 0); > > - if (irq > 0) { > > + if (!nopretimeout && irq > 0) { > > That is unnecessary; such platforms should simply not provide an interrupt. > Or, in other words, what is the point of assigning an interrupt to be used > for pretimeout if the platform doesn't support it ? And then to add yet > another attribute to tell the driver not to use it ? > > Guenter > > > ret = devm_request_irq(dev, irq, qcom_wdt_isr, > > IRQF_TRIGGER_RISING, > > "wdt_bark", &wdt->wdd); > > -- > > 2.24.0 > >