mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-18 17:54:13 +08:00
drm/i915: Align dumb buffer stride to 4k to allow for gtt remapping
Align dumb buffer stride to 4k if the fb will be big enough to require gtt remapping. v2: Leave the stride alone for buffers that look to be for the cursor v3: Make it not a hack (Daniel) Cc: Daniel Vetter <daniel.vetter@ffwll.ch> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20190509122159.24376-7-ville.syrjala@linux.intel.com Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch> Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
This commit is contained in:
parent
54d4d719fa
commit
aa5ca8b742
@ -52,6 +52,7 @@
|
||||
#include "i915_trace.h"
|
||||
#include "i915_vgpu.h"
|
||||
|
||||
#include "intel_display.h"
|
||||
#include "intel_drv.h"
|
||||
#include "intel_frontbuffer.h"
|
||||
#include "intel_pm.h"
|
||||
@ -560,8 +561,31 @@ i915_gem_dumb_create(struct drm_file *file,
|
||||
struct drm_device *dev,
|
||||
struct drm_mode_create_dumb *args)
|
||||
{
|
||||
int cpp = DIV_ROUND_UP(args->bpp, 8);
|
||||
u32 format;
|
||||
|
||||
switch (cpp) {
|
||||
case 1:
|
||||
format = DRM_FORMAT_C8;
|
||||
break;
|
||||
case 2:
|
||||
format = DRM_FORMAT_RGB565;
|
||||
break;
|
||||
case 4:
|
||||
format = DRM_FORMAT_XRGB8888;
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* have to work out size/pitch and return them */
|
||||
args->pitch = ALIGN(args->width * DIV_ROUND_UP(args->bpp, 8), 64);
|
||||
args->pitch = ALIGN(args->width * cpp, 64);
|
||||
|
||||
/* align stride to page size so that we can remap */
|
||||
if (args->pitch > intel_plane_fb_max_stride(to_i915(dev), format,
|
||||
DRM_FORMAT_MOD_LINEAR))
|
||||
args->pitch = ALIGN(args->pitch, 4096);
|
||||
|
||||
args->size = args->pitch * args->height;
|
||||
return i915_gem_create(file, to_i915(dev),
|
||||
&args->size, &args->handle);
|
||||
|
@ -2498,7 +2498,6 @@ bool is_ccs_modifier(u64 modifier)
|
||||
modifier == I915_FORMAT_MOD_Yf_TILED_CCS;
|
||||
}
|
||||
|
||||
static
|
||||
u32 intel_plane_fb_max_stride(struct drm_i915_private *dev_priv,
|
||||
u32 pixel_format, u64 modifier)
|
||||
{
|
||||
|
@ -436,6 +436,8 @@ void intel_link_compute_m_n(u16 bpp, int nlanes,
|
||||
bool constant_n);
|
||||
bool is_ccs_modifier(u64 modifier);
|
||||
void lpt_disable_clkout_dp(struct drm_i915_private *dev_priv);
|
||||
u32 intel_plane_fb_max_stride(struct drm_i915_private *dev_priv,
|
||||
u32 pixel_format, u64 modifier);
|
||||
bool intel_plane_can_remap(const struct intel_plane_state *plane_state);
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user