From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2865DC43334 for ; Mon, 3 Sep 2018 10:58:18 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id E049520856 for ; Mon, 3 Sep 2018 10:58:17 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E049520856 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727500AbeICPRx (ORCPT ); Mon, 3 Sep 2018 11:17:53 -0400 Received: from mx3-rdu2.redhat.com ([66.187.233.73]:40506 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1725943AbeICPRi (ORCPT ); Mon, 3 Sep 2018 11:17:38 -0400 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 7328A8011309; Mon, 3 Sep 2018 10:58:00 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-116-66.ams2.redhat.com [10.36.116.66]) by smtp.corp.redhat.com (Postfix) with ESMTP id 718512027EA0; Mon, 3 Sep 2018 10:57:58 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id CBBD017444; Mon, 3 Sep 2018 12:57:57 +0200 (CEST) From: Gerd Hoffmann To: dri-devel@lists.freedesktop.org Cc: Gerd Hoffmann , Gustavo Padovan , Maarten Lankhorst , Sean Paul , David Airlie , linux-kernel@vger.kernel.org (open list) Subject: [PATCH 3/5] drm: fix drm_mode_addfb() on big endian machines. Date: Mon, 3 Sep 2018 12:57:54 +0200 Message-Id: <20180903105756.24912-4-kraxel@redhat.com> In-Reply-To: <20180903105756.24912-1-kraxel@redhat.com> References: <20180903105756.24912-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.8]); Mon, 03 Sep 2018 10:58:00 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.8]); Mon, 03 Sep 2018 10:58:00 +0000 (UTC) for IP:'10.11.54.4' DOMAIN:'int-mx04.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'kraxel@redhat.com' RCPT:'' Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Userspace on big endian machhines typically expects the ADDFB ioctl returns a big endian framebuffer. drm_mode_addfb() will call drm_mode_addfb2() unconditionally with little endian DRM_FORMAT_* values though, which is wrong. This patch fixes that. Drivers (both kernel and xorg) have quirks in place to deal with the broken drm_mode_addfb() behavior. Because of this we can't just change drm_mode_addfb() behavior for everybody without breaking things. So add a new driver feature flag DRIVER_PREFER_HOST_BYTE_ORDER, so drivers can opt-in. Signed-off-by: Gerd Hoffmann --- include/drm/drm_drv.h | 1 + drivers/gpu/drm/drm_framebuffer.c | 11 +++++++++++ 2 files changed, 12 insertions(+) diff --git a/include/drm/drm_drv.h b/include/drm/drm_drv.h index 46a8009784..9cf12596cd 100644 --- a/include/drm/drm_drv.h +++ b/include/drm/drm_drv.h @@ -57,6 +57,7 @@ struct drm_printer; #define DRIVER_KMS_LEGACY_CONTEXT 0x20000 #define DRIVER_SYNCOBJ 0x40000 #define DRIVER_PREFER_XBGR_30BPP 0x80000 +#define DRIVER_PREFER_HOST_BYTE_ORDER 0x100000 /** * struct drm_driver - DRM driver structure diff --git a/drivers/gpu/drm/drm_framebuffer.c b/drivers/gpu/drm/drm_framebuffer.c index 88758096d5..ccbda8a2e9 100644 --- a/drivers/gpu/drm/drm_framebuffer.c +++ b/drivers/gpu/drm/drm_framebuffer.c @@ -124,6 +124,17 @@ int drm_mode_addfb(struct drm_device *dev, struct drm_mode_fb_cmd *or, dev->driver->driver_features & DRIVER_PREFER_XBGR_30BPP) r.pixel_format = DRM_FORMAT_XBGR2101010; + if (dev->driver->driver_features & DRIVER_PREFER_HOST_BYTE_ORDER) { + if (r.pixel_format == DRM_FORMAT_XRGB8888) + r.pixel_format = DRM_FORMAT_HOST_XRGB8888; + if (r.pixel_format == DRM_FORMAT_ARGB8888) + r.pixel_format = DRM_FORMAT_HOST_ARGB8888; + if (r.pixel_format == DRM_FORMAT_RGB565) + r.pixel_format = DRM_FORMAT_HOST_RGB565; + if (r.pixel_format == DRM_FORMAT_XRGB1555) + r.pixel_format = DRM_FORMAT_HOST_XRGB1555; + } + ret = drm_mode_addfb2(dev, &r, file_priv); if (ret) return ret; -- 2.9.3 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Gerd Hoffmann Subject: [PATCH 3/5] drm: fix drm_mode_addfb() on big endian machines. Date: Mon, 3 Sep 2018 12:57:54 +0200 Message-ID: <20180903105756.24912-4-kraxel@redhat.com> References: <20180903105756.24912-1-kraxel@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx1.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by gabe.freedesktop.org (Postfix) with ESMTPS id 75B346E1D4 for ; Mon, 3 Sep 2018 10:58:01 +0000 (UTC) In-Reply-To: <20180903105756.24912-1-kraxel@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: David Airlie , open list , Gerd Hoffmann , Sean Paul List-Id: dri-devel@lists.freedesktop.org VXNlcnNwYWNlIG9uIGJpZyBlbmRpYW4gbWFjaGhpbmVzIHR5cGljYWxseSBleHBlY3RzIHRoZSBB RERGQiBpb2N0bApyZXR1cm5zIGEgYmlnIGVuZGlhbiBmcmFtZWJ1ZmZlci4gIGRybV9tb2RlX2Fk ZGZiKCkgd2lsbCBjYWxsCmRybV9tb2RlX2FkZGZiMigpIHVuY29uZGl0aW9uYWxseSB3aXRoIGxp dHRsZSBlbmRpYW4gRFJNX0ZPUk1BVF8qCnZhbHVlcyB0aG91Z2gsIHdoaWNoIGlzIHdyb25nLiAg VGhpcyBwYXRjaCBmaXhlcyB0aGF0LgoKRHJpdmVycyAoYm90aCBrZXJuZWwgYW5kIHhvcmcpIGhh dmUgcXVpcmtzIGluIHBsYWNlIHRvIGRlYWwgd2l0aCB0aGUKYnJva2VuIGRybV9tb2RlX2FkZGZi KCkgYmVoYXZpb3IuICBCZWNhdXNlIG9mIHRoaXMgd2UgY2FuJ3QganVzdCBjaGFuZ2UKZHJtX21v ZGVfYWRkZmIoKSBiZWhhdmlvciBmb3IgZXZlcnlib2R5IHdpdGhvdXQgYnJlYWtpbmcgdGhpbmdz LiAgU28gYWRkCmEgbmV3IGRyaXZlciBmZWF0dXJlIGZsYWcgRFJJVkVSX1BSRUZFUl9IT1NUX0JZ VEVfT1JERVIsIHNvIGRyaXZlcnMgY2FuCm9wdC1pbi4KClNpZ25lZC1vZmYtYnk6IEdlcmQgSG9m Zm1hbm4gPGtyYXhlbEByZWRoYXQuY29tPgotLS0KIGluY2x1ZGUvZHJtL2RybV9kcnYuaCAgICAg ICAgICAgICB8ICAxICsKIGRyaXZlcnMvZ3B1L2RybS9kcm1fZnJhbWVidWZmZXIuYyB8IDExICsr KysrKysrKysrCiAyIGZpbGVzIGNoYW5nZWQsIDEyIGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQg YS9pbmNsdWRlL2RybS9kcm1fZHJ2LmggYi9pbmNsdWRlL2RybS9kcm1fZHJ2LmgKaW5kZXggNDZh ODAwOTc4NC4uOWNmMTI1OTZjZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2Rydi5oCisr KyBiL2luY2x1ZGUvZHJtL2RybV9kcnYuaApAQCAtNTcsNiArNTcsNyBAQCBzdHJ1Y3QgZHJtX3By aW50ZXI7CiAjZGVmaW5lIERSSVZFUl9LTVNfTEVHQUNZX0NPTlRFWFQJMHgyMDAwMAogI2RlZmlu ZSBEUklWRVJfU1lOQ09CSiAgICAgICAgICAgICAgICAgIDB4NDAwMDAKICNkZWZpbmUgRFJJVkVS X1BSRUZFUl9YQkdSXzMwQlBQICAgICAgICAweDgwMDAwCisjZGVmaW5lIERSSVZFUl9QUkVGRVJf SE9TVF9CWVRFX09SREVSICAgMHgxMDAwMDAKIAogLyoqCiAgKiBzdHJ1Y3QgZHJtX2RyaXZlciAt IERSTSBkcml2ZXIgc3RydWN0dXJlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2Zy YW1lYnVmZmVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZyYW1lYnVmZmVyLmMKaW5kZXggODg3 NTgwOTZkNS4uY2NiZGE4YTJlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9mcmFt ZWJ1ZmZlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZnJhbWVidWZmZXIuYwpAQCAtMTI0 LDYgKzEyNCwxNyBAQCBpbnQgZHJtX21vZGVfYWRkZmIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwg c3RydWN0IGRybV9tb2RlX2ZiX2NtZCAqb3IsCiAJICAgIGRldi0+ZHJpdmVyLT5kcml2ZXJfZmVh dHVyZXMgJiBEUklWRVJfUFJFRkVSX1hCR1JfMzBCUFApCiAJCXIucGl4ZWxfZm9ybWF0ID0gRFJN X0ZPUk1BVF9YQkdSMjEwMTAxMDsKIAorCWlmIChkZXYtPmRyaXZlci0+ZHJpdmVyX2ZlYXR1cmVz ICYgRFJJVkVSX1BSRUZFUl9IT1NUX0JZVEVfT1JERVIpIHsKKwkJaWYgKHIucGl4ZWxfZm9ybWF0 ID09IERSTV9GT1JNQVRfWFJHQjg4ODgpCisJCQlyLnBpeGVsX2Zvcm1hdCA9IERSTV9GT1JNQVRf SE9TVF9YUkdCODg4ODsKKwkJaWYgKHIucGl4ZWxfZm9ybWF0ID09IERSTV9GT1JNQVRfQVJHQjg4 ODgpCisJCQlyLnBpeGVsX2Zvcm1hdCA9IERSTV9GT1JNQVRfSE9TVF9BUkdCODg4ODsKKwkJaWYg KHIucGl4ZWxfZm9ybWF0ID09IERSTV9GT1JNQVRfUkdCNTY1KQorCQkJci5waXhlbF9mb3JtYXQg PSBEUk1fRk9STUFUX0hPU1RfUkdCNTY1OworCQlpZiAoci5waXhlbF9mb3JtYXQgPT0gRFJNX0ZP Uk1BVF9YUkdCMTU1NSkKKwkJCXIucGl4ZWxfZm9ybWF0ID0gRFJNX0ZPUk1BVF9IT1NUX1hSR0Ix NTU1OworCX0KKwogCXJldCA9IGRybV9tb2RlX2FkZGZiMihkZXYsICZyLCBmaWxlX3ByaXYpOwog CWlmIChyZXQpCiAJCXJldHVybiByZXQ7Ci0tIAoyLjkuMwoKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2 ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21h aWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==