summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/soc/qcom/spcom.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/drivers/soc/qcom/spcom.c b/drivers/soc/qcom/spcom.c
index 24c8d911ef17..584936c3910d 100644
--- a/drivers/soc/qcom/spcom.c
+++ b/drivers/soc/qcom/spcom.c
@@ -1372,11 +1372,12 @@ static int modify_ion_addr(void *buf,
size_t len;
int fd;
uint32_t buf_offset;
- uint64_t *addr;
+ char *ptr = (char *)buf;
int ret;
fd = ion_info.fd;
buf_offset = ion_info.buf_offset;
+ ptr += buf_offset;
if (fd < 0) {
pr_err("invalid fd [%d].\n", fd);
@@ -1403,13 +1404,14 @@ static int modify_ion_addr(void *buf,
ion_free(spcom_dev->ion_client, handle);
return -EINVAL;
}
- pr_debug("buf_offset [%d].\n", buf_offset);
- addr = (uint64_t *) ((char *) buf + buf_offset);
+ if (buf_offset % sizeof(uint64_t))
+ pr_debug("offset [%d] is NOT 64-bit aligned.\n", buf_offset);
+ else
+ pr_debug("offset [%d] is 64-bit aligned.\n", buf_offset);
- /* Replace the user ION Virtual Address with the Physical Address */
- pr_debug("ion user vaddr = [0x%lx].\n", (long int) *addr);
- *addr = (uint64_t) ion_phys_addr;
- pr_debug("ion phys addr = [0x%lx].\n", (long int) *addr);
+ /* Set the ION Physical Address at the buffer offset */
+ pr_debug("ion phys addr = [0x%lx].\n", (long int) ion_phys_addr);
+ memcpy(ptr, &ion_phys_addr, sizeof(uint64_t));
/* Release the ION handle */
ion_free(spcom_dev->ion_client, handle);