smu10_driver_if.h 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. /*
  2. * Copyright 2017 Advanced Micro Devices, Inc.
  3. *
  4. * Permission is hereby granted, free of charge, to any person obtaining a
  5. * copy of this software and associated documentation files (the "Software"),
  6. * to deal in the Software without restriction, including without limitation
  7. * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  8. * and/or sell copies of the Software, and to permit persons to whom the
  9. * Software is furnished to do so, subject to the following conditions:
  10. *
  11. * The above copyright notice and this permission notice shall be included in
  12. * all copies or substantial portions of the Software.
  13. *
  14. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  15. * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  16. * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
  17. * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
  18. * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
  19. * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  20. * OTHER DEALINGS IN THE SOFTWARE.
  21. *
  22. */
  23. #ifndef SMU10_DRIVER_IF_H
  24. #define SMU10_DRIVER_IF_H
  25. #define SMU10_DRIVER_IF_VERSION 0x6
  26. #define NUM_DSPCLK_LEVELS 8
  27. typedef struct {
  28. int32_t value;
  29. uint32_t numFractionalBits;
  30. } FloatInIntFormat_t;
  31. typedef enum {
  32. DSPCLK_DCEFCLK = 0,
  33. DSPCLK_DISPCLK,
  34. DSPCLK_PIXCLK,
  35. DSPCLK_PHYCLK,
  36. DSPCLK_COUNT,
  37. } DSPCLK_e;
  38. typedef struct {
  39. uint16_t Freq;
  40. uint16_t Vid;
  41. } DisplayClockTable_t;
  42. typedef struct {
  43. uint16_t MinClock; /* This is either DCFCLK or SOCCLK (in MHz) */
  44. uint16_t MaxClock; /* This is either DCFCLK or SOCCLK (in MHz) */
  45. uint16_t MinMclk;
  46. uint16_t MaxMclk;
  47. uint8_t WmSetting;
  48. uint8_t Padding[3];
  49. } WatermarkRowGeneric_t;
  50. #define NUM_WM_RANGES 4
  51. typedef enum {
  52. WM_SOCCLK = 0,
  53. WM_DCFCLK,
  54. WM_COUNT,
  55. } WM_CLOCK_e;
  56. typedef struct {
  57. WatermarkRowGeneric_t WatermarkRow[WM_COUNT][NUM_WM_RANGES];
  58. uint32_t MmHubPadding[7];
  59. } Watermarks_t;
  60. typedef enum {
  61. CUSTOM_DPM_SETTING_GFXCLK,
  62. CUSTOM_DPM_SETTING_CCLK,
  63. CUSTOM_DPM_SETTING_FCLK_CCX,
  64. CUSTOM_DPM_SETTING_FCLK_GFX,
  65. CUSTOM_DPM_SETTING_FCLK_STALLS,
  66. CUSTOM_DPM_SETTING_LCLK,
  67. CUSTOM_DPM_SETTING_COUNT,
  68. } CUSTOM_DPM_SETTING_e;
  69. typedef struct {
  70. uint8_t ActiveHystLimit;
  71. uint8_t IdleHystLimit;
  72. uint8_t FPS;
  73. uint8_t MinActiveFreqType;
  74. FloatInIntFormat_t MinActiveFreq;
  75. FloatInIntFormat_t PD_Data_limit;
  76. FloatInIntFormat_t PD_Data_time_constant;
  77. FloatInIntFormat_t PD_Data_error_coeff;
  78. FloatInIntFormat_t PD_Data_error_rate_coeff;
  79. } DpmActivityMonitorCoeffExt_t;
  80. typedef struct {
  81. DpmActivityMonitorCoeffExt_t DpmActivityMonitorCoeff[CUSTOM_DPM_SETTING_COUNT];
  82. } CustomDpmSettings_t;
  83. #define NUM_SOCCLK_DPM_LEVELS 8
  84. #define NUM_DCEFCLK_DPM_LEVELS 4
  85. #define NUM_FCLK_DPM_LEVELS 4
  86. #define NUM_MEMCLK_DPM_LEVELS 4
  87. typedef struct {
  88. uint32_t Freq; /* In MHz */
  89. uint32_t Vol; /* Millivolts with 2 fractional bits */
  90. } DpmClock_t;
  91. typedef struct {
  92. DpmClock_t DcefClocks[NUM_DCEFCLK_DPM_LEVELS];
  93. DpmClock_t SocClocks[NUM_SOCCLK_DPM_LEVELS];
  94. DpmClock_t FClocks[NUM_FCLK_DPM_LEVELS];
  95. DpmClock_t MemClocks[NUM_MEMCLK_DPM_LEVELS];
  96. } DpmClocks_t;
  97. #endif