diff options
author | Christian Lütke-Stetzkamp <christian@lkamp.de> | 2018-06-16 17:14:49 +0300 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2018-06-28 15:48:03 +0300 |
commit | 8cfba8ac750d3167128bda34bee7e408f4ae2785 (patch) | |
tree | 37d67273b28d302c4609050bc2afaf017bb8b1d1 /drivers/staging/mt7621-mmc | |
parent | 1668d5fc7b811f13827cf6bf26482dfd2537d34f (diff) | |
download | linux-8cfba8ac750d3167128bda34bee7e408f4ae2785.tar.xz |
staging: mt7621-mmc: Refactor dma setup process
Current code uses two functions for dma setup, msdc_dma_config and
msdc_dma_setup. By now msdc_dma_setup is nearly empty and mainly calls
msdc_dma_config, so the later one can be inline into the first
one. While doing this there is also some refactoring done.
Signed-off-by: Christian Lütke-Stetzkamp <christian@lkamp.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/staging/mt7621-mmc')
-rw-r--r-- | drivers/staging/mt7621-mmc/sd.c | 34 |
1 files changed, 13 insertions, 21 deletions
diff --git a/drivers/staging/mt7621-mmc/sd.c b/drivers/staging/mt7621-mmc/sd.c index 3066fa3799ac..923b0687918d 100644 --- a/drivers/staging/mt7621-mmc/sd.c +++ b/drivers/staging/mt7621-mmc/sd.c @@ -1030,18 +1030,24 @@ static u8 msdc_dma_calcs(u8 *buf, u32 len) return 0xFF - (u8)sum; } -/* gpd bd setup + dma registers */ -static void msdc_dma_config(struct msdc_host *host, struct msdc_dma *dma) +static void msdc_dma_setup(struct msdc_host *host, struct msdc_dma *dma, + struct scatterlist *sg_cmd, unsigned int sglen) { void __iomem *base = host->base; - //u32 i, j, num, bdlen, arg, xfersz; - u32 j, num; struct scatterlist *sg; struct gpd *gpd; struct bd *bd; + u32 j, num; + + BUG_ON(sglen > MAX_BD_NUM); /* not support currently */ + + dma->sg = sg_cmd; + dma->sglen = sglen; + + N_MSG(DMA, "DMA sglen<%d> xfersz<%d>", sglen, host->xfer_size); /* calculate the required number of gpd */ - num = (dma->sglen + MAX_BD_PER_GPD - 1) / MAX_BD_PER_GPD; + num = (sglen + MAX_BD_PER_GPD - 1) / MAX_BD_PER_GPD; BUG_ON(num != 1); gpd = dma->gpd; @@ -1055,13 +1061,13 @@ static void msdc_dma_config(struct msdc_host *host, struct msdc_dma *dma) gpd->chksum = msdc_dma_calcs((u8 *)gpd, 16); /* modify bd*/ - for_each_sg(dma->sg, sg, dma->sglen, j) { + for_each_sg(sg_cmd, sg, sglen, j) { bd[j].blkpad = 0; bd[j].dwpad = 0; bd[j].ptr = (void *)sg_dma_address(sg); bd[j].buflen = sg_dma_len(sg); - if (j == dma->sglen - 1) + if (j == sglen - 1) bd[j].eol = 1; /* the last bd */ else bd[j].eol = 0; @@ -1080,20 +1086,6 @@ static void msdc_dma_config(struct msdc_host *host, struct msdc_dma *dma) N_MSG(DMA, "DMA_CTRL = 0x%x", readl(MSDC_DMA_CTRL)); N_MSG(DMA, "DMA_CFG = 0x%x", readl(MSDC_DMA_CFG)); N_MSG(DMA, "DMA_SA = 0x%x", readl(MSDC_DMA_SA)); - -} - -static void msdc_dma_setup(struct msdc_host *host, struct msdc_dma *dma, - struct scatterlist *sg, unsigned int sglen) -{ - BUG_ON(sglen > MAX_BD_NUM); /* not support currently */ - - dma->sg = sg; - dma->sglen = sglen; - - N_MSG(DMA, "DMA sglen<%d> xfersz<%d>", dma->sglen, host->xfer_size); - - msdc_dma_config(host, dma); } static int msdc_do_request(struct mmc_host *mmc, struct mmc_request *mrq) |