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