]> git.baikalelectronics.ru Git - kernel.git/commit
drm/rockchip: vop: fix iommu page fault when resume
authorMark yao <mark.yao@rock-chips.com>
Mon, 31 Jul 2017 09:49:42 +0000 (17:49 +0800)
committerMark Yao <mark.yao@rock-chips.com>
Fri, 4 Aug 2017 07:38:46 +0000 (15:38 +0800)
commit59f27ab0e5598f0683ad64c2b7ab18accbfffbfb
treecf31e6c380fa80d6806542b4444272e7a90529a7
parentcaec5a446ac1429af3919281fcd519115a0d317f
drm/rockchip: vop: fix iommu page fault when resume

Iommu would get page fault with following path:
   vop_disable:
      1, disable all windows and set vop config done
      2, vop enter to standy, all windows not works, but their registers
         are not clean, when you read window's enable bit, may found the
         window is enable.

   vop_enable:
      1, memcpy(vop->regsbak, vop->regs, len)
         save current vop registers to vop->regsbak, then you can found
         window is enable on regsbak.
      2, VOP_WIN_SET(vop, win, gate, 1);
         force enable window gate, but gate and enable are on same
         hardware register, then window enable bit rewrite to vop hardware.
      3, vop power on, and vop might try to scan destroyed buffer,
         then iommu get page fault.

Move windows disable after vop regsbak restore, then vop regsbak mechanism
would keep tracing the modify, everything would be safe.

Signed-off-by: Mark Yao <mark.yao@rock-chips.com>
Reviewed-by: Sandy huang <sandy.huang@rock-chips.com>
Link: https://patchwork.freedesktop.org/patch/msgid/1501494582-6934-1-git-send-email-mark.yao@rock-chips.com
drivers/gpu/drm/rockchip/rockchip_drm_vop.c