All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Michel Dänzer" <michel@daenzer.net>
To: Ilia Mirkin <imirkin@alum.mit.edu>,
	Gerd Hoffmann <kraxel@redhat.com>,
	David Airlie <airlied@linux.ie>, Sean Paul <sean@poorly.run>
Cc: dri-devel <dri-devel@lists.freedesktop.org>,
	open list <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 3/5] drm: fix drm_mode_addfb() on big endian machines.
Date: Tue, 4 Sep 2018 10:00:27 +0200	[thread overview]
Message-ID: <8e8f8cf3-c4d4-6bfd-4e53-536d4d0c79ff@daenzer.net> (raw)
In-Reply-To: <CAKb7Uvh-UB6pR1r-D5sX0HwWwTExVzjxcdeAKNAmRWdqh=hKGw@mail.gmail.com>

On 2018-09-03 7:07 p.m., Ilia Mirkin wrote:
> On Mon, Sep 3, 2018 at 12:45 PM, Daniel Vetter <daniel@ffwll.ch> wrote:
>> On Mon, Sep 03, 2018 at 12:57:54PM +0200, Gerd Hoffmann wrote:
>>> 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 <kraxel@redhat.com>
>>> ---
>>>  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
>>
>> Hm, not a huge fan of using driver_flags for random little quirks. I think
>> a boolean in sturct drm_mode_config would be much better. Bonus if you
>> also move the 30bpp hack over to that. Something like
>> mode_config.quirk_addfb_host_byte_order and
>> mode_config.quirk_addfb_prefer_xbgr_30bpp or whatever. That has the upside
>> of giving us a really nice place to put a huge comment about what this is
>> supposed to do.
>>
>> I think otherwise this looks overall rather reasonable. I think the only
>> other driver that ever cared about big endian was radeon/amdgpu. Would be
>> good to get at least an ack from amd folks, or a "meh, stopped caring".
> 
> and nouveau.
> 
> I do believe that ADDFB should be made to always prefer host byte
> order -- this is how all of the existing implementations work in
> practice. However e.g. nouveau wants DRM_FORMAT_XRGB8888. But it still
> treats it as host byte order. This will become more important in a
> world where ADDFB2 is more common.
> 
> So, I think that this change should be applied, drivers (I suspect
> just nouveau and radeon) fixed up to consume the "new" formats, [...]

As explained before, that would break radeon userspace on big endian hosts.


-- 
Earthling Michel Dänzer               |               http://www.amd.com
Libre software enthusiast             |             Mesa and X developer

WARNING: multiple messages have this Message-ID (diff)
From: "Michel Dänzer" <michel@daenzer.net>
To: Ilia Mirkin <imirkin@alum.mit.edu>,
	Gerd Hoffmann <kraxel@redhat.com>,
	David Airlie <airlied@linux.ie>, Sean Paul <sean@poorly.run>
Cc: open list <linux-kernel@vger.kernel.org>,
	dri-devel <dri-devel@lists.freedesktop.org>
Subject: Re: [PATCH 3/5] drm: fix drm_mode_addfb() on big endian machines.
Date: Tue, 4 Sep 2018 10:00:27 +0200	[thread overview]
Message-ID: <8e8f8cf3-c4d4-6bfd-4e53-536d4d0c79ff@daenzer.net> (raw)
In-Reply-To: <CAKb7Uvh-UB6pR1r-D5sX0HwWwTExVzjxcdeAKNAmRWdqh=hKGw@mail.gmail.com>

On 2018-09-03 7:07 p.m., Ilia Mirkin wrote:
> On Mon, Sep 3, 2018 at 12:45 PM, Daniel Vetter <daniel@ffwll.ch> wrote:
>> On Mon, Sep 03, 2018 at 12:57:54PM +0200, Gerd Hoffmann wrote:
>>> 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 <kraxel@redhat.com>
>>> ---
>>>  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
>>
>> Hm, not a huge fan of using driver_flags for random little quirks. I think
>> a boolean in sturct drm_mode_config would be much better. Bonus if you
>> also move the 30bpp hack over to that. Something like
>> mode_config.quirk_addfb_host_byte_order and
>> mode_config.quirk_addfb_prefer_xbgr_30bpp or whatever. That has the upside
>> of giving us a really nice place to put a huge comment about what this is
>> supposed to do.
>>
>> I think otherwise this looks overall rather reasonable. I think the only
>> other driver that ever cared about big endian was radeon/amdgpu. Would be
>> good to get at least an ack from amd folks, or a "meh, stopped caring".
> 
> and nouveau.
> 
> I do believe that ADDFB should be made to always prefer host byte
> order -- this is how all of the existing implementations work in
> practice. However e.g. nouveau wants DRM_FORMAT_XRGB8888. But it still
> treats it as host byte order. This will become more important in a
> world where ADDFB2 is more common.
> 
> So, I think that this change should be applied, drivers (I suspect
> just nouveau and radeon) fixed up to consume the "new" formats, [...]

As explained before, that would break radeon userspace on big endian hosts.


-- 
Earthling Michel Dänzer               |               http://www.amd.com
Libre software enthusiast             |             Mesa and X developer
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

  reply	other threads:[~2018-09-04  8:00 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-09-03 10:57 [PATCH 0/5] drm: byteorder fixes Gerd Hoffmann
2018-09-03 10:57 ` [PATCH 1/5] drm: byteorder: add DRM_FORMAT_HOST_* Gerd Hoffmann
2018-09-03 10:57   ` Gerd Hoffmann
2018-09-03 10:57 ` [PATCH 2/5] drm: do not mask out DRM_FORMAT_BIG_ENDIAN Gerd Hoffmann
2018-09-03 10:57   ` Gerd Hoffmann
2018-09-03 10:57 ` [PATCH 3/5] drm: fix drm_mode_addfb() on big endian machines Gerd Hoffmann
2018-09-03 10:57   ` Gerd Hoffmann
2018-09-03 16:45   ` Daniel Vetter
2018-09-03 17:01     ` Michel Dänzer
2018-09-03 17:01       ` Michel Dänzer
2018-09-03 17:07     ` Ilia Mirkin
2018-09-04  8:00       ` Michel Dänzer [this message]
2018-09-04  8:00         ` Michel Dänzer
2018-09-04 13:05         ` Ilia Mirkin
2018-09-04 13:05           ` Ilia Mirkin
2018-09-04 15:02           ` Michel Dänzer
2018-09-04 15:02             ` Michel Dänzer
2018-09-04 15:15             ` Ilia Mirkin
2018-09-04 15:15               ` Ilia Mirkin
2018-09-05  6:10               ` Gerd Hoffmann
2018-09-03 10:57 ` [PATCH 4/5] drm/bochs: fix DRM_FORMAT_* handling for " Gerd Hoffmann
2018-09-03 10:57   ` Gerd Hoffmann
2018-09-03 10:57 ` [PATCH 5/5] drm/virtio: fix DRM_FORMAT_* handling Gerd Hoffmann
2018-09-03 10:57   ` Gerd Hoffmann
2018-09-03 10:57 ` Gerd Hoffmann

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=8e8f8cf3-c4d4-6bfd-4e53-536d4d0c79ff@daenzer.net \
    --to=michel@daenzer.net \
    --cc=airlied@linux.ie \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=imirkin@alum.mit.edu \
    --cc=kraxel@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=sean@poorly.run \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.