Hi Marcin / All,

not sure if runtime check for mandatory features is the right way considering most platforms will
have them enabled and check to see if they are enabled would not be optimal.

For time being (until we find a better option) I will add a patch which would make mandatory with '?=' thus providing a bit more room for any platform or build option overrides still possible.

--

Thanks,

Govindraj R


From: Leif Lindholm <quic_llindhol@quicinc.com>
Sent: Monday, November 13, 2023 11:24
To: Marcin Juszkiewicz <marcin.juszkiewicz@linaro.org>; tf-a@lists.trustedfirmware.org <tf-a@lists.trustedfirmware.org>
Cc: Jens Wiklander <jens.wiklander@linaro.org>; Jean-Philippe Brucker <jean-philippe@linaro.org>; Govindraj Raja <Govindraj.Raja@arm.com>; Sandrine Bailleux <Sandrine.Bailleux@arm.com>; Manish Pandey2 <Manish.Pandey2@arm.com>; Andre Przywara <Andre.Przywara@arm.com>
Subject: Re: We cannot force Arm features for platforms
 
On 2023-11-13 17:01, Marcin Juszkiewicz wrote:
> TL;DR: move Mandatory features to be runtime checked (value 2)

Just to pitch in with Marcin; I fully agree with this.

But I did want to ask - was the current mechanism implemented that way
with a specific functional intent, or was it done like that to minimise
behavioral change for existing platforms?

/
     Leif

> Month ago there was changeset from Govindraj Raja merged [1]. The plan
> was to enable all mandatory features based on architecture version set
> by plaform (using ARM_ARCH_{MAJOR,MINOR} variables).
>
> 1. https://review.trustedfirmware.org/q/topic:%22gr/build_refactor%22
>
> The idea is nice. But only for final products. If you are working on
> silicon bring up or on virtualization platform (QEMU or other) then you
> got hit badly...
>
>
> I am working on SBSA Reference Platform in QEMU. It can have one of
> several cpu models. From old v8.0 cores up to v9.0 ones. And then there
> is also 'max' core which cannot be mapped to any architecture level
> because it contains all Arm cpu features QEMU can emulate. We need to
> support all of them in one TF-A binary.  Whenever something fails we
> have some cpu cores in non-bootable state.
>
> We had to enable FGT to get 'max' boot Linux. Now we have to move DIT to
> be runtime checked to boot anything below Neoverse-V1 at all. And HCX to
> get 'max' boot Linux again.
>
>
> At current state of TF-A we cannot handle it. Toplevel Makefile includes
> platform.mk which sets ARM_ARCH_{MAJOR,MINOR} and then
> make_helpers/arch_features.mk enables mandatory options by setting them
> to value "1" which means "present, no need to check".
>
> Due to this we have those changes in Gerrit:
>
> DIT: https://review.trustedfirmware.org/c/TF-A/trusted-firmware-a/+/24870
> TRF: https://review.trustedfirmware.org/c/TF-A/trusted-firmware-a/+/23648
>
> And instead of sending another one to switch FGT, RNG and HCX I decided
> to write this email.
>
>
> I have spent half of day today bisecting TF-A, booting several tools and
> operating systems to check how we are and where the problem is. Still
> have to get Neoverse-N2 booting properly but other than then I got to
> the point where all cpu cores boot into Linux.
>
>
> We need to change make_helpers/arch_features.mk to stop enabling mandatory
> features as "present, no need to check" (value '1') but to use runtime
> check (value '2') instead. This way any platform which contains CPU not
> yet fully developed can boot TF-A. Or platform where one firmware can boot
> different cpu models.
>
> I am sorry that I bring it so late in release cycle but was unable to use
> computer for a development for some time.