imx8-power-domain.c 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * Copyright 2019 NXP
  4. */
  5. #define DEBUG
  6. #include <common.h>
  7. #include <dm.h>
  8. #include <log.h>
  9. #include <malloc.h>
  10. #include <power-domain-uclass.h>
  11. #include <asm/arch/power-domain.h>
  12. #include <asm/arch/sci/sci.h>
  13. static int imx8_power_domain_request(struct power_domain *power_domain)
  14. {
  15. debug("%s(power_domain=%p)\n", __func__, power_domain);
  16. return 0;
  17. }
  18. static int imx8_power_domain_free(struct power_domain *power_domain)
  19. {
  20. debug("%s(power_domain=%p)\n", __func__, power_domain);
  21. return 0;
  22. }
  23. static int imx8_power_domain_on(struct power_domain *power_domain)
  24. {
  25. u32 resource_id = power_domain->id;
  26. int ret;
  27. debug("%s: resource_id %u\n", __func__, resource_id);
  28. ret = sc_pm_set_resource_power_mode(-1, resource_id, SC_PM_PW_MODE_ON);
  29. if (ret) {
  30. printf("Error: %u Power up failed! (error = %d)\n",
  31. resource_id, ret);
  32. return ret;
  33. }
  34. return 0;
  35. }
  36. static int imx8_power_domain_off(struct power_domain *power_domain)
  37. {
  38. u32 resource_id = power_domain->id;
  39. int ret;
  40. debug("%s: resource_id %u\n", __func__, resource_id);
  41. ret = sc_pm_set_resource_power_mode(-1, resource_id, SC_PM_PW_MODE_OFF);
  42. if (ret) {
  43. printf("Error: %u Power off failed! (error = %d)\n",
  44. resource_id, ret);
  45. return ret;
  46. }
  47. return 0;
  48. }
  49. static int imx8_power_domain_probe(struct udevice *dev)
  50. {
  51. debug("%s(dev=%s)\n", __func__, dev->name);
  52. return 0;
  53. }
  54. static const struct udevice_id imx8_power_domain_ids[] = {
  55. { .compatible = "fsl,imx8qxp-scu-pd" },
  56. { .compatible = "fsl,scu-pd" },
  57. { }
  58. };
  59. struct power_domain_ops imx8_power_domain_ops_v2 = {
  60. .request = imx8_power_domain_request,
  61. .rfree = imx8_power_domain_free,
  62. .on = imx8_power_domain_on,
  63. .off = imx8_power_domain_off,
  64. };
  65. U_BOOT_DRIVER(imx8_power_domain_v2) = {
  66. .name = "imx8_power_domain_v2",
  67. .id = UCLASS_POWER_DOMAIN,
  68. .of_match = imx8_power_domain_ids,
  69. .probe = imx8_power_domain_probe,
  70. .ops = &imx8_power_domain_ops_v2,
  71. };