> On Tue, Feb 04, 2020 at 05:16:34PM +0100, ansuelsmth@xxxxxxxxx wrote: > > 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>; > > }; > > > > I think this is all wrong; the new property shows up in a node which > is completely unrelated to a watchdog. Maybe it wasn't such a good idea > to tie the watchdog to the timer node. At the very least, the situation > should be handled in the driver via of_table flags. If the situation can't > be handled that way, something is even more wrong. In that case it might > be better to revert commit 36375491a439 until that is sorted out properly. > > Guenter > So pretimeout should be enabled only for kpss-wdt and disabled with a flag in the of_table of the driver? > > > 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 > > > > > >