提交 4479ed41 编写于 作者: D Dave Airlie

Merge branch 'drm-next-4.15-dc' of git://people.freedesktop.org/~agd5f/linux into drm-next

A bunch of smatch fixes for the dc code.

* 'drm-next-4.15-dc' of git://people.freedesktop.org/~agd5f/linux:
  amd/display: Fix potential null dereference in dce_calcs.c
  amdgpu/dm: Remove unused forward declaration
  drm/amdgpu: Remove unused dc_stream from amdgpu_crtc
  amdgpu/dc: Fix double unlock in amdgpu_dm_commit_planes
  amdgpu/dc: Fix missing null checks in amdgpu_dm.c
  amdgpu/dc: Fix potential null dereferences in amdgpu_dm.c
  amdgpu/dc: fix more indentation warnings
  amdgpu/dc: handle allocation failures in dc_commit_planes_to_stream.
  amdgpu/dc: fix indentation warning from smatch.
  amdgpu/dc: fix non-ansi function decls.
  drm/amd/display: remove some unneeded code
  drm/amd/display: checking for NULL instead of IS_ERR()
  drm/amd/display: small cleanup in destruct()
...@@ -436,8 +436,6 @@ struct amdgpu_crtc { ...@@ -436,8 +436,6 @@ struct amdgpu_crtc {
enum amdgpu_interrupt_state vsync_timer_enabled; enum amdgpu_interrupt_state vsync_timer_enabled;
int otg_inst; int otg_inst;
/* After Set Mode stream will be non-NULL */
const struct dc_stream *stream;
struct drm_pending_vblank_event *event; struct drm_pending_vblank_event *event;
}; };
......
...@@ -430,10 +430,12 @@ static int amdgpu_dm_init(struct amdgpu_device *adev) ...@@ -430,10 +430,12 @@ static int amdgpu_dm_init(struct amdgpu_device *adev)
/* Display Core create. */ /* Display Core create. */
adev->dm.dc = dc_create(&init_data); adev->dm.dc = dc_create(&init_data);
if (adev->dm.dc) if (adev->dm.dc) {
DRM_INFO("Display Core initialized!\n"); DRM_INFO("Display Core initialized!\n");
else } else {
DRM_INFO("Display Core failed to initialize!\n"); DRM_INFO("Display Core failed to initialize!\n");
goto error;
}
INIT_WORK(&adev->dm.mst_hotplug_work, hotplug_notify_work_func); INIT_WORK(&adev->dm.mst_hotplug_work, hotplug_notify_work_func);
...@@ -1296,7 +1298,7 @@ amdgpu_dm_register_backlight_device(struct amdgpu_display_manager *dm) ...@@ -1296,7 +1298,7 @@ amdgpu_dm_register_backlight_device(struct amdgpu_display_manager *dm)
&amdgpu_dm_backlight_ops, &amdgpu_dm_backlight_ops,
&props); &props);
if (NULL == dm->backlight_dev) if (IS_ERR(dm->backlight_dev))
DRM_ERROR("DM: Backlight registration failed!\n"); DRM_ERROR("DM: Backlight registration failed!\n");
else else
DRM_DEBUG_DRIVER("DM: Registered Backlight device: %s\n", bl_name); DRM_DEBUG_DRIVER("DM: Registered Backlight device: %s\n", bl_name);
...@@ -2273,7 +2275,7 @@ decide_crtc_timing_for_drm_display_mode(struct drm_display_mode *drm_mode, ...@@ -2273,7 +2275,7 @@ decide_crtc_timing_for_drm_display_mode(struct drm_display_mode *drm_mode,
} }
} }
static void create_fake_sink(struct amdgpu_dm_connector *aconnector) static int create_fake_sink(struct amdgpu_dm_connector *aconnector)
{ {
struct dc_sink *sink = NULL; struct dc_sink *sink = NULL;
struct dc_sink_init_data sink_init_data = { 0 }; struct dc_sink_init_data sink_init_data = { 0 };
...@@ -2282,14 +2284,18 @@ static void create_fake_sink(struct amdgpu_dm_connector *aconnector) ...@@ -2282,14 +2284,18 @@ static void create_fake_sink(struct amdgpu_dm_connector *aconnector)
sink_init_data.sink_signal = aconnector->dc_link->connector_signal; sink_init_data.sink_signal = aconnector->dc_link->connector_signal;
sink = dc_sink_create(&sink_init_data); sink = dc_sink_create(&sink_init_data);
if (!sink) if (!sink) {
DRM_ERROR("Failed to create sink!\n"); DRM_ERROR("Failed to create sink!\n");
return -ENOMEM;
}
sink->sink_signal = SIGNAL_TYPE_VIRTUAL; sink->sink_signal = SIGNAL_TYPE_VIRTUAL;
aconnector->fake_enable = true; aconnector->fake_enable = true;
aconnector->dc_sink = sink; aconnector->dc_sink = sink;
aconnector->dc_link->local_sink = sink; aconnector->dc_link->local_sink = sink;
return 0;
} }
static struct dc_stream_state * static struct dc_stream_state *
...@@ -2323,7 +2329,8 @@ create_stream_for_sink(struct amdgpu_dm_connector *aconnector, ...@@ -2323,7 +2329,8 @@ create_stream_for_sink(struct amdgpu_dm_connector *aconnector,
if (aconnector->mst_port) if (aconnector->mst_port)
goto stream_create_fail; goto stream_create_fail;
create_fake_sink(aconnector); if (create_fake_sink(aconnector))
goto stream_create_fail;
} }
stream = dc_create_stream_for_sink(aconnector->dc_sink); stream = dc_create_stream_for_sink(aconnector->dc_sink);
...@@ -2423,6 +2430,8 @@ dm_crtc_duplicate_state(struct drm_crtc *crtc) ...@@ -2423,6 +2430,8 @@ dm_crtc_duplicate_state(struct drm_crtc *crtc)
return NULL; return NULL;
state = kzalloc(sizeof(*state), GFP_KERNEL); state = kzalloc(sizeof(*state), GFP_KERNEL);
if (!state)
return NULL;
__drm_atomic_helper_crtc_duplicate_state(crtc, &state->base); __drm_atomic_helper_crtc_duplicate_state(crtc, &state->base);
...@@ -3419,6 +3428,8 @@ create_i2c(struct ddc_service *ddc_service, ...@@ -3419,6 +3428,8 @@ create_i2c(struct ddc_service *ddc_service,
struct amdgpu_i2c_adapter *i2c; struct amdgpu_i2c_adapter *i2c;
i2c = kzalloc(sizeof(struct amdgpu_i2c_adapter), GFP_KERNEL); i2c = kzalloc(sizeof(struct amdgpu_i2c_adapter), GFP_KERNEL);
if (!i2c)
return NULL;
i2c->base.owner = THIS_MODULE; i2c->base.owner = THIS_MODULE;
i2c->base.class = I2C_CLASS_DDC; i2c->base.class = I2C_CLASS_DDC;
i2c->base.dev.parent = &adev->pdev->dev; i2c->base.dev.parent = &adev->pdev->dev;
...@@ -3449,6 +3460,11 @@ static int amdgpu_dm_connector_init(struct amdgpu_display_manager *dm, ...@@ -3449,6 +3460,11 @@ static int amdgpu_dm_connector_init(struct amdgpu_display_manager *dm,
DRM_DEBUG_DRIVER("%s()\n", __func__); DRM_DEBUG_DRIVER("%s()\n", __func__);
i2c = create_i2c(link->ddc, link->link_index, &res); i2c = create_i2c(link->ddc, link->link_index, &res);
if (!i2c) {
DRM_ERROR("Failed to create i2c adapter data\n");
return -ENOMEM;
}
aconnector->i2c = i2c; aconnector->i2c = i2c;
res = i2c_add_adapter(&i2c->base); res = i2c_add_adapter(&i2c->base);
...@@ -3888,7 +3904,6 @@ static void amdgpu_dm_commit_planes(struct drm_atomic_state *state, ...@@ -3888,7 +3904,6 @@ static void amdgpu_dm_commit_planes(struct drm_atomic_state *state,
DRM_ERROR("%s: acrtc %d, already busy\n", DRM_ERROR("%s: acrtc %d, already busy\n",
__func__, __func__,
acrtc_attach->crtc_id); acrtc_attach->crtc_id);
spin_unlock_irqrestore(&crtc->dev->event_lock, flags);
/* In commit tail framework this cannot happen */ /* In commit tail framework this cannot happen */
WARN_ON(1); WARN_ON(1);
} }
......
...@@ -199,8 +199,6 @@ struct amdgpu_framebuffer; ...@@ -199,8 +199,6 @@ struct amdgpu_framebuffer;
struct amdgpu_display_manager; struct amdgpu_display_manager;
struct dc_validation_set; struct dc_validation_set;
struct dc_plane_state; struct dc_plane_state;
/* TODO rename to dc_stream_state */
struct dc_stream;
struct dm_plane_state { struct dm_plane_state {
struct drm_plane_state base; struct drm_plane_state base;
......
...@@ -358,7 +358,7 @@ static const struct command_table_helper command_table_helper_funcs = { ...@@ -358,7 +358,7 @@ static const struct command_table_helper command_table_helper_funcs = {
* const struct command_table_helper **h - [out] struct of functions * const struct command_table_helper **h - [out] struct of functions
* *
*/ */
const struct command_table_helper *dal_cmd_tbl_helper_dce110_get_table() const struct command_table_helper *dal_cmd_tbl_helper_dce110_get_table(void)
{ {
return &command_table_helper_funcs; return &command_table_helper_funcs;
} }
...@@ -412,7 +412,7 @@ static const struct command_table_helper command_table_helper_funcs = { ...@@ -412,7 +412,7 @@ static const struct command_table_helper command_table_helper_funcs = {
* const struct command_table_helper **h - [out] struct of functions * const struct command_table_helper **h - [out] struct of functions
* *
*/ */
const struct command_table_helper *dal_cmd_tbl_helper_dce112_get_table2() const struct command_table_helper *dal_cmd_tbl_helper_dce112_get_table2(void)
{ {
return &command_table_helper_funcs; return &command_table_helper_funcs;
} }
...@@ -412,7 +412,7 @@ static const struct command_table_helper command_table_helper_funcs = { ...@@ -412,7 +412,7 @@ static const struct command_table_helper command_table_helper_funcs = {
* const struct command_table_helper **h - [out] struct of functions * const struct command_table_helper **h - [out] struct of functions
* *
*/ */
const struct command_table_helper *dal_cmd_tbl_helper_dce112_get_table() const struct command_table_helper *dal_cmd_tbl_helper_dce112_get_table(void)
{ {
return &command_table_helper_funcs; return &command_table_helper_funcs;
} }
...@@ -348,7 +348,7 @@ static const struct command_table_helper command_table_helper_funcs = { ...@@ -348,7 +348,7 @@ static const struct command_table_helper command_table_helper_funcs = {
dal_cmd_table_helper_encoder_mode_bp_to_atom, dal_cmd_table_helper_encoder_mode_bp_to_atom,
}; };
const struct command_table_helper *dal_cmd_tbl_helper_dce80_get_table() const struct command_table_helper *dal_cmd_tbl_helper_dce80_get_table(void)
{ {
return &command_table_helper_funcs; return &command_table_helper_funcs;
} }
...@@ -2794,6 +2794,8 @@ bool bw_calcs(struct dc_context *ctx, ...@@ -2794,6 +2794,8 @@ bool bw_calcs(struct dc_context *ctx,
{ {
struct bw_calcs_data *data = kzalloc(sizeof(struct bw_calcs_data), struct bw_calcs_data *data = kzalloc(sizeof(struct bw_calcs_data),
GFP_KERNEL); GFP_KERNEL);
if (!data)
return false;
populate_initial_data(pipe, pipe_count, data); populate_initial_data(pipe, pipe_count, data);
......
...@@ -952,6 +952,14 @@ bool dc_commit_planes_to_stream( ...@@ -952,6 +952,14 @@ bool dc_commit_planes_to_stream(
scaling_info = kcalloc(MAX_SURFACES, sizeof(struct dc_scaling_info), scaling_info = kcalloc(MAX_SURFACES, sizeof(struct dc_scaling_info),
GFP_KERNEL); GFP_KERNEL);
if (!flip_addr || !plane_info || !scaling_info) {
kfree(flip_addr);
kfree(plane_info);
kfree(scaling_info);
kfree(stream_update);
return false;
}
memset(updates, 0, sizeof(updates)); memset(updates, 0, sizeof(updates));
stream_update->src = dc_stream->src; stream_update->src = dc_stream->src;
......
...@@ -145,7 +145,7 @@ void dc_gamma_release(struct dc_gamma **gamma) ...@@ -145,7 +145,7 @@ void dc_gamma_release(struct dc_gamma **gamma)
*gamma = NULL; *gamma = NULL;
} }
struct dc_gamma *dc_create_gamma() struct dc_gamma *dc_create_gamma(void)
{ {
struct dc_gamma *gamma = kzalloc(sizeof(*gamma), GFP_KERNEL); struct dc_gamma *gamma = kzalloc(sizeof(*gamma), GFP_KERNEL);
...@@ -175,7 +175,7 @@ void dc_transfer_func_release(struct dc_transfer_func *tf) ...@@ -175,7 +175,7 @@ void dc_transfer_func_release(struct dc_transfer_func *tf)
kref_put(&tf->refcount, dc_transfer_func_free); kref_put(&tf->refcount, dc_transfer_func_free);
} }
struct dc_transfer_func *dc_create_transfer_func() struct dc_transfer_func *dc_create_transfer_func(void)
{ {
struct dc_transfer_func *tf = kzalloc(sizeof(*tf), GFP_KERNEL); struct dc_transfer_func *tf = kzalloc(sizeof(*tf), GFP_KERNEL);
......
...@@ -293,8 +293,7 @@ void dce120_timing_generator_tear_down_global_swap_lock( ...@@ -293,8 +293,7 @@ void dce120_timing_generator_tear_down_global_swap_lock(
FD(DCP0_DCP_GSL_CONTROL__DCP_GSL_SYNC_SOURCE), 0, FD(DCP0_DCP_GSL_CONTROL__DCP_GSL_SYNC_SOURCE), 0,
FD(DCP0_DCP_GSL_CONTROL__DCP_GSL_DELAY_SURFACE_UPDATE_PENDING), 0); FD(DCP0_DCP_GSL_CONTROL__DCP_GSL_DELAY_SURFACE_UPDATE_PENDING), 0);
CRTC_REG_SET_2( CRTC_REG_SET_2(CRTC0_CRTC_GSL_CONTROL,
CRTC0_CRTC_GSL_CONTROL,
CRTC_GSL_CHECK_LINE_NUM, 0, CRTC_GSL_CHECK_LINE_NUM, 0,
CRTC_GSL_FORCE_DELAY, 0x2); /*TODO Why this value here ?*/ CRTC_GSL_FORCE_DELAY, 0x2); /*TODO Why this value here ?*/
} }
......
...@@ -725,10 +725,8 @@ static void destruct(struct dcn10_resource_pool *pool) ...@@ -725,10 +725,8 @@ static void destruct(struct dcn10_resource_pool *pool)
} }
} }
for (i = 0; i < pool->base.stream_enc_count; i++) { for (i = 0; i < pool->base.stream_enc_count; i++)
if (pool->base.stream_enc[i] != NULL) kfree(pool->base.stream_enc[i]);
kfree(DCE110STRENC_FROM_STRENC(pool->base.stream_enc[i]));
}
for (i = 0; i < pool->base.audio_count; i++) { for (i = 0; i < pool->base.audio_count; i++) {
if (pool->base.audios[i]) if (pool->base.audios[i])
......
...@@ -236,13 +236,10 @@ static void tgn10_program_timing( ...@@ -236,13 +236,10 @@ static void tgn10_program_timing(
if (tg->dlg_otg_param.signal == SIGNAL_TYPE_DISPLAY_PORT || if (tg->dlg_otg_param.signal == SIGNAL_TYPE_DISPLAY_PORT ||
tg->dlg_otg_param.signal == SIGNAL_TYPE_DISPLAY_PORT_MST || tg->dlg_otg_param.signal == SIGNAL_TYPE_DISPLAY_PORT_MST ||
tg->dlg_otg_param.signal == SIGNAL_TYPE_EDP) { tg->dlg_otg_param.signal == SIGNAL_TYPE_EDP) {
v_init = asic_blank_start;
start_point = 1; start_point = 1;
if (patched_crtc_timing.flags.INTERLACE == 1) if (patched_crtc_timing.flags.INTERLACE == 1)
field_num = 1; field_num = 1;
} }
if (v_init < 0)
v_init = 0;
v_fp2 = 0; v_fp2 = 0;
if (tg->dlg_otg_param.vstartup_start > asic_blank_end) if (tg->dlg_otg_param.vstartup_start > asic_blank_end)
v_fp2 = tg->dlg_otg_param.vstartup_start > asic_blank_end; v_fp2 = tg->dlg_otg_param.vstartup_start > asic_blank_end;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册