From mboxrd@z Thu Jan 1 00:00:00 1970 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 kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8CD93C5475B for ; Mon, 11 Mar 2024 21:20:46 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id DB0158D0007; Mon, 11 Mar 2024 17:20:45 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id D86208D0002; Mon, 11 Mar 2024 17:20:45 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C4DD38D0007; Mon, 11 Mar 2024 17:20:45 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id B1C3B8D0002 for ; Mon, 11 Mar 2024 17:20:45 -0400 (EDT) Received: from smtpin05.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 8837580593 for ; Mon, 11 Mar 2024 21:20:45 +0000 (UTC) X-FDA: 81886027650.05.FDC3CB6 Received: from mail-il1-f176.google.com (mail-il1-f176.google.com [209.85.166.176]) by imf04.hostedemail.com (Postfix) with ESMTP id D33AB40008 for ; Mon, 11 Mar 2024 21:20:43 +0000 (UTC) Authentication-Results: imf04.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=EZad4Zlj; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf04.hostedemail.com: domain of nifan.cxl@gmail.com designates 209.85.166.176 as permitted sender) smtp.mailfrom=nifan.cxl@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1710192043; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=BBhNEQBVy1fL/SUIc8TvpP+Pi6/a540l6mhfsmCEnoA=; b=nSr+wJ/k6YQmimyUNT+kic/3gxsj8GLJm7AQLGQEEPctM9Ua5eYe5mVwzI0tgN4VxJrwHT Tr7wnYJ64D3BRTeo7viHGgP2aGaR/EK3SMh7xO/3hZdEmqa/3t8E86ySzhNAF/16rF6Z7I VRUtxVIEhuGMDxQeGfqVamj/2KLl1WQ= ARC-Authentication-Results: i=1; imf04.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=EZad4Zlj; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf04.hostedemail.com: domain of nifan.cxl@gmail.com designates 209.85.166.176 as permitted sender) smtp.mailfrom=nifan.cxl@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1710192043; a=rsa-sha256; cv=none; b=qjA4EdVEDRVymrwnst+35sOsgsUzVZprkbm3h7PN9Aoszpp36uN9RuPM4JFeCc+LGnzv+v axzjc9TvNPRrtApkAGulp6Az5vKbVEIWv9KxUymna4U57L03k8A5vDf8+hcNulhS+tE6X1 pINtAZ4Ln6i66pnvHgomBs00ri/2GhU= Received: by mail-il1-f176.google.com with SMTP id e9e14a558f8ab-36669d58757so26795ab.0 for ; Mon, 11 Mar 2024 14:20:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1710192043; x=1710796843; darn=kvack.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:date:from:from:to:cc:subject:date:message-id:reply-to; bh=BBhNEQBVy1fL/SUIc8TvpP+Pi6/a540l6mhfsmCEnoA=; b=EZad4ZljGQfdbzPeqjR4WSpLmusR1/WsocNrDUorDzswd17WNVMfT9pOJORG0wDPst 9yUYJ0DU/w/Kz25/dkmVdYkR3uncjmauXUqF/4VzU7qi9oryHIbZe/WtWkPcydrzGdtA OtLfUMnfOftPKvLg97O7X3pXsklRlAlGzShbGRzbPE8q7GSSYWpGMjyzSyGi2GkWVUwx tt8mza5dHIOx4H2mzBao8OvZ3ievg1WDUtlajiGM+4r0rT8+JQV51ADCtv8vssvEVwtC rnUjKWyu4WRSvTHM7kFzn4qi+PhPe/0y0PK1Se0FmQvCrI8JtIU42L2LeCECjU84KCK8 n25g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710192043; x=1710796843; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:date:from:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=BBhNEQBVy1fL/SUIc8TvpP+Pi6/a540l6mhfsmCEnoA=; b=VSpp1X2kELKTzxdKcfE9nvjUdjRIgxim/4NIYxkPCtxSPE7+7GTdGS+UYKDgFOSesq ENIg+ONrWGuJfB3LcLp9IKP4y5x/aN2yXiBI3dYT/mrtTbddm2zIY/QoV46peYGpi7g2 b4lcmAnQiM29+O/hyByNaI5NwqO0MGHT9YiGIked2v9/XgVNIePcVrbspLdWf0jpguLV wlKdzIoGbU+SyVdEe6DcEocup1L04O5pFiJiJqSMCstkBXAgog9P9UXa0XEIIg2L3hvg +Souduul2Sy32Ae9XvmIq8pcxKn/Lqu6+4pfwcs4bFh+DoJk4IK05ZXV1FVetzybJq9G CfhA== X-Forwarded-Encrypted: i=1; AJvYcCX+1es+954pDJTFCPH9xbpqmzj4KFVMrIr7LHLDZKkiTEtWIZGJvTlcvHefTYL9MjeaW4ciqtJqgkNlptPHjmXuSgo= X-Gm-Message-State: AOJu0YyF3r18H6i6c3ptxXgeOdtfvmCyOjSZbotflvKLeBOGvBzW+YSA KbM8kg0h3ZiH8gv5n47oaXlWGqlVIBcXl0/i4jQlpF/w8SnLKnRM X-Google-Smtp-Source: AGHT+IF0bJjkZx211Ow0o9UR7ZYHFVRcRVsv6ZP9/5/UfJ2pK3pt/4piWTc05I528CJAag+9Qocpiw== X-Received: by 2002:a05:6602:3307:b0:7c7:b761:9cea with SMTP id b7-20020a056602330700b007c7b7619ceamr8625565ioz.14.1710192042729; Mon, 11 Mar 2024 14:20:42 -0700 (PDT) Received: from debian ([50.205.20.42]) by smtp.gmail.com with ESMTPSA id a26-20020a056638005a00b004746fab2afdsm1904555jap.40.2024.03.11.14.20.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Mar 2024 14:20:42 -0700 (PDT) From: fan X-Google-Original-From: fan Date: Mon, 11 Mar 2024 14:20:23 -0700 To: shiju.jose@huawei.com Cc: linux-cxl@vger.kernel.org, linux-acpi@vger.kernel.org, linux-mm@kvack.org, dan.j.williams@intel.com, dave@stgolabs.net, jonathan.cameron@huawei.com, dave.jiang@intel.com, alison.schofield@intel.com, vishal.l.verma@intel.com, ira.weiny@intel.com, linux-edac@vger.kernel.org, linux-kernel@vger.kernel.org, david@redhat.com, Vilas.Sridharan@amd.com, leo.duran@amd.com, Yazen.Ghannam@amd.com, rientjes@google.com, jiaqiyan@google.com, tony.luck@intel.com, Jon.Grimm@amd.com, dave.hansen@linux.intel.com, rafael@kernel.org, lenb@kernel.org, naoya.horiguchi@nec.com, james.morse@arm.com, jthoughton@google.com, somasundaram.a@hpe.com, erdemaktas@google.com, pgonda@google.com, duenwen@google.com, mike.malvestuto@intel.com, gthelen@google.com, wschwartz@amperecomputing.com, dferguson@amperecomputing.com, tanxiaofei@huawei.com, prime.zeng@hisilicon.com, kangkang.shen@futurewei.com, wanghuiqiang@huawei.com, linuxarm@huawei.com Subject: Re: [RFC PATCH v7 03/12] cxl/mbox: Add SET_FEATURE mailbox command Message-ID: References: <20240223143723.1574-1-shiju.jose@huawei.com> <20240223143723.1574-4-shiju.jose@huawei.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20240223143723.1574-4-shiju.jose@huawei.com> X-Rspamd-Queue-Id: D33AB40008 X-Rspam-User: X-Rspamd-Server: rspam04 X-Stat-Signature: pf3cz5sc6fujtyw5k9b488shhf1kbjzk X-HE-Tag: 1710192043-303555 X-HE-Meta: U2FsdGVkX1+juuaRND1czAUG63KoHUnqqBkhaTocpZ4o3ScdppalvtTEHlMt0APAYSIsBL2B6ADMNZY0zvBnNphwFAX+v6uIS3pTA6PDp+U7nTlwP3GbKBx79M12N4Sc6wlTV4c9zrKasooXlxt9BW26q+Cvo00ekOANKGplJUNmIeNOD3h5KocuDWh9ALNUajVML+QdUWUnnA0GlYNDeuGyEElUY4702iRaTxggG2JaexkCUonhMjx0Nwz+W4S0Q/a+ShOHemj5Q1jC4MsoN6hhF78XQahj8eCoz65A96BhQ7GyDxPOZ0Cev9ZIeAG/aMCBNILLs9kajR/8u2+mgD5a+F+bBkpv7O27NG2hyUqQIQM/XNM4xKtD7XnfN+Ct9gc0qaxeyUTrd6LR5Gs9TBcyVHTKaz/nME/gkQbe5700wVKsWevJLF2Apgjh03wnfkShaZiNWkQq+hp5UDWmtf3KOsW6Er+vQTn2uecnHCXnVTSbOGTLWNpvnc6lj8dl1q8OOzP+FhZMrHkhLO1L272Wfmh/Dd7IrbAzVLik+UgkTl8R8JTltXRYv8+0KZwP14gUvmnB1JYGqjEogDYS0EhpaEcU28ksKDwp0zWVANDEHgzDWFZQ9ydeYKKFzj/82/Rcq+kuxEJnLTv4ktx9/g2nwV1T/Mt0+icR9nSO9iksYXUATCn7+waxJwy05YeKJR5vimwSk/8Q1Yf3V20zAWjk97TYZhjmCeAIpBVkPlPN9aQ94hXgpY8RcuYQbZch/38rKR78XQx/n79kq4AhWbTKaVIRHWao+5ORZPCGBXzRR5qNETt0Q+7rKhK8CJ492mwP9vcFzJpz/rxH2YaAz2/4qvOzArOkh4PSvpRmA1XgWZLocq8J72BVLzKr8Cct8qkZZ1euHGj1c7cJDOhN3+7+4TRpcawcaSKXxangPqs0l9XRcwt8rt74Jp6pPy06gLUiJZBPNaVu/+ZFTmB Ywek9oqG TMi403fzhw9oPEdKmOeqToBFuirej2FfyF+dDn1wNjUWpo/wiDCEXKyOo0Yv+6hykfUHVeRrg5L01jiqU62jWEIZN8F10tHXhdXcIr3P1GCpaiiOgfRW/F1e0kyNyZWYzKK5hHyacCpYFLoSrI3gqhCMXOQ== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On Fri, Feb 23, 2024 at 10:37:14PM +0800, shiju.jose@huawei.com wrote: > From: Shiju Jose > > Add support for SET_FEATURE mailbox command. > > CXL spec 3.1 section 8.2.9.6 describes optional device specific features. > CXL devices supports features with changeable attributes. > The settings of a feature can be optionally modified using Set Feature > command. > > Signed-off-by: Shiju Jose > --- > drivers/cxl/core/mbox.c | 67 +++++++++++++++++++++++++++++++++++++++++ > drivers/cxl/cxlmem.h | 30 ++++++++++++++++++ > 2 files changed, 97 insertions(+) > > diff --git a/drivers/cxl/core/mbox.c b/drivers/cxl/core/mbox.c > index c078e62ea194..d1660bd20bdb 100644 > --- a/drivers/cxl/core/mbox.c > +++ b/drivers/cxl/core/mbox.c > @@ -1366,6 +1366,73 @@ size_t cxl_get_feature(struct cxl_memdev_state *mds, > } > EXPORT_SYMBOL_NS_GPL(cxl_get_feature, CXL); > > +int cxl_set_feature(struct cxl_memdev_state *mds, > + const uuid_t feat_uuid, u8 feat_version, > + void *feat_data, size_t feat_data_size, > + u8 feat_flag) > +{ > + struct cxl_memdev_set_feat_pi { > + struct cxl_mbox_set_feat_hdr hdr; > + u8 feat_data[]; > + } __packed; > + size_t data_in_size, data_sent_size = 0; > + struct cxl_mbox_cmd mbox_cmd; > + size_t hdr_size; > + int rc = 0; > + > + struct cxl_memdev_set_feat_pi *pi __free(kfree) = > + kmalloc(mds->payload_size, GFP_KERNEL); > + pi->hdr.uuid = feat_uuid; > + pi->hdr.version = feat_version; > + feat_flag &= ~CXL_SET_FEAT_FLAG_DATA_TRANSFER_MASK; > + hdr_size = sizeof(pi->hdr); > + /* > + * Check minimum mbox payload size is available for > + * the feature data transfer. > + */ > + if (hdr_size + 10 > mds->payload_size) Where does this magic number come from? Fan > + return -ENOMEM; > + > + if ((hdr_size + feat_data_size) <= mds->payload_size) { > + pi->hdr.flags = cpu_to_le32(feat_flag | > + CXL_SET_FEAT_FLAG_FULL_DATA_TRANSFER); > + data_in_size = feat_data_size; > + } else { > + pi->hdr.flags = cpu_to_le32(feat_flag | > + CXL_SET_FEAT_FLAG_INITIATE_DATA_TRANSFER); > + data_in_size = mds->payload_size - hdr_size; > + } > + > + do { > + pi->hdr.offset = cpu_to_le16(data_sent_size); > + memcpy(pi->feat_data, feat_data + data_sent_size, data_in_size); > + mbox_cmd = (struct cxl_mbox_cmd) { > + .opcode = CXL_MBOX_OP_SET_FEATURE, > + .size_in = hdr_size + data_in_size, > + .payload_in = pi, > + }; > + rc = cxl_internal_send_cmd(mds, &mbox_cmd); > + if (rc < 0) > + return rc; > + > + data_sent_size += data_in_size; > + if (data_sent_size >= feat_data_size) > + return 0; > + > + if ((feat_data_size - data_sent_size) <= (mds->payload_size - hdr_size)) { > + data_in_size = feat_data_size - data_sent_size; > + pi->hdr.flags = cpu_to_le32(feat_flag | > + CXL_SET_FEAT_FLAG_FINISH_DATA_TRANSFER); > + } else { > + pi->hdr.flags = cpu_to_le32(feat_flag | > + CXL_SET_FEAT_FLAG_CONTINUE_DATA_TRANSFER); > + } > + } while (true); > + > + return rc; > +} > +EXPORT_SYMBOL_NS_GPL(cxl_set_feature, CXL); > + > int cxl_mem_get_poison(struct cxl_memdev *cxlmd, u64 offset, u64 len, > struct cxl_region *cxlr) > { > diff --git a/drivers/cxl/cxlmem.h b/drivers/cxl/cxlmem.h > index bcfefff062a6..a8d4104afa53 100644 > --- a/drivers/cxl/cxlmem.h > +++ b/drivers/cxl/cxlmem.h > @@ -531,6 +531,7 @@ enum cxl_opcode { > CXL_MBOX_OP_GET_LOG = 0x0401, > CXL_MBOX_OP_GET_SUPPORTED_FEATURES = 0x0500, > CXL_MBOX_OP_GET_FEATURE = 0x0501, > + CXL_MBOX_OP_SET_FEATURE = 0x0502, > CXL_MBOX_OP_IDENTIFY = 0x4000, > CXL_MBOX_OP_GET_PARTITION_INFO = 0x4100, > CXL_MBOX_OP_SET_PARTITION_INFO = 0x4101, > @@ -773,6 +774,31 @@ struct cxl_mbox_get_feat_in { > u8 selection; > } __packed; > > +/* Set Feature CXL 3.1 Spec 8.2.9.6.3 */ > +/* > + * Set Feature input payload > + * CXL rev 3.1 section 8.2.9.6.3 Table 8-101 > + */ > +/* Set Feature : Payload in flags */ > +#define CXL_SET_FEAT_FLAG_DATA_TRANSFER_MASK GENMASK(2, 0) > +enum cxl_set_feat_flag_data_transfer { > + CXL_SET_FEAT_FLAG_FULL_DATA_TRANSFER, > + CXL_SET_FEAT_FLAG_INITIATE_DATA_TRANSFER, > + CXL_SET_FEAT_FLAG_CONTINUE_DATA_TRANSFER, > + CXL_SET_FEAT_FLAG_FINISH_DATA_TRANSFER, > + CXL_SET_FEAT_FLAG_ABORT_DATA_TRANSFER, > + CXL_SET_FEAT_FLAG_DATA_TRANSFER_MAX > +}; > +#define CXL_SET_FEAT_FLAG_DATA_SAVED_ACROSS_RESET BIT(3) > + > +struct cxl_mbox_set_feat_hdr { > + uuid_t uuid; > + __le32 flags; > + __le16 offset; > + u8 version; > + u8 rsvd[9]; > +} __packed; > + > /* Get Poison List CXL 3.0 Spec 8.2.9.8.4.1 */ > struct cxl_mbox_poison_in { > __le64 offset; > @@ -912,6 +938,10 @@ size_t cxl_get_feature(struct cxl_memdev_state *mds, > size_t feat_out_size, > size_t feat_out_min_size, > enum cxl_get_feat_selection selection); > +int cxl_set_feature(struct cxl_memdev_state *mds, > + const uuid_t feat_uuid, u8 feat_version, > + void *feat_data, size_t feat_data_size, > + u8 feat_flag); > int cxl_poison_state_init(struct cxl_memdev_state *mds); > int cxl_mem_get_poison(struct cxl_memdev *cxlmd, u64 offset, u64 len, > struct cxl_region *cxlr); > -- > 2.34.1 >