On Thu, 11 Nov 2010, Guennadi Liakhovetski wrote:
> Currently shdma only works, if it manages to allocate DMA descriptors for all
> sg elements during the prepare stage. Allocation is carried out from a
> static pool of 32 DMA descriptors. This is not enough for, e.g., MMC, where up
> to 61 sg elements can be sent at once. Ideally we should be able to reuse
> descriptors, while processing one request, but for now increase their number
> to 64.
>
> Signed-off-by: Guennadi Liakhovetski <[email protected]>
> ---
> drivers/dma/shdma.c | 3 ++-
> 1 files changed, 2 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/dma/shdma.c b/drivers/dma/shdma.c
> index eb6b54d..85dd0ad 100644
> --- a/drivers/dma/shdma.c
> +++ b/drivers/dma/shdma.c
> @@ -39,7 +39,7 @@ enum sh_dmae_desc_status {
> DESC_WAITING, /* callback called, waiting for ack / re-submit */
> };
>
> -#define NR_DESCS_PER_CHANNEL 32
> +#define NR_DESCS_PER_CHANNEL 64
Hm, I think, there's also an alternative solution to this. In
sh_mmcif.c::sh_mmcif_probe() we find:
mmc->max_segs = 128;
mmc->max_blk_size = 512;
mmc->max_blk_count = 65535;
mmc->max_req_size = mmc->max_blk_size * mmc->max_blk_count;
mmc->max_seg_size = mmc->max_req_size;
So, I think, it's the .max_segs value, that allows the block and mmc
layers to issue requests with 61 sg elements, and, possibly, even more.
So, maybe we can reduce this number to 32? Besides, I don't think
"->max_blk_count = 65535" makes much sense. From the header:
unsigned int max_blk_count; /* maximum number of blocks in
one req */
for which 65535 seems "a bit" too high. Shall we not set it the same way
as in my today's patch for tmio_mmc as
mmc->max_blk_count = PAGE_CACHE_SIZE / mmc->max_blk_size *
mmc->max_segs;
? Then we can leave the number of descriptors in shdma.c as is. Paul, what
would you prefer?
> /* Default MEMCPY transfer size = 2^2 = 4 bytes */
> #define LOG2_DEFAULT_XFER_SIZE 2
>
> @@ -1213,3 +1213,4 @@ module_exit(sh_dmae_exit);
> MODULE_AUTHOR("Nobuhiro Iwamatsu <[email protected]>");
> MODULE_DESCRIPTION("Renesas SH DMA Engine driver");
> MODULE_LICENSE("GPL");
> +MODULE_ALIAS("platform:sh-dma-engine");
> --
> 1.7.2.3
Thanks
Guennadi
---
Guennadi Liakhovetski, Ph.D.
Freelance Open-Source Software Developer
http://www.open-technology.de/
--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html