From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-dy1-f177.google.com (mail-dy1-f177.google.com [74.125.82.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7A1D23DA5AC for ; Thu, 25 Jun 2026 11:27:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.177 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782386860; cv=none; b=Gypqj17evLZBXa6e87uRK11iucZgVqNxtq2SX4aK/cijle1Skhj17cuquFrivBAhY8vHbGC65OOLILYa2y4Z77wZaqwqLo1LIlAbQblQejjC2VJFCOcnS9V+HBdr9Me0jrkfTIX9Y8qWFzxZUiYxYXWxV9AbpV0j1QYpfToI0Uo= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782386860; c=relaxed/simple; bh=5coC4Ng0U+2f5IPyy4HU9epy0iz53WLosocy1XVckYg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=E52Pc+fjmhUjSr+eo5KrBmAzcoJuVSP6MmsUNelQHQXRmhtwM1W/qHn6VlPVYR5kBtICQ8E11FQKT3LshBhJbYrUbSv+r7b+bgqKFZVJWHyTqzh1wjQszdBhMYTbnI16B6PbsJ3LlqiBPL+dHwBTxUPRy5OPtalLojejzHhuzrE= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=DwMT0e7s; arc=none smtp.client-ip=74.125.82.177 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="DwMT0e7s" Received: by mail-dy1-f177.google.com with SMTP id 5a478bee46e88-304f590dd91so2538409eec.0 for ; Thu, 25 Jun 2026 04:27:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1782386859; x=1782991659; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=M7yqkLUJR7iA6d1P1y5JWiVkuTmcvilfiJDbVJ20RrA=; b=DwMT0e7s0tk3KtH6xWDvx28btH5b+OtDKMEzwWlwUPuKRE2cKw5Mtd6WIt0DQFH4Ip O90bWqb5gKgamgAwNjPa2ZyKBfYx9h1MuGe25GxB3VMujMUxN2qXF9Hc5Z4q+tK5uAPe TA0EYaE0nrAr0MaqHzyelIR5dBemyV7Qrkwa+n+8AKoTEHu25m3qeh/52yClZuRD3Ma2 ZIhbbPTakQShWu218wuAaUQS0at/wNBW3dSHLoDxWQtZeMgMlJymTZYZG05K3E0ZAyuO 81LO+8rhvDUGvYNeYYWODXGF73ov1tzMaU6sRvOV2M4IzFXAdMuJ+RJvw87GW1SJk+IB DcJg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782386859; x=1782991659; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=M7yqkLUJR7iA6d1P1y5JWiVkuTmcvilfiJDbVJ20RrA=; b=eNlCUTwIgBCZc0RbpE1li3sejwxWAq6jMOsk2AAgVYjeQ0zXz/9m5dQAcRmEftIFHz FqF6lCrsGtIoRYZ8mhkx1hQDioRUUtMYKThIWUeiFDYUlPgQ1pSWgZMMYef5pJ4cxppB K/4oq0C0R0Kiu1meQWRFkX+vj51gp2UtSOnosK4fxkWdfgvPWOHF1sLN/rwQuCSwSX18 qQh7F/bU7VID+Ft7gAUM3bFqSa8NTulof6Hbp1nH+jyyH5Ts8vpohvXek+7Tog5p4dJ9 /BtYk0IuinKaz864a2AfQMnWGnvLxLHtyOhrVbE13JIsWXs4Xr6xi0m+fhFOaCSEaHuY nwcw== X-Forwarded-Encrypted: i=1; AHgh+RrdBVu5mwXoQCAznGffDn9UYPJgAmcVPexr0KSQPOUtXh/wa4sy7uzAuKhPe0MJlFPpdsLx35Afdg9d0qI=@vger.kernel.org X-Gm-Message-State: AOJu0Yycd0QFFXRYalEJwx0pW2TfF/7AFSJrKgG8xwCm8TOWBdNqno3k +5lPTHYm67gBphxStMPAbFoK0JokeoFQ2ECdHGLqjVCgTjq0Yc4Kcd622bzhWA== X-Gm-Gg: AfdE7cmBkyiqZB5iquDiuEu0R9vhJtPIS2RVZYGMJnQkZhppPkgjkTK5dfKu6VEYBMO NNPPv0DX7JGEkblsGxxxuheE8rYMoCTjQ5z1OW81Z+AAOr+e3r/4NHipYRszyJ8ezvIjNIx7imm lE4+WcwC8DtvEwDAZLzloyMIgkm79DP+yAdl2G6v4egHXc+OgNW3ouBbBOr6aix0RVOOdo7L0TT TZXo19zcPyTOBY7k4+dRUb6+qJLJEYH9AjbHr7xjcK/71bM6yj88lU1L1DYjN0uWWxo82NbdTwB YVhDNTC8U+2ySiVTjIEdpqPZ+4432Osf9goAQE3aST1zQGGijkveHafhdEhlfST53ULpWt1NJT0 oBZ4RcXEuvKaq5I9nxt1KeY970anoCbceYU5cnVxHkx5RhjZXHTmnRoVnEDp9xuNkbJtWjmTa7s adlU+tUat5ET9nWj/ed837TbAYIR4sNal+yXn7A4OLEYNVG/bRIVdUUYzVetE3hkg1cUJJ X-Received: by 2002:a05:7300:d517:b0:30c:544f:a861 with SMTP id 5a478bee46e88-30c84eb7d9amr2260863eec.20.1782386858437; Thu, 25 Jun 2026 04:27:38 -0700 (PDT) Received: from AnisaLaptop.localdomain (c-73-170-217-179.hsd1.ca.comcast.net. [73.170.217.179]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-30c7cab08c2sm8744614eec.29.2026.06.25.04.27.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 25 Jun 2026 04:27:38 -0700 (PDT) From: Anisa Su X-Google-Original-From: Anisa Su To: linux-cxl@vger.kernel.org, linux-kernel@vger.kernel.org Cc: nvdimm@lists.linux.dev, Dan Williams , Jonathan Cameron , Davidlohr Bueso , Dave Jiang , Vishal Verma , Ira Weiny , Alison Schofield , John Groves , Gregory Price , Anisa Su Subject: [PATCH v11 01/31] cxl/mbox: Flag support for Dynamic Capacity Devices (DCD) Date: Thu, 25 Jun 2026 04:04:38 -0700 Message-ID: <20260625112638.550691-2-anisa.su@samsung.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260625112638.550691-1-anisa.su@samsung.com> References: <20260625112638.550691-1-anisa.su@samsung.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: Ira Weiny Per the CXL 4.0 specification software must check the Command Effects Log (CEL) for dynamic capacity command support. Detect support for the DCD commands while reading the CEL, including: Get DC Config Get DC Extent List Add DC Response Release DC Based on an original patch by Navneet Singh. Signed-off-by: Ira Weiny Signed-off-by: Anisa Su --- Changes: - remove unused param struct cxl_memdev_state *mds from cxl_set_dcd_cmd_enabled() - remove unused param struct cxl_memdev_state *mds from cxl_verify_dcd_cmds() - cxl_verify_dcd_cmds(): originally filled out local bitmap with all DCD cmd bits and checking if cmds_seen bitmap is equal to the local bitmap. Replace with simple call to bitmap_full(cmd_seen) - cxl_walk_cel(): zero out dcd_cmds bitmap before using - cxlmem.h: Add comment to enum dcd_cmd_enabled_bits pointing to where the command set is defined in the 4.0 spec - original commit message referred to CXL r3.1. Bump to r4.0 --- drivers/cxl/core/mbox.c | 39 +++++++++++++++++++++++++++++++++++++++ drivers/cxl/cxlmem.h | 20 ++++++++++++++++++++ 2 files changed, 59 insertions(+) diff --git a/drivers/cxl/core/mbox.c b/drivers/cxl/core/mbox.c index 7c6c5b7450a5..07aba6f0b719 100644 --- a/drivers/cxl/core/mbox.c +++ b/drivers/cxl/core/mbox.c @@ -165,6 +165,38 @@ static void cxl_set_security_cmd_enabled(struct cxl_security_state *security, } } +static bool cxl_is_dcd_command(u16 opcode) +{ +#define CXL_MBOX_OP_DCD_CMDS 0x48 + + return (opcode >> 8) == CXL_MBOX_OP_DCD_CMDS; +} + +static void cxl_set_dcd_cmd_enabled(u16 opcode, unsigned long *cmd_mask) +{ + switch (opcode) { + case CXL_MBOX_OP_GET_DC_CONFIG: + set_bit(CXL_DCD_ENABLED_GET_CONFIG, cmd_mask); + break; + case CXL_MBOX_OP_GET_DC_EXTENT_LIST: + set_bit(CXL_DCD_ENABLED_GET_EXTENT_LIST, cmd_mask); + break; + case CXL_MBOX_OP_ADD_DC_RESPONSE: + set_bit(CXL_DCD_ENABLED_ADD_RESPONSE, cmd_mask); + break; + case CXL_MBOX_OP_RELEASE_DC: + set_bit(CXL_DCD_ENABLED_RELEASE, cmd_mask); + break; + default: + break; + } +} + +static bool cxl_verify_dcd_cmds(unsigned long *cmds_seen) +{ + return bitmap_full(cmds_seen, CXL_DCD_ENABLED_MAX); +} + static bool cxl_is_poison_command(u16 opcode) { #define CXL_MBOX_OP_POISON_CMDS 0x43 @@ -757,6 +789,7 @@ static void cxl_walk_cel(struct cxl_memdev_state *mds, size_t size, u8 *cel) struct cxl_mailbox *cxl_mbox = &mds->cxlds.cxl_mbox; struct cxl_cel_entry *cel_entry; const int cel_entries = size / sizeof(*cel_entry); + DECLARE_BITMAP(dcd_cmds, CXL_DCD_ENABLED_MAX) = {}; struct device *dev = mds->cxlds.dev; int i, ro_cmds = 0, wr_cmds = 0; @@ -785,11 +818,17 @@ static void cxl_walk_cel(struct cxl_memdev_state *mds, size_t size, u8 *cel) enabled++; } + if (cxl_is_dcd_command(opcode)) { + cxl_set_dcd_cmd_enabled(opcode, dcd_cmds); + enabled++; + } + dev_dbg(dev, "Opcode 0x%04x %s\n", opcode, enabled ? "enabled" : "unsupported by driver"); } set_features_cap(cxl_mbox, ro_cmds, wr_cmds); + mds->dcd_supported = cxl_verify_dcd_cmds(dcd_cmds); } static struct cxl_mbox_get_supported_logs *cxl_get_gsl(struct cxl_memdev_state *mds) diff --git a/drivers/cxl/cxlmem.h b/drivers/cxl/cxlmem.h index 776c50d1db51..60dc3f0006a7 100644 --- a/drivers/cxl/cxlmem.h +++ b/drivers/cxl/cxlmem.h @@ -230,6 +230,20 @@ struct cxl_event_state { struct mutex log_lock; }; +/** + * CXL r4.0 Section 8.2.10.9 - Memory Device Command Sets. See Table 8-308. + * + * The 48h Command Set (Opcodes 4800h - 4803h) defines the device-enabled DCD + * commands. + * */ +enum dcd_cmd_enabled_bits { + CXL_DCD_ENABLED_GET_CONFIG, + CXL_DCD_ENABLED_GET_EXTENT_LIST, + CXL_DCD_ENABLED_ADD_RESPONSE, + CXL_DCD_ENABLED_RELEASE, + CXL_DCD_ENABLED_MAX +}; + /* Device enabled poison commands */ enum poison_cmd_enabled_bits { CXL_POISON_ENABLED_LIST, @@ -405,6 +419,7 @@ static inline struct cxl_dev_state *mbox_to_cxlds(struct cxl_mailbox *cxl_mbox) * @partition_align_bytes: alignment size for partition-able capacity * @active_volatile_bytes: sum of hard + soft volatile * @active_persistent_bytes: sum of hard + soft persistent + * @dcd_supported: all DCD commands are supported * @event: event log driver state * @poison: poison driver state info * @security: security driver state info @@ -424,6 +439,7 @@ struct cxl_memdev_state { u64 partition_align_bytes; u64 active_volatile_bytes; u64 active_persistent_bytes; + bool dcd_supported; struct cxl_event_state event; struct cxl_poison_state poison; @@ -485,6 +501,10 @@ enum cxl_opcode { CXL_MBOX_OP_UNLOCK = 0x4503, CXL_MBOX_OP_FREEZE_SECURITY = 0x4504, CXL_MBOX_OP_PASSPHRASE_SECURE_ERASE = 0x4505, + CXL_MBOX_OP_GET_DC_CONFIG = 0x4800, + CXL_MBOX_OP_GET_DC_EXTENT_LIST = 0x4801, + CXL_MBOX_OP_ADD_DC_RESPONSE = 0x4802, + CXL_MBOX_OP_RELEASE_DC = 0x4803, CXL_MBOX_OP_MAX = 0x10000 }; -- 2.43.0