All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jon Hunter <jonathanh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
To: Vinod Koul <vinod.koul-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
Cc: Laxman Dewangan
	<ldewangan-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>,
	Stephen Warren <swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>,
	Thierry Reding
	<thierry.reding-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
	Alexandre Courbot
	<gnurou-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
	dmaengine-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [RFC PATCH 7/7] DMA: tegra-adma: Add support for Tegra210 ADMA
Date: Mon, 24 Aug 2015 09:55:03 +0100	[thread overview]
Message-ID: <55DADBE7.80006@nvidia.com> (raw)
In-Reply-To: <20150823143328.GC13546@localhost>


On 23/08/15 15:33, Vinod Koul wrote:
> On Tue, Aug 18, 2015 at 02:49:15PM +0100, Jon Hunter wrote:
>> +#define AHUB_TO_MEMORY						2
>> +#define MEMORY_TO_AHUB						4
> 
> namespace this aptly as well
> 
>> +static void tegra_adma_stop(struct tegra_dma_channel *tdc)
>> +{
>> +	u32 status;
>> +
>> +	/* TODO: Do we need to disable interrupts here? */
> 
> when?

Once everyone is happy with the RFC in general.

>> +static void tegra_adma_start(struct tegra_dma_channel *tdc,
>> +		struct tegra_dma_sg_req *sg_req)
>> +{
>> +	struct tegra_adma_chan_regs *ch_regs = &sg_req->adma_ch_regs;
>> +
>> +	/* Update transfer done count for position calculation */
>> +	tdc->adma_ch_regs.tc = ch_regs->tc;
>> +	tdc_write(tdc, ADMA_CH_TC, ch_regs->tc);
>> +	tdc_write(tdc, ADMA_CH_CTRL, ch_regs->ctrl);
>> +	tdc_write(tdc, ADMA_CH_LOWER_SOURCE_ADDR, ch_regs->src_ptr);
>> +	tdc_write(tdc, ADMA_CH_LOWER_TARGET_ADDR, ch_regs->tgt_ptr);
>> +	tdc_write(tdc, ADMA_CH_AHUB_FIFO_CTRL, ch_regs->ahub_fifo_ctrl);
>> +	tdc_write(tdc, ADMA_CH_CONFIG, ch_regs->config);
> empty line here please

Ok.

>> +static int tegra_adma_get_xfer_params(struct tegra_dma_channel *tdc,
>> +				      struct tegra_adma_chan_regs *ch_regs,
>> +				      enum dma_transfer_direction direction)
>> +{
>> +	u32 burst_size, ctrl, ctrl_mask, slave_id, fifo_mask, fifo_shift;
>> +
>> +	ch_regs->ahub_fifo_ctrl = tdc_read(tdc, ADMA_CH_AHUB_FIFO_CTRL);
>> +	ch_regs->config = tdc_read(tdc, ADMA_CH_CONFIG);
>> +	ch_regs->ctrl = tdc_read(tdc, ADMA_CH_CTRL);
>> +	slave_id = tdc->dma_sconfig.slave_id;
>> +
>> +	switch (direction) {
>> +	case DMA_MEM_TO_DEV:
>> +		burst_size = fls(tdc->dma_sconfig.dst_maxburst);
>> +		ctrl_mask = ADMA_CH_CTRL_TX_REQUEST_SELECT_MASK;
>> +		ctrl = MEMORY_TO_AHUB << ADMA_CH_CTRL_TRANSFER_DIRECTION_SHIFT;
>> +		ctrl |= slave_id << ADMA_CH_CTRL_TX_REQUEST_SELECT_SHIFT;
>> +		fifo_mask = ADMA_CH_AHUB_FIFO_CTRL_TX_FIFO_SIZE_MASK;
>> +		fifo_shift = ADMA_CH_AHUB_FIFO_CTRL_TX_FIFO_SIZE_SHIFT;
>> +		break;
> Empty line here pls

Ok, any reason why? Other dma drivers don't appear to do this.

>> +	case DMA_DEV_TO_MEM:
>> +		burst_size = fls(tdc->dma_sconfig.src_maxburst);
>> +		ctrl_mask = ADMA_CH_CTRL_RX_REQUEST_SELECT_MASK;
>> +		ctrl = AHUB_TO_MEMORY << ADMA_CH_CTRL_TRANSFER_DIRECTION_SHIFT;
>> +		ctrl |= slave_id << ADMA_CH_CTRL_RX_REQUEST_SELECT_SHIFT;
>> +		fifo_mask = ADMA_CH_AHUB_FIFO_CTRL_RX_FIFO_SIZE_MASK;
>> +		fifo_shift = ADMA_CH_AHUB_FIFO_CTRL_RX_FIFO_SIZE_SHIFT;
>> +		break;
> 
> here too...
> 
>> +	default:
>> +		dev_err(tdc2dev(tdc), "Dma direction is not supported\n");
>> +		return -EINVAL;
>> +	}
>> +
>> +	if (!burst_size || burst_size > ADMA_BURSTSIZE_16)
>> +		burst_size = ADMA_BURSTSIZE_16;
>> +
>> +	ch_regs->ahub_fifo_ctrl &= ~fifo_mask;
>> +	ch_regs->ahub_fifo_ctrl |= ADMA_FIFO_DEFAULT_SIZE << fifo_shift;
>> +	ch_regs->config &= ~ADMA_CH_CONFIG_BURST_SIZE_MASK;
>> +	ch_regs->config |= burst_size << ADMA_CH_CONFIG_BURST_SIZE_SHIFT;
>> +	ch_regs->ctrl &= ~(ctrl_mask | ADMA_CH_CTRL_TRANSFER_DIRECTION_MASK);
>> +	ch_regs->ctrl |= ctrl;
>> +
>> +	return -EINVAL;
> ??

Thanks. That's an error. Will fix.

>> +static int tegra_adma_pm_suspend(struct device *dev)
>> +{
>> +	struct tegra_dma *tdma = dev_get_drvdata(dev);
>> +	int i;
>> +	int ret;
>> +
>> +	ret = pm_runtime_get_sync(dev);
> why is this required :)

To ensure that the clocks are enabled before the registers are read.
This function saves the dma context before suspend, in case the hardware
state is lost.

>> +static int tegra_adma_pm_resume(struct device *dev)
>> +{
>> +	struct tegra_dma *tdma = dev_get_drvdata(dev);
>> +	int i;
>> +	int ret;
>> +
>> +	ret = pm_runtime_get_sync(dev);
> and this

Same here.

Cheers
Jon

WARNING: multiple messages have this Message-ID (diff)
From: Jon Hunter <jonathanh@nvidia.com>
To: Vinod Koul <vinod.koul@intel.com>
Cc: Laxman Dewangan <ldewangan@nvidia.com>,
	Stephen Warren <swarren@wwwdotorg.org>,
	Thierry Reding <thierry.reding@gmail.com>,
	"Alexandre Courbot" <gnurou@gmail.com>,
	<dmaengine@vger.kernel.org>, <linux-tegra@vger.kernel.org>,
	<linux-kernel@vger.kernel.org>, <devicetree@vger.kernel.org>
Subject: Re: [RFC PATCH 7/7] DMA: tegra-adma: Add support for Tegra210 ADMA
Date: Mon, 24 Aug 2015 09:55:03 +0100	[thread overview]
Message-ID: <55DADBE7.80006@nvidia.com> (raw)
In-Reply-To: <20150823143328.GC13546@localhost>


On 23/08/15 15:33, Vinod Koul wrote:
> On Tue, Aug 18, 2015 at 02:49:15PM +0100, Jon Hunter wrote:
>> +#define AHUB_TO_MEMORY						2
>> +#define MEMORY_TO_AHUB						4
> 
> namespace this aptly as well
> 
>> +static void tegra_adma_stop(struct tegra_dma_channel *tdc)
>> +{
>> +	u32 status;
>> +
>> +	/* TODO: Do we need to disable interrupts here? */
> 
> when?

Once everyone is happy with the RFC in general.

>> +static void tegra_adma_start(struct tegra_dma_channel *tdc,
>> +		struct tegra_dma_sg_req *sg_req)
>> +{
>> +	struct tegra_adma_chan_regs *ch_regs = &sg_req->adma_ch_regs;
>> +
>> +	/* Update transfer done count for position calculation */
>> +	tdc->adma_ch_regs.tc = ch_regs->tc;
>> +	tdc_write(tdc, ADMA_CH_TC, ch_regs->tc);
>> +	tdc_write(tdc, ADMA_CH_CTRL, ch_regs->ctrl);
>> +	tdc_write(tdc, ADMA_CH_LOWER_SOURCE_ADDR, ch_regs->src_ptr);
>> +	tdc_write(tdc, ADMA_CH_LOWER_TARGET_ADDR, ch_regs->tgt_ptr);
>> +	tdc_write(tdc, ADMA_CH_AHUB_FIFO_CTRL, ch_regs->ahub_fifo_ctrl);
>> +	tdc_write(tdc, ADMA_CH_CONFIG, ch_regs->config);
> empty line here please

Ok.

>> +static int tegra_adma_get_xfer_params(struct tegra_dma_channel *tdc,
>> +				      struct tegra_adma_chan_regs *ch_regs,
>> +				      enum dma_transfer_direction direction)
>> +{
>> +	u32 burst_size, ctrl, ctrl_mask, slave_id, fifo_mask, fifo_shift;
>> +
>> +	ch_regs->ahub_fifo_ctrl = tdc_read(tdc, ADMA_CH_AHUB_FIFO_CTRL);
>> +	ch_regs->config = tdc_read(tdc, ADMA_CH_CONFIG);
>> +	ch_regs->ctrl = tdc_read(tdc, ADMA_CH_CTRL);
>> +	slave_id = tdc->dma_sconfig.slave_id;
>> +
>> +	switch (direction) {
>> +	case DMA_MEM_TO_DEV:
>> +		burst_size = fls(tdc->dma_sconfig.dst_maxburst);
>> +		ctrl_mask = ADMA_CH_CTRL_TX_REQUEST_SELECT_MASK;
>> +		ctrl = MEMORY_TO_AHUB << ADMA_CH_CTRL_TRANSFER_DIRECTION_SHIFT;
>> +		ctrl |= slave_id << ADMA_CH_CTRL_TX_REQUEST_SELECT_SHIFT;
>> +		fifo_mask = ADMA_CH_AHUB_FIFO_CTRL_TX_FIFO_SIZE_MASK;
>> +		fifo_shift = ADMA_CH_AHUB_FIFO_CTRL_TX_FIFO_SIZE_SHIFT;
>> +		break;
> Empty line here pls

Ok, any reason why? Other dma drivers don't appear to do this.

>> +	case DMA_DEV_TO_MEM:
>> +		burst_size = fls(tdc->dma_sconfig.src_maxburst);
>> +		ctrl_mask = ADMA_CH_CTRL_RX_REQUEST_SELECT_MASK;
>> +		ctrl = AHUB_TO_MEMORY << ADMA_CH_CTRL_TRANSFER_DIRECTION_SHIFT;
>> +		ctrl |= slave_id << ADMA_CH_CTRL_RX_REQUEST_SELECT_SHIFT;
>> +		fifo_mask = ADMA_CH_AHUB_FIFO_CTRL_RX_FIFO_SIZE_MASK;
>> +		fifo_shift = ADMA_CH_AHUB_FIFO_CTRL_RX_FIFO_SIZE_SHIFT;
>> +		break;
> 
> here too...
> 
>> +	default:
>> +		dev_err(tdc2dev(tdc), "Dma direction is not supported\n");
>> +		return -EINVAL;
>> +	}
>> +
>> +	if (!burst_size || burst_size > ADMA_BURSTSIZE_16)
>> +		burst_size = ADMA_BURSTSIZE_16;
>> +
>> +	ch_regs->ahub_fifo_ctrl &= ~fifo_mask;
>> +	ch_regs->ahub_fifo_ctrl |= ADMA_FIFO_DEFAULT_SIZE << fifo_shift;
>> +	ch_regs->config &= ~ADMA_CH_CONFIG_BURST_SIZE_MASK;
>> +	ch_regs->config |= burst_size << ADMA_CH_CONFIG_BURST_SIZE_SHIFT;
>> +	ch_regs->ctrl &= ~(ctrl_mask | ADMA_CH_CTRL_TRANSFER_DIRECTION_MASK);
>> +	ch_regs->ctrl |= ctrl;
>> +
>> +	return -EINVAL;
> ??

Thanks. That's an error. Will fix.

>> +static int tegra_adma_pm_suspend(struct device *dev)
>> +{
>> +	struct tegra_dma *tdma = dev_get_drvdata(dev);
>> +	int i;
>> +	int ret;
>> +
>> +	ret = pm_runtime_get_sync(dev);
> why is this required :)

To ensure that the clocks are enabled before the registers are read.
This function saves the dma context before suspend, in case the hardware
state is lost.

>> +static int tegra_adma_pm_resume(struct device *dev)
>> +{
>> +	struct tegra_dma *tdma = dev_get_drvdata(dev);
>> +	int i;
>> +	int ret;
>> +
>> +	ret = pm_runtime_get_sync(dev);
> and this

Same here.

Cheers
Jon

  reply	other threads:[~2015-08-24  8:55 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-08-18 13:49 [RFC PATCH 0/7] DMA: Add support for Tegra210 ADMA Jon Hunter
2015-08-18 13:49 ` Jon Hunter
2015-08-18 13:49 ` [RFC PATCH 3/7] DMA: tegra-apb: Clean-up and simplify setting up of transfer parameters Jon Hunter
2015-08-18 13:49   ` Jon Hunter
2015-08-18 13:49 ` [RFC PATCH 4/7] DMA: tegra-apb: Add a function table for functions dealing with registers Jon Hunter
2015-08-18 13:49   ` Jon Hunter
     [not found] ` <1439905755-25150-1-git-send-email-jonathanh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2015-08-18 13:49   ` [RFC PATCH 1/7] DMA: tegra-apb: Correct runtime-pm usage Jon Hunter
2015-08-18 13:49     ` Jon Hunter
2015-08-23 14:17     ` Vinod Koul
2015-08-24  8:47       ` Jon Hunter
2015-08-24  8:47         ` Jon Hunter
2015-08-24  9:22         ` Vinod Koul
2015-08-24 13:22           ` Jon Hunter
2015-08-24 13:22             ` Jon Hunter
     [not found]             ` <55DB1AA9.7090906-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2015-08-24 14:21               ` Vinod Koul
2015-08-24 14:21                 ` Vinod Koul
2015-08-25  0:04                 ` Rafael J. Wysocki
     [not found]                   ` <13590312.K3yoQT5YDc-sKB8Sp2ER+y1GS7QM15AGw@public.gmane.org>
2015-08-25  9:37                     ` Jon Hunter
2015-08-25  9:37                       ` Jon Hunter
2015-08-25 22:46                       ` Rafael J. Wysocki
     [not found]                         ` <55DCF056.40004-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2015-08-28 10:30                           ` Jon Hunter
2015-08-28 10:30                             ` Jon Hunter
2015-08-18 13:49   ` [RFC PATCH 2/7] DMA: tegra-apb: Move code dealing with h/w registers into separate functions Jon Hunter
2015-08-18 13:49     ` Jon Hunter
2015-08-18 13:49   ` [RFC PATCH 5/7] DMA: tegra-apb: Move common code into separate source files Jon Hunter
2015-08-18 13:49     ` Jon Hunter
2015-08-18 13:49   ` [RFC PATCH 6/7] Documentation: DT: Add binding documentation for NVIDIA ADMA Jon Hunter
2015-08-18 13:49     ` Jon Hunter
2015-08-18 13:49   ` [RFC PATCH 7/7] DMA: tegra-adma: Add support for Tegra210 ADMA Jon Hunter
2015-08-18 13:49     ` Jon Hunter
     [not found]     ` <1439905755-25150-8-git-send-email-jonathanh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2015-08-23 14:33       ` Vinod Koul
2015-08-23 14:33         ` Vinod Koul
2015-08-24  8:55         ` Jon Hunter [this message]
2015-08-24  8:55           ` Jon Hunter
2015-08-24  9:24           ` Vinod Koul

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=55DADBE7.80006@nvidia.com \
    --to=jonathanh-ddmlm1+adcrqt0dzr+alfa@public.gmane.org \
    --cc=devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=dmaengine-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=gnurou-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    --cc=ldewangan-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org \
    --cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org \
    --cc=thierry.reding-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    --cc=vinod.koul-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.