lkml.org 
[lkml]   [2014]   [Oct]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.14 018/238] drm/radeon/atom: add new voltage fetch function for hawaii
    Date
    3.14-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Alex Deucher <alexander.deucher@amd.com>

    commit e9f274b2a1bd4ecc569b823b1e7942e9bf92593e upstream.

    Some hawaii boards use a different method for fetching the
    voltage information from the vbios.

    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/gpu/drm/radeon/radeon.h | 3 ++
    drivers/gpu/drm/radeon/radeon_atombios.c | 35 +++++++++++++++++++++++++++++++
    2 files changed, 38 insertions(+)

    --- a/drivers/gpu/drm/radeon/radeon.h
    +++ b/drivers/gpu/drm/radeon/radeon.h
    @@ -294,6 +294,9 @@ int radeon_atom_get_leakage_vddc_based_o
    u16 *vddc, u16 *vddci,
    u16 virtual_voltage_id,
    u16 vbios_voltage_id);
    +int radeon_atom_get_voltage_evv(struct radeon_device *rdev,
    + u16 virtual_voltage_id,
    + u16 *voltage);
    int radeon_atom_round_to_true_voltage(struct radeon_device *rdev,
    u8 voltage_type,
    u16 nominal_voltage,
    --- a/drivers/gpu/drm/radeon/radeon_atombios.c
    +++ b/drivers/gpu/drm/radeon/radeon_atombios.c
    @@ -3228,6 +3228,41 @@ int radeon_atom_get_leakage_vddc_based_o
    return 0;
    }

    +union get_voltage_info {
    + struct _GET_VOLTAGE_INFO_INPUT_PARAMETER_V1_2 in;
    + struct _GET_EVV_VOLTAGE_INFO_OUTPUT_PARAMETER_V1_2 evv_out;
    +};
    +
    +int radeon_atom_get_voltage_evv(struct radeon_device *rdev,
    + u16 virtual_voltage_id,
    + u16 *voltage)
    +{
    + int index = GetIndexIntoMasterTable(COMMAND, GetVoltageInfo);
    + u32 entry_id;
    + u32 count = rdev->pm.dpm.dyn_state.vddc_dependency_on_sclk.count;
    + union get_voltage_info args;
    +
    + for (entry_id = 0; entry_id < count; entry_id++) {
    + if (rdev->pm.dpm.dyn_state.vddc_dependency_on_sclk.entries[entry_id].v ==
    + virtual_voltage_id)
    + break;
    + }
    +
    + if (entry_id >= count)
    + return -EINVAL;
    +
    + args.in.ucVoltageType = VOLTAGE_TYPE_VDDC;
    + args.in.ucVoltageMode = ATOM_GET_VOLTAGE_EVV_VOLTAGE;
    + args.in.ulSCLKFreq =
    + cpu_to_le32(rdev->pm.dpm.dyn_state.vddc_dependency_on_sclk.entries[entry_id].clk);
    +
    + atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args);
    +
    + *voltage = le16_to_cpu(args.evv_out.usVoltageLevel);
    +
    + return 0;
    +}
    +
    int radeon_atom_get_voltage_gpio_settings(struct radeon_device *rdev,
    u16 voltage_level, u8 voltage_type,
    u32 *gpio_value, u32 *gpio_mask)



    \
     
     \ /
      Last update: 2014-10-04 02:41    [W:4.091 / U:0.044 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site