[PATCH 11/13] powerpc/5200: LocalPlus driver: move RAM DMA address from request to driver
From: Roman Fietze <hidden>
Date: 2009-12-22 07:10:26
Subsystem:
linux for powerpc (32-bit and 64-bit), the rest · Maintainers:
Madhavan Srinivasan, Michael Ellerman, Linus Torvalds
Signed-off-by: Roman Fietze <redacted> =2D-- arch/powerpc/include/asm/mpc52xx.h | 1 - arch/powerpc/platforms/52xx/mpc52xx_lpbfifo.c | 13 +++++++------ 2 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/arch/powerpc/include/asm/mpc52xx.h b/arch/powerpc/include/asm/=mpc52xx.h index 043458e..91c65d0 100644 =2D-- a/arch/powerpc/include/asm/mpc52xx.h
+++ b/arch/powerpc/include/asm/mpc52xx.h@@ -347,7 +347,6 @@ struct mpc52xx_lpbfifo_request {=20 /* Memory address */ void *data; =2D dma_addr_t data_dma; =20 /* Details of transfer */ size_t size;
diff --git a/arch/powerpc/platforms/52xx/mpc52xx_lpbfifo.c b/arch/powerpc/p=latforms/52xx/mpc52xx_lpbfifo.c index cd8dc69..b2c92f5 100644 =2D-- a/arch/powerpc/platforms/52xx/mpc52xx_lpbfifo.c
+++ b/arch/powerpc/platforms/52xx/mpc52xx_lpbfifo.c@@ -41,6 +41,7 @@ struct mpc52xx_lpbfifo {=20 /* Current state data */ struct mpc52xx_lpbfifo_request *req; + dma_addr_t data_dma; unsigned short irqs_pending; int dma_irqs_enabled; };
@@ -49,7 +50,7 @@ struct mpc52xx_lpbfifo { static struct mpc52xx_lpbfifo lpbfifo;
=20 =20 =2D/* The order of the raised interrupts of SCLPC and BCOM cann not be +/* The order of the raised interrupts of SCLPC and BCOM cannot be * predicted, because it depends on the individual BCOM and CPU * loads. So in DMA mode we just wait for both until we finish the * transaction. */
@@ -160,7 +161,7 @@ static void mpc52xx_lpbfifo_kick(struct mpc52xx_lpbfifo=_request *req)
out_be32(&lpbfifo.regs->fifo_alarm, MPC52xx_SCLPC_FIFO_SIZE - 28);
out_be32(&lpbfifo.regs->fifo_control, MPC52xx_SLPC_FIFO_CONTROL_GR(7));
lpbfifo.bcom_cur_task =3D lpbfifo.bcom_tx_task;
=2D req->data_dma =3D dma_map_single(lpbfifo.dev, req->data, req->size, D=
MA_TO_DEVICE);
+ lpbfifo.data_dma =3D dma_map_single(lpbfifo.dev, req->data, req->size, =
DMA_TO_DEVICE);
} else {
out_be32(&lpbfifo.regs->fifo_alarm, MPC52xx_SCLPC_FIFO_SIZE - 1);
out_be32(&lpbfifo.regs->fifo_control, MPC52xx_SLPC_FIFO_CONTROL_GR(0));@@ -177,7 +178,7 @@ static void mpc52xx_lpbfifo_kick(struct mpc52xx_lpbfifo=_request *req) lpbfifo.dma_irqs_enabled =3D 1; } } =2D req->data_dma =3D dma_map_single(lpbfifo.dev, req->data, req->size, D= MA_FROM_DEVICE); + lpbfifo.data_dma =3D dma_map_single(lpbfifo.dev, req->data, req->size, = DMA_FROM_DEVICE); } =20 /* error irq & master enabled bit */
@@ -187,7 +188,7 @@ static void mpc52xx_lpbfifo_kick(struct mpc52xx_lpbfifo=_request *req) =20 bd =3D bcom_prepare_next_buffer(lpbfifo.bcom_cur_task); bd->status =3D tc; =2D bd->data[0] =3D req->data_dma + req->pos; + bd->data[0] =3D lpbfifo.data_dma + req->pos; bcom_submit_next_buffer(lpbfifo.bcom_cur_task, NULL); } =20
@@ -378,9 +379,9 @@ static irqreturn_t mpc52xx_lpbfifo_bcom_irq(int irq, vo=id *dev_id)
=20
if (req) {
if (mpc52xx_lpbfifo_is_write(lpbfifo->req->flags))
=2D dma_unmap_single(lpbfifo->dev, lpbfifo->req->data_dma, lpbfifo->req-=size, DMA_TO_DEVICE);
+ dma_unmap_single(lpbfifo->dev, lpbfifo->data_dma, lpbfifo->req->size, = DMA_TO_DEVICE); else =2D dma_unmap_single(lpbfifo->dev, lpbfifo->req->data_dma, lpbfifo->req-=
size, DMA_FROM_DEVICE);
+ dma_unmap_single(lpbfifo->dev, lpbfifo->data_dma, lpbfifo->req->size, = DMA_FROM_DEVICE); =20 lpbfifo->req =3D NULL; out_be32(&lpbfifo->regs->enable, MPC52xx_SCLPC_ENABLE_RC | MPC52xx_SCLP= C_ENABLE_RF); =2D-=20 1.6.5.5 =2D-=20 Roman Fietze Telemotive AG B=FCro M=FChlhausen Breitwiesen 73347 M=FChlhausen Tel.: +49(0)7335/18493-45 http://www.telemotive.de