mirror of
https://github.com/tiagovignatti/intel-gpu-tools.git
synced 2025-06-13 02:46:23 +00:00
skl_ddb_allocation: Respect the minimum number of blocks
Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
This commit is contained in:
parent
7296e09ee7
commit
cba3088619
@ -224,6 +224,7 @@ skl_allocate_pipe_ddb(struct drm_crtc *crtc,
|
|||||||
enum pipe pipe = intel_crtc->pipe;
|
enum pipe pipe = intel_crtc->pipe;
|
||||||
struct skl_ddb_entry alloc;
|
struct skl_ddb_entry alloc;
|
||||||
uint16_t alloc_size, start, cursor_blocks;
|
uint16_t alloc_size, start, cursor_blocks;
|
||||||
|
uint16_t minimum[I915_MAX_PLANES];
|
||||||
unsigned int total_data_rate;
|
unsigned int total_data_rate;
|
||||||
int plane;
|
int plane;
|
||||||
|
|
||||||
@ -242,9 +243,21 @@ skl_allocate_pipe_ddb(struct drm_crtc *crtc,
|
|||||||
alloc_size -= cursor_blocks;
|
alloc_size -= cursor_blocks;
|
||||||
alloc.end -= cursor_blocks;
|
alloc.end -= cursor_blocks;
|
||||||
|
|
||||||
|
/* 1. Allocate the mininum required blocks for each active plane */
|
||||||
|
for_each_plane(pipe, plane) {
|
||||||
|
const struct intel_plane_wm_parameters *p;
|
||||||
|
|
||||||
|
p = ¶ms->plane[plane];
|
||||||
|
if (!p->enabled)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
minimum[plane] = 8;
|
||||||
|
alloc_size -= minimum[plane];
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Each active plane get a portion of the remaining space, in
|
* 2. Distribute the remaining space in proportion to the amount of
|
||||||
* proportion to the amount of data they need to fetch from memory.
|
* data each plane needs to fetch from memory.
|
||||||
*
|
*
|
||||||
* FIXME: we may not allocate every single block here.
|
* FIXME: we may not allocate every single block here.
|
||||||
*/
|
*/
|
||||||
@ -266,8 +279,9 @@ skl_allocate_pipe_ddb(struct drm_crtc *crtc,
|
|||||||
* promote the expression to 64 bits to avoid overflowing, the
|
* promote the expression to 64 bits to avoid overflowing, the
|
||||||
* result is < available as data_rate / total_data_rate < 1
|
* result is < available as data_rate / total_data_rate < 1
|
||||||
*/
|
*/
|
||||||
plane_blocks = div_u64((uint64_t)alloc_size * data_rate,
|
plane_blocks = minimum[plane];
|
||||||
total_data_rate);
|
plane_blocks += div_u64((uint64_t)alloc_size * data_rate,
|
||||||
|
total_data_rate);
|
||||||
|
|
||||||
ddb->plane[pipe][plane].start = start;
|
ddb->plane[pipe][plane].start = start;
|
||||||
ddb->plane[pipe][plane].end = start + plane_blocks;
|
ddb->plane[pipe][plane].end = start + plane_blocks;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user