[<prev] [next>] [day] [month] [year] [list]
Message-ID: <20251119150017.GA3900937@marvell-OptiPlex-7090>
Date: Wed, 19 Nov 2025 20:30:17 +0530
From: Amit Singh Tomar <amitsinght@...vell.com>
To: Ben Horgan <ben.horgan@....com>
CC: <james.morse@....com>, <baisheng.gao@...soc.com>,
<baolin.wang@...ux.alibaba.com>, <bobo.shaobowang@...wei.com>,
<carl@...amperecomputing.com>, <catalin.marinas@....com>,
<dakr@...nel.org>, <dave.martin@....com>, <david@...hat.com>,
<dfustini@...libre.com>, <fenghuay@...dia.com>,
<gregkh@...uxfoundation.org>, <gshan@...hat.com>,
<guohanjun@...wei.com>, <jeremy.linton@....com>,
<jonathan.cameron@...wei.com>, <kobak@...dia.com>,
<lcherian@...vell.com>, <lenb@...nel.org>,
<linux-acpi@...r.kernel.org>, <linux-arm-kernel@...ts.infradead.org>,
<linux-kernel@...r.kernel.org>, <lpieralisi@...nel.org>,
<peternewman@...gle.com>, <quic_jiles@...cinc.com>,
<rafael@...nel.org>, <robh@...nel.org>, <rohit.mathew@....com>,
<scott@...amperecomputing.com>, <sdonthineni@...dia.com>,
<sudeep.holla@....com>, <tan.shaopeng@...itsu.com>, <will@...nel.org>,
<xhao@...ux.alibaba.com>, <reinette.chatre@...el.com>
Subject: Re: [PATCH v6 00/34] arm_mpam: Add basic mpam driver
Hi Ben,
On 2025-11-19 at 17:52:30, Ben Horgan (ben.horgan@....com) wrote:
> Hi all,
>
> Just a handful of minor changes based on v5 review comments. See individual
> patches for change lgos. I haven't asked James to host any branches for this
> revision but please let me know if this would be helpful to anyone. Thanks for
> all the help with reviews and testing.
>
> Previous cover letter from James:
>
> This is just enough MPAM driver for ACPI. DT got ripped out. If you need DT
> support - please share your DTS so the DT folk know the binding is what is
> needed.
> This doesn't contain any of the resctrl code, meaning you can't actually drive it
> from user-space yet. Because of that, its hidden behind CONFIG_EXPERT.
> This will change once the user interface is connected up.
>
> This is the initial group of patches that allows the resctrl code to be built
> on top. Including that will increase the number of trees that may need to
> coordinate, so breaking it up make sense.
>
> The locking got simplified, but is still strange - this is because of the 'mpam-fb'
> firmware interface specification that is still alpha. That thing needs to wait for
> an interrupt after every system register write, which significantly impacts the
> driver. Some features just won't work, e.g. reading the monitor registers via
> perf.
>
> I've not found a platform that can test all the behaviours around the monitors,
> so this is where I'd expect the most bugs.
>
> The MPAM spec that describes all the system and MMIO registers can be found here:
> https://developer.arm.com/documentation/ddi0598/db/?lang=en
> (Ignored the 'RETIRED' warning - that is just arm moving the documentation around.
> This document has the best overview)
>
> The expectation is this will go via the arm64 tree.
>
> This series is based on v6.18-rc4, and can be retrieved from: (no v6 version)
> https://git.kernel.org/pub/scm/linux/kernel/git/morse/linux.git mpam/driver/v5
>
> The rest of the driver can be found here: (no v6 version)
> https://git.kernel.org/pub/scm/linux/kernel/git/morse/linux.git mpam/snapshot/v6.18-rc4-v5
Booted it on the MARVELL OCTEON 10 platform, and confirmed that MPAM is enabled properly with:
~ # dmesg | grep -i mpam
[ 0.000000] ACPI: MPAM 0x0000000BF826FA98 0002C4 (v01 MRVL CN106 00000001 MRVL 00000001)
[ 8.868206] MPAM enabled with 64 PARTIDs and 1 PMGs
Tested-by: Amit Singh Tomar <amitsinght@...vell.com>
However, while testing DDR bandwidth partitioning (based on mpam/snapshot/v6.18-rc4-v5),
seeing behaviour that doesn’t look consistent with how MPAMCFG_MBW_MIN and
MPAMCFG_MBW_MAX should relate.
For instance, when assigning 10% BW to a partition, the value programmed into
MPAMCFG_MBW_MIN ends up higher than the value in MPAMCFG_MBW_MAX. But MBW_MIN
should always be lower than MBW_MAX, correct? If not, the MPAM resctrl side
likely needs a fix?
~ # cat > bw.sh
mount -t resctrl resctrl /sys/fs/resctrl
cd /sys/fs/resctrl
mkdir p1
cd p1
echo fff > cpus
echo "MB:1=10" > schemata
^C
~ # chmod +x bw.sh
~ # ./bw.sh
~ # devmem MPAMCFG_MBW_MAX 32
0x00001900
~ # devmem MPAMCFG_MBW_MIN 32
0x0000F200
>
> What is MPAM? Set your time-machine to 2020:
> https://lore.kernel.org/lkml/20201030161120.227225-1-james.morse@arm.com/
>
> Ben Horgan (5):
> ACPI / PPTT: Add acpi_pptt_cache_v1_full to use pptt cache as one
> structure
> platform: Define platform_device_put cleanup handler
> ACPI: Define acpi_put_table cleanup handler and
> acpi_get_table_pointer() helper
> arm_mpam: Consider overflow in bandwidth counter state
> MAINTAINERS: new entry for MPAM Driver
>
> James Morse (27):
> ACPI / PPTT: Add a helper to fill a cpumask from a processor container
> ACPI / PPTT: Stop acpi_count_levels() expecting callers to clear
> levels
> ACPI / PPTT: Find cache level by cache-id
> ACPI / PPTT: Add a helper to fill a cpumask from a cache_id
> arm64: kconfig: Add Kconfig entry for MPAM
> ACPI / MPAM: Parse the MPAM table
> arm_mpam: Add probe/remove for mpam msc driver and kbuild boiler plate
> arm_mpam: Add the class and component structures for firmware
> described ris
> arm_mpam: Add MPAM MSC register layout definitions
> arm_mpam: Add cpuhp callbacks to probe MSC hardware
> arm_mpam: Probe hardware to find the supported partid/pmg values
> arm_mpam: Add helpers for managing the locking around the mon_sel
> registers
> arm_mpam: Probe the hardware features resctrl supports
> arm_mpam: Merge supported features during mpam_enable() into
> mpam_class
> arm_mpam: Reset MSC controls from cpuhp callbacks
> arm_mpam: Add a helper to touch an MSC from any CPU
> arm_mpam: Extend reset logic to allow devices to be reset any time
> arm_mpam: Register and enable IRQs
> arm_mpam: Use a static key to indicate when mpam is enabled
> arm_mpam: Allow configuration to be applied and restored during cpu
> online
> arm_mpam: Probe and reset the rest of the features
> arm_mpam: Add helpers to allocate monitors
> arm_mpam: Add mpam_msmon_read() to read monitor value
> arm_mpam: Track bandwidth counter state for power management
> arm_mpam: Add helper to reset saved mbwu state
> arm_mpam: Add kunit test for bitmap reset
> arm_mpam: Add kunit tests for props_mismatch()
>
> Rohit Mathew (2):
> arm_mpam: Probe for long/lwd mbwu counters
> arm_mpam: Use long MBWU counters if supported
>
> MAINTAINERS | 10 +
> arch/arm64/Kconfig | 25 +
> drivers/Kconfig | 2 +
> drivers/Makefile | 1 +
> drivers/acpi/arm64/Kconfig | 3 +
> drivers/acpi/arm64/Makefile | 1 +
> drivers/acpi/arm64/mpam.c | 411 ++++
> drivers/acpi/pptt.c | 280 ++-
> drivers/acpi/tables.c | 2 +-
> drivers/resctrl/Kconfig | 24 +
> drivers/resctrl/Makefile | 4 +
> drivers/resctrl/mpam_devices.c | 2723 +++++++++++++++++++++++++++
> drivers/resctrl/mpam_internal.h | 658 +++++++
> drivers/resctrl/test_mpam_devices.c | 389 ++++
> include/linux/acpi.h | 26 +
> include/linux/arm_mpam.h | 66 +
> include/linux/platform_device.h | 1 +
> 17 files changed, 4608 insertions(+), 18 deletions(-)
> create mode 100644 drivers/acpi/arm64/mpam.c
> create mode 100644 drivers/resctrl/Kconfig
> create mode 100644 drivers/resctrl/Makefile
> create mode 100644 drivers/resctrl/mpam_devices.c
> create mode 100644 drivers/resctrl/mpam_internal.h
> create mode 100644 drivers/resctrl/test_mpam_devices.c
> create mode 100644 include/linux/arm_mpam.h
>
> --
> 2.43.0
>
Powered by blists - more mailing lists