Commit 8ed520ff authored by Krystian Pradzynski's avatar Krystian Pradzynski Committed by Stanislaw Gruszka

accel/ivpu: Move set autosuspend delay to HW specific code

Configure autosuspend values per HW generation and per platform.

For non silicon platforms disable autosuspend for now, for silicon
reduce it to 10 ms.
Signed-off-by: default avatarKrystian Pradzynski <krystian.pradzynski@linux.intel.com>
Reviewed-by: default avatarStanislaw Gruszka <stanislaw.gruszka@linux.intel.com>
Reviewed-by: default avatarJeffrey Hugo <quic_jhugo@quicinc.com>
Signed-off-by: default avatarStanislaw Gruszka <stanislaw.gruszka@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230901094957.168898-2-stanislaw.gruszka@linux.intel.com
parent 38df905b
...@@ -117,6 +117,7 @@ struct ivpu_device { ...@@ -117,6 +117,7 @@ struct ivpu_device {
int jsm; int jsm;
int tdr; int tdr;
int reschedule_suspend; int reschedule_suspend;
int autosuspend;
} timeout; } timeout;
}; };
......
...@@ -113,11 +113,13 @@ static void ivpu_hw_timeouts_init(struct ivpu_device *vdev) ...@@ -113,11 +113,13 @@ static void ivpu_hw_timeouts_init(struct ivpu_device *vdev)
vdev->timeout.jsm = 50000; vdev->timeout.jsm = 50000;
vdev->timeout.tdr = 2000000; vdev->timeout.tdr = 2000000;
vdev->timeout.reschedule_suspend = 1000; vdev->timeout.reschedule_suspend = 1000;
vdev->timeout.autosuspend = -1;
} else { } else {
vdev->timeout.boot = 1000; vdev->timeout.boot = 1000;
vdev->timeout.jsm = 500; vdev->timeout.jsm = 500;
vdev->timeout.tdr = 2000; vdev->timeout.tdr = 2000;
vdev->timeout.reschedule_suspend = 10; vdev->timeout.reschedule_suspend = 10;
vdev->timeout.autosuspend = 10;
} }
} }
......
...@@ -135,16 +135,19 @@ static void ivpu_hw_timeouts_init(struct ivpu_device *vdev) ...@@ -135,16 +135,19 @@ static void ivpu_hw_timeouts_init(struct ivpu_device *vdev)
vdev->timeout.jsm = 50000; vdev->timeout.jsm = 50000;
vdev->timeout.tdr = 2000000; vdev->timeout.tdr = 2000000;
vdev->timeout.reschedule_suspend = 1000; vdev->timeout.reschedule_suspend = 1000;
vdev->timeout.autosuspend = -1;
} else if (ivpu_is_simics(vdev)) { } else if (ivpu_is_simics(vdev)) {
vdev->timeout.boot = 50; vdev->timeout.boot = 50;
vdev->timeout.jsm = 500; vdev->timeout.jsm = 500;
vdev->timeout.tdr = 10000; vdev->timeout.tdr = 10000;
vdev->timeout.reschedule_suspend = 10; vdev->timeout.reschedule_suspend = 10;
vdev->timeout.autosuspend = -1;
} else { } else {
vdev->timeout.boot = 1000; vdev->timeout.boot = 1000;
vdev->timeout.jsm = 500; vdev->timeout.jsm = 500;
vdev->timeout.tdr = 2000; vdev->timeout.tdr = 2000;
vdev->timeout.reschedule_suspend = 10; vdev->timeout.reschedule_suspend = 10;
vdev->timeout.autosuspend = 10;
} }
} }
......
...@@ -286,6 +286,7 @@ int ivpu_pm_init(struct ivpu_device *vdev) ...@@ -286,6 +286,7 @@ int ivpu_pm_init(struct ivpu_device *vdev)
{ {
struct device *dev = vdev->drm.dev; struct device *dev = vdev->drm.dev;
struct ivpu_pm_info *pm = vdev->pm; struct ivpu_pm_info *pm = vdev->pm;
int delay;
pm->vdev = vdev; pm->vdev = vdev;
pm->suspend_reschedule_counter = PM_RESCHEDULE_LIMIT; pm->suspend_reschedule_counter = PM_RESCHEDULE_LIMIT;
...@@ -293,14 +294,15 @@ int ivpu_pm_init(struct ivpu_device *vdev) ...@@ -293,14 +294,15 @@ int ivpu_pm_init(struct ivpu_device *vdev)
atomic_set(&pm->in_reset, 0); atomic_set(&pm->in_reset, 0);
INIT_WORK(&pm->recovery_work, ivpu_pm_recovery_work); INIT_WORK(&pm->recovery_work, ivpu_pm_recovery_work);
pm_runtime_use_autosuspend(dev);
if (ivpu_disable_recovery) if (ivpu_disable_recovery)
pm_runtime_set_autosuspend_delay(dev, -1); delay = -1;
else if (ivpu_is_silicon(vdev))
pm_runtime_set_autosuspend_delay(dev, 100);
else else
pm_runtime_set_autosuspend_delay(dev, 60000); delay = vdev->timeout.autosuspend;
pm_runtime_use_autosuspend(dev);
pm_runtime_set_autosuspend_delay(dev, delay);
ivpu_dbg(vdev, PM, "Autosuspend delay = %d\n", delay);
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment