MGS-5035-1 [#ccc] enable shader clock frequency scaling
authorXianzhong <xianzhong.li@nxp.com>
Mon, 15 Jul 2019 15:26:14 +0000 (23:26 +0800)
committerXianzhong <xianzhong.li@nxp.com>
Thu, 18 Jul 2019 11:13:20 +0000 (19:13 +0800)
currently GPU core clock frequency scaling is enabled,
the scaled clock cannot change GPU shader frequency.

enable shader frequency scaling with below setting:

  fscaleSh_clkSh = clkSh[7 :1 ];
  fscaleShLoad_clkSh = clkSh [0 ];
  enableAutoSh_clkSh = clkSh[16 ];
  disableAuto_clkSh = clkSh[17 ];

trick: write 0x10C to set new frequency scaling,
reset 0x10C to lock-up it before next change.

Signed-off-by: Xianzhong <xianzhong.li@nxp.com>
drivers/mxc/gpu-viv/hal/kernel/arch/gc_hal_kernel_hardware.c

index 16c9eaa..aad1090 100644 (file)
@@ -9413,6 +9413,32 @@ _PmClockControl(
         gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core,
                                           0x00000,
                                           clock));
+#if gcdENABLE_FSCALE_VAL_ADJUST
+        if (State == gcvPOWER_ON)
+        {
+            gcmkVERIFY_OK(
+                gckOS_ReadRegisterEx(Hardware->os,
+                                     Hardware->core,
+                                     0x0010C,
+                                     &clock));
+
+            /* fscaleSh_clkSh = clkSh[7 :1 ];
+               fscaleShLoad_clkSh = clkSh [0 ];
+               enableAutoSh_clkSh = clkSh[16 ];
+               disableAuto_clkSh = clkSh[17 ];
+            */
+            gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
+                                              Hardware->core,
+                                              0x0010C,
+                                              (clock & ~0xFE) | (Hardware->powerOnFscaleVal << 1) | 0x20001
+                                              ));
+
+            gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
+                                              Hardware->core,
+                                              0x0010C,
+                                              clock));
+        }
+#endif
     }
 
     return gcvSTATUS_OK;