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).
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.