summaryrefslogtreecommitdiff
path: root/drivers/char
diff options
context:
space:
mode:
authorAshutosh Patel <ashutoshp@nvidia.com>2013-06-20 16:19:58 +0530
committerDan Willemsen <dwillemsen@nvidia.com>2013-09-14 13:32:06 -0700
commit104f6dac5d16c2fbd6ba00b821a1dbd484bbdaaf (patch)
treee8b32261caf2c54ee36d236f0bebb5a156df0e32 /drivers/char
parent268cf76a7f3f4014afc4ef32a47980f3e087d802 (diff)
efshlp:Corrected remaining pdma size logic
Changes : - Corrected remaining pdma size logic in mmap_dma function bug 1308180 Change-Id: I69331783cb4d0b710c64ac4cd7e74175baa53e41 Reviewed-on: http://git-master/r/239672 Signed-off-by: Ashutosh Patel <ashutoshp@nvidia.com> (cherry picked from commit b3901d71865f4021c67b48055663d122a6f2319f) Reviewed-on: http://git-master/r/249069 Reviewed-by: Automatic_Commit_Validation_User GVS: Gerrit_Virtual_Submit Reviewed-by: Laxman Dewangan <ldewangan@nvidia.com>
Diffstat (limited to 'drivers/char')
-rw-r--r--drivers/char/tegra-efshlp.c44
1 files changed, 18 insertions, 26 deletions
diff --git a/drivers/char/tegra-efshlp.c b/drivers/char/tegra-efshlp.c
index b75b2a634134..1baeb2c8a005 100644
--- a/drivers/char/tegra-efshlp.c
+++ b/drivers/char/tegra-efshlp.c
@@ -138,6 +138,7 @@ static int efs_handle_mmap_dma(struct efshlp_dma *pdma,
unsigned long curaddr, virtaddr, offset;
unsigned int i;
unsigned long kernvirtaddr;
+ long pdma_size = pdma->size;
struct map_info *map;
pr_debug("%s\n", __func__);
@@ -160,49 +161,40 @@ static int efs_handle_mmap_dma(struct efshlp_dma *pdma,
virtaddr = kernvirtaddr;
offset = pdma->offset;
map = get_map_info(pdma->bank);
-
- if (pdma->size >= PAGE_SIZE) {
-
- virtaddr = ((unsigned long)kernvirtaddr +
- PAGE_SIZE) & ~(PAGE_SIZE-1);
+ if (pdma_size >= PAGE_SIZE) {
+ virtaddr = (unsigned long)(kernvirtaddr +
+ (PAGE_SIZE - (kernvirtaddr % PAGE_SIZE)));
tegra_nor_copy_from(map, (void *)(curaddr +
(kernvirtaddr % PAGE_SIZE)), pdma->offset,
PAGE_SIZE - (kernvirtaddr % PAGE_SIZE));
- offset = pdma->offset + PAGE_SIZE - (kernvirtaddr % PAGE_SIZE);
+ pdma_size = pdma_size -
+ (PAGE_SIZE - (kernvirtaddr % PAGE_SIZE));
+ offset = pdma->offset + PAGE_SIZE - (kernvirtaddr % PAGE_SIZE);
}
- for (i = PAGE_SIZE;
- i < (pdma->size-PAGE_SIZE) && pdma->size > PAGE_SIZE;
- i += PAGE_SIZE) {
+ for (i = 0; i < (pdma_size / PAGE_SIZE); i++) {
- curaddr = virtaddr;
- virtaddr += PAGE_SIZE;
- map = get_map_info(pdma->bank);
+ curaddr = virtaddr;
+ virtaddr += PAGE_SIZE;
+ map = get_map_info(pdma->bank);
- tegra_nor_copy_from(map, (void *)curaddr,
- offset, PAGE_SIZE);
+ tegra_nor_copy_from(map, (void *)curaddr,
+ offset, PAGE_SIZE);
+ pdma_size = pdma_size - PAGE_SIZE;
- offset += PAGE_SIZE;
+ offset += PAGE_SIZE;
}
curaddr = virtaddr;
map = get_map_info(pdma->bank);
- if (PAGE_SIZE - (pdma->size % PAGE_SIZE ?
- (pdma->size % PAGE_SIZE) : PAGE_SIZE) > 0
- && pdma->size >= PAGE_SIZE)
-
+ if (pdma_size > 0) {
tegra_nor_copy_from(map, (void *) curaddr, offset,
- PAGE_SIZE - (pdma->size % PAGE_SIZE ?
- (pdma->size % PAGE_SIZE) : PAGE_SIZE));
-
- else
- tegra_nor_copy_from(map, (void *) curaddr,
- offset, pdma->size % PAGE_SIZE);
-
+ pdma_size);
+ }
return pdma->size;
}