[Freedreno] [PATCH v2 3/3] dt-bindings: drm/msm/gpu: Add cooling device support

2020-10-19 Thread Akhil P Oommen
Add cooling device support to gpu. A cooling device is bound to a thermal zone to allow thermal mitigation. Signed-off-by: Akhil P Oommen --- Documentation/devicetree/bindings/display/msm/gpu.txt | 7 +++ 1 file changed, 7 insertions(+) diff --git a/Documentation/devicetree/bindings/display

[Freedreno] [PATCH v2 1/3] drm/msm: Add support for GPU cooling

2020-10-19 Thread Akhil P Oommen
Register GPU as a devfreq cooling device so that it can be passively cooled by the thermal framework. Signed-off-by: Akhil P Oommen --- Changes in v2: 1. Update the dt bindings documentation drivers/gpu/drm/msm/msm_gpu.c | 12 drivers/gpu/drm/msm/msm_gpu.h | 2 ++ 2 files

[Freedreno] [PATCH v2 2/3] arm64: dts: qcom: sc7180: Add gpu cooling support

2020-10-19 Thread Akhil P Oommen
Add cooling-cells property and the cooling maps for the gpu tzones to support GPU cooling. Signed-off-by: Akhil P Oommen --- The thermal policy should be set as 'step_wise' for gpu tzones from the userspace during boot up. arch/arm64/boot/dts/qcom/sc7180.dtsi | 30 +++---

[Freedreno] [PATCH 2/2] drm/msm: Fix duplicate gpu node in icc summary

2020-10-19 Thread Akhil P Oommen
On targets with a6xx gpu, there is a duplicate gpu icc node listed in the interconnect summary. On these targets, calling dev_pm_opp_of_add_table() api initializes the icc nodes for gpu indirectly. So we should avoid using of_icc_get() api in the common probe path. To fix this, we can move of_icc_g

[Freedreno] [PATCH 1/2] drm/msm: Implement shutdown callback for adreno

2020-10-19 Thread Akhil P Oommen
Implement the shutdown callback for adreno gpu platform device to safely shutdown it before a system reboot. This helps to avoid futher transactions from gpu after the smmu is moved to bypass mode. Signed-off-by: Akhil P Oommen --- drivers/gpu/drm/msm/adreno/adreno_device.c | 6 ++ 1 file ch

Re: [Freedreno] [PATCH] drm/msm: Remove redundant null check

2020-10-19 Thread Jordan Crouse
On Mon, Oct 19, 2020 at 02:04:22PM +0800, Tian Tao wrote: > clk_prepare_enable() and clk_disable_unprepare() will check > NULL clock parameter, so It is not necessary to add additional checks. Reviewed-by: Jordan Crouse > Signed-off-by: Tian Tao > --- > drivers/gpu/drm/msm/msm_gpu.c | 7 ++

Re: [Freedreno] [PATCH 2/2] drm/msm: Fix duplicate gpu node in icc summary

2020-10-19 Thread Jordan Crouse
On Mon, Oct 19, 2020 at 06:49:18PM +0530, Akhil P Oommen wrote: > On targets with a6xx gpu, there is a duplicate gpu icc node listed in > the interconnect summary. On these targets, calling This first sentence is confusing to me. I think the following few sentences do a better job of explaining wh

[Freedreno] [PATCH v3 06/23] drm/msm/gem: Move locking in shrinker path

2020-10-19 Thread Rob Clark
From: Rob Clark Move grabbing the bo lock into shrinker, with a msm_gem_trylock() to skip over bo's that are already locked. This gets rid of the nested lock classes. Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/msm_gem.c | 24 + drivers/gpu/drm/msm/msm_gem.h

[Freedreno] [PATCH v3 04/23] drm/msm/gem: Move prototypes to msm_gem.h

2020-10-19 Thread Rob Clark
From: Rob Clark Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/disp/mdp4/mdp4_crtc.c | 1 + drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c | 1 + drivers/gpu/drm/msm/dsi/dsi_host.c| 1 + drivers/gpu/drm/msm/msm_drv.h | 54 -- drivers/gpu/drm/msm/msm_fbdev

[Freedreno] [PATCH v3 05/23] drm/msm/gem: Add some _locked() helpers

2020-10-19 Thread Rob Clark
From: Rob Clark When we cut-over to using dma_resv_lock/etc instead of msm_obj->lock, we'll need these for the submit path (where resv->lock is already held). Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/msm_gem.c | 89 +++ drivers/gpu/drm/msm/msm_gem.h | 6

[Freedreno] [PATCH v3 10/23] drm/msm: Use correct drm_gem_object_put() in fail case

2020-10-19 Thread Rob Clark
From: Rob Clark We only want to use the _unlocked() variant in the unlocked case. Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/msm_gem.c | 6 +- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/msm/msm_gem.c b/drivers/gpu/drm/msm/msm_gem.c index 6abcf9fe480d

[Freedreno] [PATCH v3 01/23] drm/msm: Fix a couple incorrect usages of get_vaddr_active()

2020-10-19 Thread Rob Clark
From: Rob Clark The microcode bo's should never be madvise(WONTNEED), so these should not be using msm_gem_get_vaddr_active(). Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/adreno/a5xx_gpu.c | 2 +- drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(

[Freedreno] [PATCH v3 09/23] drm/msm/gem: Switch over to obj->resv for locking

2020-10-19 Thread Rob Clark
From: Rob Clark This also converts the special msm_gem_get_vaddr_active() to expect the lock to already be held. There are two call-sites for this, one already has the lock held, so it is more straightforward to just open-code the locking for the other caller. Signed-off-by: Rob Clark --- dri

[Freedreno] [PATCH v3 00/23] drm/msm: de-struct_mutex-ification

2020-10-19 Thread Rob Clark
From: Rob Clark This doesn't remove *all* the struct_mutex, but it covers the worst of it, ie. shrinker/madvise/free/retire. The submit path still uses struct_mutex, but it still needs *something* serialize a portion of the submit path, and lock_stat mostly just shows the lock contention there b

[Freedreno] [PATCH v3 03/23] drm/msm/gem: Rename internal get_iova_locked helper

2020-10-19 Thread Rob Clark
From: Rob Clark We'll need to introduce a _locked() version of msm_gem_get_iova(), so we need to make that name available. Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/msm_gem.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/msm/msm_gem.c b/driver

[Freedreno] [PATCH v3 12/23] drm/msm: Move update_fences()

2020-10-19 Thread Rob Clark
From: Rob Clark Small cleanup, update_fences() is used in the hangcheck path, but also in the normal retire path. Signed-off-by: Rob Clark Reviewed-by: Jordan Crouse --- drivers/gpu/drm/msm/msm_gpu.c | 28 ++-- 1 file changed, 14 insertions(+), 14 deletions(-) diff --

[Freedreno] [PATCH v3 02/23] drm/msm/gem: Add obj->lock wrappers

2020-10-19 Thread Rob Clark
From: Rob Clark This will make it easier to transition over to obj->resv locking for everything that is per-bo locking. Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/msm_gem.c | 99 --- drivers/gpu/drm/msm/msm_gem.h | 28 ++ 2 files changed, 74 insert

[Freedreno] [PATCH v3 11/23] drm/msm: Drop chatty trace

2020-10-19 Thread Rob Clark
From: Rob Clark It is somewhat redundant with the gpu tracepoints, and anyways not too useful to justify spamming the log when debug traces are enabled. Signed-off-by: Rob Clark Reviewed-by: Jordan Crouse --- drivers/gpu/drm/msm/msm_gpu.c | 1 - 1 file changed, 1 deletion(-) diff --git a/dri

[Freedreno] [PATCH v3 08/23] drm/msm: Do rpm get sooner in the submit path

2020-10-19 Thread Rob Clark
From: Rob Clark Unfortunately, due to an dev_pm_opp locking interaction with mm->mmap_sem, we need to do pm get before aquiring obj locks, otherwise we can have anger lockdep with the chain: opp_table_lock --> &mm->mmap_sem --> reservation_ww_class_mutex For an explicit fencing userspace, the

[Freedreno] [PATCH v3 07/23] drm/msm/submit: Move copy_from_user ahead of locking bos

2020-10-19 Thread Rob Clark
From: Rob Clark We cannot switch to using obj->resv for locking without first moving all the copy_from_user() ahead of submit_lock_objects(). Otherwise in the mm fault path we aquire mm->mmap_sem before obj lock, but in the submit path the order is reversed. Signed-off-by: Rob Clark --- drive

[Freedreno] [PATCH v3 21/23] drm/msm: Drop struct_mutex in madvise path

2020-10-19 Thread Rob Clark
From: Rob Clark The obj->lock is sufficient for what we need. This *does* have the implication that userspace can try to shoot themselves in the foot by racing madvise(DONTNEED) with submit. But the result will be about the same if they did madvise(DONTNEED) before the submit ioctl, ie. they mi

[Freedreno] [PATCH v3 20/23] drm/msm: Remove msm_gem_free_work

2020-10-19 Thread Rob Clark
From: Rob Clark Now that we don't need struct_mutex in the free path, we can get rid of the asynchronous free altogether. Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/msm_drv.c | 3 --- drivers/gpu/drm/msm/msm_drv.h | 5 - drivers/gpu/drm/msm/msm_gem.c | 27 --

[Freedreno] [PATCH v3 19/23] drm/msm: Drop struct_mutex in free_object() path

2020-10-19 Thread Rob Clark
From: Rob Clark Now that active_list/inactive_list is protected by mm_lock, we no longer need dev->struct_mutex in the free_object() path. Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/msm_gem.c | 8 1 file changed, 8 deletions(-) diff --git a/drivers/gpu/drm/msm/msm_gem.c b/drive

[Freedreno] [PATCH v3 23/23] drm/msm: Don't implicit-sync if only a single ring

2020-10-19 Thread Rob Clark
From: Rob Clark If there is only a single ring (no-preemption), everything is FIFO order and there is no need to implicit-sync. Mesa should probably just always use MSM_SUBMIT_NO_IMPLICIT, as behavior is undefined when fences are not used to synchronize buffer usage across contexts (which is the

[Freedreno] [PATCH v3 17/23] drm/msm: Remove obj->gpu

2020-10-19 Thread Rob Clark
From: Rob Clark It cannot be atomically updated with obj->active_count, and the only purpose is a useless WARN_ON() (which becomes a buggy WARN_ON() once retire_submits() is not serialized with incoming submits via struct_mutex) Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/msm_gem.c | 2 --

[Freedreno] [PATCH v3 15/23] drm/msm: Protect ring->submits with it's own lock

2020-10-19 Thread Rob Clark
From: Rob Clark One less place to rely on dev->struct_mutex. Signed-off-by: Rob Clark Reviewed-by: Jordan Crouse --- drivers/gpu/drm/msm/msm_gem_submit.c | 2 ++ drivers/gpu/drm/msm/msm_gpu.c| 37 ++-- drivers/gpu/drm/msm/msm_ringbuffer.c | 1 + drivers/gpu/d

[Freedreno] [PATCH v3 13/23] drm/msm: Add priv->mm_lock to protect active/inactive lists

2020-10-19 Thread Rob Clark
From: Rob Clark Rather than relying on the big dev->struct_mutex hammer, introduce a more specific lock for protecting the bo lists. Signed-off-by: Rob Clark Reviewed-by: Jordan Crouse --- drivers/gpu/drm/msm/msm_debugfs.c | 7 +++ drivers/gpu/drm/msm/msm_drv.c | 7 +++

[Freedreno] [PATCH v3 14/23] drm/msm: Document and rename preempt_lock

2020-10-19 Thread Rob Clark
From: Rob Clark Before adding another lock, give ring->lock a more descriptive name. Signed-off-by: Rob Clark Reviewed-by: Jordan Crouse --- drivers/gpu/drm/msm/adreno/a5xx_gpu.c | 4 ++-- drivers/gpu/drm/msm/adreno/a5xx_preempt.c | 12 ++-- drivers/gpu/drm/msm/adreno/a6xx_gpu.c

[Freedreno] [PATCH v3 18/23] drm/msm: Drop struct_mutex from the retire path

2020-10-19 Thread Rob Clark
From: Rob Clark Now that we are not relying on dev->struct_mutex to protect the ring->submits lists, drop the struct_mutex lock. Signed-off-by: Rob Clark Reviewed-by: Jordan Crouse --- drivers/gpu/drm/msm/msm_gpu.c | 8 +--- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/dri

[Freedreno] [PATCH v3 22/23] drm/msm: Drop struct_mutex in shrinker path

2020-10-19 Thread Rob Clark
From: Rob Clark Now that the inactive_list is protected by mm_lock, and everything else on per-obj basis is protected by obj->lock, we no longer depend on struct_mutex. Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/msm_gem.c | 1 - drivers/gpu/drm/msm/msm_gem_shrinker.c | 54 -

[Freedreno] [PATCH v3 16/23] drm/msm: Refcount submits

2020-10-19 Thread Rob Clark
From: Rob Clark Before we remove dev->struct_mutex from the retire path, we have to deal with the situation of a submit retiring before the submit ioctl returns. To deal with this, ring->submits will hold a reference to the submit, which is dropped when the submit is retired. And the submit ioc

[Freedreno] [PATCH 1/3] drm/msm/gpu: Convert retire/recover work to kthread_worker

2020-10-19 Thread Rob Clark
From: Rob Clark Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/adreno/a5xx_gpu.c | 3 +-- drivers/gpu/drm/msm/adreno/a5xx_preempt.c | 6 ++--- drivers/gpu/drm/msm/adreno/a6xx_gmu.c | 4 +-- drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 4 +-- drivers/gpu/drm/msm/msm_gpu.c

[Freedreno] [PATCH 0/3] drm/msm: kthread_worker conversion

2020-10-19 Thread Rob Clark
From: Rob Clark In particular, converting the async atomic commit (for cursor updates, etc) to SCHED_FIFO kthread_worker helps with some cases where we wouldn't manage to flush the updates within the 1ms-before-vblank deadline resulting in fps drops when there is cursor movement. Rob Clark (3):

[Freedreno] [PATCH 3/3] drm/msm/atomic: Convert to per-CRTC kthread_work

2020-10-19 Thread Rob Clark
From: Rob Clark Use a SCHED_FIFO kthread_worker for async atomic commits. We have a hard deadline if we don't want to miss a frame. Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/msm_atomic.c | 25 - drivers/gpu/drm/msm/msm_drv.h| 3 ++- drivers/gpu/drm/msm/msm_

[Freedreno] [PATCH 2/3] drm/msm/kms: Update msm_kms_init/destroy

2020-10-19 Thread Rob Clark
From: Rob Clark Add msm_kms_destroy() and add err return from msm_kms_init(). Prep work for next patch. Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 8 +++- drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c | 8 +++- drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c | 11 ++