Lines Matching full:reset
18 #include <linux/reset-controller.h>
407 static bool _is_valid_reset(struct omap_reset_data *reset, unsigned long id) in _is_valid_reset() argument
409 if (reset->mask & BIT(id)) in _is_valid_reset()
415 static int omap_reset_get_st_bit(struct omap_reset_data *reset, in omap_reset_get_st_bit() argument
418 const struct omap_rst_map *map = reset->prm->data->rstmap; in omap_reset_get_st_bit()
433 struct omap_reset_data *reset = to_omap_reset_data(rcdev); in omap_reset_status() local
435 int st_bit = omap_reset_get_st_bit(reset, id); in omap_reset_status()
436 bool has_rstst = reset->prm->data->rstst || in omap_reset_status()
437 (reset->prm->data->flags & OMAP_PRM_HAS_RSTST); in omap_reset_status()
443 /* Check if hw reset line is asserted */ in omap_reset_status()
444 v = readl_relaxed(reset->prm->base + reset->prm->data->rstctrl); in omap_reset_status()
449 * Check reset status, high value means reset sequence has been in omap_reset_status()
450 * completed successfully so we can return 0 here (reset deasserted) in omap_reset_status()
452 v = readl_relaxed(reset->prm->base + reset->prm->data->rstst); in omap_reset_status()
462 struct omap_reset_data *reset = to_omap_reset_data(rcdev); in omap_reset_assert() local
466 /* assert the reset control line */ in omap_reset_assert()
467 spin_lock_irqsave(&reset->lock, flags); in omap_reset_assert()
468 v = readl_relaxed(reset->prm->base + reset->prm->data->rstctrl); in omap_reset_assert()
470 writel_relaxed(v, reset->prm->base + reset->prm->data->rstctrl); in omap_reset_assert()
471 spin_unlock_irqrestore(&reset->lock, flags); in omap_reset_assert()
479 struct omap_reset_data *reset = to_omap_reset_data(rcdev); in omap_reset_deassert() local
484 struct ti_prm_platform_data *pdata = dev_get_platdata(reset->dev); in omap_reset_deassert()
487 /* Nothing to do if the reset is already deasserted */ in omap_reset_deassert()
491 has_rstst = reset->prm->data->rstst || in omap_reset_deassert()
492 (reset->prm->data->flags & OMAP_PRM_HAS_RSTST); in omap_reset_deassert()
495 st_bit = omap_reset_get_st_bit(reset, id); in omap_reset_deassert()
497 /* Clear the reset status by writing 1 to the status bit */ in omap_reset_deassert()
499 writel_relaxed(v, reset->prm->base + reset->prm->data->rstst); in omap_reset_deassert()
502 if (reset->clkdm) in omap_reset_deassert()
503 pdata->clkdm_deny_idle(reset->clkdm); in omap_reset_deassert()
505 /* de-assert the reset control line */ in omap_reset_deassert()
506 spin_lock_irqsave(&reset->lock, flags); in omap_reset_deassert()
507 v = readl_relaxed(reset->prm->base + reset->prm->data->rstctrl); in omap_reset_deassert()
509 writel_relaxed(v, reset->prm->base + reset->prm->data->rstctrl); in omap_reset_deassert()
510 spin_unlock_irqrestore(&reset->lock, flags); in omap_reset_deassert()
512 /* wait for the reset bit to clear */ in omap_reset_deassert()
513 ret = readl_relaxed_poll_timeout_atomic(reset->prm->base + in omap_reset_deassert()
514 reset->prm->data->rstctrl, in omap_reset_deassert()
519 reset->prm->data->name, id); in omap_reset_deassert()
523 ret = readl_relaxed_poll_timeout_atomic(reset->prm->base + in omap_reset_deassert()
524 reset->prm->data->rstst, in omap_reset_deassert()
529 reset->prm->data->name, id); in omap_reset_deassert()
532 if (reset->clkdm) in omap_reset_deassert()
533 pdata->clkdm_allow_idle(reset->clkdm); in omap_reset_deassert()
547 struct omap_reset_data *reset = to_omap_reset_data(rcdev); in omap_prm_reset_xlate() local
549 if (!_is_valid_reset(reset, reset_spec->args[0])) in omap_prm_reset_xlate()
558 struct omap_reset_data *reset; in omap_prm_reset_init() local
566 * or OMAP_PRM_HAS_RSTCTRL flag is set, we have reset control register in omap_prm_reset_init()
581 reset = devm_kzalloc(&pdev->dev, sizeof(*reset), GFP_KERNEL); in omap_prm_reset_init()
582 if (!reset) in omap_prm_reset_init()
585 reset->rcdev.owner = THIS_MODULE; in omap_prm_reset_init()
586 reset->rcdev.ops = &omap_reset_ops; in omap_prm_reset_init()
587 reset->rcdev.of_node = pdev->dev.of_node; in omap_prm_reset_init()
588 reset->rcdev.nr_resets = OMAP_MAX_RESETS; in omap_prm_reset_init()
589 reset->rcdev.of_xlate = omap_prm_reset_xlate; in omap_prm_reset_init()
590 reset->rcdev.of_reset_n_cells = 1; in omap_prm_reset_init()
591 reset->dev = &pdev->dev; in omap_prm_reset_init()
592 spin_lock_init(&reset->lock); in omap_prm_reset_init()
594 reset->prm = prm; in omap_prm_reset_init()
600 reset->clkdm = pdata->clkdm_lookup(buf); in omap_prm_reset_init()
601 if (!reset->clkdm) in omap_prm_reset_init()
606 reset->mask |= BIT(map->rst); in omap_prm_reset_init()
610 /* Quirk handling to assert rst_map_012 bits on reset and avoid errors */ in omap_prm_reset_init()
612 v = readl_relaxed(reset->prm->base + reset->prm->data->rstctrl); in omap_prm_reset_init()
613 if ((v & reset->mask) != reset->mask) { in omap_prm_reset_init()
615 writel_relaxed(reset->mask, reset->prm->base + in omap_prm_reset_init()
616 reset->prm->data->rstctrl); in omap_prm_reset_init()
620 return devm_reset_controller_register(&pdev->dev, &reset->rcdev); in omap_prm_reset_init()