Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp4430045imu; Mon, 7 Jan 2019 23:26:59 -0800 (PST) X-Google-Smtp-Source: ALg8bN681xHGHz5kUIOoOpN+eJG8Ig9JqqrR34NX667OXy8ykV4oTh1DVd0dGj7zNNlSj4DPHpo2 X-Received: by 2002:a17:902:784d:: with SMTP id e13mr696627pln.188.1546932418969; Mon, 07 Jan 2019 23:26:58 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1546932418; cv=none; d=google.com; s=arc-20160816; b=DGBt/monF/un4xlog4jDbp2UK7V5u70wRCJwm9qZ/hdrHDZpsY7y7hTSVAmKLsbFgj sjQURZpNpsng+bPBPO7t3yGdwr70BIzXfH0WJp1K/N51uW35VBxmLTprY1G37JECupC6 Cr4Pvdnb7a6ppDZwDMwzjhZEzQznxuOK6L7bQRqI4EYnb65Sz9qDQToIyR7BOKoR4bRp lx66tXqdL0vQUKnX5YBay9wzI8gohJhC2mrP8Xbi4nZfl+J0epwdbHK+BI778ctX9wAx ZF9ZriaBPqRe0hjwXAfFL28AsgWTpokkSpKBCf7d87LG/jeWKrndqUfONb4YXrgNEt2m wa0Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=wbItvwxjvupbEvRykK89kKeIS1oBmUTv7NKg0MnTZSk=; b=E2heZcI2Fai1Gw/mwF6WSI8+/W5TDRvTQ9PaXccSG3EdhHzfJDl55gRajUSdLCags5 jOz+9DovoFEgL8/NRAxziSD97riIencCk7qawry/3qTkm/625Sa2D6f7JWgj6D1QXGqG 4ZxQBRp7Io4Rao8FyqmRVAUnQ9dCv9awdro7k2K4YJ67JyPP9oW/YuGc+7mQbxBE+xd4 inZDpWXmZAR6xJonIasNtZ9WAcwDujaV6Vib1iqHuUb+4N0u0fqDA9nrR9L1QOMoYOUz 0WbLek5D9l7BoeDKB+K8EHspfQdspOa8k2ItSg9EdIgoX61aPIDmxyQIgTiJQn62JK4f 2XZw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=PX8kx9pK; 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; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id y20si14321045pgi.50.2019.01.07.23.26.43; Mon, 07 Jan 2019 23:26:58 -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; dkim=pass header.i=@gmail.com header.s=20161025 header.b=PX8kx9pK; 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; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727752AbfAHHYn (ORCPT + 99 others); Tue, 8 Jan 2019 02:24:43 -0500 Received: from mail-lf1-f68.google.com ([209.85.167.68]:43696 "EHLO mail-lf1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727295AbfAHHYl (ORCPT ); Tue, 8 Jan 2019 02:24:41 -0500 Received: by mail-lf1-f68.google.com with SMTP id u18so2148336lff.10; Mon, 07 Jan 2019 23:24:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=wbItvwxjvupbEvRykK89kKeIS1oBmUTv7NKg0MnTZSk=; b=PX8kx9pKNQr4fJDsyqcJs7y2KjsCYtR7lQckDFAGkg60dUP42NxaO1PuyRvI/4VMz/ POoKbpuyG4E+EJIypCJ2h3oPDCFDUJI9Ua42O4PTBEQ4j+A5UpRzdEdcYdoypa6sHHZ2 fXmlqylcpnqln3oMEbiFSe3cEdRqqWjAZmgY9fLzlgl9Sh7TpizTYgzQXT4gxbuvzfms gfbJIBlvFW4PZzSVye6UtcAXpqmvcJEqQ5uGCMfnMtXG2UGLQcBv2yHk4qyAvetui87p kO/FNr+sq3ZalFPysXwB6cnLV0cQ3Zq+Uhf+Of4ZMzT+ePqoPAFXlgQ0Qq4wRaHb5MK6 zPIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=wbItvwxjvupbEvRykK89kKeIS1oBmUTv7NKg0MnTZSk=; b=YDImrx7skxJj65YjILEXje3/6rHzcJSKt0aKGfAxLKxA5YIHode8UiXO+NzwBFVs6k 75zC03zFQpSklABI1bvcxYVXgBQZ0xAeOkncKcnPknUjpwc4f9L5c6rNoWfYMlrWceQI 92Ch5E1ILFn5tx54XdyDmN3u3a7vDQpkkH/uI3Vp0+wSxxM/EWrCGF7p4unaKI2uCeP/ /Zi0OkSu2DnkTDr4rYVHWX+SomP9zMi4DoNOrz5xND6ZvtQV8ntdlBnB4JZb6OXoWXUI rW8k1NOW/8VG3kAU5q97Z3SQvvNd4qcUrqPrDw80IqAtUrMnISprqIUKfNfCL3JTlLU7 ajxA== X-Gm-Message-State: AJcUukdJdaYyF9N+pv5PiYbbTuRl8FPEISl4JQGJt4xqoy1unu0FesaE neK3h331/TjL933iJLQxtll/rNmIeP4= X-Received: by 2002:a19:1bd2:: with SMTP id b201mr350922lfb.136.1546932278989; Mon, 07 Jan 2019 23:24:38 -0800 (PST) Received: from localhost.localdomain (pool-109-191-228-208.is74.ru. [109.191.228.208]) by smtp.gmail.com with ESMTPSA id t144sm12858447lff.53.2019.01.07.23.24.37 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 07 Jan 2019 23:24:38 -0800 (PST) From: Ivan Mironov To: dri-devel@lists.freedesktop.org Cc: linux-kernel@vger.kernel.org, Maarten Lankhorst , Maxime Ripard , Sean Paul , David Airlie , Daniel Vetter , saahriktu , Eugeniy Paltsev , Ivan Mironov , stable@vger.kernel.org Subject: [PATCH v2 2/2] drm/fb-helper: Ignore the value of fb_var_screeninfo.pixclock Date: Tue, 8 Jan 2019 12:23:53 +0500 Message-Id: <20190108072353.28078-3-mironov.ivan@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190108072353.28078-1-mironov.ivan@gmail.com> References: <20190108072353.28078-1-mironov.ivan@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Strict requirement of pixclock to be zero breaks support of SDL 1.2 which contains hardcoded table of supported video modes with non-zero pixclock values[1]. To better understand which pixclock values are considered valid and how driver should handle these values, I briefly examined few existing fbdev drivers and documentation in Documentation/fb/. And it looks like there are no strict rules on that and actual behaviour varies: * some drivers treat (pixclock == 0) as "use defaults" (uvesafb.c); * some treat (pixclock == 0) as invalid value which leads to -EINVAL (clps711x-fb.c); * some pass converted pixclock value to hardware (uvesafb.c); * some are trying to find nearest value from predefined table (vga16fb.c, video_gx.c). Given this, I believe that it should be safe to just ignore this value if changing is not supported. It seems that any portable fbdev application which was not written only for one specific device working under one specific kernel version should not rely on any particular behaviour of pixclock anyway. However, while enabling SDL1 applications to work out of the box when there is no /etc/fb.modes with valid settings, this change affects the video mode choosing logic in SDL. Depending on current screen resolution, contents of /etc/fb.modes and resolution requested by application, this may lead to user-visible difference (not always): image will be displayed in a right way, but it will be aligned to the left instead of center. There is no "right behaviour" here as well, as emulated fbdev, opposing to old fbdev drivers, simply ignores any requsts of video mode changes with resolutions smaller than current. The easiest way to reproduce this problem is to install sdl-sopwith[2], remove /etc/fb.modes file if it exists, and then try to run sopwith from console without X. At least in Fedora 29, sopwith may be simply installed from standard repositories. [1] SDL 1.2.15 source code, src/video/fbcon/SDL_fbvideo.c, vesa_timings [2] http://sdl-sopwith.sourceforge.net/ Signed-off-by: Ivan Mironov Cc: stable@vger.kernel.org Fixes: 79e539453b34e ("DRM: i915: add mode setting support") Fixes: 771fe6b912fca ("drm/radeon: introduce kernel modesetting for radeon hardware") Fixes: 785b93ef8c309 ("drm/kms: move driver specific fb common code to helper functions (v2)") --- drivers/gpu/drm/drm_fb_helper.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c index ed7e91423258..2d4c2b38508e 100644 --- a/drivers/gpu/drm/drm_fb_helper.c +++ b/drivers/gpu/drm/drm_fb_helper.c @@ -1690,9 +1690,14 @@ int drm_fb_helper_check_var(struct fb_var_screeninfo *var, struct drm_fb_helper *fb_helper = info->par; struct drm_framebuffer *fb = fb_helper->fb; - if (var->pixclock != 0 || in_dbg_master()) + if (in_dbg_master()) return -EINVAL; + if (var->pixclock != 0) { + DRM_DEBUG("fbdev emulation doesn't support changing the pixel clock, value of pixclock is ignored\n"); + var->pixclock = 0; + } + if ((drm_format_info_block_width(fb->format, 0) > 1) || (drm_format_info_block_height(fb->format, 0) > 1)) return -EINVAL; -- 2.20.1