Re: [PATCH v3 3/8] dt-bindings: arm: Add MPAM MSC binding

From: Yin Li

Date: Mon Oct 19 2026 - 02:48:08 EST




On 10/16/2026 3:36 AM, Rob Herring wrote:
On Mon, Oct 12, 2026 at 06:24:06PM +0800, Yin Li wrote:


On 10/12/2026 3:05 PM, Yin Li wrote:


On 10/9/2026 5:27 AM, Rob Herring wrote:
On Thu, Oct 08, 2026 at 02:41:12PM +0800, Yin Li wrote:
From: Rob Herring <robh@xxxxxxxxxx>

The binding is designed around the assumption that an MSC will be a
sub-block of something else such as a memory controller, cache
controller,
or IOMMU. However, it's certainly possible a design does not have that
association or has a mixture of both, so the binding illustrates
how we can
support that with RIS child nodes.

A key part of MPAM is we need to know about all of the MSCs in
the system
before it can be enabled. This drives the need for the genericish
'arm,mpam-msc' compatible. Though we can't assume an MSC is accessible
until a h/w specific driver potentially enables the h/w.

Cc: James Morse <james.morse@xxxxxxx>
Signed-off-by: Rob Herring <robh@xxxxxxxxxx>
Signed-off-by: James Morse <james.morse@xxxxxxx>
[ Yin Li and Huang Yiwei: use oneOf for the compatible to allow both
   standalone arm,mpam-msc and the two-item combination; fix
schema field
   order, type constraints and yamllint spacing; fix example reg
addresses,
   add arm,mpam-device phandle and remove TODO comment ]
Co-developed-by: Huang Yiwei <huang.yiwei@xxxxxxxxxxxxxxxx>
Signed-off-by: Huang Yiwei <huang.yiwei@xxxxxxxxxxxxxxxx>
Signed-off-by: Yin Li <yin.li@xxxxxxxxxxxxxxxx>
---
  .../devicetree/bindings/arm/arm,mpam-msc.yaml      | 202
++++++++++ +++++++++++
  1 file changed, 202 insertions(+)

diff --git
a/Documentation/devicetree/bindings/arm/arm,mpam-msc.yaml
b/Documentation/devicetree/bindings/arm/arm,mpam-msc.yaml
new file mode 100644
index 000000000000..3c7b13a23ff2
--- /dev/null
+++ b/Documentation/devicetree/bindings/arm/arm,mpam-msc.yaml
@@ -0,0 +1,202 @@
+# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/arm/arm,mpam-msc.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Arm Memory System Resource Partitioning and Monitoring (MPAM)
+
+maintainers:
+  - Rob Herring <robh@xxxxxxxxxx>
+
+description: |
+  The Arm MPAM specification can be found here:
+
+  https://developer.arm.com/documentation/ddi0598/latest
+
+properties:
+  compatible:
+    oneOf:
+      - const: arm,mpam-msc                   # Further details
are discoverable
+      - items:
+          - const: arm,mpam-memory-controller-msc

Why do we need this?


Hi Rob,

Thanks for the review.

The 'arm,mpam-memory-controller-msc' compatible is needed because,
unlike cache MSCs, memory controller MSCs cannot rely on the parent node
to identify the resource type.

Cache controllers universally carry a 'cache' compatible, so the driver
can recognise any cache parent and derive the cache ID from standard
properties. No equivalent convention exists for memory controllers, and
the component ID comes from the MSC's own 'numa-node-id' rather than the
parent, so there is no parent attribute to rely on.


Hi Rob,

As a follow-up to my previous reply:
Whatever the outcome of the discussion on "arm_mpam: Add support for
memory controller MSC on DT platforms", we will keep the binding and
driver support consistent. If it's dropped, the
'arm,mpam-memory-controller-msc' compatible, 'numa-node-id' property, and
the memory controller example will be removed together.

Which parts are you actually using/needing and not using? If you don't
need RIS support, for example, we should drop it.


Hi Rob,

The Kaanapali DTS only uses 'arm,mpam-msc' nested under a cache node,
deriving type and affinity from the parent — following your earlier
suggestion. No RIS child nodes are used. However, this is not universally applicable. On most platforms, L2 cache nodes sit under CPU nodes, which do not provide an MMIO address space. Nesting an MSC there causes address translation failures. The Kaanapali DNM patch moves the cache nodes out of the CPU to work around this, which also has the benefit of making the MSC-cache parent relationship explicit in the device tree — though this is still an artificial arrangement for demonstration purposes.

In fact, if Kaanapali supported direct MMIO access to the MPAM
registers, it would also need to place the MSC independently and use
RIS with 'arm,mpam-device' to point to the L2 cache node under the
CPU — the same approach required on any platform where the cache
topology cannot be modified.

Therefore, apart from the memory controller MSC support, we believe
the remaining parts — including RIS — are needed on the Kaanapali
platform.

Thanks,
Yin


Rob

--
Thx and BRs,
Yin