tegra186-reset.c 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. /*
  2. * Copyright (c) 2016, NVIDIA CORPORATION.
  3. *
  4. * SPDX-License-Identifier: GPL-2.0
  5. */
  6. #include <common.h>
  7. #include <dm.h>
  8. #include <misc.h>
  9. #include <reset-uclass.h>
  10. #include <asm/arch-tegra/bpmp_abi.h>
  11. static int tegra186_reset_request(struct reset_ctl *reset_ctl)
  12. {
  13. debug("%s(reset_ctl=%p) (dev=%p, id=%lu)\n", __func__, reset_ctl,
  14. reset_ctl->dev, reset_ctl->id);
  15. return 0;
  16. }
  17. static int tegra186_reset_free(struct reset_ctl *reset_ctl)
  18. {
  19. debug("%s(reset_ctl=%p) (dev=%p, id=%lu)\n", __func__, reset_ctl,
  20. reset_ctl->dev, reset_ctl->id);
  21. return 0;
  22. }
  23. static int tegra186_reset_common(struct reset_ctl *reset_ctl,
  24. enum mrq_reset_commands cmd)
  25. {
  26. struct mrq_reset_request req;
  27. int ret;
  28. req.cmd = cmd;
  29. req.reset_id = reset_ctl->id;
  30. ret = misc_call(reset_ctl->dev->parent, MRQ_RESET, &req, sizeof(req),
  31. NULL, 0);
  32. if (ret < 0)
  33. return ret;
  34. return 0;
  35. }
  36. static int tegra186_reset_assert(struct reset_ctl *reset_ctl)
  37. {
  38. debug("%s(reset_ctl=%p) (dev=%p, id=%lu)\n", __func__, reset_ctl,
  39. reset_ctl->dev, reset_ctl->id);
  40. return tegra186_reset_common(reset_ctl, CMD_RESET_ASSERT);
  41. }
  42. static int tegra186_reset_deassert(struct reset_ctl *reset_ctl)
  43. {
  44. debug("%s(reset_ctl=%p) (dev=%p, id=%lu)\n", __func__, reset_ctl,
  45. reset_ctl->dev, reset_ctl->id);
  46. return tegra186_reset_common(reset_ctl, CMD_RESET_DEASSERT);
  47. }
  48. struct reset_ops tegra186_reset_ops = {
  49. .request = tegra186_reset_request,
  50. .free = tegra186_reset_free,
  51. .rst_assert = tegra186_reset_assert,
  52. .rst_deassert = tegra186_reset_deassert,
  53. };
  54. static int tegra186_reset_probe(struct udevice *dev)
  55. {
  56. debug("%s(dev=%p)\n", __func__, dev);
  57. return 0;
  58. }
  59. U_BOOT_DRIVER(tegra186_reset) = {
  60. .name = "tegra186_reset",
  61. .id = UCLASS_RESET,
  62. .probe = tegra186_reset_probe,
  63. .ops = &tegra186_reset_ops,
  64. };