tz_pm.c 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #include <linux/module.h>
  2. #include "trustzone/kree/system.h"
  3. #include "tz_cross/ta_pm.h"
  4. static KREE_SESSION_HANDLE pm_session;
  5. void kree_pm_init(void)
  6. {
  7. TZ_RESULT ret;
  8. ret = KREE_CreateSession(TZ_TA_PM_UUID, &pm_session);
  9. if (ret != TZ_RESULT_SUCCESS)
  10. pr_warn("CreateSession error %d\n", ret);
  11. }
  12. #ifndef CONFIG_ARM64
  13. void kree_pm_cpu_lowpower(volatile int *ppen_release, int logical_cpuid)
  14. {
  15. MTEEC_PARAM param[4];
  16. TZ_RESULT ret;
  17. param[0].mem.buffer = (void *)ppen_release;
  18. param[0].mem.size = sizeof(int);
  19. param[1].value.a = logical_cpuid;
  20. ret = KREE_TeeServiceCall(pm_session, TZCMD_PM_CPU_LOWPOWER,
  21. TZ_ParamTypes2(TZPT_MEM_INPUT,
  22. TZPT_VALUE_INPUT),
  23. param);
  24. if (ret != TZ_RESULT_SUCCESS)
  25. pr_warn("%s error: %s\n", __func__, TZ_GetErrorString(ret));
  26. }
  27. int kree_pm_cpu_dormant(int mode)
  28. {
  29. MTEEC_PARAM param[4];
  30. TZ_RESULT ret;
  31. param[0].value.a = mode;
  32. ret = KREE_TeeServiceCall(pm_session, TZCMD_PM_CPU_DORMANT,
  33. TZ_ParamTypes1(TZPT_VALUE_INPUT), param);
  34. if (ret != TZ_RESULT_SUCCESS)
  35. pr_warn("%s error: %s\n", __func__, TZ_GetErrorString(ret));
  36. return 0;
  37. }
  38. #endif
  39. int kree_pm_device_ops(int state)
  40. {
  41. MTEEC_PARAM param[4];
  42. TZ_RESULT ret;
  43. param[0].value.a = (uint32_t) state;
  44. ret = KREE_TeeServiceCall(pm_session, TZCMD_PM_DEVICE_OPS,
  45. TZ_ParamTypes1(TZPT_VALUE_INPUT), param);
  46. if (ret != TZ_RESULT_SUCCESS)
  47. pr_warn("%s error: %s\n", __func__, TZ_GetErrorString(ret));
  48. return ret;
  49. }