aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm
diff options
context:
space:
mode:
authorAlex Deucher <alexander.deucher@amd.com>2012-03-20 17:17:58 -0400
committerDave Airlie <airlied@redhat.com>2012-03-21 02:55:50 -0400
commitf73468810ec2492b1bc99da87956023935de4805 (patch)
treebd0d42da81b3c4386f49aaf48dc101e24ab602d1 /drivers/gpu/drm
parentbf68adb4df2ac27a8f1b24894c007c9ef1c4195a (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.h180
-rw-r--r--drivers/gpu/drm/radeon/radeon_atombios.c14
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
7288typedef struct _ATOM_PPLIB_FANTABLE 7291typedef 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
7303typedef struct _ATOM_PPLIB_FANTABLE2
7304{
7305 ATOM_PPLIB_FANTABLE basicTable;
7306 USHORT usTMax; // The max temperature
7307} ATOM_PPLIB_FANTABLE2;
7308
7300typedef struct _ATOM_PPLIB_EXTENDEDHEADER 7309typedef 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
7328typedef struct _ATOM_PPLIB_POWERPLAYTABLE 7340typedef 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
7389typedef struct _ATOM_PPLIB_POWERPLAYTABLE5 7402typedef 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
7514typedef struct _ATOM_PPLIB_EVERGREEN_CLOCK_INFO 7531typedef 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
7547typedef 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
7530typedef struct _ATOM_PPLIB_RS780_CLOCK_INFO 7565typedef 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
7589typedef struct StateArray{ 7622typedef 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
7597typedef struct ClockInfoArray{ 7630typedef 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
7608typedef struct NonClockInfoArray{ 7640typedef 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
7679typedef 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
7685typedef 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
7691typedef 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
7700typedef 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
7706typedef struct _VCEClockInfo{
7707 USHORT usEVClkLow;
7708 UCHAR ucEVClkHigh;
7709 USHORT usECClkLow;
7710 UCHAR ucECClkHigh;
7711}VCEClockInfo;
7712
7713typedef struct _VCEClockInfoArray{
7714 UCHAR ucNumEntries;
7715 VCEClockInfo entries[1];
7716}VCEClockInfoArray;
7717
7718typedef struct _ATOM_PPLIB_VCE_Clock_Voltage_Limit_Record
7719{
7720 USHORT usVoltage;
7721 UCHAR ucVCEClockInfoIndex;
7722}ATOM_PPLIB_VCE_Clock_Voltage_Limit_Record;
7723
7724typedef 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
7730typedef 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
7736typedef 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
7743typedef 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
7752typedef struct _UVDClockInfo{
7753 USHORT usVClkLow;
7754 UCHAR ucVClkHigh;
7755 USHORT usDClkLow;
7756 UCHAR ucDClkHigh;
7757}UVDClockInfo;
7758
7759typedef struct _UVDClockInfoArray{
7760 UCHAR ucNumEntries;
7761 UVDClockInfo entries[1];
7762}UVDClockInfoArray;
7763
7764typedef struct _ATOM_PPLIB_UVD_Clock_Voltage_Limit_Record
7765{
7766 USHORT usVoltage;
7767 UCHAR ucUVDClockInfoIndex;
7768}ATOM_PPLIB_UVD_Clock_Voltage_Limit_Record;
7769
7770typedef 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
7776typedef 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
7782typedef 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
7789typedef 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);