OSDN Git Service

soc: ti: omap-prm: poll for reset complete during de-assert
authorTero Kristo <t-kristo@ti.com>
Wed, 9 Oct 2019 15:55:37 +0000 (08:55 -0700)
committerSantosh Shilimkar <santosh.shilimkar@oracle.com>
Wed, 9 Oct 2019 15:55:37 +0000 (08:55 -0700)
Poll for reset completion status during de-assertion of reset, otherwise
the IP in question might be accessed before it has left reset properly.

Signed-off-by: Tero Kristo <t-kristo@ti.com>
Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de>
Reviewed-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Santosh Shilimkar <santosh.shilimkar@oracle.com>
drivers/soc/ti/omap_prm.c

index d171e96..a3ffb19 100644 (file)
@@ -152,6 +152,18 @@ static int omap_reset_deassert(struct reset_controller_dev *rcdev,
        writel_relaxed(v, reset->prm->base + reset->prm->data->rstctrl);
        spin_unlock_irqrestore(&reset->lock, flags);
 
+       if (!has_rstst)
+               return 0;
+
+       /* wait for the status to be set */
+       ret = readl_relaxed_poll_timeout(reset->prm->base +
+                                        reset->prm->data->rstst,
+                                        v, v & BIT(st_bit), 1,
+                                        OMAP_RESET_MAX_WAIT);
+       if (ret)
+               pr_err("%s: timedout waiting for %s:%lu\n", __func__,
+                      reset->prm->data->name, id);
+
        return 0;
 }