From patchwork Thu Jan 23 05:09:02 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vinayak Holikatti X-Patchwork-Id: 13948300 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 9630EC0218E for ; Thu, 23 Jan 2025 14:09:19 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1taxsc-0001UO-AV; Thu, 23 Jan 2025 09:08:22 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1taqB9-0002Qd-RD for qemu-devel@nongnu.org; Thu, 23 Jan 2025 00:54:59 -0500 Received: from mailout2.samsung.com ([203.254.224.25]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1taqB5-00054S-VW for qemu-devel@nongnu.org; Thu, 23 Jan 2025 00:54:59 -0500 Received: from epcas5p3.samsung.com (unknown [182.195.41.41]) by mailout2.samsung.com (KnoxPortal) with ESMTP id 20250123055448epoutp02831680f939763aadb10117d5ba1872aa~dPJ-2fsIJ0391803918epoutp02a for ; Thu, 23 Jan 2025 05:54:48 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.samsung.com 20250123055448epoutp02831680f939763aadb10117d5ba1872aa~dPJ-2fsIJ0391803918epoutp02a DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1737611689; bh=pb03Qlpfey9QcVqYI1K3rM6qGOkplAn5Nk9Y1vZ6kqI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=hlMXIfZnQFwmyG5OZGsDSjjPY+Hd3wsfzxudPcFnMdOa+yq/LVYYxypUid8Psieev DRNz8dfbjcMARev8CxDnMN8UlYhoo0+cVdxokcxexCYfJ4575cQXKyhSUcgbw7cf8n XWcCKwSjaQENWsNKcGfaVK7juiGgzgjoccUe/d6U= Received: from epsnrtp1.localdomain (unknown [182.195.42.162]) by epcas5p1.samsung.com (KnoxPortal) with ESMTP id 20250123055448epcas5p16eb8bc7d7710351dd69aad8f94cb157e~dPJ-Muyyl0841308413epcas5p1_; Thu, 23 Jan 2025 05:54:48 +0000 (GMT) Received: from epsmges5p1new.samsung.com (unknown [182.195.38.177]) by epsnrtp1.localdomain (Postfix) with ESMTP id 4YdqsK4SMMz4x9QG; Thu, 23 Jan 2025 05:54:45 +0000 (GMT) Received: from epcas5p3.samsung.com ( [182.195.41.41]) by epsmges5p1new.samsung.com (Symantec Messaging Gateway) with SMTP id FA.6C.20052.3A9D1976; Thu, 23 Jan 2025 14:54:43 +0900 (KST) Received: from epsmtrp1.samsung.com (unknown [182.195.40.13]) by epcas5p2.samsung.com (KnoxPortal) with ESMTPA id 20250123050912epcas5p2965fd6efa702030802a42c225f11f65b~dOiLbSPP12310123101epcas5p2k; Thu, 23 Jan 2025 05:09:12 +0000 (GMT) Received: from epsmgms1p1new.samsung.com (unknown [182.195.42.41]) by epsmtrp1.samsung.com (KnoxPortal) with ESMTP id 20250123050912epsmtrp1075f7ba1354aa08594536d5a733f2a63~dOiLalbee0313303133epsmtrp1c; Thu, 23 Jan 2025 05:09:12 +0000 (GMT) X-AuditID: b6c32a49-3fffd70000004e54-5c-6791d9a38e09 Received: from epsmtip1.samsung.com ( [182.195.34.30]) by epsmgms1p1new.samsung.com (Symantec Messaging Gateway) with SMTP id 7F.6F.18729.8FEC1976; Thu, 23 Jan 2025 14:09:12 +0900 (KST) Received: from test-PowerEdge-R740xd.samsungds.net (unknown [107.99.41.79]) by epsmtip1.samsung.com (KnoxPortal) with ESMTPA id 20250123050911epsmtip18d4c9e5594841fa548db0f70ef0c3ecc~dOiKXDbMS2475324753epsmtip1P; Thu, 23 Jan 2025 05:09:11 +0000 (GMT) From: Vinayak Holikatti To: qemu-devel@nongnu.org Cc: krish.reddy@samsung.com, vishak.g@samsung.com, a.manzanares@samsung.com, alok.rathore@samsung.com, s5.kumari@samsung.com, Vinayak Holikatti Subject: [PATCH 1/2] hw/cxl/cxl-mailbox-utils: Add support for Media operations discovery commands (8.2.9.9.5.3) Date: Thu, 23 Jan 2025 10:39:02 +0530 Message-Id: <20250123050903.92336-2-vinayak.kh@samsung.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250123050903.92336-1-vinayak.kh@samsung.com> MIME-Version: 1.0 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpkk+LIzCtJLcpLzFFi42LZdlhTU3fxzYnpBmd2alhMP6xo8eX0HjaL hRuXMVkc793BYrHm3GcWixMnt7NbnJ81h92B3ePJtc1MHn1bVjEGMEVl22SkJqakFimk5iXn p2TmpdsqeQfHO8ebmhkY6hpaWpgrKeQl5qbaKrn4BOi6ZeYA7VVSKEvMKQUKBSQWFyvp29kU 5ZeWpCpk5BeX2CqlFqTkFJgU6BUn5haX5qXr5aWWWBkaGBiZAhUmZGc8ntfEVPBMv6LtxDrm BsZt8l2MnBwSAiYSHxZtZO9i5OIQEtjNKPHkwV1WCOcTo8TOe+cZIZxvjBJ9Ew6yw7RM+j6R GSKxFyjx9iJUSwOTxOsFJ1hAqtgEDCQeNB8H6xARkJT43XWaGcRmFljDKLFtCdhyYYEiibcN L8FqWARUJS6/XgVm8wpYS7TvvA+1TV5i/8GzYL2cAjYSxza9YYSoEZQ4OfMJC8RMeYnmrbPB LpIQuMQuse3kQiaIZheJ1xefskHYwhKvjm+BGiol8bK/Dcouljh38RMjhF0j8bprBTOEbS/R eqofyOYAWqApsX6XPkRYVmLqqXVMEHv5JHp/P4FaxSuxYx6IzQFkq0gsfZsJs+nLs2ao6R4S 606uZ4GEVT+jxIojbUwTGBVmIXlnFpJ3ZiFsXsDIvIpRMrWgODc9tdi0wDAvtRwey8n5uZsY wWlRy3MH490HH/QOMTJxMB5ilOBgVhLh/f9kQroQb0piZVVqUX58UWlOavEhRlNgeE9klhJN zgcm5rySeEMTSwMTMzMzE0tjM0Mlcd7mnS3pQgLpiSWp2ampBalFMH1MHJxSDUwinVzVYv5L /0+LV9nsai356MHCgj0HRH4sSHx9lS18V+3slStkbyzxrutZ33linpj2xZAKiSmO3fcOW00z 3ei2/dal6CvLrdVVTyrv7pN5vl5B96l+5eUC678LQ+2/81+f89Eo5WBxaN3Z4PirOjpaLhFr 4uqvKK6/YXlmvURv2PFN2eevZXVYLvE1m1cp55An5+WrXvfWI/THpr2Ol8UvOfcZ/L1/u2b+ JwP2HrnYZ6+eBrw7dCbA+Or+tYL/pE05GbpPWtdrHFuSyujUu2B56Ipy0/5FxVPdQtU6Thrv bHpRGrBi87rJv23/mOh/4ong/Wy1yWXh+jmmFn2tNUY68z+9ZDJr5Gk6+2F7spsSS3FGoqEW c1FxIgCoyZnBFAQAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrBLMWRmVeSWpSXmKPExsWy7bCSnO6PcxPTDR4sV7SYfljR4svpPWwW CzcuY7I43ruDxWLNuc8sFidObme3OD9rDrsDu8eTa5uZPPq2rGIMYIrisklJzcksSy3St0vg yng8r4mp4Jl+RduJdcwNjNvkuxg5OSQETCQmfZ/I3MXIxSEksJtRYkHHWyaIhJTEsZ0/2SBs YYmV/56zQxT9Y5SYMO81O0iCTcBA4kHzcTBbREBS4nfXaWYQm1lgE6NE6z49EFtYoEDi4ZJn LCA2i4CqxOXXq8DqeQWsJdp33meHWCAvsf/gWbBeTgEbiWOb3jCC2EJANT8nzWGFqBeUODnz CQvEfHmJ5q2zmScwCsxCkpqFJLWAkWkVo2RqQXFuem6xYYFhXmq5XnFibnFpXrpecn7uJkZw 4Gpp7mDcvuqD3iFGJg7GQ4wSHMxKIrz/n0xIF+JNSaysSi3Kjy8qzUktPsQozcGiJM4r/qI3 RUggPbEkNTs1tSC1CCbLxMEp1cC04vWXsjtztW6vevRfw3/53LC45CnKPCtj3Cc6rMuU+l3w /s5pa5alDDLBfjN+Ch4puC4buOVJ+8zz9hFu3lXMvDzhu7qes73NUq6Ofn/D0lB8sdpF259X mTeo2tpO/BGqbX5znVrNZbnYSWu49T3Su119OcSP7ymNfPDfcP8XqcDlXF+3rdFMXmN15mX4 3H05nvMXTtB6zzhx0TVB3siA790HG94vZU58tuNkb6/a/BS/CauLp3x8XJMis4FZM71QWuob s2KpT+CcdrYrb9RfOidzzLhfea7EZVrXwVXH5PPMa3PExXSfhdzXvx/OULpEnv//cadVMxSX bHgoGp28TaRl+nYt39RXV37y3JuqxFKckWioxVxUnAgAC10IR8sCAAA= X-CMS-MailID: 20250123050912epcas5p2965fd6efa702030802a42c225f11f65b X-Msg-Generator: CA X-Sendblock-Type: REQ_APPROVE CMS-TYPE: 105P DLP-Filter: Pass X-CFilter-Loop: Reflected X-CMS-RootMailID: 20250123050912epcas5p2965fd6efa702030802a42c225f11f65b References: <20250123050903.92336-1-vinayak.kh@samsung.com> Received-SPF: pass client-ip=203.254.224.25; envelope-from=vinayak.kh@samsung.com; helo=mailout2.samsung.com X-Spam_score_int: -73 X-Spam_score: -7.4 X-Spam_bar: ------- X-Spam_report: (-7.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-2.996, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H2=-0.043, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Thu, 23 Jan 2025 09:08:19 -0500 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org 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 | 130 ++++++++++++++++++++++++++++++++++++- 1 file changed, 128 insertions(+), 2 deletions(-) diff --git a/hw/cxl/cxl-mailbox-utils.c b/hw/cxl/cxl-mailbox-utils.c index 9c7ea5bc35..2315d07fb1 100644 --- a/hw/cxl/cxl-mailbox-utils.c +++ b/hw/cxl/cxl-mailbox-utils.c @@ -87,8 +87,9 @@ enum { #define GET_LSA 0x2 #define SET_LSA 0x3 SANITIZE = 0x44, - #define OVERWRITE 0x0 - #define SECURE_ERASE 0x1 + #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,127 @@ static CXLRetCode cmd_sanitize_overwrite(const struct cxl_cmd *cmd, return CXL_MBOX_BG_STARTED; } +enum { + MEDIA_OP_GENERAL = 0x0, + MEDIA_OP_SANITIZE = 0x1, + MEDIA_OP_CLASS_MAX, +} MEDIA_OPERATION_CLASS; + +enum { + MEDIA_OP_SUB_DISCOVERY = 0x0, + MEDIA_OP_SUB_SANITIZE = 0x0, + MEDIA_OP_SUB_ZERO = 0x1, + MEDIA_OP_SUB_CLASS_MAX +} MEDIA_OPERATION_SUB_CLASS; + +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[0]; +}; + +#define MAX_SUPPORTED_OPS 3 +struct media_op_supported_list_entry media_op_matrix[MAX_SUPPORTED_OPS] = { + {0, 0}, + {1, 0}, + {1, 1} }; + +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; + union { + struct { + uint64_t starting_dpa; + uint64_t length; + } dpa_range_list[0]; + struct { + uint16_t start_index; + uint16_t num_supported_ops; + } discovery_osa; + }; + } QEMU_PACKED *media_op_in_pl = (void *)payload_in; + + uint8_t media_op_cl = media_op_in_pl->media_operation_class; + uint8_t media_op_subclass = media_op_in_pl->media_operation_subclass; + uint32_t dpa_range_count = media_op_in_pl->dpa_range_count; + + if (len_in < sizeof(*media_op_in_pl)) { + return CXL_MBOX_INVALID_PAYLOAD_LENGTH; + } + + switch (media_op_cl) { + case MEDIA_OP_GENERAL: + switch (media_op_subclass) { + case MEDIA_OP_SUB_DISCOVERY: + int count = 0; + struct media_op_discovery_out_pl *media_out_pl = + (void *)payload_out; + int num_ops = media_op_in_pl->discovery_osa.num_supported_ops; + int start_index = media_op_in_pl->discovery_osa.start_index; + + /* 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; + } + + if ((start_index >= MEDIA_OP_CLASS_MAX) || + (num_ops > MAX_SUPPORTED_OPS)) { + return CXL_MBOX_INVALID_INPUT; + } + + media_out_pl->dpa_range_granularity = CXL_CAPACITY_MULTIPLIER; + media_out_pl->total_supported_operations = MAX_SUPPORTED_OPS; + if (num_ops > 0) { + for (int i = start_index; i < MAX_SUPPORTED_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) { + goto disc_out; + } + } + } +disc_out: + 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); + break; + default: + return CXL_MBOX_UNSUPPORTED; + } + break; + case MEDIA_OP_SANITIZE: + switch (media_op_subclass) { + + 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, uint8_t *payload_in, size_t len_in, @@ -2864,6 +2986,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 Jan 23 05:09:03 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vinayak Holikatti X-Patchwork-Id: 13948301 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 9455DC0218B for ; Thu, 23 Jan 2025 14:09:19 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1taxsb-0001TI-Gp; Thu, 23 Jan 2025 09:08:21 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1taqB8-0002QW-KL for qemu-devel@nongnu.org; Thu, 23 Jan 2025 00:54:59 -0500 Received: from mailout2.samsung.com ([203.254.224.25]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1taqB5-00054s-Qg for qemu-devel@nongnu.org; Thu, 23 Jan 2025 00:54:58 -0500 Received: from epcas5p3.samsung.com (unknown [182.195.41.41]) by mailout2.samsung.com (KnoxPortal) with ESMTP id 20250123055452epoutp02b5d3ff0552ec005a06d487788637fcec~dPKDMalWR0338403384epoutp02q for ; Thu, 23 Jan 2025 05:54:52 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.samsung.com 20250123055452epoutp02b5d3ff0552ec005a06d487788637fcec~dPKDMalWR0338403384epoutp02q DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1737611692; bh=RUXaewyFwLIJcZ4QUgVMzV1AEtjgB0IadrAPd1N60FU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=l01kKMMsqNOXxQB2rwFRABfzvwA89Nysj74FlgCjDfa6pRFgtz6/buVxkO2wLgctk FtDO4S2DPRmYi16NUZ2ftkn3UkmWuRqmz6HyJxygUMjVD/J7xelAqadsZoyGFjdt2e ShKkwxHNsT0TAlOCMgkydEnEAzGaAb12u1G3pzzg= Received: from epsnrtp1.localdomain (unknown [182.195.42.162]) by epcas5p3.samsung.com (KnoxPortal) with ESMTP id 20250123055452epcas5p3f49bf86d77c3339bce356ff5cba6dfc4~dPKC3JyME0460704607epcas5p3K; Thu, 23 Jan 2025 05:54:52 +0000 (GMT) Received: from epsmgec5p1-new.samsung.com (unknown [182.195.38.178]) by epsnrtp1.localdomain (Postfix) with ESMTP id 4YdqsQ0xwDz4x9Pp; Thu, 23 Jan 2025 05:54:50 +0000 (GMT) Received: from epcas5p1.samsung.com ( [182.195.41.39]) by epsmgec5p1-new.samsung.com (Symantec Messaging Gateway) with SMTP id 97.9A.29212.8A9D1976; Thu, 23 Jan 2025 14:54:48 +0900 (KST) Received: from epsmtrp1.samsung.com (unknown [182.195.40.13]) by epcas5p4.samsung.com (KnoxPortal) with ESMTPA id 20250123050913epcas5p45fb9a638e62f436076da283e86e54ea2~dOiMsc0tB2285122851epcas5p4M; Thu, 23 Jan 2025 05:09:13 +0000 (GMT) Received: from epsmgms1p1new.samsung.com (unknown [182.195.42.41]) by epsmtrp1.samsung.com (KnoxPortal) with ESMTP id 20250123050913epsmtrp1d6e95b29596f7f348f52a5e4f788504f~dOiMrxThM0313303133epsmtrp1j; Thu, 23 Jan 2025 05:09:13 +0000 (GMT) X-AuditID: b6c32a50-7ebff7000000721c-76-6791d9a87b11 Received: from epsmtip1.samsung.com ( [182.195.34.30]) by epsmgms1p1new.samsung.com (Symantec Messaging Gateway) with SMTP id 41.7F.18729.9FEC1976; Thu, 23 Jan 2025 14:09:13 +0900 (KST) Received: from test-PowerEdge-R740xd.samsungds.net (unknown [107.99.41.79]) by epsmtip1.samsung.com (KnoxPortal) with ESMTPA id 20250123050912epsmtip1403d70645c4cf5a6e74b72e880855673~dOiLjhr292475324753epsmtip1R; Thu, 23 Jan 2025 05:09:12 +0000 (GMT) From: Vinayak Holikatti To: qemu-devel@nongnu.org Cc: krish.reddy@samsung.com, vishak.g@samsung.com, a.manzanares@samsung.com, alok.rathore@samsung.com, s5.kumari@samsung.com, Vinayak Holikatti Subject: [PATCH 2/2] hw/cxl/cxl-mailbox-utils: Add support for Media operations Sanitize and Write Zeros commands (8.2.9.9.5.3) Date: Thu, 23 Jan 2025 10:39:03 +0530 Message-Id: <20250123050903.92336-3-vinayak.kh@samsung.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250123050903.92336-1-vinayak.kh@samsung.com> MIME-Version: 1.0 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpkk+LIzCtJLcpLzFFi42LZdlhTXXfFzYnpBrvPC1lMP6xo8eX0HjaL hRuXMVkc793BYrHm3GcWixMnt7NbnJ81h92B3ePJtc1MHn1bVjEGMEVl22SkJqakFimk5iXn p2TmpdsqeQfHO8ebmhkY6hpaWpgrKeQl5qbaKrn4BOi6ZeYA7VVSKEvMKQUKBSQWFyvp29kU 5ZeWpCpk5BeX2CqlFqTkFJgU6BUn5haX5qXr5aWWWBkaGBiZAhUmZGfcmzaVpeBKcMWlTXwN jN1WXYycHBICJhKPLy5j7WLk4hAS2MMosWPBBWYI5xOjxId1W9ghnG+MErPnLmWFaVn8bx5U Yi+jxPS+E0wQTgOTxJvNU9lAqtgEDCQeNB9nB7FFBCQlfnedZgaxmQXWMEpsWyIPYgsLNDJK nLnJBWKzCKhKzPnczQRi8wpYS0w7vIYdYpu8xP6DZ8F6OQVsJI5tesMIUSMocXLmExaImfIS zVtng90tIXCJXeLG3jVQp7pIbNj4iBnCFpZ4dXwL1FApiZf9bVB2scS5i58YIewaidddK6Dq 7SVaT/UD2RxACzQl1u/ShwjLSkw9tY4JYi+fRO/vJ0wQcV6JHfNAbA4gW0Vi6dtMmE1fnjVD TfeQmLN3HTTg+hklPn+cxDSBUWEWkndmIXlnFsLmBYzMqxilUguKc9NTk00LDHXzUsvhsZyc n7uJEZwWtQJ2MK7e8FfvECMTB+MhRgkOZiUR3v9PJqQL8aYkVlalFuXHF5XmpBYfYjQFBvhE ZinR5HxgYs4riTc0sTQwMTMzM7E0NjNUEudt3tmSLiSQnliSmp2aWpBaBNPHxMEp1cDUfdM+ yqN86SKL+Qq7b0VsuOtlkWzy/eTP6+dbZL58EOS4MFFDNWjCr8ltcnsVjZNOX9GurDRNUZO1 Kd8yZYnenVoOoUrv2+Hmx2/vqa5fabz+WkTEoyV7739p7QvfzXeE98SPSsnH6vPq6i+vyC08 KTmxeldDznGODSvvXHQ6MWWSeSdHfmf1mRMvAtL2y281Tlf68Gzi98p7Kvk5/uqXJzXylIXK PTQ67Ky6Ysoq14MX9ZselM3sP2KtcV33jEH33Poz3oX+Lm9OlB2bsfGBFEuZcVu26ulc3yUX rC7c6T7Lfu3QGfE/QRzn5y61z/WzcHyqxBP9WPTkeo3VyrOW3LX8XFba8WqPcWS/bOQ1JZbi jERDLeai4kQAKyNNDRQEAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrOLMWRmVeSWpSXmKPExsWy7bCSnO7PcxPTDZ4tMrKYfljR4svpPWwW CzcuY7I43ruDxWLNuc8sFidObme3OD9rDrsDu8eTa5uZPPq2rGIMYIrisklJzcksSy3St0vg yrg3bSpLwZXgikub+BoYu626GDk5JARMJBb/m8fexcjFISSwm1Hi/us+NoiElMSxnT+hbGGJ lf+eQxX9Y5R4cOkgK0iCTcBA4kHzcXYQW0RAUuJ312lmEJtZYBOjROs+PRBbWKBeYtLyWSwg NouAqsScz91MIDavgLXEtMNr2CEWyEvsP3gWrJdTwEbi2KY3jCC2EFDNz0lzWCHqBSVOznzC AjFfXqJ562zmCYwCs5CkZiFJLWBkWsUomVpQnJueW2xYYJiXWq5XnJhbXJqXrpecn7uJERy2 Wpo7GLev+qB3iJGJg/EQowQHs5II7/8nE9KFeFMSK6tSi/Lji0pzUosPMUpzsCiJ84q/6E0R EkhPLEnNTk0tSC2CyTJxcEo1MJ0Ojsm4+PXszZ7TxQ5VfZc3/DKM+vUme9mmO14Va/4VZd9J PBZ6pUr2xevLimV3awVjWKrnWM3dyMuYZGJ8S8pagf372p1e7a26Bp8Vb89WW36uyvfChNnn 71yq/csq9el9cbYef84njR0z2pfxnVa/E/o5e+eaT5M/K14qTb5zQ37jOY7cB8JMUw4mXhbt mn7hS9mDzzueGAgHRbyX2Dn3Xd3fqpnMy7afiZO2kmbOPJmgrXWjTL3/5v5t4UIvo/UvqUyT vfX39TUrw0nHVZ8Ez9ycoGrunTF/0haF3y9zDgbvPVn7tLdtQYFLh6VI/+G/DXWyjK8kLjxk 2xL7tic+cu6UWwfnTORO7PAN3ZyhxFKckWioxVxUnAgAOjWKAMoCAAA= X-CMS-MailID: 20250123050913epcas5p45fb9a638e62f436076da283e86e54ea2 X-Msg-Generator: CA X-Sendblock-Type: REQ_APPROVE CMS-TYPE: 105P DLP-Filter: Pass X-CFilter-Loop: Reflected X-CMS-RootMailID: 20250123050913epcas5p45fb9a638e62f436076da283e86e54ea2 References: <20250123050903.92336-1-vinayak.kh@samsung.com> Received-SPF: pass client-ip=203.254.224.25; envelope-from=vinayak.kh@samsung.com; helo=mailout2.samsung.com X-Spam_score_int: -73 X-Spam_score: -7.4 X-Spam_bar: ------- X-Spam_report: (-7.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-2.996, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H2=-0.043, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Thu, 23 Jan 2025 09:08:19 -0500 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org 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 | 11 ++ 2 files changed, 220 insertions(+), 8 deletions(-) diff --git a/hw/cxl/cxl-mailbox-utils.c b/hw/cxl/cxl-mailbox-utils.c index 2315d07fb1..89847ddd9d 100644 --- a/hw/cxl/cxl-mailbox-utils.c +++ b/hw/cxl/cxl-mailbox-utils.c @@ -1722,6 +1722,145 @@ static CXLRetCode cmd_sanitize_overwrite(const struct cxl_cmd *cmd, return CXL_MBOX_BG_STARTED; } +#define DPA_RANGE_GRANULARITY 64 +struct dpa_range_list_entry { + uint64_t starting_dpa; + uint64_t length; +}; + +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; + int rc = 0; + + if ((dpa_addr % DPA_RANGE_GRANULARITY) || + (length % DPA_RANGE_GRANULARITY)) { + return -EINVAL; + } + + if (ct3d->hostvmem) { + vmr = host_memory_backend_get_memory(ct3d->hostvmem); + vmr_size = memory_region_size(vmr); + } + if (ct3d->hostpmem) { + pmr = host_memory_backend_get_memory(ct3d->hostpmem); + pmr_size = memory_region_size(pmr); + } + if (ct3d->dc.host_dc) { + dc_mr = host_memory_backend_get_memory(ct3d->dc.host_dc); + dc_size = memory_region_size(dc_mr); + } + + if (!vmr && !pmr && !dc_mr) { + return -ENODEV; + } + + if (dpa_addr >= vmr_size + pmr_size + dc_size || + (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 rc; +} + +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}; + + if (ct3d->hostvmem) { + vmr = host_memory_backend_get_memory(ct3d->hostvmem); + vmr_size = memory_region_size(vmr); + } + if (ct3d->hostpmem) { + pmr = host_memory_backend_get_memory(ct3d->hostpmem); + pmr_size = memory_region_size(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; + } + } + cxl_discard_all_event_records(&ct3d->cxl_dstate); +exit: + g_free(ct3d->media_op_sanitize); + ct3d->media_op_sanitize = NULL; + return; +} + +static int get_sanitize_duration(uint64_t total_mem) +{ + int secs = 0; + + if (total_mem <= 512) { + secs = 4; + } else if (total_mem <= 1024) { + secs = 8; + } else if (total_mem <= 2 * 1024) { + secs = 15; + } else if (total_mem <= 4 * 1024) { + secs = 30; + } else if (total_mem <= 8 * 1024) { + secs = 60; + } else if (total_mem <= 16 * 1024) { + secs = 2 * 60; + } else if (total_mem <= 32 * 1024) { + secs = 4 * 60; + } else if (total_mem <= 64 * 1024) { + secs = 8 * 60; + } else if (total_mem <= 128 * 1024) { + secs = 15 * 60; + } else if (total_mem <= 256 * 1024) { + secs = 30 * 60; + } else if (total_mem <= 512 * 1024) { + secs = 60 * 60; + } else if (total_mem <= 1024 * 1024) { + secs = 120 * 60; + } else { + secs = 240 * 60; /* max 4 hrs */ + } + + return secs; +} + enum { MEDIA_OP_GENERAL = 0x0, MEDIA_OP_SANITIZE = 0x1, @@ -1729,10 +1868,9 @@ enum { } MEDIA_OPERATION_CLASS; enum { - MEDIA_OP_SUB_DISCOVERY = 0x0, - MEDIA_OP_SUB_SANITIZE = 0x0, - MEDIA_OP_SUB_ZERO = 0x1, - MEDIA_OP_SUB_CLASS_MAX + MEDIA_OP_GEN_DISCOVERY = 0x0, + MEDIA_OP_SAN_SANITIZE = 0x0, + MEDIA_OP_SAN_ZERO = 0x1, } MEDIA_OPERATION_SUB_CLASS; struct media_op_supported_list_entry { @@ -1777,9 +1915,14 @@ static CXLRetCode cmd_media_operations(const struct cxl_cmd *cmd, }; } QEMU_PACKED *media_op_in_pl = (void *)payload_in; + + CXLType3Dev *ct3d = CXL_TYPE3(cci->d); uint8_t media_op_cl = media_op_in_pl->media_operation_class; uint8_t media_op_subclass = media_op_in_pl->media_operation_subclass; uint32_t dpa_range_count = media_op_in_pl->dpa_range_count; + uint8_t fill_value = 0; + uint64_t total_mem = 0; + int secs = 0; if (len_in < sizeof(*media_op_in_pl)) { return CXL_MBOX_INVALID_PAYLOAD_LENGTH; @@ -1788,7 +1931,7 @@ static CXLRetCode cmd_media_operations(const struct cxl_cmd *cmd, switch (media_op_cl) { case MEDIA_OP_GENERAL: switch (media_op_subclass) { - case MEDIA_OP_SUB_DISCOVERY: + case MEDIA_OP_GEN_DISCOVERY: int count = 0; struct media_op_discovery_out_pl *media_out_pl = (void *)payload_out; @@ -1806,7 +1949,7 @@ static CXLRetCode cmd_media_operations(const struct cxl_cmd *cmd, return CXL_MBOX_INVALID_INPUT; } - media_out_pl->dpa_range_granularity = CXL_CAPACITY_MULTIPLIER; + media_out_pl->dpa_range_granularity = DPA_RANGE_GRANULARITY; media_out_pl->total_supported_operations = MAX_SUPPORTED_OPS; if (num_ops > 0) { for (int i = start_index; i < MAX_SUPPORTED_OPS; i++) { @@ -1824,22 +1967,73 @@ disc_out: 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); - break; + goto exit; default: return CXL_MBOX_UNSUPPORTED; } break; case MEDIA_OP_SANITIZE: + { switch (media_op_subclass) { - + case MEDIA_OP_SAN_SANITIZE: + if (len_in < (sizeof(*media_op_in_pl) + + (dpa_range_count * sizeof(struct dpa_range_list_entry)))) { + return CXL_MBOX_INVALID_PAYLOAD_LENGTH; + } + fill_value = 0xF; + goto sanitize_range; + case MEDIA_OP_SAN_ZERO: + if (len_in < (sizeof(*media_op_in_pl) + + (dpa_range_count * sizeof(struct dpa_range_list_entry)))) { + return CXL_MBOX_INVALID_PAYLOAD_LENGTH; + } + fill_value = 0; + goto sanitize_range; default: return CXL_MBOX_UNSUPPORTED; } break; + } default: return CXL_MBOX_UNSUPPORTED; } +sanitize_range: + if (dpa_range_count > 0) { + for (int i = 0; i < dpa_range_count; i++) { + if (validate_dpa_addr(ct3d, + media_op_in_pl->dpa_range_list[i].starting_dpa, + media_op_in_pl->dpa_range_list[i].length)) { + return CXL_MBOX_INVALID_INPUT; + } + total_mem += media_op_in_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_pl->dpa_range_list, + (dpa_range_count * + sizeof(struct dpa_range_list_entry))); + secs = get_sanitize_duration(total_mem >> 20); + goto start_bg; + } + } else if (dpa_range_count == 0) { + goto exit; + } + +start_bg: + /* EBUSY other bg cmds as of now */ + cci->bg.runtime = secs * 1000UL; + *len_out = 0; + /* sanitize when done */ + cxl_dev_disable_media(&ct3d->cxl_dstate); + return CXL_MBOX_BG_STARTED; +exit: return CXL_MBOX_SUCCESS; } @@ -3154,6 +3348,13 @@ 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); + cxl_dev_enable_media(&ct3d->cxl_dstate); + } + 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..6d82eb266a 100644 --- a/include/hw/cxl/cxl_device.h +++ b/include/hw/cxl/cxl_device.h @@ -581,6 +581,15 @@ typedef struct CXLSetFeatureInfo { size_t data_size; } CXLSetFeatureInfo; +struct CXLSanitizeInfo { + uint32_t dpa_range_count; + uint8_t fill_value; + struct { + uint64_t starting_dpa; + uint64_t length; + } dpa_range_list[0]; +}; + struct CXLType3Dev { /* Private */ PCIDevice parent_obj; @@ -651,6 +660,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"