Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp2987366imu; Sun, 9 Dec 2018 14:22:21 -0800 (PST) X-Google-Smtp-Source: AFSGD/XIMg7234GztJW7elSCB3BN5ZcBh2Pu8PEZsFcx93VYPvoj0l8bg8crY8nWBuDrxWmn+8eS X-Received: by 2002:a63:604f:: with SMTP id u76mr8897994pgb.401.1544394141163; Sun, 09 Dec 2018 14:22:21 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1544394141; cv=none; d=google.com; s=arc-20160816; b=GM+7dSBgzF+wPQSYYxjsUFwkffL3Peb9UEcy+CNweek8wpcCknIW3BGe2NI86N78UK WWktzWxo8JN3jyTMKXl2JrqeF709thBX8Hhi6t9AB4kgEy4XqK9ipFyLPPGKsh5Wsv4b YNen3ZbmtN+KJIAFlp2t+aIp0dxAM1Yj0DjcV+eFMGuevfVekSLJMkvZ9WJGISMI/AeA 5iUnZSGZE0MH1EqrnIeYxarW1TCNDETqgOeTud4MXni8NXtD/yz7S0a2CfA84Bc2lmmM fEcH8uLEHpgSxo3qBjXImuMJrFNGbJzAz9I5kMQ5X2ECkVI1BYUFwlTUERI78g+4dXou cvww== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:in-reply-to:subject:message-id:date:cc:to :from:mime-version:content-transfer-encoding:content-disposition; bh=0YvReQn1YqfEM5KXWi5NAkCv1IRc5XtNgHwrAu4xbo8=; b=hLa8w9FxvM0SOvrQvHzgXF1obutPCUeW6zIZDjAKgUhyzu0bYLfFePfVybv6ngb3tM SQ7nwsVplu3nzDXPhmNoK0xxJ96YJ/77/jiMlwxlEfXaHcRwPjqP+iJ8Kr3abo94elFt OQ67so73Hp9VZQ+MAEOU95lStF+bizjz7YXcksFzwEQx8O7Y3EirBvdhVS6deD+5P2ye SnB1yRmFT+3ZILRFThBYC2lLytk8E6tjHrD6h8pZ8ebxEZyF0E1Ljuw1On7Mzc0V5ngJ 7R15cYNgUQeGQFaX5fIBB46wE3dxXYcFVh6M8NsZ+zTzfO9iKosdCNIvYVa7PpApMDTG C7uw== 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 z143si9470306pfc.97.2018.12.09.14.22.06; Sun, 09 Dec 2018 14:22:21 -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 S1728328AbeLIWTj (ORCPT + 99 others); Sun, 9 Dec 2018 17:19:39 -0500 Received: from shadbolt.e.decadent.org.uk ([88.96.1.126]:35528 "EHLO shadbolt.e.decadent.org.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726570AbeLIVz0 (ORCPT ); Sun, 9 Dec 2018 16:55:26 -0500 Received: from pub.yeoldevic.com ([81.174.156.145] helo=deadeye) by shadbolt.decadent.org.uk with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.89) (envelope-from ) id 1gW72n-0002ii-AT; Sun, 09 Dec 2018 21:55:21 +0000 Received: from ben by deadeye with local (Exim 4.91) (envelope-from ) id 1gW72k-0003eI-GO; Sun, 09 Dec 2018 21:55:18 +0000 Content-Type: text/plain; charset="UTF-8" Content-Disposition: inline Content-Transfer-Encoding: 8bit MIME-Version: 1.0 From: Ben Hutchings To: linux-kernel@vger.kernel.org, stable@vger.kernel.org CC: akpm@linux-foundation.org, "Daniel Vetter" , "Ville =?UTF-8?Q?Syrj=C3=A4l=C3=A4?=" , "Eugeniy Paltsev" Date: Sun, 09 Dec 2018 21:50:33 +0000 Message-ID: X-Mailer: LinuxStableQueue (scripts by bwh) X-Patchwork-Hint: ignore Subject: [PATCH 3.16 292/328] drm: fb-helper: Reject all pixel format changing requests In-Reply-To: X-SA-Exim-Connect-IP: 81.174.156.145 X-SA-Exim-Mail-From: ben@decadent.org.uk X-SA-Exim-Scanned: No (on shadbolt.decadent.org.uk); SAEximRunCond expanded to false Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 3.16.62-rc1 review patch. If anyone has any objections, please let me know. ------------------ From: Eugeniy Paltsev commit db05c481977599236f12a85e55de9f5ab37b0a2c upstream. drm fbdev emulation doesn't support changing the pixel format at all, so reject all pixel format changing requests. Signed-off-by: Eugeniy Paltsev Reviewed-by: Ville Syrjälä Signed-off-by: Daniel Vetter Link: https://patchwork.freedesktop.org/patch/msgid/20181003164538.5534-1-Eugeniy.Paltsev@synopsys.com Signed-off-by: Ben Hutchings --- drivers/gpu/drm/drm_fb_helper.c | 91 ++++++++++----------------------- 1 file changed, 26 insertions(+), 65 deletions(-) --- a/drivers/gpu/drm/drm_fb_helper.c +++ b/drivers/gpu/drm/drm_fb_helper.c @@ -750,6 +750,25 @@ int drm_fb_helper_setcmap(struct fb_cmap } EXPORT_SYMBOL(drm_fb_helper_setcmap); +static bool drm_fb_pixel_format_equal(const struct fb_var_screeninfo *var_1, + const struct fb_var_screeninfo *var_2) +{ + return var_1->bits_per_pixel == var_2->bits_per_pixel && + var_1->grayscale == var_2->grayscale && + var_1->red.offset == var_2->red.offset && + var_1->red.length == var_2->red.length && + var_1->red.msb_right == var_2->red.msb_right && + var_1->green.offset == var_2->green.offset && + var_1->green.length == var_2->green.length && + var_1->green.msb_right == var_2->green.msb_right && + var_1->blue.offset == var_2->blue.offset && + var_1->blue.length == var_2->blue.length && + var_1->blue.msb_right == var_2->blue.msb_right && + var_1->transp.offset == var_2->transp.offset && + var_1->transp.length == var_2->transp.length && + var_1->transp.msb_right == var_2->transp.msb_right; +} + /** * drm_fb_helper_check_var - implementation for ->fb_check_var * @var: screeninfo to check @@ -760,7 +779,6 @@ int drm_fb_helper_check_var(struct fb_va { struct drm_fb_helper *fb_helper = info->par; struct drm_framebuffer *fb = fb_helper->fb; - int depth; if (var->pixclock != 0 || in_dbg_master()) return -EINVAL; @@ -777,72 +795,15 @@ int drm_fb_helper_check_var(struct fb_va return -EINVAL; } - switch (var->bits_per_pixel) { - case 16: - depth = (var->green.length == 6) ? 16 : 15; - break; - case 32: - depth = (var->transp.length > 0) ? 32 : 24; - break; - default: - depth = var->bits_per_pixel; - break; - } - - switch (depth) { - case 8: - var->red.offset = 0; - var->green.offset = 0; - var->blue.offset = 0; - var->red.length = 8; - var->green.length = 8; - var->blue.length = 8; - var->transp.length = 0; - var->transp.offset = 0; - break; - case 15: - var->red.offset = 10; - var->green.offset = 5; - var->blue.offset = 0; - var->red.length = 5; - var->green.length = 5; - var->blue.length = 5; - var->transp.length = 1; - var->transp.offset = 15; - break; - case 16: - var->red.offset = 11; - var->green.offset = 5; - var->blue.offset = 0; - var->red.length = 5; - var->green.length = 6; - var->blue.length = 5; - var->transp.length = 0; - var->transp.offset = 0; - break; - case 24: - var->red.offset = 16; - var->green.offset = 8; - var->blue.offset = 0; - var->red.length = 8; - var->green.length = 8; - var->blue.length = 8; - var->transp.length = 0; - var->transp.offset = 0; - break; - case 32: - var->red.offset = 16; - var->green.offset = 8; - var->blue.offset = 0; - var->red.length = 8; - var->green.length = 8; - var->blue.length = 8; - var->transp.length = 8; - var->transp.offset = 24; - break; - default: + /* + * drm fbdev emulation doesn't support changing the pixel format at all, + * so reject all pixel format changing requests. + */ + if (!drm_fb_pixel_format_equal(var, &info->var)) { + DRM_DEBUG("fbdev emulation doesn't support changing the pixel format\n"); return -EINVAL; } + return 0; } EXPORT_SYMBOL(drm_fb_helper_check_var);