linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
To: "Tejun Heo" <tj@kernel.org>,
	linux-ide@vger.kernel.org, "Rob Herring" <robh+dt@kernel.org>,
	linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org,
	"Christian Lamparter" <chunkeey@googlemail.com>,
	"Måns Rullgård" <mans@mansr.com>,
	"Julian Margetson" <runaway@candw.ms>
Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Subject: [PATCH v2 17/23] ata: sata_dwc_460ex: supply physical address of FIFO to DMA
Date: Tue, 26 Apr 2016 12:03:18 +0300	[thread overview]
Message-ID: <1461661404-1952-18-git-send-email-andriy.shevchenko@linux.intel.com> (raw)
In-Reply-To: <1461661404-1952-1-git-send-email-andriy.shevchenko@linux.intel.com>

DMA operates with physical addresses which is not exactly the same as ioremap()
returns.

Introduce variable to keep physical address of the SATA FIFO register and
supply it when prepare DMA channel.

Tested-by: Christian Lamparter <chunkeey@googlemail.com>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/ata/sata_dwc_460ex.c | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/drivers/ata/sata_dwc_460ex.c b/drivers/ata/sata_dwc_460ex.c
index 25e00f2..7b73728 100644
--- a/drivers/ata/sata_dwc_460ex.c
+++ b/drivers/ata/sata_dwc_460ex.c
@@ -100,7 +100,7 @@ struct sata_dwc_regs {
 	u32 versionr;		/* Version Register */
 	u32 idr;		/* ID Register */
 	u32 unimpl[192];	/* Unimplemented */
-	u32 dmadr[256];	/* FIFO Locations in DMA Mode */
+	u32 dmadr[256];		/* FIFO Locations in DMA Mode */
 };
 
 enum {
@@ -149,6 +149,7 @@ struct sata_dwc_device {
 	u32			sactive_issued;
 	u32			sactive_queued;
 	struct phy		*phy;
+	phys_addr_t		dmadr;
 #ifdef CONFIG_SATA_DWC_OLD_DMA
 	struct dw_dma_chip	*dma;
 #endif
@@ -380,15 +381,14 @@ static struct dma_async_tx_descriptor *dma_dwc_xfer_setup(struct ata_queued_cmd
 	struct ata_port *ap = qc->ap;
 	struct sata_dwc_device_port *hsdevp = HSDEVP_FROM_AP(ap);
 	struct sata_dwc_device *hsdev = HSDEV_FROM_AP(ap);
-	dma_addr_t addr = (dma_addr_t)&hsdev->sata_dwc_regs->dmadr;
 	struct dma_slave_config sconf;
 	struct dma_async_tx_descriptor *desc;
 
 	if (qc->dma_dir == DMA_DEV_TO_MEM) {
-		sconf.src_addr = addr;
+		sconf.src_addr = hsdev->dmadr;
 		sconf.device_fc = false;
 	} else {	/* DMA_MEM_TO_DEV */
-		sconf.dst_addr = addr;
+		sconf.dst_addr = hsdev->dmadr;
 		sconf.device_fc = false;
 	}
 
@@ -411,8 +411,8 @@ static struct dma_async_tx_descriptor *dma_dwc_xfer_setup(struct ata_queued_cmd
 	desc->callback = dma_dwc_xfer_done;
 	desc->callback_param = hsdev;
 
-	dev_dbg(hsdev->dev, "%s sg: 0x%p, count: %d addr: %pad\n",
-		__func__, qc->sg, qc->n_elem, &addr);
+	dev_dbg(hsdev->dev, "%s sg: 0x%p, count: %d addr: %pa\n", __func__,
+		qc->sg, qc->n_elem, &hsdev->dmadr);
 
 	return desc;
 }
@@ -1247,6 +1247,7 @@ static int sata_dwc_probe(struct platform_device *ofdev)
 
 	/* Synopsys DWC SATA specific Registers */
 	hsdev->sata_dwc_regs = base + SATA_DWC_REG_OFFSET;
+	hsdev->dmadr = res->start + SATA_DWC_REG_OFFSET + offsetof(struct sata_dwc_regs, dmadr);
 
 	/* Setup port */
 	host->ports[0]->ioaddr.cmd_addr = base;
-- 
2.8.0.rc3

  parent reply	other threads:[~2016-04-26  9:03 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-04-26  9:03 [PATCH v2 00/23] ata: sata_dwc_460ex: make it working again Andy Shevchenko
2016-04-26  9:03 ` [PATCH v2 01/23] ata: sata_dwc_460ex: remove incorrect locking Andy Shevchenko
2016-04-26  9:03 ` [PATCH v2 02/23] ata: sata_dwc_460ex: fix crash on offline links without an attached drive Andy Shevchenko
2016-04-26  9:03 ` [PATCH v2 03/23] ata: sata_dwc_460ex: set dma_boundary to 0x1fff Andy Shevchenko
2016-05-08 19:41   ` Tejun Heo
2016-05-08 21:25     ` Måns Rullgård
2016-04-26  9:03 ` [PATCH v2 04/23] ata: sata_dwc_460ex: burst size must be in items not bytes Andy Shevchenko
2016-04-26  9:03 ` [PATCH v2 05/23] ata: sata_dwc_460ex: DMA is always a flow controller Andy Shevchenko
2016-04-26  9:03 ` [PATCH v2 06/23] ata: sata_dwc_460ex: select only core part of DMA driver Andy Shevchenko
2016-04-26  9:03 ` [PATCH v2 07/23] ata: sata_dwc_460ex: skip dma setup for non-dma commands Andy Shevchenko
2016-04-26  9:03 ` [PATCH v2 08/23] ata: sata_dwc_460ex: don't call ata_sff_qc_issue() on DMA commands Andy Shevchenko
2016-04-26  9:03 ` [PATCH v2 09/23] ata: sata_dwc_460ex: use "dmas" DT property to find dma channel Andy Shevchenko
2016-04-26  9:03 ` [PATCH v2 10/23] ata: sata_dwc_460ex: add phy support Andy Shevchenko
2016-04-26  9:03 ` [PATCH v2 11/23] ata: sata_dwc_460ex: get rid of global data Andy Shevchenko
2016-04-26  9:03 ` [PATCH v2 12/23] ata: sata_dwc_460ex: correct HOSTDEV{P}_FROM_*() macros Andy Shevchenko
2016-04-26  9:03 ` [PATCH v2 13/23] ata: sata_dwc_460ex: remove empty libata callback Andy Shevchenko
2016-04-26  9:03 ` [PATCH v2 14/23] ata: sata_dwc_460ex: get rid of some pointless casts Andy Shevchenko
2016-04-26  9:03 ` [PATCH v2 15/23] ata: sata_dwc_460ex: get rid of incorrect cast Andy Shevchenko
2016-04-26  9:03 ` [PATCH v2 16/23] ata: sata_dwc_460ex: add __iomem to register base pointer Andy Shevchenko
2016-04-26  9:03 ` Andy Shevchenko [this message]
2016-04-26  9:03 ` [PATCH v2 18/23] ata: sata_dwc_460ex: switch to new dmaengine_terminate_* API Andy Shevchenko
2016-04-26  9:03 ` [PATCH v2 19/23] ata: sata_dwc_460ex: use readl/writel_relaxed() Andy Shevchenko
2016-04-26  9:03 ` [PATCH v2 20/23] ata: sata_dwc_460ex: tidy up sata_dwc_clear_dmacr() Andy Shevchenko
2016-04-26  9:03 ` [PATCH v2 21/23] ata: sata_dwc_460ex: use devm_ioremap Andy Shevchenko
2016-04-26  9:03 ` [PATCH v2 22/23] ata: sata_dwc_460ex: make debug messages neat Andy Shevchenko
2016-04-26  9:03 ` [PATCH v2 23/23] powerpc/4xx: Device tree update for the 460ex DWC SATA Andy Shevchenko
2016-05-04 12:22 ` [PATCH v2 00/23] ata: sata_dwc_460ex: make it working again Andy Shevchenko
2016-05-08 20:00   ` Tejun Heo
2016-05-09  1:09     ` Tejun Heo
2016-05-09  9:07       ` Andy Shevchenko
2016-05-09  9:13         ` Måns Rullgård
2016-05-09 19:05           ` Tejun Heo
2016-05-09 19:59             ` Andy Shevchenko
2016-05-10  6:04               ` Vinod Koul
2016-05-10 16:30                 ` Tejun Heo
2016-05-10 16:44                   ` Andy Shevchenko

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=1461661404-1952-18-git-send-email-andriy.shevchenko@linux.intel.com \
    --to=andriy.shevchenko@linux.intel.com \
    --cc=chunkeey@googlemail.com \
    --cc=linux-ide@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=mans@mansr.com \
    --cc=robh+dt@kernel.org \
    --cc=runaway@candw.ms \
    --cc=tj@kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).