From a521a7d0dc413455b37dc82c08b47a1fc3cc6d34 Mon Sep 17 00:00:00 2001
From: Gianfranco Mariotti <gianfranco.mariotti@seco.com>
Date: Wed, 8 May 2024 19:27:12 +0200
Subject: [PATCH] [DRIVER] mxc: gpu-viv: thermal: raise lower limit for i.MX6
 scaling

On i.MX6 SoCs, raise lower limit for GPU scaling to avoid "IPU Warning"
framebuffer crash
---
 .../hal/kernel/arch/gc_hal_kernel_hardware.c        | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/drivers/mxc/gpu-viv/hal/kernel/arch/gc_hal_kernel_hardware.c b/drivers/mxc/gpu-viv/hal/kernel/arch/gc_hal_kernel_hardware.c
index 7ab103f8851b2b..6690172523acc9 100644
--- a/drivers/mxc/gpu-viv/hal/kernel/arch/gc_hal_kernel_hardware.c
+++ b/drivers/mxc/gpu-viv/hal/kernel/arch/gc_hal_kernel_hardware.c
@@ -62,6 +62,11 @@
 
 #define _GC_OBJ_ZONE    gcvZONE_HARDWARE
 
+/* i.MX6: avoid "IPU Warning" framebuffer crash */
+#if defined(CONFIG_SOC_IMX6)
+#define MIN_FSCALE_LIMIT_IPU    4
+#endif
+
 /*
 There is a afifo that is receiving the “write-done” signal coming from AXI bus for each write request from GPU.
 In normal situation, these “write-done” are coming back in several cycles apart since the write request is generally multiple bursts.
@@ -2304,6 +2309,10 @@ gckHARDWARE_Construct(
     hardware->minFscaleValue = 1;
     hardware->waitCount = 200;
 
+#if defined(CONFIG_SOC_IMX6)
+    hardware->minFscaleValue = MIN_FSCALE_LIMIT_IPU;
+#endif
+
     if (_IsHardwareMatch(hardware, gcv600, 0x4653)
         || _IsHardwareMatch(hardware, gcv400, 0x4645))
     {
@@ -9371,6 +9380,10 @@ gckHARDWARE_SetMinFscaleValue(
     IN gctUINT MinFscaleValue
     )
 {
+#if defined(CONFIG_SOC_IMX6)
+    MinFscaleValue = MIN_FSCALE_LIMIT_IPU;
+#endif
+
     if (_IsHardwareMatch(Hardware, gcv600, 0x4653)
         || _IsHardwareMatch(Hardware, gcv400, 0x4645))
     {
-- 
GitLab