Received: by 2002:ac0:a5a6:0:0:0:0:0 with SMTP id m35-v6csp3720369imm; Tue, 11 Sep 2018 00:35:24 -0700 (PDT) X-Google-Smtp-Source: ANB0VdbFOlKVjJ72TnKw/wrweuxhmRUzzFVsc/kAcfDBa44HYknaGFyFHR1B7rPIpUS21ghCI2E6 X-Received: by 2002:a17:902:708a:: with SMTP id z10-v6mr26068941plk.229.1536651324431; Tue, 11 Sep 2018 00:35:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1536651324; cv=none; d=google.com; s=arc-20160816; b=nLgk/A1ysCvb5L3+BamBISU3ho1k6imUvwUhNI1ixbgEz8CDWqCRP5UA+l028n0Cs6 GGv2zM8TJmNr1HYQnAMgdMObtkrOYiGt6m398fwTPvkTPK2pMWUDvlo1gUH4lmD5cMNn J8PLkY2MJcpjbCchLl1EPXsExvtddPimOsSVr7JvyCZlcLj5PrzlHZjvdfW0VKO+9idg uN2CMGvPppVQU8pCwkQzSc1bCK7tjZvQFQfVSRorI+X4WUolI1VZczjOQ0L56yORHH9P FW1guEMHhSPF+vfpm/BaJZFR0qpZpSDiJuG0KdscGk0TIV4yp3IKBL4gWPOlClsyuFEG +Y0w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:dkim-signature; bh=deiHCccVOPoXSA52fkhfMCfzuj938G3JfhfeklGAruk=; b=ns7fx2bABi1HRVrKm3EI8BI4ANqxB6mrk9gIdYDMnAum0stiw/RGujUlocRGpwUjT0 y/xkTCGScGNjhmptSUpeLl34jMHEUc7o1FrpRy8Eeg4YXBYK9E1Lxaz86zqY4VxEroyM J805qGJDbqDek7zur/TMU9Q7nE2TDv1Mp8QBBnnSBcW61IDhOBdSivz05HSQooHGQUhK Q+7oewlDVWK23FqyicJiWzjdK573F60A5s6/uILvB3n2EMUF7kqm7GkzjND9QBX79d8w xMR1Gdavj+qqJ/ojuVwlp7dvc5a1drugukM18COOE0OLZ8ySGh6AoO6+/D9KH91TsrSK BgHg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=xXljdJYg; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id a7-v6si19688377pfa.109.2018.09.11.00.35.09; Tue, 11 Sep 2018 00:35:24 -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=@kernel.org header.s=default header.b=xXljdJYg; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726860AbeIKMbR (ORCPT + 99 others); Tue, 11 Sep 2018 08:31:17 -0400 Received: from mail.kernel.org ([198.145.29.99]:36414 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726301AbeIKMbQ (ORCPT ); Tue, 11 Sep 2018 08:31:16 -0400 Received: from localhost (unknown [171.76.126.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 595F920865; Tue, 11 Sep 2018 07:33:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1536651197; bh=K1wSlWlDzYIAo+WlWPvgl8ucz73NNrMO40tBF6H8bLI=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=xXljdJYgDFYDza8FrbMPcvh2r+HJXHU3ptZKpJrl5lScl7u1MlGMnHciwE5v4wNHf babitXhY4Vvz/5p0bPRxND5yRoNkhpwKg/UbA5FBbmFPwj+cYUgmTllHISY6ClvwuO 6Il7v6SARN0hhhP4dvmPRefsfaNwi3FCTp6r6e54= Date: Tue, 11 Sep 2018 13:03:07 +0530 From: Vinod To: Peter Ujfalusi Cc: dan.j.williams@intel.com, dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org, lars@metafoo.de, radheys@xilinx.com Subject: Re: [PATCH v2 1/2] dmaengine: Add metadata_ops for dma_async_tx_descriptor Message-ID: <20180911073307.GK2634@vkoul-mobl> References: <20180830121910.16005-1-peter.ujfalusi@ti.com> <20180830121910.16005-2-peter.ujfalusi@ti.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20180830121910.16005-2-peter.ujfalusi@ti.com> User-Agent: Mutt/1.9.2 (2017-12-15) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 30-08-18, 15:19, Peter Ujfalusi wrote: > 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. > > The metadata can be different per descriptor as it is a parameter for the > data being transferred. > > If the DMA supports per descriptor metadata it can implement the attach, > get_ptr/set_len callbacks. > > Client drivers must only use either attach or get_ptr/set_len to avoid > misconfiguration. > > 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_ENGINE); > > and based on this information can use either mode. > > Wrappers are also added for the metadata_ops. > > To be used in DESC_METADATA_CLIENT mode: > dmaengine_desc_attach_metadata() > > To be used in DESC_METADATA_ENGINE mode: > dmaengine_desc_get_metadata_ptr() > dmaengine_desc_set_metadata_len() > > Signed-off-by: Peter Ujfalusi > --- > drivers/dma/dmaengine.c | 73 ++++++++++++++++++++++++++ > include/linux/dmaengine.h | 108 ++++++++++++++++++++++++++++++++++++++ > 2 files changed, 181 insertions(+) > > diff --git a/drivers/dma/dmaengine.c b/drivers/dma/dmaengine.c > index f1a441ab395d..53bd1eae23f2 100644 > --- a/drivers/dma/dmaengine.c > +++ b/drivers/dma/dmaengine.c > @@ -1306,6 +1306,79 @@ void dma_async_tx_descriptor_init(struct dma_async_tx_descriptor *tx, > } > EXPORT_SYMBOL(dma_async_tx_descriptor_init); > > +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) { > + if (dmaengine_is_metadata_mode_supported(desc->chan, mode)) > + desc->desc_metadata_mode = mode; > + else > + return -ENOTSUPP; > + } else if (desc->desc_metadata_mode != mode) { > + return -EINVAL; > + } > + > + return 0; > +} > + > +int dmaengine_desc_attach_metadata(struct dma_async_tx_descriptor *desc, > + void *data, size_t len) > +{ > + int ret; > + > + if (!desc) > + return -EINVAL; > + > + ret = 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); > +} > +EXPORT_SYMBOL(dmaengine_desc_attach_metadata); EXPORT_SYMBOL_GPL ? -- ~Vinod