1. 08 4月, 2017 1 次提交
  2. 07 2月, 2017 1 次提交
  3. 13 1月, 2017 1 次提交
  4. 30 12月, 2016 1 次提交
    • J
      drm/msm: Ensure that the hardware write pointer is valid · 88b333b0
      Jordan Crouse 提交于
      Currently the value written to CP_RB_WPTR is calculated on the fly as
      (rb->next - rb->start). But as the code is designed rb->next is wrapped
      before writing the commands so if a series of commands happened to
      fit perfectly in the ringbuffer, rb->next would end up being equal to
      rb->size / 4 and thus result in an out of bounds address to CP_RB_WPTR.
      
      The easiest way to fix this is to mask WPTR when writing it to the
      hardware; it makes the hardware happy and the rest of the ringbuffer
      math appears to work and there isn't any point in upsetting anything.
      Signed-off-by: NJordan Crouse <jcrouse@codeaurora.org>
      [squash in is_power_of_2() check]
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      88b333b0
  5. 29 11月, 2016 5 次提交
  6. 28 11月, 2016 1 次提交
  7. 16 7月, 2016 2 次提交
  8. 05 6月, 2016 1 次提交
  9. 08 5月, 2016 4 次提交
  10. 04 3月, 2016 3 次提交
  11. 11 2月, 2016 1 次提交
  12. 12 6月, 2015 3 次提交
  13. 15 5月, 2015 1 次提交
    • R
      drm/msm: fix locking inconsistencies in gpu->destroy() · 774449eb
      Rob Clark 提交于
      In error paths, this was being called without struct_mutex held.
      Leading to panics like:
      
        msm 1a00000.qcom,mdss_mdp: No memory protection without IOMMU
        Kernel panic - not syncing: BUG!
        CPU: 0 PID: 1409 Comm: cat Not tainted 4.0.0-dirty #4
        Hardware name: Qualcomm Technologies, Inc. APQ 8016 SBC (DT)
        Call trace:
        [<ffffffc000089c78>] dump_backtrace+0x0/0x118
        [<ffffffc000089da0>] show_stack+0x10/0x20
        [<ffffffc0006686d4>] dump_stack+0x84/0xc4
        [<ffffffc0006678b4>] panic+0xd0/0x210
        [<ffffffc0003e1ce4>] drm_gem_object_free+0x5c/0x60
        [<ffffffc000402870>] adreno_gpu_cleanup+0x60/0x80
        [<ffffffc0004035a0>] a3xx_destroy+0x20/0x70
        [<ffffffc0004036f4>] a3xx_gpu_init+0x84/0x108
        [<ffffffc0004018b8>] adreno_load_gpu+0x58/0x190
        [<ffffffc000419dac>] msm_open+0x74/0x88
        [<ffffffc0003e0a48>] drm_open+0x168/0x400
        [<ffffffc0003e7210>] drm_stub_open+0xa8/0x118
        [<ffffffc0001a0e84>] chrdev_open+0x94/0x198
        [<ffffffc000199f88>] do_dentry_open+0x208/0x310
        [<ffffffc00019a4c4>] vfs_open+0x44/0x50
        [<ffffffc0001aa26c>] do_last.isra.14+0x2c4/0xc10
        [<ffffffc0001aac38>] path_openat+0x80/0x5e8
        [<ffffffc0001ac354>] do_filp_open+0x2c/0x98
        [<ffffffc00019b60c>] do_sys_open+0x13c/0x228
        [<ffffffc00019b72c>] SyS_openat+0xc/0x18
        CPU1: stopping
      
      But there isn't any particularly good reason to hold struct_mutex for
      teardown, so just standardize on calling it without the mutex held and
      use the _unlocked() versions for GEM obj unref'ing
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      774449eb
  14. 17 12月, 2014 1 次提交
  15. 17 11月, 2014 3 次提交
  16. 10 9月, 2014 3 次提交
  17. 04 8月, 2014 2 次提交
    • R
      drm/msm: fix potential deadlock in gpu init · a1ad3523
      Rob Clark 提交于
      Somewhere along the way, the firmware loader sprouted another lock
      dependency, resulting in possible deadlock scenario:
      
       &dev->struct_mutex --> &sb->s_type->i_mutex_key#2 --> &mm->mmap_sem
      
      which is problematic vs things like gem mmap.
      
      So introduce a separate mutex to synchronize gpu init.
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      a1ad3523
    • R
      drm/msm: use upstream iommu · 944fc36c
      Rob Clark 提交于
      Downstream kernel IOMMU had a non-standard way of dealing with multiple
      devices and multiple ports/contexts.  We don't need that on upstream
      kernel, so rip out the crazy.
      
      Note that we have to move the pinning of the ringbuffer to after the
      IOMMU is attached.  No idea how that managed to work properly on the
      downstream kernel.
      
      For now, I am leaving the IOMMU port name stuff in place, to simplify
      things for folks trying to backport latest drm/msm to device kernels.
      Once we no longer have to care about pre-DT kernels, we can drop this
      and instead backport upstream IOMMU driver.
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      944fc36c
  18. 31 3月, 2014 3 次提交
  19. 10 1月, 2014 3 次提交
    • R
      drm/msm: add a330/apq8x74 · 55459968
      Rob Clark 提交于
      Add support for adreno 330.  Not too much different, just a few
      differences in initial configuration plus setting OCMEM base.
      Userspace support is already in upstream mesa.
      
      Note that the existing DT code is simply using the bindings from
      downstream android kernel, to simplify porting of this driver to
      existing devices.  These do not constitute any committed/stable
      DT ABI.  The addition of proper DT bindings will be a subsequent
      patch, at which point (as best as possible) I will try to support
      either upstream bindings or what is found in downstream android
      kernel, so that existing device DT files can be used.
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      55459968
    • R
      drm/msm: add support for non-IOMMU systems · 871d812a
      Rob Clark 提交于
      Add a VRAM carveout that is used for systems which do not have an IOMMU.
      
      The VRAM carveout uses CMA.  The arch code must setup a CMA pool for the
      device (preferrably in highmem.. a 256m-512m VRAM pool in lowmem is not
      cool).  The user can configure the VRAM pool size using msm.vram module
      param.
      
      Technically, the abstraction of IOMMU behind msm_mmu is not strictly
      needed, but it simplifies the GEM code a bit, and will be useful later
      when I add support for a2xx devices with GPUMMU, so I decided to keep
      this part.
      
      It appears to be possible to configure the GPU to restrict access to
      addresses within the VRAM pool, but this is not done yet.  So for now
      the GPU will refuse to load if there is no sort of mmu.  Once address
      based limits are supported and tested to confirm that we aren't giving
      the GPU access to arbitrary memory, this restriction can be lifted
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      871d812a
    • R
      drm/msm: add missing MODULE_FIRMWARE()s · 3b57f23b
      Rob Clark 提交于
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      3b57f23b