| From 95898d642c91b96722bcdc6bed0b6e55d42036e6 Mon Sep 17 00:00:00 2001 |
| From: Guennadi Liakhovetski <g.liakhovetski@gmx.de> |
| Date: Tue, 2 Jul 2013 17:37:58 +0200 |
| Subject: DMA: shdma: fix CHCLR register address calculation |
| |
| struct sh_dmae_device::chan_reg is a pointer to u32, therefore when adding |
| offsets to it care should be taken to add offsets in sizeof(u32) units, not |
| in bytes. This patch corrects such a bug. While at it we also remove the |
| redundant parameter of the affected function. |
| |
| Signed-off-by: Guennadi Liakhovetski <g.liakhovetski+renesas@gmail.com> |
| Signed-off-by: Vinod Koul <vinod.koul@intel.com> |
| (cherry picked from commit a28a94e84bca8ba7db66bcc0db1bea51840b08b2) |
| Signed-off-by: Simon Horman <horms+renesas@verge.net.au> |
| --- |
| drivers/dma/sh/shdma.c | 8 ++++---- |
| 1 file changed, 4 insertions(+), 4 deletions(-) |
| |
| diff --git a/drivers/dma/sh/shdma.c b/drivers/dma/sh/shdma.c |
| index b388b12f078e..a5356db54959 100644 |
| --- a/drivers/dma/sh/shdma.c |
| +++ b/drivers/dma/sh/shdma.c |
| @@ -49,12 +49,12 @@ |
| static DEFINE_SPINLOCK(sh_dmae_lock); |
| static LIST_HEAD(sh_dmae_devices); |
| |
| -static void chclr_write(struct sh_dmae_chan *sh_dc, u32 data) |
| +static void channel_clear(struct sh_dmae_chan *sh_dc) |
| { |
| struct sh_dmae_device *shdev = to_sh_dev(sh_dc); |
| |
| - __raw_writel(data, shdev->chan_reg + |
| - shdev->pdata->channel[sh_dc->shdma_chan.id].chclr_offset); |
| + __raw_writel(0, shdev->chan_reg + |
| + shdev->pdata->channel[sh_dc->shdma_chan.id].chclr_offset / sizeof(u32)); |
| } |
| |
| static void sh_dmae_writel(struct sh_dmae_chan *sh_dc, u32 data, u32 reg) |
| @@ -133,7 +133,7 @@ static int sh_dmae_rst(struct sh_dmae_device *shdev) |
| for (i = 0; i < shdev->pdata->channel_num; i++) { |
| struct sh_dmae_chan *sh_chan = shdev->chan[i]; |
| if (sh_chan) |
| - chclr_write(sh_chan, 0); |
| + channel_clear(sh_chan); |
| } |
| } |
| |
| -- |
| 1.8.5.rc3 |
| |