Lines Matching refs:reset

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