]> git.ipfire.org Git - thirdparty/kernel/stable.git/blobdiff - drivers/soc/imx/gpc.c
Merge tag 'armsoc-drivers' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
[thirdparty/kernel/stable.git] / drivers / soc / imx / gpc.c
index 546960a18d60093ea5051228938533ee187254fa..b3da635970ea70f56d98a4db94d234178cfa9a82 100644 (file)
@@ -54,7 +54,6 @@ struct imx_pm_domain {
        unsigned int reg_offs;
        signed char cntr_pdn_bit;
        unsigned int ipg_rate_mhz;
-       unsigned int flags;
 };
 
 static inline struct imx_pm_domain *
@@ -69,9 +68,6 @@ static int imx6_pm_domain_power_off(struct generic_pm_domain *genpd)
        int iso, iso2sw;
        u32 val;
 
-       if (pd->flags & PGC_DOMAIN_FLAG_NO_PD)
-               return -EBUSY;
-
        /* Read ISO and ISO2SW power down delays */
        regmap_read(pd->regmap, pd->reg_offs + GPC_PGC_PUPSCR_OFFS, &val);
        iso = val & 0x3f;
@@ -295,26 +291,31 @@ static struct imx_pm_domain imx_gpc_domains[] = {
 struct imx_gpc_dt_data {
        int num_domains;
        bool err009619_present;
+       bool err006287_present;
 };
 
 static const struct imx_gpc_dt_data imx6q_dt_data = {
        .num_domains = 2,
        .err009619_present = false,
+       .err006287_present = false,
 };
 
 static const struct imx_gpc_dt_data imx6qp_dt_data = {
        .num_domains = 2,
        .err009619_present = true,
+       .err006287_present = false,
 };
 
 static const struct imx_gpc_dt_data imx6sl_dt_data = {
        .num_domains = 3,
        .err009619_present = false,
+       .err006287_present = true,
 };
 
 static const struct imx_gpc_dt_data imx6sx_dt_data = {
        .num_domains = 4,
        .err009619_present = false,
+       .err006287_present = false,
 };
 
 static const struct of_device_id imx_gpc_dt_ids[] = {
@@ -434,8 +435,13 @@ static int imx_gpc_probe(struct platform_device *pdev)
 
        /* Disable PU power down in normal operation if ERR009619 is present */
        if (of_id_data->err009619_present)
-               imx_gpc_domains[GPC_PGC_DOMAIN_PU].flags |=
-                               PGC_DOMAIN_FLAG_NO_PD;
+               imx_gpc_domains[GPC_PGC_DOMAIN_PU].base.flags |=
+                               GENPD_FLAG_ALWAYS_ON;
+
+       /* Keep DISP always on if ERR006287 is present */
+       if (of_id_data->err006287_present)
+               imx_gpc_domains[GPC_PGC_DOMAIN_DISPLAY].base.flags |=
+                               GENPD_FLAG_ALWAYS_ON;
 
        if (!pgc_node) {
                ret = imx_gpc_old_dt_init(&pdev->dev, regmap,