Received: by 2002:ac0:a5a7:0:0:0:0:0 with SMTP id m36-v6csp2555507imm; Thu, 16 Aug 2018 11:23:48 -0700 (PDT) X-Google-Smtp-Source: AA+uWPzpxFogLxwWgBHsl9ePkrC2gGNoCOxQOFRvDIAROzTBHCXc/SSfQqqXVokGc0XRDTPF8cAR X-Received: by 2002:a63:6743:: with SMTP id b64-v6mr29748727pgc.91.1534443828399; Thu, 16 Aug 2018 11:23:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1534443828; cv=none; d=google.com; s=arc-20160816; b=Z+RQP0kySj+Z5pw3q0HtVLmtky2jCW/FkAAyymJW6wZNsnFxsemmNO+q1SPbD5V7Cw YXq6QL8nLnUuOl+o5Sr80s8QcI/t/F4ulfrOlRaQQqGV4Lew1PI9ElhMbesO4fU/kchp XAebi2EmASbalck+HoxtkTK9nVjW7GDyxwYIgRTnvdrDKUOkfImpFzphF//tlZihd/cX 7wXlRanoOxD2sbrVss18cK9YB5kjzq2U5MYgIkJXV4xYQq9JLTwPyqFV3p7DNYhrscEw jD4a47XkT/966Sq1PLZtQp5DBLkgdFRC50I0u9UQCsbNpYYdXBflvvM6jkp5mM2JO2hc NEFg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :spamdiagnosticmetadata:spamdiagnosticoutput:content-language :accept-language:in-reply-to:references:message-id:date:thread-index :thread-topic:subject:cc:to:from:dkim-signature :arc-authentication-results; bh=XpFjr9h2RCh3sRYPMnbZ0AZwlbqSrYAGkyq4JB6HOOU=; b=mExCVVJprZ3hEdaN4XQFxKV5jVLWo3+CJlL59e105crpCS/J/HqaDlfiiDJbYDg9IF R1wad3Ptvk4LcXtYVMNqzj7SSzYvUE/IAiYbbUMLKgMWtPXa0tvTNPHkBb/EqDyDBycc +77TwMdCSDs8PuK5fCEe2t2fGcDtu0my39ze040tJ74/RQWLD9rZoWduImR+hTGqGru0 wEe16NczwGcZMpEq5DndfZtp2ilipUC+FNCJ66u89zSaShvQ4YeDk5f8Jtysk48T0MOB TK+dy21+lP28oR//TaqI5dxAUfa6G1a+Jijt2rbTV1uXm7Lc9qRxq339Q78d6hbfCLWV GjvA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@xilinx.onmicrosoft.com header.s=selector1-xilinx-com header.b=aqDRe11p; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id z3-v6si26989524pgh.557.2018.08.16.11.23.32; Thu, 16 Aug 2018 11:23:48 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@xilinx.onmicrosoft.com header.s=selector1-xilinx-com header.b=aqDRe11p; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2391661AbeHPQ1x (ORCPT + 99 others); Thu, 16 Aug 2018 12:27:53 -0400 Received: from mail-bl2nam02on0080.outbound.protection.outlook.com ([104.47.38.80]:37729 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727244AbeHPQ1w (ORCPT ); Thu, 16 Aug 2018 12:27:52 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xilinx.onmicrosoft.com; s=selector1-xilinx-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=XpFjr9h2RCh3sRYPMnbZ0AZwlbqSrYAGkyq4JB6HOOU=; b=aqDRe11pVsezvo65zJDzuEn8zrDOyIV7Sqh6orwovZsZabaoKJFjF55rSfDOmZ8813OGtZ4ZVe5NXvBsUuy6iBEMmymLBbNZQHzYwl4y8jt6GXeaEhSBF+iEnKp8KI0vK6ZHrH9sdYK2rRvhnrXIKsnxFSEM7jXuEGmQQ/Yk654= Received: from CY4PR0201MB3619.namprd02.prod.outlook.com (52.132.99.26) by CY4PR0201MB3395.namprd02.prod.outlook.com (52.132.98.12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1038.25; Thu, 16 Aug 2018 13:29:12 +0000 Received: from CY4PR0201MB3619.namprd02.prod.outlook.com ([fe80::89f3:8315:e747:d23a]) by CY4PR0201MB3619.namprd02.prod.outlook.com ([fe80::89f3:8315:e747:d23a%3]) with mapi id 15.20.1038.025; Thu, 16 Aug 2018 13:29:12 +0000 From: Radhey Shyam Pandey To: Peter Ujfalusi , "dan.j.williams@intel.com" , "vkoul@kernel.org" CC: "dmaengine@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "lars@metafoo.de" Subject: RE: [RFC] dmaengine: Add metadata_ops for dma_async_tx_descriptor Thread-Topic: [RFC] dmaengine: Add metadata_ops for dma_async_tx_descriptor Thread-Index: AQHUNIa/aLzeL9Zb/0iQNP+9dl8PvKTCWczQ Date: Thu, 16 Aug 2018 13:29:12 +0000 Message-ID: References: <20180815105704.26498-1-peter.ujfalusi@ti.com> In-Reply-To: <20180815105704.26498-1-peter.ujfalusi@ti.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=radheys@xilinx.com; x-originating-ip: [149.199.50.133] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;CY4PR0201MB3395;6:hxUnPdozFd71Qedib/kDLxCCDpSUY0o8WrsjzdR9R6QMtJTMMDSOl8LjnBm3t4pptY1HA+6gbwyGBtBYDKAQBe4fLr6A9cSSLaSq+bpCm1ngNsM42K7tspamipZHZW83fDC59Gt5HwysNoy5gB/ZzN6O0lM7psXphrHzczFA0l8ss5VykK20DfA7uNSuOb2ywXKxJSU/oyA0oU56oExaMc3J2p7ZOtvg3CYSOAbFn/4JXkxqmtvru+aQYzewXu6OKB5zmLnC6Rc5dK1uSn8S8RRnR4YF0846tB0lAbvIYGqdjBLhBF5c6rt2XH/uNRL1tgI1h0flMFZI5fY9cmr0msBxSxM2Ef1wBP0M8xjQMRu47GnP/R515mXd9h8E/HqT+5bInu/mXdBOwMblzZUYo4UHOWecZ4n0BNdiCTCet8EaWQS57w1Y5MuVLrKZ73K+dN8lBCOqweudnHYp3bhlSQ==;5:q8Wnp03N8YG9bZ8sUxbMSbt5cppQj8oNojZXomitYPdgu5yo540ni4p699vjaTVzK478Z/QvhiqjKI5SSgDofWx3iL+IuftkQ7QBrZ6rIhVbJAvhlXgnvjLmVvwtiSnDdIjdHNVF+o6UTKTeXZAYkBj97zSeQfQTCu18iMBRPfY=;7:p06/DEEtsXjoQi73lM3WE9BXmtsXDUJsjLgAIBClgzrT1OkrDomeL3cVx9DV6IYiywd7NsS+6s2I80KG1qtPDsTbvqk5NbUTLQHhvAolDhy4kYhdtYq1hx1rNY9sYfvtJF1vwMjVHIBbJjfWHYjHixtgPuXU+0aNzHNYQc33yz0tvYbhNEFB79qE+da6soqnExP/llRJhCFXBoJH8yJoX2IfZLMF6OrwXUz8MtyeMWNYRHezHFHmcuXWWVD95ptF x-ms-exchange-antispam-srfa-diagnostics: SOS; x-ms-office365-filtering-correlation-id: aa093fd1-c00f-4b8c-6f74-08d6037c4104 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0;PCL:0;RULEID:(7020095)(4652040)(8989137)(4534165)(4627221)(201703031133081)(201702281549075)(8990107)(5600074)(711020)(4618075)(2017052603328)(7153060)(7193020);SRVR:CY4PR0201MB3395; x-ms-traffictypediagnostic: CY4PR0201MB3395: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(31051911155226)(9452136761055)(192813158149592)(228905959029699); x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(10201501046)(3002001)(3231311)(944501410)(52105095)(93006095)(93001095)(6055026)(149027)(150027)(6041310)(20161123564045)(20161123558120)(20161123560045)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(201708071742011)(7699016);SRVR:CY4PR0201MB3395;BCL:0;PCL:0;RULEID:;SRVR:CY4PR0201MB3395; x-forefront-prvs: 07665BE9D1 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(39860400002)(346002)(376002)(396003)(136003)(366004)(76094002)(13464003)(189003)(199004)(106356001)(2906002)(55016002)(5660300001)(9686003)(305945005)(229853002)(86362001)(2201001)(105586002)(8676002)(6436002)(81166006)(7736002)(14454004)(74316002)(97736004)(81156014)(53936002)(6116002)(3846002)(478600001)(2501003)(33656002)(551934003)(5250100002)(5024004)(6246003)(6506007)(2900100001)(8936002)(102836004)(186003)(99286004)(110136005)(316002)(26005)(54906003)(4326008)(486006)(66066001)(256004)(25786009)(76176011)(476003)(7696005)(68736007)(446003)(11346002)(53546011)(14444005);DIR:OUT;SFP:1101;SCL:1;SRVR:CY4PR0201MB3395;H:CY4PR0201MB3619.namprd02.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: xilinx.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: mSAKzltuWvz0CesM0l5OUybfZepBYnv8E9JJZtCFHWJZeBIhlWauO664eGA5rhlutRwdEsn6tLas12Ks5XG89GhcKyCgwaVIBr1IRPe0bTefkEc7FYlOq6etjbQT7ogI0RJIZrhOp/zIebbprmmsGsOIxtUHAK5wlMTfJ2e07nvucBvAm7k8B7hVNsO+1HmsUcPALVOvfK2VnfmaYrl6YBi6RrM8YNwdXVKwv4kj84RHSrmML4W/Ibx0UqpRLEj7OS7pKeqq3UQPE73AT/5yISC9S9fXJPLL6kow4GrVbzPYV3/QFZh8zCLD510UQ1k1lu29CWjwa4w7pDBWsh3f0WrA/G+rXxpefwsQNt6+rb8= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-Network-Message-Id: aa093fd1-c00f-4b8c-6f74-08d6037c4104 X-MS-Exchange-CrossTenant-originalarrivaltime: 16 Aug 2018 13:29:12.0672 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 657af505-d5df-48d0-8300-c31994686c5c X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR0201MB3395 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org > -----Original Message----- > From: Peter Ujfalusi > Sent: Wednesday, August 15, 2018 4:27 PM > To: dan.j.williams@intel.com; vkoul@kernel.org > Cc: dmaengine@vger.kernel.org; linux-kernel@vger.kernel.org; > lars@metafoo.de; Radhey Shyam Pandey > Subject: [RFC] dmaengine: Add metadata_ops for dma_async_tx_descriptor >=20 > The metadata is best described as side band data or parameters traveling > alongside the data DMAd by the DMA engine. It is data > which is understood by the peripheral and the peripheral driver only, the > DMA engine see it only as data block and it is not interpreting it in any > way. >=20 > The metadata can be different per descriptor as it is a parameter for the > data being transferred. >=20 > If the DMA supports per descriptor metadata it can implement the attach, > get_ptr/set_len callbacks. >=20 > Client drivers must only use either attach or get_ptr/set_len to avoid > miss configuration. >=20 > Client driver can check if a given metadata mode is supported by the > channel during probe time with > dmaengine_is_metadata_mode_supported(chan, DESC_METADATA_CLIENT); > dmaengine_is_metadata_mode_supported(chan, > DESC_METADATA_EMBEDDED); >=20 > and based on this information can use either mode. >=20 > Wrappers are also added for the metadata_ops. >=20 > To be used in DESC_METADATA_CLIENT mode: > dmaengine_desc_attach_metadata() >=20 > To be used in DESC_METADATA_EMBEDDED mode: > dmaengine_desc_get_metadata_ptr() > dmaengine_desc_set_metadata_len() >=20 > Signed-off-by: Peter Ujfalusi > --- > include/linux/dmaengine.h | 112 > ++++++++++++++++++++++++++++++++++++++ > 1 file changed, 112 insertions(+) >=20 > diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h > index 3db833a8c542..2200f8985adf 100644 > --- a/include/linux/dmaengine.h > +++ b/include/linux/dmaengine.h > @@ -231,6 +231,25 @@ typedef struct { DECLARE_BITMAP(bits, > DMA_TX_TYPE_END); } dma_cap_mask_t; > * @bytes_transferred: byte counter > */ >=20 > +/** > + * enum dma_desc_metadata_mode - per descriptor metadata mode types > supported > + * @DESC_METADATA_CLIENT - the metadata buffer is allocated/provided by > the > + * client driver and it is attached (via the dmaengine_desc_attach_meta= data() > + * helper) to the descriptor. > + * @DESC_METADATA_EMBEDDED - the metadata buffer is > allocated/managed by the DMA Just a thought - We can rename it to DESC_METADATA_ENGINE?=20 i.e metadata allocation place - > dma client/engine. > + * driver. The client driver can ask for the pointer, maximum size and = the > + * currently used size of the metadata and can directly updata or read = it. /s/updata/update > + * dmaengine_desc_get_metadata_ptr() and > dmaengine_desc_set_metadata_len() is > + * provided as helper functions. It will be helpful if we add description for both DESC_METADATA_EMBEDDED=20 modes i.e DMA_DEV_TO_MEM and MEM_TO_DEV types. I think in DEV_TO_MEM we don't need to set_metadata_len(). Length will provided by DMA engine. > + * > + * Note: the two mode is not compatible and clients must use one mode fo= r a > + * descriptor. > + */ > +enum dma_desc_metadata_mode { > + DESC_METADATA_CLIENT =3D (1 << 0), > + DESC_METADATA_EMBEDDED =3D (1 << 1), > +}; > + > struct dma_chan_percpu { > /* stats */ > unsigned long memcpy_count; > @@ -494,6 +513,18 @@ struct dmaengine_unmap_data { > dma_addr_t addr[0]; > }; >=20 > +struct dma_async_tx_descriptor; > + > +struct dma_descriptor_metadata_ops { > + int (*attach)(struct dma_async_tx_descriptor *desc, void *data, > + size_t len); > + > + void *(*get_ptr)(struct dma_async_tx_descriptor *desc, > + size_t *payload_len, size_t *max_len); > + int (*set_len)(struct dma_async_tx_descriptor *desc, > + size_t payload_len); > +}; > + > /** > * struct dma_async_tx_descriptor - async transaction descriptor > * ---dma generic offload fields--- > @@ -523,6 +554,8 @@ struct dma_async_tx_descriptor { > dma_async_tx_callback_result callback_result; > void *callback_param; > struct dmaengine_unmap_data *unmap; > + enum dma_desc_metadata_mode desc_metadata_mode; > + struct dma_descriptor_metadata_ops *metadata_ops; > #ifdef CONFIG_ASYNC_TX_ENABLE_CHANNEL_SWITCH > struct dma_async_tx_descriptor *next; > struct dma_async_tx_descriptor *parent; > @@ -685,6 +718,7 @@ struct dma_filter { > * @global_node: list_head for global dma_device_list > * @filter: information for device/slave to filter function/param mappin= g > * @cap_mask: one or more dma_capability flags > + * @desc_metadata_modes: supported metadata modes by the DMA device > * @max_xor: maximum number of xor sources, 0 if no capability > * @max_pq: maximum number of PQ sources and PQ-continue capability > * @copy_align: alignment shift for memcpy operations > @@ -749,6 +783,7 @@ struct dma_device { > struct list_head global_node; > struct dma_filter filter; > dma_cap_mask_t cap_mask; > + enum dma_desc_metadata_mode desc_metadata_modes; > unsigned short max_xor; > unsigned short max_pq; > enum dmaengine_alignment copy_align; > @@ -935,6 +970,83 @@ static inline struct dma_async_tx_descriptor > *dmaengine_prep_dma_memcpy( > len, flags); > } >=20 > +static inline bool dmaengine_is_metadata_mode_supported(struct dma_chan > *chan, > + enum dma_desc_metadata_mode mode) > +{ > + return !!(chan->device->desc_metadata_modes & mode); > +} > + > +static inline int _desc_check_and_set_metadata_mode( > + struct dma_async_tx_descriptor *desc, enum > dma_desc_metadata_mode mode) > +{ > + /* Make sure that the metadata mode is not mixed */ > + if (!desc->desc_metadata_mode) { Minor nit - we can refactor this code to have failure path early. > + if (dmaengine_is_metadata_mode_supported(desc->chan, > mode)) > + desc->desc_metadata_mode =3D mode; > + else > + return -ENOTSUPP; > + } else if (desc->desc_metadata_mode !=3D mode) { > + return -EINVAL; > + } > + > + return 0; > +} > + > +static inline int dmaengine_desc_attach_metadata( > + struct dma_async_tx_descriptor *desc, void *data, size_t len) > +{ > + int ret; > + > + if (!desc) > + return -EINVAL; > + > + ret =3D _desc_check_and_set_metadata_mode(desc, > DESC_METADATA_CLIENT); > + if (ret) > + return ret; > + > + if (!desc->metadata_ops || !desc->metadata_ops->attach) > + return -ENOTSUPP; > + > + return desc->metadata_ops->attach(desc, data, len); > +} > + > +static inline void *dmaengine_desc_get_metadata_ptr( > + struct dma_async_tx_descriptor *desc, size_t *payload_len, > + size_t *max_len) > +{ > + int ret; > + > + if (!desc) > + return ERR_PTR(-EINVAL); > + > + ret =3D _desc_check_and_set_metadata_mode(desc, > DESC_METADATA_EMBEDDED); > + if (ret) > + return ERR_PTR(ret); > + > + if (!desc->metadata_ops || !desc->metadata_ops->get_ptr) > + return ERR_PTR(-ENOTSUPP); > + > + return desc->metadata_ops->get_ptr(desc, payload_len, max_len); > +} > + > +static inline int dmaengine_desc_set_metadata_len( > + struct dma_async_tx_descriptor *desc, size_t payload_len) > +{ > + int ret; > + > + if (!desc) > + return -EINVAL; > + > + ret =3D _desc_check_and_set_metadata_mode(desc, > DESC_METADATA_EMBEDDED); > + if (ret) > + return ret; > + > + if (!desc->metadata_ops || !desc->metadata_ops->set_len) > + return -ENOTSUPP; > + > + return desc->metadata_ops->set_len(desc, payload_len); > +} > + > /** > * dmaengine_terminate_all() - Terminate all active DMA transfers > * @chan: The channel for which to terminate the transfers > -- > Peter >=20 > Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki. > Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki