| #
f2804063 |
| 03-Sep-2024 |
Manish V Badarkhe <manish.badarkhe@arm.com> |
Merge "fix(fdt): reserved memory: detect existing region" into integration
|
| #
42488064 |
| 21-Mar-2024 |
Andre Przywara <andre.przywara@arm.com> |
fix(fdt): reserved memory: detect existing region
When fdt_add_reserved_memory() is called to add a memory region, we unconditionally add a node for that region. However there might be an existing r
fix(fdt): reserved memory: detect existing region
When fdt_add_reserved_memory() is called to add a memory region, we unconditionally add a node for that region. However there might be an existing region node in the DT already, or there might be an overlapping region. The Linux kernel will complain in those cases.
Cover the simple case of the region already existing in the DT, as this is what we actually see on the Allwinner H616: The mainline DT contains a node reserving the memory for TF-A, in case the DT changed by TF-A itself is not given to the kernel. Our code always adds a region, making the kernel complain - albeit without further consequences.
Covering all cases of overlapping regions would blow up the generic DT code too much, so just add a simple check for an existing region completely containing the to-be-added region, simply bailing out in this case.
This prevents the kernel warning for the Allwinner H616.
This code requires a function from fdt_wrappers.c, so we have to include that file for platforms that use the fdt_add_reserved_memory() function (rpi4 and versal2).
Change-Id: I98404889163316addbb42130d7177f1a21c8be06 Signed-off-by: Andre Przywara <andre.przywara@arm.com>
show more ...
|
| #
a4a36421 |
| 08-Jul-2022 |
Manish Pandey <manish.pandey2@arm.com> |
Merge "feat(libfdt): add function to set MAC addresses" into integration
|
| #
3e0a087f |
| 04-May-2022 |
André Przywara <andre.przywara@arm.com> |
Merge changes from topic "allwinner-idle" into integration
* changes: feat(allwinner): provide CPU idle states to the rich OS feat(allwinner): simplify CPU_SUSPEND power state encoding feat(al
Merge changes from topic "allwinner-idle" into integration
* changes: feat(allwinner): provide CPU idle states to the rich OS feat(allwinner): simplify CPU_SUSPEND power state encoding feat(allwinner): choose PSCI states to avoid translation feat(fdt): add the ability to supply idle state information fix(allwinner): improve DTB patching error handling refactor(allwinner): patch the DTB after setting up PSCI refactor(allwinner): move DTB change code into allwinner/common
show more ...
|
| #
2b2b5657 |
| 23-Jan-2022 |
Samuel Holland <samuel@sholland.org> |
feat(fdt): add the ability to supply idle state information
Some platforms require extra firmware to implement CPU_SUSPEND, or only have working CPU_SUSPEND in certain configurations. On these platf
feat(fdt): add the ability to supply idle state information
Some platforms require extra firmware to implement CPU_SUSPEND, or only have working CPU_SUSPEND in certain configurations. On these platforms, CPU idle states should only be listed in the devicetree when they are actually available. Add a function BL31 can use to dynamically supply this idle state information.
Change-Id: I64fcc288303faba8abec4f59efd13a04220d54dc Signed-off-by: Samuel Holland <samuel@sholland.org>
show more ...
|
| #
1aa7e302 |
| 19-Dec-2021 |
Andre Przywara <andre.przywara@arm.com> |
feat(libfdt): add function to set MAC addresses
The devicetree specification[1] defines the generic DT properties "mac-address" and "local-mac-address", that allow to set the MAC address for a netwo
feat(libfdt): add function to set MAC addresses
The devicetree specification[1] defines the generic DT properties "mac-address" and "local-mac-address", that allow to set the MAC address for a network device. This is needed because many platform network devices do not define a method for obtaining a unique MAC address, and many devices lack the non-volatile storage to hold such a number.
Some platforms (for instance Allwinner) derive the MAC address from another unique SoC property, for instance some serial number. To allow those MAC address to be set by TF-A, add a function that finds the DT node of a network device (by using the "ethernet<x>" alias), then adding the "local-mac-address" property into that node, setting it to a user provided address. Platforms can use this function to generate MAC addresses in a platform specific way, and store them in the DT.
DT consumers like U-Boot or the Linux kernel will automatically pick up the address from that property and program the MAC device accordingly.
[1] https://devicetree-specification.readthedocs.io/en/latest/chapter4-device-bindings.html#local-mac-address-property
Change-Id: I3f5766cc575fa9718f9ca23e8269b11495c43be2 Signed-off-by: Andre Przywara <andre.przywara@arm.com>
show more ...
|
| #
683bb4d7 |
| 06-Nov-2021 |
André Przywara <andre.przywara@arm.com> |
Merge changes from topic "arm_fpga_auto" into integration
* changes: feat(arm_fpga): write UART baud base clock frequency into DTB feat(arm_fpga): query PL011 to learn system frequency refacto
Merge changes from topic "arm_fpga_auto" into integration
* changes: feat(arm_fpga): write UART baud base clock frequency into DTB feat(arm_fpga): query PL011 to learn system frequency refactor(arm_fpga): move command line code into separate function fix(fdt): avoid output on missing DT property feat(arm_fpga): add ITS autodetection feat(arm_fpga): determine GICR base by probing feat(gicv3): introduce GIC component identification feat(libfdt): also allow changing base address fix(arm_fpga): avoid re-linking from executable ELF file
show more ...
|
| #
4d585fe5 |
| 19-May-2021 |
Andre Przywara <andre.przywara@arm.com> |
feat(libfdt): also allow changing base address
For platforms where we don't know the number of cores at compile time, the size of the GIC redistributor frame is then also undetermined, since it depe
feat(libfdt): also allow changing base address
For platforms where we don't know the number of cores at compile time, the size of the GIC redistributor frame is then also undetermined, since it depends on this number of cores. On top of this the GICR base address can also change, when an unknown number of ITS frames (including zero) take up space between the distributor and redistributor.
So while those two adjustments are done for independent reasons, the code for doing so is very similar, so we should utilise the existing fdt_adjust_gic_redist() function.
Add an (optional) gicr_base parameters to the prototype, so callers can choose to also adjust this base address later, if needed.
Change-Id: Id39c0ba83e7401fdff1944e86950bb7121f210e8 Signed-off-by: Andre Przywara <andre.przywara@arm.com>
show more ...
|
| #
4a81a9f1 |
| 23-Mar-2021 |
André Przywara <andre.przywara@arm.com> |
Merge "fdt: Use proper #address-cells and #size-cells for reserved-memory" into integration
|
| #
81146c46 |
| 17-Jan-2021 |
Andre Przywara <andre.przywara@arm.com> |
fdt: Use proper #address-cells and #size-cells for reserved-memory
The devicetree binding document[1] for the /reserved-memory node demands that the number of address and size-cells in the reserved-
fdt: Use proper #address-cells and #size-cells for reserved-memory
The devicetree binding document[1] for the /reserved-memory node demands that the number of address and size-cells in the reserved-memory node must match those values in the root node. So far we were forcing a 64-bit address along with a 32-bit size.
Adjust the code to query the cells values from the root node, and populate the newly created /reserved-memory node accordingly.
This fixes the fdt_add_reserved_memory() function when called on a devicetree which does not use the 2/1 pair. Linux is picky about this and will bail out the parsing routine, effectively ignoring the reserved-memory node: [ 0.000000] OF: fdt: Reserved memory: unsupported node format, ignoring
[1] Documentation/devicetree/bindings/reserved-memory/reserved-memory.txt in the Linux kernel source tree
Change-Id: Ie126ebab4f3fedd48e12c9ed4bd8fa123acc86d3 Signed-off-by: Andre Przywara <andre.przywara@arm.com>
show more ...
|
| #
bb68a9d6 |
| 07-Oct-2020 |
Madhukar Pappireddy <madhukar.pappireddy@arm.com> |
Merge "fdt: Fix coverity complaint about 32-bit multiplication" into integration
|
| #
4276cfe2 |
| 07-Oct-2020 |
Andre Przywara <andre.przywara@arm.com> |
fdt: Fix coverity complaint about 32-bit multiplication
Coverity raised an eyebrow over our GICR frame size calculation: ======== CID 362942: Integer handling issues (OVERFLOW_BEFORE_WIDEN) Po
fdt: Fix coverity complaint about 32-bit multiplication
Coverity raised an eyebrow over our GICR frame size calculation: ======== CID 362942: Integer handling issues (OVERFLOW_BEFORE_WIDEN) Potentially overflowing expression "nr_cores * gicr_frame_size" with type "unsigned int" (32 bits, unsigned) is evaluated using 32-bit arithmetic, and then used in a context that expects an expression of type "uint64_t" (64 bits, unsigned). ========
Even with a GICv4 (256KB frame size) we need 16384 cores to overflow 32-bit, so it's not a practical issue.
But it's also easy to fix, so let's just do that: cast gicr_frame_size to an unsigned 64-bit integer, so that the multiplication is done in the 64-bit realm.
Change-Id: Iad10e19b9e58d5fbf9d13205fbcef0aac5ae48af Signed-off-by: Andre Przywara <andre.przywara@arm.com>
show more ...
|
| #
2173b3e0 |
| 30-Sep-2020 |
André Przywara <andre.przywara@arm.com> |
Merge changes from topic "fpga_generic" into integration
* changes: arm_fpga: Add platform documentation arm_fpga: Add post-build linker script arm_fpga: Add ROM trampoline arm_fpga: Add dev
Merge changes from topic "fpga_generic" into integration
* changes: arm_fpga: Add platform documentation arm_fpga: Add post-build linker script arm_fpga: Add ROM trampoline arm_fpga: Add devicetree file arm_fpga: Remove SPE PMU DT node if SPE is not available arm_fpga: Adjust GICR size in DT to match number of cores fdt: Add function to adjust GICv3 redistributor size drivers: arm: gicv3: Allow detecting number of cores
show more ...
|
| #
9f7bab42 |
| 24-Aug-2020 |
Andre Przywara <andre.przywara@arm.com> |
fdt: Add function to adjust GICv3 redistributor size
We now have code to detect the CPU topology at runtime, and can also populate the CPU nodes in a devicetree accordingly. This is used by the ARM
fdt: Add function to adjust GICv3 redistributor size
We now have code to detect the CPU topology at runtime, and can also populate the CPU nodes in a devicetree accordingly. This is used by the ARM FPGA port, for instance. But also a GICv3 compatible interrupt controller provides MMIO frames per core, so the size of this region needs to be adjusted in the DT, to match the number of cores as well.
Provide a generic function to find the GICv3 interrupt controller in the DT, then adjust the "reg" entry to match the number of detected cores. Since the size of the GICR frame per cores differs between GICv4 and GICv3, this size is supplied as a parameter to the function. The caller should determine the applicable value by either hardcoding it or by observing GICR_TYPER.VLPIS.
Change-Id: Ic2a6445c2c5381a36bf24263f52fcbefad378c05 Signed-off-by: Andre Przywara <andre.przywara@arm.com>
show more ...
|
| #
1376389f |
| 01-Sep-2020 |
Mark Dykes <mardyk01@review.trustedfirmware.org> |
Merge "Add support to export a /cpus node to the device tree." into integration
|
| #
780dd2b3 |
| 25-Aug-2020 |
Javier Almansa Sobrino <javier.almansasobrino@arm.com> |
Add support to export a /cpus node to the device tree.
This patch creates and populates the /cpus node in a device tree based on the existing topology. It uses the minimum required nodes and propert
Add support to export a /cpus node to the device tree.
This patch creates and populates the /cpus node in a device tree based on the existing topology. It uses the minimum required nodes and properties to satisfy the binding as specified in https://www.kernel.org/doc/Documentation/devicetree/bindings/arm/cpus.txt
Signed-off-by: Javier Almansa Sobrino <javier.almansasobrino@arm.com> Change-Id: I03bf4e9a6427da0a3b8ed013f93d7bc43b5c4df0
show more ...
|
| #
d81e38f6 |
| 22-Jan-2020 |
Sandrine Bailleux <sandrine.bailleux@arm.com> |
Merge "FDT helper functions: Fix MISRA issues" into integration
|
| #
feb358b6 |
| 16-Sep-2019 |
Andre Przywara <andre.przywara@arm.com> |
FDT helper functions: Fix MISRA issues
Moving the FDT helper functions to the common/ directory exposed the file to MISRA checking, which is mandatory for common code.
Fix the complaints that the t
FDT helper functions: Fix MISRA issues
Moving the FDT helper functions to the common/ directory exposed the file to MISRA checking, which is mandatory for common code.
Fix the complaints that the test suite reported.
Change-Id: Ica8c8a95218bba5a3fd92a55407de24df58e8476 Signed-off-by: Andre Przywara <andre.przywara@arm.com>
show more ...
|
| #
17b0bb6c |
| 27-Sep-2019 |
Soby Mathew <soby.mathew@arm.com> |
Merge changes from topic "raspberry-pi-4-support" into integration
* changes: rpi4: Add initial documentation file rpi4: Add stdout-path to device tree rpi4: Add GIC maintenance interrupt to G
Merge changes from topic "raspberry-pi-4-support" into integration
* changes: rpi4: Add initial documentation file rpi4: Add stdout-path to device tree rpi4: Add GIC maintenance interrupt to GIC DT node rpi4: Cleanup memory regions, move pens to first page rpi4: Reserve resident BL31 region from non-secure world rpi4: Amend DTB to advertise PSCI rpi4: Determine BL33 entry point at runtime rpi4: Accommodate "armstub8.bin" header at the beginning of BL31 image Add basic support for Raspberry Pi 4 rpi3: Allow runtime determination of UART base clock rate FDT helper functions: Respect architecture in PSCI function IDs FDT helper functions: Add function documentation
show more ...
|
| #
66799507 |
| 19-Sep-2019 |
Andre Przywara <andre.przywara@arm.com> |
FDT helper functions: Respect architecture in PSCI function IDs
PSCI uses different function IDs for CPU_SUSPEND and CPU_ON, depending on the architecture used (AArch64 or AArch32). For recent PSCI
FDT helper functions: Respect architecture in PSCI function IDs
PSCI uses different function IDs for CPU_SUSPEND and CPU_ON, depending on the architecture used (AArch64 or AArch32). For recent PSCI versions the client will determine the right version, but for PSCI v0.1 we need to put some ID in the DT node. At the moment we always add the 64-bit IDs, which is not correct if TF-A is built for AArch32.
Use the function IDs matching the TF-A build architecture, for the two IDs where this differs. This only affects legacy OSes using PSCI v0.1.
On the way remove the sys_poweroff and sys_reset properties, which were never described in the official PSCI DT binding.
Change-Id: If77bc6daec215faeb2dc67112e765aacafd17f33 Signed-off-by: Andre Przywara <andre.przywara@arm.com>
show more ...
|
| #
6eaf928d |
| 19-Sep-2019 |
Andre Przywara <andre.przywara@arm.com> |
FDT helper functions: Add function documentation
Since we moved some functions that amend a DT blob in memory to common code, let's add proper function documentation. This covers the three exported
FDT helper functions: Add function documentation
Since we moved some functions that amend a DT blob in memory to common code, let's add proper function documentation. This covers the three exported functions in common/fdt_fixup.c.
Change-Id: I67d7d27344e62172c789d308662f78d54903cf57 Signed-off-by: Andre Przywara <andre.przywara@arm.com>
show more ...
|
| #
f65423cd |
| 16-Sep-2019 |
Sandrine Bailleux <sandrine.bailleux@arm.com> |
Merge changes from topic "raspberry-pi-4-support" into integration
* changes: Add fdt_add_reserved_memory() helper function qemu: Move and generalise FDT PSCI fixup
|
| #
3ef45dda |
| 15-Jul-2019 |
Andre Przywara <andre.przywara@arm.com> |
Add fdt_add_reserved_memory() helper function
If a firmware component like TF-A reserves special memory regions for its own or secure payload services, it should announce the location and size of th
Add fdt_add_reserved_memory() helper function
If a firmware component like TF-A reserves special memory regions for its own or secure payload services, it should announce the location and size of those regions to the non-secure world. This will avoid disappointment when some rich OS tries to acccess this memory, which will likely end in a crash.
The traditional way of advertising reserved memory using device tree is using the special memreserve feature of the device tree blob (DTB). However by definition those regions mentioned there do not prevent the rich OS to map this memory, which may lead to speculative accesses to this memory and hence spurious bus errors.
A safer way of carving out memory is to use the /reserved-memory node as part of the normal DT structure. Besides being easier to setup, this also defines an explicit "no-map" property to signify the secure-only nature of certain memory regions, which avoids the rich OS to accidentally step on it.
Add a helper function to allow platform ports to easily add a region.
Change-Id: I2b92676cf48fd3bdacda05b5c6b1c7952ebed68c Signed-off-by: Andre Przywara <andre.przywara@arm.com>
show more ...
|
| #
f240728b |
| 10-Jul-2019 |
Andre Przywara <andre.przywara@arm.com> |
qemu: Move and generalise FDT PSCI fixup
The QEMU platform port scans its device tree to advertise PSCI as the CPU enable method. It does this by scanning *every* node in the DT and check whether it
qemu: Move and generalise FDT PSCI fixup
The QEMU platform port scans its device tree to advertise PSCI as the CPU enable method. It does this by scanning *every* node in the DT and check whether its compatible string starts with "arm,cortex-a". Then it sets the enable-method to PSCI, if it doesn't already have one.
Other platforms might want to use this functionality as well, so let's move it out of the QEMU platform directory and make it more robust by fixing some shortcomings: - A compatible string starting with a certain prefix is not a good way to find the CPU nodes. For instance a "arm,cortex-a72-pmu" node will match as well and is in turn favoured with an enable-method. - If the DT already has an enable-method, we won't change this to PSCI.
Those two issues will for instance fail on the Raspberry Pi 4 DT. To fix those problems, we adjust the scanning method: The DT spec says that all CPU nodes are subnodes of the mandatory /cpus node, which is a subnode of the root node. Also each CPU node has to have a device_type = "cpu" property. So we find the /cpus node, then scan for a subnode with the proper device_type, forcing the enable-method to "psci". We have to restart this search after a property has been patched, as the node offsets might have changed meanwhile.
This allows this routine to be reused for the Raspberry Pi 4 later.
Change-Id: I00cae16cc923d9f8bb96a9b2a2933b9a79b06139 Signed-off-by: Andre Przywara <andre.przywara@arm.com>
show more ...
|