On 8/15/26 3:25 PM, Shawn Guo wrote:
> On Nord, ADSP0/1/2 share HPASS-domain resources (PLLs, AG_NOC, RSCp,
> CESTA, THROTTLE, QTMR) owned by ADSP0, and their firmware cannot
> tolerate one member being started or stopped independently of the
> others. Modeling that requires each PAS instance to know which other
> instances it is grouped with.
[...]
> +static struct qcom_pas_cluster *qcom_pas_cluster_get(struct device_node
> *node)
> +{
> + struct qcom_pas_cluster *cluster;
> +
> + mutex_lock(&qcom_pas_cluster_list_lock);
Use scoped mutex guards
[...]
> +static int qcom_pas_cluster_init(struct qcom_pas *pas, struct device_node
> *np)
> +{
> + struct device_node *root_node;
> + bool is_root;
> +
> + root_node = of_parse_phandle(np, "qcom,cluster-root", 0);
> + if (!root_node)
> + return 0;
> +
> + is_root = root_node == np;
> +
> + /*
> + * A non-root member is useless without its root: it can never be
> + * booted, since its boot has to be sequenced after the root's. Reject
> + * it here rather than at first boot, so that a DT enabling a dependent
> + * DSP but not the one owning the shared resources fails loudly and
> + * early.
> + */
> + if (!is_root && !of_device_is_available(root_node)) {
Let's use fwnode_device_is_available() instead, even though there's
megatons of OF-specific calls across the framework
Konrad