v2 addresses Jie's, Sashiko's and Dmitry's review of v1:
Binding (PATCH 1/2):
- Add the dt-binding schema (qcom,msm8660.yaml). v1 only shipped
the ID header (Jie flagged the missing schema). The schema
covers all four compatibles, per-fabric clock-name lists
(bus/bus_a/ebi1/ebi1_a for AFAB; bus/bus_a/smi/smi_a for MMFAB;
bus/bus_a for SFAB and DFAB) with descriptions for each clock
(Dmitry), the required qcom,rpm phandle, and
#interconnect-cells = <1>.
- Drop the SFPB/CFPB mention from the header commit message;
those fabrics aren't modelled by the driver (Sashiko Low).
Driver (PATCH 2/2):
- Fix the bandwidth aggregation in msm8660_icc_set() (Sashiko
High). v1 walked provider->nodes and re-summed n->avg_bw
across all nodes, which double-counts: the framework already
writes each path's bw to every node it traverses, so summing
here gives e.g. master_bw + slave_bw for the same flow. v2
takes the max per-node rate across the provider (matches the
qcom_icc_bus_aggregate() convention in icc-rpm.c).
- Switch to dynamic ICC node IDs via icc_node_create_dyn() and
pointer-based linking via icc_link_nodes(), matching the
icc-rpmh-style pattern (Dmitry). Drop the internal MSM8660_*
enum entirely; struct msm8660_icc_node now carries a struct
icc_node *node and a flexible link_nodes[] array of qnode
pointers.
- Expand the DEFINE_QNODE macro (Dmitry); each of the 63 qnodes
is now an explicit static struct definition, with forward
declarations grouped at the top.
- Use dev_err_ptr_probe() in msm8660_get_rpm()'s deferred-probe
paths (Dmitry).
- Limit the clock-bulk-get fallback to -ENOENT only (Dmitry);
propagate every other error including -EPROBE_DEFER instead
of "any non-DEFER continues without clock scaling".
- Kconfig: depend on MFD_QCOM_RPM=y so a built-in interconnect
provider can't link against a modular RPM (Sashiko Low).
- struct msm8660_icc_node: const char *name (Sashiko Low).
On-device validation (HP TouchPad / APQ8060):
All four fabric providers probe cleanly:
qnoc-msm8660 soc:interconnect@0: RPM fabric ARB enabled
(4 masters, 4 slaves, 2 tiered) [AFAB]
qnoc-msm8660 soc:interconnect@1: RPM fabric ARB enabled
(17 masters, 9 slaves, 2 tiered) [SFAB]
qnoc-msm8660 soc:interconnect@2: RPM fabric ARB enabled
(14 masters, 4 slaves, 3 tiered) [MMFAB]
qnoc-msm8660 soc:interconnect@3: MSM8660 interconnect provider
registered [DFAB]
mmcc-msm8660: MMSS fabric: unhalted all master ports (0-13)
msm_hsusb 12500000.usb: USB HS: Setting interconnect
bandwidth avg=61440 peak=61440 kBps
interconnect_summary shows the expected per-node aggregation
(e.g. slv_ebi_ch0 sums MMC + MDP + DMA + USB consumer requests)
and msm8660_icc_set() then derives a single fabric clock rate
from the per-node max rather than the per-node sum (the v1
double-count is gone in v2).
The companion DTS patches that enable the providers for the
HP TouchPad will be sent separately to the ARM/DTS tree.
Herman van Hazendonk (2):
dt-bindings: interconnect: qcom: add msm8660 NoC
interconnect: qcom: add MSM8x60 NoC driver
.../bindings/interconnect/qcom,msm8660.yaml | 157 ++
drivers/interconnect/qcom/Kconfig | 14 +
drivers/interconnect/qcom/Makefile | 2 +
drivers/interconnect/qcom/msm8660.c | 1619 +++++++++++++++++
.../dt-bindings/interconnect/qcom,msm8660.h | 156 ++
5 files changed, 1948 insertions(+)
create mode 100644 Documentation/devicetree/bindings/interconnect/qcom,msm8660.yaml
create mode 100644 drivers/interconnect/qcom/msm8660.c
create mode 100644 include/dt-bindings/interconnect/qcom,msm8660.h
base-commit: 944125b4c454b58d2fe6e35f1087a932b2050dff
--
2.43.0