summaryrefslogtreecommitdiffstats
path: root/target/linux/brcm2708/patches-4.4/0467-drm-vc4-Use-runtime-PM-to-power-cycle-the-device-whe.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/brcm2708/patches-4.4/0467-drm-vc4-Use-runtime-PM-to-power-cycle-the-device-whe.patch')
-rw-r--r--target/linux/brcm2708/patches-4.4/0467-drm-vc4-Use-runtime-PM-to-power-cycle-the-device-whe.patch102
1 files changed, 0 insertions, 102 deletions
diff --git a/target/linux/brcm2708/patches-4.4/0467-drm-vc4-Use-runtime-PM-to-power-cycle-the-device-whe.patch b/target/linux/brcm2708/patches-4.4/0467-drm-vc4-Use-runtime-PM-to-power-cycle-the-device-whe.patch
deleted file mode 100644
index 6f288002e9..0000000000
--- a/target/linux/brcm2708/patches-4.4/0467-drm-vc4-Use-runtime-PM-to-power-cycle-the-device-whe.patch
+++ /dev/null
@@ -1,102 +0,0 @@
-From a933cf6cc414d067087f311598e4acd42bc4f6d2 Mon Sep 17 00:00:00 2001
-From: Eric Anholt <eric@anholt.net>
-Date: Mon, 8 Feb 2016 12:59:02 -0800
-Subject: [PATCH] drm/vc4: Use runtime PM to power cycle the device when the
- GPU hangs.
-
-This gets us functional GPU reset again, like we had until a refactor
-at merge time. Tested with a little patch to stuff in a broken binner
-job every 100 frames.
-
-Signed-off-by: Eric Anholt <eric@anholt.net>
-(cherry picked from commit 36cb6253f9383fd9a59ee7b8458c6232ef48577c)
----
- drivers/gpu/drm/vc4/vc4_drv.h | 6 +++++-
- drivers/gpu/drm/vc4/vc4_gem.c | 26 +++++++++++++++++++++-----
- 2 files changed, 26 insertions(+), 6 deletions(-)
-
---- a/drivers/gpu/drm/vc4/vc4_drv.h
-+++ b/drivers/gpu/drm/vc4/vc4_drv.h
-@@ -104,6 +104,11 @@ struct vc4_dev {
- struct vc4_bo *overflow_mem;
- struct work_struct overflow_mem_work;
-
-+ int power_refcount;
-+
-+ /* Mutex controlling the power refcount. */
-+ struct mutex power_lock;
-+
- struct {
- struct timer_list timer;
- struct work_struct reset_work;
-@@ -495,7 +500,6 @@ void vc4_plane_async_set_fb(struct drm_p
- extern struct platform_driver vc4_v3d_driver;
- int vc4_v3d_debugfs_ident(struct seq_file *m, void *unused);
- int vc4_v3d_debugfs_regs(struct seq_file *m, void *unused);
--int vc4_v3d_set_power(struct vc4_dev *vc4, bool on);
-
- /* vc4_validate.c */
- int
---- a/drivers/gpu/drm/vc4/vc4_gem.c
-+++ b/drivers/gpu/drm/vc4/vc4_gem.c
-@@ -261,8 +261,16 @@ vc4_reset(struct drm_device *dev)
- struct vc4_dev *vc4 = to_vc4_dev(dev);
-
- DRM_INFO("Resetting GPU.\n");
-- vc4_v3d_set_power(vc4, false);
-- vc4_v3d_set_power(vc4, true);
-+
-+ mutex_lock(&vc4->power_lock);
-+ if (vc4->power_refcount) {
-+ /* Power the device off and back on the by dropping the
-+ * reference on runtime PM.
-+ */
-+ pm_runtime_put_sync_suspend(&vc4->v3d->pdev->dev);
-+ pm_runtime_get_sync(&vc4->v3d->pdev->dev);
-+ }
-+ mutex_unlock(&vc4->power_lock);
-
- vc4_irq_reset(dev);
-
-@@ -709,7 +717,10 @@ vc4_complete_exec(struct drm_device *dev
- }
- mutex_unlock(&dev->struct_mutex);
-
-- pm_runtime_put(&vc4->v3d->pdev->dev);
-+ mutex_lock(&vc4->power_lock);
-+ if (--vc4->power_refcount == 0)
-+ pm_runtime_put(&vc4->v3d->pdev->dev);
-+ mutex_unlock(&vc4->power_lock);
-
- kfree(exec);
- }
-@@ -851,7 +862,7 @@ vc4_submit_cl_ioctl(struct drm_device *d
- struct vc4_dev *vc4 = to_vc4_dev(dev);
- struct drm_vc4_submit_cl *args = data;
- struct vc4_exec_info *exec;
-- int ret;
-+ int ret = 0;
-
- if ((args->flags & ~VC4_SUBMIT_CL_USE_CLEAR_COLOR) != 0) {
- DRM_ERROR("Unknown flags: 0x%02x\n", args->flags);
-@@ -864,7 +875,10 @@ vc4_submit_cl_ioctl(struct drm_device *d
- return -ENOMEM;
- }
-
-- ret = pm_runtime_get_sync(&vc4->v3d->pdev->dev);
-+ mutex_lock(&vc4->power_lock);
-+ if (vc4->power_refcount++ == 0)
-+ ret = pm_runtime_get_sync(&vc4->v3d->pdev->dev);
-+ mutex_unlock(&vc4->power_lock);
- if (ret < 0) {
- kfree(exec);
- return ret;
-@@ -925,6 +939,8 @@ vc4_gem_init(struct drm_device *dev)
- (unsigned long)dev);
-
- INIT_WORK(&vc4->job_done_work, vc4_job_done_work);
-+
-+ mutex_init(&vc4->power_lock);
- }
-
- void