From patchwork Sun Apr 13 22:52:13 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ira Weiny X-Patchwork-Id: 14049461 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.18]) (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 088F919C558 for ; Sun, 13 Apr 2025 22:52:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=192.198.163.18 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744584725; cv=fail; b=NakTxLkhTvNWZLvcCeHCgKX9ryGaNWcQ56TTv6xGqC4NzY/2rfoT6mBV7g2mUL8BBXC21xWOTgsYPnN+nlARJz0T1YZQRzVk1uUvc9fAFuPcigglDpFvBVRS99ivIt0Pxewkq7XTPlpAlDB4jesNLg3EIu7qymfoWAXv2+xAFTU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744584725; c=relaxed/simple; bh=TdJg89owSQ09YHez2+5qf+RnBC3Budv6uZ6C5fSYAY0=; h=From:Date:Subject:Content-Type:Message-ID:References:In-Reply-To: To:CC:MIME-Version; b=CD3EGM4xodYY9pisEb4dxl5SLlZ1hBqoW5eVe3szNo9MZ+Dqxy6/5usnH1+l+RpnrtcusbGAFEPn/Zc9vUOWgEJDyemP5vG1YNQCG4XCfQ2l8DRzsy0Xr/9P+DmvLnibC5hhjAWzKfhBXF5Oxa9cnZJCEmdJoJbGOjL9FUFpDgU= ARC-Authentication-Results: i=2; 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=hYffbEKi; arc=fail smtp.client-ip=192.198.163.18 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="hYffbEKi" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1744584723; x=1776120723; h=from:date:subject:content-transfer-encoding:message-id: references:in-reply-to:to:cc:mime-version; bh=TdJg89owSQ09YHez2+5qf+RnBC3Budv6uZ6C5fSYAY0=; b=hYffbEKi645vUf6v/TvdkYDXgLoDUDOQZAgmh+Wo3pmQm6ELarjJWlWm 6mbYHJIjE3mMbQnm5xY3lumZCpQodAicKSwTYDZVvKI5zzYKay06/Dlep mGvaTsXDeWdUUL3XLyweywKACgpIIr5f/7oK+oAs8Db8Dmj/5oA3W7+Ui z74qYPU7YwFlwbbMaGRO6vcWMXX5A4Tk0p6suvQXpL9NIT6ACkJI/vgVT 7DfIwWZoexlET8sn8CI62z+0RR3/gEBJGl8Wa2SgHMzU41LT5SdzI8haZ 873X4PvsgftixXO1SBXkJliIKJK1HYu6QBDfsg1iaN3snRgwZIbRl0UPY A==; X-CSE-ConnectionGUID: QdHIq2jmRjyC6UW/tlhxXA== X-CSE-MsgGUID: kYkqfBkjTJaMARwq8THesg== X-IronPort-AV: E=McAfee;i="6700,10204,11402"; a="45280901" X-IronPort-AV: E=Sophos;i="6.15,211,1739865600"; d="scan'208";a="45280901" Received: from fmviesa007.fm.intel.com ([10.60.135.147]) by fmvoesa112.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Apr 2025 15:52:01 -0700 X-CSE-ConnectionGUID: cw9qAucuTI2MxsEE9TmFfw== X-CSE-MsgGUID: R7Vezj7yQ8ijVOd8oT602Q== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.15,211,1739865600"; d="scan'208";a="129657443" Received: from orsmsx902.amr.corp.intel.com ([10.22.229.24]) by fmviesa007.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Apr 2025 15:52:00 -0700 Received: from ORSMSX901.amr.corp.intel.com (10.22.229.23) by ORSMSX902.amr.corp.intel.com (10.22.229.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Sun, 13 Apr 2025 15:52:00 -0700 Received: from ORSEDG602.ED.cps.intel.com (10.7.248.7) by ORSMSX901.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14 via Frontend Transport; Sun, 13 Apr 2025 15:52:00 -0700 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (104.47.58.168) by edgegateway.intel.com (134.134.137.103) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.44; Sun, 13 Apr 2025 15:51:59 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=eBQaFRjOMLZaAKTugbGzGxbqDEMSIEevlin4ZoQ69Skwzg6WfIihHzEvfS1cIL4KmSGF+Q8QRiPyErSo7m/cotiDMaSLS8vnHQIeEFY7aODDnhmv3X5TNywPa0ucv6AAh522BH8qcRMsM7Ij54Ah8YZ0k//s7CDP0lrujKNrGjaZ3BzCn+dzPSiIVqOBm3k2owyeOGWdJCezV/Q2ohVo/KwcwazS0aDlWmvn8ffA91V0UXK/P1M0bH/pqzWUEkE8fyx+msAnxfCdxDgK10W3HlbzqPbmKtcHK5WffLVGcCCULalo8xr/oyqO/eGS5dLJLns8//u6GsnyTlf6Y0HDBg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=zpWif/CnuOIudWRzPn5nWqW7axZb6SRcXPd+Zv+hJJo=; b=M1BjPQ1leSW9dUq652ZbZIWjq+EN5BjJE6osGwBIy5mRoqa/99l31NF/M1AYaMgwzKYKRsV6A8PiLCvH5zFTYAKZ8TeA3crMQmDKEKraOKTLc/ne93pRNVqQy2f+n2FsEfzo2yg6aZRgEQH4RNVGEMDbdcNKf7IF5M7yy/0g1S8w0ewLeEtyNpIs9djoRAWw80ZHOg2QTfu/1m3lBbJeQnNL8b7HtiBwRHENw2BVkbmxie4vBaav8qjgrthZ1VnFaIM14KC5Km3R1wjYdeUxmDyCMy2NUWNWSUmXLVMXAkgjYpVYzVyYqI/pV4+hxzNhpIpyFU9ktdjKUypQlc+EGA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; Received: from MW4PR11MB6739.namprd11.prod.outlook.com (2603:10b6:303:20b::19) by DM4PR11MB6042.namprd11.prod.outlook.com (2603:10b6:8:61::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8632.28; Sun, 13 Apr 2025 22:51:50 +0000 Received: from MW4PR11MB6739.namprd11.prod.outlook.com ([fe80::a7ad:a6e8:fced:3f24]) by MW4PR11MB6739.namprd11.prod.outlook.com ([fe80::a7ad:a6e8:fced:3f24%4]) with mapi id 15.20.8606.033; Sun, 13 Apr 2025 22:51:50 +0000 From: Ira Weiny Date: Sun, 13 Apr 2025 17:52:13 -0500 Subject: [PATCH v9 05/19] cxl/mem: Expose dynamic ram A partition in sysfs Message-ID: <20250413-dcd-type2-upstream-v9-5-1d4911a0b365@intel.com> References: <20250413-dcd-type2-upstream-v9-0-1d4911a0b365@intel.com> In-Reply-To: <20250413-dcd-type2-upstream-v9-0-1d4911a0b365@intel.com> To: Dave Jiang , Fan Ni , "Jonathan Cameron" CC: Dan Williams , Davidlohr Bueso , Alison Schofield , "Vishal Verma" , Ira Weiny , , , X-Mailer: b4 0.15-dev-c25d1 X-Developer-Signature: v=1; a=ed25519-sha256; t=1744584735; l=5374; i=ira.weiny@intel.com; s=20221211; h=from:subject:message-id; bh=TdJg89owSQ09YHez2+5qf+RnBC3Budv6uZ6C5fSYAY0=; b=bYaZ8kzJIjb8F8TRq5BXse1Q94wKep+lL9bHykZ8N+OJ0h4nKYHFt6wGA7a7K6RPoLilfcLqD R47OVHjjVT4BOdGO4lMq24TVqNMRpIdQCV7KvHoihEDvEA3JoSLld4q X-Developer-Key: i=ira.weiny@intel.com; a=ed25519; pk=noldbkG+Wp1qXRrrkfY1QJpDf7QsOEthbOT7vm0PqsE= X-ClientProxiedBy: MW4PR03CA0227.namprd03.prod.outlook.com (2603:10b6:303:b9::22) To MW4PR11MB6739.namprd11.prod.outlook.com (2603:10b6:303:20b::19) Precedence: bulk X-Mailing-List: nvdimm@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MW4PR11MB6739:EE_|DM4PR11MB6042:EE_ X-MS-Office365-Filtering-Correlation-Id: 22ed960e-0423-4f3c-0fa4-08dd7addc71e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?utf-8?q?c0ktvlXs894Nr/KHhNms2Tn8X4NcNyG?= =?utf-8?q?lHkCvGzhJ/I8JgClL0PiMFQNRgBptn6i0IIEG1Jt3+VQL1EWF9uxTj/T6RXoYAiCe?= =?utf-8?q?rtYPUfcUR+MqxpfE6g6zlPnUZ19REox8GI8aVWEQrf3A6cNl3g6lFROQ5lkKkZtwM?= =?utf-8?q?BH/7RiJVTY5qgwTP3TsbR02+xMBAoU2mkrxmQnWQrTHoYM/ogD12ieXYEq1E2ehRo?= =?utf-8?q?vTZ3HGc5X258XjspDaMZMT2H+1tXvnpJQtlZYUKAK33l6DumHzEqqD0lz0TWcfIoi?= =?utf-8?q?h7s4rdI9gfQnvOYDE5gLvZwdYVC8H26U5skHKVS1zDqqiXj54yCd6OygfIG+P1Uzz?= =?utf-8?q?1/ANYkpRtAdIIjSN6L96WIVkde08Ogbu/uyhJFwwN7yvvKZHYnGvBOoI3brYA7zrL?= =?utf-8?q?zyZiXb7dXvXEGGPDKYN0Vl70W9vCCeaeZzClOE0dLpfWdXI/m0FCwmyNpaH3tXt66?= =?utf-8?q?On5PABMd3StEpGmZc9sRn/lHBj3Wr06T6lQo6DbisPLojMCHvBMfQc6Eyl9OCuCqr?= =?utf-8?q?ZkW4Ubin3pfP+o1ITYCV3LefDjI8ZBwRePntvAn0nnDQfLPx8vm63/ju6dq37526g?= =?utf-8?q?8chIzYqe0nfDbfFGLzErjtIVPbsn/m36+DRofus8AVtBRCbNPQyUdozSpq5vA4jxL?= =?utf-8?q?s/oPBj6PXF0jimuHwfQ3DZMguhKOhuV8QiK8TkJbNrwatwucUVn6Lj64SGEw1rXfi?= =?utf-8?q?a0ExFOtNS9AK5+a2ECVggwE2vS3BhdT7ZzEJeAaaO+lyZM3l90a1X48b4BtkSdXr/?= =?utf-8?q?lpEktwJm9mnp0Y547A674y2mctlz2AuYkB0UacrM1ulWKuN3cCHSVRa6q9d3cfSOL?= =?utf-8?q?mklvyNvtFbECqYNxyC6CBh4hKXWIAs7hJGZk9K7X1BoR+rCQmcNYGBiJkFcSJ2xic?= =?utf-8?q?9dAF/jR64sWM+9LpM/Y1ahfdt9irNKJqvBohCscuRQFHeeRzqtVNbX8xQX4wCPv8g?= =?utf-8?q?N7QClFtEXN/E6qHfx48ERJg+HlAV8/mPDrmH+oc33NAUIMgssaKXE4EyRGhwb9IBQ?= =?utf-8?q?Vk0sa7AfeYccyREJzJFk3U9FpPBq6lR4Ulm8CeBfMgvuZ4UdpLOEKUAgyZvkGzHr3?= =?utf-8?q?tjhrZqxBbEPb1a4oOHEvAXg1eq73wJc13mIV71fWXmJ/WmpAnKzVkWXRBOxf5LlLJ?= =?utf-8?q?uyqHG6cwqmppGJS61hTKeNk8IsNprIFwHMtYHmEMrela2NUTbNJD8Pgj27ZtTzXBi?= =?utf-8?q?b0KGO6RCy5JylYHMYOtH73vcb00ROv9SSY+gAo5rskE52isYydBhR1rnb9aZs7CgA?= =?utf-8?q?KJV813z2V27A90/ECfkIRoiIUem2jbl7Rm/oMp7+/zeqV9IF67c+krkG6i4QQjKmO?= =?utf-8?q?BCRhvMOu2zSEWFYLELdu1dMBTZgj5jI9i/yS6rBzRDv6OrtUc/+5Hyc=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MW4PR11MB6739.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?hB/6+vn7AskUyEsp/IWPNjpwenH3?= =?utf-8?q?QLUZkYeVvFVaPPmdhLJ0CGh2uWj+r46o8W0oEYVKcsNJR1qNY9mOaNRn17bv3Tica?= =?utf-8?q?XZO3LhXixzQIcZMWl30VZj2mLN9uK8jle5IZXDoGeNyujt4RBk/0ueg/0RC5lXWlY?= =?utf-8?q?K0L1/SblQVhF7HMEhqA1r+GHMyjIn4AFRaOwjwBCafNckFcVcqc4h2xaq0tpJ9pqe?= =?utf-8?q?W+K0KaGSF4+FkugMivUpW/gujqEEo3DZ6C7Wll4pZxnAAGZIBHWhOUX0AEixgeHAa?= =?utf-8?q?sai+8NEyVx7gX0eqj17aonmwVjGgrauiqT+XX7fJBYqglPeYFbSU75zw0R+Of3VUw?= =?utf-8?q?18NeOpi2DbeGxI58egbajRw1740srMaWvS1R4Ft5cjzUCEHN7ZXdHz/RwSEitmnja?= =?utf-8?q?TI0pmFK+1QZ0ueC5Myo+6mIMZlZ7INzlKq6JyRDoS6TEDliQ10Uff4L1QDCq8vwNc?= =?utf-8?q?0SKC1OAu+iKTM8ornXzQdSLZ0ElJK1kWwG0tRKUHEfaNkdoS3KCOvO6S68llL+6Dt?= =?utf-8?q?jgZ6eHBLVfVb1I4cHVvN2Q70zaGpsk0OeysiPMioE5Rk3QTVObMvMtvzhjIuaouGu?= =?utf-8?q?EXOvPZ0cH8T2ZBLJDaS/iok0oNMUxAiQNwpqN7tC1dA61TQ5W2Y0gHOWCEllUTUbK?= =?utf-8?q?2t4d7M7xuc8MdJr5ijhHDtC5PwONAbDCeWQih+d52trXwIf2zsY+QCCR9qIdfXIAo?= =?utf-8?q?TX0FKX5O3+oz+6i0wkqbbAT49M9Io22U3DvlC1bLBQbmrdTfuUIXRZxeuxExjGBBL?= =?utf-8?q?zNbVuUPrzLs+rTTE95fCMmLErJDlHUVK0P8bBsUzygME41xga4HetlwKEiUWkVRoB?= =?utf-8?q?CNS38Z+AyGll0zTEOqXX/ZttZUqZIFDq2sFPiioBvf9zcmVqiHyzSZsSEe3Qch5F8?= =?utf-8?q?2FmXPOzSeV6hlXVLZg08UXcrfQdzrJ0JmeEpXLXu9Pjx9Lm6XjC+pQIAJdMNgG278?= =?utf-8?q?H2A8VJ4ZebNIsu9ToBB3MVPvDXO5Oq0fKFMR00+r65Bku2fTEjA+G2vaN6emed2LU?= =?utf-8?q?47yciJ1HHHrggOAuzlu52L2qhJjGS89Ti8SYxnvm0E90QyLlPxKadpanBo/sdvwDz?= =?utf-8?q?bP5A7Mm7O8zUHCxRTdVHNQEE7COAsVv57B+svukb2SB8HUu6imYjVIlPR28pQcdLs?= =?utf-8?q?bW5Ed1WogIEJWY8uGK2nhjBoUhw+RcAaNIUKz1U0qhrfcjDMJoELAFXnSfIFj0MGW?= =?utf-8?q?NeVGYGJPiELmFx4kD+YtPGrZFHFXvOHhaxbA9gESHkyEIeb9+iArh83YXXns5Cs97?= =?utf-8?q?uDlCf39VWY96cd8N0oWLQv1to8sS5Any1Ego51M76anED6cxqGjijm2UJzTSzRoio?= =?utf-8?q?mwzRwSzT94KL/LyKf5UZpflyXNTCGOMHk3dAXD/+4IUQUHde45SakRVsyocfcoU61?= =?utf-8?q?xCmBgYMXOXqXC1t4F3HgFrNL7hctRoTk3aavdzA9WC7uog+1e52x0NLFJuv7fy9E5?= =?utf-8?q?gMXBE39txe7JS+nNKuG6eybj41Kc8JRSM/gPZ35dP2k+frKAidhMJEwShftjc9ycB?= =?utf-8?q?c2hlNWziK7Hd?= X-MS-Exchange-CrossTenant-Network-Message-Id: 22ed960e-0423-4f3c-0fa4-08dd7addc71e X-MS-Exchange-CrossTenant-AuthSource: MW4PR11MB6739.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Apr 2025 22:51:50.5782 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: s89zLihhIQAAQ/wHPymdfRXuw1qTU4e5TIr+nG/ncRTMlKTlWrno2qPgke8hv7OqQaJ2o673ztDowHLCyV9ZKA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR11MB6042 X-OriginatorOrg: intel.com To properly configure CXL regions user space will need to know the details of the dynamic ram partition. Expose the first dynamic ram partition through sysfs. Signed-off-by: Ira Weiny Reviewed-by: Jonathan Cameron --- Changes: [iweiny: Complete rewrite of the old patch.] --- Documentation/ABI/testing/sysfs-bus-cxl | 24 ++++++++++++++ drivers/cxl/core/memdev.c | 57 +++++++++++++++++++++++++++++++++ 2 files changed, 81 insertions(+) diff --git a/Documentation/ABI/testing/sysfs-bus-cxl b/Documentation/ABI/testing/sysfs-bus-cxl index 99bb3faf7a0e..2b59041bb410 100644 --- a/Documentation/ABI/testing/sysfs-bus-cxl +++ b/Documentation/ABI/testing/sysfs-bus-cxl @@ -89,6 +89,30 @@ Description: and there are platform specific performance related side-effects that may result. First class-id is displayed. +What: /sys/bus/cxl/devices/memX/dynamic_ram_a/size +Date: May, 2025 +KernelVersion: v6.16 +Contact: linux-cxl@vger.kernel.org +Description: + (RO) The first Dynamic RAM partition capacity as bytes. + + +What: /sys/bus/cxl/devices/memX/dynamic_ram_a/qos_class +Date: May, 2025 +KernelVersion: v6.16 +Contact: linux-cxl@vger.kernel.org +Description: + (RO) For CXL host platforms that support "QoS Telemmetry" + this attribute conveys a comma delimited list of platform + specific cookies that identifies a QoS performance class + for the persistent partition of the CXL mem device. These + class-ids can be compared against a similar "qos_class" + published for a root decoder. While it is not required + that the endpoints map their local memory-class to a + matching platform class, mismatches are not recommended + and there are platform specific performance related + side-effects that may result. First class-id is displayed. + What: /sys/bus/cxl/devices/memX/serial Date: January, 2022 diff --git a/drivers/cxl/core/memdev.c b/drivers/cxl/core/memdev.c index 9d6f8800e37a..063a14c1973a 100644 --- a/drivers/cxl/core/memdev.c +++ b/drivers/cxl/core/memdev.c @@ -101,6 +101,19 @@ static ssize_t pmem_size_show(struct device *dev, struct device_attribute *attr, static struct device_attribute dev_attr_pmem_size = __ATTR(size, 0444, pmem_size_show, NULL); +static ssize_t dynamic_ram_a_size_show(struct device *dev, struct device_attribute *attr, + char *buf) +{ + struct cxl_memdev *cxlmd = to_cxl_memdev(dev); + struct cxl_dev_state *cxlds = cxlmd->cxlds; + unsigned long long len = cxl_part_size(cxlds, CXL_PARTMODE_DYNAMIC_RAM_A); + + return sysfs_emit(buf, "%#llx\n", len); +} + +static struct device_attribute dev_attr_dynamic_ram_a_size = + __ATTR(size, 0444, dynamic_ram_a_size_show, NULL); + static ssize_t serial_show(struct device *dev, struct device_attribute *attr, char *buf) { @@ -426,6 +439,25 @@ static struct attribute *cxl_memdev_pmem_attributes[] = { NULL, }; +static ssize_t dynamic_ram_a_qos_class_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct cxl_memdev *cxlmd = to_cxl_memdev(dev); + struct cxl_dev_state *cxlds = cxlmd->cxlds; + + return sysfs_emit(buf, "%d\n", + part_perf(cxlds, CXL_PARTMODE_DYNAMIC_RAM_A)->qos_class); +} + +static struct device_attribute dev_attr_dynamic_ram_a_qos_class = + __ATTR(qos_class, 0444, dynamic_ram_a_qos_class_show, NULL); + +static struct attribute *cxl_memdev_dynamic_ram_a_attributes[] = { + &dev_attr_dynamic_ram_a_size.attr, + &dev_attr_dynamic_ram_a_qos_class.attr, + NULL, +}; + static ssize_t ram_qos_class_show(struct device *dev, struct device_attribute *attr, char *buf) { @@ -502,6 +534,29 @@ static struct attribute_group cxl_memdev_pmem_attribute_group = { .is_visible = cxl_pmem_visible, }; +static umode_t cxl_dynamic_ram_a_visible(struct kobject *kobj, struct attribute *a, int n) +{ + struct device *dev = kobj_to_dev(kobj); + struct cxl_memdev *cxlmd = to_cxl_memdev(dev); + struct cxl_dpa_perf *perf = part_perf(cxlmd->cxlds, CXL_PARTMODE_DYNAMIC_RAM_A); + + if (a == &dev_attr_dynamic_ram_a_qos_class.attr && + (!perf || perf->qos_class == CXL_QOS_CLASS_INVALID)) + return 0; + + if (a == &dev_attr_dynamic_ram_a_size.attr && + (!cxl_part_size(cxlmd->cxlds, CXL_PARTMODE_DYNAMIC_RAM_A))) + return 0; + + return a->mode; +} + +static struct attribute_group cxl_memdev_dynamic_ram_a_attribute_group = { + .name = "dynamic_ram_a", + .attrs = cxl_memdev_dynamic_ram_a_attributes, + .is_visible = cxl_dynamic_ram_a_visible, +}; + static umode_t cxl_memdev_security_visible(struct kobject *kobj, struct attribute *a, int n) { @@ -530,6 +585,7 @@ static const struct attribute_group *cxl_memdev_attribute_groups[] = { &cxl_memdev_attribute_group, &cxl_memdev_ram_attribute_group, &cxl_memdev_pmem_attribute_group, + &cxl_memdev_dynamic_ram_a_attribute_group, &cxl_memdev_security_attribute_group, NULL, }; @@ -538,6 +594,7 @@ void cxl_memdev_update_perf(struct cxl_memdev *cxlmd) { sysfs_update_group(&cxlmd->dev.kobj, &cxl_memdev_ram_attribute_group); sysfs_update_group(&cxlmd->dev.kobj, &cxl_memdev_pmem_attribute_group); + sysfs_update_group(&cxlmd->dev.kobj, &cxl_memdev_dynamic_ram_a_attribute_group); } EXPORT_SYMBOL_NS_GPL(cxl_memdev_update_perf, "CXL");