interconnect: qcom: Fix BW requests to L3_SHARED returning -EINVAL
The qcom,lahaina-epss-l3-shared provider currently only defines a single
endpoint: SLAVE_EPSS_L3_SHARED. The framework only calls the set()
callback for pairs of nodes. If there is no valid pair belonging to the
provider, then apply_constraints() and icc_set_bw() will return -EINVAL.
The lahaina-epss-l3-shared provider would need an additional master
endpoint for these requests to work.
However, even if that problem is fixed, there's another problem in
qcom_icc_l3_shared_set() that prevents the requested level from taking
effect in HW. This function writes the required level into the
PERF_STATE_DESIRED register, which is ignored when per-CPU L3 voting is
enabled in HW. When per-CPU L3 voting is enabled, only the L3_VOTE
register is counted.
To fix both of these problems, just remove the separate
qcom,lahaina-epss-l3-shared provider entirely and move
SLAVE_EPSS_L3_SHARED as an endpoint on qcom,lahaina-epss-l3-cpu. The
qcom_icc_l3_cpu_set() function uses the L3_VOTE register and can be used
for the shared L3 vote as-is. The only reason we'd ever need to use
PERF_STATE_DESIRED is if per-CPU L3 voting is disabled, but that will
likely never happen. All use cases can already be supported with per-CPU
voting enabled (per-CPU, shared, or a mix of both).
Change-Id: Ia67aadf26896a3a819aba8f2e4196d78d0c5c1f5
Signed-off-by:
Mike Tipton <mdtipton@codeaurora.org>
Loading
Please register or sign in to comment