From patchwork Thu Apr 10 22:32:04 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tony Luck X-Patchwork-Id: 879771 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.13]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BBE381E1041; Thu, 10 Apr 2025 22:32:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.13 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744324340; cv=none; b=GdUA4MaFAW22bSwNA9hcha+x9vqVs8664qEr1b4dPIeP2BIrdgC/5v4/MYrUcNZWEi9qxUHCZ/8njmVZup524W7og4FkFW37jVGnfmsQsXbPS8p6cyV09rkzHz3EBgWAZt1NQYIf+elih/v4Hjdwe/cLvpObGbpXtl7Za9v16Pk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744324340; c=relaxed/simple; bh=je4PX87/pOXLlsfa4Mz89lMVrtgvdaQj3AqWmieL8Qo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=o7/LPhGCjDZk4j8UmtENd6Rgo/Xak9oDwj+dzAT5Ft8ny/AVNKB5nARcNOeRiWBhOYB7ZWvAbrRfaW8xSd/oWgzfc/52HXRUdvcA64X6a3o6WzywdOUfUL/QZnFnPLljFb2SM0yvnUT2NWO+vwRlOhZUlnfMpMdnFKZfkiW0Zys= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=nfH0WyLW; arc=none smtp.client-ip=198.175.65.13 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="nfH0WyLW" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1744324339; x=1775860339; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=je4PX87/pOXLlsfa4Mz89lMVrtgvdaQj3AqWmieL8Qo=; b=nfH0WyLWAeUi+eXX8J5LefWKf3UiraMv5Vq7lWmVdzoyf4Xgl8Xzc5yx PtvWV6rhMown1c72Y47b1N+dZN5jdDKma3DVnK4PJ/1uPFQWnxkAg4inf WcMTH28KqoPRK0mYftSt4uXHEXKxF9xURGhbZWmmFOkr6VSZ14SlpbL2K fsaFE+iYt6ocymlSUVgOuvaaV5DI4vDxylJ5vOIMpq6K8gR/57g3RWwqM 7sMvFX24evcY6DM2bSt5vsLoEWD3wR2Me3SKoMpdg0TJ2kryxOYAYRklj 9pax9rQtOKZM4+Hp760hG5J+vgsnaEHTxHgvtJPHH5ES0r7ulkcCeuu07 g==; X-CSE-ConnectionGUID: ewVe5Ey/TTCPdQ6HQ8fOdA== X-CSE-MsgGUID: EbCyHarRQEaNoYkzpR1uJg== X-IronPort-AV: E=McAfee;i="6700,10204,11400"; a="56845629" X-IronPort-AV: E=Sophos;i="6.15,203,1739865600"; d="scan'208";a="56845629" Received: from orviesa006.jf.intel.com ([10.64.159.146]) by orvoesa105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Apr 2025 15:32:17 -0700 X-CSE-ConnectionGUID: pQkjhSwaR1akJ5NHG91UNg== X-CSE-MsgGUID: JIu3knYsRFSfi/ixon2BAw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.15,203,1739865600"; d="scan'208";a="128988749" Received: from agluck-desk3.sc.intel.com ([172.25.222.70]) by orviesa006-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Apr 2025 15:32:16 -0700 From: Tony Luck To: rafael.j.wysocki@intel.com Cc: lenb@kernel.org, Anil Keshavamurthy , linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org, patches@lists.linux.dev, Tony Luck Subject: [PATCH v3 1/4] ACPICA: Define MRRM ACPI table Date: Thu, 10 Apr 2025 15:32:04 -0700 Message-ID: <20250410223207.257722-2-tony.luck@intel.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250410223207.257722-1-tony.luck@intel.com> References: <20250410223207.257722-1-tony.luck@intel.com> Precedence: bulk X-Mailing-List: linux-acpi@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Patch for reference, this has already been applied to https://github.com/acpica/acpica and will in due course make its way into Linux when the next ACPICA release is ported over. Signed-off-by: Tony Luck --- include/acpi/actbl1.h | 7 +++++++ include/acpi/actbl2.h | 42 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) diff --git a/include/acpi/actbl1.h b/include/acpi/actbl1.h index 387fc821703a..4cb36392e9e9 100644 --- a/include/acpi/actbl1.h +++ b/include/acpi/actbl1.h @@ -110,6 +110,13 @@ struct acpi_whea_header { u64 mask; /* Bitmask required for this register instruction */ }; +/* Larger subtable header (when Length can exceed 255) */ + +struct acpi_subtbl_hdr_16 { + u16 type; + u16 length; +}; + /* https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/acpitabl/ns-acpitabl-aspt_table */ #define ASPT_REVISION_ID 0x01 struct acpi_table_aspt { diff --git a/include/acpi/actbl2.h b/include/acpi/actbl2.h index 2e917a8f8bca..e7423db6e24b 100644 --- a/include/acpi/actbl2.h +++ b/include/acpi/actbl2.h @@ -37,6 +37,7 @@ #define ACPI_SIG_MCHI "MCHI" /* Management Controller Host Interface table */ #define ACPI_SIG_MPAM "MPAM" /* Memory System Resource Partitioning and Monitoring Table */ #define ACPI_SIG_MPST "MPST" /* Memory Power State Table */ +#define ACPI_SIG_MRRM "MRRM" /* Memory Range and Region Mapping table */ #define ACPI_SIG_MSDM "MSDM" /* Microsoft Data Management Table */ #define ACPI_SIG_NFIT "NFIT" /* NVDIMM Firmware Interface Table */ #define ACPI_SIG_NHLT "NHLT" /* Non HD Audio Link Table */ @@ -1736,6 +1737,47 @@ struct acpi_msct_proximity { u64 memory_capacity; /* In bytes */ }; +/******************************************************************************* + * + * MRRM - Memory Range and Region Mapping (MRRM) table + * Conforms to "Intel Resource Director Technology Architecture Specification" + * Version 1.1, January 2025 + * + ******************************************************************************/ + +struct acpi_table_mrrm { + struct acpi_table_header header; /* Common ACPI table header */ + u8 max_mem_region; /* Max Memory Regions supported */ + u8 flags; /* Region assignment type */ + u8 reserved[26]; + u8 memory_range_entry[]; +}; + +/* Flags */ +#define ACPI_MRRM_FLAGS_REGION_ASSIGNMENT_OS (1<<0) + +/******************************************************************************* + * + * Memory Range entry - Memory Range entry in MRRM table + * + ******************************************************************************/ + +struct acpi_mrrm_mem_range_entry { + struct acpi_subtbl_hdr_16 header; + u32 reserved0; /* Reserved */ + u64 addr_base; /* Base addr of the mem range */ + u64 addr_len; /* Length of the mem range */ + u16 region_id_flags; /* Valid local or remote Region-ID */ + u8 local_region_id; /* Platform-assigned static local Region-ID */ + u8 remote_region_id; /* Platform-assigned static remote Region-ID */ + u32 reserved1; /* Reserved */ + /* Region-ID Programming Registers[] */ +}; + +/* Values for region_id_flags above */ +#define ACPI_MRRM_VALID_REGION_ID_FLAGS_LOCAL (1<<0) +#define ACPI_MRRM_VALID_REGION_ID_FLAGS_REMOTE (1<<1) + /******************************************************************************* * * MSDM - Microsoft Data Management table From patchwork Thu Apr 10 22:32:05 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tony Luck X-Patchwork-Id: 880190 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.13]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 29D2A204F81; Thu, 10 Apr 2025 22:32:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.13 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744324340; cv=none; b=J5jQwHisk6ODGZXJAkzNC1FX9GTtXYgLf8T9IChtgISs80pH9XvYpoWW4qnIgNQ6UOY4BKUIM0Mdgl/owUS9xua9FrfZv7Z8WlBCY26KzAdbugm+GmA8RGD8b1/J5+lNTdmnyDuszzQHoyVODTvVBigPg622iV2pBFTmcHwvjek= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744324340; c=relaxed/simple; bh=L13SWnVs57xGYJxgwdRdph1jOjpiAExjEwjPMTGQvbY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ESBQ0YDvqts76pCy1nY1Sh1hqNUzoY1cQ5C/dM3uBIK+y04F/qO7u8tJCVDed+tt1QpEOB6aOZAdwNz0m6obif/M6s8ZvNa/ukEGVyMysEdx6P/x+bZmhZUabpQlgzpxF01c9kYx9l8yILWvbKZJAvc3f2dp1estj3XKRwvvUbY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=CC5pXv0r; arc=none smtp.client-ip=198.175.65.13 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="CC5pXv0r" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1744324339; x=1775860339; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=L13SWnVs57xGYJxgwdRdph1jOjpiAExjEwjPMTGQvbY=; b=CC5pXv0r9SkMnqFif59scprTAIBvlOYMLTlNDOnYR2VGinM8ZZC/sNA0 2AV4XaYXgf5MRoRCnt/Qm2RgHaqT3dXD92aJ4KRBYtllR+Qjp2CdWzNPM sOrYamjQvkwHIFe7htzr47jkR1jTODv7/lEhhdKLCWLwA8SYnGvkMB5Vo xpGIR9bW0v+bxll4UXPrDMjIOUWqxKUz7kl2VNPOnOsRPioLBMtsQdTJO VfYGVIgdlW7OySErPlVrSl7GuaMwrzDqP1B0s3zfuV0U2kxcz0J/Qev6B jP3tXYcTiyF+SURvr55t2y0gmlZN06scXW3G4EEkW7mLvHe73MGwVvIzn w==; X-CSE-ConnectionGUID: 5xMJO57hTh+kwtwv9dFuxA== X-CSE-MsgGUID: adLI8EhNTd6PrBQqPfeekA== X-IronPort-AV: E=McAfee;i="6700,10204,11400"; a="56845632" X-IronPort-AV: E=Sophos;i="6.15,203,1739865600"; d="scan'208";a="56845632" Received: from orviesa006.jf.intel.com ([10.64.159.146]) by orvoesa105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Apr 2025 15:32:17 -0700 X-CSE-ConnectionGUID: pI3RrV+xQjOxcURhMsy7Pw== X-CSE-MsgGUID: LAcaJ0tkQHWmMJCH8X2fRA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.15,203,1739865600"; d="scan'208";a="128988752" Received: from agluck-desk3.sc.intel.com ([172.25.222.70]) by orviesa006-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Apr 2025 15:32:16 -0700 From: Tony Luck To: rafael.j.wysocki@intel.com Cc: lenb@kernel.org, Anil Keshavamurthy , linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org, patches@lists.linux.dev, Tony Luck Subject: [PATCH v3 2/4] ACPI/MRRM: Minimal parse of ACPI MRRM table Date: Thu, 10 Apr 2025 15:32:05 -0700 Message-ID: <20250410223207.257722-3-tony.luck@intel.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250410223207.257722-1-tony.luck@intel.com> References: <20250410223207.257722-1-tony.luck@intel.com> Precedence: bulk X-Mailing-List: linux-acpi@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 The resctrl file system code needs to know how many region tags are supported. Parse the ACPI MRRM table and save the max_mem_region value. Provide a function for resctrl to collect that value. Signed-off-by: Tony Luck --- include/linux/acpi.h | 6 ++++++ drivers/acpi/acpi_mrrm.c | 42 ++++++++++++++++++++++++++++++++++++++++ arch/x86/Kconfig | 1 + drivers/acpi/Kconfig | 3 +++ drivers/acpi/Makefile | 1 + 5 files changed, 53 insertions(+) create mode 100644 drivers/acpi/acpi_mrrm.c diff --git a/include/linux/acpi.h b/include/linux/acpi.h index 3f2e93ed9730..24aa7a0ae272 100644 --- a/include/linux/acpi.h +++ b/include/linux/acpi.h @@ -772,6 +772,12 @@ int acpi_get_local_u64_address(acpi_handle handle, u64 *addr); int acpi_get_local_address(acpi_handle handle, u32 *addr); const char *acpi_get_subsystem_id(acpi_handle handle); +#ifdef CONFIG_ACPI_MRRM +int acpi_mrrm_max_mem_region(void); +#else +static inline int acpi_mrrm_max_mem_region(void) { return -ENOENT; } +#endif + #else /* !CONFIG_ACPI */ #define acpi_disabled 1 diff --git a/drivers/acpi/acpi_mrrm.c b/drivers/acpi/acpi_mrrm.c new file mode 100644 index 000000000000..ab8022e58da5 --- /dev/null +++ b/drivers/acpi/acpi_mrrm.c @@ -0,0 +1,42 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (c) 2025, Intel Corporation. + * + * Memory Range and Region Mapping (MRRM) structure + */ + +#define pr_fmt(fmt) "acpi/mrrm: " fmt + +#include +#include + +static int max_mem_region = -ENOENT; + +/* Access for use by resctrl file system */ +int acpi_mrrm_max_mem_region(void) +{ + return max_mem_region; +} + +static __init int acpi_parse_mrrm(struct acpi_table_header *table) +{ + struct acpi_table_mrrm *mrrm; + + mrrm = (struct acpi_table_mrrm *)table; + if (!mrrm) + return -ENODEV; + + max_mem_region = mrrm->max_mem_region; + + return 0; +} + +static __init int mrrm_init(void) +{ + int ret; + + ret = acpi_table_parse(ACPI_SIG_MRRM, acpi_parse_mrrm); + + return ret; +} +device_initcall(mrrm_init); diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index 4b9f378e05f6..0e43069082df 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -38,6 +38,7 @@ config X86_64 select ARCH_HAS_ELFCORE_COMPAT select ZONE_DMA32 select EXECMEM if DYNAMIC_FTRACE + select ACPI_MRRM if ACPI config FORCE_DYNAMIC_FTRACE def_bool y diff --git a/drivers/acpi/Kconfig b/drivers/acpi/Kconfig index 7f10aa38269d..7bc40c2735ac 100644 --- a/drivers/acpi/Kconfig +++ b/drivers/acpi/Kconfig @@ -576,6 +576,9 @@ config ACPI_FFH Enable this feature if you want to set up and install the FFH Address Space handler to handle FFH OpRegion in the firmware. +config ACPI_MRRM + bool + source "drivers/acpi/pmic/Kconfig" config ACPI_VIOT diff --git a/drivers/acpi/Makefile b/drivers/acpi/Makefile index 797070fc9a3f..d1b0affb844f 100644 --- a/drivers/acpi/Makefile +++ b/drivers/acpi/Makefile @@ -66,6 +66,7 @@ acpi-$(CONFIG_ACPI_WATCHDOG) += acpi_watchdog.o acpi-$(CONFIG_ACPI_PRMT) += prmt.o acpi-$(CONFIG_ACPI_PCC) += acpi_pcc.o acpi-$(CONFIG_ACPI_FFH) += acpi_ffh.o +acpi-$(CONFIG_ACPI_MRRM) += acpi_mrrm.o # Address translation acpi-$(CONFIG_ACPI_ADXL) += acpi_adxl.o From patchwork Thu Apr 10 22:32:06 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tony Luck X-Patchwork-Id: 879770 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.13]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9B32220E33F; Thu, 10 Apr 2025 22:32:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.13 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744324342; cv=none; b=hVR4SwXzWRnHMNxQwEO8mE5v2PQWypSvrIMlaHfZhxcMSTspNZPl2xb0mjY7h5zZq193RAUqNgtDWFv2y8ci6P1WHl8KVqmvy488Suc92OLU/znU4ATksaaO0lxUih1V8+VD1svu2CQ+9ecQTXDwuRbVQFYdOEpTqRixnqxhIdw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744324342; c=relaxed/simple; bh=1j1mdJXfx0wueebPZ05boLFylytFBjvR89Q6vMiokl0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=i0bwOyWdwJAEUO2X6uvJpIT2YbT3rVbeGd9qo142Kd9UxFvDW1e2YJ0Ox3+IclUDJhDH1Ri46sxI4mJ2zyslS4LgnGDLvVUQGOUuZYWUGyykkBnY332CCuWxPFeabYLiL/zQ3lk4+DYb5mFv8BYpTnOTQ5RN2XiebqC3DbSUJHk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=L5DPWtMx; arc=none smtp.client-ip=198.175.65.13 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="L5DPWtMx" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1744324341; x=1775860341; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=1j1mdJXfx0wueebPZ05boLFylytFBjvR89Q6vMiokl0=; b=L5DPWtMxWwG0ar+Ad5RTBeyDKGUyLeJRIY2nb6o7Q9h3tNLmAKa+xMQd bHGxpHat2G7XKGMl8QlXCMmokG6WomkFxloEGCjqr28LUumWBAXOI92Jk JFk1Y0VT2FPPVMAPKv9b5o48Zd9coSNvF1bWQJQj74kxPv2aN69Eniryu WgSWuasdSbG7Eyba/i0JCu2uTgF7lRtCDp0XHB8W09H5z/jsfzIuQpfar nMmwORC5dE+uGhzOv+m//oVz6vmj7vFbiQAPX3VT/FY80o5XUUYnIxQbx h+Mm7E2qRyMapKF08b48oL8/dNP8LPR7lOG9n14dh7JM4WwLf7kTnmhak A==; X-CSE-ConnectionGUID: v5BX23BnQKqmVPpC6KCbRg== X-CSE-MsgGUID: 1ze1pCtFScu7NnHyt8pajg== X-IronPort-AV: E=McAfee;i="6700,10204,11400"; a="56845635" X-IronPort-AV: E=Sophos;i="6.15,203,1739865600"; d="scan'208";a="56845635" Received: from orviesa006.jf.intel.com ([10.64.159.146]) by orvoesa105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Apr 2025 15:32:17 -0700 X-CSE-ConnectionGUID: 99VlDKOnTD2C3YIi54+vrw== X-CSE-MsgGUID: 5JmEZIZ1TV+kEiAbNkvQ2w== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.15,203,1739865600"; d="scan'208";a="128988756" Received: from agluck-desk3.sc.intel.com ([172.25.222.70]) by orviesa006-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Apr 2025 15:32:17 -0700 From: Tony Luck To: rafael.j.wysocki@intel.com Cc: lenb@kernel.org, Anil Keshavamurthy , linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org, patches@lists.linux.dev, Tony Luck Subject: [PATCH v3 3/4] ACPI/MRRM: Add /sys files to describe memory ranges Date: Thu, 10 Apr 2025 15:32:06 -0700 Message-ID: <20250410223207.257722-4-tony.luck@intel.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250410223207.257722-1-tony.luck@intel.com> References: <20250410223207.257722-1-tony.luck@intel.com> Precedence: bulk X-Mailing-List: linux-acpi@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Perf and resctrl users need an enumeration of which memory addresses are bound to which "region" tag. Parse the ACPI MRRM table and add /sys entries for each memory range describing base address, length, NUMA node, and which region tags apply for same-socket and cross-socket access. Signed-off-by: Tony Luck --- drivers/acpi/acpi_mrrm.c | 145 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 144 insertions(+), 1 deletion(-) diff --git a/drivers/acpi/acpi_mrrm.c b/drivers/acpi/acpi_mrrm.c index ab8022e58da5..9d8d332d383e 100644 --- a/drivers/acpi/acpi_mrrm.c +++ b/drivers/acpi/acpi_mrrm.c @@ -3,12 +3,16 @@ * Copyright (c) 2025, Intel Corporation. * * Memory Range and Region Mapping (MRRM) structure + * + * Parse and report the platform's MRRM table in /sys. */ #define pr_fmt(fmt) "acpi/mrrm: " fmt #include #include +#include +#include static int max_mem_region = -ENOENT; @@ -18,25 +22,164 @@ int acpi_mrrm_max_mem_region(void) return max_mem_region; } +struct mrrm_mem_range_entry { + u64 base; + u64 length; + int node; + u8 local_region_id; + u8 remote_region_id; +}; + +static struct mrrm_mem_range_entry *mrrm_mem_range_entry; +static u32 mrrm_mem_entry_num; + +static int get_node_num(struct mrrm_mem_range_entry *e) +{ +#ifdef CONFIG_NUMA + unsigned int nid; + + for_each_online_node(nid) { + for (int z = 0; z < MAX_NR_ZONES; z++) { + struct zone *zone = NODE_DATA(nid)->node_zones + z; + + if (!populated_zone(zone)) + continue; + if (zone_intersects(zone, PHYS_PFN(e->base), PHYS_PFN(e->length))) + return zone->node; + } + } +#endif + + return -ENOENT; +} + static __init int acpi_parse_mrrm(struct acpi_table_header *table) { + struct acpi_mrrm_mem_range_entry *mre_entry; struct acpi_table_mrrm *mrrm; + void *mre, *mrrm_end; + int mre_count = 0; mrrm = (struct acpi_table_mrrm *)table; if (!mrrm) return -ENODEV; + if (mrrm->flags & ACPI_MRRM_FLAGS_REGION_ASSIGNMENT_OS) + return -EOPNOTSUPP; + + mrrm_end = (void *)mrrm + mrrm->header.length - 1; + mre = (void *)mrrm + sizeof(struct acpi_table_mrrm); + while (mre < mrrm_end) { + mre_entry = mre; + mre_count++; + mre += mre_entry->header.length; + } + if (!mre_count) { + pr_info(FW_BUG "No ranges listed in MRRM table\n"); + return -EINVAL; + } + + mrrm_mem_range_entry = kmalloc_array(mre_count, sizeof(*mrrm_mem_range_entry), + GFP_KERNEL | __GFP_ZERO); + if (!mrrm_mem_range_entry) + return -ENOMEM; + + mre = (void *)mrrm + sizeof(struct acpi_table_mrrm); + while (mre < mrrm_end) { + struct mrrm_mem_range_entry *e; + + mre_entry = mre; + e = mrrm_mem_range_entry + mrrm_mem_entry_num; + + e->base = mre_entry->addr_base; + e->length = mre_entry->addr_len; + e->node = get_node_num(e); + + if (mre_entry->region_id_flags & ACPI_MRRM_VALID_REGION_ID_FLAGS_LOCAL) + e->local_region_id = mre_entry->local_region_id; + else + e->local_region_id = -1; + if (mre_entry->region_id_flags & ACPI_MRRM_VALID_REGION_ID_FLAGS_REMOTE) + e->remote_region_id = mre_entry->remote_region_id; + else + e->remote_region_id = -1; + + mrrm_mem_entry_num++; + mre += mre_entry->header.length; + } + max_mem_region = mrrm->max_mem_region; return 0; } +#define RANGE_ATTR(name, fmt) \ +static ssize_t name##_show(struct kobject *kobj, \ + struct kobj_attribute *attr, char *buf) \ +{ \ + struct mrrm_mem_range_entry *mre; \ + const char *kname = kobject_name(kobj); \ + int n, ret; \ + \ + ret = kstrtoint(kname + 5, 10, &n); \ + if (ret) \ + return ret; \ + \ + mre = mrrm_mem_range_entry + n; \ + \ + return sysfs_emit(buf, fmt, mre->name); \ +} \ +static struct kobj_attribute name##_attr = __ATTR_RO(name) + +RANGE_ATTR(base, "0x%llx\n"); +RANGE_ATTR(length, "0x%llx\n"); +RANGE_ATTR(node, "%d\n"); +RANGE_ATTR(local_region_id, "%d\n"); +RANGE_ATTR(remote_region_id, "%d\n"); + +static struct attribute *memory_range_attrs[] = { + &base_attr.attr, + &length_attr.attr, + &node_attr.attr, + &local_region_id_attr.attr, + &remote_region_id_attr.attr, + NULL +}; + +ATTRIBUTE_GROUPS(memory_range); + +static __init int add_boot_memory_ranges(void) +{ + struct kobject *pkobj, *kobj; + int ret = -EINVAL; + char *name; + + pkobj = kobject_create_and_add("memory_ranges", acpi_kobj); + + for (int i = 0; i < mrrm_mem_entry_num; i++) { + name = kasprintf(GFP_KERNEL, "range%d", i); + if (!name) + break; + + kobj = kobject_create_and_add(name, pkobj); + + ret = sysfs_create_groups(kobj, memory_range_groups); + if (ret) + return ret; + } + + return ret; +} + static __init int mrrm_init(void) { int ret; ret = acpi_table_parse(ACPI_SIG_MRRM, acpi_parse_mrrm); - return ret; + if (ret < 0) + return ret; + + return add_boot_memory_ranges(); } device_initcall(mrrm_init); From patchwork Thu Apr 10 22:32:07 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tony Luck X-Patchwork-Id: 880189 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.13]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F332320FA90; Thu, 10 Apr 2025 22:32:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.13 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744324342; cv=none; b=Expc+wkJ6q+44Iw8CIByOUZekQPxtOH6lAXkio6SlEh6GdaaDVl9OgMk2CE+7OucVAH/obRuuWs1yXWp9qfaa2d6YnTfTvTCDRl8GkLY8/euF94zut3yAV1pz8XyMV01qur1KZoSKEn/qnDWtJ9doft2oHR6noycOioMpQtP5oE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744324342; c=relaxed/simple; bh=Mzf4z3JjeUDeBLBOc9nbGSbBtSvIhz9Znl+rjIhT6PU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=X0WnvHbe2uc5yE5q4bLGp/H3Y8aX+H8BeFDFWl4+toD9jLuKplMNP0+jNhimjerIN2N+uyP3JwIczPr5PUiNvIUVUBZuCigccyamihYQdKYnikVzsjwouOHTwFKYbKnUNj8G3REHlya+245ujWPB6/eC0TamXGF3egkz3MSxlYY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=EtI3RCGe; arc=none smtp.client-ip=198.175.65.13 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="EtI3RCGe" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1744324341; x=1775860341; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=Mzf4z3JjeUDeBLBOc9nbGSbBtSvIhz9Znl+rjIhT6PU=; b=EtI3RCGet/fs3FICqRpUf5Qe3vFbvLErMH4thHkpfBQA+6+qkTlOsHwr zLW/X+RJ8zyriF0jfopST50AnXHbI4u/qs/qsxYROj0ZQCV5tgYv1UxFd ydnOrh5Jfti6zQQ45z8gegH87HI8DjoFVLZCWJRlCh21G6xhbPfDNa1tz tMt9u4d4cT36sN7/z/cOGm9YowjsVHhfN2YktRMFdv8v4rMy98tDKQapI 0aMtOYe6ogJHYMlrmS/aktYrr5Esp/S1H4iqudZLbwhKEMVTBD4Xe2Yzs nUm5BtUYbr+YDf6WfKerKsIokCSzmSRoR08yFz8lklhg3FGde5ch0swW3 g==; X-CSE-ConnectionGUID: DVNr+4zcSseG1Lotvv/kZA== X-CSE-MsgGUID: 8ojcstYsSFGRCSlQ6yKStA== X-IronPort-AV: E=McAfee;i="6700,10204,11400"; a="56845638" X-IronPort-AV: E=Sophos;i="6.15,203,1739865600"; d="scan'208";a="56845638" Received: from orviesa006.jf.intel.com ([10.64.159.146]) by orvoesa105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Apr 2025 15:32:17 -0700 X-CSE-ConnectionGUID: gl2gaP72QhigRiB89MR90g== X-CSE-MsgGUID: zaO7X4RmSwSvUMSd1VjGkA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.15,203,1739865600"; d="scan'208";a="128988759" Received: from agluck-desk3.sc.intel.com ([172.25.222.70]) by orviesa006-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Apr 2025 15:32:17 -0700 From: Tony Luck To: rafael.j.wysocki@intel.com Cc: lenb@kernel.org, Anil Keshavamurthy , linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org, patches@lists.linux.dev, Tony Luck Subject: [PATCH v3 4/4] ACPI: Add documentation for exposing MRRM data Date: Thu, 10 Apr 2025 15:32:07 -0700 Message-ID: <20250410223207.257722-5-tony.luck@intel.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250410223207.257722-1-tony.luck@intel.com> References: <20250410223207.257722-1-tony.luck@intel.com> Precedence: bulk X-Mailing-List: linux-acpi@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Initial implementation provides enumeration of the address ranges NUMA node numbers, and BIOS assigned region IDs for each range. Signed-off-by: Tony Luck --- Documentation/ABI/testing/sysfs-firmware-acpi | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/Documentation/ABI/testing/sysfs-firmware-acpi b/Documentation/ABI/testing/sysfs-firmware-acpi index 5249ad5a96d9..fffba38f9ce1 100644 --- a/Documentation/ABI/testing/sysfs-firmware-acpi +++ b/Documentation/ABI/testing/sysfs-firmware-acpi @@ -248,3 +248,24 @@ Description: # cat ff_pwr_btn 7 enabled +What: /sys/firmware/acpi/memory_ranges/rangeX +Date: February 2025 +Contact: Tony Luck +Description: + On systems with the ACPI MRRM table reports the + parameters for each range. + + base: Starting system physical address. + + length: Length of this range in bytes. + + node: NUMA node that this range belongs to. Negative numbers + indicate that the node number could not be determined (e.g + for an address range that is reserved for future hot add of + memory). + + local_region_id: ID associated with access by agents + local to this range of addresses. + + remote_region_id: ID associated with access by agents + non-local to this range of addresses.