[PATCH v2 00/12] coresight: Add CPU cluster funnel/replicator/tmc support

Maulik Shah (mkshah) maulik.shah at oss.qualcomm.com
Mon May 25 06:17:27 PDT 2026



On 12/19/2025 3:51 PM, Sudeep Holla wrote:
> On Fri, Dec 19, 2025 at 10:13:14AM +0800, yuanfang zhang wrote:
>>
>>
>> On 12/18/2025 7:33 PM, Sudeep Holla wrote:
>>> On Thu, Dec 18, 2025 at 12:09:40AM -0800, Yuanfang Zhang wrote:
>>>> This patch series adds support for CoreSight components local to CPU clusters,
>>>> including funnel, replicator, and TMC, which reside within CPU cluster power
>>>> domains. These components require special handling due to power domain
>>>> constraints.
>>>>
>>>
>>> Could you clarify why PSCI-based power domains associated with clusters in
>>> domain-idle-states cannot address these requirements, given that PSCI CPU-idle
>>> OSI mode was originally intended to support them? My understanding of this
>>> patch series is that OSI mode is unable to do so, which, if accurate, appears
>>> to be a flaw that should be corrected.
>>
>> It is due to the particular characteristics of the CPU cluster power
>> domain.Runtime PM for CPU devices works little different, it is mostly used
>> to manage hierarchicalCPU topology (PSCI OSI mode) to talk with genpd
>> framework to manage the last CPU handling in cluster.
> 
> That is indeed the intended design. Could you clarify which specific
> characteristics differentiate it here?

Sorry for coming very late on this.

This series is intended to handle coresight components which resides within CPU cluster.
For the cases where cluster is in deepest idle low power mode or all CPUs belonging to cluster
are hotplugged off, access to coresight components can not be done.

The implementation tried to address in two parts,
1. Using cluster power-domain to know which coresight component belongs to which cluster/CPUs
2. Schedule the task on intended cluster's CPU to make sure the CPU (and cluster) power is
ON while coresight component of the cluster is being accessed (using smp_call_function_single()).

The use of power-domains in (1) will limit this to PSCI OS-Initiated mode,
to have this support on PSCI Platform-Coordinated mode too, probably instead of power-domains,
cpu-maps (which also defines the clusters) from device tree is a better choice which will give
the information on which CPU belongs to which cluster.

(2) ensured that scheduling happened on intended CPU and while the access is in progress, CPU (and
cluster) will not enter power down in between.

> 
>> It doesn’t really send IPI to wakeup CPU device (It don’t have
>> .power_on/.power_off) callback implemented which gets invoked from
>> .runtime_resume callback. This behavior is aligned with the upstream Kernel.
>>
> 
> I am quite lost here. Why is it necessary to wake up the CPU? If I understand
> correctly, all of this complexity is meant to ensure that the cluster power
> domain is enabled before any of the funnel registers are accessed. Is that
> correct?

Yes, This is to ensure that CPU (and cluster) power is ON while coresight components
for same cluster are being accessed.

> 
> If so, and if the cluster domains are already defined as the power domains for
> these funnel devices, then they should be requested to power on automatically
> before any register access occurs. Is that not the case?

Cluster power-domains will be only available for PSCI OS-initiated mode but also
will not help for cases where all CPUs in cluster are hotplugged off as hotplugs are
platform coordinated.

After discussion with our HW team to automatically request power on for coresight
component GPR [1] can be used but they seems not working as intended on the existing
SoCs and will be available on next generation SoC.

[1] https://developer.arm.com/documentation/ddi0480/d/Functional-Overview/Granular-Power-Requestor

> 
> What am I missing in this reasoning?
> 
> The only explanation I can see is that the firmware does not properly honor
> power-domain requests coming directly from the OS. I believe that may be the
> case, but I would be glad to be proven wrong.
> 

please see below comment for more details, This seems not a firmware issue.

>>>
>>>> Unlike system-level CoreSight devices, these components share the CPU cluster's
>>>> power domain. When the cluster enters low-power mode (LPM), their registers
>>>> become inaccessible. Notably, `pm_runtime_get` alone cannot bring the cluster
>>>> out of LPM, making standard register access unreliable.
>>>>
>>>
>>> Are these devices the only ones on the system that are uniquely bound to
>>> cluster-level power domains? If not, what additional devices share this
>>> dependency so that we can understand how they are managed in comparison?
>>>
>>
>> Yes, devices like ETM and TRBE also share this power domain and access constraint.
>> Their drivers naturally handle enablement/disablement on the specific CPU they
>> belong to (e.g., via hotplug callbacks or existing smp_call_function paths).
> 
> I understand many things are possible to implement, but the key question
> remains: why doesn’t the existing OSI mechanism - added specifically to cover
> cases like this solve the problem today?
> 
> Especially on platforms with OSI enabled, what concrete limitation forces us
> into this additional “wake-up” path instead of relying on OSI to manage the
> dependency/power sequencing?

+ Ulf in loop.

Current platforms with OSI enabled, Linux PSCI do not implement the power_on/power_off
requests, as far as i know, runtime PM was never meant to implement this part and
pm_runtime_get_sync() (from drivers/cpuidle/cpuidle-psci.c) call is only used to convey
to cluster power domains about a child CPU/ sub domain being on after it has already
been landed in Linux.

The standalone invoke of pm_runtime_get_sync() from another CPU do not really turn on/get
the CPU (and cluster), as the CPUs either use CPUidle / CPU hotplug paths to enter/exit
low power mode.

To put it other way,
For a hot-plugged off CPU, invoking a pm_runtime_get_sync() won't get the CPU (and make
its cluster power domain) ON. In order to turn on the CPU, one has to still request
the online of the CPU, say via sysfs command echo 1 > /sys/devices/system/cpu/cpuX/online
which would invoke PSCI CPU_ON function and the power domain for CPU gets marked as ON
only after CPU already landed in Linux via psci_idle_cpuhp_up() invoking pm_runtime_get_sync().

I used specific hotplug example but same applies to idle powered down CPU (or Cluster) too.

> 
>>>> To address this, the series introduces:
>>>> - Identifying cluster-bound devices via a new `qcom,cpu-bound-components`
>>>>   device tree property.
>>>
>>> Really, no please.
>>>
>>
>> Our objective is to determine which CoreSight components are physically locate
>> within the CPU cluster power domain.
>>
>> Would it be acceptable to derive this relationship from the existing
>> power-domains binding?
> 
> In my opinion, this is not merely a possibility but an explicit expectation.
> 
>> For example, if a Funnel or Replicator node is linked to a power-domains
>> entry that specifies a cpumask, the driver could recognize this shared
>> dependency and automatically apply the appropriate cluster-aware behavior.
>>
> 
> Sure, but for the driver to use that information, we need clear explanation
> for all the questions above. In short, why it is not working with the existing
> PSCI domain idle support.
> 

Explained above.

Thanks,
Maulik



More information about the linux-arm-kernel mailing list