#include <linux/pci.h>
#include <drm/drm_device.h>
#include <drm/drm_edid.h>
#include <drm/radeon_drm.h>
#include "radeon.h"
#include "atom.h"
#include "atom-bits.h"
#include "radeon_asic.h"
#include "radeon_atombios.h"
#include "radeon_legacy_encoders.h"
atom_supported_devices;
static void radeon_lookup_i2c_gpio_quirks(struct radeon_device *rdev,
ATOM_GPIO_I2C_ASSIGMENT *gpio,
u8 index)
{ … }
static struct radeon_i2c_bus_rec radeon_get_bus_rec_for_i2c_gpio(ATOM_GPIO_I2C_ASSIGMENT *gpio)
{ … }
static struct radeon_i2c_bus_rec radeon_lookup_i2c_gpio(struct radeon_device *rdev,
uint8_t id)
{ … }
void radeon_atombios_i2c_init(struct radeon_device *rdev)
{ … }
struct radeon_gpio_rec radeon_atombios_lookup_gpio(struct radeon_device *rdev,
u8 id)
{ … }
static struct radeon_hpd radeon_atom_get_hpd_info_from_gpio(struct radeon_device *rdev,
struct radeon_gpio_rec *gpio)
{ … }
static bool radeon_atom_apply_quirks(struct drm_device *dev,
uint32_t supported_device,
int *connector_type,
struct radeon_i2c_bus_rec *i2c_bus,
uint16_t *line_mux,
struct radeon_hpd *hpd)
{ … }
static const int supported_devices_connector_convert[] = …;
static const uint16_t supported_devices_connector_object_id_convert[] = …;
static const int object_connector_convert[] = …;
bool radeon_get_atom_connector_info_from_object_table(struct drm_device *dev)
{ … }
static uint16_t atombios_get_connector_object_id(struct drm_device *dev,
int connector_type,
uint16_t devices)
{ … }
struct bios_connector { … };
bool radeon_get_atom_connector_info_from_supported_devices_table(struct
drm_device
*dev)
{ … }
firmware_info;
igp_info;
static void radeon_atombios_get_dentist_vco_freq(struct radeon_device *rdev)
{ … }
bool radeon_atom_get_clock_info(struct drm_device *dev)
{ … }
bool radeon_atombios_sideport_present(struct radeon_device *rdev)
{ … }
bool radeon_atombios_get_tmds_info(struct radeon_encoder *encoder,
struct radeon_encoder_int_tmds *tmds)
{ … }
bool radeon_atombios_get_ppll_ss_info(struct radeon_device *rdev,
struct radeon_atom_ss *ss,
int id)
{ … }
static void radeon_atombios_get_igp_ss_overrides(struct radeon_device *rdev,
struct radeon_atom_ss *ss,
int id)
{ … }
asic_ss_info;
asic_ss_assignment;
bool radeon_atombios_get_asic_ss_info(struct radeon_device *rdev,
struct radeon_atom_ss *ss,
int id, u32 clock)
{ … }
lvds_info;
struct radeon_encoder_atom_dig *radeon_atombios_get_lvds_info(struct
radeon_encoder
*encoder)
{ … }
struct radeon_encoder_primary_dac *
radeon_atombios_get_primary_dac_info(struct radeon_encoder *encoder)
{ … }
bool radeon_atom_get_tv_timings(struct radeon_device *rdev, int index,
struct drm_display_mode *mode)
{ … }
enum radeon_tv_std
radeon_atombios_get_tv_info(struct radeon_device *rdev)
{ … }
struct radeon_encoder_tv_dac *
radeon_atombios_get_tv_dac_info(struct radeon_encoder *encoder)
{ … }
static const char *thermal_controller_names[] = …;
static const char *pp_lib_thermal_controller_names[] = …;
power_info;
pplib_clock_info;
pplib_power_state;
static void radeon_atombios_parse_misc_flags_1_3(struct radeon_device *rdev,
int state_index,
u32 misc, u32 misc2)
{ … }
static int radeon_atombios_parse_power_table_1_3(struct radeon_device *rdev)
{ … }
static void radeon_atombios_add_pplib_thermal_controller(struct radeon_device *rdev,
ATOM_PPLIB_THERMALCONTROLLER *controller)
{ … }
void radeon_atombios_get_default_voltages(struct radeon_device *rdev,
u16 *vddc, u16 *vddci, u16 *mvdd)
{ … }
static void radeon_atombios_parse_pplib_non_clock_info(struct radeon_device *rdev,
int state_index, int mode_index,
struct _ATOM_PPLIB_NONCLOCK_INFO *non_clock_info)
{ … }
static bool radeon_atombios_parse_pplib_clock_info(struct radeon_device *rdev,
int state_index, int mode_index,
union pplib_clock_info *clock_info)
{ … }
static int radeon_atombios_parse_power_table_4_5(struct radeon_device *rdev)
{ … }
static int radeon_atombios_parse_power_table_6(struct radeon_device *rdev)
{ … }
void radeon_atombios_get_power_modes(struct radeon_device *rdev)
{ … }
get_clock_dividers;
int radeon_atom_get_clock_dividers(struct radeon_device *rdev,
u8 clock_type,
u32 clock,
bool strobe_mode,
struct atom_clock_dividers *dividers)
{ … }
int radeon_atom_get_memory_pll_dividers(struct radeon_device *rdev,
u32 clock,
bool strobe_mode,
struct atom_mpll_param *mpll_param)
{ … }
void radeon_atom_set_clock_gating(struct radeon_device *rdev, int enable)
{ … }
uint32_t radeon_atom_get_engine_clock(struct radeon_device *rdev)
{ … }
uint32_t radeon_atom_get_memory_clock(struct radeon_device *rdev)
{ … }
void radeon_atom_set_engine_clock(struct radeon_device *rdev,
uint32_t eng_clock)
{ … }
void radeon_atom_set_memory_clock(struct radeon_device *rdev,
uint32_t mem_clock)
{ … }
void radeon_atom_set_engine_dram_timings(struct radeon_device *rdev,
u32 eng_clock, u32 mem_clock)
{ … }
void radeon_atom_update_memory_dll(struct radeon_device *rdev,
u32 mem_clock)
{ … }
void radeon_atom_set_ac_timing(struct radeon_device *rdev,
u32 mem_clock)
{ … }
set_voltage;
void radeon_atom_set_voltage(struct radeon_device *rdev, u16 voltage_level, u8 voltage_type)
{ … }
int radeon_atom_get_max_vddc(struct radeon_device *rdev, u8 voltage_type,
u16 voltage_id, u16 *voltage)
{ … }
int radeon_atom_get_leakage_vddc_based_on_leakage_idx(struct radeon_device *rdev,
u16 *voltage,
u16 leakage_idx)
{ … }
int radeon_atom_get_leakage_id_from_vbios(struct radeon_device *rdev,
u16 *leakage_id)
{ … }
int radeon_atom_get_leakage_vddc_based_on_leakage_params(struct radeon_device *rdev,
u16 *vddc, u16 *vddci,
u16 virtual_voltage_id,
u16 vbios_voltage_id)
{ … }
get_voltage_info;
int radeon_atom_get_voltage_evv(struct radeon_device *rdev,
u16 virtual_voltage_id,
u16 *voltage)
{ … }
int radeon_atom_get_voltage_gpio_settings(struct radeon_device *rdev,
u16 voltage_level, u8 voltage_type,
u32 *gpio_value, u32 *gpio_mask)
{ … }
voltage_object_info;
voltage_object;
static ATOM_VOLTAGE_OBJECT *atom_lookup_voltage_object_v1(ATOM_VOLTAGE_OBJECT_INFO *v1,
u8 voltage_type)
{ … }
static ATOM_VOLTAGE_OBJECT_V2 *atom_lookup_voltage_object_v2(ATOM_VOLTAGE_OBJECT_INFO_V2 *v2,
u8 voltage_type)
{ … }
static ATOM_VOLTAGE_OBJECT_V3 *atom_lookup_voltage_object_v3(ATOM_VOLTAGE_OBJECT_INFO_V3_1 *v3,
u8 voltage_type, u8 voltage_mode)
{ … }
bool
radeon_atom_is_voltage_gpio(struct radeon_device *rdev,
u8 voltage_type, u8 voltage_mode)
{ … }
int radeon_atom_get_svi2_info(struct radeon_device *rdev,
u8 voltage_type,
u8 *svd_gpio_id, u8 *svc_gpio_id)
{ … }
int radeon_atom_get_max_voltage(struct radeon_device *rdev,
u8 voltage_type, u16 *max_voltage)
{ … }
int radeon_atom_get_min_voltage(struct radeon_device *rdev,
u8 voltage_type, u16 *min_voltage)
{ … }
int radeon_atom_get_voltage_step(struct radeon_device *rdev,
u8 voltage_type, u16 *voltage_step)
{ … }
int radeon_atom_round_to_true_voltage(struct radeon_device *rdev,
u8 voltage_type,
u16 nominal_voltage,
u16 *true_voltage)
{ … }
int radeon_atom_get_voltage_table(struct radeon_device *rdev,
u8 voltage_type, u8 voltage_mode,
struct atom_voltage_table *voltage_table)
{ … }
vram_info;
int radeon_atom_get_memory_info(struct radeon_device *rdev,
u8 module_index, struct atom_memory_info *mem_info)
{ … }
int radeon_atom_get_mclk_range_table(struct radeon_device *rdev,
bool gddr5, u8 module_index,
struct atom_memory_clock_range_table *mclk_range_table)
{ … }
#define MEM_ID_MASK …
#define MEM_ID_SHIFT …
#define CLOCK_RANGE_MASK …
#define CLOCK_RANGE_SHIFT …
#define LOW_NIBBLE_MASK …
#define DATA_EQU_PREV …
#define DATA_FROM_TABLE …
int radeon_atom_init_mc_reg_table(struct radeon_device *rdev,
u8 module_index,
struct atom_mc_reg_table *reg_table)
{ … }
void radeon_atom_initialize_bios_scratch_regs(struct drm_device *dev)
{ … }
void radeon_save_bios_scratch_regs(struct radeon_device *rdev)
{ … }
void radeon_restore_bios_scratch_regs(struct radeon_device *rdev)
{ … }
void radeon_atom_output_lock(struct drm_encoder *encoder, bool lock)
{ … }
void
radeon_atombios_connected_scratch_regs(struct drm_connector *connector,
struct drm_encoder *encoder,
bool connected)
{ … }
void
radeon_atombios_encoder_crtc_scratch_regs(struct drm_encoder *encoder, int crtc)
{ … }
void
radeon_atombios_encoder_dpms_scratch_regs(struct drm_encoder *encoder, bool on)
{ … }