From patchwork Thu Feb 13 09:15:56 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vinayak Holikatti X-Patchwork-Id: 13974679 Received: from mailout1.samsung.com (mailout1.samsung.com [203.254.224.24]) (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 9DFC020B20B for ; Fri, 14 Feb 2025 09:35:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=203.254.224.24 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739525754; cv=none; b=aH4i6YVkqJB0if9mw0nafddipyhoErNUCGw3FuwZ+6ywvJPcNX3AXH2FVGLVON60d2RnvXTLfCkWpgUhGFVZkB496brk2+ProAlpCrZ3ZU9Ho9kTDZniXzl1cUrO2gv55pz4qwFTO4tF6RfiI0V2o/zp20u7DupDlX0CtfrJYr0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739525754; c=relaxed/simple; bh=zWsgH4IlLukEDKnrwuUBb3S8OoWX1UM+XloEimG7Aq0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:MIME-Version: Content-Type:References; b=UoURT43kSFQOAoauYfrG35/pkLFLsvFRTUJRnB4Z+v4MffFaeHMPwksAhuEapNVxrn+LbLgeuOjPR/WRok0MWsapnasLedq0XlRrGVAAszen6hbK4RyIOmcPG5iATFuHQDsogYrccSrG2OnX7SqRDd1ZnmObIi/l5Ex5ZYkq49o= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=samsung.com; spf=pass smtp.mailfrom=samsung.com; dkim=pass (1024-bit key) header.d=samsung.com header.i=@samsung.com header.b=pfZ16XPf; arc=none smtp.client-ip=203.254.224.24 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=samsung.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=samsung.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=samsung.com header.i=@samsung.com header.b="pfZ16XPf" Received: from epcas5p4.samsung.com (unknown [182.195.41.42]) by mailout1.samsung.com (KnoxPortal) with ESMTP id 20250214093550epoutp01656cb06f44206205eec87b1ddf41a805~kCXQhcvqR0452804528epoutp01X for ; Fri, 14 Feb 2025 09:35:50 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.samsung.com 20250214093550epoutp01656cb06f44206205eec87b1ddf41a805~kCXQhcvqR0452804528epoutp01X DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1739525750; bh=xi+eGfXc7CLAVfVWod9Ofd5IXXxIwEbBieUdsw5O5V0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=pfZ16XPf5rBChLjUvqCLIr8lKci8BAXWuMvfg/HKd3nWT8wP1RPrCHnyZ1IORQmEU 4u8cBaOgfjvhuxG8X8UmPZunMOY7pTAc9fVNlVJbnsixT0+a2tFU8dqVVNYmrtssTH PJm4zv4yLJ07z48DxSE4zBBRdlK1BRfR57MK86zU= Received: from epsnrtp2.localdomain (unknown [182.195.42.163]) by epcas5p4.samsung.com (KnoxPortal) with ESMTP id 20250214093550epcas5p4fb494e959e5ddaa570d9f030c3226726~kCXQPvoeW2149321493epcas5p47; Fri, 14 Feb 2025 09:35:50 +0000 (GMT) Received: from epsmgec5p1new.samsung.com (unknown [182.195.38.179]) by epsnrtp2.localdomain (Postfix) with ESMTP id 4YvRkC5y9Kz4x9Px; Fri, 14 Feb 2025 09:35:47 +0000 (GMT) Received: from epcas5p1.samsung.com ( [182.195.41.39]) by epsmgec5p1new.samsung.com (Symantec Messaging Gateway) with SMTP id 28.DC.19710.37E0FA76; Fri, 14 Feb 2025 18:35:47 +0900 (KST) Received: from epsmtrp1.samsung.com (unknown [182.195.40.13]) by epcas5p1.samsung.com (KnoxPortal) with ESMTPA id 20250213091629epcas5p1e5435929f701840a7e13f22a83edff22~judFPpdAG1560415604epcas5p1w; Thu, 13 Feb 2025 09:16:29 +0000 (GMT) Received: from epsmgms1p2new.samsung.com (unknown [182.195.42.42]) by epsmtrp1.samsung.com (KnoxPortal) with ESMTP id 20250213091629epsmtrp1eec0b2d90dbf156b348d2221abf7f0fc~judFO89rm2265722657epsmtrp1U; Thu, 13 Feb 2025 09:16:29 +0000 (GMT) X-AuditID: b6c32a44-36bdd70000004cfe-b7-67af0e73e3fa Received: from epsmtip1.samsung.com ( [182.195.34.30]) by epsmgms1p2new.samsung.com (Symantec Messaging Gateway) with SMTP id 60.74.18949.D68BDA76; Thu, 13 Feb 2025 18:16:29 +0900 (KST) Received: from test-PowerEdge-R740xd.samsungds.net (unknown [107.99.41.79]) by epsmtip1.samsung.com (KnoxPortal) with ESMTPA id 20250213091628epsmtip11de8558fbcbb9a3079f8c4bcd48226c8~judDu8c6R2263522635epsmtip1h; Thu, 13 Feb 2025 09:16:27 +0000 (GMT) From: Vinayak Holikatti To: qemu-devel@nongnu.org Cc: gost.dev@samsung.com, linux-cxl@vger.kernel.org, nifan.cxl@gmail.com, dave@stgolabs.net, vishak.g@samsung.com, krish.reddy@samsung.com, a.manzanares@samsung.com, alok.rathore@samsung.com, Vinayak Holikatti Subject: [PATCH v2 1/3] hw/cxl/cxl-mailbox-utils: Add support for Media operations discovery commands (8.2.9.9.5.3) Date: Thu, 13 Feb 2025 14:45:56 +0530 Message-Id: <20250213091558.2294806-2-vinayak.kh@samsung.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250213091558.2294806-1-vinayak.kh@samsung.com> Precedence: bulk X-Mailing-List: linux-cxl@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprGJsWRmVeSWpSXmKPExsWy7bCmum4x3/p0g1mv9CymH1a0+HJ6D5vF 6ptrGC1uHtjJZLFw4zImi/OzTrFY/N22l9HieO8OFosTJ7ezA8XmsDtweeycdZfd48m1zUwe fVtWMXpMnV3v8XmTXABrVLZNRmpiSmqRQmpecn5KZl66rZJ3cLxzvKmZgaGuoaWFuZJCXmJu qq2Si0+ArltmDtBNSgpliTmlQKGAxOJiJX07m6L80pJUhYz84hJbpdSClJwCkwK94sTc4tK8 dL281BIrQwMDI1OgwoTsjC8t/SwFvw0r1rc8ZG5gvKjUxcjJISFgInGz+R5LFyMXh5DAbkaJ jQ+bGSGcT4wSE7Y+ZYNwvjFKXL6yCqiMA6zlw6UMkG4hgb2MEm8nukDUNDBJLJ//jgkkwSZg IPGg+Tg7iC0iICnxu+s0M4jNLPCBUWLRU12QOcICpRKnL7CBmCwCqhJ/7ieDVPAK2Eqs/vmI DeI4eYn9B88yg5RwCthJTHuZDVEiKHFy5hMWiIHyEs1bZzNDlP9llzg1xRHiSBeJQ0crIcLC Eq+Ob2GHsKUkXva3QdnFEucufmKEsGskXnetgBpjL9F6qh9sK7OApsT6XfoQYVmJqafWMUFs 5ZPo/f2ECSLOK7FjHogNslVFYunbTJhNX541Q033kGh9s5oZEkwTGSW+T13LNIFRYRaSZ2Yh eWYWwuYFjMyrGCVTC4pz01OTTQsM81LL4dGbnJ+7iRGcQLVcdjDemP9P7xAjEwfjIUYJDmYl EV6JaWvShXhTEiurUovy44tKc1KLDzGaAsN6IrOUaHI+MIXnlcQbmlgamJiZmZlYGpsZKonz Nu9sSRcSSE8sSc1OTS1ILYLpY+LglGpgemZpv/xf6DR1LeslGlcj9iz9N/3sJV6BSdxSorKV fzMKkyaG5stlX0hbsGitl17QpUkinBsbp4qGiPQK2t8uEZ8d7xOn+TV70Z5ixklnvZulZhxW 7mQJqP0TqO2/4Wqg7sMcqRXyWVpzqn/1u+TPFvJj6zns9qziSenUprPqrRkrZbexz013vLJx lZRAfGWUw4+kxyHii95Pqfl7c3Lnckf51cujHZOfqC97trTKq2qJ86Jju80l8o4n89VpM3w5 9I7hxKoo1dL3RwX3PGx4VNC9QOUEl2ZOrHvPnnsZxt0T97e02tfM/rpCR2rnR7WSiJrqCzvf V9hPONSZrneN+UvoXc5/vxexPxQRC1RTYinOSDTUYi4qTgQAS4OyYCkEAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrELMWRmVeSWpSXmKPExsWy7bCSnG7ujrXpBnsnKFlMP6xo8eX0HjaL 1TfXMFrcPLCTyWLhxmVMFudnnWKx+LttL6PF8d4dLBYnTm5nB4rNYXfg8tg56y67x5Nrm5k8 +rasYvSYOrve4/MmuQDWKC6blNSczLLUIn27BK6MLy39LAW/DSvWtzxkbmC8qNTFyMEhIWAi 8eFSRhcjF4eQwG5GiclPf7N0MXICxaUkju38yQZhC0us/PecHaLoH6PE0sevmEASbAIGEg+a j7OD2CICkhK/u04zgxQxC/xilHi6+z5YQligWGLChudsINtYBFQl/txPBgnzCthKrP75CGqB vMT+g2eZQUo4Bewkpr3MBgkLAZXs7rzGBFEuKHFy5hOw25iBypu3zmaewCgwC0lqFpLUAkam VYySqQXFuem5xYYFRnmp5XrFibnFpXnpesn5uZsYwcGupbWDcc+qD3qHGJk4GA8xSnAwK4nw Skxbky7Em5JYWZValB9fVJqTWnyIUZqDRUmc99vr3hQhgfTEktTs1NSC1CKYLBMHp1QDk9/R Ex6y/nN+PvwtdUflyZGb7Z8a3x0x3/M80LI9RC/Sfl9p2cwlb55+CjV29WS5tHlS1PTjZyQ9 I+5zFq21zrXIerzX6Jrf+oOX7A05RNr7a5ZcP/nT89NXIY855y/s+HDLf3bBJfML3CUCOqtt yie18jRzPzl/fSUzy4uSrz9nVdv/M4wRVmSaVzK/9WLv122R+78wrY1rffDzjOjtRRlddvx/ jy1Zmxj2zz5kUWKvryK/rN1C8XSpSCPBy2K7fQ8udVSLOl+pFV+87sLv76+fuTs86nt0rzXk jZedlyJv6JS95xn9lcIzZgv1++Ykh0Sy3OjTSFyYeuj5A9envDNbmI5ynw3MOrOgJTkzW4ml OCPRUIu5qDgRAMLGJ/zlAgAA X-CMS-MailID: 20250213091629epcas5p1e5435929f701840a7e13f22a83edff22 X-Msg-Generator: CA X-Sendblock-Type: REQ_APPROVE CMS-TYPE: 105P DLP-Filter: Pass X-CFilter-Loop: Reflected X-CMS-RootMailID: 20250213091629epcas5p1e5435929f701840a7e13f22a83edff22 References: <20250213091558.2294806-1-vinayak.kh@samsung.com> CXL spec 3.1 section 8.2.9.9.5.3 describes media operations commands. CXL devices supports media operations discovery command. Signed-off-by: Vinayak Holikatti --- hw/cxl/cxl-mailbox-utils.c | 136 +++++++++++++++++++++++++++++++++++++ 1 file changed, 136 insertions(+) diff --git a/hw/cxl/cxl-mailbox-utils.c b/hw/cxl/cxl-mailbox-utils.c index 9c7ea5bc35..fa38ecf507 100644 --- a/hw/cxl/cxl-mailbox-utils.c +++ b/hw/cxl/cxl-mailbox-utils.c @@ -89,6 +89,7 @@ enum { SANITIZE = 0x44, #define OVERWRITE 0x0 #define SECURE_ERASE 0x1 + #define MEDIA_OPERATIONS 0x2 PERSISTENT_MEM = 0x45, #define GET_SECURITY_STATE 0x0 MEDIA_AND_POISON = 0x43, @@ -1721,6 +1722,137 @@ static CXLRetCode cmd_sanitize_overwrite(const struct cxl_cmd *cmd, return CXL_MBOX_BG_STARTED; } +#define CXL_CACHELINE_SIZE 64 +enum { + MEDIA_OP_CLASS_GENERAL = 0x0, + #define MEDIA_OP_GEN_SUBC_DISCOVERY 0x0 + MEDIA_OP_CLASS_SANITIZE = 0x1, + #define MEDIA_OP_SAN_SUBC_SANITIZE 0x0 + #define MEDIA_OP_SAN_SUBC_ZERO 0x1 + MEDIA_OP_CLASS_MAX +}; + +struct media_op_supported_list_entry { + uint8_t media_op_class; + uint8_t media_op_subclass; +}; + +struct media_op_discovery_out_pl { + uint64_t dpa_range_granularity; + uint16_t total_supported_operations; + uint16_t num_of_supported_operations; + struct media_op_supported_list_entry entry[]; +} QEMU_PACKED; + +static const struct media_op_supported_list_entry media_op_matrix[] = { + {MEDIA_OP_CLASS_GENERAL, MEDIA_OP_GEN_SUBC_DISCOVERY}, + {MEDIA_OP_CLASS_SANITIZE, MEDIA_OP_SAN_SUBC_SANITIZE}, + {MEDIA_OP_CLASS_SANITIZE, MEDIA_OP_SAN_SUBC_ZERO} +}; + +static CXLRetCode media_operations_discovery(uint8_t *payload_in, + size_t len_in, + uint8_t *payload_out, + size_t *len_out) +{ + struct { + uint8_t media_operation_class; + uint8_t media_operation_subclass; + uint8_t rsvd[2]; + uint32_t dpa_range_count; + struct { + uint16_t start_index; + uint16_t num_supported_ops; + } discovery_osa; + } QEMU_PACKED *media_op_in_disc_pl = (void *)payload_in; + int count = 0; + + if (len_in < sizeof(*media_op_in_disc_pl)) { + return CXL_MBOX_INVALID_PAYLOAD_LENGTH; + } + + struct media_op_discovery_out_pl *media_out_pl = + (void *)payload_out; + int num_ops = media_op_in_disc_pl->discovery_osa.num_supported_ops; + int start_index = media_op_in_disc_pl->discovery_osa.start_index; + + if (start_index + num_ops > ARRAY_SIZE(media_op_matrix)) { + return CXL_MBOX_INVALID_INPUT; + } + + media_out_pl->dpa_range_granularity = CXL_CACHELINE_SIZE; + media_out_pl->total_supported_operations = + ARRAY_SIZE(media_op_matrix); + if (num_ops > 0) { + for (int i = start_index; i < ARRAY_SIZE(media_op_matrix); i++) { + media_out_pl->entry[count].media_op_class = + media_op_matrix[i].media_op_class; + media_out_pl->entry[count].media_op_subclass = + media_op_matrix[i].media_op_subclass; + count++; + if (count == num_ops) { + break; + } + } + } + + media_out_pl->num_of_supported_operations = count; + *len_out = sizeof(struct media_op_discovery_out_pl) + + (sizeof(struct media_op_supported_list_entry) * count); + return CXL_MBOX_SUCCESS; +} + +static CXLRetCode cmd_media_operations(const struct cxl_cmd *cmd, + uint8_t *payload_in, + size_t len_in, + uint8_t *payload_out, + size_t *len_out, + CXLCCI *cci) +{ + struct { + uint8_t media_operation_class; + uint8_t media_operation_subclass; + uint8_t rsvd[2]; + uint32_t dpa_range_count; + } QEMU_PACKED *media_op_in_common_pl = (void *)payload_in; + + if (len_in < sizeof(*media_op_in_common_pl)) { + return CXL_MBOX_INVALID_PAYLOAD_LENGTH; + } + + uint8_t media_op_cl = media_op_in_common_pl->media_operation_class; + uint8_t media_op_subclass = + media_op_in_common_pl->media_operation_subclass; + uint32_t dpa_range_count = media_op_in_common_pl->dpa_range_count; + + switch (media_op_cl) { + case MEDIA_OP_CLASS_GENERAL: + if (media_op_subclass != MEDIA_OP_GEN_SUBC_DISCOVERY) { + return CXL_MBOX_UNSUPPORTED; + } + + /* + * As per spec CXL 3.1 8.2.9.9.5.3 dpa_range_count + * should be zero for discovery sub class command + */ + if (dpa_range_count) { + return CXL_MBOX_INVALID_INPUT; + } + + return media_operations_discovery(payload_in, len_in, payload_out, + len_out); + case MEDIA_OP_CLASS_SANITIZE: + switch (media_op_subclass) { + default: + return CXL_MBOX_UNSUPPORTED; + } + default: + return CXL_MBOX_UNSUPPORTED; + } + + return CXL_MBOX_SUCCESS; +} + static CXLRetCode cmd_get_security_state(const struct cxl_cmd *cmd, uint8_t *payload_in, size_t len_in, @@ -2864,6 +2996,10 @@ static const struct cxl_cmd cxl_cmd_set[256][256] = { CXL_MBOX_SECURITY_STATE_CHANGE | CXL_MBOX_BACKGROUND_OPERATION | CXL_MBOX_BACKGROUND_OPERATION_ABORT)}, + [SANITIZE][MEDIA_OPERATIONS] = { "MEDIA_OPERATIONS", cmd_media_operations, + ~0, + (CXL_MBOX_IMMEDIATE_DATA_CHANGE | + CXL_MBOX_BACKGROUND_OPERATION)}, [PERSISTENT_MEM][GET_SECURITY_STATE] = { "GET_SECURITY_STATE", cmd_get_security_state, 0, 0 }, [MEDIA_AND_POISON][GET_POISON_LIST] = { "MEDIA_AND_POISON_GET_POISON_LIST", From patchwork Thu Feb 13 09:15:57 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Vinayak Holikatti X-Patchwork-Id: 13974720 Received: from mailout3.samsung.com (mailout3.samsung.com [203.254.224.33]) (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 4DEE6221DAD for ; Fri, 14 Feb 2025 10:23:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=203.254.224.33 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739528604; cv=none; b=e90i+x3VEzg16mY0MUP2/bklnizdURKi018RWnOq2AmDUZYin0NwQJ5ge32258PyfOhc0QnVAHQ0dzbx8k4T7a0EReJ1BkCwtnFqsoAI0+Nrh7NeGldu3SiLDjlMCuDj73sGLzeUDlYaNi7WRuZcKkm/HlUJwrpyKH7OwyXH6d4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739528604; c=relaxed/simple; bh=rvKM9PWc4R8j2H0bUbv18YspzAOl/dm683Y7SuuN7jI=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:MIME-Version: Content-Type:References; b=ifUWEWs5SQPFB+M9vwSrYyd6XtRXu5g9WrxupH9RyJZLPSA/Qphrb4umpF2NfzRUtYqaNX3CLBzVHMC3pbxPCYwL0ThxL+9puQ81qraURCSPU9AcTOz2DDuOQBJQSNhzoWX4Ne3KJGNUDDXT17pjlr9df0psSZi0hCvL3CgKPDg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=samsung.com; spf=pass smtp.mailfrom=samsung.com; dkim=pass (1024-bit key) header.d=samsung.com header.i=@samsung.com header.b=o0fY1m5N; arc=none smtp.client-ip=203.254.224.33 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=samsung.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=samsung.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=samsung.com header.i=@samsung.com header.b="o0fY1m5N" Received: from epcas5p1.samsung.com (unknown [182.195.41.39]) by mailout3.samsung.com (KnoxPortal) with ESMTP id 20250214102319epoutp0327b35c7ec622efb3a5c2930b1b6f2e6c~kDAtoTuGJ1559215592epoutp03Y for ; Fri, 14 Feb 2025 10:23:19 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout3.samsung.com 20250214102319epoutp0327b35c7ec622efb3a5c2930b1b6f2e6c~kDAtoTuGJ1559215592epoutp03Y DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1739528599; bh=Y+YmI6Fv+4dx1jCNiVWWElBmtPS0hoZA2vg6Skzhh8I=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=o0fY1m5N2lpQ6hO/7ao1jN3kIbbD1i2Vrs/3N4wj1wkeUpp0Yy9ePaR56toLzIs3T D1+t5+1uFzTvNWbcSfShRaek0XKeNlw03Ix7SNX/sjeg9q2qHqO+nWN8zUULGIcS9g 5mtFuNDpeIGr/GmcBC100XQiGimWD0F94MdoYIcM= Received: from epsnrtp2.localdomain (unknown [182.195.42.163]) by epcas5p1.samsung.com (KnoxPortal) with ESMTP id 20250214102318epcas5p1ae926a25ac7b6b81a517169295d58415~kDAtBYSiH0495704957epcas5p1j; Fri, 14 Feb 2025 10:23:18 +0000 (GMT) Received: from epsmges5p2new.samsung.com (unknown [182.195.38.178]) by epsnrtp2.localdomain (Postfix) with ESMTP id 4YvSn03PSxz4x9Pt; Fri, 14 Feb 2025 10:23:16 +0000 (GMT) Received: from epcas5p3.samsung.com ( [182.195.41.41]) by epsmges5p2new.samsung.com (Symantec Messaging Gateway) with SMTP id 9B.B5.19933.4991FA76; Fri, 14 Feb 2025 19:23:16 +0900 (KST) Received: from epsmtrp1.samsung.com (unknown [182.195.40.13]) by epcas5p1.samsung.com (KnoxPortal) with ESMTPA id 20250213091631epcas5p12bc4ff8f6f3498f400cf5f2cb1a42e96~judGrUT3r1560415604epcas5p11; Thu, 13 Feb 2025 09:16:31 +0000 (GMT) Received: from epsmgmcp1.samsung.com (unknown [182.195.42.82]) by epsmtrp1.samsung.com (KnoxPortal) with ESMTP id 20250213091631epsmtrp1cf59accc57012985e3c9bcadf7285db1~judGqhZpE2265622656epsmtrp1f; Thu, 13 Feb 2025 09:16:31 +0000 (GMT) X-AuditID: b6c32a4a-b87c770000004ddd-f4-67af199452a3 Received: from epsmtip1.samsung.com ( [182.195.34.30]) by epsmgmcp1.samsung.com (Symantec Messaging Gateway) with SMTP id 44.94.33707.F68BDA76; Thu, 13 Feb 2025 18:16:31 +0900 (KST) Received: from test-PowerEdge-R740xd.samsungds.net (unknown [107.99.41.79]) by epsmtip1.samsung.com (KnoxPortal) with ESMTPA id 20250213091629epsmtip1e54855622dae06f776471d16077ffced~judFQq1Cr2264222642epsmtip1r; Thu, 13 Feb 2025 09:16:29 +0000 (GMT) From: Vinayak Holikatti To: qemu-devel@nongnu.org Cc: gost.dev@samsung.com, linux-cxl@vger.kernel.org, nifan.cxl@gmail.com, dave@stgolabs.net, vishak.g@samsung.com, krish.reddy@samsung.com, a.manzanares@samsung.com, alok.rathore@samsung.com, Vinayak Holikatti Subject: [PATCH v2 2/3] hw/cxl: factor out calculation of sanitize duration from cmd_santize_overwrite Date: Thu, 13 Feb 2025 14:45:57 +0530 Message-Id: <20250213091558.2294806-3-vinayak.kh@samsung.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250213091558.2294806-1-vinayak.kh@samsung.com> Precedence: bulk X-Mailing-List: linux-cxl@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprNJsWRmVeSWpSXmKPExsWy7bCmpu4UyfXpBi/fSVhMP6xo8eX0HjaL 1TfXMFrcPLCTyWLhxmVMFudnnWKx+LttL6PF8d4dLBYnTm5nB4rNYXfg8tg56y67x5Nrm5k8 +rasYvSYOrve4/MmuQDWqGybjNTElNQihdS85PyUzLx0WyXv4HjneFMzA0NdQ0sLcyWFvMTc VFslF58AXbfMHKCblBTKEnNKgUIBicXFSvp2NkX5pSWpChn5xSW2SqkFKTkFJgV6xYm5xaV5 6Xp5qSVWhgYGRqZAhQnZGSf+2xR0ylc0HVjD2sC4QKyLkZNDQsBEYmLDVNYuRi4OIYHdjBIv nuxlgnA+MUrcPviGEc5Z9uoWK0zL0uanbBCJnYwSC189YYdwGpgkWpZtBKtiEzCQeNB8nB3E FhGQlPjddZoZxGYW+MAoseipLogtLJAhsWzHViYQm0VAVeLD0+9gNbwCthLtJ99AbZOX2H/w LFCcg4NTwE5i2stsiBJBiZMzn7BAjJSXaN46mxnkBgmBVg6J31enskP0ukj82LeDEcIWlnh1 fAtUXEriZX8blF0sce7iJ6iaGonXXSuYIWx7idZT/WB7mQU0Jdbv0ocIy0pMPbWOCWIvn0Tv 7ydMEHFeiR3zQGwOIFtFYunbTJhNX541Q033kPh46y8zJKgmMkpce/OQbQKjwiwk78xC8s4s hM0LGJlXMUqmFhTnpqcWmxYY5aWWw+M4OT93EyM4lWp57WB8+OCD3iFGJg7GQ4wSHMxKIrwS 09akC/GmJFZWpRblxxeV5qQWH2I0BQb3RGYp0eR8YDLPK4k3NLE0MDEzMzOxNDYzVBLnbd7Z ki4kkJ5YkpqdmlqQWgTTx8TBKdXAlJRw/X72jO0BrnI7FyV0b+22vSJnsXJpaY9O2b3CWwxi 6xKqmvnnekgzSn79vz/H8LnWJ3Xmvl+LDCbXn3FhOaY1x5QptvuDn8H6cGG3kiMFGac2Pzog WP2//cqx4BK/S2+fnvkhIXyq+JC3yBmHtX+7nDdUn1117yjnvd4bHiJWXOeOT544+fFTg098 Tvyps4Lm907PKw9eenjKuY/3fz5c1WxmKGXyPGEPn2L5q7Qr4lZycusy3qYleXWGHONvvjKv al946+5/P9+u7UnmvXlhcv1n3VXWefLPWryc2K4UnL4s8f/etmnchT/bAi2WOio8M93Qq2H/ /ZfMmdoy+bjg8orvKk7bPr9jzu2wUmIpzkg01GIuKk4EAN1nzb8uBAAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrCLMWRmVeSWpSXmKPExsWy7bCSnG7+jrXpBnfbeCymH1a0+HJ6D5vF 6ptrGC1uHtjJZLFw4zImi/OzTrFY/N22l9HieO8OFosTJ7ezA8XmsDtweeycdZfd48m1zUwe fVtWMXpMnV3v8XmTXABrFJdNSmpOZllqkb5dAlfGif82BZ3yFU0H1rA2MC4Q62Lk5JAQMJFY 2vyUrYuRi0NIYDujROuRl4wQCSmJYzt/skHYwhIr/z1nhyj6xyjRtnEtO0iCTcBA4kHzcTBb REBS4nfXaWaQImaBX4wST3ffB0pwcAgLpEnc+MkKUsMioCrx4el3ZhCbV8BWov3kG1aIBfIS +w+eZQYp5xSwk5j2MhskLARUsrvzGhNEuaDEyZlPWEBKmAXUJdbPEwIJMwN1Nm+dzTyBUXAW kqpZCFWzkFQtYGRexSiaWlCcm56bXGCoV5yYW1yal66XnJ+7iREcEVpBOxiXrf+rd4iRiYPx EKMEB7OSCK/EtDXpQrwpiZVVqUX58UWlOanFhxilOViUxHmVczpThATSE0tSs1NTC1KLYLJM HJxSDUxsBQ2X2ObMM/dzLtl76bG1y9tZis7ZGv8vXVzzdnu9pO8E90tLfjEmV9ZePBe/9doJ 5S1PdwnKHTmi5L7/X9axtjLBKM33rtzTosyXxugLdtfueFgry19f2mX2v6u/taw3/NIHd7uN TGu/8WZbWx41Smzb7fA+Ja/xWrzfr8Ta0MS6pZbJq7h3PPseWPNy11Mdm6zlNu4XfXVShT9N //BLaK5Pb89MBsG4mXpHP4R/n5G56EbSDRdnQ9Up+3kS7jb7zv3ToT/bxln73PddDZlrmWyv F4YEWYQusp2yPlfQ98jHGKaAyO/trY9qmJYr2izO6+SPPta9ZHFwIs/aOexsu8KT5HdqTeqP cbz6T4mlOCPRUIu5qDgRAKNOHPn3AgAA X-CMS-MailID: 20250213091631epcas5p12bc4ff8f6f3498f400cf5f2cb1a42e96 X-Msg-Generator: CA X-Sendblock-Type: REQ_APPROVE CMS-TYPE: 105P DLP-Filter: Pass X-CFilter-Loop: Reflected X-CMS-RootMailID: 20250213091631epcas5p12bc4ff8f6f3498f400cf5f2cb1a42e96 References: <20250213091558.2294806-1-vinayak.kh@samsung.com> Move the code of calculation of sanitize duration into function for usability by other sanitize routines Estimate times based on: https://pmem.io/documents/NVDIMM_DSM_Interface-V1.8.pdf Signed-off-by: Davidlohr Bueso Signed-off-by: Vinayak Holikatti --- hw/cxl/cxl-mailbox-utils.c | 61 ++++++++++++++++++++++---------------- 1 file changed, 35 insertions(+), 26 deletions(-) diff --git a/hw/cxl/cxl-mailbox-utils.c b/hw/cxl/cxl-mailbox-utils.c index fa38ecf507..d58c20842f 100644 --- a/hw/cxl/cxl-mailbox-utils.c +++ b/hw/cxl/cxl-mailbox-utils.c @@ -1656,34 +1656,10 @@ static void __do_sanitization(CXLType3Dev *ct3d) cxl_discard_all_event_records(&ct3d->cxl_dstate); } -/* - * CXL r3.1 Section 8.2.9.9.5.1: Sanitize (Opcode 4400h) - * - * Once the Sanitize command has started successfully, the device shall be - * placed in the media disabled state. If the command fails or is interrupted - * by a reset or power failure, it shall remain in the media disabled state - * until a successful Sanitize command has been completed. During this state: - * - * 1. Memory writes to the device will have no effect, and all memory reads - * will return random values (no user data returned, even for locations that - * the failed Sanitize operation didn’t sanitize yet). - * - * 2. Mailbox commands shall still be processed in the disabled state, except - * that commands that access Sanitized areas shall fail with the Media Disabled - * error code. - */ -static CXLRetCode cmd_sanitize_overwrite(const struct cxl_cmd *cmd, - uint8_t *payload_in, - size_t len_in, - uint8_t *payload_out, - size_t *len_out, - CXLCCI *cci) +static int get_sanitize_duration(uint64_t total_mem) { - CXLType3Dev *ct3d = CXL_TYPE3(cci->d); - uint64_t total_mem; /* in Mb */ - int secs; + int secs = 0; - total_mem = (ct3d->cxl_dstate.vmem_size + ct3d->cxl_dstate.pmem_size) >> 20; if (total_mem <= 512) { secs = 4; } else if (total_mem <= 1024) { @@ -1712,6 +1688,39 @@ static CXLRetCode cmd_sanitize_overwrite(const struct cxl_cmd *cmd, secs = 240 * 60; /* max 4 hrs */ } + return secs; +} + +/* + * CXL r3.1 Section 8.2.9.9.5.1: Sanitize (Opcode 4400h) + * + * Once the Sanitize command has started successfully, the device shall be + * placed in the media disabled state. If the command fails or is interrupted + * by a reset or power failure, it shall remain in the media disabled state + * until a successful Sanitize command has been completed. During this state: + * + * 1. Memory writes to the device will have no effect, and all memory reads + * will return random values (no user data returned, even for locations that + * the failed Sanitize operation didn’t sanitize yet). + * + * 2. Mailbox commands shall still be processed in the disabled state, except + * that commands that access Sanitized areas shall fail with the Media Disabled + * error code. + */ +static CXLRetCode cmd_sanitize_overwrite(const struct cxl_cmd *cmd, + uint8_t *payload_in, + size_t len_in, + uint8_t *payload_out, + size_t *len_out, + CXLCCI *cci) +{ + CXLType3Dev *ct3d = CXL_TYPE3(cci->d); + uint64_t total_mem; /* in Mb */ + int secs; + + total_mem = (ct3d->cxl_dstate.vmem_size + ct3d->cxl_dstate.pmem_size) >> 20; + secs = get_sanitize_duration(total_mem); + /* EBUSY other bg cmds as of now */ cci->bg.runtime = secs * 1000UL; *len_out = 0; From patchwork Thu Feb 13 09:15:58 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vinayak Holikatti X-Patchwork-Id: 13974680 Received: from mailout4.samsung.com (mailout4.samsung.com [203.254.224.34]) (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 2D9E320B20B for ; Fri, 14 Feb 2025 09:35:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=203.254.224.34 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739525760; cv=none; b=jtNFSuyXXJi2KpEcph76EJMdGNxkmdoG5Md4whDvs/I0aabp3Al346wMTUf5T7DKYd8DT900RpO1HlWflvFsUudCC6whpIas6TRAhblc7ARbDC/sC2IfFdN8bjwb2u4tFAl5g44CyGWTZnw9VbtWL19Udr4F0JvFXet0R3xz5eU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739525760; c=relaxed/simple; bh=6+ZzGC376dH2gCa0QIpRG7enq/QZwFBJJuu7uyWMZcc=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:MIME-Version: Content-Type:References; b=qRbPVEvWrujeRHVJWi83R2m9B2S9dqsfoxkWexYP8mD03MKyDWnqowp9RoLUg4i0r+3NMY4+sWuk6lQUFw02Q12vyhITgA9LzSRouUyiQUVmYz4NHzUmrZextf5lPUO5kqxvlJzOE5xVgZnoI0v5rCI/UotC/ivdOwvc38pj5yE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=samsung.com; spf=pass smtp.mailfrom=samsung.com; dkim=pass (1024-bit key) header.d=samsung.com header.i=@samsung.com header.b=ZXnfyRLt; arc=none smtp.client-ip=203.254.224.34 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=samsung.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=samsung.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=samsung.com header.i=@samsung.com header.b="ZXnfyRLt" Received: from epcas5p1.samsung.com (unknown [182.195.41.39]) by mailout4.samsung.com (KnoxPortal) with ESMTP id 20250214093556epoutp0439f02685560a3a9970bf20fd3cac6c97~kCXVy7o5t2711427114epoutp04V for ; Fri, 14 Feb 2025 09:35:56 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout4.samsung.com 20250214093556epoutp0439f02685560a3a9970bf20fd3cac6c97~kCXVy7o5t2711427114epoutp04V DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1739525756; bh=Vc97jgJbEviaDj/yLkE6JZXsHnH63oK5DVgY2B1eEi0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ZXnfyRLt0q+LWJKVFEnBMGGh6e0ploPubRu3RbTx8kYPgg6ozR7sID/EGk8HPe+Ky 46vINlCUM10cp+VO6P5P6y3M8rrgLzjnUkDeAtiNIXpXwZeq1g7x5I4js/tpULKNZm 2Q9CIstPjbfCdP8gJIkwXaasepz31F5K4DpmDiT0= Received: from epsnrtp4.localdomain (unknown [182.195.42.165]) by epcas5p3.samsung.com (KnoxPortal) with ESMTP id 20250214093555epcas5p3fbde7fd7f0983c29a6efadc643d594d8~kCXVcxxbx0837108371epcas5p3B; Fri, 14 Feb 2025 09:35:55 +0000 (GMT) Received: from epsmgec5p1-new.samsung.com (unknown [182.195.38.176]) by epsnrtp4.localdomain (Postfix) with ESMTP id 4YvRkK6KjHz4x9Pw; Fri, 14 Feb 2025 09:35:53 +0000 (GMT) Received: from epcas5p1.samsung.com ( [182.195.41.39]) by epsmgec5p1-new.samsung.com (Symantec Messaging Gateway) with SMTP id 4F.CA.29212.97E0FA76; Fri, 14 Feb 2025 18:35:53 +0900 (KST) Received: from epsmtrp1.samsung.com (unknown [182.195.40.13]) by epcas5p2.samsung.com (KnoxPortal) with ESMTPA id 20250213091632epcas5p2726909f864b50cc2d1b7ceb2415698c2~judIOkc5M2873628736epcas5p2H; Thu, 13 Feb 2025 09:16:32 +0000 (GMT) Received: from epsmgms1p2new.samsung.com (unknown [182.195.42.42]) by epsmtrp1.samsung.com (KnoxPortal) with ESMTP id 20250213091632epsmtrp1e5710ca8428766a8f316e7aefd770d66~judIN1gbd2265722657epsmtrp1X; Thu, 13 Feb 2025 09:16:32 +0000 (GMT) X-AuditID: b6c32a50-801fa7000000721c-dc-67af0e79aa48 Received: from epsmtip1.samsung.com ( [182.195.34.30]) by epsmgms1p2new.samsung.com (Symantec Messaging Gateway) with SMTP id 41.74.18949.078BDA76; Thu, 13 Feb 2025 18:16:32 +0900 (KST) Received: from test-PowerEdge-R740xd.samsungds.net (unknown [107.99.41.79]) by epsmtip1.samsung.com (KnoxPortal) with ESMTPA id 20250213091631epsmtip1bf345230d70212fb28cf55d27cd81da2~judGyghYr2196821968epsmtip1T; Thu, 13 Feb 2025 09:16:31 +0000 (GMT) From: Vinayak Holikatti To: qemu-devel@nongnu.org Cc: gost.dev@samsung.com, linux-cxl@vger.kernel.org, nifan.cxl@gmail.com, dave@stgolabs.net, vishak.g@samsung.com, krish.reddy@samsung.com, a.manzanares@samsung.com, alok.rathore@samsung.com, Vinayak Holikatti Subject: [PATCH v2 3/3] hw/cxl/cxl-mailbox-utils: Add support for Media operations Sanitize and Write Zeros commands (8.2.9.9.5.3) Date: Thu, 13 Feb 2025 14:45:58 +0530 Message-Id: <20250213091558.2294806-4-vinayak.kh@samsung.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250213091558.2294806-1-vinayak.kh@samsung.com> Precedence: bulk X-Mailing-List: linux-cxl@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprNJsWRmVeSWpSXmKPExsWy7bCmum4l3/p0g8dTDCymH1a0+HJ6D5vF 6ptrGC1uHtjJZLFw4zImi/OzTrFY/N22l9HieO8OFosTJ7ezA8XmsDtweeycdZfd48m1zUwe fVtWMXpMnV3v8XmTXABrVLZNRmpiSmqRQmpecn5KZl66rZJ3cLxzvKmZgaGuoaWFuZJCXmJu qq2Si0+ArltmDtBNSgpliTmlQKGAxOJiJX07m6L80pJUhYz84hJbpdSClJwCkwK94sTc4tK8 dL281BIrQwMDI1OgwoTsjKs31rIXvA2oePLhB3sD41yzLkYODgkBE4nlWwq7GDk5hAT2MEpc OVXbxcgFZH9ilHiw5y4bhPONUeLP5TtsIFUgDUem3GOESOxllPh5oo8Zwmlgknh18TMjSBWb gIHEg+bj7CC2iICkxO+u08wgNrPAB0aJRU91QRqEBVoYJS7+OgaWYBFQldj34SETiM0rYCvR cfUa1Dp5if0HzzKD3MopYCcx7WU2RImgxMmZT1ggZspLNG+dDXaEhMBfdolpa45C9bpILLvW DWULS7w6voUdwpaSeNnfBmUXS5y7+IkRwq6ReN21ghnCtpdoPdUPtpdZQFNi/S59iLCsxNRT 65gg9vJJ9P5+wgQR55XYMQ/EBgWpisTSt5kwm748a2aECHtInLpXAgmqicBw23CWeQKjwiwk 38xC8s0shMULGJlXMUqlFhTnpqcmmxYY6uallsPjODk/dxMjOJVqBexgXL3hr94hRiYOxkOM EhzMSiK8wMBIF+JNSaysSi3Kjy8qzUktPsRoCgzuicxSosn5wGSeVxJvaGJpYGJmZmZiaWxm qCTO27yzJV1IID2xJDU7NbUgtQimj4mDU6qBSam7vru2+XTLPt8/T8zXGjkZOTJXL7HIU97w LpLJpvNbZPGtxsuHRXZUR+em6tb++XRkxdz+m7a+i2piHeMTt3Vb7lhg8MBoicyrAzfrdmQu 5U3O85mxbMZpe4PAis45znKl79nfqX1UXdgW0HQ+NbFu7+UeiZpL7+8sFprs8dFk2o7ljxyT /n05EWsm3v72pu/KQ5VtjX81U+Teh/RY9WrEvZofKf7p4OSOu43lt6czznTYeIVPm7N1VpCG 6DYDLt053278WbTdOmi96d66N4Vbz13veP5nGmNF8dLZyw/FHf7xeKYt+/6F1y4cUNBIMo8q 61x73/L4MoVTf+R6n+prMMqb1Jhnb2G7xMv0SYmlOCPRUIu5qDgRAEU6Sg0uBAAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrKLMWRmVeSWpSXmKPExsWy7bCSnG7BjrXpBsu2GVtMP6xo8eX0HjaL 1TfXMFrcPLCTyWLhxmVMFudnnWKx+LttL6PF8d4dLBYnTm5nB4rNYXfg8tg56y67x5Nrm5k8 +rasYvSYOrve4/MmuQDWKC6blNSczLLUIn27BK6MqzfWshe8Dah48uEHewPjXLMuRk4OCQET iSNT7jF2MXJxCAnsZpQ4/XcNG0RCSuLYzp9QtrDEyn/P2SGK/jFKfDw1CSzBJmAg8aD5ODuI LSIgKfG76zQzSBGzwC9Giae774N1CAs0MUqsWfSFCaSKRUBVYt+Hh2A2r4CtRMfVa1Ar5CX2 HzwL1M3BwSlgJzHtZTZIWAioZHfnNahyQYmTM5+wgNjMQOXNW2czT2AUmIUkNQtJagEj0ypG ydSC4tz03GLDAqO81HK94sTc4tK8dL3k/NxNjOCQ19Lawbhn1Qe9Q4xMHIyHGCU4mJVEeCWm rUkX4k1JrKxKLcqPLyrNSS0+xCjNwaIkzvvtdW+KkEB6YklqdmpqQWoRTJaJg1OqgWnSTYuf rGfWm0wNCJvQZxtzM35abNzsGZs5BNtni8+9KqYsNdOf8XXxPOWv1uf35ga1/8o/y//7Tdfk Qxl20+fs+rLz6Qa2OPmsA8d33pr5Qv8d+7vtfH8d7KMYbv11W6m24emkN5xtdmUf532+cNPf uzhv75T2xOXG2ZVHvfJnGd7vP/prQdFlhQ1HOzcphhomdi4xd60L/WCc3BjTvff9W/dZm3/3 fph5+/m91c4pPIrxz1y6T6/q/vDi8JGmv1frzoUGnNh7o3Rxxsp3p9Itd0gtDFy5t/r/vLdL b3LE6RWt578pNdPbftO6E2n+f272yEU+SG2/kio9pesIT1D+fsVfUlPeJM3X3stzRs3tgBJL cUaioRZzUXEiAKYhZ0boAgAA X-CMS-MailID: 20250213091632epcas5p2726909f864b50cc2d1b7ceb2415698c2 X-Msg-Generator: CA X-Sendblock-Type: REQ_APPROVE CMS-TYPE: 105P DLP-Filter: Pass X-CFilter-Loop: Reflected X-CMS-RootMailID: 20250213091632epcas5p2726909f864b50cc2d1b7ceb2415698c2 References: <20250213091558.2294806-1-vinayak.kh@samsung.com> CXL spec 3.1 section 8.2.9.9.5.3 describes media operations commands. CXL devices supports media operations Sanitize and Write zero command. Signed-off-by: Vinayak Holikatti --- hw/cxl/cxl-mailbox-utils.c | 217 +++++++++++++++++++++++++++++++++++- include/hw/cxl/cxl_device.h | 4 + 2 files changed, 216 insertions(+), 5 deletions(-) diff --git a/hw/cxl/cxl-mailbox-utils.c b/hw/cxl/cxl-mailbox-utils.c index d58c20842f..2d8d1171b4 100644 --- a/hw/cxl/cxl-mailbox-utils.c +++ b/hw/cxl/cxl-mailbox-utils.c @@ -1732,6 +1732,130 @@ static CXLRetCode cmd_sanitize_overwrite(const struct cxl_cmd *cmd, } #define CXL_CACHELINE_SIZE 64 +struct CXLSanitizeInfo { + uint32_t dpa_range_count; + uint8_t fill_value; + struct { + uint64_t starting_dpa; + uint64_t length; + } dpa_range_list[]; +}; + +struct dpa_range_list_entry { + uint64_t starting_dpa; + uint64_t length; +}; + +static uint64_t get_vmr_size(CXLType3Dev *ct3d, MemoryRegion **vmr) +{ + uint64_t vmr_size = 0; + if (ct3d->hostvmem) { + *vmr = host_memory_backend_get_memory(ct3d->hostvmem); + vmr_size = memory_region_size(*vmr); + } + return vmr_size; +} + +static uint64_t get_pmr_size(CXLType3Dev *ct3d, MemoryRegion **pmr) +{ + uint64_t pmr_size = 0; + if (ct3d->hostpmem) { + *pmr = host_memory_backend_get_memory(ct3d->hostpmem); + pmr_size = memory_region_size(*pmr); + } + return pmr_size; +} + +static uint64_t get_dc_size(CXLType3Dev *ct3d, MemoryRegion **dc_mr) +{ + uint64_t dc_size = 0; + if (ct3d->dc.host_dc) { + *dc_mr = host_memory_backend_get_memory(ct3d->dc.host_dc); + dc_size = memory_region_size(*dc_mr); + } + return dc_size; +} + +static int validate_dpa_addr(CXLType3Dev *ct3d, uint64_t dpa_addr, + size_t length) +{ + MemoryRegion *vmr = NULL, *pmr = NULL, *dc_mr = NULL; + uint64_t vmr_size = 0, pmr_size = 0, dc_size = 0; + + if ((dpa_addr % CXL_CACHELINE_SIZE) || + (length % CXL_CACHELINE_SIZE) || + (length <= 0)) { + return -EINVAL; + } + + vmr_size = get_vmr_size(ct3d, &vmr); + pmr_size = get_pmr_size(ct3d, &pmr); + dc_size = get_dc_size(ct3d, &dc_mr); + + if (!vmr && !pmr && !dc_mr) { + return -ENODEV; + } + + if ((dpa_addr + length) > vmr_size + pmr_size + dc_size) { + return -EINVAL; + } + + if (dpa_addr > vmr_size + pmr_size) { + if (!ct3_test_region_block_backed(ct3d, dpa_addr, length)) { + return -ENODEV; + } + } + + return 0; +} + +static int sanitize_range(CXLType3Dev *ct3d, uint64_t dpa_addr, size_t length, + uint8_t fill_value) +{ + + MemoryRegion *vmr = NULL, *pmr = NULL; + uint64_t vmr_size = 0, pmr_size = 0; + AddressSpace *as = NULL; + MemTxAttrs mem_attrs = {0}; + + vmr_size = get_vmr_size(ct3d, &vmr); + pmr_size = get_pmr_size(ct3d, &pmr); + + if (dpa_addr < vmr_size) { + as = &ct3d->hostvmem_as; + } else if (dpa_addr < vmr_size + pmr_size) { + as = &ct3d->hostpmem_as; + } else { + if (!ct3_test_region_block_backed(ct3d, dpa_addr, length)) { + return -ENODEV; + } + as = &ct3d->dc.host_dc_as; + } + + return address_space_set(as, dpa_addr, + fill_value, length, mem_attrs); +} + +/* Perform the actual device zeroing */ +static void __do_sanitize(CXLType3Dev *ct3d) +{ + struct CXLSanitizeInfo *san_info = ct3d->media_op_sanitize; + int dpa_range_count = san_info->dpa_range_count; + int rc = 0; + + for (int i = 0; i < dpa_range_count; i++) { + rc = sanitize_range(ct3d, san_info->dpa_range_list[i].starting_dpa, + san_info->dpa_range_list[i].length, san_info->fill_value); + if (rc) { + goto exit; + } + } +exit: + g_free(ct3d->media_op_sanitize); + ct3d->media_op_sanitize = NULL; + return; +} + enum { MEDIA_OP_CLASS_GENERAL = 0x0, #define MEDIA_OP_GEN_SUBC_DISCOVERY 0x0 @@ -1760,9 +1884,9 @@ static const struct media_op_supported_list_entry media_op_matrix[] = { }; static CXLRetCode media_operations_discovery(uint8_t *payload_in, - size_t len_in, - uint8_t *payload_out, - size_t *len_out) + size_t len_in, + uint8_t *payload_out, + size_t *len_out) { struct { uint8_t media_operation_class; @@ -1811,6 +1935,66 @@ static CXLRetCode media_operations_discovery(uint8_t *payload_in, return CXL_MBOX_SUCCESS; } +static CXLRetCode media_operations_sanitize(CXLType3Dev *ct3d, + uint8_t *payload_in, + size_t len_in, + uint8_t *payload_out, + size_t *len_out, + uint8_t fill_value, + CXLCCI *cci) +{ + struct media_operations_sanitize { + uint8_t media_operation_class; + uint8_t media_operation_subclass; + uint8_t rsvd[2]; + uint32_t dpa_range_count; + struct { + uint64_t starting_dpa; + uint64_t length; + } dpa_range_list[]; + } QEMU_PACKED *media_op_in_sanitize_pl = (void *)payload_in; + uint32_t dpa_range_count = media_op_in_sanitize_pl->dpa_range_count; + uint64_t total_mem = 0; + int secs = 0; + + if (len_in < (sizeof(*media_op_in_sanitize_pl) + + (dpa_range_count * sizeof(struct dpa_range_list_entry)))) { + return CXL_MBOX_INVALID_PAYLOAD_LENGTH; + } + + for (int i = 0; i < dpa_range_count; i++) { + if (validate_dpa_addr(ct3d, + media_op_in_sanitize_pl->dpa_range_list[i].starting_dpa, + media_op_in_sanitize_pl->dpa_range_list[i].length)) { + return CXL_MBOX_INVALID_INPUT; + } + total_mem += media_op_in_sanitize_pl->dpa_range_list[i].length; + } + ct3d->media_op_sanitize = g_malloc0(sizeof(struct CXLSanitizeInfo) + + (dpa_range_count * + sizeof(struct dpa_range_list_entry))); + + if (ct3d->media_op_sanitize) { + ct3d->media_op_sanitize->dpa_range_count = dpa_range_count; + ct3d->media_op_sanitize->fill_value = fill_value; + memcpy(ct3d->media_op_sanitize->dpa_range_list, + media_op_in_sanitize_pl->dpa_range_list, + (dpa_range_count * + sizeof(struct dpa_range_list_entry))); + secs = get_sanitize_duration(total_mem >> 20); + } + + /* EBUSY other bg cmds as of now */ + cci->bg.runtime = secs * 1000UL; + *len_out = 0; + /* + * media op sanitize is targeted so no need to disable media or + * clear event logs + */ + return CXL_MBOX_BG_STARTED; + +} + static CXLRetCode cmd_media_operations(const struct cxl_cmd *cmd, uint8_t *payload_in, size_t len_in, @@ -1825,6 +2009,9 @@ static CXLRetCode cmd_media_operations(const struct cxl_cmd *cmd, uint32_t dpa_range_count; } QEMU_PACKED *media_op_in_common_pl = (void *)payload_in; + CXLType3Dev *ct3d = CXL_TYPE3(cci->d); + uint8_t fill_value = 0; + if (len_in < sizeof(*media_op_in_common_pl)) { return CXL_MBOX_INVALID_PAYLOAD_LENGTH; } @@ -1851,15 +2038,29 @@ static CXLRetCode cmd_media_operations(const struct cxl_cmd *cmd, return media_operations_discovery(payload_in, len_in, payload_out, len_out); case MEDIA_OP_CLASS_SANITIZE: + if (dpa_range_count == 0) { + return CXL_MBOX_SUCCESS; + } switch (media_op_subclass) { + case MEDIA_OP_SAN_SUBC_SANITIZE: + fill_value = 0xF; + return media_operations_sanitize(ct3d, payload_in, len_in, + payload_out, len_out, fill_value, + cci); + break; + case MEDIA_OP_SAN_SUBC_ZERO: + fill_value = 0; + return media_operations_sanitize(ct3d, payload_in, len_in, + payload_out, len_out, fill_value, + cci); + break; default: return CXL_MBOX_UNSUPPORTED; } + break; default: return CXL_MBOX_UNSUPPORTED; } - - return CXL_MBOX_SUCCESS; } static CXLRetCode cmd_get_security_state(const struct cxl_cmd *cmd, @@ -3173,6 +3374,12 @@ static void bg_timercb(void *opaque) cxl_dev_enable_media(&ct3d->cxl_dstate); } break; + case 0x4402: /* Media Operations sanitize */ + { + CXLType3Dev *ct3d = CXL_TYPE3(cci->d); + __do_sanitize(ct3d); + } + break; case 0x4304: /* scan media */ { CXLType3Dev *ct3d = CXL_TYPE3(cci->d); diff --git a/include/hw/cxl/cxl_device.h b/include/hw/cxl/cxl_device.h index a64739be25..b391a293a8 100644 --- a/include/hw/cxl/cxl_device.h +++ b/include/hw/cxl/cxl_device.h @@ -581,6 +581,8 @@ typedef struct CXLSetFeatureInfo { size_t data_size; } CXLSetFeatureInfo; +struct CXLSanitizeInfo; + struct CXLType3Dev { /* Private */ PCIDevice parent_obj; @@ -651,6 +653,8 @@ struct CXLType3Dev { uint8_t num_regions; /* 0-8 regions */ CXLDCRegion regions[DCD_MAX_NUM_REGION]; } dc; + + struct CXLSanitizeInfo *media_op_sanitize; }; #define TYPE_CXL_TYPE3 "cxl-type3"