#include "radeon.h"
#include "radeon_asic.h"
#include "rv6xxd.h"
#include "r600_dpm.h"
#include "rv6xx_dpm.h"
#include "atom.h"
#include <linux/seq_file.h>
static u32 rv6xx_scale_count_given_unit(struct radeon_device *rdev,
u32 unscaled_count, u32 unit);
static struct rv6xx_ps *rv6xx_get_ps(struct radeon_ps *rps)
{ … }
static struct rv6xx_power_info *rv6xx_get_pi(struct radeon_device *rdev)
{ … }
static void rv6xx_force_pcie_gen1(struct radeon_device *rdev)
{ … }
static void rv6xx_enable_pcie_gen2_support(struct radeon_device *rdev)
{ … }
static void rv6xx_enable_bif_dynamic_pcie_gen2(struct radeon_device *rdev,
bool enable)
{ … }
static void rv6xx_enable_l0s(struct radeon_device *rdev)
{ … }
static void rv6xx_enable_l1(struct radeon_device *rdev)
{ … }
static void rv6xx_enable_pll_sleep_in_l1(struct radeon_device *rdev)
{ … }
static int rv6xx_convert_clock_to_stepping(struct radeon_device *rdev,
u32 clock, struct rv6xx_sclk_stepping *step)
{ … }
static void rv6xx_output_stepping(struct radeon_device *rdev,
u32 step_index, struct rv6xx_sclk_stepping *step)
{ … }
static struct rv6xx_sclk_stepping rv6xx_next_vco_step(struct radeon_device *rdev,
struct rv6xx_sclk_stepping *cur,
bool increasing_vco, u32 step_size)
{ … }
static bool rv6xx_can_step_post_div(struct radeon_device *rdev,
struct rv6xx_sclk_stepping *cur,
struct rv6xx_sclk_stepping *target)
{ … }
static struct rv6xx_sclk_stepping rv6xx_next_post_div_step(struct radeon_device *rdev,
struct rv6xx_sclk_stepping *cur,
struct rv6xx_sclk_stepping *target)
{ … }
static bool rv6xx_reached_stepping_target(struct radeon_device *rdev,
struct rv6xx_sclk_stepping *cur,
struct rv6xx_sclk_stepping *target,
bool increasing_vco)
{ … }
static void rv6xx_generate_steps(struct radeon_device *rdev,
u32 low, u32 high,
u32 start_index, u8 *end_index)
{ … }
static void rv6xx_generate_single_step(struct radeon_device *rdev,
u32 clock, u32 index)
{ … }
static void rv6xx_invalidate_intermediate_steps_range(struct radeon_device *rdev,
u32 start_index, u32 end_index)
{ … }
static void rv6xx_set_engine_spread_spectrum_clk_s(struct radeon_device *rdev,
u32 index, u32 clk_s)
{ … }
static void rv6xx_set_engine_spread_spectrum_clk_v(struct radeon_device *rdev,
u32 index, u32 clk_v)
{ … }
static void rv6xx_enable_engine_spread_spectrum(struct radeon_device *rdev,
u32 index, bool enable)
{ … }
static void rv6xx_set_memory_spread_spectrum_clk_s(struct radeon_device *rdev,
u32 clk_s)
{ … }
static void rv6xx_set_memory_spread_spectrum_clk_v(struct radeon_device *rdev,
u32 clk_v)
{ … }
static void rv6xx_enable_memory_spread_spectrum(struct radeon_device *rdev,
bool enable)
{ … }
static void rv6xx_enable_dynamic_spread_spectrum(struct radeon_device *rdev,
bool enable)
{ … }
static void rv6xx_memory_clock_entry_enable_post_divider(struct radeon_device *rdev,
u32 index, bool enable)
{ … }
static void rv6xx_memory_clock_entry_set_post_divider(struct radeon_device *rdev,
u32 index, u32 divider)
{ … }
static void rv6xx_memory_clock_entry_set_feedback_divider(struct radeon_device *rdev,
u32 index, u32 divider)
{ … }
static void rv6xx_memory_clock_entry_set_reference_divider(struct radeon_device *rdev,
u32 index, u32 divider)
{ … }
static void rv6xx_vid_response_set_brt(struct radeon_device *rdev, u32 rt)
{ … }
static void rv6xx_enable_engine_feedback_and_reference_sync(struct radeon_device *rdev)
{ … }
static u32 rv6xx_clocks_per_unit(u32 unit)
{ … }
static u32 rv6xx_scale_count_given_unit(struct radeon_device *rdev,
u32 unscaled_count, u32 unit)
{ … }
static u32 rv6xx_compute_count_for_delay(struct radeon_device *rdev,
u32 delay_us, u32 unit)
{ … }
static void rv6xx_calculate_engine_speed_stepping_parameters(struct radeon_device *rdev,
struct rv6xx_ps *state)
{ … }
static void rv6xx_calculate_memory_clock_stepping_parameters(struct radeon_device *rdev,
struct rv6xx_ps *state)
{ … }
static void rv6xx_calculate_voltage_stepping_parameters(struct radeon_device *rdev,
struct rv6xx_ps *state)
{ … }
static inline u32 rv6xx_calculate_vco_frequency(u32 ref_clock,
struct atom_clock_dividers *dividers,
u32 fb_divider_scale)
{ … }
static inline u32 rv6xx_calculate_spread_spectrum_clk_v(u32 vco_freq, u32 ref_freq,
u32 ss_rate, u32 ss_percent,
u32 fb_divider_scale)
{ … }
static inline u32 rv6xx_calculate_spread_spectrum_clk_s(u32 ss_rate, u32 ref_freq)
{ … }
static void rv6xx_program_engine_spread_spectrum(struct radeon_device *rdev,
u32 clock, enum r600_power_level level)
{ … }
static void rv6xx_program_sclk_spread_spectrum_parameters_except_lowest_entry(struct radeon_device *rdev)
{ … }
static int rv6xx_program_mclk_stepping_entry(struct radeon_device *rdev,
u32 entry, u32 clock)
{ … }
static void rv6xx_program_mclk_stepping_parameters_except_lowest_entry(struct radeon_device *rdev)
{ … }
static void rv6xx_find_memory_clock_with_highest_vco(struct radeon_device *rdev,
u32 requested_memory_clock,
u32 ref_clk,
struct atom_clock_dividers *dividers,
u32 *vco_freq)
{ … }
static void rv6xx_program_mclk_spread_spectrum_parameters(struct radeon_device *rdev)
{ … }
static int rv6xx_program_voltage_stepping_entry(struct radeon_device *rdev,
u32 entry, u16 voltage)
{ … }
static void rv6xx_program_voltage_stepping_parameters_except_lowest_entry(struct radeon_device *rdev)
{ … }
static void rv6xx_program_backbias_stepping_parameters_except_lowest_entry(struct radeon_device *rdev)
{ … }
static void rv6xx_program_sclk_spread_spectrum_parameters_lowest_entry(struct radeon_device *rdev)
{ … }
static void rv6xx_program_mclk_stepping_parameters_lowest_entry(struct radeon_device *rdev)
{ … }
static void rv6xx_program_voltage_stepping_parameters_lowest_entry(struct radeon_device *rdev)
{ … }
static void rv6xx_program_backbias_stepping_parameters_lowest_entry(struct radeon_device *rdev)
{ … }
static u32 calculate_memory_refresh_rate(struct radeon_device *rdev,
u32 engine_clock)
{ … }
static void rv6xx_program_memory_timing_parameters(struct radeon_device *rdev)
{ … }
static void rv6xx_program_mpll_timing_parameters(struct radeon_device *rdev)
{ … }
static void rv6xx_program_bsp(struct radeon_device *rdev)
{ … }
static void rv6xx_program_at(struct radeon_device *rdev)
{ … }
static void rv6xx_program_git(struct radeon_device *rdev)
{ … }
static void rv6xx_program_tp(struct radeon_device *rdev)
{ … }
static void rv6xx_program_vc(struct radeon_device *rdev)
{ … }
static void rv6xx_clear_vc(struct radeon_device *rdev)
{ … }
static void rv6xx_program_tpp(struct radeon_device *rdev)
{ … }
static void rv6xx_program_sstp(struct radeon_device *rdev)
{ … }
static void rv6xx_program_fcp(struct radeon_device *rdev)
{ … }
static void rv6xx_program_vddc3d_parameters(struct radeon_device *rdev)
{ … }
static void rv6xx_program_voltage_timing_parameters(struct radeon_device *rdev)
{ … }
static void rv6xx_program_engine_speed_parameters(struct radeon_device *rdev)
{ … }
static u64 rv6xx_get_master_voltage_mask(struct radeon_device *rdev)
{ … }
static void rv6xx_program_voltage_gpio_pins(struct radeon_device *rdev)
{ … }
static void rv6xx_enable_static_voltage_control(struct radeon_device *rdev,
struct radeon_ps *new_ps,
bool enable)
{ … }
static void rv6xx_enable_display_gap(struct radeon_device *rdev, bool enable)
{ … }
static void rv6xx_program_power_level_enter_state(struct radeon_device *rdev)
{ … }
static void rv6xx_calculate_t(u32 l_f, u32 h_f, int h,
int d_l, int d_r, u8 *l, u8 *r)
{ … }
static void rv6xx_calculate_ap(struct radeon_device *rdev,
struct rv6xx_ps *state)
{ … }
static void rv6xx_calculate_stepping_parameters(struct radeon_device *rdev,
struct radeon_ps *new_ps)
{ … }
static void rv6xx_program_stepping_parameters_except_lowest_entry(struct radeon_device *rdev)
{ … }
static void rv6xx_program_stepping_parameters_lowest_entry(struct radeon_device *rdev)
{ … }
static void rv6xx_program_power_level_low(struct radeon_device *rdev)
{ … }
static void rv6xx_program_power_level_low_to_lowest_state(struct radeon_device *rdev)
{ … }
static void rv6xx_program_power_level_medium(struct radeon_device *rdev)
{ … }
static void rv6xx_program_power_level_medium_for_transition(struct radeon_device *rdev)
{ … }
static void rv6xx_program_power_level_high(struct radeon_device *rdev)
{ … }
static void rv6xx_enable_backbias(struct radeon_device *rdev, bool enable)
{ … }
static void rv6xx_program_display_gap(struct radeon_device *rdev)
{ … }
static void rv6xx_set_sw_voltage_to_safe(struct radeon_device *rdev,
struct radeon_ps *new_ps,
struct radeon_ps *old_ps)
{ … }
static void rv6xx_set_sw_voltage_to_low(struct radeon_device *rdev,
struct radeon_ps *old_ps)
{ … }
static void rv6xx_set_safe_backbias(struct radeon_device *rdev,
struct radeon_ps *new_ps,
struct radeon_ps *old_ps)
{ … }
static void rv6xx_set_safe_pcie_gen2(struct radeon_device *rdev,
struct radeon_ps *new_ps,
struct radeon_ps *old_ps)
{ … }
static void rv6xx_enable_dynamic_voltage_control(struct radeon_device *rdev,
bool enable)
{ … }
static void rv6xx_enable_dynamic_backbias_control(struct radeon_device *rdev,
bool enable)
{ … }
static int rv6xx_step_sw_voltage(struct radeon_device *rdev,
u16 initial_voltage,
u16 target_voltage)
{ … }
static int rv6xx_step_voltage_if_increasing(struct radeon_device *rdev,
struct radeon_ps *new_ps,
struct radeon_ps *old_ps)
{ … }
static int rv6xx_step_voltage_if_decreasing(struct radeon_device *rdev,
struct radeon_ps *new_ps,
struct radeon_ps *old_ps)
{ … }
static void rv6xx_enable_high(struct radeon_device *rdev)
{ … }
static void rv6xx_enable_medium(struct radeon_device *rdev)
{ … }
static void rv6xx_set_dpm_event_sources(struct radeon_device *rdev, u32 sources)
{ … }
static void rv6xx_enable_auto_throttle_source(struct radeon_device *rdev,
enum radeon_dpm_auto_throttle_src source,
bool enable)
{ … }
static void rv6xx_enable_thermal_protection(struct radeon_device *rdev,
bool enable)
{ … }
static void rv6xx_generate_transition_stepping(struct radeon_device *rdev,
struct radeon_ps *new_ps,
struct radeon_ps *old_ps)
{ … }
static void rv6xx_generate_low_step(struct radeon_device *rdev,
struct radeon_ps *new_ps)
{ … }
static void rv6xx_invalidate_intermediate_steps(struct radeon_device *rdev)
{ … }
static void rv6xx_generate_stepping_table(struct radeon_device *rdev,
struct radeon_ps *new_ps)
{ … }
static void rv6xx_enable_spread_spectrum(struct radeon_device *rdev,
bool enable)
{ … }
static void rv6xx_reset_lvtm_data_sync(struct radeon_device *rdev)
{ … }
static void rv6xx_enable_dynamic_pcie_gen2(struct radeon_device *rdev,
struct radeon_ps *new_ps,
bool enable)
{ … }
static void rv6xx_set_uvd_clock_before_set_eng_clock(struct radeon_device *rdev,
struct radeon_ps *new_ps,
struct radeon_ps *old_ps)
{ … }
static void rv6xx_set_uvd_clock_after_set_eng_clock(struct radeon_device *rdev,
struct radeon_ps *new_ps,
struct radeon_ps *old_ps)
{ … }
int rv6xx_dpm_enable(struct radeon_device *rdev)
{ … }
void rv6xx_dpm_disable(struct radeon_device *rdev)
{ … }
int rv6xx_dpm_set_power_state(struct radeon_device *rdev)
{ … }
void rv6xx_setup_asic(struct radeon_device *rdev)
{ … }
void rv6xx_dpm_display_configuration_changed(struct radeon_device *rdev)
{ … }
power_info;
pplib_clock_info;
pplib_power_state;
static void rv6xx_parse_pplib_non_clock_info(struct radeon_device *rdev,
struct radeon_ps *rps,
struct _ATOM_PPLIB_NONCLOCK_INFO *non_clock_info)
{ … }
static void rv6xx_parse_pplib_clock_info(struct radeon_device *rdev,
struct radeon_ps *rps, int index,
union pplib_clock_info *clock_info)
{ … }
static int rv6xx_parse_power_table(struct radeon_device *rdev)
{ … }
int rv6xx_dpm_init(struct radeon_device *rdev)
{ … }
void rv6xx_dpm_print_power_state(struct radeon_device *rdev,
struct radeon_ps *rps)
{ … }
void rv6xx_dpm_debugfs_print_current_performance_level(struct radeon_device *rdev,
struct seq_file *m)
{ … }
u32 rv6xx_dpm_get_current_sclk(struct radeon_device *rdev)
{ … }
u32 rv6xx_dpm_get_current_mclk(struct radeon_device *rdev)
{ … }
void rv6xx_dpm_fini(struct radeon_device *rdev)
{ … }
u32 rv6xx_dpm_get_sclk(struct radeon_device *rdev, bool low)
{ … }
u32 rv6xx_dpm_get_mclk(struct radeon_device *rdev, bool low)
{ … }
int rv6xx_dpm_force_performance_level(struct radeon_device *rdev,
enum radeon_dpm_forced_level level)
{ … }