diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/radeon_atombios.c')
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_atombios.c | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_atombios.c b/drivers/gpu/drm/radeon/radeon_atombios.c index 2f5925d3662a..f48bd6dc10cd 100644 --- a/drivers/gpu/drm/radeon/radeon_atombios.c +++ b/drivers/gpu/drm/radeon/radeon_atombios.c | |||
@@ -1511,6 +1511,7 @@ bool radeon_atombios_get_asic_ss_info(struct radeon_device *rdev, | |||
1511 | le16_to_cpu(ss_assign->v1.usSpreadSpectrumPercentage); | 1511 | le16_to_cpu(ss_assign->v1.usSpreadSpectrumPercentage); |
1512 | ss->type = ss_assign->v1.ucSpreadSpectrumMode; | 1512 | ss->type = ss_assign->v1.ucSpreadSpectrumMode; |
1513 | ss->rate = le16_to_cpu(ss_assign->v1.usSpreadRateInKhz); | 1513 | ss->rate = le16_to_cpu(ss_assign->v1.usSpreadRateInKhz); |
1514 | ss->percentage_divider = 100; | ||
1514 | return true; | 1515 | return true; |
1515 | } | 1516 | } |
1516 | ss_assign = (union asic_ss_assignment *) | 1517 | ss_assign = (union asic_ss_assignment *) |
@@ -1528,6 +1529,7 @@ bool radeon_atombios_get_asic_ss_info(struct radeon_device *rdev, | |||
1528 | le16_to_cpu(ss_assign->v2.usSpreadSpectrumPercentage); | 1529 | le16_to_cpu(ss_assign->v2.usSpreadSpectrumPercentage); |
1529 | ss->type = ss_assign->v2.ucSpreadSpectrumMode; | 1530 | ss->type = ss_assign->v2.ucSpreadSpectrumMode; |
1530 | ss->rate = le16_to_cpu(ss_assign->v2.usSpreadRateIn10Hz); | 1531 | ss->rate = le16_to_cpu(ss_assign->v2.usSpreadRateIn10Hz); |
1532 | ss->percentage_divider = 100; | ||
1531 | if ((crev == 2) && | 1533 | if ((crev == 2) && |
1532 | ((id == ASIC_INTERNAL_ENGINE_SS) || | 1534 | ((id == ASIC_INTERNAL_ENGINE_SS) || |
1533 | (id == ASIC_INTERNAL_MEMORY_SS))) | 1535 | (id == ASIC_INTERNAL_MEMORY_SS))) |
@@ -1549,6 +1551,11 @@ bool radeon_atombios_get_asic_ss_info(struct radeon_device *rdev, | |||
1549 | le16_to_cpu(ss_assign->v3.usSpreadSpectrumPercentage); | 1551 | le16_to_cpu(ss_assign->v3.usSpreadSpectrumPercentage); |
1550 | ss->type = ss_assign->v3.ucSpreadSpectrumMode; | 1552 | ss->type = ss_assign->v3.ucSpreadSpectrumMode; |
1551 | ss->rate = le16_to_cpu(ss_assign->v3.usSpreadRateIn10Hz); | 1553 | ss->rate = le16_to_cpu(ss_assign->v3.usSpreadRateIn10Hz); |
1554 | if (ss_assign->v3.ucSpreadSpectrumMode & | ||
1555 | SS_MODE_V3_PERCENTAGE_DIV_BY_1000_MASK) | ||
1556 | ss->percentage_divider = 1000; | ||
1557 | else | ||
1558 | ss->percentage_divider = 100; | ||
1552 | if ((id == ASIC_INTERNAL_ENGINE_SS) || | 1559 | if ((id == ASIC_INTERNAL_ENGINE_SS) || |
1553 | (id == ASIC_INTERNAL_MEMORY_SS)) | 1560 | (id == ASIC_INTERNAL_MEMORY_SS)) |
1554 | ss->rate /= 100; | 1561 | ss->rate /= 100; |
@@ -3869,16 +3876,18 @@ int radeon_atom_init_mc_reg_table(struct radeon_device *rdev, | |||
3869 | ((u8 *)format + sizeof(ATOM_INIT_REG_INDEX_FORMAT)); | 3876 | ((u8 *)format + sizeof(ATOM_INIT_REG_INDEX_FORMAT)); |
3870 | } | 3877 | } |
3871 | reg_table->last = i; | 3878 | reg_table->last = i; |
3872 | while ((*(u32 *)reg_data != END_OF_REG_DATA_BLOCK) && | 3879 | while ((le32_to_cpu(*(u32 *)reg_data) != END_OF_REG_DATA_BLOCK) && |
3873 | (num_ranges < VBIOS_MAX_AC_TIMING_ENTRIES)) { | 3880 | (num_ranges < VBIOS_MAX_AC_TIMING_ENTRIES)) { |
3874 | t_mem_id = (u8)((*(u32 *)reg_data & MEM_ID_MASK) >> MEM_ID_SHIFT); | 3881 | t_mem_id = (u8)((le32_to_cpu(*(u32 *)reg_data) & MEM_ID_MASK) |
3882 | >> MEM_ID_SHIFT); | ||
3875 | if (module_index == t_mem_id) { | 3883 | if (module_index == t_mem_id) { |
3876 | reg_table->mc_reg_table_entry[num_ranges].mclk_max = | 3884 | reg_table->mc_reg_table_entry[num_ranges].mclk_max = |
3877 | (u32)((*(u32 *)reg_data & CLOCK_RANGE_MASK) >> CLOCK_RANGE_SHIFT); | 3885 | (u32)((le32_to_cpu(*(u32 *)reg_data) & CLOCK_RANGE_MASK) |
3886 | >> CLOCK_RANGE_SHIFT); | ||
3878 | for (i = 0, j = 1; i < reg_table->last; i++) { | 3887 | for (i = 0, j = 1; i < reg_table->last; i++) { |
3879 | if ((reg_table->mc_reg_address[i].pre_reg_data & LOW_NIBBLE_MASK) == DATA_FROM_TABLE) { | 3888 | if ((reg_table->mc_reg_address[i].pre_reg_data & LOW_NIBBLE_MASK) == DATA_FROM_TABLE) { |
3880 | reg_table->mc_reg_table_entry[num_ranges].mc_data[i] = | 3889 | reg_table->mc_reg_table_entry[num_ranges].mc_data[i] = |
3881 | (u32)*((u32 *)reg_data + j); | 3890 | (u32)le32_to_cpu(*((u32 *)reg_data + j)); |
3882 | j++; | 3891 | j++; |
3883 | } else if ((reg_table->mc_reg_address[i].pre_reg_data & LOW_NIBBLE_MASK) == DATA_EQU_PREV) { | 3892 | } else if ((reg_table->mc_reg_address[i].pre_reg_data & LOW_NIBBLE_MASK) == DATA_EQU_PREV) { |
3884 | reg_table->mc_reg_table_entry[num_ranges].mc_data[i] = | 3893 | reg_table->mc_reg_table_entry[num_ranges].mc_data[i] = |
@@ -3890,7 +3899,7 @@ int radeon_atom_init_mc_reg_table(struct radeon_device *rdev, | |||
3890 | reg_data = (ATOM_MEMORY_SETTING_DATA_BLOCK *) | 3899 | reg_data = (ATOM_MEMORY_SETTING_DATA_BLOCK *) |
3891 | ((u8 *)reg_data + le16_to_cpu(reg_block->usRegDataBlkSize)); | 3900 | ((u8 *)reg_data + le16_to_cpu(reg_block->usRegDataBlkSize)); |
3892 | } | 3901 | } |
3893 | if (*(u32 *)reg_data != END_OF_REG_DATA_BLOCK) | 3902 | if (le32_to_cpu(*(u32 *)reg_data) != END_OF_REG_DATA_BLOCK) |
3894 | return -EINVAL; | 3903 | return -EINVAL; |
3895 | reg_table->num_entries = num_ranges; | 3904 | reg_table->num_entries = num_ranges; |
3896 | } else | 3905 | } else |