1. 07 Apr, 2021 33 commits
  2. 02 Apr, 2021 3 commits
  3. 01 Apr, 2021 2 commits
    • John Stultz's avatar
      drm/msm: Fix removal of valid error case when checking speed_bin · 2b0b219e
      John Stultz authored
      Commit 7bf168c8  ("drm/msm: Fix speed-bin support not to
      access outside valid memory"), reworked the nvmem reading of
      "speed_bin", but in doing so dropped handling of the -ENOENT
      case which was previously documented as "fine".
      
      That change resulted in the db845c board display to fail to
      start, with the following error:
      
      adreno 5000000.gpu: [drm:a6xx_gpu_init] *ERROR* failed to read speed-bin (-2). Some OPPs may not be supported by hardware
      
      Thus, this patch simply re-adds the ENOENT handling so the lack
      of the speed_bin entry isn't fatal for display, and gets things
      working on db845c.
      
      Cc: Rob Clark <robdclark@gmail.com>
      Cc: Sean Paul <sean@poorly.run>
      Cc: Jordan Crouse <jcrouse@codeaurora.org>
      Cc: Eric Anholt <eric@anholt.net>
      Cc: Douglas Anderson <dianders@chromium.org>
      Cc: linux-arm-msm@vger.kernel.org
      Cc: freedreno@lists.freedesktop.org
      Cc: Bjorn Andersson <bjorn.andersson@linaro.org>
      Cc: YongQin Liu <yongqin.liu@linaro.org>
      Reported-by: default avatarYongQin Liu <yongqin.liu@linaro.org>
      Fixes: 7bf168c8  ("drm/msm: Fix speed-bin support not to access outside valid memory")
      Signed-off-by: default avatarJohn Stultz <john.stultz@linaro.org>
      Reviewed-by: default avatarAkhil P Oommen <akhilpo@codeaurora.org>
      Reviewed-by: default avatarDouglas Anderson <dianders@chromium.org>
      Message-Id: <20210330013408.2532048-1-john.stultz@linaro.org>
      Signed-off-by: default avatarRob Clark <robdclark@chromium.org>
      2b0b219e
    • Stephen Boyd's avatar
      drm/msm: Set drvdata to NULL when msm_drm_init() fails · 5620b135
      Stephen Boyd authored
      We should set the platform device's driver data to NULL here so that
      code doesn't assume the struct drm_device pointer is valid when it could
      have been destroyed. The lifetime of this pointer is managed by a kref
      but when msm_drm_init() fails we call drm_dev_put() on the pointer which
      will free the pointer's memory. This driver uses the component model, so
      there's sort of two "probes" in this file, one for the platform device
      i.e. msm_pdev_probe() and one for the component i.e. msm_drm_bind(). The
      msm_drm_bind() code is using the platform device's driver data to store
      struct drm_device so the two functions are intertwined.
      
      This relationship becomes a problem for msm_pdev_shutdown() when it
      tests the NULL-ness of the pointer to see if it should call
      drm_atomic_helper_shutdown(). The NULL test is a proxy check for if the
      pointer has been freed by kref_put(). If the drm_device has been
      destroyed, then we shouldn't call the shutdown helper, and we know that
      is the case if msm_drm_init() failed, therefore set the driver data to
      NULL so that this pointer liveness is tracked properly.
      
      Fixes: 9d5cbf5f ("drm/msm: add shutdown support for display platform_driver")
      Cc: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
      Cc: Fabio Estevam <festevam@gmail.com>
      Cc: Krishna Manikandan <mkrishn@codeaurora.org>
      Signed-off-by: default avatarStephen Boyd <swboyd@chromium.org>
      Message-Id: <20210325212822.3663144-1-swboyd@chromium.org>
      Signed-off-by: default avatarRob Clark <robdclark@chromium.org>
      5620b135
  4. 23 Mar, 2021 1 commit
  5. 21 Mar, 2021 1 commit
    • Fabio Estevam's avatar
      drm/msm: Fix suspend/resume on i.MX5 · a9748134
      Fabio Estevam authored
      When putting iMX5 into suspend, the following flow is
      observed:
      
      [   70.023427] [<c07755f0>] (msm_atomic_commit_tail) from [<c06e7218>]
      (commit_tail+0x9c/0x18c)
      [   70.031890] [<c06e7218>] (commit_tail) from [<c0e2920c>]
      (drm_atomic_helper_commit+0x1a0/0x1d4)
      [   70.040627] [<c0e2920c>] (drm_atomic_helper_commit) from
      [<c06e74d4>] (drm_atomic_helper_disable_all+0x1c4/0x1d4)
      [   70.050913] [<c06e74d4>] (drm_atomic_helper_disable_all) from
      [<c0e2943c>] (drm_atomic_helper_suspend+0xb8/0x170)
      [   70.061198] [<c0e2943c>] (drm_atomic_helper_suspend) from
      [<c06e84bc>] (drm_mode_config_helper_suspend+0x24/0x58)
      
      In the i.MX5 case, priv->kms is not populated (as i.MX5 does not use any
      of the Qualcomm display controllers), causing a NULL pointer
      dereference in msm_atomic_commit_tail():
      
      [   24.268964] 8<--- cut here ---
      [   24.274602] Unable to handle kernel NULL pointer dereference at
      virtual address 00000000
      [   24.283434] pgd = (ptrval)
      [   24.286387] [00000000] *pgd=ca212831
      [   24.290788] Internal error: Oops: 17 [#1] SMP ARM
      [   24.295609] Modules linked in:
      [   24.298777] CPU: 0 PID: 197 Comm: init Not tainted 5.11.0-rc2-next-20210111 #333
      [   24.306276] Hardware name: Freescale i.MX53 (Device Tree Support)
      [   24.312442] PC is at msm_atomic_commit_tail+0x54/0xb9c
      [   24.317743] LR is at commit_tail+0xa4/0x1b0
      
      Fix the problem by calling drm_mode_config_helper_suspend/resume()
      only when priv->kms is available.
      
      Fixes: ca8199f1 ("drm/msm/dpu: ensure device suspend happens during PM sleep")
      Signed-off-by: default avatarFabio Estevam <festevam@gmail.com>
      Signed-off-by: default avatarRob Clark <robdclark@chromium.org>
      a9748134