diff options
author | Alex Deucher <alexander.deucher@amd.com> | 2012-03-20 17:17:58 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2012-03-21 02:55:50 -0400 |
commit | f73468810ec2492b1bc99da87956023935de4805 (patch) | |
tree | bd0d42da81b3c4386f49aaf48dc101e24ab602d1 /drivers/gpu/drm | |
parent | bf68adb4df2ac27a8f1b24894c007c9ef1c4195a (diff) |
drm/radeon/kms: upstream power table updates
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu/drm')
-rw-r--r-- | drivers/gpu/drm/radeon/atombios.h | 180 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_atombios.c | 14 |
2 files changed, 172 insertions, 22 deletions
diff --git a/drivers/gpu/drm/radeon/atombios.h b/drivers/gpu/drm/radeon/atombios.h index 47604665cc17..4b04ba3828e8 100644 --- a/drivers/gpu/drm/radeon/atombios.h +++ b/drivers/gpu/drm/radeon/atombios.h | |||
@@ -7270,6 +7270,8 @@ typedef struct _ATOM_PPLIB_THERMALCONTROLLER | |||
7270 | #define ATOM_PP_THERMALCONTROLLER_EMC2103 13 /* 0x0D */ // Only fan control will be implemented, do NOT show this in PPGen. | 7270 | #define ATOM_PP_THERMALCONTROLLER_EMC2103 13 /* 0x0D */ // Only fan control will be implemented, do NOT show this in PPGen. |
7271 | #define ATOM_PP_THERMALCONTROLLER_SUMO 14 /* 0x0E */ // Sumo type, used internally | 7271 | #define ATOM_PP_THERMALCONTROLLER_SUMO 14 /* 0x0E */ // Sumo type, used internally |
7272 | #define ATOM_PP_THERMALCONTROLLER_NISLANDS 15 | 7272 | #define ATOM_PP_THERMALCONTROLLER_NISLANDS 15 |
7273 | #define ATOM_PP_THERMALCONTROLLER_SISLANDS 16 | ||
7274 | #define ATOM_PP_THERMALCONTROLLER_LM96163 17 | ||
7273 | 7275 | ||
7274 | // Thermal controller 'combo type' to use an external controller for Fan control and an internal controller for thermal. | 7276 | // Thermal controller 'combo type' to use an external controller for Fan control and an internal controller for thermal. |
7275 | // We probably should reserve the bit 0x80 for this use. | 7277 | // We probably should reserve the bit 0x80 for this use. |
@@ -7285,6 +7287,7 @@ typedef struct _ATOM_PPLIB_STATE | |||
7285 | UCHAR ucClockStateIndices[1]; // variable-sized | 7287 | UCHAR ucClockStateIndices[1]; // variable-sized |
7286 | } ATOM_PPLIB_STATE; | 7288 | } ATOM_PPLIB_STATE; |
7287 | 7289 | ||
7290 | |||
7288 | typedef struct _ATOM_PPLIB_FANTABLE | 7291 | typedef struct _ATOM_PPLIB_FANTABLE |
7289 | { | 7292 | { |
7290 | UCHAR ucFanTableFormat; // Change this if the table format changes or version changes so that the other fields are not the same. | 7293 | UCHAR ucFanTableFormat; // Change this if the table format changes or version changes so that the other fields are not the same. |
@@ -7297,12 +7300,20 @@ typedef struct _ATOM_PPLIB_FANTABLE | |||
7297 | USHORT usPWMHigh; // The PWM value at THigh. | 7300 | USHORT usPWMHigh; // The PWM value at THigh. |
7298 | } ATOM_PPLIB_FANTABLE; | 7301 | } ATOM_PPLIB_FANTABLE; |
7299 | 7302 | ||
7303 | typedef struct _ATOM_PPLIB_FANTABLE2 | ||
7304 | { | ||
7305 | ATOM_PPLIB_FANTABLE basicTable; | ||
7306 | USHORT usTMax; // The max temperature | ||
7307 | } ATOM_PPLIB_FANTABLE2; | ||
7308 | |||
7300 | typedef struct _ATOM_PPLIB_EXTENDEDHEADER | 7309 | typedef struct _ATOM_PPLIB_EXTENDEDHEADER |
7301 | { | 7310 | { |
7302 | USHORT usSize; | 7311 | USHORT usSize; |
7303 | ULONG ulMaxEngineClock; // For Overdrive. | 7312 | ULONG ulMaxEngineClock; // For Overdrive. |
7304 | ULONG ulMaxMemoryClock; // For Overdrive. | 7313 | ULONG ulMaxMemoryClock; // For Overdrive. |
7305 | // Add extra system parameters here, always adjust size to include all fields. | 7314 | // Add extra system parameters here, always adjust size to include all fields. |
7315 | USHORT usVCETableOffset; //points to ATOM_PPLIB_VCE_Table | ||
7316 | USHORT usUVDTableOffset; //points to ATOM_PPLIB_UVD_Table | ||
7306 | } ATOM_PPLIB_EXTENDEDHEADER; | 7317 | } ATOM_PPLIB_EXTENDEDHEADER; |
7307 | 7318 | ||
7308 | //// ATOM_PPLIB_POWERPLAYTABLE::ulPlatformCaps | 7319 | //// ATOM_PPLIB_POWERPLAYTABLE::ulPlatformCaps |
@@ -7325,6 +7336,7 @@ typedef struct _ATOM_PPLIB_EXTENDEDHEADER | |||
7325 | #define ATOM_PP_PLATFORM_CAP_REGULATOR_HOT 0x00010000 // Enable the 'regulator hot' feature. | 7336 | #define ATOM_PP_PLATFORM_CAP_REGULATOR_HOT 0x00010000 // Enable the 'regulator hot' feature. |
7326 | #define ATOM_PP_PLATFORM_CAP_BACO 0x00020000 // Does the driver supports BACO state. | 7337 | #define ATOM_PP_PLATFORM_CAP_BACO 0x00020000 // Does the driver supports BACO state. |
7327 | 7338 | ||
7339 | |||
7328 | typedef struct _ATOM_PPLIB_POWERPLAYTABLE | 7340 | typedef struct _ATOM_PPLIB_POWERPLAYTABLE |
7329 | { | 7341 | { |
7330 | ATOM_COMMON_TABLE_HEADER sHeader; | 7342 | ATOM_COMMON_TABLE_HEADER sHeader; |
@@ -7383,7 +7395,8 @@ typedef struct _ATOM_PPLIB_POWERPLAYTABLE4 | |||
7383 | USHORT usVddciDependencyOnMCLKOffset; | 7395 | USHORT usVddciDependencyOnMCLKOffset; |
7384 | USHORT usVddcDependencyOnMCLKOffset; | 7396 | USHORT usVddcDependencyOnMCLKOffset; |
7385 | USHORT usMaxClockVoltageOnDCOffset; | 7397 | USHORT usMaxClockVoltageOnDCOffset; |
7386 | USHORT usReserved[2]; | 7398 | USHORT usVddcPhaseShedLimitsTableOffset; // Points to ATOM_PPLIB_PhaseSheddingLimits_Table |
7399 | USHORT usReserved; | ||
7387 | } ATOM_PPLIB_POWERPLAYTABLE4, *LPATOM_PPLIB_POWERPLAYTABLE4; | 7400 | } ATOM_PPLIB_POWERPLAYTABLE4, *LPATOM_PPLIB_POWERPLAYTABLE4; |
7388 | 7401 | ||
7389 | typedef struct _ATOM_PPLIB_POWERPLAYTABLE5 | 7402 | typedef struct _ATOM_PPLIB_POWERPLAYTABLE5 |
@@ -7393,8 +7406,9 @@ typedef struct _ATOM_PPLIB_POWERPLAYTABLE5 | |||
7393 | ULONG ulNearTDPLimit; | 7406 | ULONG ulNearTDPLimit; |
7394 | ULONG ulSQRampingThreshold; | 7407 | ULONG ulSQRampingThreshold; |
7395 | USHORT usCACLeakageTableOffset; // Points to ATOM_PPLIB_CAC_Leakage_Table | 7408 | USHORT usCACLeakageTableOffset; // Points to ATOM_PPLIB_CAC_Leakage_Table |
7396 | ULONG ulCACLeakage; // TBD, this parameter is still under discussion. Change to ulReserved if not needed. | 7409 | ULONG ulCACLeakage; // The iLeakage for driver calculated CAC leakage table |
7397 | ULONG ulReserved; | 7410 | USHORT usTDPODLimit; |
7411 | USHORT usLoadLineSlope; // in milliOhms * 100 | ||
7398 | } ATOM_PPLIB_POWERPLAYTABLE5, *LPATOM_PPLIB_POWERPLAYTABLE5; | 7412 | } ATOM_PPLIB_POWERPLAYTABLE5, *LPATOM_PPLIB_POWERPLAYTABLE5; |
7399 | 7413 | ||
7400 | //// ATOM_PPLIB_NONCLOCK_INFO::usClassification | 7414 | //// ATOM_PPLIB_NONCLOCK_INFO::usClassification |
@@ -7423,6 +7437,7 @@ typedef struct _ATOM_PPLIB_POWERPLAYTABLE5 | |||
7423 | //// ATOM_PPLIB_NONCLOCK_INFO::usClassification2 | 7437 | //// ATOM_PPLIB_NONCLOCK_INFO::usClassification2 |
7424 | #define ATOM_PPLIB_CLASSIFICATION2_LIMITEDPOWERSOURCE_2 0x0001 | 7438 | #define ATOM_PPLIB_CLASSIFICATION2_LIMITEDPOWERSOURCE_2 0x0001 |
7425 | #define ATOM_PPLIB_CLASSIFICATION2_ULV 0x0002 | 7439 | #define ATOM_PPLIB_CLASSIFICATION2_ULV 0x0002 |
7440 | #define ATOM_PPLIB_CLASSIFICATION2_MVC 0x0004 //Multi-View Codec (BD-3D) | ||
7426 | 7441 | ||
7427 | //// ATOM_PPLIB_NONCLOCK_INFO::ulCapsAndSettings | 7442 | //// ATOM_PPLIB_NONCLOCK_INFO::ulCapsAndSettings |
7428 | #define ATOM_PPLIB_SINGLE_DISPLAY_ONLY 0x00000001 | 7443 | #define ATOM_PPLIB_SINGLE_DISPLAY_ONLY 0x00000001 |
@@ -7446,7 +7461,9 @@ typedef struct _ATOM_PPLIB_POWERPLAYTABLE5 | |||
7446 | 7461 | ||
7447 | #define ATOM_PPLIB_SOFTWARE_DISABLE_LOADBALANCING 0x00001000 | 7462 | #define ATOM_PPLIB_SOFTWARE_DISABLE_LOADBALANCING 0x00001000 |
7448 | #define ATOM_PPLIB_SOFTWARE_ENABLE_SLEEP_FOR_TIMESTAMPS 0x00002000 | 7463 | #define ATOM_PPLIB_SOFTWARE_ENABLE_SLEEP_FOR_TIMESTAMPS 0x00002000 |
7449 | #define ATOM_PPLIB_DISALLOW_ON_DC 0x00004000 | 7464 | |
7465 | #define ATOM_PPLIB_DISALLOW_ON_DC 0x00004000 | ||
7466 | |||
7450 | #define ATOM_PPLIB_ENABLE_VARIBRIGHT 0x00008000 | 7467 | #define ATOM_PPLIB_ENABLE_VARIBRIGHT 0x00008000 |
7451 | 7468 | ||
7452 | //memory related flags | 7469 | //memory related flags |
@@ -7508,7 +7525,7 @@ typedef struct _ATOM_PPLIB_R600_CLOCK_INFO | |||
7508 | #define ATOM_PPLIB_R600_FLAGS_UVDSAFE 2 | 7525 | #define ATOM_PPLIB_R600_FLAGS_UVDSAFE 2 |
7509 | #define ATOM_PPLIB_R600_FLAGS_BACKBIASENABLE 4 | 7526 | #define ATOM_PPLIB_R600_FLAGS_BACKBIASENABLE 4 |
7510 | #define ATOM_PPLIB_R600_FLAGS_MEMORY_ODT_OFF 8 | 7527 | #define ATOM_PPLIB_R600_FLAGS_MEMORY_ODT_OFF 8 |
7511 | #define ATOM_PPLIB_R600_FLAGS_MEMORY_DLL_OFF 16 | 7528 | #define ATOM_PPLIB_R600_FLAGS_MEMORY_DLL_OFF 16 |
7512 | #define ATOM_PPLIB_R600_FLAGS_LOWPOWER 32 // On the RV770 use 'low power' setting (sequencer S0). | 7529 | #define ATOM_PPLIB_R600_FLAGS_LOWPOWER 32 // On the RV770 use 'low power' setting (sequencer S0). |
7513 | 7530 | ||
7514 | typedef struct _ATOM_PPLIB_EVERGREEN_CLOCK_INFO | 7531 | typedef struct _ATOM_PPLIB_EVERGREEN_CLOCK_INFO |
@@ -7527,6 +7544,24 @@ typedef struct _ATOM_PPLIB_EVERGREEN_CLOCK_INFO | |||
7527 | 7544 | ||
7528 | } ATOM_PPLIB_EVERGREEN_CLOCK_INFO; | 7545 | } ATOM_PPLIB_EVERGREEN_CLOCK_INFO; |
7529 | 7546 | ||
7547 | typedef struct _ATOM_PPLIB_SI_CLOCK_INFO | ||
7548 | { | ||
7549 | USHORT usEngineClockLow; | ||
7550 | UCHAR ucEngineClockHigh; | ||
7551 | |||
7552 | USHORT usMemoryClockLow; | ||
7553 | UCHAR ucMemoryClockHigh; | ||
7554 | |||
7555 | USHORT usVDDC; | ||
7556 | USHORT usVDDCI; | ||
7557 | UCHAR ucPCIEGen; | ||
7558 | UCHAR ucUnused1; | ||
7559 | |||
7560 | ULONG ulFlags; // ATOM_PPLIB_SI_FLAGS_*, no flag is necessary for now | ||
7561 | |||
7562 | } ATOM_PPLIB_SI_CLOCK_INFO; | ||
7563 | |||
7564 | |||
7530 | typedef struct _ATOM_PPLIB_RS780_CLOCK_INFO | 7565 | typedef struct _ATOM_PPLIB_RS780_CLOCK_INFO |
7531 | 7566 | ||
7532 | { | 7567 | { |
@@ -7539,7 +7574,7 @@ typedef struct _ATOM_PPLIB_RS780_CLOCK_INFO | |||
7539 | UCHAR ucPadding; // For proper alignment and size. | 7574 | UCHAR ucPadding; // For proper alignment and size. |
7540 | USHORT usVDDC; // For the 780, use: None, Low, High, Variable | 7575 | USHORT usVDDC; // For the 780, use: None, Low, High, Variable |
7541 | UCHAR ucMaxHTLinkWidth; // From SBIOS - {2, 4, 8, 16} | 7576 | UCHAR ucMaxHTLinkWidth; // From SBIOS - {2, 4, 8, 16} |
7542 | UCHAR ucMinHTLinkWidth; // From SBIOS - {2, 4, 8, 16}. Effective only if CDLW enabled. Minimum down stream width could be bigger as display BW requirement. | 7577 | UCHAR ucMinHTLinkWidth; // From SBIOS - {2, 4, 8, 16}. Effective only if CDLW enabled. Minimum down stream width could be bigger as display BW requriement. |
7543 | USHORT usHTLinkFreq; // See definition ATOM_PPLIB_RS780_HTLINKFREQ_xxx or in MHz(>=200). | 7578 | USHORT usHTLinkFreq; // See definition ATOM_PPLIB_RS780_HTLINKFREQ_xxx or in MHz(>=200). |
7544 | ULONG ulFlags; | 7579 | ULONG ulFlags; |
7545 | } ATOM_PPLIB_RS780_CLOCK_INFO; | 7580 | } ATOM_PPLIB_RS780_CLOCK_INFO; |
@@ -7561,9 +7596,7 @@ typedef struct _ATOM_PPLIB_SUMO_CLOCK_INFO{ | |||
7561 | USHORT usEngineClockLow; //clockfrequency & 0xFFFF. The unit is in 10khz | 7596 | USHORT usEngineClockLow; //clockfrequency & 0xFFFF. The unit is in 10khz |
7562 | UCHAR ucEngineClockHigh; //clockfrequency >> 16. | 7597 | UCHAR ucEngineClockHigh; //clockfrequency >> 16. |
7563 | UCHAR vddcIndex; //2-bit vddc index; | 7598 | UCHAR vddcIndex; //2-bit vddc index; |
7564 | UCHAR leakage; //please use 8-bit absolute value, not the 6-bit % value | 7599 | USHORT tdpLimit; |
7565 | //please initalize to 0 | ||
7566 | UCHAR rsv; | ||
7567 | //please initalize to 0 | 7600 | //please initalize to 0 |
7568 | USHORT rsv1; | 7601 | USHORT rsv1; |
7569 | //please initialize to 0s | 7602 | //please initialize to 0s |
@@ -7586,7 +7619,7 @@ typedef struct _ATOM_PPLIB_STATE_V2 | |||
7586 | UCHAR clockInfoIndex[1]; | 7619 | UCHAR clockInfoIndex[1]; |
7587 | } ATOM_PPLIB_STATE_V2; | 7620 | } ATOM_PPLIB_STATE_V2; |
7588 | 7621 | ||
7589 | typedef struct StateArray{ | 7622 | typedef struct _StateArray{ |
7590 | //how many states we have | 7623 | //how many states we have |
7591 | UCHAR ucNumEntries; | 7624 | UCHAR ucNumEntries; |
7592 | 7625 | ||
@@ -7594,18 +7627,17 @@ typedef struct StateArray{ | |||
7594 | }StateArray; | 7627 | }StateArray; |
7595 | 7628 | ||
7596 | 7629 | ||
7597 | typedef struct ClockInfoArray{ | 7630 | typedef struct _ClockInfoArray{ |
7598 | //how many clock levels we have | 7631 | //how many clock levels we have |
7599 | UCHAR ucNumEntries; | 7632 | UCHAR ucNumEntries; |
7600 | 7633 | ||
7601 | //sizeof(ATOM_PPLIB_SUMO_CLOCK_INFO) | 7634 | //sizeof(ATOM_PPLIB_CLOCK_INFO) |
7602 | UCHAR ucEntrySize; | 7635 | UCHAR ucEntrySize; |
7603 | 7636 | ||
7604 | //this is for Sumo | 7637 | UCHAR clockInfo[1]; |
7605 | ATOM_PPLIB_SUMO_CLOCK_INFO clockInfo[1]; | ||
7606 | }ClockInfoArray; | 7638 | }ClockInfoArray; |
7607 | 7639 | ||
7608 | typedef struct NonClockInfoArray{ | 7640 | typedef struct _NonClockInfoArray{ |
7609 | 7641 | ||
7610 | //how many non-clock levels we have. normally should be same as number of states | 7642 | //how many non-clock levels we have. normally should be same as number of states |
7611 | UCHAR ucNumEntries; | 7643 | UCHAR ucNumEntries; |
@@ -7644,6 +7676,124 @@ typedef struct _ATOM_PPLIB_Clock_Voltage_Limit_Table | |||
7644 | ATOM_PPLIB_Clock_Voltage_Limit_Record entries[1]; // Dynamically allocate entries. | 7676 | ATOM_PPLIB_Clock_Voltage_Limit_Record entries[1]; // Dynamically allocate entries. |
7645 | }ATOM_PPLIB_Clock_Voltage_Limit_Table; | 7677 | }ATOM_PPLIB_Clock_Voltage_Limit_Table; |
7646 | 7678 | ||
7679 | typedef struct _ATOM_PPLIB_CAC_Leakage_Record | ||
7680 | { | ||
7681 | USHORT usVddc; // We use this field for the "fake" standardized VDDC for power calculations | ||
7682 | ULONG ulLeakageValue; | ||
7683 | }ATOM_PPLIB_CAC_Leakage_Record; | ||
7684 | |||
7685 | typedef struct _ATOM_PPLIB_CAC_Leakage_Table | ||
7686 | { | ||
7687 | UCHAR ucNumEntries; // Number of entries. | ||
7688 | ATOM_PPLIB_CAC_Leakage_Record entries[1]; // Dynamically allocate entries. | ||
7689 | }ATOM_PPLIB_CAC_Leakage_Table; | ||
7690 | |||
7691 | typedef struct _ATOM_PPLIB_PhaseSheddingLimits_Record | ||
7692 | { | ||
7693 | USHORT usVoltage; | ||
7694 | USHORT usSclkLow; | ||
7695 | UCHAR ucSclkHigh; | ||
7696 | USHORT usMclkLow; | ||
7697 | UCHAR ucMclkHigh; | ||
7698 | }ATOM_PPLIB_PhaseSheddingLimits_Record; | ||
7699 | |||
7700 | typedef struct _ATOM_PPLIB_PhaseSheddingLimits_Table | ||
7701 | { | ||
7702 | UCHAR ucNumEntries; // Number of entries. | ||
7703 | ATOM_PPLIB_PhaseSheddingLimits_Record entries[1]; // Dynamically allocate entries. | ||
7704 | }ATOM_PPLIB_PhaseSheddingLimits_Table; | ||
7705 | |||
7706 | typedef struct _VCEClockInfo{ | ||
7707 | USHORT usEVClkLow; | ||
7708 | UCHAR ucEVClkHigh; | ||
7709 | USHORT usECClkLow; | ||
7710 | UCHAR ucECClkHigh; | ||
7711 | }VCEClockInfo; | ||
7712 | |||
7713 | typedef struct _VCEClockInfoArray{ | ||
7714 | UCHAR ucNumEntries; | ||
7715 | VCEClockInfo entries[1]; | ||
7716 | }VCEClockInfoArray; | ||
7717 | |||
7718 | typedef struct _ATOM_PPLIB_VCE_Clock_Voltage_Limit_Record | ||
7719 | { | ||
7720 | USHORT usVoltage; | ||
7721 | UCHAR ucVCEClockInfoIndex; | ||
7722 | }ATOM_PPLIB_VCE_Clock_Voltage_Limit_Record; | ||
7723 | |||
7724 | typedef struct _ATOM_PPLIB_VCE_Clock_Voltage_Limit_Table | ||
7725 | { | ||
7726 | UCHAR numEntries; | ||
7727 | ATOM_PPLIB_VCE_Clock_Voltage_Limit_Record entries[1]; | ||
7728 | }ATOM_PPLIB_VCE_Clock_Voltage_Limit_Table; | ||
7729 | |||
7730 | typedef struct _ATOM_PPLIB_VCE_State_Record | ||
7731 | { | ||
7732 | UCHAR ucVCEClockInfoIndex; | ||
7733 | UCHAR ucClockInfoIndex; //highest 2 bits indicates memory p-states, lower 6bits indicates index to ClockInfoArrary | ||
7734 | }ATOM_PPLIB_VCE_State_Record; | ||
7735 | |||
7736 | typedef struct _ATOM_PPLIB_VCE_State_Table | ||
7737 | { | ||
7738 | UCHAR numEntries; | ||
7739 | ATOM_PPLIB_VCE_State_Record entries[1]; | ||
7740 | }ATOM_PPLIB_VCE_State_Table; | ||
7741 | |||
7742 | |||
7743 | typedef struct _ATOM_PPLIB_VCE_Table | ||
7744 | { | ||
7745 | UCHAR revid; | ||
7746 | // VCEClockInfoArray array; | ||
7747 | // ATOM_PPLIB_VCE_Clock_Voltage_Limit_Table limits; | ||
7748 | // ATOM_PPLIB_VCE_State_Table states; | ||
7749 | }ATOM_PPLIB_VCE_Table; | ||
7750 | |||
7751 | |||
7752 | typedef struct _UVDClockInfo{ | ||
7753 | USHORT usVClkLow; | ||
7754 | UCHAR ucVClkHigh; | ||
7755 | USHORT usDClkLow; | ||
7756 | UCHAR ucDClkHigh; | ||
7757 | }UVDClockInfo; | ||
7758 | |||
7759 | typedef struct _UVDClockInfoArray{ | ||
7760 | UCHAR ucNumEntries; | ||
7761 | UVDClockInfo entries[1]; | ||
7762 | }UVDClockInfoArray; | ||
7763 | |||
7764 | typedef struct _ATOM_PPLIB_UVD_Clock_Voltage_Limit_Record | ||
7765 | { | ||
7766 | USHORT usVoltage; | ||
7767 | UCHAR ucUVDClockInfoIndex; | ||
7768 | }ATOM_PPLIB_UVD_Clock_Voltage_Limit_Record; | ||
7769 | |||
7770 | typedef struct _ATOM_PPLIB_UVD_Clock_Voltage_Limit_Table | ||
7771 | { | ||
7772 | UCHAR numEntries; | ||
7773 | ATOM_PPLIB_UVD_Clock_Voltage_Limit_Record entries[1]; | ||
7774 | }ATOM_PPLIB_UVD_Clock_Voltage_Limit_Table; | ||
7775 | |||
7776 | typedef struct _ATOM_PPLIB_UVD_State_Record | ||
7777 | { | ||
7778 | UCHAR ucUVDClockInfoIndex; | ||
7779 | UCHAR ucClockInfoIndex; //highest 2 bits indicates memory p-states, lower 6bits indicates index to ClockInfoArrary | ||
7780 | }ATOM_PPLIB_UVD_State_Record; | ||
7781 | |||
7782 | typedef struct _ATOM_PPLIB_UVD_State_Table | ||
7783 | { | ||
7784 | UCHAR numEntries; | ||
7785 | ATOM_PPLIB_UVD_State_Record entries[1]; | ||
7786 | }ATOM_PPLIB_UVD_State_Table; | ||
7787 | |||
7788 | |||
7789 | typedef struct _ATOM_PPLIB_UVD_Table | ||
7790 | { | ||
7791 | UCHAR revid; | ||
7792 | // UVDClockInfoArray array; | ||
7793 | // ATOM_PPLIB_UVD_Clock_Voltage_Limit_Table limits; | ||
7794 | // ATOM_PPLIB_UVD_State_Table states; | ||
7795 | }ATOM_PPLIB_UVD_Table; | ||
7796 | |||
7647 | /**************************************************************************/ | 7797 | /**************************************************************************/ |
7648 | 7798 | ||
7649 | 7799 | ||
diff --git a/drivers/gpu/drm/radeon/radeon_atombios.c b/drivers/gpu/drm/radeon/radeon_atombios.c index 73541373bf56..2554611e167c 100644 --- a/drivers/gpu/drm/radeon/radeon_atombios.c +++ b/drivers/gpu/drm/radeon/radeon_atombios.c | |||
@@ -2433,9 +2433,9 @@ static int radeon_atombios_parse_power_table_6(struct radeon_device *rdev) | |||
2433 | int i, j, non_clock_array_index, clock_array_index; | 2433 | int i, j, non_clock_array_index, clock_array_index; |
2434 | int state_index = 0, mode_index = 0; | 2434 | int state_index = 0, mode_index = 0; |
2435 | union pplib_clock_info *clock_info; | 2435 | union pplib_clock_info *clock_info; |
2436 | struct StateArray *state_array; | 2436 | struct _StateArray *state_array; |
2437 | struct ClockInfoArray *clock_info_array; | 2437 | struct _ClockInfoArray *clock_info_array; |
2438 | struct NonClockInfoArray *non_clock_info_array; | 2438 | struct _NonClockInfoArray *non_clock_info_array; |
2439 | bool valid; | 2439 | bool valid; |
2440 | union power_info *power_info; | 2440 | union power_info *power_info; |
2441 | int index = GetIndexIntoMasterTable(DATA, PowerPlayInfo); | 2441 | int index = GetIndexIntoMasterTable(DATA, PowerPlayInfo); |
@@ -2448,13 +2448,13 @@ static int radeon_atombios_parse_power_table_6(struct radeon_device *rdev) | |||
2448 | power_info = (union power_info *)(mode_info->atom_context->bios + data_offset); | 2448 | power_info = (union power_info *)(mode_info->atom_context->bios + data_offset); |
2449 | 2449 | ||
2450 | radeon_atombios_add_pplib_thermal_controller(rdev, &power_info->pplib.sThermalController); | 2450 | radeon_atombios_add_pplib_thermal_controller(rdev, &power_info->pplib.sThermalController); |
2451 | state_array = (struct StateArray *) | 2451 | state_array = (struct _StateArray *) |
2452 | (mode_info->atom_context->bios + data_offset + | 2452 | (mode_info->atom_context->bios + data_offset + |
2453 | le16_to_cpu(power_info->pplib.usStateArrayOffset)); | 2453 | le16_to_cpu(power_info->pplib.usStateArrayOffset)); |
2454 | clock_info_array = (struct ClockInfoArray *) | 2454 | clock_info_array = (struct _ClockInfoArray *) |
2455 | (mode_info->atom_context->bios + data_offset + | 2455 | (mode_info->atom_context->bios + data_offset + |
2456 | le16_to_cpu(power_info->pplib.usClockInfoArrayOffset)); | 2456 | le16_to_cpu(power_info->pplib.usClockInfoArrayOffset)); |
2457 | non_clock_info_array = (struct NonClockInfoArray *) | 2457 | non_clock_info_array = (struct _NonClockInfoArray *) |
2458 | (mode_info->atom_context->bios + data_offset + | 2458 | (mode_info->atom_context->bios + data_offset + |
2459 | le16_to_cpu(power_info->pplib.usNonClockInfoArrayOffset)); | 2459 | le16_to_cpu(power_info->pplib.usNonClockInfoArrayOffset)); |
2460 | rdev->pm.power_state = kzalloc(sizeof(struct radeon_power_state) * | 2460 | rdev->pm.power_state = kzalloc(sizeof(struct radeon_power_state) * |
@@ -2481,7 +2481,7 @@ static int radeon_atombios_parse_power_table_6(struct radeon_device *rdev) | |||
2481 | if (clock_array_index >= clock_info_array->ucNumEntries) | 2481 | if (clock_array_index >= clock_info_array->ucNumEntries) |
2482 | continue; | 2482 | continue; |
2483 | clock_info = (union pplib_clock_info *) | 2483 | clock_info = (union pplib_clock_info *) |
2484 | &clock_info_array->clockInfo[clock_array_index]; | 2484 | &clock_info_array->clockInfo[clock_array_index * clock_info_array->ucEntrySize]; |
2485 | valid = radeon_atombios_parse_pplib_clock_info(rdev, | 2485 | valid = radeon_atombios_parse_pplib_clock_info(rdev, |
2486 | state_index, mode_index, | 2486 | state_index, mode_index, |
2487 | clock_info); | 2487 | clock_info); |