Lines Matching refs:reset
19 #include <linux/reset-controller.h>
722 static bool _is_valid_reset(struct omap_reset_data *reset, unsigned long id)
724 if (reset->mask & BIT(id))
730 static int omap_reset_get_st_bit(struct omap_reset_data *reset,
733 const struct omap_rst_map *map = reset->prm->data->rstmap;
748 struct omap_reset_data *reset = to_omap_reset_data(rcdev);
750 int st_bit = omap_reset_get_st_bit(reset, id);
751 bool has_rstst = reset->prm->data->rstst ||
752 (reset->prm->data->flags & OMAP_PRM_HAS_RSTST);
758 /* Check if hw reset line is asserted */
759 v = readl_relaxed(reset->prm->base + reset->prm->data->rstctrl);
764 * Check reset status, high value means reset sequence has been
765 * completed successfully so we can return 0 here (reset deasserted)
767 v = readl_relaxed(reset->prm->base + reset->prm->data->rstst);
777 struct omap_reset_data *reset = to_omap_reset_data(rcdev);
781 /* assert the reset control line */
782 spin_lock_irqsave(&reset->lock, flags);
783 v = readl_relaxed(reset->prm->base + reset->prm->data->rstctrl);
785 writel_relaxed(v, reset->prm->base + reset->prm->data->rstctrl);
786 spin_unlock_irqrestore(&reset->lock, flags);
794 struct omap_reset_data *reset = to_omap_reset_data(rcdev);
799 struct ti_prm_platform_data *pdata = dev_get_platdata(reset->dev);
802 /* Nothing to do if the reset is already deasserted */
806 has_rstst = reset->prm->data->rstst ||
807 (reset->prm->data->flags & OMAP_PRM_HAS_RSTST);
810 st_bit = omap_reset_get_st_bit(reset, id);
812 /* Clear the reset status by writing 1 to the status bit */
814 writel_relaxed(v, reset->prm->base + reset->prm->data->rstst);
817 if (reset->clkdm)
818 pdata->clkdm_deny_idle(reset->clkdm);
820 /* de-assert the reset control line */
821 spin_lock_irqsave(&reset->lock, flags);
822 v = readl_relaxed(reset->prm->base + reset->prm->data->rstctrl);
824 writel_relaxed(v, reset->prm->base + reset->prm->data->rstctrl);
825 spin_unlock_irqrestore(&reset->lock, flags);
827 /* wait for the reset bit to clear */
828 ret = readl_relaxed_poll_timeout_atomic(reset->prm->base +
829 reset->prm->data->rstctrl,
834 reset->prm->data->name, id);
838 ret = readl_relaxed_poll_timeout_atomic(reset->prm->base +
839 reset->prm->data->rstst,
844 reset->prm->data->name, id);
847 if (reset->clkdm)
848 pdata->clkdm_allow_idle(reset->clkdm);
862 struct omap_reset_data *reset = to_omap_reset_data(rcdev);
864 if (!_is_valid_reset(reset, reset_spec->args[0]))
873 struct omap_reset_data *reset;
881 * or OMAP_PRM_HAS_RSTCTRL flag is set, we have reset control register
896 reset = devm_kzalloc(&pdev->dev, sizeof(*reset), GFP_KERNEL);
897 if (!reset)
900 reset->rcdev.owner = THIS_MODULE;
901 reset->rcdev.ops = &omap_reset_ops;
902 reset->rcdev.of_node = pdev->dev.of_node;
903 reset->rcdev.nr_resets = OMAP_MAX_RESETS;
904 reset->rcdev.of_xlate = omap_prm_reset_xlate;
905 reset->rcdev.of_reset_n_cells = 1;
906 reset->dev = &pdev->dev;
907 spin_lock_init(&reset->lock);
909 reset->prm = prm;
915 reset->clkdm = pdata->clkdm_lookup(buf);
916 if (!reset->clkdm)
921 reset->mask |= BIT(map->rst);
925 /* Quirk handling to assert rst_map_012 bits on reset and avoid errors */
927 v = readl_relaxed(reset->prm->base + reset->prm->data->rstctrl);
928 if ((v & reset->mask) != reset->mask) {
930 writel_relaxed(reset->mask, reset->prm->base +
931 reset->prm->data->rstctrl);
935 return devm_reset_controller_register(&pdev->dev, &reset->rcdev);