intel_rps.h 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. /* SPDX-License-Identifier: MIT */
  2. /*
  3. * Copyright © 2019 Intel Corporation
  4. */
  5. #ifndef INTEL_RPS_H
  6. #define INTEL_RPS_H
  7. #include "intel_rps_types.h"
  8. #include "i915_reg_defs.h"
  9. struct i915_request;
  10. struct drm_printer;
  11. #define GT_FREQUENCY_MULTIPLIER 50
  12. #define GEN9_FREQ_SCALER 3
  13. void intel_rps_init_early(struct intel_rps *rps);
  14. void intel_rps_init(struct intel_rps *rps);
  15. void intel_rps_sanitize(struct intel_rps *rps);
  16. void intel_rps_driver_register(struct intel_rps *rps);
  17. void intel_rps_driver_unregister(struct intel_rps *rps);
  18. void intel_rps_enable(struct intel_rps *rps);
  19. void intel_rps_disable(struct intel_rps *rps);
  20. void intel_rps_park(struct intel_rps *rps);
  21. void intel_rps_unpark(struct intel_rps *rps);
  22. void intel_rps_boost(struct i915_request *rq);
  23. void intel_rps_dec_waiters(struct intel_rps *rps);
  24. u32 intel_rps_get_boost_frequency(struct intel_rps *rps);
  25. int intel_rps_set_boost_frequency(struct intel_rps *rps, u32 freq);
  26. int intel_rps_set(struct intel_rps *rps, u8 val);
  27. void intel_rps_mark_interactive(struct intel_rps *rps, bool interactive);
  28. int intel_gpu_freq(struct intel_rps *rps, int val);
  29. int intel_freq_opcode(struct intel_rps *rps, int val);
  30. u8 intel_rps_get_up_threshold(struct intel_rps *rps);
  31. int intel_rps_set_up_threshold(struct intel_rps *rps, u8 threshold);
  32. u8 intel_rps_get_down_threshold(struct intel_rps *rps);
  33. int intel_rps_set_down_threshold(struct intel_rps *rps, u8 threshold);
  34. u32 intel_rps_read_actual_frequency(struct intel_rps *rps);
  35. u32 intel_rps_read_actual_frequency_fw(struct intel_rps *rps);
  36. u32 intel_rps_get_requested_frequency(struct intel_rps *rps);
  37. u32 intel_rps_get_min_frequency(struct intel_rps *rps);
  38. u32 intel_rps_get_min_raw_freq(struct intel_rps *rps);
  39. int intel_rps_set_min_frequency(struct intel_rps *rps, u32 val);
  40. u32 intel_rps_get_max_frequency(struct intel_rps *rps);
  41. u32 intel_rps_get_max_raw_freq(struct intel_rps *rps);
  42. int intel_rps_set_max_frequency(struct intel_rps *rps, u32 val);
  43. u32 intel_rps_get_rp0_frequency(struct intel_rps *rps);
  44. u32 intel_rps_get_rp1_frequency(struct intel_rps *rps);
  45. u32 intel_rps_get_rpn_frequency(struct intel_rps *rps);
  46. u32 intel_rps_read_punit_req_frequency(struct intel_rps *rps);
  47. u32 intel_rps_read_rpstat(struct intel_rps *rps);
  48. void gen6_rps_get_freq_caps(struct intel_rps *rps, struct intel_rps_freq_caps *caps);
  49. void intel_rps_raise_unslice(struct intel_rps *rps);
  50. void intel_rps_lower_unslice(struct intel_rps *rps);
  51. u32 intel_rps_read_throttle_reason(struct intel_rps *rps);
  52. bool rps_read_mask_mmio(struct intel_rps *rps, i915_reg_t reg32, u32 mask);
  53. void gen6_rps_frequency_dump(struct intel_rps *rps, struct drm_printer *p);
  54. void gen5_rps_irq_handler(struct intel_rps *rps);
  55. void gen6_rps_irq_handler(struct intel_rps *rps, u32 pm_iir);
  56. void gen11_rps_irq_handler(struct intel_rps *rps, u32 pm_iir);
  57. static inline bool intel_rps_is_enabled(const struct intel_rps *rps)
  58. {
  59. return test_bit(INTEL_RPS_ENABLED, &rps->flags);
  60. }
  61. static inline void intel_rps_set_enabled(struct intel_rps *rps)
  62. {
  63. set_bit(INTEL_RPS_ENABLED, &rps->flags);
  64. }
  65. static inline void intel_rps_clear_enabled(struct intel_rps *rps)
  66. {
  67. clear_bit(INTEL_RPS_ENABLED, &rps->flags);
  68. }
  69. static inline bool intel_rps_is_active(const struct intel_rps *rps)
  70. {
  71. return test_bit(INTEL_RPS_ACTIVE, &rps->flags);
  72. }
  73. static inline void intel_rps_set_active(struct intel_rps *rps)
  74. {
  75. set_bit(INTEL_RPS_ACTIVE, &rps->flags);
  76. }
  77. static inline bool intel_rps_clear_active(struct intel_rps *rps)
  78. {
  79. return test_and_clear_bit(INTEL_RPS_ACTIVE, &rps->flags);
  80. }
  81. static inline bool intel_rps_has_interrupts(const struct intel_rps *rps)
  82. {
  83. return test_bit(INTEL_RPS_INTERRUPTS, &rps->flags);
  84. }
  85. static inline void intel_rps_set_interrupts(struct intel_rps *rps)
  86. {
  87. set_bit(INTEL_RPS_INTERRUPTS, &rps->flags);
  88. }
  89. static inline void intel_rps_clear_interrupts(struct intel_rps *rps)
  90. {
  91. clear_bit(INTEL_RPS_INTERRUPTS, &rps->flags);
  92. }
  93. static inline bool intel_rps_uses_timer(const struct intel_rps *rps)
  94. {
  95. return test_bit(INTEL_RPS_TIMER, &rps->flags);
  96. }
  97. static inline void intel_rps_set_timer(struct intel_rps *rps)
  98. {
  99. set_bit(INTEL_RPS_TIMER, &rps->flags);
  100. }
  101. static inline void intel_rps_clear_timer(struct intel_rps *rps)
  102. {
  103. clear_bit(INTEL_RPS_TIMER, &rps->flags);
  104. }
  105. extern const struct intel_display_rps_interface i915_display_rps_interface;
  106. #endif /* INTEL_RPS_H */