On 29/07/2024 10:00, Markus Schneider-Pargmann wrote: > +static int tisci_sys_off_handler(struct sys_off_data *data) > +{ > + struct ti_sci_info *info = data->cb_data; > + int i; > + int ret; > + bool enter_partial_io = false; > + > + for (i = 0; i != info->nr_wakeup_sources; ++i) { > + struct platform_device *pdev = > + of_find_device_by_node(info->wakeup_source_nodes[i]); > + > + if (!pdev) > + continue; > + > + if (device_may_wakeup(&pdev->dev)) { ... > + dev_dbg(info->dev, "%pOFp identified as wakeup source\n", > + info->wakeup_source_nodes[i]); > + enter_partial_io = true; > + } > + } > + > + if (!enter_partial_io) > + return NOTIFY_DONE; > + > + ret = tisci_enter_partial_io(info); > + > + if (ret) { > + dev_err(info->dev, > + "Failed to enter Partial-IO %pe, trying to do an emergency restart\n", > + ERR_PTR(ret)); > + emergency_restart(); > + } > + > + while (1); > + > + return NOTIFY_DONE; > +} > + > /* Description for K2G */ > static const struct ti_sci_desc ti_sci_pmmc_k2g_desc = { > .default_host_id = 2, > @@ -3398,6 +3485,35 @@ static int ti_sci_probe(struct platform_device *pdev) > goto out; > } > > + if (of_property_read_bool(dev->of_node, "ti,partial-io-wakeup-sources")) { > + info->nr_wakeup_sources = > + of_count_phandle_with_args(dev->of_node, > + "ti,partial-io-wakeup-sources", > + NULL); I don't see the point of this. You have quite a static list of devices - just look at your DTS. Then you don't even do anything useful with the phandles you got here. This property looks entirely useless. I already commented on the binding (which you did not respond to), so let's comment also here: No, it duplicates wakeup-source and your code shows that it is not even needed. Best regards, Krzysztof