All of lore.kernel.org
 help / color / mirror / Atom feed
From: Peter Maydell <peter.maydell@linaro.org>
To: BALATON Zoltan <balaton@eik.bme.hu>
Cc: QEMU Developers <qemu-devel@nongnu.org>,
	QEMU Trivial <qemu-trivial@nongnu.org>,
	Aurelien Jarno <aurelien@aurel32.net>
Subject: Re: [Qemu-devel] [PATCH v2 07/14] sm501: Fix device endianness
Date: Thu, 2 Mar 2017 21:04:18 +0000	[thread overview]
Message-ID: <CAFEAcA9FL-sshVzKewf+rCs6-5_c2Y86Qy0b=3DMog4MrVOpwA@mail.gmail.com> (raw)
In-Reply-To: <6b70a9dfe56c3a0dc8e874c45d70612aff7b8e3a.1488068248.git.balaton@eik.bme.hu>

On 25 February 2017 at 18:46, BALATON Zoltan <balaton@eik.bme.hu> wrote:
> Signed-off-by: BALATON Zoltan <balaton@eik.bme.hu>
> ---
>
> v2: Split off small clean up to other patch
>
>  hw/display/sm501.c          |  6 +++---
>  hw/display/sm501_template.h | 23 ++++++++++++++---------
>  2 files changed, 17 insertions(+), 12 deletions(-)
>
> diff --git a/hw/display/sm501.c b/hw/display/sm501.c
> index b977094..2694081 100644
> --- a/hw/display/sm501.c
> +++ b/hw/display/sm501.c
> @@ -849,7 +849,7 @@ static const MemoryRegionOps sm501_system_config_ops = {
>          .min_access_size = 4,
>          .max_access_size = 4,
>      },
> -    .endianness = DEVICE_NATIVE_ENDIAN,
> +    .endianness = DEVICE_LITTLE_ENDIAN,
>  };
>
>  static uint32_t sm501_palette_read(void *opaque, hwaddr addr)
> @@ -1085,7 +1085,7 @@ static const MemoryRegionOps sm501_disp_ctrl_ops = {
>          .min_access_size = 4,
>          .max_access_size = 4,
>      },
> -    .endianness = DEVICE_NATIVE_ENDIAN,
> +    .endianness = DEVICE_LITTLE_ENDIAN,
>  };
>
>  static uint64_t sm501_2d_engine_read(void *opaque, hwaddr addr,
> @@ -1173,7 +1173,7 @@ static const MemoryRegionOps sm501_2d_engine_ops = {
>          .min_access_size = 4,
>          .max_access_size = 4,
>      },
> -    .endianness = DEVICE_NATIVE_ENDIAN,
> +    .endianness = DEVICE_LITTLE_ENDIAN,
>  };
>
>  /* draw line functions for all console modes */
> diff --git a/hw/display/sm501_template.h b/hw/display/sm501_template.h
> index 832ee61..6e56baf 100644
> --- a/hw/display/sm501_template.h
> +++ b/hw/display/sm501_template.h
> @@ -64,10 +64,16 @@ static void glue(draw_line16_, PIXEL_NAME)(
>      uint8_t r, g, b;
>
>      do {
> -        rgb565 = lduw_p(s);
> -        r = ((rgb565 >> 11) & 0x1f) << 3;
> -        g = ((rgb565 >>  5) & 0x3f) << 2;
> -        b = ((rgb565 >>  0) & 0x1f) << 3;
> +        rgb565 = lduw_le_p(s);
> +#if defined(TARGET_WORDS_BIGENDIAN)
> +        r = (rgb565 >> 8) & 0xf8;
> +        g = (rgb565 >> 3) & 0xfc;
> +        b = (rgb565 << 3) & 0xf8;
> +#else
> +        b = (rgb565 >> 8) & 0xf8;
> +        g = (rgb565 >> 3) & 0xfc;
> +        r = (rgb565 << 3) & 0xf8;
> +#endif
>          *(PIXEL_TYPE *)d = glue(rgb_to_pixel, PIXEL_NAME)(r, g, b);
>          s += 2;
>          d += BPP;
> @@ -80,15 +86,14 @@ static void glue(draw_line32_, PIXEL_NAME)(
>      uint8_t r, g, b;
>
>      do {
> -        ldub_p(s);
>  #if defined(TARGET_WORDS_BIGENDIAN)
> +        r = s[0];
> +        g = s[1];
> +        b = s[2];
> +#else
>          r = s[1];
>          g = s[2];
>          b = s[3];
> -#else
> -        b = s[0];
> -        g = s[1];
> -        r = s[2];
>  #endif
>          *(PIXEL_TYPE *)d = glue(rgb_to_pixel, PIXEL_NAME)(r, g, b);
>          s += 4;

I still suspect this is not correct. In particular, if you
look at the Linux driver:

http://lxr.free-electrons.com/source/drivers/video/fbdev/sm501fb.c#L341

we have for 32 bit two layouts within a 32-bit word:
 BGRX (if "swap fb endian" is set)
 XRGB (the usual)
(plus the cross-product with "32-bit load is BE or LE",
since we've coded this as byte accesses rather than a ldl_*_p()).

and for 16 bit we have either RGB or BGR ordering.
I'm not completely sure this lines up with the code you have.

Looking at how the SWAP_FB_ENDIAN flag gets set:
 * for the r2d board it is set always
 * for PCI devices, it is set only if big-endian

I suspect that what we actually have here is something
like:
 * for the PCI device it's always little endian (and the
   code ought not to need to depend on TARGET_WORDS_BIGENDIAN)
 * sysbus device may be more complicated

Also I note there's an SM501_ENDIAN_CONTROL register on the
device, which presumably if written changes the behaviour.

Plus for the sysbus device if we change the settings to
DEVICE_LITTLE_ENDIAN for the various control register
regions that suggests we should be consistent about the
serial_mm_init() endian order and also the USB controller.

It's late evening here though so I can't investigate any
further right now.

thanks
-- PMM

  reply	other threads:[~2017-03-02 21:04 UTC|newest]

Thread overview: 53+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-02-26  0:17 [Qemu-devel] [PATCH v2 00/14] Improvements for SM501 display controller emulation BALATON Zoltan
2017-02-25 18:23 ` [Qemu-devel] [PATCH v2 04/14] sm501: Get rid of base address in draw_hwc_line BALATON Zoltan
2017-03-02 19:14   ` Peter Maydell
2017-03-02 20:06     ` BALATON Zoltan
2017-02-25 18:31 ` [Qemu-devel] [PATCH v2 05/14] sm501: Add emulation of chip connected via PCI BALATON Zoltan
2017-03-02 19:22   ` Peter Maydell
2017-03-02 20:13     ` BALATON Zoltan
2017-03-02 20:43       ` Peter Maydell
2017-03-03  1:53         ` BALATON Zoltan
2017-02-25 18:46 ` [Qemu-devel] [PATCH v2 07/14] sm501: Fix device endianness BALATON Zoltan
2017-03-02 21:04   ` Peter Maydell [this message]
2017-03-03  2:15     ` BALATON Zoltan
2017-03-03 18:49       ` Peter Maydell
2017-03-03 20:11         ` BALATON Zoltan
2017-03-04 12:40           ` Peter Maydell
2017-03-04 22:58             ` BALATON Zoltan
2017-03-06 10:32               ` Peter Maydell
2017-03-06 18:46                 ` BALATON Zoltan
2017-02-25 19:19 ` [Qemu-devel] [PATCH v2 09/14] sm501: Misc clean ups BALATON Zoltan
2017-03-02 19:35   ` Peter Maydell
2017-02-25 19:25 ` [Qemu-devel] [PATCH v2 10/14] sm501: Add support for panel layer BALATON Zoltan
2017-03-02 19:44   ` Peter Maydell
2017-03-02 20:15     ` BALATON Zoltan
2017-03-02 20:46       ` Peter Maydell
2017-02-25 21:47 ` [Qemu-devel] [PATCH v2 12/14] sm501: Implement reading 2D engine registers BALATON Zoltan
2017-03-02 20:00   ` Peter Maydell
2017-03-02 20:22     ` BALATON Zoltan
2017-03-02 20:50       ` Peter Maydell
2017-02-25 23:53 ` [Qemu-devel] [PATCH v2 13/14] sm501: Add reset function and vmstate descriptor BALATON Zoltan
2017-03-02 19:51   ` Peter Maydell
2017-03-02 20:18     ` BALATON Zoltan
2017-03-02 20:49       ` Peter Maydell
2017-03-02 20:55         ` BALATON Zoltan
2017-03-02 21:05           ` BALATON Zoltan
2017-03-02 21:06           ` Peter Maydell
2017-02-26  0:31 ` [Qemu-devel] [PATCH v2 02/14] sm501: Use defines instead of constants where available BALATON Zoltan
2017-03-02 18:53   ` Peter Maydell
2017-03-02 19:03     ` Peter Maydell
2017-03-02 19:58       ` BALATON Zoltan
2017-02-26  0:31 ` [Qemu-devel] [PATCH v2 14/14] ppc: Add SM501 device in config for ppc and ppcemb targets BALATON Zoltan
2017-02-26  0:31 ` [Qemu-devel] [PATCH v2 06/14] sm501: Add missing arbitration control register BALATON Zoltan
2017-03-02 20:08   ` Peter Maydell
2017-03-02 20:09     ` Peter Maydell
2017-02-26  0:31 ` [Qemu-devel] [PATCH v2 11/14] sm501: Add some more missing registers BALATON Zoltan
2017-03-02 19:59   ` Peter Maydell
2017-03-02 20:21     ` BALATON Zoltan
2017-02-26  0:31 ` [Qemu-devel] [PATCH v2 03/14] sm501: QOMify BALATON Zoltan
2017-03-02 19:55   ` Peter Maydell
2017-02-26  0:31 ` [Qemu-devel] [PATCH v2 08/14] sm501: Fix hardware cursor BALATON Zoltan
2017-03-02 19:35   ` Peter Maydell
2017-02-26  0:31 ` [Qemu-devel] [PATCH v2 01/14] sm501: Fixed code style and a few typos in comments BALATON Zoltan
2017-02-27 18:11 ` [Qemu-devel] [PATCH v2 00/14] Improvements for SM501 display controller emulation Michael Tokarev
2017-02-27 19:03   ` Peter Maydell

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='CAFEAcA9FL-sshVzKewf+rCs6-5_c2Y86Qy0b=3DMog4MrVOpwA@mail.gmail.com' \
    --to=peter.maydell@linaro.org \
    --cc=aurelien@aurel32.net \
    --cc=balaton@eik.bme.hu \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-trivial@nongnu.org \
    /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.