[Openpvrsgx-devgroup] [PATCH] drm: pvrsgx: Force enable limited runtime PM support for ddk 1.17
Tony Lindgren
tony at atomide.com
Sun Dec 13 08:48:14 CET 2020
We want to have the sgx clock disabled when the screen blanks for power
management. For ddk-1.17, the option for SUPPORT_ACTIVE_POWER_MANAGEMENT
has been disabled as it was probably enabling more PM than just gating the
clock when blanking the screen for the userspace blobs.
To gate the sgx clock on screen blank, we need to enable the option for
SUPPORT_ACTIVE_POWER_MANAGEMENT for the kernel driver, but not advertise
it for the userspace blobs. Otherwise we get:
PVR_K: Extra options present in KM: (0x8000). Please check sgx_options.h
We also need SYS_USING_INTERRUPTS as otherwise sgx won't get idled if we
have SUPPORT_ACTIVE_POWER_MANAGEMENT enabled.
This seems to work just fine for PM as tested on droid4 with sway running
after some experimental wlroots patches. Then hopefully eventually we can
just have the option enabled for SUPPORT_ACTIVE_POWER_MANAGEMENT for all
the SoCs and blobs.
Cc: David Shah <dave at ds0.me>
Cc: Ivaylo Dimitrov <ivo.g.dimitrov.75 at gmail.com>
Cc: Jonathan Bakker <xc-racer2 at live.ca>
Cc: Merlijn Wajer <merlijn at wizzup.org>
Cc: Sebastian Reichel <sre at kernel.org>
Cc: ruleh <ruleh at gmx.de>
Cc: Carl Philipp Klemm <philipp at uvos.xyz>
Signed-off-by: Tony Lindgren <tony at atomide.com>
---
.../drm/pvrsgx/1.17.4948957/eurasia_km/Makefile | 6 +++---
.../eurasia_km/include4/sgx_options.h | 9 +--------
.../services4/system/omap/sysutils_linux.c | 15 ++-------------
3 files changed, 6 insertions(+), 24 deletions(-)
diff --git a/drivers/gpu/drm/pvrsgx/1.17.4948957/eurasia_km/Makefile b/drivers/gpu/drm/pvrsgx/1.17.4948957/eurasia_km/Makefile
--- a/drivers/gpu/drm/pvrsgx/1.17.4948957/eurasia_km/Makefile
+++ b/drivers/gpu/drm/pvrsgx/1.17.4948957/eurasia_km/Makefile
@@ -127,7 +127,9 @@ ccflags-y += \
-DSYS_CUSTOM_POWERLOCK_WRAP \
-DPVR_NO_FULL_CACHE_OPS \
-DSGX_CLK_CORE_DIV5 \
- -DSUPPORT_SGX_NEW_STATUS_VALS
+ -DSUPPORT_SGX_NEW_STATUS_VALS \
+ -DSYS_USING_INTERRUPTS \
+ -DSUPPORT_ACTIVE_POWER_MANAGEMENT
# new for ddk 1.14 tree
ccflags-y += \
@@ -216,7 +218,6 @@ ccflags-y += -DSGX_FEATURE_MP_CORE_COUNT=2
ccflags-y += -DSGX_FEATURE_SYSTEM_CACHE # assumed by client libs
ccflags-n += -DSYS_OMAP_HAS_DVFS_FRAMEWORK # sgxfreq extension
# may be broken...
-#ccflags-y += -DSUPPORT_ACTIVE_POWER_MANAGEMENT
ccflags-y += -DAMVERSION=5
# PVR_OMAPLFB_DRM_FB := 0
endif
@@ -236,7 +237,6 @@ ccflags-y += -DMODULE # this disables some code in AcquireGPTimer in sysutils_li
ccflags-y += -DSUPPORT_DMABUF
# these must not be set or we can't compile successfully for omap
-ccflags-n += -DSYS_USING_INTERRUPTS # should probably be enabled but leads to paging errors, asynchronous external abort
ccflags-n += -DSUPPORT_DRI_DRM_EXT
ccflags-n += -DSUPPORT_DRI_DRM_PLUGIN
ccflags-n += -DPVR_DISPLAY_CONTROLLER_DRM_IOCTL
diff --git a/drivers/gpu/drm/pvrsgx/1.17.4948957/eurasia_km/include4/sgx_options.h b/drivers/gpu/drm/pvrsgx/1.17.4948957/eurasia_km/include4/sgx_options.h
--- a/drivers/gpu/drm/pvrsgx/1.17.4948957/eurasia_km/include4/sgx_options.h
+++ b/drivers/gpu/drm/pvrsgx/1.17.4948957/eurasia_km/include4/sgx_options.h
@@ -148,14 +148,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#define OPTIONS_BIT14 0x0
#endif /* SGX_SUPPORT_HWPROFILING */
-
-
-#if defined(SUPPORT_ACTIVE_POWER_MANAGEMENT) || defined (INTERNAL_TEST)
-#define SUPPORT_ACTIVE_POWER_MANAGEMENT_SET_OFFSET OPTIONS_BIT15
-#define OPTIONS_BIT15 (0x1U << 15)
-#else
-#define OPTIONS_BIT15 0x0
-#endif /* SUPPORT_ACTIVE_POWER_MANAGEMENT */
+#define OPTIONS_BIT15 0x0 /* HACK: missing userspace flag */
#if defined(SUPPORT_DISPLAYCONTROLLER_TILING) || defined (INTERNAL_TEST)
#define SUPPORT_DISPLAYCONTROLLER_TILING_SET_OFFSET OPTIONS_BIT16
diff --git a/drivers/gpu/drm/pvrsgx/1.17.4948957/eurasia_km/services4/system/omap/sysutils_linux.c b/drivers/gpu/drm/pvrsgx/1.17.4948957/eurasia_km/services4/system/omap/sysutils_linux.c
--- a/drivers/gpu/drm/pvrsgx/1.17.4948957/eurasia_km/services4/system/omap/sysutils_linux.c
+++ b/drivers/gpu/drm/pvrsgx/1.17.4948957/eurasia_km/services4/system/omap/sysutils_linux.c
@@ -260,13 +260,8 @@ IMG_VOID DisableSGXClocks(SYS_DATA *psSysData)
SysDisableSGXInterrupts(psSysData);
#if defined(LDM_PLATFORM) && !defined(PVR_DRI_DRM_NOT_PCI)
- {
- int res = pm_runtime_put_sync(&gpsPVRLDMDev->dev);
- if (res < 0)
- {
- PVR_DPF((PVR_DBG_ERROR, "DisableSGXClocks: pm_runtime_put_sync failed (%d)", -res));
- }
- }
+ pm_runtime_mark_last_busy(&gpsPVRLDMDev->dev);
+ pm_runtime_put_autosuspend(&gpsPVRLDMDev->dev);
#if defined(SYS_OMAP_HAS_DVFS_FRAMEWORK)
sgxfreq_notif_sgx_clk_off();
#endif /* defined(SYS_OMAP_HAS_DVFS_FRAMEWORK) */
@@ -640,17 +635,11 @@ IMG_VOID DisableSystemClocks(SYS_DATA *psSysData)
PVRSRV_ERROR SysPMRuntimeRegister(void)
{
-#if defined(LDM_PLATFORM) && !defined(PVR_DRI_DRM_NOT_PCI)
- pm_runtime_enable(&gpsPVRLDMDev->dev);
-#endif
return PVRSRV_OK;
}
PVRSRV_ERROR SysPMRuntimeUnregister(void)
{
-#if defined(LDM_PLATFORM) && !defined(PVR_DRI_DRM_NOT_PCI)
- pm_runtime_disable(&gpsPVRLDMDev->dev);
-#endif
return PVRSRV_OK;
}
--
2.29.2
More information about the openpvrsgx-devgroup
mailing list