From: Michael Schmitz <schmitzmic@gmail.com>
To: linux-m68k@vger.kernel.org, arnd@kernel.org
Cc: linux-scsi@vger.kernel.org, geert@linux-m68k.org,
Michael Schmitz <schmitzmic@gmail.com>
Subject: [PATCH v1 4/4] scsi - convert mvme147_scsi driver to DMA API
Date: Sat, 9 Jul 2022 12:10:19 +1200 [thread overview]
Message-ID: <20220709001019.11149-5-schmitzmic@gmail.com> (raw)
In-Reply-To: <20220709001019.11149-1-schmitzmic@gmail.com>
Convert mvme147_scsi to DMA API to eliminate one of the last
usages of virt_to_bus().
CC: linux-scsi@vger.kernel.org
Link: https://lore.kernel.org/r/6d1d88ee-1cf6-c735-1e6d-bafd2096e322@gmail.com
Signed-off-by: Michael Schmitz <schmitzmic@gmail.com>
---
drivers/scsi/mvme147.c | 33 ++++++++++++++++++++++++---------
1 file changed, 24 insertions(+), 9 deletions(-)
diff --git a/drivers/scsi/mvme147.c b/drivers/scsi/mvme147.c
index aa6476c3e70c..6ffd15f08629 100644
--- a/drivers/scsi/mvme147.c
+++ b/drivers/scsi/mvme147.c
@@ -21,6 +21,8 @@
#include "wd33c93.h"
#include "mvme147.h"
+#define DMA_DIR(d) ((d == DATA_OUT_DIR) ? DMA_TO_DEVICE : DMA_FROM_DEVICE)
+
static irqreturn_t mvme147_intr(int irq, void *data)
{
struct Scsi_Host *instance = data;
@@ -35,10 +37,20 @@ static irqreturn_t mvme147_intr(int irq, void *data)
static int dma_setup(struct scsi_cmnd *cmd, int dir_in)
{
struct scsi_pointer *scsi_pointer = WD33C93_scsi_pointer(cmd);
+ unsigned long len = scsi_pointer->this_residual;
struct Scsi_Host *instance = cmd->device->host;
struct WD33C93_hostdata *hdata = shost_priv(instance);
unsigned char flags = 0x01;
- unsigned long addr = virt_to_bus(scsi_pointer->ptr);
+ dma_addr_t addr;
+
+ addr = dma_map_single(instance->dma_dev, scsi_pointer->ptr,
+ len, DMA_DIR(dir_in));
+ if (dma_mapping_error(instance->dma_dev, addr)) {
+ dev_warn(instance->dma_dev, "cannot map SCSI data block %p\n",
+ scsi_pointer->ptr);
+ return 1;
+ }
+ scsi_pointer->dma_handle = addr;
/* setup dma direction */
if (!dir_in)
@@ -47,14 +59,6 @@ static int dma_setup(struct scsi_cmnd *cmd, int dir_in)
/* remember direction */
hdata->dma_dir = dir_in;
- if (dir_in) {
- /* invalidate any cache */
- cache_clear(addr, scsi_pointer->this_residual);
- } else {
- /* push any dirty cache */
- cache_push(addr, scsi_pointer->this_residual);
- }
-
/* start DMA */
m147_pcc->dma_bcr = scsi_pointer->this_residual | (1 << 24);
m147_pcc->dma_dadr = addr;
@@ -67,7 +71,13 @@ static int dma_setup(struct scsi_cmnd *cmd, int dir_in)
static void dma_stop(struct Scsi_Host *instance, struct scsi_cmnd *SCpnt,
int status)
{
+ struct scsi_pointer *scsi_pointer = WD33C93_scsi_pointer(SCpnt);
+ struct WD33C93_hostdata *hdata = shost_priv(instance);
+
m147_pcc->dma_cntrl = 0;
+ dma_unmap_single(instance->dma_dev, scsi_pointer->dma_handle,
+ scsi_pointer->this_residual,
+ DMA_DIR(hdata->dma_dir));
}
static struct scsi_host_template mvme147_host_template = {
@@ -94,6 +104,11 @@ static int __init mvme147_scsi_probe(struct platform_device *pdev)
struct WD33C93_hostdata *hdata;
int error = -ENOMEM;
+ if (dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32))) {
+ dev_warn(&pdev->dev, "cannot use 32 bit DMA\n");
+ return -ENODEV;
+ }
+
mres = platform_get_resource(pdev, IORESOURCE_MEM, 0);
if (!mres)
return -ENODEV;
--
2.17.1
prev parent reply other threads:[~2022-07-09 0:10 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-07-09 0:10 [PATCH v1 0/4] Convert m68k MVME147 WD33C93 SCSI driver to DMA API Michael Schmitz
2022-07-09 0:10 ` [PATCH v1 1/4] m68k - add MVME147 SCSI base address to mvme147hw.h Michael Schmitz
2022-07-10 16:06 ` Arnd Bergmann
2022-07-11 4:16 ` Michael Schmitz
2022-07-11 8:45 ` Arnd Bergmann
2022-07-11 20:04 ` Michael Schmitz
2022-07-11 22:39 ` Brad Boyer
2022-07-09 0:10 ` [PATCH v1 2/4] m68k - set up platform device for mvme147_scsi Michael Schmitz
2022-07-09 5:29 ` kernel test robot
2022-07-10 15:56 ` Arnd Bergmann
2022-07-11 4:11 ` Michael Schmitz
2022-07-09 0:10 ` [PATCH v1 3/4] scsi - convert mvme146_scsi.c to platform device Michael Schmitz
2022-07-10 16:11 ` Arnd Bergmann
2022-07-11 7:16 ` Geert Uytterhoeven
2022-07-11 7:57 ` Michael Schmitz
2022-07-11 8:27 ` Geert Uytterhoeven
2022-07-11 20:02 ` Michael Schmitz
2022-07-12 3:27 ` Michael Schmitz
2022-07-12 6:57 ` Geert Uytterhoeven
2022-07-12 7:59 ` Michael Schmitz
2022-07-09 0:10 ` Michael Schmitz [this message]
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=20220709001019.11149-5-schmitzmic@gmail.com \
--to=schmitzmic@gmail.com \
--cc=arnd@kernel.org \
--cc=geert@linux-m68k.org \
--cc=linux-m68k@vger.kernel.org \
--cc=linux-scsi@vger.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 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.