#
a7790d78 |
| 17-Nov-2017 |
Lucas Stach <l.stach@pengutronix.de> |
drm/etnaviv: move workqueue to be per GPU
While the etnaviv workqueue needs to be ordered, as we rely on work items being executed in queuing order, this is only true for a single GPU. Having a shar
drm/etnaviv: move workqueue to be per GPU
While the etnaviv workqueue needs to be ordered, as we rely on work items being executed in queuing order, this is only true for a single GPU. Having a shared workqueue for all GPUs in the system limits concurrency artificially.
Getting each GPU its own ordered workqueue still meets our ordering expectations and enables retire workers to run concurrently.
Signed-off-by: Lucas Stach <l.stach@pengutronix.de> Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de>
show more ...
|
#
4375ffff |
| 17-Nov-2017 |
Lucas Stach <l.stach@pengutronix.de> |
drm/etnaviv: remove switch_context member from etnaviv_gpu
There is no need to store this in the gpu struct. MMU flushes are triggered correctly in reaction to MMU maps and unmaps, independent of th
drm/etnaviv: remove switch_context member from etnaviv_gpu
There is no need to store this in the gpu struct. MMU flushes are triggered correctly in reaction to MMU maps and unmaps, independent of the current ctx. Any required pipe switches can be infered from the current and the desired GPU exec state.
Signed-off-by: Lucas Stach <l.stach@pengutronix.de> Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de> Reviewed-by: Christian Gmeiner <christian.gmeiner@gmail.com>
show more ...
|
#
fa67ac84 |
| 17-Nov-2017 |
Lucas Stach <l.stach@pengutronix.de> |
drm/etnaviv: don't flush workqueue in etnaviv_gpu_wait_obj_inactive
There is no need to synchronize with oustanding retire jobs if the object has gone idle. Retire jobs only ever change the object s
drm/etnaviv: don't flush workqueue in etnaviv_gpu_wait_obj_inactive
There is no need to synchronize with oustanding retire jobs if the object has gone idle. Retire jobs only ever change the object state from active to idle, not the other way around.
The IOVA put race is uncritical, as the GEM_WAIT ioctl itself is holding a reference to the GEM object, so the retire worker will not pull the object into the CPU domain, which is the thing we are trying to guard against with etnaviv_gpu_wait_obj_inactive. The ordering of the various counts and waits may change a bit, but the userspace visible behavior at the bounds of the syscall are unchanged.
Signed-off-by: Lucas Stach <l.stach@pengutronix.de> Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de>
show more ...
|
#
3057e3f7 |
| 17-Nov-2017 |
Lucas Stach <l.stach@pengutronix.de> |
drm/etnaviv: remove stale TODO in etnaviv_gpu_submit
Flush and prefetch are properly handled in the buffer code, data endianess would need much wider changes than adding something to this single fun
drm/etnaviv: remove stale TODO in etnaviv_gpu_submit
Flush and prefetch are properly handled in the buffer code, data endianess would need much wider changes than adding something to this single function.
Signed-off-by: Lucas Stach <l.stach@pengutronix.de> Reviewed-by: Christian Gmeiner <christian.gmeiner@gmail.com>
show more ...
|
#
b9a48aa7 |
| 19-Oct-2017 |
Lucas Stach <l.stach@pengutronix.de> |
drm/etnaviv: fix GPU vs sync point race
If the FE is restarted before the sync point event is cleared, the GPU might trigger a completion IRQ for the next sync point, corrupting the state of the cur
drm/etnaviv: fix GPU vs sync point race
If the FE is restarted before the sync point event is cleared, the GPU might trigger a completion IRQ for the next sync point, corrupting the state of the currently running worker.
Signed-off-by: Lucas Stach <l.stach@pengutronix.de> Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de> Reviewed-by: Christian Gmeiner <christian.gmeiner@gmail.com>
show more ...
|
#
49b82c38 |
| 01-Dec-2017 |
Philipp Zabel <p.zabel@pengutronix.de> |
drm/etnaviv: make THERMAL selectable
The etnaviv driver causes a link failure if it is built-in but THERMAL is built as a module:
drivers/gpu/drm/etnaviv/etnaviv_gpu.o: In function `etnaviv_gpu_b
drm/etnaviv: make THERMAL selectable
The etnaviv driver causes a link failure if it is built-in but THERMAL is built as a module:
drivers/gpu/drm/etnaviv/etnaviv_gpu.o: In function `etnaviv_gpu_bind': etnaviv_gpu.c:(.text+0x4c4): undefined reference to `thermal_of_cooling_device_register' etnaviv_gpu.c:(.text+0x600): undefined reference to `thermal_cooling_device_unregister' drivers/gpu/drm/etnaviv/etnaviv_gpu.o: In function `etnaviv_gpu_unbind': etnaviv_gpu.c:(.text+0x2aac): undefined reference to `thermal_cooling_device_unregister'
Adding a Kconfig dependency on THERMAL || !THERMAL to avoid this causes a dependency loop on x86_64:
drivers/gpu/drm/tve200/Kconfig:1:error: recursive dependency detected! For a resolution refer to Documentation/kbuild/kconfig-language.txt subsection "Kconfig recursive dependency limitations" drivers/gpu/drm/tve200/Kconfig:1: symbol DRM_TVE200 depends on CMA For a resolution refer to Documentation/kbuild/kconfig-language.txt subsection "Kconfig recursive dependency limitations" mm/Kconfig:489: symbol CMA is selected by DRM_ETNAVIV For a resolution refer to Documentation/kbuild/kconfig-language.txt subsection "Kconfig recursive dependency limitations" drivers/gpu/drm/etnaviv/Kconfig:2: symbol DRM_ETNAVIV depends on THERMAL For a resolution refer to Documentation/kbuild/kconfig-language.txt subsection "Kconfig recursive dependency limitations" drivers/thermal/Kconfig:5: symbol THERMAL is selected by ACPI_VIDEO For a resolution refer to Documentation/kbuild/kconfig-language.txt subsection "Kconfig recursive dependency limitations" drivers/acpi/Kconfig:189: symbol ACPI_VIDEO is selected by BACKLIGHT_CLASS_DEVICE For a resolution refer to Documentation/kbuild/kconfig-language.txt subsection "Kconfig recursive dependency limitations" drivers/video/backlight/Kconfig:158: symbol BACKLIGHT_CLASS_DEVICE is selected by DRM_PARADE_PS8622 For a resolution refer to Documentation/kbuild/kconfig-language.txt subsection "Kconfig recursive dependency limitations" drivers/gpu/drm/bridge/Kconfig:62: symbol DRM_PARADE_PS8622 depends on DRM_BRIDGE For a resolution refer to Documentation/kbuild/kconfig-language.txt subsection "Kconfig recursive dependency limitations" drivers/gpu/drm/bridge/Kconfig:1: symbol DRM_BRIDGE is selected by DRM_TVE200
To work around this, add a new option DRM_ETNAVIV_THERMAL to optionally enable thermal throttling support and make DRM_ETNAVIV select THERMAL at the same time.
Reported-by: Stephen Rothwell <sfr@canb.auug.org.au> Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de> Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
show more ...
|
#
43b70524 |
| 12-Oct-2017 |
Kees Cook <keescook@chromium.org> |
drm/etnaviv: Convert timers to use timer_setup()
In preparation for unconditionally passing the struct timer_list pointer to all timer callbacks, switch to using the new timer_setup() and from_timer
drm/etnaviv: Convert timers to use timer_setup()
In preparation for unconditionally passing the struct timer_list pointer to all timer callbacks, switch to using the new timer_setup() and from_timer() to pass the timer pointer explicitly.
Cc: Lucas Stach <l.stach@pengutronix.de> Cc: Russell King <linux+etnaviv@armlinux.org.uk> Cc: Christian Gmeiner <christian.gmeiner@gmail.com> Cc: David Airlie <airlied@linux.ie> Cc: etnaviv@lists.freedesktop.org Cc: dri-devel@lists.freedesktop.org Signed-off-by: Kees Cook <keescook@chromium.org>
show more ...
|
#
8272170f |
| 09-Oct-2017 |
Philipp Zabel <p.zabel@pengutronix.de> |
drm/etnaviv: remove unnecessary clock stabilization delay
There is no reason to wait for clock stabilization here, as the clock framework guarantees that PLL clock sources are stable before clk_enab
drm/etnaviv: remove unnecessary clock stabilization delay
There is no reason to wait for clock stabilization here, as the clock framework guarantees that PLL clock sources are stable before clk_enable returns.
Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de> Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
show more ...
|
#
40462179 |
| 09-Oct-2017 |
Philipp Zabel <p.zabel@pengutronix.de> |
drm/etnaviv: reduce reset delay
After reset assertion, we only have to wait for the reset signals to propagate through the GPU before deasserting the reset again. A few hundred clock cycles should b
drm/etnaviv: reduce reset delay
After reset assertion, we only have to wait for the reset signals to propagate through the GPU before deasserting the reset again. A few hundred clock cycles should be more than enough. Replace the msleep(1), which can actually take about 30 ms on i.MX6Q in some configurations, with an usleep_range of a few microseconds. If the delay was too short, the FE would not be idle afterwards, and the reset would be retried.
Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de> Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
show more ...
|
Revision tags: v4.13.5 |
|
#
7f9d398c |
| 28-Sep-2017 |
Lucas Stach <l.stach@pengutronix.de> |
drm/etnaviv: remove stale comment
This comment is outdated as the driver is taking care about clock gating and the pulse eater for quite some time already.
Signed-off-by: Lucas Stach <l.stach@pengu
drm/etnaviv: remove stale comment
This comment is outdated as the driver is taking care about clock gating and the pulse eater for quite some time already.
Signed-off-by: Lucas Stach <l.stach@pengutronix.de> Reviewed-by: Christian Gmeiner <christian.gmeiner@gmail.com>
show more ...
|
#
04a7d18d |
| 24-Sep-2017 |
Christian Gmeiner <christian.gmeiner@gmail.com> |
drm/etnaviv: enable debug registers on demand
Some performance register are debug register and they need to be enabled in order to be functional.
Signed-off-by: Christian Gmeiner <christian.gmeiner
drm/etnaviv: enable debug registers on demand
Some performance register are debug register and they need to be enabled in order to be functional.
Signed-off-by: Christian Gmeiner <christian.gmeiner@gmail.com> Reviewed-by: Lucas Stach <l.stach@pengutronix.de> Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
show more ...
|
#
2c8b0c5a |
| 24-Sep-2017 |
Christian Gmeiner <christian.gmeiner@gmail.com> |
drm/etnaviv: need to disable clock gating when doing profiling
As done by Vivante kernel driver.
Signed-off-by: Christian Gmeiner <christian.gmeiner@gmail.com> Reviewed-by: Lucas Stach <l.stach@pen
drm/etnaviv: need to disable clock gating when doing profiling
As done by Vivante kernel driver.
Signed-off-by: Christian Gmeiner <christian.gmeiner@gmail.com> Reviewed-by: Lucas Stach <l.stach@pengutronix.de> Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
show more ...
|
#
68dc0b29 |
| 24-Sep-2017 |
Christian Gmeiner <christian.gmeiner@gmail.com> |
drm/etnaviv: use 'sync points' for performance monitor requests
With 'sync points' we can sample the reqeustes perform signals before and/or after the submited command buffer.
Changes v2 -> v3: - f
drm/etnaviv: use 'sync points' for performance monitor requests
With 'sync points' we can sample the reqeustes perform signals before and/or after the submited command buffer.
Changes v2 -> v3: - fixed indentation and init nr_events to 1
Changes v4 -> v5: - simplify logic around fence handling.
Signed-off-by: Christian Gmeiner <christian.gmeiner@gmail.com> Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
show more ...
|
#
547d340d |
| 24-Sep-2017 |
Christian Gmeiner <christian.gmeiner@gmail.com> |
drm/etnaviv: clear alloced event
Results in less code as the users do not set every struct member to 0/NULL.
Signed-off-by: Christian Gmeiner <christian.gmeiner@gmail.com> Reviewed-by: Lucas Stach
drm/etnaviv: clear alloced event
Results in less code as the users do not set every struct member to 0/NULL.
Signed-off-by: Christian Gmeiner <christian.gmeiner@gmail.com> Reviewed-by: Lucas Stach <l.stach@pengutronix.de> Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
show more ...
|
#
357713ce |
| 24-Sep-2017 |
Christian Gmeiner <christian.gmeiner@gmail.com> |
drm/etnaviv: add 'sync point' support
In order to support performance counters in a sane way we need to provide a method to sync the GPU with the CPU. The GPU can process multpile command buffers/ev
drm/etnaviv: add 'sync point' support
In order to support performance counters in a sane way we need to provide a method to sync the GPU with the CPU. The GPU can process multpile command buffers/events per irq. With the help of a 'sync point' we can trigger an event and stop the GPU/FE immediately. When the CPU is done with is processing it simply needs to restart the FE and the GPU will process the command stream.
Changes from v1 -> v2: - process sync point with a work item to keep irq as fast as possible
Changes from v4 -> v5: - renamed pmrs_* to sync_point_* - call event_free(..) in sync_point_worker(..)
Signed-off-by: Christian Gmeiner <christian.gmeiner@gmail.com> Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
show more ...
|
#
4fc3e66a |
| 24-Sep-2017 |
Christian Gmeiner <christian.gmeiner@gmail.com> |
drm/etnaviv: extend etnaviv_gpu_cmdbuf_new(..) with nr_pmrs
This commits extends etnaviv_gpu_cmdbuf_new(..) to define the number of struct etnaviv_perfmon elements gets used.
Changes from v1 -> v2:
drm/etnaviv: extend etnaviv_gpu_cmdbuf_new(..) with nr_pmrs
This commits extends etnaviv_gpu_cmdbuf_new(..) to define the number of struct etnaviv_perfmon elements gets used.
Changes from v1 -> v2: - make use of goto as requested by Lucas
Signed-off-by: Christian Gmeiner <christian.gmeiner@gmail.com> Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
show more ...
|
#
95a428c1 |
| 24-Sep-2017 |
Christian Gmeiner <christian.gmeiner@gmail.com> |
drm/etnaviv: make it possible to allocate multiple events
This makes it possible to allocate multiple events under the event spinlock. This change is needed to support 'sync'-points.
Changes v2 ->
drm/etnaviv: make it possible to allocate multiple events
This makes it possible to allocate multiple events under the event spinlock. This change is needed to support 'sync'-points.
Changes v2 -> v3: - wait for the completion of all events - use 10sec timeout regardless of the number of events - removed validation if there are enough free events - fixed return value evaluation of event_alloc(..) in etnaviv_gpu_submit(..)
Signed-off-by: Christian Gmeiner <christian.gmeiner@gmail.com> Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
show more ...
|
#
355502e0 |
| 24-Sep-2017 |
Christian Gmeiner <christian.gmeiner@gmail.com> |
drm/etnaviv: use bitmap to keep track of events
This is prep work to be able to allocate multiple events in one go.
Signed-off-by: Christian Gmeiner <christian.gmeiner@gmail.com> Signed-off-by: Luc
drm/etnaviv: use bitmap to keep track of events
This is prep work to be able to allocate multiple events in one go.
Signed-off-by: Christian Gmeiner <christian.gmeiner@gmail.com> Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
show more ...
|
#
6eb3ecc3 |
| 28-Sep-2017 |
Lucas Stach <l.stach@pengutronix.de> |
drm/etnaviv: rework clock initialization
The reset path wants to initialize the clock control register regardless of the DYNAMIC_FREQUENCY_SCALING feature, so don't call clock update, but explicitly
drm/etnaviv: rework clock initialization
The reset path wants to initialize the clock control register regardless of the DYNAMIC_FREQUENCY_SCALING feature, so don't call clock update, but explicitly load the register.
Also disabling of the debug registers is moved into the reset function, so we always get to the same state after a GPU reset. This means the clock update function should not touch the bits already set in the clock control register, but instead only update the scaling bits.
Signed-off-by: Lucas Stach <l.stach@pengutronix.de> Reviewed-by: Christian Gmeiner <christian.gmeiner@gmail.com>
show more ...
|
Revision tags: v4.13 |
|
#
5247e2aa |
| 08-Aug-2017 |
Lucas Stach <l.stach@pengutronix.de> |
drm/etnaviv: don't fail GPU bind when CONFIG_THERMAL isn't enabled
The stub functions returns -ENODEV when trying to register the cooling device, thus failing the GPU bind, rendering the GPU subsyst
drm/etnaviv: don't fail GPU bind when CONFIG_THERMAL isn't enabled
The stub functions returns -ENODEV when trying to register the cooling device, thus failing the GPU bind, rendering the GPU subsystem unusable when CONFIG_THERMAL isn't enabled.
Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
show more ...
|
Revision tags: v4.12, v4.10.17, v4.10.16, v4.10.15, v4.10.14, v4.10.13, v4.10.12, v4.10.11, v4.10.10 |
|
#
d79fd1cc |
| 11-Apr-2017 |
Lucas Stach <l.stach@pengutronix.de> |
drm/etnaviv: implement cooling support for new GPU cores
GPU cores with the DYNAMIC_FREQUENCY_SCALING feature bit set expect the platform to provide the clock scaling and ignore any requests to use
drm/etnaviv: implement cooling support for new GPU cores
GPU cores with the DYNAMIC_FREQUENCY_SCALING feature bit set expect the platform to provide the clock scaling and ignore any requests to use the internal FSCALE divider. Writes to this register still work, but don't have any effect on the GPU clock frequency.
Save the initial core and shader clock frequency and ask the platform to provide a slower clock when cooling is requested.
Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
show more ...
|
Revision tags: v4.10.9, v4.10.8, v4.10.7, v4.10.6, v4.10.5, v4.10.4 |
|
#
7cef6004 |
| 17-Mar-2017 |
Lucas Stach <l.stach@pengutronix.de> |
drm/etnaviv: update MLCG disables with info from newer Vivante driver
PA clock gating can be enabled when the right bugfix bit is present.
There are broken revs of GC4000 and GC2000, which need TX
drm/etnaviv: update MLCG disables with info from newer Vivante driver
PA clock gating can be enabled when the right bugfix bit is present.
There are broken revs of GC4000 and GC2000, which need TX clock gating to be disabled.
Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
show more ...
|
#
45abdf35 |
| 11-Apr-2017 |
Wei Yongjun <weiyongjun1@huawei.com> |
drm/etnaviv: fix missing unlock on error in etnaviv_gpu_submit()
Add the missing unlock before return from function etnaviv_gpu_submit() in the error handling case.
lst: fixed label name.
Fixes: f
drm/etnaviv: fix missing unlock on error in etnaviv_gpu_submit()
Add the missing unlock before return from function etnaviv_gpu_submit() in the error handling case.
lst: fixed label name.
Fixes: f3cd1b064f11 ("drm/etnaviv: (re-)protect fence allocation with GPU mutex") CC: stable@vger.kernel.org #4.9+ Signed-off-by: Wei Yongjun <weiyongjun1@huawei.com> Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
show more ...
|
#
6e2b98cf |
| 22-Mar-2017 |
Lucas Stach <l.stach@pengutronix.de> |
drm/etnaviv: return GPU fence through the submit structure
The next patch will need the complete dma_fence, instead of just the seqno, to create the sync_file in etnaviv_ioctl_gem_submit, in case an
drm/etnaviv: return GPU fence through the submit structure
The next patch will need the complete dma_fence, instead of just the seqno, to create the sync_file in etnaviv_ioctl_gem_submit, in case an out_fence_fd is requested.
The submit needs to hold a reference to the dma_fence, to avoid raceing with the GPU completing the fence.
Signed-off-by: Lucas Stach <l.stach@pengutronix.de> Tested-by: Philipp Zabel <p.zabel@pengutronix.de> --- New patch in v3.
show more ...
|
Revision tags: v4.10.3, v4.10.2 |
|
#
9ad59fea |
| 02-Mar-2017 |
Philipp Zabel <p.zabel@pengutronix.de> |
drm/etnaviv: submit support for in-fences
Loosely based on commit f0a42bb5423a ("drm/msm: submit support for in-fences"). Unfortunately, struct drm_etnaviv_gem_submit doesn't have a flags field yet,
drm/etnaviv: submit support for in-fences
Loosely based on commit f0a42bb5423a ("drm/msm: submit support for in-fences"). Unfortunately, struct drm_etnaviv_gem_submit doesn't have a flags field yet, so we have to extend the structure and trust that drm_ioctl will clear the flags for us if an older userspace only submits part of the struct.
Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.com> Reviewed-by: Sumit Semwal <sumit.semwal@linaro.org> Reviewed-by: Lucas Stach <l.stach@pengutronix.de> Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
show more ...
|