rockchip/rga: rga driver fix compat ptr from u64
authorZikim,Wei <wzq@rock-chips.com>
Wed, 9 Nov 2016 13:01:02 +0000 (21:01 +0800)
committerHuang, Tao <huangtao@rock-chips.com>
Thu, 10 Nov 2016 06:31:48 +0000 (14:31 +0800)
Change-Id: I23cff21aab9af09989b8b2332e7a2ef3ffc8bfb8
Signed-off-by: Zikim,Wei <wzq@rock-chips.com>
drivers/gpu/drm/rockchip/rockchip_drm_rga.c

index 2e0944ecb02c4c90f9097c554e85821fe14aad60..9b89430e81c1c2a7aa48514eb840f979a1263343 100644 (file)
 #define RGA_MMU_SRC1_BASE              0x0174
 #define RGA_MMU_DST_BASE               0x0178
 
 #define RGA_MMU_SRC1_BASE              0x0174
 #define RGA_MMU_DST_BASE               0x0178
 
+static void __user *rga_compat_ptr(u64 value)
+{
+#ifdef CONFIG_ARM64
+       return (void __user *)(value);
+#else
+       return (void __user *)((u32)(value));
+#endif
+}
+
 static void rga_dma_flush_range(void *ptr, int size)
 {
 #ifdef CONFIG_ARM
 static void rga_dma_flush_range(void *ptr, int size)
 {
 #ifdef CONFIG_ARM
@@ -550,13 +559,13 @@ int rockchip_rga_set_cmdlist_ioctl(struct drm_device *drm_dev, void *data,
         * command have two integer, one for register offset, another for
         * register value.
         */
         * command have two integer, one for register offset, another for
         * register value.
         */
-       if (copy_from_user(cmdlist->data, (void __user *)req->cmd,
+       if (copy_from_user(cmdlist->data, rga_compat_ptr(req->cmd),
                           sizeof(struct drm_rockchip_rga_cmd) * req->cmd_nr))
                return -EFAULT;
        cmdlist->last += req->cmd_nr * 2;
 
        if (copy_from_user(&cmdlist->data[cmdlist->last],
                           sizeof(struct drm_rockchip_rga_cmd) * req->cmd_nr))
                return -EFAULT;
        cmdlist->last += req->cmd_nr * 2;
 
        if (copy_from_user(&cmdlist->data[cmdlist->last],
-                          (void __user *)req->cmd_buf,
+                          rga_compat_ptr(req->cmd_buf),
                           sizeof(struct drm_rockchip_rga_cmd) * req->cmd_buf_nr))
                return -EFAULT;
        cmdlist->last += req->cmd_buf_nr * 2;
                           sizeof(struct drm_rockchip_rga_cmd) * req->cmd_buf_nr))
                return -EFAULT;
        cmdlist->last += req->cmd_buf_nr * 2;