Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753842AbdGSKG1 (ORCPT ); Wed, 19 Jul 2017 06:06:27 -0400 Received: from mga14.intel.com ([192.55.52.115]:53065 "EHLO mga14.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752842AbdGSKGY (ORCPT ); Wed, 19 Jul 2017 06:06:24 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.40,380,1496127600"; d="scan'208";a="1174324713" Date: Wed, 19 Jul 2017 15:39:02 +0530 From: Vinod Koul To: Abhishek Sahu Cc: andy.gross@linaro.org, david.brown@linaro.org, dan.j.williams@intel.com, linux-arm-msm@vger.kernel.org, linux-soc@vger.kernel.org, dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v2 2/3] dmaengine: qcom: bam_dma: wrapper functions for command descriptor Message-ID: <20170719100902.GG3053@localhost> References: <1498481369-29497-1-git-send-email-absahu@codeaurora.org> <1498481369-29497-3-git-send-email-absahu@codeaurora.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1498481369-29497-3-git-send-email-absahu@codeaurora.org> User-Agent: Mutt/1.5.24 (2015-08-30) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 4062 Lines: 124 On Mon, Jun 26, 2017 at 06:19:28PM +0530, Abhishek Sahu wrote: > QCOM BAM also supports command descriptor which allows the SW to > create descriptors of type command which does not generate any > data transmissions but configures registers in the peripheral. > In command descriptor the 32bit address point to the start of > the command block which holds the command elements and the > 16bit size define the size of the command block. > > Each Command Element is structured by 4 words: > Write command: address + cmd > register data > register mask > reserved > > Read command: address + cmd > read data result address, > reserved > reserved > > This patch creates a new header file for BAM driver which contains the > structures and wrapper functions for command descriptor. This file will > be used by different QCOM peripheral drivers for forming the command > descriptor > > Signed-off-by: Abhishek Sahu > --- > include/linux/dma/qcom_bam_dma.h | 79 ++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 79 insertions(+) > create mode 100644 include/linux/dma/qcom_bam_dma.h > > diff --git a/include/linux/dma/qcom_bam_dma.h b/include/linux/dma/qcom_bam_dma.h > new file mode 100644 > index 0000000..077d43a > --- /dev/null > +++ b/include/linux/dma/qcom_bam_dma.h > @@ -0,0 +1,79 @@ > +/* > + * Copyright (c) 2016-2017, The Linux Foundation. All rights reserved. > + * > + * This software is licensed under the terms of the GNU General Public > + * License version 2, as published by the Free Software Foundation, and > + * may be copied, distributed, and modified under those terms. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + */ > + > +#ifndef _QCOM_BAM_DMA_H > +#define _QCOM_BAM_DMA_H > + > +#include > + > +/* > + * This data type corresponds to the native Command Element > + * supported by BAM DMA Engine. > + * > + * @cmd_and_addr - upper 8 bits command and lower 24 bits register address. > + * @data - for write command: content to be written into peripheral register. > + * for read command: dest addr to write peripheral register value. > + * @mask - register mask. > + * @reserved - for future usage. > + * > + */ > +struct bam_cmd_element { > + __le32 cmd_and_addr; > + __le32 data; > + __le32 mask; > + __le32 reserved; > +}; > + > +/* > + * This enum indicates the command type in a command element > + */ > +enum bam_command_type { > + BAM_WRITE_COMMAND = 0, > + BAM_READ_COMMAND, > +}; > + > +/* > + * prep_bam_ce_le32 - Wrapper function to prepare a single BAM command > + * element with the data already in le32 format. > + * > + * @bam_ce: bam command element > + * @addr: target address > + * @cmd: BAM command > + * @data: actual data for write and dest addr for read in le32 > + */ > +static inline void > +bam_prep_ce_le32(struct bam_cmd_element *bam_ce, u32 addr, > + enum bam_command_type cmd, __le32 data) > +{ > + bam_ce->cmd_and_addr = > + cpu_to_le32((addr & 0xffffff) | ((cmd & 0xff) << 24)); > + bam_ce->data = data; > + bam_ce->mask = cpu_to_le32(0xffffffff); > +} Is this being used by clients? > + > +/* > + * bam_prep_ce - Wrapper function to prepare a single BAM command element > + * with the data. > + * > + * @bam_ce: BAM command element > + * @addr: target address > + * @cmd: BAM command > + * @data: actual data for write and dest addr for read > + */ > +static inline void > +bam_prep_ce(struct bam_cmd_element *bam_ce, u32 addr, > + enum bam_command_type cmd, u32 data) > +{ > + bam_prep_ce_le32(bam_ce, addr, cmd, cpu_to_le32(data)); > +} > +#endif > -- > QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation > -- ~Vinod