Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp18063073ybl; Thu, 2 Jan 2020 17:43:51 -0800 (PST) X-Google-Smtp-Source: APXvYqyyw8KOoKojr5NCXj3vlkHCrlCxopDDjxAAZA+9Bst4yEJPp/cOgLj8BH4V1uu+QwjW4vWQ X-Received: by 2002:a05:6808:191:: with SMTP id w17mr3342485oic.29.1578015831009; Thu, 02 Jan 2020 17:43:51 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1578015831; cv=none; d=google.com; s=arc-20160816; b=0erb5RmQchEiSJ61uZBgBzVXbYegQaRdIctfyYz8o/7Coe0yYVeTmqNksmTsoAsAHa aHCOqp/0UazIk5GmxkrBGJXy32PL4EhXHamsr5+eIU85Fvg+JG0ih8mp6atxuwr/0Q/g rHwf8EwDZ3Ue9vD0ybiGnHgjsu3sjRL6T2TbdvZm7rhZtxxf9PmkAlXBqBssyKmFy0Fn r/LQGqFAk6rvGO5UaMR+GMC0HTGnrZNRjWioHPwTOw55fOSmIzL6/qQQ3uckfIkICVaU qC9eUlCHVon8OVEEXNmHrHQRfcp2LpoQAX4N1FEPeJBJI1xCZuzHoffqbxMdejZ4laTP TxUQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:message-id:date:subject:cc :to:from; bh=b6ZB9bgJ6vgMatb+o7vJv9KqXOWL69piUkVpp4ukE9M=; b=OUnEDORjoQPBGDE5a6txmFiIwCTi8f47vR1sBKY/1iXf5oHPHJrA3R1lz3zVO7hBz2 l9yvU10BxKe3B4onw/wWsq0TNOW6eVl21KT7DQv5ZXpJXGW3bLSUkCuSTskkjmZomi1h gfGcTfmIMtliwG/XvQW0hwoBI66aAz1KZLlHa9uF8fM4myZD4efgbqYRSW3192r5QXFq rkUiC7yr5VtXFFuy3ECfwNfwfdC+Hqss0Fwk2CnFL0U7x6S2PzmEeVfjDYJHbuY6tzqw bvn1euragkhRCNF85RK0fPdpGjMlu66Ar0KRh+LiJVN5uEWv2PdcEn5I+LurUEC4vhl4 RtDA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id a10si13618058oid.84.2020.01.02.17.43.38; Thu, 02 Jan 2020 17:43:50 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726148AbgACBmy (ORCPT + 99 others); Thu, 2 Jan 2020 20:42:54 -0500 Received: from szxga06-in.huawei.com ([45.249.212.32]:52154 "EHLO huawei.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1725943AbgACBmy (ORCPT ); Thu, 2 Jan 2020 20:42:54 -0500 Received: from DGGEMS409-HUB.china.huawei.com (unknown [172.30.72.58]) by Forcepoint Email with ESMTP id 666E1C68E69381AA17F5; Fri, 3 Jan 2020 09:42:52 +0800 (CST) Received: from localhost.localdomain (10.69.192.56) by DGGEMS409-HUB.china.huawei.com (10.3.19.209) with Microsoft SMTP Server id 14.3.439.0; Fri, 3 Jan 2020 09:42:43 +0800 From: Tian Tao To: , , , , , , , , , CC: Subject: [PATCH] drm/hisilicon: Enforce 128-byte stride alignment to fix the display problem Date: Fri, 3 Jan 2020 09:42:50 +0800 Message-ID: <1578015770-36470-1-git-send-email-tiantao6@hisilicon.com> X-Mailer: git-send-email 2.7.4 MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.69.192.56] X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org because the hardware limitation,The initial color depth must set to 32bpp and must set the FB Offset of the display hardware to 128Byte alignment, which is used to solve the display problem at 800x600 and 1440x900 resolution under 16bpp. Signed-off-by: Tian Tao Signed-off-by: Gong junjie --- drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c | 13 ++++++------- drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c | 4 ++-- drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c | 2 +- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c index 12b38ac..843d784 100644 --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c @@ -83,9 +83,6 @@ static int hibmc_plane_atomic_check(struct drm_plane *plane, return -EINVAL; } - if (!crtc_state->enable) - return 0; - if (state->crtc_x + state->crtc_w > crtc_state->adjusted_mode.hdisplay || state->crtc_y + state->crtc_h > @@ -94,6 +91,11 @@ static int hibmc_plane_atomic_check(struct drm_plane *plane, return -EINVAL; } + if (state->fb->pitches[0] % 128 != 0) { + DRM_DEBUG_ATOMIC("wrong stride with 128-byte aligned\n"); + return -EINVAL; + } + return 0; } @@ -119,11 +121,8 @@ static void hibmc_plane_atomic_update(struct drm_plane *plane, writel(gpu_addr, priv->mmio + HIBMC_CRT_FB_ADDRESS); reg = state->fb->width * (state->fb->format->cpp[0]); - /* now line_pad is 16 */ - reg = PADDING(16, reg); - line_l = state->fb->width * state->fb->format->cpp[0]; - line_l = PADDING(16, line_l); + line_l = state->fb->pitches[0]; writel(HIBMC_FIELD(HIBMC_CRT_FB_WIDTH_WIDTH, reg) | HIBMC_FIELD(HIBMC_CRT_FB_WIDTH_OFFS, line_l), priv->mmio + HIBMC_CRT_FB_WIDTH); diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c index 1d15560..ca42dd7 100644 --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c @@ -73,7 +73,7 @@ static int hibmc_drm_fb_create(struct drm_fb_helper *helper, mode_cmd.width = sizes->surface_width; mode_cmd.height = sizes->surface_height; - mode_cmd.pitches[0] = mode_cmd.width * bytes_per_pixel; + mode_cmd.pitches[0] = ALIGN(mode_cmd.width * bytes_per_pixel, 128); mode_cmd.pixel_format = drm_mode_legacy_fb_format(sizes->surface_bpp, sizes->surface_depth); @@ -186,7 +186,7 @@ int hibmc_fbdev_init(struct hibmc_drm_private *priv) goto fini; } - ret = drm_fb_helper_initial_config(&hifbdev->helper, 16); + ret = drm_fb_helper_initial_config(&hifbdev->helper, 32); if (ret) { DRM_ERROR("failed to setup initial conn config: %d\n", ret); goto fini; diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c index 19dc525..1cc702f 100644 --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c @@ -76,7 +76,7 @@ int hibmc_dumb_create(struct drm_file *file, struct drm_device *dev, u32 handle; int ret; - args->pitch = ALIGN(args->width * DIV_ROUND_UP(args->bpp, 8), 16); + args->pitch = ALIGN(args->width * DIV_ROUND_UP(args->bpp, 8), 128); args->size = args->pitch * args->height; ret = hibmc_gem_create(dev, args->size, false, -- 2.7.4