mirror of
https://github.com/torvalds/linux.git
synced 2024-12-11 13:41:55 +00:00
Merge tag 'drm-fixes-5.3-2019-08-21' of git://people.freedesktop.org/~agd5f/linux into drm-fixes
drm-fixes-5.3-2019-08-21: amdgpu: - Fix gfxoff logic on RV - Powerplay fixes - Fix a possible memory leak in CS ioctl - bpc fix for display Signed-off-by: Dave Airlie <airlied@redhat.com> From: Alex Deucher <alexdeucher@gmail.com> Link: https://patchwork.freedesktop.org/patch/msgid/20190822021022.3356-1-alexander.deucher@amd.com
This commit is contained in:
commit
1e85e6cad2
@ -1143,6 +1143,9 @@ static int amdgpu_cs_process_syncobj_out_dep(struct amdgpu_cs_parser *p,
|
|||||||
num_deps = chunk->length_dw * 4 /
|
num_deps = chunk->length_dw * 4 /
|
||||||
sizeof(struct drm_amdgpu_cs_chunk_sem);
|
sizeof(struct drm_amdgpu_cs_chunk_sem);
|
||||||
|
|
||||||
|
if (p->post_deps)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
p->post_deps = kmalloc_array(num_deps, sizeof(*p->post_deps),
|
p->post_deps = kmalloc_array(num_deps, sizeof(*p->post_deps),
|
||||||
GFP_KERNEL);
|
GFP_KERNEL);
|
||||||
p->num_post_deps = 0;
|
p->num_post_deps = 0;
|
||||||
@ -1166,8 +1169,7 @@ static int amdgpu_cs_process_syncobj_out_dep(struct amdgpu_cs_parser *p,
|
|||||||
|
|
||||||
|
|
||||||
static int amdgpu_cs_process_syncobj_timeline_out_dep(struct amdgpu_cs_parser *p,
|
static int amdgpu_cs_process_syncobj_timeline_out_dep(struct amdgpu_cs_parser *p,
|
||||||
struct amdgpu_cs_chunk
|
struct amdgpu_cs_chunk *chunk)
|
||||||
*chunk)
|
|
||||||
{
|
{
|
||||||
struct drm_amdgpu_cs_chunk_syncobj *syncobj_deps;
|
struct drm_amdgpu_cs_chunk_syncobj *syncobj_deps;
|
||||||
unsigned num_deps;
|
unsigned num_deps;
|
||||||
@ -1177,6 +1179,9 @@ static int amdgpu_cs_process_syncobj_timeline_out_dep(struct amdgpu_cs_parser *p
|
|||||||
num_deps = chunk->length_dw * 4 /
|
num_deps = chunk->length_dw * 4 /
|
||||||
sizeof(struct drm_amdgpu_cs_chunk_syncobj);
|
sizeof(struct drm_amdgpu_cs_chunk_syncobj);
|
||||||
|
|
||||||
|
if (p->post_deps)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
p->post_deps = kmalloc_array(num_deps, sizeof(*p->post_deps),
|
p->post_deps = kmalloc_array(num_deps, sizeof(*p->post_deps),
|
||||||
GFP_KERNEL);
|
GFP_KERNEL);
|
||||||
p->num_post_deps = 0;
|
p->num_post_deps = 0;
|
||||||
|
@ -604,6 +604,10 @@ static void gfx_v9_0_check_if_need_gfxoff(struct amdgpu_device *adev)
|
|||||||
(adev->gfx.rlc_feature_version < 1) ||
|
(adev->gfx.rlc_feature_version < 1) ||
|
||||||
!adev->gfx.rlc.is_rlc_v2_1)
|
!adev->gfx.rlc.is_rlc_v2_1)
|
||||||
adev->pm.pp_feature &= ~PP_GFXOFF_MASK;
|
adev->pm.pp_feature &= ~PP_GFXOFF_MASK;
|
||||||
|
if (adev->pm.pp_feature & PP_GFXOFF_MASK)
|
||||||
|
adev->pg_flags |= AMD_PG_SUPPORT_GFX_PG |
|
||||||
|
AMD_PG_SUPPORT_CP |
|
||||||
|
AMD_PG_SUPPORT_RLC_SMU_HS;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -552,7 +552,6 @@ static int nv_common_early_init(void *handle)
|
|||||||
AMD_CG_SUPPORT_BIF_LS;
|
AMD_CG_SUPPORT_BIF_LS;
|
||||||
adev->pg_flags = AMD_PG_SUPPORT_VCN |
|
adev->pg_flags = AMD_PG_SUPPORT_VCN |
|
||||||
AMD_PG_SUPPORT_VCN_DPG |
|
AMD_PG_SUPPORT_VCN_DPG |
|
||||||
AMD_PG_SUPPORT_MMHUB |
|
|
||||||
AMD_PG_SUPPORT_ATHUB;
|
AMD_PG_SUPPORT_ATHUB;
|
||||||
adev->external_rev_id = adev->rev_id + 0x1;
|
adev->external_rev_id = adev->rev_id + 0x1;
|
||||||
break;
|
break;
|
||||||
|
@ -992,11 +992,6 @@ static int soc15_common_early_init(void *handle)
|
|||||||
|
|
||||||
adev->pg_flags = AMD_PG_SUPPORT_SDMA | AMD_PG_SUPPORT_VCN;
|
adev->pg_flags = AMD_PG_SUPPORT_SDMA | AMD_PG_SUPPORT_VCN;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (adev->pm.pp_feature & PP_GFXOFF_MASK)
|
|
||||||
adev->pg_flags |= AMD_PG_SUPPORT_GFX_PG |
|
|
||||||
AMD_PG_SUPPORT_CP |
|
|
||||||
AMD_PG_SUPPORT_RLC_SMU_HS;
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
/* FIXME: not supported yet */
|
/* FIXME: not supported yet */
|
||||||
|
@ -3131,13 +3131,25 @@ static enum dc_color_depth
|
|||||||
convert_color_depth_from_display_info(const struct drm_connector *connector,
|
convert_color_depth_from_display_info(const struct drm_connector *connector,
|
||||||
const struct drm_connector_state *state)
|
const struct drm_connector_state *state)
|
||||||
{
|
{
|
||||||
uint32_t bpc = connector->display_info.bpc;
|
uint8_t bpc = (uint8_t)connector->display_info.bpc;
|
||||||
|
|
||||||
|
/* Assume 8 bpc by default if no bpc is specified. */
|
||||||
|
bpc = bpc ? bpc : 8;
|
||||||
|
|
||||||
if (!state)
|
if (!state)
|
||||||
state = connector->state;
|
state = connector->state;
|
||||||
|
|
||||||
if (state) {
|
if (state) {
|
||||||
bpc = state->max_bpc;
|
/*
|
||||||
|
* Cap display bpc based on the user requested value.
|
||||||
|
*
|
||||||
|
* The value for state->max_bpc may not correctly updated
|
||||||
|
* depending on when the connector gets added to the state
|
||||||
|
* or if this was called outside of atomic check, so it
|
||||||
|
* can't be used directly.
|
||||||
|
*/
|
||||||
|
bpc = min(bpc, state->max_requested_bpc);
|
||||||
|
|
||||||
/* Round down to the nearest even number. */
|
/* Round down to the nearest even number. */
|
||||||
bpc = bpc - (bpc & 1);
|
bpc = bpc - (bpc & 1);
|
||||||
}
|
}
|
||||||
|
@ -907,8 +907,6 @@ struct smu_funcs
|
|||||||
((smu)->funcs->register_irq_handler ? (smu)->funcs->register_irq_handler(smu) : 0)
|
((smu)->funcs->register_irq_handler ? (smu)->funcs->register_irq_handler(smu) : 0)
|
||||||
#define smu_set_azalia_d3_pme(smu) \
|
#define smu_set_azalia_d3_pme(smu) \
|
||||||
((smu)->funcs->set_azalia_d3_pme ? (smu)->funcs->set_azalia_d3_pme((smu)) : 0)
|
((smu)->funcs->set_azalia_d3_pme ? (smu)->funcs->set_azalia_d3_pme((smu)) : 0)
|
||||||
#define smu_get_uclk_dpm_states(smu, clocks_in_khz, num_states) \
|
|
||||||
((smu)->ppt_funcs->get_uclk_dpm_states ? (smu)->ppt_funcs->get_uclk_dpm_states((smu), (clocks_in_khz), (num_states)) : 0)
|
|
||||||
#define smu_get_max_sustainable_clocks_by_dc(smu, max_clocks) \
|
#define smu_get_max_sustainable_clocks_by_dc(smu, max_clocks) \
|
||||||
((smu)->funcs->get_max_sustainable_clocks_by_dc ? (smu)->funcs->get_max_sustainable_clocks_by_dc((smu), (max_clocks)) : 0)
|
((smu)->funcs->get_max_sustainable_clocks_by_dc ? (smu)->funcs->get_max_sustainable_clocks_by_dc((smu), (max_clocks)) : 0)
|
||||||
#define smu_get_uclk_dpm_states(smu, clocks_in_khz, num_states) \
|
#define smu_get_uclk_dpm_states(smu, clocks_in_khz, num_states) \
|
||||||
|
@ -327,6 +327,7 @@ static int smu_v11_0_setup_pptable(struct smu_context *smu)
|
|||||||
const struct smc_firmware_header_v1_0 *hdr;
|
const struct smc_firmware_header_v1_0 *hdr;
|
||||||
int ret, index;
|
int ret, index;
|
||||||
uint32_t size;
|
uint32_t size;
|
||||||
|
uint16_t atom_table_size;
|
||||||
uint8_t frev, crev;
|
uint8_t frev, crev;
|
||||||
void *table;
|
void *table;
|
||||||
uint16_t version_major, version_minor;
|
uint16_t version_major, version_minor;
|
||||||
@ -354,10 +355,11 @@ static int smu_v11_0_setup_pptable(struct smu_context *smu)
|
|||||||
index = get_index_into_master_table(atom_master_list_of_data_tables_v2_1,
|
index = get_index_into_master_table(atom_master_list_of_data_tables_v2_1,
|
||||||
powerplayinfo);
|
powerplayinfo);
|
||||||
|
|
||||||
ret = smu_get_atom_data_table(smu, index, (uint16_t *)&size, &frev, &crev,
|
ret = smu_get_atom_data_table(smu, index, &atom_table_size, &frev, &crev,
|
||||||
(uint8_t **)&table);
|
(uint8_t **)&table);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
size = atom_table_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!smu->smu_table.power_play_table)
|
if (!smu->smu_table.power_play_table)
|
||||||
|
Loading…
Reference in New Issue
Block a user