aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/radeon/radeon_atombios.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/radeon/radeon_atombios.c')
-rw-r--r--drivers/gpu/drm/radeon/radeon_atombios.c19
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