From 4310e6ac82ee7fd6361ccc0d2705f0f3cc785055 Mon Sep 17 00:00:00 2001 From: Harshdeep Dhatt Date: Wed, 23 Oct 2019 13:46:25 -0700 Subject: [PATCH 1/2] msm: kgsl: Do not call dispatcher functions directly With eCP, we will have a different dispatcher and hence a different function to queue the commands to the eCP dispatcher. Instead of adding the eCP check in kgsl.c, do it in adreno_queue_cmds. On the same lines, we will do eCP check in adreno_drawctxt_sched() to queue the context to the respective dispatcher. Also, move adreno_drawctxt_sched() from adreno_drawctct.c to adreno.c so that we have one less function to export. Change-Id: Ibd6325131ed38b9527cdda084ca37d6c6ceee3bd Signed-off-by: Harshdeep Dhatt --- drivers/gpu/msm/adreno.c | 16 +++++++++++++++- drivers/gpu/msm/adreno_drawctxt.c | 17 +---------------- drivers/gpu/msm/adreno_drawctxt.h | 5 +---- 3 files changed, 17 insertions(+), 21 deletions(-) diff --git a/drivers/gpu/msm/adreno.c b/drivers/gpu/msm/adreno.c index 71ef0f16c64e..3cbeeeac404f 100644 --- a/drivers/gpu/msm/adreno.c +++ b/drivers/gpu/msm/adreno.c @@ -3817,6 +3817,20 @@ static bool adreno_is_hwcg_on(struct kgsl_device *device) return test_bit(ADRENO_HWCG_CTRL, &adreno_dev->pwrctrl_flag); } +static int adreno_queue_cmds(struct kgsl_device_private *dev_priv, + struct kgsl_context *context, struct kgsl_drawobj *drawobj[], + u32 count, u32 *timestamp) +{ + return adreno_dispatcher_queue_cmds(dev_priv, context, drawobj, count, + timestamp); +} + +static void adreno_drawctxt_sched(struct kgsl_device *device, + struct kgsl_context *context) +{ + adreno_dispatcher_queue_context(device, ADRENO_CONTEXT(context)); +} + static const struct kgsl_functable adreno_functable = { /* Mandatory functions */ .regread = adreno_regread, @@ -3832,7 +3846,7 @@ static const struct kgsl_functable adreno_functable = { .getproperty_compat = adreno_getproperty_compat, .waittimestamp = adreno_waittimestamp, .readtimestamp = adreno_readtimestamp, - .queue_cmds = adreno_dispatcher_queue_cmds, + .queue_cmds = adreno_queue_cmds, .ioctl = adreno_ioctl, .compat_ioctl = adreno_compat_ioctl, .power_stats = adreno_power_stats, diff --git a/drivers/gpu/msm/adreno_drawctxt.c b/drivers/gpu/msm/adreno_drawctxt.c index ab9ad91bdea4..dadb85c8f501 100644 --- a/drivers/gpu/msm/adreno_drawctxt.c +++ b/drivers/gpu/msm/adreno_drawctxt.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-only /* - * Copyright (c) 2002,2007-2019, The Linux Foundation. All rights reserved. + * Copyright (c) 2002,2007-2020, The Linux Foundation. All rights reserved. */ #include @@ -420,21 +420,6 @@ adreno_drawctxt_create(struct kgsl_device_private *dev_priv, return &drawctxt->base; } -/** - * adreno_drawctxt_sched() - Schedule a previously blocked context - * @device: pointer to a KGSL device - * @drawctxt: drawctxt to rechedule - * - * This function is called by the core when it knows that a previously blocked - * context has been unblocked. The default adreno response is to reschedule the - * context on the dispatcher - */ -void adreno_drawctxt_sched(struct kgsl_device *device, - struct kgsl_context *context) -{ - adreno_dispatcher_queue_context(device, ADRENO_CONTEXT(context)); -} - /** * adreno_drawctxt_detach(): detach a context from the GPU * @context: Generic KGSL context container for the context diff --git a/drivers/gpu/msm/adreno_drawctxt.h b/drivers/gpu/msm/adreno_drawctxt.h index 8aadaf1ed6c3..72ab2c8c1863 100644 --- a/drivers/gpu/msm/adreno_drawctxt.h +++ b/drivers/gpu/msm/adreno_drawctxt.h @@ -1,6 +1,6 @@ /* SPDX-License-Identifier: GPL-2.0-only */ /* - * Copyright (c) 2002,2007-2019, The Linux Foundation. All rights reserved. + * Copyright (c) 2002,2007-2020, The Linux Foundation. All rights reserved. */ #ifndef __ADRENO_DRAWCTXT_H #define __ADRENO_DRAWCTXT_H @@ -110,9 +110,6 @@ void adreno_drawctxt_detach(struct kgsl_context *context); void adreno_drawctxt_destroy(struct kgsl_context *context); -void adreno_drawctxt_sched(struct kgsl_device *device, - struct kgsl_context *context); - struct adreno_ringbuffer; int adreno_drawctxt_switch(struct adreno_device *adreno_dev, struct adreno_ringbuffer *rb, From 5d8bb9574fb020d548e14aa75f24a71b24f8dc9b Mon Sep 17 00:00:00 2001 From: Harshdeep Dhatt Date: Thu, 23 Jan 2020 11:09:02 -0700 Subject: [PATCH 2/2] msm: kgsl: Set busmon driver data This links the busmon devfreq device to kgsl device which is de-referenced in kgsl_busmon_target() in order to propagate bus votes. Change-Id: I1ac3f81e546e3fd6be6051a202e0d49db07978ee Signed-off-by: Harshdeep Dhatt --- drivers/gpu/msm/kgsl_pwrscale.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/msm/kgsl_pwrscale.c b/drivers/gpu/msm/kgsl_pwrscale.c index 6820fe6a49a0..9c2c6c7ca1c1 100644 --- a/drivers/gpu/msm/kgsl_pwrscale.c +++ b/drivers/gpu/msm/kgsl_pwrscale.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-only /* - * Copyright (c) 2010-2019, The Linux Foundation. All rights reserved. + * Copyright (c) 2010-2020, The Linux Foundation. All rights reserved. */ #include @@ -685,6 +685,7 @@ static void pwrscale_busmon_create(struct kgsl_device *device, dev->parent = &pdev->dev; dev_set_name(dev, "kgsl-busmon"); + dev_set_drvdata(dev, device); if (device_register(dev)) return;