| .. | .. |
|---|
| 21 | 21 | * |
|---|
| 22 | 22 | */ |
|---|
| 23 | 23 | |
|---|
| 24 | | -#include <drm/drmP.h> |
|---|
| 25 | | -#include "radeon.h" |
|---|
| 26 | | -#include "radeon_asic.h" |
|---|
| 24 | +#include <linux/math64.h> |
|---|
| 25 | +#include <linux/pci.h> |
|---|
| 26 | +#include <linux/seq_file.h> |
|---|
| 27 | + |
|---|
| 28 | +#include "atom.h" |
|---|
| 29 | +#include "ni_dpm.h" |
|---|
| 27 | 30 | #include "nid.h" |
|---|
| 28 | 31 | #include "r600_dpm.h" |
|---|
| 29 | | -#include "ni_dpm.h" |
|---|
| 30 | | -#include "atom.h" |
|---|
| 31 | | -#include <linux/math64.h> |
|---|
| 32 | | -#include <linux/seq_file.h> |
|---|
| 32 | +#include "radeon.h" |
|---|
| 33 | +#include "radeon_asic.h" |
|---|
| 33 | 34 | |
|---|
| 34 | 35 | #define MC_CG_ARB_FREQ_F0 0x0a |
|---|
| 35 | 36 | #define MC_CG_ARB_FREQ_F1 0x0b |
|---|
| .. | .. |
|---|
| 2684 | 2685 | struct rv7xx_power_info *pi = rv770_get_pi(rdev); |
|---|
| 2685 | 2686 | u16 address = pi->state_table_start + |
|---|
| 2686 | 2687 | offsetof(NISLANDS_SMC_STATETABLE, driverState); |
|---|
| 2687 | | - u16 state_size = sizeof(NISLANDS_SMC_SWSTATE) + |
|---|
| 2688 | | - ((NISLANDS_MAX_SMC_PERFORMANCE_LEVELS_PER_SWSTATE - 1) * sizeof(NISLANDS_SMC_HW_PERFORMANCE_LEVEL)); |
|---|
| 2688 | + NISLANDS_SMC_SWSTATE *smc_state; |
|---|
| 2689 | + size_t state_size = struct_size(smc_state, levels, |
|---|
| 2690 | + NISLANDS_MAX_SMC_PERFORMANCE_LEVELS_PER_SWSTATE); |
|---|
| 2689 | 2691 | int ret; |
|---|
| 2690 | | - NISLANDS_SMC_SWSTATE *smc_state = kzalloc(state_size, GFP_KERNEL); |
|---|
| 2691 | 2692 | |
|---|
| 2693 | + smc_state = kzalloc(state_size, GFP_KERNEL); |
|---|
| 2692 | 2694 | if (smc_state == NULL) |
|---|
| 2693 | 2695 | return -ENOMEM; |
|---|
| 2694 | 2696 | |
|---|
| .. | .. |
|---|
| 2738 | 2740 | table->mc_reg_table_entry[k].mc_data[j] |= 0x100; |
|---|
| 2739 | 2741 | } |
|---|
| 2740 | 2742 | j++; |
|---|
| 2741 | | - if (j > SMC_NISLANDS_MC_REGISTER_ARRAY_SIZE) |
|---|
| 2742 | | - return -EINVAL; |
|---|
| 2743 | 2743 | break; |
|---|
| 2744 | 2744 | case MC_SEQ_RESERVE_M >> 2: |
|---|
| 2745 | + if (j >= SMC_NISLANDS_MC_REGISTER_ARRAY_SIZE) |
|---|
| 2746 | + return -EINVAL; |
|---|
| 2745 | 2747 | temp_reg = RREG32(MC_PMG_CMD_MRS1); |
|---|
| 2746 | 2748 | table->mc_reg_address[j].s1 = MC_PMG_CMD_MRS1 >> 2; |
|---|
| 2747 | 2749 | table->mc_reg_address[j].s0 = MC_SEQ_PMG_CMD_MRS1_LP >> 2; |
|---|
| .. | .. |
|---|
| 2750 | 2752 | (temp_reg & 0xffff0000) | |
|---|
| 2751 | 2753 | (table->mc_reg_table_entry[k].mc_data[i] & 0x0000ffff); |
|---|
| 2752 | 2754 | j++; |
|---|
| 2753 | | - if (j > SMC_NISLANDS_MC_REGISTER_ARRAY_SIZE) |
|---|
| 2754 | | - return -EINVAL; |
|---|
| 2755 | 2755 | break; |
|---|
| 2756 | 2756 | default: |
|---|
| 2757 | 2757 | break; |
|---|