From patchwork Thu Feb 20 05:27:22 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vinayak Holikatti X-Patchwork-Id: 13983347 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 BA9DD135A53 for ; Thu, 20 Feb 2025 05:28:44 +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=1740029327; cv=none; b=tGtikwNJLSp7DyO05sDlKWwUClsHZtFMV29xeQVw5/n0eW46kiXBIo/vm6RE0Q9qlgJYYqrWRqu+wlAgKHIN0q2fqCQxSyNk6060gpyyjzJ7AAVys9DNpucCDwujTpz1MFFFf2ZxAWU9RfMnYNnOQlIksfawoneRLl+rKPb0BiU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740029327; c=relaxed/simple; bh=YLk3o7igdCexPPJXvBMtCSbHkcTxvaXX3CH43muQN4Y=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:MIME-Version: Content-Type:References; b=lfnffcZYRLoC46gU1YTGvpNr4LadBGTdiz1gzvQxgi1qrb6i+JKsob7jgXZqhpYhFY47MZnfFZelEZnSj0KDfYrI4Y3A2sAGv6zJQPq7qXDUO+XgW3bF2VXhJQUPse+kzzWmerMkT5tHh0y5lj3S7msBcXxJ/N4IIsAhu3wuhbQ= 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=aUYCafLT; 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="aUYCafLT" Received: from epcas5p2.samsung.com (unknown [182.195.41.40]) by mailout4.samsung.com (KnoxPortal) with ESMTP id 20250220052842epoutp0429655131e602439bcbd3a272baebdb6b~l03Mpp8KE1535615356epoutp04m for ; Thu, 20 Feb 2025 05:28:42 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout4.samsung.com 20250220052842epoutp0429655131e602439bcbd3a272baebdb6b~l03Mpp8KE1535615356epoutp04m DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1740029322; bh=n1y/7rvCq+AbMd5usBXzULQZnDqta6PaD03cEJBUPfA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=aUYCafLT3GgcAMbr/rS/86kzNqGU6znJakkL6fzelMpOL5Tpt9+XyVYL+r7N+4slV GRvS+Lqg1LH8HSBuO/7RNt4DyJ3Q+OA2Ppnzm5+7hc0ZuMCuB6kaA7TcLj62ox8oQw njrbILrXhGXHNpLJ8jcBFboJOiRJwl7VJUABkF1s= Received: from epsnrtp3.localdomain (unknown [182.195.42.164]) by epcas5p4.samsung.com (KnoxPortal) with ESMTP id 20250220052842epcas5p40e0665ec91b84d22145600757040941d~l03MT1OIE1079910799epcas5p45; Thu, 20 Feb 2025 05:28:42 +0000 (GMT) Received: from epsmgec5p1new.samsung.com (unknown [182.195.38.175]) by epsnrtp3.localdomain (Postfix) with ESMTP id 4Yz1yH70Kmz4x9Pr; Thu, 20 Feb 2025 05:28:39 +0000 (GMT) Received: from epcas5p2.samsung.com ( [182.195.41.40]) by epsmgec5p1new.samsung.com (Symantec Messaging Gateway) with SMTP id 0C.8D.19710.78DB6B76; Thu, 20 Feb 2025 14:28:39 +0900 (KST) Received: from epsmtrp1.samsung.com (unknown [182.195.40.13]) by epcas5p2.samsung.com (KnoxPortal) with ESMTPA id 20250220052734epcas5p2c0e082880350b5fa314c9062294bbc80~l02Nhs-9x2074720747epcas5p2v; Thu, 20 Feb 2025 05:27:34 +0000 (GMT) Received: from epsmgmc1p1new.samsung.com (unknown [182.195.42.40]) by epsmtrp1.samsung.com (KnoxPortal) with ESMTP id 20250220052734epsmtrp1385e02993de9e0ac5d432c202b2a77c8~l02Ng5faI1160311603epsmtrp1J; Thu, 20 Feb 2025 05:27:34 +0000 (GMT) X-AuditID: b6c32a44-36bdd70000004cfe-35-67b6bd871651 Received: from epsmtip2.samsung.com ( [182.195.34.31]) by epsmgmc1p1new.samsung.com (Symantec Messaging Gateway) with SMTP id 9E.BA.23488.64DB6B76; Thu, 20 Feb 2025 14:27:34 +0900 (KST) Received: from test-PowerEdge-R740xd.samsungds.net (unknown [107.99.41.79]) by epsmtip2.samsung.com (KnoxPortal) with ESMTPA id 20250220052733epsmtip2ab7287c3d7e346091badd88152e6002e~l02MGR0jj1496914969epsmtip2S; Thu, 20 Feb 2025 05:27:33 +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 v3 1/3] hw/cxl/cxl-mailbox-utils: Add support for Media operations discovery commands cxl r3.2 (8.2.10.9.5.3) Date: Thu, 20 Feb 2025 10:57:22 +0530 Message-Id: <20250220052724.1256642-2-vinayak.kh@samsung.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250220052724.1256642-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+NgFprNJsWRmVeSWpSXmKPExsWy7bCmhm773m3pBouPmFtMP6xo8eX0HjaL 1TfXMFrcPLCTyWLhxmVMFudnnWKx+LttL6PF8d4dLBYnTm5nB4rNYXfg8tg56y67x5Nrm5k8 +rasYvSYOrve4/MmuQDWqGybjNTElNQihdS85PyUzLx0WyXv4HjneFMzA0NdQ0sLcyWFvMTc VFslF58AXbfMHKCblBTKEnNKgUIBicXFSvp2NkX5pSWpChn5xSW2SqkFKTkFJgV6xYm5xaV5 6Xp5qSVWhgYGRqZAhQnZGZ9+/WQuuGJQcbV9O0sD41KlLkZODgkBE4nbNw+ydzFycQgJ7GaU 2Pb6GSOE84lR4sKeVSwgVUIC3xglTh/WgOnYPredBaJoL6PEg/5rbBBFDUwSd38lgdhsAgYS D5qPs4PYIgKSEr+7TjOD2MwCHxglFj3VBbGFBeol3rd2gC1gEVCV+Hv1LNgcXgFbiVWN3YwQ y+Ql9h88C9bLKWAnse/pdHaIGkGJkzOfsEDMlJdo3jqbGeQgCYGf7BJzJ31hgmh2kVh74yYr hC0s8er4FnYIW0riZX8blF0sce7iJ6hlNRKvu1YwQ9j2Eq2n+oFsDqAFmhLrd+lDhGUlpp5a xwSxl0+i9/cTqFW8EjvmgdgcQLaKxNK3mTCbvjxrhpruIXG/awczJNwmAoPh7B3mCYwKs5C8 MwvJO7MQNi9gZF7FKJlaUJybnppsWmCYl1oOj+Pk/NxNjOBUquWyg/HG/H96hxiZOBgPMUpw MCuJ8LbVb0kX4k1JrKxKLcqPLyrNSS0+xGgKDO+JzFKiyfnAZJ5XEm9oYmlgYmZmZmJpbGao JM7bvLMlXUggPbEkNTs1tSC1CKaPiYNTqoFp5+uIHe9Tfsbnnzvs8K8syT7PbeG2w8cnigtV 6r3bJF/wwPn8/dww1S+HN7mYXop+/m2S+fqbbJy3P/MlsfX2C5pE7rq3ZcOPyXruVebVszkv X6td71CgbWCwnUE4+Gpv4CnV8o/rV/pvvx2UpGpqnjNRo9RD0W2tsuUf9YuS0jVf3D9Fq2Vv 2T4n00BNzkhF20RVoV2pJex36wez2JsFZRmx0fLqxtHr3SfOfh3B80LuKuuy9S9vSDmuarwQ fULj9+fre47N5n/W9oxBcXXtjPiE72/NZi89VLcoIu20+sZ1ZxdqXF4w/Q3LYxWeRze9b1lO cOfKXm2vLLiqJ/uWuVMLJ9/Fn3fsPfdXM09SYinOSDTUYi4qTgQAxsK14i4EAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrKLMWRmVeSWpSXmKPExsWy7bCSvK7b3m3pBl/m61lMP6xo8eX0HjaL 1TfXMFrcPLCTyWLhxmVMFudnnWKx+LttL6PF8d4dLBYnTm5nB4rNYXfg8tg56y67x5Nrm5k8 +rasYvSYOrve4/MmuQDWKC6blNSczLLUIn27BK6MT79+MhdcMai42r6dpYFxqVIXIyeHhICJ xPa57SxdjFwcQgK7GSW27Z/MDpGQkji28ycbhC0ssfLfc3aIon+MEg/vdzOCJNgEDCQeNB8H axARkJT43XWaGaSIWeAXo8TT3ffBEsICtRILN3xlArFZBFQl/l49CzaVV8BWYlUjxCAJAXmJ /QfPMoPYnAJ2EvueTgfrFQKqWdJ/GqpeUOLkzCcsIDYzUH3z1tnMExgFZiFJzUKSWsDItIpR MrWgODc9N9mwwDAvtVyvODG3uDQvXS85P3cTIzjktTR2ML771qR/iJGJg/EQowQHs5IIb1v9 lnQh3pTEyqrUovz4otKc1OJDjNIcLErivCsNI9KFBNITS1KzU1MLUotgskwcnFINTJrfRFVt SisbxPj4Xmw9c/eewu1jeb0PI6edbHyS1XL/mofpywuNvFkGqXwrOt3nRMr90HTsVOuye7vP 3vXpSstgseV/Em92f37KrvvdqUj7iHp9RTXf0xXtx7gMPpR+4rRLyttRW2cxNTF160TL5GxL 97N7v4QXPJ7km6C/eF5xWIzHDI6rXAX+TyXO18m/iuVdzxi/wl9a1/L4tevvFyjva79pZjeH mSnvyLzFHw9pOhYGpf4Ic3+wjP+Near5i4tFj/v96pTX+R6Qu7BA8eaPg2JzcoJU38z7z9yk X6LsOOuune0ThYDGvvL8mRYnSxOPH3d6tql+WSqjQOhP7rnTn5hHH68LS37FwB6kxFKckWio xVxUnAgAdDrZpegCAAA= X-CMS-MailID: 20250220052734epcas5p2c0e082880350b5fa314c9062294bbc80 X-Msg-Generator: CA X-Sendblock-Type: REQ_APPROVE CMS-TYPE: 105P DLP-Filter: Pass X-CFilter-Loop: Reflected X-CMS-RootMailID: 20250220052734epcas5p2c0e082880350b5fa314c9062294bbc80 References: <20250220052724.1256642-1-vinayak.kh@samsung.com> CXL spec 3.2 section 8.2.10.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 | 133 +++++++++++++++++++++++++++++++++++++ 1 file changed, 133 insertions(+) diff --git a/hw/cxl/cxl-mailbox-utils.c b/hw/cxl/cxl-mailbox-utils.c index 9c7ea5bc35..f55a2fe614 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,134 @@ static CXLRetCode cmd_sanitize_overwrite(const struct cxl_cmd *cmd, return CXL_MBOX_BG_STARTED; } +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_ops; + } discovery_osa; + } QEMU_PACKED *media_op_in_disc_pl = (void *)payload_in; + int count = 0; + int num_ops = 0; + int start_index = 0; + int i = 0; + uint32_t dpa_range_count = 0; + struct media_op_discovery_out_pl *media_out_pl = NULL; + + if (len_in < sizeof(*media_op_in_disc_pl)) { + return CXL_MBOX_INVALID_PAYLOAD_LENGTH; + } + + media_out_pl = (struct media_op_discovery_out_pl *)payload_out; + num_ops = media_op_in_disc_pl->discovery_osa.num_ops; + start_index = media_op_in_disc_pl->discovery_osa.start_index; + dpa_range_count = media_op_in_disc_pl->dpa_range_count; + + /* + * As per spec CXL 3.2 8.2.10.9.5.3 dpa_range_count + * should be zero for discovery sub class command + */ + if (dpa_range_count) { + return CXL_MBOX_INVALID_INPUT; + } + + if (start_index + num_ops > ARRAY_SIZE(media_op_matrix)) { + return CXL_MBOX_INVALID_INPUT; + } + + media_out_pl->dpa_range_granularity = CXL_CACHE_LINE_SIZE; + media_out_pl->total_supported_operations = + ARRAY_SIZE(media_op_matrix); + if (num_ops > 0) { + for (i = start_index; i < start_index + num_ops; 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; + uint8_t media_op_cl = 0; + uint8_t media_op_subclass = 0; + + if (len_in < sizeof(*media_op_in_common_pl)) { + return CXL_MBOX_INVALID_PAYLOAD_LENGTH; + } + + media_op_cl = media_op_in_common_pl->media_operation_class; + media_op_subclass = media_op_in_common_pl->media_operation_subclass; + + switch (media_op_cl) { + case MEDIA_OP_CLASS_GENERAL: + if (media_op_subclass != MEDIA_OP_GEN_SUBC_DISCOVERY) { + return CXL_MBOX_UNSUPPORTED; + } + + return media_operations_discovery(payload_in, len_in, payload_out, + len_out); + default: + return CXL_MBOX_UNSUPPORTED; + } +} + static CXLRetCode cmd_get_security_state(const struct cxl_cmd *cmd, uint8_t *payload_in, size_t len_in, @@ -2864,6 +2993,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 20 05:27:23 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Vinayak Holikatti X-Patchwork-Id: 13983348 Received: from mailout2.samsung.com (mailout2.samsung.com [203.254.224.25]) (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 B1B9119CC20 for ; Thu, 20 Feb 2025 05:28:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=203.254.224.25 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740029332; cv=none; b=NxTITFuNAkZfZo2SyEo5Y6hdwpSYq5pduHBvJR43XuI2w83CycO57/p4r3p5Vkv/jY55sRroyYzs3P0jTPbze81f4gAXLUZ2qoB328ngv2hBkmkqO1nbg7HdIfDs5t9dDCFlIuEObp+rb51/TTV4InObXqfL/GR2o0B37D5gNfU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740029332; c=relaxed/simple; bh=7Tr5Zp9vYROQ+M+902RGyMoAH3+8nZokHIfTcNeZzzk=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:MIME-Version: Content-Type:References; b=oYS8WmEuQlL1Y1VNnaL//bOdWR9eIVs2iVqsriFslVS8p7ukKdnGCjR4LD1GuRQTLjoFrCNhKBh50L9z/WCZI8ksC5lxr/rMbmaHjIOFABW2NQhPh04n/SrRQIr3ujurpuu9wTosnA1i3stYIAdqZYaNXhiAOC2bohnNQ27yecE= 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=A3XS+I5C; arc=none smtp.client-ip=203.254.224.25 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="A3XS+I5C" Received: from epcas5p2.samsung.com (unknown [182.195.41.40]) by mailout2.samsung.com (KnoxPortal) with ESMTP id 20250220052847epoutp02c7c40d7eac7b5f7429417debb4fe5757~l03RMShqT1725317253epoutp02N for ; Thu, 20 Feb 2025 05:28:47 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.samsung.com 20250220052847epoutp02c7c40d7eac7b5f7429417debb4fe5757~l03RMShqT1725317253epoutp02N DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1740029327; bh=9NhaPdm3BDTOK0IhaPe0WxEZpnRK6Icu6IAR630h+CY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=A3XS+I5CyfVO99SgTjMXLeGz4tD65f8VpRYDzYJREFpgFRWo+RJ4/WhBburGufP37 8QES/4etBgg19IaHWlNqew+pqI9bA2HpqETk7PaGbQIFxkL0y+xm2zraGmViSaSQwR Y2IytSAKsmwggFJIcEtDFk3utyViUkg41ae0mVnE= Received: from epsnrtp3.localdomain (unknown [182.195.42.164]) by epcas5p4.samsung.com (KnoxPortal) with ESMTP id 20250220052847epcas5p405d0e17209f8ad8c11d7262e2b0cceb2~l03Q5UqTJ1412414124epcas5p4h; Thu, 20 Feb 2025 05:28:47 +0000 (GMT) Received: from epsmges5p1new.samsung.com (unknown [182.195.38.178]) by epsnrtp3.localdomain (Postfix) with ESMTP id 4Yz1yP15tlz4x9Pr; Thu, 20 Feb 2025 05:28:45 +0000 (GMT) Received: from epcas5p3.samsung.com ( [182.195.41.41]) by epsmges5p1new.samsung.com (Symantec Messaging Gateway) with SMTP id 72.BE.20052.C8DB6B76; Thu, 20 Feb 2025 14:28:45 +0900 (KST) Received: from epsmtrp2.samsung.com (unknown [182.195.40.14]) by epcas5p2.samsung.com (KnoxPortal) with ESMTPA id 20250220052736epcas5p254a601a6710b3fd58a827ca99680d746~l02PHLk2M1855518555epcas5p2b; Thu, 20 Feb 2025 05:27:36 +0000 (GMT) Received: from epsmgmc1p1new.samsung.com (unknown [182.195.42.40]) by epsmtrp2.samsung.com (KnoxPortal) with ESMTP id 20250220052736epsmtrp288a7c12049f09d7eaa8658b90aa37fd4~l02PGdO-a3134831348epsmtrp2E; Thu, 20 Feb 2025 05:27:36 +0000 (GMT) X-AuditID: b6c32a49-3d20270000004e54-39-67b6bd8c218b Received: from epsmtip2.samsung.com ( [182.195.34.31]) by epsmgmc1p1new.samsung.com (Symantec Messaging Gateway) with SMTP id 00.CA.23488.84DB6B76; Thu, 20 Feb 2025 14:27:36 +0900 (KST) Received: from test-PowerEdge-R740xd.samsungds.net (unknown [107.99.41.79]) by epsmtip2.samsung.com (KnoxPortal) with ESMTPA id 20250220052734epsmtip2aea6b1e5abe1ad6084c72ccaf496d5d5~l02NoNXuA1496914969epsmtip2T; Thu, 20 Feb 2025 05:27:34 +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 v3 2/3] hw/cxl: factor out calculation of sanitize duration from cmd_santize_overwrite Date: Thu, 20 Feb 2025 10:57:23 +0530 Message-Id: <20250220052724.1256642-3-vinayak.kh@samsung.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250220052724.1256642-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+NgFprNJsWRmVeSWpSXmKPExsWy7bCmpm7v3m3pBms3MFtMP6xo8eX0HjaL 1TfXMFrcPLCTyWLhxmVMFudnnWKx+LttL6PF8d4dLBYnTm5nB4rNYXfg8tg56y67x5Nrm5k8 +rasYvSYOrve4/MmuQDWqGybjNTElNQihdS85PyUzLx0WyXv4HjneFMzA0NdQ0sLcyWFvMTc VFslF58AXbfMHKCblBTKEnNKgUIBicXFSvp2NkX5pSWpChn5xSW2SqkFKTkFJgV6xYm5xaV5 6Xp5qSVWhgYGRqZAhQnZGR9/nmQt6JSvuPK2lbGBcYFYFyMnh4SAicSzpV+Yuhi5OIQEdjNK TDvZwA7hfGKUmDS9hQ3C+cYocfH6dXaYlgmf+6Fa9jJKfFswC8ppYJKYeGEZG0gVm4CBxIPm 42AdIgKSEr+7TjOD2MwCHxglFj3V7WLk4BAWyJC4/zkbxGQRUJW4ctQepIJXwFbizdqvzBC7 5CX2HzwLZnMK2EnsezqdHaJGUOLkzCcsEBPlJZq3zmYGOUFCoJdDYsbFnVDNLhJTf7xgg7CF JV4d3wL1gJTE53d7oeLFEucufmKEsGskXnetgOq1l2g91c8MchuzgKbE+l36EGFZiamn1jFB 7OWT6P39hAkiziuxYx6IzQFkq0gsfZsJs+nLs2ao6R4Sq240QwN3IqPEzZeH2ScwKsxC8s4s JO/MQti8gJF5FaNkakFxbnpqsWmBYV5qOTyOk/NzNzGCU6mW5w7Guw8+6B1iZOJgPMQowcGs JMLbVr8lXYg3JbGyKrUoP76oNCe1+BCjKTC4JzJLiSbnA5N5Xkm8oYmlgYmZmZmJpbGZoZI4 b/POlnQhgfTEktTs1NSC1CKYPiYOTqkGJqEa6eMWnfzn/E2Ef2ec0Vt9rmNWWnLj0i71jQ0n 5nBftDedqZN+weyZ7yXFnQnPJ243sdniGbD5RdO9kDWz/54UfFUYtK/v6uHO33XhHg4qT87p qKi/SN9uEmKk8CczT+fC1gi/u4vO3HzP3uf8J+yk5ryVCif5Nr7y8z7VuU1ysssBhWO/p07d F+hrv/u9zvuOVWaGIaWx5Utszp1nWuNrdeGNBvcnr20Rs3krZHRO5Krl8V5v8Wf8FZvSv9po k7XyoX2fpi5N5HELdn23UNJ9Yt6tr5rf2OVXTmLcf2C6A7vk/31L5jW1TXq9KXJ9+oRWYWHd +ZNjQqaHbtyxeML5h1OXb6pzdA7cVnT3q5ISS3FGoqEWc1FxIgBQh+y/LgQAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrJLMWRmVeSWpSXmKPExsWy7bCSvK7H3m3pBu9+i1tMP6xo8eX0HjaL 1TfXMFrcPLCTyWLhxmVMFudnnWKx+LttL6PF8d4dLBYnTm5nB4rNYXfg8tg56y67x5Nrm5k8 +rasYvSYOrve4/MmuQDWKC6blNSczLLUIn27BK6Mjz9PshZ0yldcedvK2MC4QKyLkZNDQsBE YsLnfqYuRi4OIYHdjBIvemawQySkJI7t/MkGYQtLrPz3HCwuJPCPUeLoeS8Qm03AQOJB83Gw uIiApMTvrtPMIIOYBX4xSjzdfR8sISyQJtFy9AFjFyMHB4uAqsSVo/YgYV4BW4k3a78yQ8yX l9h/8CyYzSlgJ7Hv6XSoXbYSS/pPs0HUC0qcnPmEBWQMs4C6xPp5QiBhZqDW5q2zmScwCs5C UjULoWoWkqoFjMyrGCVTC4pz03OTDQsM81LL9YoTc4tL89L1kvNzNzGCY0NLYwfju29N+ocY mTgYDzFKcDArifC21W9JF+JNSaysSi3Kjy8qzUktPsQozcGiJM670jAiXUggPbEkNTs1tSC1 CCbLxMEp1cBk0NpWmOh0TPfzEkHzlcJLRJbExAi6B98xWC8cuWlyeuIzxrAN746KpHxbLP65 Me+LSxujDXNtz5uyzfk2ZR91xKtPyyjyz78uHy8/9ytv4xmZTZLPRSsNxWffuFQmfXCH/fEJ p0QZLxhcPxn7cXmtwBnVSdkejM+Pa26ujGHL2+vqFhOwdDVfMGfu8s8K1Q2Pz19ldErsq55r IhOpZihQY716csMH+cP/lp2dk3BsGYvw85uFXHq1Ycbqcl+WWOcetDw/e26iW5JyxpX0xO8T pikeeWQx7+qTxuOu0YYsodevzHnLzOh+qifh77ZbYT9CPr6Zqppt1Hpk2QnPe1f8oxYI+3oq Rr6etlqqcLESS3FGoqEWc1FxIgBHsEYr/AIAAA== X-CMS-MailID: 20250220052736epcas5p254a601a6710b3fd58a827ca99680d746 X-Msg-Generator: CA X-Sendblock-Type: REQ_APPROVE CMS-TYPE: 105P DLP-Filter: Pass X-CFilter-Loop: Reflected X-CMS-RootMailID: 20250220052736epcas5p254a601a6710b3fd58a827ca99680d746 References: <20250220052724.1256642-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 f55a2fe614..2428d85fef 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 20 05:27:24 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vinayak Holikatti X-Patchwork-Id: 13983349 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 2278DA926 for ; Thu, 20 Feb 2025 05:28:54 +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=1740029337; cv=none; b=XK1zUW256KoeMknnkH1LFcm018DwBOXeUFMZ+BLWOXEE8o3Yiz2N8RGqVqDWe7hBM/tM+wqsWsI5fevqI1BKas8wLqofvIC1zEtffADi7ZwEFStq0hc8Cm685YeyqZ2xN6TWQLqNgEg8yozTWGJ6Gb87e1quRIrl9TNmzhL0Mts= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740029337; c=relaxed/simple; bh=9h2YqdznPfcL0T6AMh016dwP0vpn+wwZ1fzqlt1vhF0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:MIME-Version: Content-Type:References; b=pRRtB0HqpJ0LcJEbp93N5MFiBshu3f0U7RR6tw4Wfgq6j9E8DQVZVngNb7EXFWSzfwXBQTjJWy9lzyai2FWwVxfporo0mz9+EgooG/zIueDgslCExjnNYQ/aR17PKyzcPhEaL2qU2yN+QSR5iyEURUZXYn2r0rNAr/grwIyEoaI= 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=g2topHd9; 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="g2topHd9" Received: from epcas5p3.samsung.com (unknown [182.195.41.41]) by mailout3.samsung.com (KnoxPortal) with ESMTP id 20250220052852epoutp036099af9fa04b16a580f9b801c842162b~l03WRaT991678216782epoutp03f for ; Thu, 20 Feb 2025 05:28:52 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout3.samsung.com 20250220052852epoutp036099af9fa04b16a580f9b801c842162b~l03WRaT991678216782epoutp03f DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1740029332; bh=BmlJV03yYaBKKgYhrQ/WDUvXDtMbqXxJ1FIYxQTvZSM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=g2topHd9kvVsYn2HyfuoGI0q9/A1gQ+POhTmzLTi7bND0sLhNJL5VLfpTLP50wKCj hnuN+bOp9VMFAZPWty3mJvKD3rjfBOo8Yu4vp5tF3/HE78gEf7dOR4O4VToEUluuXq eDHkdr5A2ZA/WRxRFL62804rMmEl0Gem61cN8so8= Received: from epsnrtp2.localdomain (unknown [182.195.42.163]) by epcas5p2.samsung.com (KnoxPortal) with ESMTP id 20250220052852epcas5p27e5d6464f5622f4f6aeccb2642d2f77b~l03V1A-4I0943209432epcas5p21; Thu, 20 Feb 2025 05:28:52 +0000 (GMT) Received: from epsmges5p3new.samsung.com (unknown [182.195.38.183]) by epsnrtp2.localdomain (Postfix) with ESMTP id 4Yz1yT53Bxz4x9QB; Thu, 20 Feb 2025 05:28:49 +0000 (GMT) Received: from epcas5p3.samsung.com ( [182.195.41.41]) by epsmges5p3new.samsung.com (Symantec Messaging Gateway) with SMTP id 0B.0C.19956.19DB6B76; Thu, 20 Feb 2025 14:28:49 +0900 (KST) Received: from epsmtrp2.samsung.com (unknown [182.195.40.14]) by epcas5p2.samsung.com (KnoxPortal) with ESMTPA id 20250220052738epcas5p24b49106f81b1a621acffe6124eba9e52~l02Ql-I5q2074720747epcas5p26; Thu, 20 Feb 2025 05:27:38 +0000 (GMT) Received: from epsmgmc1p1new.samsung.com (unknown [182.195.42.40]) by epsmtrp2.samsung.com (KnoxPortal) with ESMTP id 20250220052738epsmtrp20847174883054fc9d23e866bc45c1266~l02QlKhFv3134831348epsmtrp2H; Thu, 20 Feb 2025 05:27:38 +0000 (GMT) X-AuditID: b6c32a4b-fd1f170000004df4-68-67b6bd91cccc Received: from epsmtip2.samsung.com ( [182.195.34.31]) by epsmgmc1p1new.samsung.com (Symantec Messaging Gateway) with SMTP id F0.CA.23488.94DB6B76; Thu, 20 Feb 2025 14:27:38 +0900 (KST) Received: from test-PowerEdge-R740xd.samsungds.net (unknown [107.99.41.79]) by epsmtip2.samsung.com (KnoxPortal) with ESMTPA id 20250220052736epsmtip25bfd52223630658332408dce25c46ed0~l02PKH1N21358513585epsmtip2g; Thu, 20 Feb 2025 05:27:36 +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 v3 3/3] hw/cxl/cxl-mailbox-utils: Add support for Media operations Sanitize and Write Zeros commands cxl r3.2(8.2.10.9.5.3) Date: Thu, 20 Feb 2025 10:57:24 +0530 Message-Id: <20250220052724.1256642-4-vinayak.kh@samsung.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250220052724.1256642-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+NgFprDJsWRmVeSWpSXmKPExsWy7bCmpu7EvdvSDTo/KFlMP6xo8eX0HjaL 1TfXMFrcPLCTyWLhxmVMFudnnWKx+LttL6PF8d4dLBYnTm5nB4rNYXfg8tg56y67x5Nrm5k8 +rasYvSYOrve4/MmuQDWqGybjNTElNQihdS85PyUzLx0WyXv4HjneFMzA0NdQ0sLcyWFvMTc VFslF58AXbfMHKCblBTKEnNKgUIBicXFSvp2NkX5pSWpChn5xSW2SqkFKTkFJgV6xYm5xaV5 6Xp5qSVWhgYGRqZAhQnZGc8fT2ApuOpZMXn9Q6YGxlajLkZODgkBE4lLxyaydTFycQgJ7GaU WPdgFguE84lR4vnGRUwQzjdGibV3NjLDtLw4+IkZIrGXUeLr5x1QVQ1MEht77rKBVLEJGEg8 aD7ODmKLCEhK/O46DdbNLPCBUWLRU10QW1igF8g+7gBiswioSnx+9Qysl1fAVmLzpquMENvk JfYfPAvWyylgJ7Hv6XR2iBpBiZMzn7BAzJSXaN46G+wiCYGf7BLdX7ezQzS7SGy70sUEYQtL vDq+BSouJfH53V42CLtY4tzFT1DLaiRed62AetNeovVUP5DNAbRAU2L9Ln2IsKzE1FPrmCD2 8kn0/n4CNZ5XYsc8EJsDyFaRWPo2E2bTl2fNjBBhD4kpx8QhQTWRUWL6lfPsExgVZiH5ZhaS b2YhLF7AyLyKUTK1oDg3PbXYtMA4L7UcHsnJ+bmbGMHJVMt7B+OjBx/0DjEycTAeYpTgYFYS 4W2r35IuxJuSWFmVWpQfX1Sak1p8iNEUGNwTmaVEk/OB6TyvJN7QxNLAxMzMzMTS2MxQSZy3 eWdLupBAemJJanZqakFqEUwfEwenVAPTvRtTnRw6VuYtEb+8ddPJO1u4OENFcxaKSfEwyb6c dYrX84CG4YylvPFZD1aYFYm4nHS1Ffx1JDzyuNH9WtZa5zN/s8wZ05f1BS5nYQq+udCf94hv dryBdYTmXAPDiTfMK7tzfn9x5JXa2KTAmmG2z1hYfOKb3GXL3Iw889ep3s11D+VozjrlLPX8 4MwLvLdS68+ZPXfZu9D17Mwe2efLTq7YO+FjpKJLWvKdTb9fb0iMu79NcOtyxy+NfMV2F3S8 Kl9IHZpgvCH825n3f5fPa2RyfO5ZbN9m65nGmDInZ1FDTsnx7+nNjjN4OJgnfrh71ubjx3t5 isbVK+XXJBxdJLTr57w5M11Fzc9cqNijxFKckWioxVxUnAgA5IUt4i8EAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrGLMWRmVeSWpSXmKPExsWy7bCSvK7X3m3pBvv3MFlMP6xo8eX0HjaL 1TfXMFrcPLCTyWLhxmVMFudnnWKx+LttL6PF8d4dLBYnTm5nB4rNYXfg8tg56y67x5Nrm5k8 +rasYvSYOrve4/MmuQDWKC6blNSczLLUIn27BK6M548nsBRc9ayYvP4hUwNjq1EXIyeHhICJ xIuDn5i7GLk4hAR2M0pce3eOCSIhJXFs5082CFtYYuW/5+wQRf8YJY409IAVsQkYSDxoPs4O YosISEr87joNNolZ4BejxNPd98E6hAW6GSV6r3wGG8UioCrx+dUzMJtXwFZi86arjBAr5CX2 HzzLDGJzCthJ7Hs6HWyqEFDNkv7TUPWCEidnPmEBsZmB6pu3zmaewCgwC0lqFpLUAkamVYyS qQXFuem5yYYFhnmp5XrFibnFpXnpesn5uZsYwUGvpbGD8d23Jv1DjEwcjIcYJTiYlUR42+q3 pAvxpiRWVqUW5ccXleakFh9ilOZgURLnXWkYkS4kkJ5YkpqdmlqQWgSTZeLglGpgkpmceVOO 6aZN7CWTk6p3bPNL4hK1JK9J9yi7WG7hTlsymVWsvXJP/fs8Yc1z28LWdMwzs7++Ll18ed6a xAKxoAfb5Rm4PvMJvjrfUBTbaJKaterFuVlnZY6f/8J+WThnmbz3xDCXbzfEHBjt9sTLWSRV 33hTzvTO9d1ets2hZqVR217kFN6fseXteb9pvL8FiwXnadxbx3ubw3mB9OqduZMOB2nuq2Hs nvDn/uz5e3aEfz67/sDaq/PnZ9Y77lt381e6zzyeNaUhfBs4lp+79tdysWDE5vMb1F/2fDfZ e21yqEJSvKe8dNJhFWuH3SzsLXUvQ7M+cMc0vigL/nPr5UudCa3nMhdvX7trVse3o0osxRmJ hlrMRcWJAIBurRXpAgAA X-CMS-MailID: 20250220052738epcas5p24b49106f81b1a621acffe6124eba9e52 X-Msg-Generator: CA X-Sendblock-Type: REQ_APPROVE CMS-TYPE: 105P DLP-Filter: Pass X-CFilter-Loop: Reflected X-CMS-RootMailID: 20250220052738epcas5p24b49106f81b1a621acffe6124eba9e52 References: <20250220052724.1256642-1-vinayak.kh@samsung.com> CXL spec 3.2 section 8.2.10.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 | 210 +++++++++++++++++++++++++++++++++++- include/hw/cxl/cxl_device.h | 4 + 2 files changed, 213 insertions(+), 1 deletion(-) diff --git a/hw/cxl/cxl-mailbox-utils.c b/hw/cxl/cxl-mailbox-utils.c index 2428d85fef..7b4e4daeb2 100644 --- a/hw/cxl/cxl-mailbox-utils.c +++ b/hw/cxl/cxl-mailbox-utils.c @@ -1731,6 +1731,130 @@ static CXLRetCode cmd_sanitize_overwrite(const struct cxl_cmd *cmd, return CXL_MBOX_BG_STARTED; } +struct dpa_range_list_entry { + uint64_t starting_dpa; + uint64_t length; +} QEMU_PACKED; + +struct CXLSanitizeInfo { + uint32_t dpa_range_count; + uint8_t fill_value; + struct dpa_range_list_entry dpa_range_list[]; +} QEMU_PACKED; + +static uint64_t get_vmr_size(CXLType3Dev *ct3d, MemoryRegion **vmr) +{ + MemoryRegion *mr; + if (ct3d->hostvmem) { + mr = host_memory_backend_get_memory(ct3d->hostvmem); + if (vmr) { + *vmr = mr; + } + return memory_region_size(mr); + } + return 0; +} + +static uint64_t get_pmr_size(CXLType3Dev *ct3d, MemoryRegion **pmr) +{ + MemoryRegion *mr; + if (ct3d->hostpmem) { + mr = host_memory_backend_get_memory(ct3d->hostpmem); + if (pmr) { + *pmr = mr; + } + return memory_region_size(mr); + } + return 0; +} + +static uint64_t get_dc_size(CXLType3Dev *ct3d, MemoryRegion **dc_mr) +{ + MemoryRegion *mr; + if (ct3d->dc.host_dc) { + mr = host_memory_backend_get_memory(ct3d->dc.host_dc); + if (dc_mr) { + *dc_mr = mr; + } + return memory_region_size(mr); + } + return 0; +} + +static int validate_dpa_addr(CXLType3Dev *ct3d, uint64_t dpa_addr, + size_t length) +{ + uint64_t vmr_size, pmr_size, dc_size; + + if ((dpa_addr % CXL_CACHE_LINE_SIZE) || + (length % CXL_CACHE_LINE_SIZE) || + (length <= 0)) { + return -EINVAL; + } + + vmr_size = get_vmr_size(ct3d, NULL); + pmr_size = get_pmr_size(ct3d, NULL); + dc_size = get_dc_size(ct3d, NULL); + + 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) +{ + + uint64_t vmr_size, pmr_size; + AddressSpace *as = NULL; + MemTxAttrs mem_attrs = {0}; + + vmr_size = get_vmr_size(ct3d, NULL); + pmr_size = get_pmr_size(ct3d, NULL); + + 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, i; + + for (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 @@ -1823,6 +1947,70 @@ 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, i; + + if (dpa_range_count == 0) { + return CXL_MBOX_SUCCESS; + } + + 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 (i = 0; i < dpa_range_count; i++) { + uint64_t start_dpa = + media_op_in_sanitize_pl->dpa_range_list[i].starting_dpa; + uint64_t length = media_op_in_sanitize_pl->dpa_range_list[i].length; + if (validate_dpa_addr(ct3d, start_dpa, 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, @@ -1836,6 +2024,7 @@ static CXLRetCode cmd_media_operations(const struct cxl_cmd *cmd, uint8_t rsvd[2]; uint32_t dpa_range_count; } QEMU_PACKED *media_op_in_common_pl = (void *)payload_in; + CXLType3Dev *ct3d = CXL_TYPE3(cci->d); uint8_t media_op_cl = 0; uint8_t media_op_subclass = 0; @@ -1853,7 +2042,20 @@ static CXLRetCode cmd_media_operations(const struct cxl_cmd *cmd, } return media_operations_discovery(payload_in, len_in, payload_out, - len_out); + len_out); + case MEDIA_OP_CLASS_SANITIZE: + switch (media_op_subclass) { + case MEDIA_OP_SAN_SUBC_SANITIZE: + return media_operations_sanitize(ct3d, payload_in, len_in, + payload_out, len_out, 0xF, + cci); + case MEDIA_OP_SAN_SUBC_ZERO: + return media_operations_sanitize(ct3d, payload_in, len_in, + payload_out, len_out, 0, + cci); + default: + return CXL_MBOX_UNSUPPORTED; + } default: return CXL_MBOX_UNSUPPORTED; } @@ -3170,6 +3372,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..3c5711249b 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"