PM / AVS: SmartReflex: disable errgen before vpbound disable
[firefly-linux-kernel-4.4.55.git] / drivers / power / avs / smartreflex.c
index 6b2238bb6a8111d1362ea00733f25787354efad6..f34d34d46fc147ffb048301bacd33031ee482d77 100644 (file)
@@ -449,12 +449,17 @@ int sr_disable_errgen(struct voltagedomain *voltdm)
                return -EINVAL;
        }
 
-       /* Disable the interrupts of ERROR module */
-       sr_modify_reg(sr, errconfig_offs, vpboundint_en | vpboundint_st, 0);
-
        /* Disable the Sensor and errorgen */
        sr_modify_reg(sr, SRCONFIG, SRCONFIG_SENENABLE | SRCONFIG_ERRGEN_EN, 0);
 
+       /*
+        * Disable the interrupts of ERROR module
+        * NOTE: modify is a read, modify,write - an implicit OCP barrier
+        * which is required is present here - sequencing is critical
+        * at this point (after errgen is disabled, vpboundint disable)
+        */
+       sr_modify_reg(sr, errconfig_offs, vpboundint_en | vpboundint_st, 0);
+
        return 0;
 }