gpu->base_rate_shader >> gpu->freq_scale);
        } else {
                unsigned int fscale = 1 << (6 - gpu->freq_scale);
-               u32 clock = VIVS_HI_CLOCK_CONTROL_DISABLE_DEBUG_REGISTERS |
-                           VIVS_HI_CLOCK_CONTROL_FSCALE_VAL(fscale);
+               u32 clock = gpu_read(gpu, VIVS_HI_CLOCK_CONTROL);
 
+               clock &= ~VIVS_HI_CLOCK_CONTROL_FSCALE_VAL__MASK;
+               clock |= VIVS_HI_CLOCK_CONTROL_FSCALE_VAL(fscale);
                etnaviv_gpu_load_clock(gpu, clock);
        }
 }
 
        while (time_is_after_jiffies(timeout)) {
                /* enable clock */
-               etnaviv_gpu_update_clock(gpu);
-
-               control = gpu_read(gpu, VIVS_HI_CLOCK_CONTROL);
+               unsigned int fscale = 1 << (6 - gpu->freq_scale);
+               control = VIVS_HI_CLOCK_CONTROL_FSCALE_VAL(fscale);
+               etnaviv_gpu_load_clock(gpu, control);
 
                /* Wait for stable clock.  Vivante's code waited for 1ms */
                usleep_range(1000, 10000);
                        continue;
                }
 
+               /* disable debug registers, as they are not normally needed */
+               control |= VIVS_HI_CLOCK_CONTROL_DISABLE_DEBUG_REGISTERS;
+               gpu_write(gpu, VIVS_HI_CLOCK_CONTROL, control);
+
                failed = false;
                break;
        }