lib: utils: fdt_domain: Use consistent device-tree address when next-arg1 is missing

The diagram shown below illustrates the boot-flow involving OP-TEE OS
initialization.

    (1)-----------+
     | U-Boot SPL |
     +------------+
         |
         v
    (2)-------------------------------------------------------------+
     | OpenSBI (fw_dynamic)                                         |
     |                (4)------------------------+                  |
     |                 | optee dispatcher driver |                  |
     +-----------------+-------^---------|-------+------------------+
M-mode   |                     |         |
---------+--[trusted domain]---+----.----+--[untrusted domain]-------
S-mode   |  (coldboot domain)  |    |    |
         v                     |    |    v
    (3)---------------------------+ |(5)----------------------------+
     | OP-TEE OS                  | | | U-Boot                      |
     +----------------------------+ | +-----------------------------+
                                    |    |
                                    |    v
                                    |(6)----------------------------+
                                    | | Linux                       |
                                    | +-----------------------------+

As OP-TEE OS has device-tree node fixups that need to be passed
through to the next boot stages, e.g. the reserved memory node:

  reserved-memory {
    #address-cells = <2>;
    #size-cells = <2>;
    ranges;
    optee_core@f1000000 {
      no-map;
      reg = <0x0 0xf1000000   // OP-TEE OS base address
             0x0 0x01000000>;
    };
    <...>
  };

Instead of using 0x0 as the default value, allow identical next-arg1
to be used by non-coldboot domain (i.e., untrusted domain) when the
property is not provided.

Also, update the description of next-arg1 property in the document.

Signed-off-by: Yu Chien Peter Lin <peterlin@andestech.com>
Reviewed-by: Alvin Chang <alvinga@andestech.com>
Reviewed-by: Anup Patel <anup@brainfault.org>
This commit is contained in:
Yu Chien Peter Lin
2024-07-24 23:00:54 +08:00
committed by Anup Patel
parent 3d1f53b173
commit 56183ca609
2 changed files with 2 additions and 5 deletions

View File

@@ -180,9 +180,7 @@ The DT properties of a domain instance DT node are as follows:
boot HART of the domain instance. boot HART of the domain instance.
* **next-arg1** (Optional) - The 64 bit next booting stage arg1 for the * **next-arg1** (Optional) - The 64 bit next booting stage arg1 for the
domain instance. If this DT property is not available and coldboot HART domain instance. If this DT property is not available and coldboot HART
is not assigned to the domain instance then **0x0** is used as default is not assigned to the domain instance then **next booting stage arg1 of coldboot HART**
value. If this DT property is not available and coldboot HART is assigned
to the domain instance then **next booting stage arg1 of coldboot HART**
is used as default value. is used as default value.
* **next-addr** (Optional) - The 64 bit next booting stage address for the * **next-addr** (Optional) - The 64 bit next booting stage address for the
domain instance. If this DT property is not available and coldboot HART domain instance. If this DT property is not available and coldboot HART

View File

@@ -395,8 +395,7 @@ static int __fdt_parse_domain(void *fdt, int domain_offset, void *opaque)
val64 = fdt32_to_cpu(val[0]); val64 = fdt32_to_cpu(val[0]);
val64 = (val64 << 32) | fdt32_to_cpu(val[1]); val64 = (val64 << 32) | fdt32_to_cpu(val[1]);
} else { } else {
if (domain_offset == *cold_domain_offset) val64 = sbi_scratch_thishart_ptr()->next_arg1;
val64 = sbi_scratch_thishart_ptr()->next_arg1;
} }
dom->next_arg1 = val64; dom->next_arg1 = val64;