mirror of
https://github.com/torvalds/linux.git
synced 2024-11-13 23:51:39 +00:00
drm/amd/display: Fix divide by zero in CURSOR_DST_X_OFFSET calculation
[Why] Certain situations cause pipes to have a recout of 0, such as when the dst_rect lies completely outside of a given ODM slice. [How] Skip calculation that transforms cursor coordinates to viewport space. Reviewed-by: Alvin Lee <alvin.lee2@amd.com> Signed-off-by: Jerry Zuo <jerry.zuo@amd.com> Signed-off-by: George Shen <george.shen@amd.com> Tested-by: Daniel Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
eb6dfbb7a9
commit
ac01f6ad71
@ -677,12 +677,23 @@ void hubp401_cursor_set_position(
|
||||
int rec_x_offset = x_pos - pos->x_hotspot;
|
||||
int rec_y_offset = y_pos - pos->y_hotspot;
|
||||
int dst_x_offset;
|
||||
int x_pos_viewport = x_pos * param->viewport.width / param->recout.width;
|
||||
int x_hot_viewport = pos->x_hotspot * param->viewport.width / param->recout.width;
|
||||
int x_pos_viewport = 0;
|
||||
int x_hot_viewport = 0;
|
||||
uint32_t cur_en = pos->enable ? 1 : 0;
|
||||
|
||||
hubp->curs_pos = *pos;
|
||||
|
||||
/* Recout is zero for pipes if the entire dst_rect is contained
|
||||
* within preceeding ODM slices.
|
||||
*/
|
||||
if (param->recout.width) {
|
||||
x_pos_viewport = x_pos * param->viewport.width / param->recout.width;
|
||||
x_hot_viewport = pos->x_hotspot * param->viewport.width / param->recout.width;
|
||||
} else {
|
||||
ASSERT(!cur_en || x_pos == 0);
|
||||
ASSERT(!cur_en || pos->x_hotspot == 0);
|
||||
}
|
||||
|
||||
/*
|
||||
* Guard aganst cursor_set_position() from being called with invalid
|
||||
* attributes
|
||||
|
Loading…
Reference in New Issue
Block a user