[PATCH v3 1/1] bloblist: Fix bloblist convention checking.

Yeo Reum Yun YeoReum.Yun at arm.com
Wed Jul 10 15:52:14 CEST 2024


HI. Raymond.

> Please remove the "FIXME" on top of your changes.
> It was a reminder for the bug of the FW handoff spec.
> We don't need it anymore once your patch is merged.

> BTW, you might need to resend the patch with a new
> subject "[PATCH v2 ....]" instead of following the original
> topic when you send a new version.

Thanks for your review. I'll remove the FIXME and resend with v4.

Thanks!

________________________________________
From: Raymond Mao <raymond.mao at linaro.org>
Sent: 10 July 2024 14:45
To: Yeo Reum Yun
Cc: trini at konsulko.com; sjg at chromium.org; ilias.apalodimas; bmeng.cn at gmail.com; nd; u-boot at lists.denx.de
Subject: Re: [PATCH v3 1/1] bloblist: Fix bloblist convention checking.

Hi Levi,

On Tue, 9 Jul 2024 at 16:21, Levi Yun <yeoreum.yun at arm.com<mailto:yeoreum.yun at arm.com>> wrote:
According to recently firmware handsoff spec [1]'s "Register usage at handoff
boundary", Transfer List's signature value was changed from 0x40_b10b
(3 bytes) to 4a0f_b10b (4 bytes).

As updating of TL's signature, register value of x1/r1 should be:

In aarch32's r1 value should be
    R1[23:0]: set to the TL signature (4a0f_b10b -> masked range value: 0f_b10b)
    R1[31:24]: version of the register convention ==  1

and

In aarch64's x1 value should be
    X1[31:0]: set to the TL signature (4a0f_b10b)
    X1[39:32]: version of the register convention ==  1
    X1[63:40]: MBZ
(See the [2] and [3]).

This patch fix problems:
   1. breaking X1 value with updated specification in aarch64
        - change of length of signature field.

   2. previous error value set in R1 in arm32.
        - length of signature should be 24, but it uses 32bit signature.

[1] https://github.com/FirmwareHandoff/firmware_handoff
[2] https://github.com/FirmwareHandoff/firmware_handoff/issues/32
[3] https://github.com/FirmwareHandoff/firmware_handoff/commit/5aa7aa1d3a1db75213e458d392b751f0707de027

Signed-off-by: Levi Yun <yeoreum.yun at arm.com<mailto:yeoreum.yun at arm.com>>
---
v3:
  - Restore arch/arm/lib/xferlist.c.

v2:
  - Modify commit message.
  - Remove wrong swaping check in xferlist_from_boot_arg().

 common/bloblist.c  | 11 ++++++++++-
 include/bloblist.h |  5 ++++-
 2 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/common/bloblist.c b/common/bloblist.c
index 11d6422b69..2008ab4d25 100644
--- a/common/bloblist.c
+++ b/common/bloblist.c
@@ -576,7 +576,16 @@ int bloblist_maybe_init(void)

 int bloblist_check_reg_conv(ulong rfdt, ulong rzero, ulong rsig)
 {
-       if (rzero || rsig != (BLOBLIST_MAGIC | BLOBLIST_REGCONV_VER) ||
+       ulong version = BLOBLIST_REGCONV_VER;
+       ulong sigval;
+
+       sigval = (IS_ENABLED(CONFIG_64BIT)) ?
+                       ((BLOBLIST_MAGIC & ((1UL << BLOBLIST_REGCONV_SHIFT_64) - 1)) |
+                        ((version  & BLOBLIST_REGCONV_MASK) << BLOBLIST_REGCONV_SHIFT_64)) :
+                       ((BLOBLIST_MAGIC & ((1UL << BLOBLIST_REGCONV_SHIFT_32) - 1)) |
+                        ((version  & BLOBLIST_REGCONV_MASK) << BLOBLIST_REGCONV_SHIFT_32));
+
+       if (rzero || rsig != sigval ||
            rfdt != (ulong)bloblist_find(BLOBLISTT_CONTROL_FDT, 0)) {
                gd->bloblist = NULL;  /* Reset the gd bloblist pointer */
                return -EIO;
diff --git a/include/bloblist.h b/include/bloblist.h
index 7fbdd622bc..f4849f22a0 100644
--- a/include/bloblist.h
+++ b/include/bloblist.h
@@ -83,7 +83,10 @@ enum {
         * Register convention version should be placed into a higher byte
         * https://github.com/FirmwareHandoff/firmware_handoff/issues/32
         */
-       BLOBLIST_REGCONV_VER    = 1 << 24,
+       BLOBLIST_REGCONV_SHIFT_64 = 32,
+       BLOBLIST_REGCONV_SHIFT_32 = 24,
+       BLOBLIST_REGCONV_MASK = 0xff,
+       BLOBLIST_REGCONV_VER = 1,

Please remove the "FIXME" on top of your changes.
It was a reminder for the bug of the FW handoff spec.
We don't need it anymore once your patch is merged.

BTW, you might need to resend the patch with a new
subject "[PATCH v2 ....]" instead of following the original
topic when you send a new version.

Regards,
Raymond


More information about the U-Boot mailing list