Message ID | 20240724150054.3052794-1-peterlin@andestech.com |
---|---|
State | Accepted |
Headers | show |
Series | [v2] lib: utils: fdt_domain: Use consistent device-tree address when next-arg1 is missing | expand |
On Wed, Jul 24, 2024 at 8:31 PM Yu Chien Peter Lin <peterlin@andestech.com> wrote: > > 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> Applied this patch to the riscv/opensbi repo. Thanks, Anup > --- > Changes v1 -> v2: > - Improve commit message, no functional change > --- > docs/domain_support.md | 4 +--- > lib/utils/fdt/fdt_domain.c | 3 +-- > 2 files changed, 2 insertions(+), 5 deletions(-) > > diff --git a/docs/domain_support.md b/docs/domain_support.md > index b34e43a..1a40068 100644 > --- a/docs/domain_support.md > +++ b/docs/domain_support.md > @@ -180,9 +180,7 @@ The DT properties of a domain instance DT node are as follows: > boot HART of the domain instance. > * **next-arg1** (Optional) - The 64 bit next booting stage arg1 for the > 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 > - 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 not assigned to the domain instance then **next booting stage arg1 of coldboot HART** > is used as default value. > * **next-addr** (Optional) - The 64 bit next booting stage address for the > domain instance. If this DT property is not available and coldboot HART > diff --git a/lib/utils/fdt/fdt_domain.c b/lib/utils/fdt/fdt_domain.c > index fa1c357..a13daa6 100644 > --- a/lib/utils/fdt/fdt_domain.c > +++ b/lib/utils/fdt/fdt_domain.c > @@ -395,8 +395,7 @@ static int __fdt_parse_domain(void *fdt, int domain_offset, void *opaque) > val64 = fdt32_to_cpu(val[0]); > val64 = (val64 << 32) | fdt32_to_cpu(val[1]); > } 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; > > -- > 2.45.2 >
diff --git a/docs/domain_support.md b/docs/domain_support.md index b34e43a..1a40068 100644 --- a/docs/domain_support.md +++ b/docs/domain_support.md @@ -180,9 +180,7 @@ The DT properties of a domain instance DT node are as follows: boot HART of the domain instance. * **next-arg1** (Optional) - The 64 bit next booting stage arg1 for the 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 - 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 not assigned to the domain instance then **next booting stage arg1 of coldboot HART** is used as default value. * **next-addr** (Optional) - The 64 bit next booting stage address for the domain instance. If this DT property is not available and coldboot HART diff --git a/lib/utils/fdt/fdt_domain.c b/lib/utils/fdt/fdt_domain.c index fa1c357..a13daa6 100644 --- a/lib/utils/fdt/fdt_domain.c +++ b/lib/utils/fdt/fdt_domain.c @@ -395,8 +395,7 @@ static int __fdt_parse_domain(void *fdt, int domain_offset, void *opaque) val64 = fdt32_to_cpu(val[0]); val64 = (val64 << 32) | fdt32_to_cpu(val[1]); } 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;