From: Yin Li <yin.li@oss.qualcomm.com>
To: Rob Herring <robh@kernel.org>
Cc: "James Morse" <james.morse@arm.com>,
"Shanker Donthineni" <sdonthineni@nvidia.com>,
"Ben Horgan" <ben.horgan@arm.com>,
"Krzysztof Kozlowski" <krzk+dt@kernel.org>,
"Conor Dooley" <conor+dt@kernel.org>,
"Catalin Marinas" <catalin.marinas@arm.com>,
"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
"Rafael J. Wysocki" <rafael@kernel.org>,
"Danilo Krummrich" <dakr@kernel.org>,
"Reinette Chatre" <reinette.chatre@intel.com>,
"Fenghua Yu" <fenghuay@nvidia.com>,
"Jonathan Cameron" <jic23@kernel.org>,
"Bjorn Andersson" <andersson@kernel.org>,
"Konrad Dybcio" <konradybcio@kernel.org>,
"Gavin Shan" <gshan@redhat.com>,
"Andre Przywara" <andre.przywara@arm.com>,
"Drew Fustini" <fustini@kernel.org>,
"Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>,
"Shaopeng Tan" <tan.shaopeng@jp.fujitsu.com>,
trilok.soni@oss.qualcomm.com, aiqun.yu@oss.qualcomm.com,
ganapatrao.kulkarni@oss.qualcomm.com,
"Srivathsa L Rao" <srivathsa.rao@oss.qualcomm.com>,
"Huang Yiwei" <huang.yiwei@oss.qualcomm.com>,
linux-arm-kernel@lists.infradead.org,
linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org,
driver-core@lists.linux.dev, devicetree@vger.kernel.org
Subject: Re: [PATCH v3 6/8] arm_mpam: Add support for memory controller MSC on DT platforms
Date: Mon, 12 Oct 2026 18:11:12 +0800 [thread overview]
Message-ID: <e25158f9-9fda-4561-8bb0-d05a21f420e2@oss.qualcomm.com> (raw)
In-Reply-To: <20261008212904.GA1450868-robh@kernel.org>
On 10/9/2026 5:29 AM, Rob Herring wrote:
> On Thu, Oct 08, 2026 at 02:41:15PM +0800, Yin Li wrote:
>> From: Shanker Donthineni <sdonthineni@nvidia.com>
>>
>> The MPAM DT path only handles cache MSCs. Memory-controller MSCs
>> cannot be probed yet.
>>
>> Add support to discover memory-controller MSCs from the device tree:
>> derive the component id from the NUMA node and create a 'memory' class
>> RIS, and treat a memory parent as accessible from all CPUs.
>
> Where's an actual user?
>
Hi Rob,
The Kaanapali platform in this series only uses cache MSCs. This patch
is inherited from Shanker and James's work; They may have a platform in
mind, but we do not have one to point to at the moment.
The binding already includes 'arm,mpam-memory-controller-msc' and the
corresponding example, so if the driver support is dropped the binding
entry should go too, to keep the two consistent.
We are happy to drop both. Shanker, James, please let us know if you
have a platform that needs this before we do.
Thanks,
Yin
>> Signed-off-by: Shanker Donthineni <sdonthineni@nvidia.com>
>> [ morse: split out of a bigger patch, added affinity piece ]
>> Signed-off-by: James Morse <james.morse@arm.com>
>> [ Yin Li: fix context offset conflicts; use of_node_get() for the memory
>> parent to avoid a refcount underflow; use u32 instead of unsigned long
>> for component_id and compare against ~0U ]
>> Signed-off-by: Yin Li <yin.li@oss.qualcomm.com>
>> ---
>> drivers/resctrl/mpam_devices.c | 55 ++++++++++++++++++++++++++++++------------
>> 1 file changed, 40 insertions(+), 15 deletions(-)
>>
>> diff --git a/drivers/resctrl/mpam_devices.c b/drivers/resctrl/mpam_devices.c
>> index 0640690eae2c..048d32e69f55 100644
>> --- a/drivers/resctrl/mpam_devices.c
>> +++ b/drivers/resctrl/mpam_devices.c
>> @@ -263,10 +263,12 @@ static int mpam_dt_parse_resource(struct mpam_msc *msc, struct device_node *np,
>> u8 ris_idx)
>> {
>> int err = 0;
>> - u32 level = 0;
>> - u32 cache_id;
>> + u32 class_id = 0;
>> + u32 component_id = 0;
>> struct device *dev = &msc->pdev->dev;
>> + enum mpam_class_types type = MPAM_CLASS_UNKNOWN;
>> struct device_node *cache __free(device_node) = NULL;
>> + struct device_node *memory __free(device_node) = NULL;
>> struct device_node *parent __free(device_node) = of_get_parent(np);
>>
>> if (of_device_is_compatible(np, "arm,mpam-cache")) {
>> @@ -275,27 +277,48 @@ static int mpam_dt_parse_resource(struct mpam_msc *msc, struct device_node *np,
>> dev_err_once(dev, "Failed to read phandle\n");
>> return -EINVAL;
>> }
>> + type = MPAM_CLASS_CACHE;
>> +
>> } else if (of_device_is_compatible(parent, "cache")) {
>> cache = of_node_get(parent);
>> + type = MPAM_CLASS_CACHE;
>> + } else if (of_device_is_compatible(np, "arm,mpam-memory")) {
>> + memory = of_parse_phandle(np, "arm,mpam-device", 0);
>> + if (!memory) {
>> + dev_err_once(dev, "Failed to read phandle\n");
>> + return -EINVAL;
>> + }
>> + type = MPAM_CLASS_MEMORY;
>> + } else if (of_device_is_compatible(np, "arm,mpam-memory-controller-msc")) {
>> + memory = of_node_get(parent);
>> + type = MPAM_CLASS_MEMORY;
>> } else {
>> - /* For now, only caches are supported */
>> - cache = NULL;
>> - return err;
>> - }
>> -
>> - err = of_property_read_u32(cache, "cache-level", &level);
>> - if (err) {
>> - dev_err_once(dev, "Failed to read cache-level\n");
>> + /*
>> + * For now, only caches and memory controllers are
>> + * supported.
>> + */
>> return err;
>> }
>>
>> - cache_id = cache_of_calculate_id(cache);
>> - if (cache_id == ~0U) {
>> - dev_err_once(dev, "Failed to calculate cache-id\n");
>> - return -ENOENT;
>> + /* Determine the class and component ids, based on type. */
>> + if (type == MPAM_CLASS_CACHE) {
>> + err = of_property_read_u32(cache, "cache-level", &class_id);
>> + if (err) {
>> + dev_err_once(dev, "Failed to read cache-level\n");
>> + return err;
>> + }
>> + component_id = cache_of_calculate_id(cache);
>> + if (component_id == ~0U) {
>> + dev_err_once(dev, "Failed to calculate cache-id\n");
>> + return -ENOENT;
>> + }
>> + } else if (type == MPAM_CLASS_MEMORY) {
>> + err = of_node_to_nid(np);
>> + component_id = (err == NUMA_NO_NODE) ? 0 : err;
>> + class_id = MPAM_CLASS_ID_DEFAULT;
>> }
>>
>> - return mpam_ris_create(msc, ris_idx, MPAM_CLASS_CACHE, level, cache_id);
>> + return mpam_ris_create(msc, ris_idx, type, class_id, component_id);
>> }
>>
>> static int mpam_dt_parse_resources(struct mpam_msc *msc, void *ignored)
>> @@ -2169,6 +2192,8 @@ static void update_msc_accessibility(struct mpam_msc *msc)
>> } else {
>> if (of_device_is_compatible(parent, "cache"))
>> get_cpumask_from_cache(parent, &msc->accessibility);
>> + else if (of_device_is_compatible(parent, "memory"))
>> + cpumask_copy(&msc->accessibility, cpu_possible_mask);
>> else
>> dev_err_once(dev, "Cannot determine accessibility of MSC.\n");
>> }
>>
>> --
>> 2.34.1
>>
--
Thx and BRs,
Yin
next prev parent reply other threads:[~2026-10-12 10:11 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-08 6:41 [PATCH v3 0/8] arm-mpam: Add basic device tree support for resctrl Yin Li
2026-10-08 6:41 ` [PATCH v3 1/8] arm_mpam: Fix the RIS index range check in mpam_ris_create_locked Yin Li
2026-10-08 6:41 ` [PATCH v3 2/8] arm_mpam: Fix MSC MMIO window size off-by-one with resource_size() Yin Li
2026-10-08 6:41 ` [PATCH v3 3/8] dt-bindings: arm: Add MPAM MSC binding Yin Li
2026-10-08 21:27 ` Rob Herring
2026-10-12 7:05 ` Yin Li
2026-10-12 10:24 ` Yin Li
2026-10-08 6:41 ` [PATCH v3 4/8] cacheinfo: Expose the code to generate a cache-id from a device_node Yin Li
2026-10-08 6:41 ` [PATCH v3 5/8] arm_mpam: Add device tree support for MSC probing Yin Li
2026-10-08 6:41 ` [PATCH v3 6/8] arm_mpam: Add support for memory controller MSC on DT platforms Yin Li
2026-10-08 21:29 ` Rob Herring
2026-10-12 10:11 ` Yin Li [this message]
2026-10-08 6:41 ` [PATCH v3 7/8] arm_mpam: Support MSC accessibility derivation from RIS nodes Yin Li
2026-10-08 6:41 ` [PATCH DNM v3 8/8] arm64: dts: qcom: kaanapali: Add MPAM MSC nodes for the L2 caches Yin Li
2026-10-08 21:00 ` Rob Herring
2026-10-12 10:48 ` Yin Li
2026-10-12 11:27 ` Ben Horgan
2026-10-13 10:13 ` Yin Li
2026-10-13 10:37 ` Ben Horgan
2026-10-13 10:54 ` Konrad Dybcio
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=e25158f9-9fda-4561-8bb0-d05a21f420e2@oss.qualcomm.com \
--to=yin.li@oss.qualcomm.com \
--cc=aiqun.yu@oss.qualcomm.com \
--cc=andersson@kernel.org \
--cc=andre.przywara@arm.com \
--cc=ben.horgan@arm.com \
--cc=catalin.marinas@arm.com \
--cc=conor+dt@kernel.org \
--cc=dakr@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=driver-core@lists.linux.dev \
--cc=fenghuay@nvidia.com \
--cc=fustini@kernel.org \
--cc=ganapatrao.kulkarni@oss.qualcomm.com \
--cc=gregkh@linuxfoundation.org \
--cc=gshan@redhat.com \
--cc=huang.yiwei@oss.qualcomm.com \
--cc=ilpo.jarvinen@linux.intel.com \
--cc=james.morse@arm.com \
--cc=jic23@kernel.org \
--cc=konradybcio@kernel.org \
--cc=krzk+dt@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=rafael@kernel.org \
--cc=reinette.chatre@intel.com \
--cc=robh@kernel.org \
--cc=sdonthineni@nvidia.com \
--cc=srivathsa.rao@oss.qualcomm.com \
--cc=tan.shaopeng@jp.fujitsu.com \
--cc=trilok.soni@oss.qualcomm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®