From c7fdd108da84e765fd64bffcd3207a7ae0bcd893 Mon Sep 17 00:00:00 2001 From: Harshdeep Dhatt Date: Thu, 24 Sep 2020 15:35:14 -0600 Subject: [PATCH] msm: kgsl: Enable preemption for hwscheduling enabled devices Send the HFI feature control packet to the GMU in order to enable preemption. Change-Id: Ic00e3943bceb29feb28740dbadd3fb7c6fdc562b Signed-off-by: Harshdeep Dhatt --- drivers/gpu/msm/adreno_a6xx_hwsched.c | 15 ++++++++++----- drivers/gpu/msm/adreno_a6xx_hwsched_hfi.c | 9 ++++++++- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/msm/adreno_a6xx_hwsched.c b/drivers/gpu/msm/adreno_a6xx_hwsched.c index 81d6f8e1a779..185d53386f2c 100644 --- a/drivers/gpu/msm/adreno_a6xx_hwsched.c +++ b/drivers/gpu/msm/adreno_a6xx_hwsched.c @@ -987,18 +987,23 @@ static int a6xx_hwsched_bind(struct device *dev, struct device *master, void *data) { struct kgsl_device *device = dev_get_drvdata(master); + struct adreno_device *adreno_dev = ADRENO_DEVICE(device); int ret; ret = a6xx_gmu_probe(device, to_platform_device(dev)); if (ret) goto error; - ret = a6xx_hwsched_hfi_probe(ADRENO_DEVICE(device)); + ret = a6xx_hwsched_hfi_probe(adreno_dev); + if (ret) + goto error; - if (!ret) { - set_bit(GMU_DISPATCH, &device->gmu_core.flags); - return 0; - } + set_bit(GMU_DISPATCH, &device->gmu_core.flags); + + if (ADRENO_FEATURE(adreno_dev, ADRENO_PREEMPTION)) + set_bit(ADRENO_DEVICE_PREEMPTION, &adreno_dev->priv); + + return 0; error: a6xx_gmu_remove(device); diff --git a/drivers/gpu/msm/adreno_a6xx_hwsched_hfi.c b/drivers/gpu/msm/adreno_a6xx_hwsched_hfi.c index d517ffb03b67..a75c4b388161 100644 --- a/drivers/gpu/msm/adreno_a6xx_hwsched_hfi.c +++ b/drivers/gpu/msm/adreno_a6xx_hwsched_hfi.c @@ -769,7 +769,14 @@ int a6xx_hwsched_hfi_start(struct adreno_device *adreno_dev) ret = a6xx_hfi_send_feature_ctrl(adreno_dev, HFI_FEATURE_KPROF, 1, 0); if (ret) - return ret; + goto err; + + if (adreno_is_preemption_enabled(adreno_dev)) { + ret = a6xx_hfi_send_feature_ctrl(adreno_dev, + HFI_FEATURE_PREEMPTION, 1, 0); + if (ret) + goto err; + } ret = a6xx_hfi_send_core_fw_start(adreno_dev); if (ret)