tcg2_platform_get_log failing to read address and size of memory-region via ofnode_get_addr_size

Ilias Apalodimas ilias.apalodimas at linaro.org
Tue Mar 26 10:23:28 CET 2024


Hi Tim,

On Tue, 26 Mar 2024 at 03:15, Tim Harvey <tharvey at gateworks.com> wrote:
>
> Greetings,
>
> I'm unable to understand why tcg2_platform_get_log is failing to read
> a memory region.
>
> For example the following diffs:

I am not really sure what those nodes are supposed to do in sandbox.
Pehaps Eddie remembers.
What exactly are you trying to achieve here? Read the eventlog from TF-A?

Thanks
/Ilias
>
> diff --git a/arch/arm/dts/imx8mm-venice-gw73xx.dtsi
> b/arch/arm/dts/imx8mm-venice-gw73xx.dtsi
> index 7b2130dbdb21..57b3c227ceaf 100644
> --- a/arch/arm/dts/imx8mm-venice-gw73xx.dtsi
> +++ b/arch/arm/dts/imx8mm-venice-gw73xx.dtsi
> @@ -112,6 +112,7 @@
>                 compatible = "tcg,tpm_tis-spi";
>                 reg = <0x1>;
>                 spi-max-frequency = <36000000>;
> +               memory-region = <&event_log>;
>         };
>  };
>  diff --git a/arch/arm/dts/imx8mm-venice-gw700x.dtsi
> b/arch/arm/dts/imx8mm-venice-gw700x.dtsi
> index c305e325d007..697fd1148785 100644
> --- a/arch/arm/dts/imx8mm-venice-gw700x.dtsi
> +++ b/arch/arm/dts/imx8mm-venice-gw700x.dtsi
> @@ -13,6 +13,17 @@
>                 reg = <0x0 0x40000000 0 0x80000000>;
>         };
>
> +       reserved-memory {
> +               #address-cells = <2>;
> +               #size-cells = <2>;
> +               ranges;
> +
> +               event_log: tcg_event_log {
> +                       no-map;
> +                       reg = <0 0x40000000 0x2000>;
> +               };
> +       };
> +
>         gpio-keys {
>                 compatible = "gpio-keys";
>
> And at runtime:
> u-boot=> fdt addr $fdtcontroladdr
> u-boot=> fdt list /soc at 0/bus at 30800000/spba-bus at 30800000/spi at 30830000/tpm at 1/
> tpm at 1 {
>         compatible = "tcg,tpm_tis-spi";
>         reg = <0x00000001>;
>         spi-max-frequency = <0x02255100>;
>         memory-region = <0x00000025>;
> };
> u-boot=> fdt list /reserved-memory/
> reserved-memory {
>         #address-cells = <0x00000002>;
>         #size-cells = <0x00000002>;
>         ranges;
>         tcg_event_log {
>         };
> };
> u-boot=> fdt list /reserved-memory/tcg_event_log
> tcg_event_log {
>         no-map;
>         reg = <0x00000000 0x40000000 0x00002000>;
>         phandle = <0x00000025>;
> };
>
> So why does the following code in tcg2_platform_get_log() return -ENOMEM?
>
>                 if (dev_read_phandle_with_args(dev, "memory-region", NULL, 0,
>                                                0, &args))
>                         return -ENODEV;
>
>                 a = ofnode_get_addr_size(args.node, "reg", &s);
>                 if (a == FDT_ADDR_T_NONE)
>                         return -ENOMEM;
>
> debugging shows that dev_read_phandle_with_args returns non-zero but
> args.args_count is 0.
>
> I feel like the construct of using dev_read_phandle_with_args followed
> by the ofnode_get_addr_size is just wrong but I don't understand why
> nor do I understand how my dt changes differ from what is in
> arch/sandbox/dts/test.dts (other than its using address-size=1 which
> doesn't appear to be the issue in my testing). The abstraction of the
> ofnode and fdt stuff always trip me up... very confusing.
>
> Can anyone explain the issue here?
>
> Best Regards,
>
> Tim


More information about the U-Boot mailing list