]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
drm/mali-dp: Align pitch size to be multiple of bus burst read size.
authorLiviu Dudau <Liviu.Dudau@arm.com>
Tue, 5 Dec 2017 15:29:00 +0000 (15:29 +0000)
committerLiviu Dudau <Liviu.Dudau@arm.com>
Wed, 14 Mar 2018 11:38:02 +0000 (11:38 +0000)
Mali DP hardware needs pitch line sizes aligned to the bus burst
size for reads, so take that into consideration when allocating dumb
buffers. If the layer is rotated then the stride size requirement is
even larger for some hardware versions, so allocate for the worst case
scenario. Update the ->dumb_create() hook to a driver specific function
that sets the correct pitch size.

Reported-by: Ayan Halder <ayan.halder@arm.com>
Signed-off-by: Liviu Dudau <liviu.dudau@arm.com>
drivers/gpu/drm/arm/malidp_drv.c

index 3d82712d80028cffdfab2bc93e03960c683ea2c4..d88a3b9d59cc14cd92002fe482231f285bcfccb0 100644 (file)
@@ -312,13 +312,26 @@ static int malidp_irq_init(struct platform_device *pdev)
 
 DEFINE_DRM_GEM_CMA_FOPS(fops);
 
+static int malidp_dumb_create(struct drm_file *file_priv,
+                             struct drm_device *drm,
+                             struct drm_mode_create_dumb *args)
+{
+       struct malidp_drm *malidp = drm->dev_private;
+       /* allocate for the worst case scenario, i.e. rotated buffers */
+       u8 alignment = malidp_hw_get_pitch_align(malidp->dev, 1);
+
+       args->pitch = ALIGN(DIV_ROUND_UP(args->width * args->bpp, 8), alignment);
+
+       return drm_gem_cma_dumb_create_internal(file_priv, drm, args);
+}
+
 static struct drm_driver malidp_driver = {
        .driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC |
                           DRIVER_PRIME,
        .lastclose = drm_fb_helper_lastclose,
        .gem_free_object_unlocked = drm_gem_cma_free_object,
        .gem_vm_ops = &drm_gem_cma_vm_ops,
-       .dumb_create = drm_gem_cma_dumb_create,
+       .dumb_create = malidp_dumb_create,
        .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
        .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
        .gem_prime_export = drm_gem_prime_export,