From: Kuan-Wei Chiu <visitorckw@gmail.com>
To: Daniel Palmer <daniel@thingy.jp>
Cc: angelo@kernel-space.org, bmeng.cn@gmail.com, u-boot@lists.denx.de
Subject: Re: [PATCH v2 3/5] virtio: mmio: Keep vendor id little endian
Date: Tue, 7 Apr 2026 00:54:49 +0800 [thread overview]
Message-ID: <adPlWa9YE9_FZJXe@google.com> (raw)
In-Reply-To: <20260406142411.2992618-4-daniel@thingy.jp>
Hi Daniel,
On Mon, Apr 06, 2026 at 11:24:09PM +0900, Daniel Palmer wrote:
> The vendor id is used as a little endian value but it gets
> swapped to the CPU endian in readl(). Swap it back to le
> to avoid the below weird output from `virtio info`.
>
> Device 0: UMEQ VirtIO Block Device
> Type: Hard Disk
> Capacity: 1.0 MB = 0.0 GB (2056 x 512)
>
> Signed-off-by: Daniel Palmer <daniel@thingy.jp>
> ---
> drivers/virtio/virtio_mmio.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/virtio/virtio_mmio.c b/drivers/virtio/virtio_mmio.c
> index 1cd737aca249..ddf873fa96fb 100644
> --- a/drivers/virtio/virtio_mmio.c
> +++ b/drivers/virtio/virtio_mmio.c
> @@ -374,7 +374,7 @@ static int virtio_mmio_probe(struct udevice *udev)
> */
> return 0;
> }
> - uc_priv->vendor = readl(priv->base + VIRTIO_MMIO_VENDOR_ID);
> + uc_priv->vendor = cpu_to_le32(readl(priv->base + VIRTIO_MMIO_VENDOR_ID));
Hi Daniel,
Thanks for the patch!
While using cpu_to_le32() here does fix the visual output, it feels a
bit hacky because it alters the actual core data value just to satisfy
a display quirk.
For example, if someone in the future writes hardware specific logic
like if (uc_priv->vendor == 0x554D4551), it would silently fail on
m68k.
It looks more like a issue in virtio-blk driver to me.
The code currently does this:
sprintf(desc->vendor, "%s", (char *)&uc_priv->vendor);
This direct memory cast relies on little endian byte ordering to spell
"QEMU". On big endian machines, the memory layout naturally spells
"UMEQ".
So maybe we can extract the characters safely using bitwise shifts like
this?
diff --git a/drivers/virtio/virtio_blk.c b/drivers/virtio/virtio_blk.c
index 3dd0cf36268..af61939270d 100644
--- a/drivers/virtio/virtio_blk.c
+++ b/drivers/virtio/virtio_blk.c
@@ -168,10 +168,15 @@ static int virtio_blk_bind(struct udevice *dev)
* virtio mmio transport supplies string identification for us,
* while pci trnasport uses a 2-byte subvendor value.
*/
- if (uc_priv->vendor >> 16)
- sprintf(desc->vendor, "%s", (char *)&uc_priv->vendor);
- else
+ if (uc_priv->vendor >> 16) {
+ desc->vendor[0] = (uc_priv->vendor >> 0) & 0xff;
+ desc->vendor[1] = (uc_priv->vendor >> 8) & 0xff;
+ desc->vendor[2] = (uc_priv->vendor >> 16) & 0xff;
+ desc->vendor[3] = (uc_priv->vendor >> 24) & 0xff;
+ desc->vendor[4] = '\0';
+ } else {
sprintf(desc->vendor, "%04x", uc_priv->vendor);
+ }
desc->bdev = dev;
/* Indicate what driver features we support */
Regards,
Kuan-Wei
next prev parent reply other threads:[~2026-04-06 16:54 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-06 14:24 [PATCH v2 0/5] Add virtio-mmio support to m68k virt machine Daniel Palmer
2026-04-06 14:24 ` [PATCH v2 1/5] sysreset: qemu virt: Use __raw_writel() Daniel Palmer
2026-04-06 16:57 ` Kuan-Wei Chiu
2026-04-08 12:15 ` Angelo Dureghello
2026-04-06 14:24 ` [PATCH v2 2/5] m68k: Fix writew(), writel(), readw(), readl() endianness Daniel Palmer
2026-04-06 17:15 ` Kuan-Wei Chiu
2026-04-07 0:58 ` Daniel Palmer
2026-04-08 12:12 ` Angelo Dureghello
2026-04-08 12:49 ` Daniel Palmer
2026-04-08 13:26 ` Angelo Dureghello
2026-04-08 13:40 ` Daniel Palmer
2026-04-08 14:18 ` Angelo Dureghello
2026-04-06 14:24 ` [PATCH v2 3/5] virtio: mmio: Keep vendor id little endian Daniel Palmer
2026-04-06 16:54 ` Kuan-Wei Chiu [this message]
2026-04-07 1:00 ` Daniel Palmer
2026-04-07 8:20 ` Daniel Palmer
2026-04-06 14:24 ` [PATCH v2 4/5] virtio: mmio: Allow instantiation via platform data Daniel Palmer
2026-04-08 1:47 ` Kuan-Wei Chiu
2026-04-08 9:39 ` Daniel Palmer
2026-04-06 14:24 ` [PATCH v2 5/5] board: qemu: m68k: Create virtio mmio instances Daniel Palmer
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=adPlWa9YE9_FZJXe@google.com \
--to=visitorckw@gmail.com \
--cc=angelo@kernel-space.org \
--cc=bmeng.cn@gmail.com \
--cc=daniel@thingy.jp \
--cc=u-boot@lists.denx.de \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox