project/bcm63xx/atf.git
9 years agoPSCI: Check early for invalid CPU state during CPU ON
Soby Mathew [Mon, 12 Jan 2015 13:01:31 +0000 (13:01 +0000)]
PSCI: Check early for invalid CPU state during CPU ON

This patch moves the check for valid CPU state during
PSCI_CPU_ON to before the non secure entry point is programmed
so as to enable it to return early on error.

Change-Id: I1b1a21be421e2b2a6e33db236e91dee8688efffa

9 years agoRemove `ns_entrypoint` and `mpidr` from parameters in pm_ops
Soby Mathew [Fri, 26 Sep 2014 14:08:52 +0000 (15:08 +0100)]
Remove `ns_entrypoint` and `mpidr` from parameters in pm_ops

This patch removes the non-secure entry point information being passed
to the platform pm_ops which is not needed. Also, it removes the `mpidr`
parameter for  platform pm hooks which are meant to do power management
operations only on the current cpu.

NOTE: PLATFORM PORTS MUST BE UPDATED AFTER MERGING THIS COMMIT.

Change-Id: If632376a990b7f3b355f910e78771884bf6b12e7

9 years agoMerge pull request #240 from danh-arm/sm/rem_coh_mem
danh-arm [Thu, 22 Jan 2015 11:05:48 +0000 (11:05 +0000)]
Merge pull request #240 from danh-arm/sm/rem_coh_mem

Remove coherent memory v2

9 years agoRemove coherent memory from the BL memory maps
Soby Mathew [Thu, 8 Jan 2015 18:02:44 +0000 (18:02 +0000)]
Remove coherent memory from the BL memory maps

This patch extends the build option `USE_COHERENT_MEMORY` to
conditionally remove coherent memory from the memory maps of
all boot loader stages. The patch also adds necessary
documentation for coherent memory removal in firmware-design,
porting and user guides.

Fixes ARM-Software/tf-issues#106

Change-Id: I260e8768c6a5c2efc402f5804a80657d8ce38773

9 years agoMove bakery algorithm implementation out of coherent memory
Soby Mathew [Thu, 8 Jan 2015 18:02:19 +0000 (18:02 +0000)]
Move bakery algorithm implementation out of coherent memory

This patch moves the bakery locks out of coherent memory to normal memory.
This implies that the lock information needs to be placed on a separate cache
line for each cpu. Hence the bakery_lock_info_t structure is allocated in the
per-cpu data so as to minimize memory wastage. A similar platform per-cpu
data is introduced for the platform locks.

As a result of the above changes, the bakery lock api is completely changed.
Earlier, a reference to the lock structure was passed to the lock implementation.
Now a unique-id (essentially an index into the per-cpu data array) and an offset
into the per-cpu data for bakery_info_t needs to be passed to the lock
implementation.

Change-Id: I1e76216277448713c6c98b4c2de4fb54198b39e0

9 years agoAdd macros for domain specific barriers.
Soby Mathew [Tue, 30 Dec 2014 16:11:42 +0000 (16:11 +0000)]
Add macros for domain specific barriers.

This patch adds helper macros for barrier operations that specify
the type of barrier (dmb, dsb) and the shareability domain (system,
inner-shareable) it affects.

Change-Id: I4bf95103e79da212c4fbdbc13d91ad8ac385d9f5

9 years agoRemove the wfe() for bounded wait in bakery_lock
Soby Mathew [Tue, 18 Nov 2014 10:45:04 +0000 (10:45 +0000)]
Remove the wfe() for bounded wait in bakery_lock

This patch is an optimization in the bakery_lock_get() function
which removes the wfe() when waiting for other contenders to choose
their ticket i.e when their `entering` flag is set. Since the time
taken to execute bakery_get_ticket() by other contenders is bounded,
this wait is a bounded time wait. Hence the removal of wfe() and the
corresponding sev() and dsb() in bakery_get_ticket() may result
in better time performance during lock acquisition.

Change-Id: I141bb21294226b54cb6e89e7cac0175c553afd8d

9 years agoMerge pull request #235 from soby-mathew/sm/inv_cpu_ops
danh-arm [Fri, 16 Jan 2015 17:57:47 +0000 (17:57 +0000)]
Merge pull request #235 from soby-mathew/sm/inv_cpu_ops

Invalidate the dcache after initializing cpu-ops

9 years agoMerge pull request #233 from jcastillo-arm/jc/tf-issues/254
danh-arm [Fri, 16 Jan 2015 17:55:45 +0000 (17:55 +0000)]
Merge pull request #233 from jcastillo-arm/jc/tf-issues/254

Juno: Add support for image overlaying in Trusted SRAM

9 years agoInvalidate the dcache after initializing cpu-ops
Soby Mathew [Tue, 18 Nov 2014 10:14:14 +0000 (10:14 +0000)]
Invalidate the dcache after initializing cpu-ops

This patch fixes a crash due to corruption of cpu_ops
data structure. During the secondary CPU boot, after the
cpu_ops has been initialized in the per cpu-data, the
dcache lines need to invalidated so that the update in
memory can be seen later on when the dcaches are turned ON.
Also, after initializing the psci per cpu data, the dcache
lines are flushed so that they are written back to memory
and dirty dcache lines are avoided.

Fixes ARM-Software/tf-issues#271

Change-Id: Ia90f55e9882690ead61226eea5a5a9146d35f313

9 years agoMerge pull request #232 from jcastillo-arm/jc/fix_doc_bl31
danh-arm [Mon, 12 Jan 2015 17:04:03 +0000 (17:04 +0000)]
Merge pull request #232 from jcastillo-arm/jc/fix_doc_bl31

Fix reset to BL3-1 instructions in user guide, part 3

9 years agoFix reset to BL3-1 instructions in user guide, part 3
Juan Castillo [Thu, 20 Nov 2014 17:31:14 +0000 (17:31 +0000)]
Fix reset to BL3-1 instructions in user guide, part 3

Patch 20d51ca moved the shared data page from the top of the
Trusted SRAM to the bottom, changing the load addresses of BL3-1
and BL3-2.

This patch updates BL3-1 and BL3-2 addresses in the instructions
to run the Trusted Firmware on FVP using BL3-1 as reset vector.

This patch is similar to but distinct from bfb1dd5 and 7ea4c43.

Change-Id: I6b467f9a82360a5e2181db99fea881487de52704

9 years agoMerge pull request #231 from jcastillo-arm/jc/fip_bin
danh-arm [Mon, 12 Jan 2015 14:47:03 +0000 (14:47 +0000)]
Merge pull request #231 from jcastillo-arm/jc/fip_bin

Specify FIP filename at build time

9 years agoMerge pull request #230 from sandrine-bailleux/sb/doc-updates
danh-arm [Mon, 12 Jan 2015 14:45:56 +0000 (14:45 +0000)]
Merge pull request #230 from sandrine-bailleux/sb/doc-updates

User Guide: Enable secure memory on Foundation FVP

9 years agoMerge pull request #229 from sandrine-bailleux/sb/tf-issue-273
danh-arm [Mon, 12 Jan 2015 14:45:11 +0000 (14:45 +0000)]
Merge pull request #229 from sandrine-bailleux/sb/tf-issue-273

Prevent optimisation of sysregs accessors calls

9 years agoMerge pull request #228 from jcastillo-arm/jc/tf-issues/274
danh-arm [Mon, 12 Jan 2015 14:44:20 +0000 (14:44 +0000)]
Merge pull request #228 from jcastillo-arm/jc/tf-issues/274

Bug fix: initialize bl30_image_info fields before use

9 years agoJuno: Add support for image overlaying in Trusted SRAM
Juan Castillo [Fri, 7 Nov 2014 09:44:58 +0000 (09:44 +0000)]
Juno: Add support for image overlaying in Trusted SRAM

This patch allows the BL3-1 NOBITS section to overlap the BL1 R/W
section since the former will always be used after the latter.
Similarly, the BL3-2 NOBITS section can overlay the BL2 image
when BL3-2 is loaded in Trusted SRAM.

Due to the current size of the images, there is no actual overlap.
Nevertheless, this reorganization may help to optimise the Trusted
SRAM usage when the images size grows.

Note that because BL3-1 NOBITS section is allowed to overlap the
BL1 R/W section, BL1 global variables will remain valid only until
execution reaches the BL3-1 entry point during a cold boot.

Documentation updated accordingly.

Fixes ARM-software/tf-issues#254

Change-Id: Id538f4d1c7f1f7858108280fd7b97e138572b879

9 years agoUser Guide: Enable secure memory on Foundation FVP
Sandrine Bailleux [Thu, 8 Jan 2015 11:48:34 +0000 (11:48 +0000)]
User Guide: Enable secure memory on Foundation FVP

Previously, the User Guide recommended launching the Foundation
FVP with the parameter --no-secure-memory, which disabled security
control of the address map. This was due to missing support for
secure memory regions in v1 of the Foundation FVP. This is no longer
needed as secure memory is now supported on the Foundation FVP.

This patch updates the User Guide to recommend enabling secure
memory instead.

Change-Id: Ifae53c10ff6e1c7c6724af20e05a3d3a88f6a5ad

9 years agoBug fix: initialize bl30_image_info fields before use
Juan Castillo [Thu, 13 Nov 2014 17:04:33 +0000 (17:04 +0000)]
Bug fix: initialize bl30_image_info fields before use

This patch initializes the version field in the bl30_image_info
structure when loading BL30. This initialization must be done before
calling load_image().

Fixes ARM-software/tf-issues#274

Change-Id: I74a05167d66fff51d257ad611abc7b5436e5d912

9 years agoMerge pull request #222 from jbech-linaro/user_guide_toc_links
danh-arm [Wed, 7 Jan 2015 17:29:38 +0000 (17:29 +0000)]
Merge pull request #222 from jbech-linaro/user_guide_toc_links

Create TOC links in the User Guide markdown file

9 years agoPrevent optimisation of sysregs accessors calls
Sandrine Bailleux [Wed, 7 Jan 2015 16:36:11 +0000 (16:36 +0000)]
Prevent optimisation of sysregs accessors calls

Calls to system register read accessors functions may be optimised
out by the compiler if called twice in a row for the same register.
This is because the compiler is not aware that the result from
the instruction may be modified by external agents. Therefore, if
nothing modifies the register between the 2 reads as far as the
compiler knows then it might consider that it is useless to read
it twice and emit only 1 call.

This behaviour is faulty for registers that may not have the same
value if read twice in succession. E.g.: counters, timer
control/countdown registers, GICv3 interrupt status registers and
so on.

The same problem happens for calls to system register write
accessors functions. The compiler might optimise out some calls
if it considers that it will produce the same result. Again, this
behaviour is faulty for cases where intermediate writes to these
registers make a difference in the system.

This patch fixes the problem by making these assembly register
accesses volatile.

Fixes ARM-software/tf-issues#273

Change-Id: I33903bc4cc4eea8a8d87bc2c757909fbb0138925

9 years agoCreate Table of Content links in markdown files
Joakim Bech [Tue, 25 Nov 2014 09:55:26 +0000 (10:55 +0100)]
Create Table of Content links in markdown files

Fixes arm-software/tf-issues#276

9 years agoMerge pull request #226 from sandrine-bailleux/sb/tf-issues-279
danh-arm [Wed, 7 Jan 2015 13:00:34 +0000 (13:00 +0000)]
Merge pull request #226 from sandrine-bailleux/sb/tf-issues-279

fip_create: don't succeed if one of the passed files doesn't exist

9 years agoMerge pull request #227 from soby-mathew/sm/afflvl_fix
danh-arm [Wed, 7 Jan 2015 12:58:37 +0000 (12:58 +0000)]
Merge pull request #227 from soby-mathew/sm/afflvl_fix

Fix CPU_SUSPEND when invoked with affinity level higher than get_max_aff...

9 years agoMerge pull request #225 from sandrine-bailleux/sb/remove-IRQ_SEC_SGI_8
danh-arm [Wed, 7 Jan 2015 12:53:41 +0000 (12:53 +0000)]
Merge pull request #225 from sandrine-bailleux/sb/remove-IRQ_SEC_SGI_8

Remove IRQ_SEC_SGI_8 constant

9 years agoSpecify FIP filename at build time
Juan Castillo [Mon, 24 Nov 2014 11:45:12 +0000 (11:45 +0000)]
Specify FIP filename at build time

This patch allows to define the name of the FIP at build time by
defining the FIP_NAME variable. If FIP_NAME is not defined, default
name 'fip.bin' is used.

Documentation updated accordingly.

Change-Id: Ic41f42aac379b0c958b3dfd02863ba8ba7108710

9 years agoFix CPU_SUSPEND when invoked with affinity level higher than get_max_afflvl()
Soby Mathew [Thu, 2 Oct 2014 16:24:19 +0000 (17:24 +0100)]
Fix CPU_SUSPEND when invoked with affinity level higher than get_max_afflvl()

This patch fixes the assertion failure when CPU_SUSPEND is invoked with
an affinity level higher than supported by the platform by adding suitable
checks for affinity level within `psci_cpu_suspend`. Also added suitable
bound checks within `psci_aff_map_get_idx` to prevent indexing beyond array
limits.

Fixes ARM-software/tf-issues#260

Change-Id: I04b75c49729e6c6d1983add590f60146c8fc3630

9 years agofip_create: don't succeed if one of the passed files doesn't exist
Kévin Petit [Mon, 8 Dec 2014 13:23:09 +0000 (13:23 +0000)]
fip_create: don't succeed if one of the passed files doesn't exist

If one of the files passed to fip_create on the command line doesn't
exist, it will print an error message but produce an incomplete
fip.bin file and report success. This behaviour could potentially
hide errors made in the command line arguments.

This patch addresses the issue by having the tool bail out if one of
the supplied files can't be processed.

Signed-off-by: Kévin Petit <kevin.petit@arm.com>
Fixes ARM-software/tf-issues#279

Change-Id: I1c7d87d09eb4c063005b7969bdaad1d043c29dec

9 years agoRemove IRQ_SEC_SGI_8 constant
Sandrine Bailleux [Wed, 19 Nov 2014 13:48:59 +0000 (13:48 +0000)]
Remove IRQ_SEC_SGI_8 constant

In both FVP and Juno ports, IRQ #16, which is a PPI, is incorrectly
identified as secure SGI #8 through the constant IRQ_SEC_SGI_8.
This patch removes it.

Fixes ARM-software/tf-issues#282

Change-Id: I9e52d849611ffcd2b1f28e56dd156c5b217ed63e

9 years agoMerge pull request #223 from sandrine-bailleux/sb/fix-fiptool-target
danh-arm [Mon, 8 Dec 2014 12:16:44 +0000 (12:16 +0000)]
Merge pull request #223 from sandrine-bailleux/sb/fix-fiptool-target

Fix problem of dependencies on the fiptool makefile target

9 years agoMerge pull request #224 from soby-mathew/sm/fix_mpidr_aff_map_nodes_t
danh-arm [Mon, 8 Dec 2014 12:14:36 +0000 (12:14 +0000)]
Merge pull request #224 from soby-mathew/sm/fix_mpidr_aff_map_nodes_t

Fix the array size of mpidr_aff_map_nodes_t.

9 years agoFix the array size of mpidr_aff_map_nodes_t.
Soby Mathew [Thu, 4 Dec 2014 14:14:12 +0000 (14:14 +0000)]
Fix the array size of mpidr_aff_map_nodes_t.

This patch fixes the array size of mpidr_aff_map_nodes_t which
was less by one element.

Fixes ARM-software/tf-issues#264

Change-Id: I48264f6f9e7046a3d0f4cbcd63b9ba49657e8818

9 years agoFix problem of dependencies on the fiptool makefile target
Sandrine Bailleux [Mon, 27 Oct 2014 17:10:46 +0000 (17:10 +0000)]
Fix problem of dependencies on the fiptool makefile target

The 'fiptool' target doesn't depend on fip_create's source files,
neither directly nor indirectly. As a result, the FIP tool is not
rebuilt whenever its source files change.

This patch makes the ${FIPTOOL} target into a phony target so that the
FIP tool's sub-makefile is always called. The sub-makefile correctly
handles the dependencies. It also moves the completion message into
the sub-makefile so that it is only displayed when the tool is
actually recompiled.

Fixes ARM-software/tf-issues#278

Change-Id: Ia027519fe51d3c42be30665d1ad20a7b89fa350f

9 years agoMerge pull request #220 from soby-mathew/sm/reassign_crash_console
danh-arm [Tue, 11 Nov 2014 15:54:09 +0000 (15:54 +0000)]
Merge pull request #220 from soby-mathew/sm/reassign_crash_console

Use the BL3-1 runtime console as the crash console.

9 years agoMerge pull request #221 from achingupta/ag/tf-issues#272
danh-arm [Tue, 11 Nov 2014 15:52:55 +0000 (15:52 +0000)]
Merge pull request #221 from achingupta/ag/tf-issues#272

Precede a 'sev' with a 'dsb' in bakery lock code

10 years agoPrecede a 'sev' with a 'dsb' in bakery lock code
Achin Gupta [Mon, 10 Nov 2014 11:50:30 +0000 (11:50 +0000)]
Precede a 'sev' with a 'dsb' in bakery lock code

This patch fixes a bug in the bakery lock implementation where a data
synchronisation barrier instruction is not issued before sending an event as
mandated by the ARMv8 ARM. This can cause a event to be signalled before the
related memory accesses have completed resulting in erroneous execution.

Fixes ARM-software/tf-issues#272

Change-Id: I5ce02bf70afb001d967b9fa4c3f77442931d5349

10 years agoUse the BL3-1 runtime console as the crash console.
Soby Mathew [Tue, 23 Sep 2014 10:32:48 +0000 (11:32 +0100)]
Use the BL3-1 runtime console as the crash console.

This patch reassigns the crash console on Juno and FVP to use the runtime
BL3-1 console. The crash console is changed to SoC UART0 (UART2) from the
previous FPGA UART0 (UART0) on Juno. In FVP, it is changed from UART0 to
UART1.

Fixes ARM-software/tf-issues#256

Change-Id: I7df54f86ca00ec2652c27261dd66a94c12610816

10 years agoMerge pull request #219 from jcastillo-arm/jc/tf-issues/253
danh-arm [Tue, 4 Nov 2014 16:01:40 +0000 (16:01 +0000)]
Merge pull request #219 from jcastillo-arm/jc/tf-issues/253

Improvements to ARM GIC driver
Juno: Use the generic ARM GIC driver

10 years agoJuno: Use the generic ARM GIC driver
Juan Castillo [Mon, 20 Oct 2014 11:29:58 +0000 (12:29 +0100)]
Juno: Use the generic ARM GIC driver

This patch replaces the usage of the GIC private driver in Juno with
the generic ARM GIC driver. The private driver is no longer necessary
and has been removed from the Juno port.

Fixes ARM-software/tf-issues#253

Change-Id: I6aaabc252e5e6fb5fcf44ab6d0febd9b38791056

10 years agoImprovements to ARM GIC driver
Juan Castillo [Mon, 20 Oct 2014 11:27:28 +0000 (12:27 +0100)]
Improvements to ARM GIC driver

This patch introduces several improvements to the ARM GIC driver:

* In function gicd_set_itargetsr(), target CPU is specified using
  the same bit mask detailed in the GICD_ITARGETSRn register instead
  of the CPU linear ID, removing the dependency between bit position
  and linear ID in the platform porting. The current CPU bit mask
  may be obtained by reading GICD_ITARGETSR0.

* PPIs and SGIs are initialized in arm_gic_pcpu_distif_setup().
  SPIs are initialized in arm_gic_distif_setup().

* By default, non secure interrupts are assigned the maximum
  priority allowed to a non secure interrupt (defined by
  GIC_HIGHEST_NS_PRIORITY).

* GICR base address is allowed to be NULL for GICv1 and GICv2.

Change-Id: Ie2837fe860d43b2282e582dfdb13c39c6186f232

10 years agoMerge pull request #218 from soby-mathew/sm/add_cpu_ops_warning
danh-arm [Thu, 30 Oct 2014 16:04:42 +0000 (16:04 +0000)]
Merge pull request #218 from soby-mathew/sm/add_cpu_ops_warning

Add level specific cache operations and changes to errata workaround mechanism

10 years agoOptimize Cortex-A57 cluster power down sequence on Juno
Soby Mathew [Mon, 22 Sep 2014 13:13:34 +0000 (14:13 +0100)]
Optimize Cortex-A57 cluster power down sequence on Juno

This patch optimizes the Cortex-A57 cluster power down sequence by not
flushing the Level1 data cache. The L1 data cache and the L2 unified
cache are inclusive. A flush of the L2 by set/way flushes any dirty
lines from the L1 as well. This is a known safe deviation from the
Cortex-A57 TRM defined power down sequence. This optimization can be
enabled by the platform through the 'SKIP_A57_L1_FLUSH_PWR_DWN' build
flag. Each Cortex-A57 based platform must make its own decision on
whether to use the optimization.

This patch also renames the cpu-errata-workarounds.md to
cpu-specific-build-macros.md as this facilitates documentation
of both CPU Specific errata and CPU Specific Optimization
build macros.

Change-Id: I299b9fe79e9a7e08e8a0dffb7d345f9a00a71480

10 years agoOptimize barrier usage during Cortex-A57 power down
Soby Mathew [Mon, 22 Sep 2014 11:15:26 +0000 (12:15 +0100)]
Optimize barrier usage during Cortex-A57 power down

This the patch replaces the DSB SY with DSB ISH
after disabling L2 prefetches during the Cortex-A57
power down sequence.

Change-Id: I048d12d830c1b974b161224eff079fb9f8ecf52d

10 years agoApply errata workarounds only when major/minor revisions match.
Soby Mathew [Mon, 22 Sep 2014 11:11:36 +0000 (12:11 +0100)]
Apply errata workarounds only when major/minor revisions match.

Prior to this patch, the errata workarounds were applied for any version
of the CPU in the release build and in the debug build an assert
failure resulted when the revision did not match. This patch applies
errata workarounds in the Cortex-A57 reset handler only if the 'variant'
and 'revision' fields read from the MIDR_EL1 match. In the debug build,
a warning message is printed for each errata workaround which is not
applied.

The patch modifies the register usage in 'reset_handler` so
as to adhere to ARM procedure calling standards.

Fixes ARM-software/tf-issues#242

Change-Id: I51b1f876474599db885afa03346e38a476f84c29

10 years agoAdd support for level specific cache maintenance operations
Soby Mathew [Tue, 2 Sep 2014 09:47:33 +0000 (10:47 +0100)]
Add support for level specific cache maintenance operations

This patch adds level specific cache maintenance functions
to cache_helpers.S. The new functions 'dcsw_op_levelx',
where '1 <= x <= 3', allow to perform cache maintenance by
set/way for that particular level of cache.  With this patch,
functions to support cache maintenance upto level 3 have
been implemented since it is the highest cache level for
most ARM SoCs.

These functions are now utilized in CPU specific power down
sequences to implement them as mandated by processor specific
technical reference manual.

Change-Id: Icd90ce6b51cff5a12863bcda01b93601417fd45c

10 years agoMerge pull request #217 from jcastillo-arm/jc/tf-issues/257
danh-arm [Tue, 28 Oct 2014 12:25:51 +0000 (12:25 +0000)]
Merge pull request #217 from jcastillo-arm/jc/tf-issues/257

FVP: keep shared data in Trusted SRAM

10 years agoMerge pull request #216 from vikramkanigiri/vk/juno_standby_support
danh-arm [Tue, 28 Oct 2014 12:06:47 +0000 (12:06 +0000)]
Merge pull request #216 from vikramkanigiri/vk/juno_standby_support

Juno: Support entry into a standby state

10 years agoMerge pull request #215 from jcastillo-arm/jc/juno_mem_6
danh-arm [Tue, 28 Oct 2014 11:59:22 +0000 (11:59 +0000)]
Merge pull request #215 from jcastillo-arm/jc/juno_mem_6

Jc/juno mem 6

10 years agoFVP: keep shared data in Trusted SRAM
Juan Castillo [Wed, 24 Sep 2014 09:00:06 +0000 (10:00 +0100)]
FVP: keep shared data in Trusted SRAM

This patch deprecates the build option to relocate the shared data
into Trusted DRAM in FVP. After this change, shared data is always
located at the base of Trusted SRAM. This reduces the complexity
of the memory map and the number of combinations in the build
options.

Fixes ARM-software/tf-issues#257

Change-Id: I68426472567b9d8c6d22d8884cb816f6b61bcbd3

10 years agoJuno: Support entry into a standby state
Vikram Kanigiri [Tue, 1 Jul 2014 14:34:11 +0000 (15:34 +0100)]
Juno: Support entry into a standby state

This patch adds support on the Juno platform for entering a wfi in
response to a PSCI CPU_SUSPEND call where the state type is a
standby state.

Change-Id: I0a102dee1f8d2ad936c63ad1d1d3ad001a4a4768

10 years agoJuno: Reserve some DDR-DRAM for secure use
Juan Castillo [Fri, 5 Sep 2014 16:29:38 +0000 (17:29 +0100)]
Juno: Reserve some DDR-DRAM for secure use

This patch configures the TrustZone Controller in Juno to split
the 2GB DDR-DRAM memory at 0x80000000 into Secure and Non-Secure
regions:

- Secure DDR-DRAM: top 16 MB, except for the last 2 MB which are
  used by the SCP for DDR retraining
- Non-Secure DDR-DRAM: remaining DRAM starting at base address

Build option PLAT_TSP_LOCATION selects the location of the secure
payload (BL3-2):

- 'tsram' : Trusted SRAM (default option)
- 'dram'  : Secure region in the DDR-DRAM (set by the TrustZone
            controller)

The MMU memory map has been updated to give BL2 permission to load
BL3-2 into the DDR-DRAM secure region.

Fixes ARM-software/tf-issues#233

Change-Id: I6843fc32ef90aadd3ea6ac4c7f314f8ecbd5d07b

10 years agoMerge pull request #206 from soby-mathew/sm/reset_cntvoff
Andrew Thoelke [Fri, 10 Oct 2014 11:13:48 +0000 (12:13 +0100)]
Merge pull request #206 from soby-mathew/sm/reset_cntvoff

Reset CNTVOFF_EL2 register before exit into EL1 on warm boot

10 years agoJuno: Use TZC-400 driver calls
Juan Castillo [Thu, 4 Sep 2014 13:43:09 +0000 (14:43 +0100)]
Juno: Use TZC-400 driver calls

This patch replaces direct accesses to the TZC-400 registers by the
appropiate calls to the generic driver available in the Trusted
Firmware in order to initialize the TrustZone Controller.

Functions related to the initialization of the secure memory,
like the TZC-400 configuration, have been moved to a new file
'plat_security.c'. This reorganization makes easier to set up
the secure memory from any BL stage.

TZC-400 initialization has been moved from BL1 to BL2 because BL1
does not access the non-secure memory. It is BL2's responsibility
to enable and configure the TZC-400 before loading the next BL
images.

In Juno, BL3-0 initializes some of the platform peripherals, like
the DDR controller. Thus, BL3-0 must be loaded before configuring
the TrustZone Controller. As a consequence, the IO layer
initialization has been moved to early platform initialization.

Fixes ARM-software/tf-issues#234

Change-Id: I83dde778f937ac8d2996f7377e871a2e77d9490e

10 years agoMerge pull request #214 from soby-mathew/sm/bl_specific_mmap
achingupta [Thu, 25 Sep 2014 13:28:59 +0000 (14:28 +0100)]
Merge pull request #214 from soby-mathew/sm/bl_specific_mmap

Create BL stage specific translation tables

10 years agoCreate BL stage specific translation tables
Soby Mathew [Wed, 3 Sep 2014 16:48:44 +0000 (17:48 +0100)]
Create BL stage specific translation tables

This patch uses the IMAGE_BL<x> constants to create translation tables specific
to a boot loader stage. This allows each stage to create mappings only for areas
in the memory map that it needs.

Fixes ARM-software/tf-issues#209

Change-Id: Ie4861407ddf9317f0fb890fc7575eaa88d0de51c

10 years agoMerge pull request #213 from soby-mathew/sm/crash_reporting_fix
achingupta [Tue, 23 Sep 2014 07:52:02 +0000 (08:52 +0100)]
Merge pull request #213 from soby-mathew/sm/crash_reporting_fix

Remove BSS section access by 'plat_print_gic' during crash reporting

10 years agoRemove BSS section access by 'plat_print_gic' during crash reporting
Soby Mathew [Mon, 1 Sep 2014 11:29:27 +0000 (12:29 +0100)]
Remove BSS section access by 'plat_print_gic' during crash reporting

This patch avoids the problem of crash reporting mechanism accessing
global data in BSS by 'plat_print_gic_regs' for FVP platforms. Earlier
it depended on the global 'plat_config' object for the GIC Base address
in FVP platforms which would have caused exception if it were accessed
before the BSS was initialized. It is now fixed by dynamically
querying the V2M_SYS_ID to find the FVP model type and accordingly
selecting the appropriate GIC Base address.

This patch also fixes the 'plat_print_gic_regs' to use the correct GIC
Distributor base address for printing GICD_IS_PENDR register values
for both Juno and FVP platforms.

Fixes ARM-Software/tf-issues#236

Change-Id: I545c7b908b3111419bf27db0575ce86acf86784b

10 years agoMerge pull request #212 from jcastillo-arm/jc/tf-issues/252
achingupta [Fri, 19 Sep 2014 09:43:29 +0000 (10:43 +0100)]
Merge pull request #212 from jcastillo-arm/jc/tf-issues/252

Fix LENGTH attribute value in linker scripts

10 years agoFix LENGTH attribute value in linker scripts
Juan Castillo [Tue, 16 Sep 2014 09:40:35 +0000 (10:40 +0100)]
Fix LENGTH attribute value in linker scripts

This patch fixes the incorrect value of the LENGTH attribute in
the linker scripts. This attribute must define the memory size, not
the limit address.

Fixes ARM-software/tf-issues#252

Change-Id: I328c38b9ec502debe12046a8912d7dfc54610c46

10 years agoMerge pull request #211 from jenswi-linaro/optee_140916
achingupta [Wed, 17 Sep 2014 10:53:12 +0000 (11:53 +0100)]
Merge pull request #211 from jenswi-linaro/optee_140916

Dispatcher for OPTEE from Linaro SWG

10 years agoAdd opteed based on tspd
Jens Wiklander [Mon, 4 Aug 2014 13:39:58 +0000 (15:39 +0200)]
Add opteed based on tspd

Adds a dispatcher for OP-TEE based on the test secure payload
dispatcher.

Fixes arm-software/tf-issues#239

10 years agoInitialize SCTLR_EL1 based on MODE_RW bit
Jens Wiklander [Thu, 4 Sep 2014 08:23:27 +0000 (10:23 +0200)]
Initialize SCTLR_EL1 based on MODE_RW bit

Initializes SCTLR_EL1 based on MODE_RW bit in SPSR for the entry
point. The RES1 bits for SCTLR_EL1 differs for Aarch64 and Aarch32
mode.

10 years agoMerge pull request #210 from soby-mathew/sm/makefile_bl_stages
achingupta [Tue, 16 Sep 2014 17:46:22 +0000 (18:46 +0100)]
Merge pull request #210 from soby-mathew/sm/makefile_bl_stages

Add support for specifying pre-built BL binaries in Makefile

10 years agoAdd support for specifying pre-built BL binaries in Makefile
Soby Mathew [Mon, 8 Sep 2014 16:51:01 +0000 (17:51 +0100)]
Add support for specifying pre-built BL binaries in Makefile

This patch adds support for supplying pre-built BL binaries for BL2,
BL3-1 and BL3-2 during trusted firmware build. Specifying BLx = <path_to_BLx>
in the build command line, where 'x' is any one of BL2, BL3-1 or BL3-2, will
skip building that BL stage from source and include the specified binary in
final fip image.

This patch also makes BL3-3 binary for FIP optional depending on the
value of 'NEED_BL33' flag which is defined by the platform.

Fixes ARM-software/tf-issues#244
Fixes ARM-software/tf-issues#245

Change-Id: I3ebe1d4901f8b857e8bb51372290978a3323bfe7

10 years agoReset CNTVOFF_EL2 register before exit into EL1 on warm boot
Soby Mathew [Fri, 29 Aug 2014 13:41:58 +0000 (14:41 +0100)]
Reset CNTVOFF_EL2 register before exit into EL1 on warm boot

This patch resets the value of CNTVOFF_EL2 before exit to EL1 on
warm boot. This needs to be done if only the Trusted Firmware exits
to EL1 instead of EL2, otherwise the hypervisor would be responsible
for this.

Fixes ARM-software/tf-issues#240

Change-Id: I79d54831356cf3215bcf1f251c373bd8f89db0e0

10 years agoMerge pull request #205 from danh-arm/dh/1.0-docs
danh-arm [Thu, 28 Aug 2014 14:39:55 +0000 (15:39 +0100)]
Merge pull request #205 from danh-arm/dh/1.0-docs

Documentation for version 1.0

10 years agoMerge pull request #204 from danh-arm/dh/user-guide-fixes
danh-arm [Thu, 28 Aug 2014 14:38:11 +0000 (15:38 +0100)]
Merge pull request #204 from danh-arm/dh/user-guide-fixes

Fix minor issues in user guide

10 years agoDocumentation for version 1.0
Dan Handley [Tue, 26 Aug 2014 18:18:55 +0000 (19:18 +0100)]
Documentation for version 1.0

Final updates to readme.md and change-log.md for ARM Trusted
Firmware version 1.0. Also increment the version in the Makefile.

Change-Id: I00fe1016c8b936834bbf7bbba7aab07f51261bbb

10 years agoFix minor issues in user guide
Dan Handley [Thu, 28 Aug 2014 13:04:06 +0000 (14:04 +0100)]
Fix minor issues in user guide

*   Fix broken link to SCP download.

*   Remove requirement to install `ia32-libs`. This package is no
    longer available in current versions of Ubuntu and is no
    longer required when using the Linaro toolchain.

Change-Id: I9823d535a1d69136685754b7707b73e1eef0978d

10 years agoMerge pull request #203 from danh-arm/dh/misc-docs-1.0
danh-arm [Wed, 27 Aug 2014 18:16:27 +0000 (19:16 +0100)]
Merge pull request #203 from danh-arm/dh/misc-docs-1.0

Miscellaneous documentation fixes

10 years agoMiscellaneous documentation fixes
Sandrine Bailleux [Wed, 6 Aug 2014 10:27:23 +0000 (11:27 +0100)]
Miscellaneous documentation fixes

This patch gathers miscellaneous minor fixes to the documentation, and comments
in the source code.

Change-Id: I631e3dda5abafa2d90f464edaee069a1e58b751b
Co-Authored-By: Soby Mathew <soby.mathew@arm.com>
Co-Authored-By: Dan Handley <dan.handley@arm.com>
10 years agoMerge pull request #202 from achingupta/ag/fw-design-juno-update
danh-arm [Wed, 27 Aug 2014 17:27:19 +0000 (18:27 +0100)]
Merge pull request #202 from achingupta/ag/fw-design-juno-update

Add information about Juno in firmware-design.md

10 years agoAdd information about Juno in firmware-design.md
Juan Castillo [Tue, 26 Aug 2014 16:28:03 +0000 (17:28 +0100)]
Add information about Juno in firmware-design.md

This patch reorganizes the firmware design guide to add information about the
port of the ARM Trusted Firmware to the Juno ARM development platform.

Change-Id: I0b80e2e7a35ccad1af2e971506cfb7fe505f8b84

10 years agoMerge pull request #200 from danh-arm/dh/fix-reset-to-bl31-part2
danh-arm [Wed, 27 Aug 2014 16:26:30 +0000 (17:26 +0100)]
Merge pull request #200 from danh-arm/dh/fix-reset-to-bl31-part2

Fix reset to BL3-1 instructions in user guide, part 2

10 years agoMerge pull request #201 from danh-arm/jc/juno-user-guide
danh-arm [Wed, 27 Aug 2014 16:25:50 +0000 (17:25 +0100)]
Merge pull request #201 from danh-arm/jc/juno-user-guide

Add Juno instructions to user guide

10 years agoAdd Juno instructions to user guide
Juan Castillo [Tue, 19 Aug 2014 09:53:33 +0000 (10:53 +0100)]
Add Juno instructions to user guide

This patch makes the Trusted Firmware build instructions in the
user guide platform independent.

FVP specific instructions have been grouped together under a new
section dedicated to FVP.

Juno specific instructions to build and run the Trusted Firmware,
UEFI and Linux have been added.

Change-Id: I9bfb1b9d732b1f73abbe29f68ac931e1773a4fd5

10 years agoFix reset to BL3-1 instructions in user guide, part 2
Dan Handley [Tue, 26 Aug 2014 15:02:19 +0000 (16:02 +0100)]
Fix reset to BL3-1 instructions in user guide, part 2

Fix the instructions for resetting to the BL3-1 entrypoint in the
user guide. The BL3-1 and BL3-2 image locations changed in the fix
to ARM-software/tf-issues#100 (commit 186c1d4). This is distinct
from the similar issue fixed in commit bfb1dd5.

Also clarify the dependence on the FVP_SHARED_DATA_LOCATION and
FVP_TSP_RAM_LOCATION build options, and tidy up the "Notes
regarding Base FVP configuration options" section.

Change-Id: I6b03452a71f0c69efa169852712bcb184242696e

10 years agoMerge pull request #198 from danh-arm/dh/move-up-dependencies
danh-arm [Thu, 21 Aug 2014 17:30:31 +0000 (18:30 +0100)]
Merge pull request #198 from danh-arm/dh/move-up-dependencies

Move up dependency versions in user guide

10 years agoMerge pull request #197 from soby-mathew/rationalize_uarts
danh-arm [Thu, 21 Aug 2014 15:44:40 +0000 (16:44 +0100)]
Merge pull request #197 from soby-mathew/rationalize_uarts

Rationalize UART usage among different BL stages

10 years agoRationalize UART usage among different BL stages
Soby Mathew [Thu, 21 Aug 2014 14:20:27 +0000 (15:20 +0100)]
Rationalize UART usage among different BL stages

This patch changes the UART port assignment for various BL stages
so as to make it consistent on the platform ports. The BL1, BL2 and
BL3-1 now uses UART0 on the FVP port and SoC UART0 on the Juno port.
The BL3-2 uses UART2 on the FVP port and FPGA UART0 on the Juno
port.

This provides an interim fix to ARM-software/tf-issues#220 until
support is added for changing the UART port for a BL image between
cold boot and runtime.

Change-Id: Iae5faea90be3d59e41e597b34a902f93e737505a

10 years agoMove up dependency versions in user guide
Dan Handley [Thu, 14 Aug 2014 08:14:52 +0000 (09:14 +0100)]
Move up dependency versions in user guide

Move up the version numbers of the following Trusted Firmware
dependencies in the user guide:

*   Foundation and Base FVPs (latest publically available
    versions).

*   EDK2 implementation. The guide now uses the latest version from
    https://github.com/ARM-software/edk2.git. This requires the
    `iasl` package to also be installed.

*   Linux kernel. The guide now uses the latest version from
    https://github.com/ARM-software/linux.git.

*   Linaro OpenEmbedded file system.

*   ARM Development Studio 5.

Change-Id: I95bb863a61e47b9ef8be3d110f7087375ee78add

10 years agoMerge pull request #196 from soby-mathew/sm/tf_juno_support
danh-arm [Thu, 21 Aug 2014 14:15:49 +0000 (15:15 +0100)]
Merge pull request #196 from soby-mathew/sm/tf_juno_support

Add support for Juno in Trusted Firmware

10 years agoJuno: Read primary CPU MPID from SCC GPR_1
Juan Castillo [Tue, 12 Aug 2014 16:24:30 +0000 (17:24 +0100)]
Juno: Read primary CPU MPID from SCC GPR_1

This patch removes the PRIMARY_CPU definition hardcoded in the
Juno port. Instead, the primary CPU is obtained at runtime by
reading the SCC General Purpose Register 1 (GPR_1), whose value
is copied by the SCP into shared memory during the boot process.

Change-Id: I3981daa92eb7142250712274cf7f655b219837f5

10 years agoJuno: Implement PSCI SYSTEM_OFF and SYSTEM_RESET APIs
Juan Castillo [Tue, 12 Aug 2014 07:42:28 +0000 (08:42 +0100)]
Juno: Implement PSCI SYSTEM_OFF and SYSTEM_RESET APIs

This patch adds the Juno platform specific handlers for PSCI
SYSTEM_OFF and SYSTEM_RESET operations.

Change-Id: Ie389adead533ec2314af44d721b4d0f306147c7d

10 years agoJuno: Add support for Test Secure-EL1 Payload
Sandrine Bailleux [Thu, 17 Jul 2014 08:56:29 +0000 (09:56 +0100)]
Juno: Add support for Test Secure-EL1 Payload

This patch implements the TSP on Juno. It executes from on-chip Trusted
SRAM.

Also, the other bootloader images (i.e. BL1 R/W, BL2 and BL3-1) have
been moved around. The reason is, although there was enough space
overall to store the TSP in SRAM, there was no contiguous free chunk
of SRAM big enough to hold it.

This patch keeps the overall memory layout (i.e. keeping BL1 R/W at
the bottom, BL2 at the top and BL3-1 in between) but moves the base
addresses of all the bootloader images in such a way that:
 - memory fragmentation is reduced enough to fit BL3-2 in;
 - new base addresses are suitable for release builds as well as debug
   ones;
 - each image has a few extra kilobytes for future growth.
   BL3-1 and BL3-2 are the images which received the biggest allocations
   since they will most probably grow the most.

This patch also adds instruction synchronization barriers around the code which
handles the timer interrupt in the TSP. This ensures that the interrupt is not
acknowledged after or EOIed before it is deactivated at the peripheral.

Change-Id: I1c5b51858700027ee283ac85d18e06863a27c72e

10 years agoJuno: Implement PSCI CPU_OFF and CPU_SUSPEND APIs
Achin Gupta [Mon, 18 Aug 2014 13:40:27 +0000 (14:40 +0100)]
Juno: Implement PSCI CPU_OFF and CPU_SUSPEND APIs

This patch adds support for PSCI CPU_OFF and CPU_SUSPEND APIs to the Juno port
of the ARM Trusted Firmware. The maximum affinity level that can be suspended is
the cluster level (affinity level 1). Support for suspending the system level is
not present.

Change-Id: Ie2c9da0acd7d1b0d5ac64940cdf40347153e52c8

10 years agoJuno: Implement initial platform port
Sandrine Bailleux [Thu, 17 Jul 2014 15:06:39 +0000 (16:06 +0100)]
Juno: Implement initial platform port

This patch adds the initial port of the ARM Trusted Firmware on the Juno
development platform. This port does not support a BL3-2 image or any PSCI APIs
apart from PSCI_VERSION and PSCI_CPU_ON. It enables workarounds for selected
Cortex-A57 (#806969 & #813420) errata and implements the workaround for a Juno
platform errata (Defect id 831273).

Change-Id: Ib3d92df3af53820cfbb2977582ed0d7abf6ef893

10 years agoMerge pull request #195 from achingupta/ag/fvp_dt_updates
danh-arm [Wed, 20 Aug 2014 19:15:16 +0000 (20:15 +0100)]
Merge pull request #195 from achingupta/ag/fvp_dt_updates

FVP: Update device trees to match cpuidle driver

10 years agoMerge pull request #194 from danh-arm/sm/tf-issues#98
danh-arm [Wed, 20 Aug 2014 19:14:59 +0000 (20:14 +0100)]
Merge pull request #194 from danh-arm/sm/tf-issues#98

Implement the CPU Specific operations framework v3

10 years agoFVP: Update device trees to match cpuidle driver
Achin Gupta [Wed, 20 Aug 2014 16:33:09 +0000 (17:33 +0100)]
FVP: Update device trees to match cpuidle driver

This patch updates the representation of idle tables and cpu/cluster topology in
the device tree source files for the FVP to what the latest cpuidle driver in
Linux expects. The device tree binaries have also been updated.

Change-Id: If0668b96234f65aa0435fba52f288c9378bd8824

10 years agoAdd documentation for CPU specific abstraction and Errata workarounds
Soby Mathew [Mon, 18 Aug 2014 15:57:56 +0000 (16:57 +0100)]
Add documentation for CPU specific abstraction and Errata workarounds

This patch adds documentation for CPU specific abstraction in the firmware-
design.md and adds a new document cpu-errata-workarounds.md to describe
the cpu errata workaround build flags.

Change-Id: Ia08c2fec0b868a0a107d0264e87a60182797a1bd

10 years agoAdd support for selected Cortex-A57 errata workarounds
Soby Mathew [Thu, 14 Aug 2014 15:19:29 +0000 (16:19 +0100)]
Add support for selected Cortex-A57 errata workarounds

This patch adds workarounds for selected errata which affect the Cortex-A57 r0p0
part. Each workaround has a build time flag which should be used by the platform
port to enable or disable the corresponding workaround. The workarounds are
disabled by default. An assertion is raised if the platform enables a workaround
which does not match the CPU revision at runtime.

Change-Id: I9ae96b01c6ff733d04dc733bd4e67dbf77b29fb0

10 years agoAdd CPU specific crash reporting handlers
Soby Mathew [Thu, 14 Aug 2014 12:36:41 +0000 (13:36 +0100)]
Add CPU specific crash reporting handlers

This patch adds handlers for dumping Cortex-A57 and Cortex-A53 specific register
state to the CPU specific operations framework. The contents of CPUECTLR_EL1 are
dumped currently.

Change-Id: I63d3dbfc4ac52fef5e25a8cf6b937c6f0975c8ab

10 years agoAdd CPU specific power management operations
Soby Mathew [Thu, 14 Aug 2014 11:49:05 +0000 (12:49 +0100)]
Add CPU specific power management operations

This patch adds CPU core and cluster power down sequences to the CPU specific
operations framework introduced in a earlier patch. Cortex-A53, Cortex-A57 and
generic AEM sequences have been added. The latter is suitable for the
Foundation and Base AEM FVPs. A pointer to each CPU's operations structure is
saved in the per-cpu data so that it can be easily accessed during power down
seqeunces.

An optional platform API has been introduced to allow a platform to disable the
Accelerator Coherency Port (ACP) during a cluster power down sequence. The weak
definition of this function (plat_disable_acp()) does not take any action. It
should be overriden with a strong definition if the ACP is present on a
platform.

Change-Id: I8d09bd40d2f528a28d2d3f19b77101178778685d

10 years agoAdd platform API for reset handling
Soby Mathew [Thu, 14 Aug 2014 11:22:32 +0000 (12:22 +0100)]
Add platform API for reset handling

This patch adds an optional platform API (plat_reset_handler) which allows the
platform to perform any actions immediately after a cold or warm reset
e.g. implement errata workarounds. The function is called with MMU and caches
turned off. This API is weakly defined and does nothing by default but can be
overriden by a platform with a strong definition.

Change-Id: Ib0acdccbd24bc756528a8bd647df21e8d59707ff

10 years agoIntroduce framework for CPU specific operations
Soby Mathew [Thu, 14 Aug 2014 10:33:56 +0000 (11:33 +0100)]
Introduce framework for CPU specific operations

This patch introduces a framework which will allow CPUs to perform
implementation defined actions after a CPU reset, during a CPU or cluster power
down, and when a crash occurs. CPU specific reset handlers have been implemented
in this patch. Other handlers will be implemented in subsequent patches.

Also moved cpu_helpers.S to the new directory lib/cpus/aarch64/.

Change-Id: I1ca1bade4d101d11a898fb30fea2669f9b37b956

10 years agoRework use of labels in assembly macros.
Soby Mathew [Tue, 19 Aug 2014 10:26:00 +0000 (11:26 +0100)]
Rework use of labels in assembly macros.

This patch provides a workaround for the ASM_ASSERT label issue
and also reworks the use of labels in assembly macros.
If the caller of the ASM_ASSERT macro happened to use the
label '1' to jump past the ASM_ASSERT macro, it would not have
worked since the ASM_ASSERT macro internally used the same label.
Hence, as a workaround, this patch makes the label a high
number in the expectation that the caller will never use it.

Also updated the other assembly macros using numerical labels to
named lables.

Change-Id: Iec892359db84f2391ad2a83a92141c4d7049776a

10 years agoMiscellaneous PSCI code cleanups
Achin Gupta [Sun, 27 Jul 2014 23:15:23 +0000 (00:15 +0100)]
Miscellaneous PSCI code cleanups

This patch implements the following cleanups in PSCI generic code:

1. It reworks the affinity level specific handlers in the PSCI implementation
   such that.

   a. Usage of the 'rc' local variable is restricted to only where it is
      absolutely needed

   b. 'plat_state' local variable is defined only when a direct invocation of
      plat_get_phys_state() does not suffice.

   c. If a platform handler is not registered then the level specific handler
      returns early.

2. It limits the use of the mpidr_aff_map_nodes_t typedef to declaration of
   arrays of the type instead of using it in function prototypes as well.

3. It removes dangling declarations of __psci_cpu_off() and
   __psci_cpu_suspend(). The definitions of these functions were removed in
   earlier patches.

Change-Id: I51e851967c148be9c2eeda3a3c41878f7b4d6978

10 years agofvp: Rework when platform actions are performed
Achin Gupta [Thu, 31 Jul 2014 16:45:51 +0000 (17:45 +0100)]
fvp: Rework when platform actions are performed

This patch reworks FVP port's power management implementation to perform
platform actions only when the platform exported hook is invoked for the highest
affinity level to enter/exit the OFF state.

For example, during a CPU_OFF operation, fvp_affinst_off() is called twice: for
affinity level 0 and affinity level 1 (in that order). CPU specific operations
are deferred until the next invocation if it is determined through a call to
psci_get_max_phys_off_afflvl() that this is CPU is the last in the cluster.

Similarly, during power up if the CPU is the first in the cluster, both CPU and
cluster specific operations are performed when fvp_affinst_on_finish() is
invoked for affinity level 1. Earlier, they were done across the two invocations
of the handler.

Change-Id: I4288ed3ba1385db36a69cc2e598deb219f209b8a

10 years agoAdd APIs to preserve highest affinity level in OFF state
Achin Gupta [Thu, 31 Jul 2014 10:19:11 +0000 (11:19 +0100)]
Add APIs to preserve highest affinity level in OFF state

This patch adds APIs to find, save and retrieve the highest affinity level which
will enter or exit from the physical OFF state during a PSCI power management
operation. The level is stored in per-cpu data.

It then reworks the PSCI implementation to perform cache maintenance only
when the handler for the highest affinity level to enter/exit the OFF state is
called.

For example. during a CPU_SUSPEND operation, state management is done prior to
calling the affinity level specific handlers. The highest affinity level which
will be turned off is determined using the psci_find_max_phys_off_afflvl()
API. This level is saved using the psci_set_max_phys_off_afflvl() API. In the
code that does generic handling for each level, prior to performing cache
maintenance it is first determined if the current affinity level matches the
value returned by psci_get_max_phys_off_afflvl(). Cache maintenance is done if
the values match.

This change allows the last CPU in a cluster to perform cache maintenance
independently. Earlier, cache maintenance was started in the level 0 handler and
finished in the level 1 handler. This change in approach will facilitate
implementation of tf-issues#98.

Change-Id: I57233f0a27b3ddd6ddca6deb6a88b234525b0ae6