project/bcm63xx/atf.git
9 years agoMerge pull request #401 from sandrine-bailleux/sb/fix-sp804-bug-v2
danh-arm [Wed, 30 Sep 2015 14:18:15 +0000 (15:18 +0100)]
Merge pull request #401 from sandrine-bailleux/sb/fix-sp804-bug-v2

Bug fix in the SP804 dual timer driver

9 years agoMerge pull request #400 from vwadekar/tlkd-pm-handlers-v5
Achin Gupta [Wed, 30 Sep 2015 12:19:06 +0000 (13:19 +0100)]
Merge pull request #400 from vwadekar/tlkd-pm-handlers-v5

Send power management events to the Trusted OS (TLK)

9 years agoMerge pull request #393 from mtk09422/misc-updates
danh-arm [Wed, 30 Sep 2015 10:13:33 +0000 (11:13 +0100)]
Merge pull request #393 from mtk09422/misc-updates

mt8173: Update SPM and fix watchdog setting

9 years agoSend power management events to the Trusted OS (TLK)
Varun Wadekar [Wed, 26 Aug 2015 07:19:03 +0000 (12:49 +0530)]
Send power management events to the Trusted OS (TLK)

This patch adds PM handlers to TLKD for the system suspend/resume and
system poweroff/reset cases. TLK expects all SMCs through a single
handler, which then fork out into multiple handlers depending on the
SMC. We tap into the same single entrypoint by restoring the S-EL1
context before passing the PM event via register 'x0'. On completion
of the PM event, TLK sends a completion SMC and TLKD then moves on
with the PM process.

Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
9 years agoBug fix in the SP804 dual timer driver
Sandrine Bailleux [Mon, 28 Sep 2015 15:32:38 +0000 (16:32 +0100)]
Bug fix in the SP804 dual timer driver

The generic delay timer driver expects a pointer to a timer_ops_t
structure containing the specific timer driver information. It
doesn't make a copy of the structure, instead it just keeps the
pointer. Therefore, this pointer must remain valid over time.

The SP804 driver doesn't satisfy this requirement. The
sp804_timer_init() macro creates a temporary instanciation of the
timer_ops_t structure on the fly and passes it to the generic
delay timer. When this temporary instanciation gets deallocated,
the generic delay timer is left with a pointer to invalid data.

This patch fixes this bug by statically allocating the SP804
timer_ops_t structure.

Change-Id: I8fbf75907583aef06701e3fd9fabe0b2c9bc95bf

9 years agoMerge pull request #398 from achingupta/vk/fix_bakery_lock_size
Achin Gupta [Mon, 28 Sep 2015 13:39:45 +0000 (14:39 +0100)]
Merge pull request #398 from achingupta/vk/fix_bakery_lock_size

Fix relocation of __PERCPU_BAKERY_LOCK_SIZE__ in PR #390

9 years agoFix relocation of __PERCPU_BAKERY_LOCK_SIZE__
Vikram Kanigiri [Thu, 24 Sep 2015 14:45:43 +0000 (15:45 +0100)]
Fix relocation of __PERCPU_BAKERY_LOCK_SIZE__

When a platform port does not define PLAT_PERCPU_BAKERY_LOCK_SIZE, the total
memory that should be allocated per-cpu to accommodate all bakery locks is
calculated by the linker in bl31.ld.S. The linker stores this value in the
__PERCPU_BAKERY_LOCK_SIZE__ linker symbol. The runtime value of this symbol is
different from the link time value as the symbol is relocated into the current
section (.bss). This patch fixes this issue by marking the symbol as ABSOLUTE
which allows it to retain its correct value even at runtime.

The description of PLAT_PERCPU_BAKERY_LOCK_SIZE in the porting-guide.md has been
made clearer as well.

Change-Id: Ia0cfd42f51deaf739d792297e60cad5c6e6e610b

9 years agoMerge pull request #394 from achingupta/ag/ccn_driver
Achin Gupta [Tue, 22 Sep 2015 15:34:52 +0000 (16:34 +0100)]
Merge pull request #394 from achingupta/ag/ccn_driver

Support for ARM CoreLink CCN interconnects

9 years agoAdd a generic driver for ARM CCN IP
Achin Gupta [Mon, 20 Jul 2015 21:28:23 +0000 (22:28 +0100)]
Add a generic driver for ARM CCN IP

This patch adds a device driver which can be used to program the following
aspects of ARM CCN IP:

1. Specify the mapping between ACE/ACELite/ACELite+DVM/CHI master interfaces and
   Request nodes.
2. Add and remove master interfaces from the snoop and dvm
   domains.
3. Place the L3 cache in a given power state.
4. Configuring system adress map and enabling 3 SN striping mode of memory
   controller operation.

Change-Id: I0f665c6a306938e5b66f6a92f8549b529aa8f325

9 years agoTegra: Perform cache maintenance on video carveout memory
Vikram Kanigiri [Thu, 10 Sep 2015 13:12:36 +0000 (14:12 +0100)]
Tegra: Perform cache maintenance on video carveout memory

Currently, the non-overlapping video memory carveout region is cleared after
disabling the MMU at EL3. If at any exception level the carveout region is being
marked as cacheable, this zeroing of memory will not have an affect on the
cached lines. Hence, we first invalidate the dirty lines and update the memory
and invalidate again so that both caches and memory is zeroed out.

Change-Id: If3b2d139ab7227f6799c0911d59e079849dc86aa

9 years agoMake generic code work in presence of system caches
Achin Gupta [Fri, 11 Sep 2015 15:03:13 +0000 (16:03 +0100)]
Make generic code work in presence of system caches

On the ARMv8 architecture, cache maintenance operations by set/way on the last
level of integrated cache do not affect the system cache. This means that such a
flush or clean operation could result in the data being pushed out to the system
cache rather than main memory. Another CPU could access this data before it
enables its data cache or MMU. Such accesses could be serviced from the main
memory instead of the system cache. If the data in the sysem cache has not yet
been flushed or evicted to main memory then there could be a loss of
coherency. The only mechanism to guarantee that the main memory will be updated
is to use cache maintenance operations to the PoC by MVA(See section D3.4.11
(System level caches) of ARMv8-A Reference Manual (Issue A.g/ARM DDI0487A.G).

This patch removes the reliance of Trusted Firmware on the flush by set/way
operation to ensure visibility of data in the main memory. Cache maintenance
operations by MVA are now used instead. The following are the broad category of
changes:

1. The RW areas of BL2/BL31/BL32 are invalidated by MVA before the C runtime is
   initialised. This ensures that any stale cache lines at any level of cache
   are removed.

2. Updates to global data in runtime firmware (BL31) by the primary CPU are made
   visible to secondary CPUs using a cache clean operation by MVA.

3. Cache maintenance by set/way operations are only used prior to power down.

NOTE: NON-UPSTREAM TRUSTED FIRMWARE CODE SHOULD MAKE EQUIVALENT CHANGES IN
ORDER TO FUNCTION CORRECTLY ON PLATFORMS WITH SUPPORT FOR SYSTEM CACHES.

Fixes ARM-software/tf-issues#205

Change-Id: I64f1b398de0432813a0e0881d70f8337681f6e9a

9 years agoMerge pull request #390 from vikramkanigiri/at/unify_bakery_locks_v2
Achin Gupta [Mon, 14 Sep 2015 20:49:10 +0000 (21:49 +0100)]
Merge pull request #390 from vikramkanigiri/at/unify_bakery_locks_v2

Re-design bakery lock allocation and algorithm

9 years agoMerge pull request #389 from vikramkanigiri/vk/css_rework
Achin Gupta [Mon, 14 Sep 2015 20:47:22 +0000 (21:47 +0100)]
Merge pull request #389 from vikramkanigiri/vk/css_rework

Add more configurability options in ARM platform port code

9 years agomt8173: fix watchdog register setting
Jimmy Huang [Fri, 4 Sep 2015 02:30:57 +0000 (10:30 +0800)]
mt8173: fix watchdog register setting

This patch corrects the watchdog register setting. To update watchdog
register, the watchdog mode key must be set to make the register
configurable.

Change-Id: I9ca98ea4012f7f220b116013461030de4638ce0b
Signed-off-by: Jimmy Huang <jimmy.huang@mediatek.com>
9 years agomt8173: update spm suspend pcm codes
yt.lee [Thu, 20 Aug 2015 08:01:15 +0000 (16:01 +0800)]
mt8173: update spm suspend pcm codes

1. update suspend pcm code (add dummy apb read before mcusys power down)

BRANCH=none
BUG=none
TEST=verified

Change-Id: I2802cf8665fc1c8fe2304fd7d5f3eab9948b0b78
Signed-off-by: yt.lee <yt.lee@mediatek.com>
9 years agoUse unified bakery locks API in Mediatek port
Vikram Kanigiri [Wed, 9 Sep 2015 09:53:05 +0000 (10:53 +0100)]
Use unified bakery locks API in Mediatek port

This patch update Mediatek port to use the `DEFINE_BAKERY_LOCK` macro instead of
specifying the exact data structure to use for a bakery lock and the input
linker section that it should be allocated to.

Change-Id: I2116dbe27010bb46d7cc64fafef55c7240c4c721

9 years agoUpdate ARM platform ports to use new bakery lock apis.
Vikram Kanigiri [Wed, 9 Sep 2015 09:52:13 +0000 (10:52 +0100)]
Update ARM platform ports to use new bakery lock apis.

This patch updates ARM platform ports to use the new unified bakery locks
API. The caller does not have to use a different bakery lock API depending upon
the value of the USE_COHERENT_MEM build option.

NOTE: THIS PATCH CAN BE USED AS A REFERENCE TO UPDATE OTHER PLATFORM PORTS.

Change-Id: I1b26afc7c9a9808a6040eb22f603d30192251da7

9 years agoRe-design bakery lock memory allocation and algorithm
Andrew Thoelke [Thu, 10 Sep 2015 10:39:36 +0000 (11:39 +0100)]
Re-design bakery lock memory allocation and algorithm

This patch unifies the bakery lock api's across coherent and normal
memory implementation of locks by using same data type `bakery_lock_t`
and similar arguments to functions.

A separate section `bakery_lock` has been created and used to allocate
memory for bakery locks using `DEFINE_BAKERY_LOCK`. When locks are
allocated in normal memory, each lock for a core has to spread
across multiple cache lines. By using the total size allocated in a
separate cache line for a single core at compile time, the memory for
other core locks is allocated at link time by multiplying the single
core locks size with (PLATFORM_CORE_COUNT - 1). The normal memory lock
algorithm now uses lock address instead of the `id` in the per_cpu_data.
For locks allocated in coherent memory, it moves locks from
tzfw_coherent_memory to bakery_lock section.

The bakery locks are allocated as part of bss or in coherent memory
depending on usage of coherent memory. Both these regions are
initialised to zero as part of run_time_init before locks are used.
Hence, bakery_lock_init() is made an empty function as the lock memory
is already initialised to zero.

The above design lead to the removal of psci bakery locks from
non_cpu_power_pd_node to psci_locks.

NOTE: THE BAKERY LOCK API WHEN USE_COHERENT_MEM IS NOT SET HAS CHANGED.
THIS IS A BREAKING CHANGE FOR ALL PLATFORM PORTS THAT ALLOCATE BAKERY
LOCKS IN NORMAL MEMORY.

Change-Id: Ic3751c0066b8032dcbf9d88f1d4dc73d15f61d8b

9 years agoMerge pull request #388 from achingupta/ag/spd_suspend_levels_v3
Achin Gupta [Fri, 11 Sep 2015 11:19:21 +0000 (12:19 +0100)]
Merge pull request #388 from achingupta/ag/spd_suspend_levels_v3

Pass the target suspend level to SPD suspend hooks

9 years agoSeparate CSS security setup from SOC security setup
Vikram Kanigiri [Mon, 3 Aug 2015 22:58:19 +0000 (23:58 +0100)]
Separate CSS security setup from SOC security setup

Currently, on ARM platforms(ex. Juno) non-secure access to specific
peripheral regions, config registers which are inside and outside CSS
is done in the soc_css_security_setup(). This patch separates the CSS
security setup from the SOC security setup in the css_security_setup().

The CSS security setup involves programming of the internal NIC to
provide access to regions inside the CSS. This is needed only in
Juno, hence Juno implements it in its board files as css_init_nic400().

Change-Id: I95a1fb9f13f9b18fa8e915eb4ae2f15264f1b060

9 years agoDefine the Non-Secure timer frame ID for ARM platforms
Vikram Kanigiri [Fri, 31 Jul 2015 15:35:05 +0000 (16:35 +0100)]
Define the Non-Secure timer frame ID for ARM platforms

On Juno and FVP platforms, the Non-Secure System timer corresponds
to frame 1. However, this is a platform-specific decision and it
shouldn't be hard-coded. Hence, this patch introduces
PLAT_ARM_NSTIMER_FRAME_ID which should be used by all ARM platforms
to specify the correct non-secure timer frame.

Change-Id: I6c3a905d7d89200a2f58c20ce5d1e1d166832bba

9 years agoRe-factor definition of TZC-400 base address
Vikram Kanigiri [Fri, 31 Jul 2015 13:50:36 +0000 (14:50 +0100)]
Re-factor definition of TZC-400 base address

This patch replaces the `ARM_TZC_BASE` constant with `PLAT_ARM_TZC_BASE` to
support different TrustZone Controller base addresses across ARM platforms.

Change-Id: Ie4e1c7600fd7a5875323c7cc35e067de0c6ef6dd

9 years agoPass the target suspend level to SPD suspend hooks
Achin Gupta [Mon, 7 Sep 2015 19:43:27 +0000 (20:43 +0100)]
Pass the target suspend level to SPD suspend hooks

In certain Trusted OS implementations it is a requirement to pass them the
highest power level which will enter a power down state during a PSCI
CPU_SUSPEND or SYSTEM_SUSPEND API invocation. This patch passes this power level
to the SPD in the "max_off_pwrlvl" parameter of the svc_suspend() hook.

Currently, the highest power level which was requested to be placed in a low
power state (retention or power down) is passed to the SPD svc_suspend_finish()
hook. This hook is called after emerging from the low power state. It is more
useful to pass the highest power level which was powered down instead. This
patch does this by changing the semantics of the parameter passed to an SPD's
svc_suspend_finish() hook. The name of the parameter has been changed from
"suspend_level" to "max_off_pwrlvl" as well. Same changes have been made to the
parameter passed to the tsp_cpu_resume_main() function.

NOTE: THIS PATCH CHANGES THE SEMANTICS OF THE EXISTING "svc_suspend_finish()"
      API BETWEEN THE PSCI AND SPD/SP IMPLEMENTATIONS. THE LATTER MIGHT NEED
      UPDATES TO ENSURE CORRECT BEHAVIOUR.

Change-Id: If3a9d39b13119bbb6281f508a91f78a2f46a8b90

9 years agoMerge pull request #383 from vikramkanigiri/vk/tf-issues-314-v1
danh-arm [Wed, 2 Sep 2015 15:50:44 +0000 (16:50 +0100)]
Merge pull request #383 from vikramkanigiri/vk/tf-issues-314-v1

Ensure BL2 security state is secure

9 years agoEnsure BL2 security state is secure
Vikram Kanigiri [Thu, 23 Jul 2015 10:16:28 +0000 (11:16 +0100)]
Ensure BL2 security state is secure

BL2 loads secure runtime code(BL3-1, BL3-2) and hence it has to
run in secure world otherwise BL3-1/BL3-2 have to execute from
non-secure memory. Hence, This patch removes the change_security_state()
call in bl1_run_bl2() and replaces it with an assert to confirm
the BL2 as secure.

Fixes ARM-software/tf-issues#314

Change-Id: I611b83f5c4090e58a76a2e950b0d797b46df3c29

9 years agoMerge pull request #382 from vikramkanigiri/vk/tf-issues-312
danh-arm [Wed, 2 Sep 2015 11:29:48 +0000 (12:29 +0100)]
Merge pull request #382 from vikramkanigiri/vk/tf-issues-312

Configure all secure interrupts on ARM platforms

9 years agoMerge pull request #381 from vikramkanigiri/hl/gic_v3
danh-arm [Wed, 2 Sep 2015 11:23:06 +0000 (12:23 +0100)]
Merge pull request #381 from vikramkanigiri/hl/gic_v3

Remove EL2/EL1 GICv3 register updates

9 years agoConfigure all secure interrupts on ARM platforms
Vikram Kanigiri [Wed, 24 Jun 2015 16:51:09 +0000 (17:51 +0100)]
Configure all secure interrupts on ARM platforms

ARM TF configures all interrupts as non-secure except those which
are present in irq_sec_array. This patch updates the irq_sec_array
with the missing secure interrupts for ARM platforms.

It also updates the documentation to be inline with the latest
implementation.

Fixes ARM-software/tf-issues#312

Change-Id: I39956c56a319086e3929d1fa89030b4ec4b01fcc

9 years agoRemove EL2/EL1 GICv3 register updates
Vikram Kanigiri [Fri, 26 Jun 2015 09:13:22 +0000 (10:13 +0100)]
Remove EL2/EL1 GICv3 register updates

From Linux 3.17 onwards, the mainline kernel has support for GICv3
systems and if EL3 exists, it only needs to initialise ICC_SRE_EL3.SRE
and ICC_SRE_EL3.Enable to 1. Hence, this patch removes the redundant
updates of ICC_SRE_EL2 and ICC_PMR_EL1.

NOTE: For partner software's which enter kernel in EL1,
ICC_SRE_EL2.Enable and ICC_SRE_EL2.SRE bit needs to be set to 1
in EL2 before jumping to linux.

Change-Id: I09ed47869351b08a3b034735f532bc677eaa6917

9 years agoMerge pull request #375 from vwadekar/clear-videomem-region-v2
danh-arm [Tue, 1 Sep 2015 11:31:30 +0000 (12:31 +0100)]
Merge pull request #375 from vwadekar/clear-videomem-region-v2

Tegra: fix logic to clear videomem regions

9 years agoTegra: fix logic to clear videomem regions
Varun Wadekar [Wed, 26 Aug 2015 09:36:14 +0000 (15:06 +0530)]
Tegra: fix logic to clear videomem regions

The previous logic in the memctrl driver was not catering to cases
where the new memory region lied inside the older region. This patch
fixes the if/elseif/elseif logic in the driver to take care of this
case.

Reported by: Vikram Kanigiri <vikram.kanigiri@arm.com>
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
9 years agoMerge pull request #371 from vwadekar/retention-entry-v3
Achin Gupta [Tue, 25 Aug 2015 21:49:04 +0000 (22:49 +0100)]
Merge pull request #371 from vwadekar/retention-entry-v3

Retention entry v3

9 years agoTegra210: wait for 512 timer ticks before retention entry
Varun Wadekar [Fri, 21 Aug 2015 10:26:02 +0000 (15:56 +0530)]
Tegra210: wait for 512 timer ticks before retention entry

This patch programs the CPUECTLR_EL1 and L2ECTLR_EL1 registers,
so that the core waits for 512 generic timer CNTVALUEB ticks before
entering retention state, after executing a WFI instruction.

This functionality is configurable and can be enabled for platforms
by setting the newly defined 'ENABLE_L2_DYNAMIC_RETENTION' and
'ENABLE_CPU_DYNAMIC_RETENTION' flag.

Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
9 years agoAdd macros for retention control in Cortex-A53/A57
Varun Wadekar [Fri, 21 Aug 2015 10:22:51 +0000 (15:52 +0530)]
Add macros for retention control in Cortex-A53/A57

This patch adds macros suitable for programming the Advanced
SIMD/Floating-point (only Cortex-A53), CPU and L2 dynamic
retention control policy in the CPUECTLR_EL1 and L2ECTLR
registers.

Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
9 years agoMerge pull request #368 from jcastillo-arm/jc/genfw/1126
danh-arm [Fri, 21 Aug 2015 14:28:30 +0000 (15:28 +0100)]
Merge pull request #368 from jcastillo-arm/jc/genfw/1126

TBB: abort boot if BL3-2 cannot be authenticated

9 years agoMerge pull request #367 from soby-mathew/sm/mig_guide_fix
danh-arm [Thu, 20 Aug 2015 15:58:54 +0000 (16:58 +0100)]
Merge pull request #367 from soby-mathew/sm/mig_guide_fix

docs: Fixes to platform-migration-guide.md

9 years agoTBB: abort boot if BL3-2 cannot be authenticated
Juan Castillo [Mon, 17 Aug 2015 09:43:27 +0000 (10:43 +0100)]
TBB: abort boot if BL3-2 cannot be authenticated

BL3-2 image (Secure Payload) is optional. If the image cannot be
loaded a warning message is printed and the boot process continues.
According to the TBBR document, this behaviour should not apply in
case of an authentication error, where the boot process should be
aborted.

This patch modifies the load_auth_image() function to distinguish
between a load error and an authentication error. The caller uses
the return value to abort the boot process or continue.

In case of authentication error, the memory region used to store
the image is wiped clean.

Change-Id: I534391d526d514b2a85981c3dda00de67e0e7992

9 years agodocs: Fixes to platform-migration-guide.md
Soby Mathew [Tue, 18 Aug 2015 13:16:36 +0000 (14:16 +0100)]
docs: Fixes to platform-migration-guide.md

This patch corrects some typos in the platform migration guide. More
importantly, the commit ID of the patch that implements migration of ARM
Reference platforms to the new platform API has been corrected.

Change-Id: Ib0109ea42c3d2bad2c6856ab725862652da7f3c8

9 years agoMerge pull request #365 from mtk09422/plat_topology
danh-arm [Tue, 18 Aug 2015 11:40:22 +0000 (12:40 +0100)]
Merge pull request #365 from mtk09422/plat_topology

mt8173: Fix cluster 0 core count

9 years agoMerge pull request #364 from mtk09422/spm_suspend
danh-arm [Tue, 18 Aug 2015 11:40:16 +0000 (12:40 +0100)]
Merge pull request #364 from mtk09422/spm_suspend

mt8173: update spm wake_src setting

9 years agoMerge pull request #362 from jcastillo-arm/jc/inline
danh-arm [Tue, 18 Aug 2015 09:33:40 +0000 (10:33 +0100)]
Merge pull request #362 from jcastillo-arm/jc/inline

Fix build error with optimizations disabled (-O0)

9 years agomt8173: Fix cluster 0 core count
Jimmy Huang [Fri, 14 Aug 2015 07:25:16 +0000 (15:25 +0800)]
mt8173: Fix cluster 0 core count

Use constant macro defined in platform_def.h to replace hardcoded value.
This patch fix following assert in new psci-1.0 framework.

ASSERT: populate_power_domain_tree <183> : j == PLATFORM_CORE_COUNT

Change-Id: I9b7eda525479464a8c3805b6fe14ffb10debaf72
Signed-off-by: Jimmy Huang <jimmy.huang@mediatek.com>
9 years agomt8173: update spm wake_src setting
kenny liang [Tue, 11 Aug 2015 11:01:42 +0000 (19:01 +0800)]
mt8173: update spm wake_src setting

1. SEJ should not be one of the wake up sources

BUG=chrome-os-partner:38426
TEST=powerd_dbus_suspend

Change-Id: If8f3f19a885e66d7c10b472c2e3182a5affa4773
Signed-off-by: kenny liang <kenny.liang@mediatek.com>
9 years agoMerge pull request #361 from achingupta/for_sm/psci_proto_v5
Achin Gupta [Mon, 17 Aug 2015 13:56:31 +0000 (14:56 +0100)]
Merge pull request #361 from achingupta/for_sm/psci_proto_v5

For sm/psci proto v5

9 years agoPSCI: Rework generic code to conform to coding guidelines
Soby Mathew [Wed, 29 Jul 2015 16:05:03 +0000 (17:05 +0100)]
PSCI: Rework generic code to conform to coding guidelines

This patch reworks the PSCI generic implementation to conform to ARM
Trusted Firmware coding guidelines as described here:
https://github.com/ARM-software/arm-trusted-firmware/wiki

This patch also reviews the use of signed data types within PSCI
Generic code and replaces them with their unsigned counterparts wherever
they are not appropriate. The PSCI_INVALID_DATA macro which was defined
to -1 is now replaced with PSCI_INVALID_PWR_LVL macro which is defined
to PLAT_MAX_PWR_LVL + 1.

Change-Id: Iaea422d0e46fc314e0b173c2b4c16e0d56b2515a

9 years agoPSCI: Add documentation and fix plat_is_my_cpu_primary()
Soby Mathew [Mon, 8 Jun 2015 11:32:50 +0000 (12:32 +0100)]
PSCI: Add documentation and fix plat_is_my_cpu_primary()

This patch adds the necessary documentation updates to porting_guide.md
for the changes in the platform interface mandated as a result of the new
PSCI Topology and power state management frameworks. It also adds a
new document `platform-migration-guide.md` to aid the migration of existing
platform ports to the new API.

The patch fixes the implementation and callers of
plat_is_my_cpu_primary() to use w0 as the return parameter as implied by
the function signature rather than x0 which was used previously.

Change-Id: Ic11e73019188c8ba2bd64c47e1729ff5acdcdd5b

9 years agoPSCI: Validate non secure entrypoint on ARM platforms
Soby Mathew [Wed, 15 Jul 2015 12:36:24 +0000 (13:36 +0100)]
PSCI: Validate non secure entrypoint on ARM platforms

This patch implements the platform power managment handler to verify
non secure entrypoint for ARM platforms. The handler ensures that the
entry point specified by the normal world during CPU_SUSPEND, CPU_ON
or SYSTEM_SUSPEND PSCI API is a valid address within the non secure
DRAM.

Change-Id: I4795452df99f67a24682b22f0e0967175c1de429

9 years agoPSCI: Fix the return code for invalid entrypoint
Soby Mathew [Wed, 15 Jul 2015 11:13:26 +0000 (12:13 +0100)]
PSCI: Fix the return code for invalid entrypoint

As per PSCI1.0 specification, the error code to be returned when an invalid
non secure entrypoint address is specified by the PSCI client for CPU_SUSPEND,
CPU_ON or SYSTEM_SUSPEND must be PSCI_E_INVALID_ADDRESS. The current PSCI
implementation returned PSCI_E_INVAL_PARAMS. This patch rectifies this error
and also implements a common helper function to validate the entrypoint
information to be used across these PSCI API implementations.

Change-Id: I52d697d236c8bf0cd3297da4008c8e8c2399b170

9 years agoPSCI: Migrate SPDs and TSP to the new platform and framework API
Soby Mathew [Wed, 8 Jul 2015 20:45:46 +0000 (21:45 +0100)]
PSCI: Migrate SPDs and TSP to the new platform and framework API

The new PSCI frameworks mandates that the platform APIs and the various
frameworks in Trusted Firmware migrate away from MPIDR based core
identification to one based on core index. Deprecated versions of the old
APIs are still present to provide compatibility but their implementations
are not optimal. This patch migrates the various SPDs exisiting within
Trusted Firmware tree and TSP to the new APIs.

Change-Id: Ifc37e7071c5769b5ded21d0b6a071c8c4cab7836

9 years agoPSCI: Pool platform_mem_init() in common ARM platforms code
Sandrine Bailleux [Fri, 10 Jul 2015 16:33:26 +0000 (17:33 +0100)]
PSCI: Pool platform_mem_init() in common ARM platforms code

Now that the FVP mailbox is no longer zeroed, the function
platform_mem_init() does nothing both on FVP and on Juno. Therefore,
this patch pools it as the default implementation on ARM platforms.

Change-Id: I007220f4531f15e8b602c3368a1129a5e3a38d91

9 years agoPSCI: Use a single mailbox for warm reset for FVP and Juno
Sandrine Bailleux [Fri, 10 Jul 2015 15:49:31 +0000 (16:49 +0100)]
PSCI: Use a single mailbox for warm reset for FVP and Juno

Since there is a unique warm reset entry point, the FVP and Juno
port can use a single mailbox instead of maintaining one per core.
The mailbox gets programmed only once when plat_setup_psci_ops()
is invoked during PSCI initialization. This means mailbox is not
zeroed out during wakeup.

Change-Id: Ieba032a90b43650f970f197340ebb0ce5548d432

9 years agoPSCI: Demonstrate support for composite power states
Soby Mathew [Thu, 16 Apr 2015 13:49:09 +0000 (14:49 +0100)]
PSCI: Demonstrate support for composite power states

This patch adds support to the Juno and FVP ports for composite power states
with both the original and extended state-id power-state formats. Both the
platform ports use the recommended state-id encoding as specified in
Section 6.5 of the PSCI specification (ARM DEN 0022C). The platform build flag
ARM_RECOM_STATE_ID_ENC is used to include this support.

By default, to maintain backwards compatibility, the original power state
parameter format is used and the state-id field is expected to be zero.

Change-Id: Ie721b961957eaecaca5bf417a30952fe0627ef10

9 years agoPSCI: Migrate ARM reference platforms to new platform API
Soby Mathew [Wed, 1 Jul 2015 15:16:20 +0000 (16:16 +0100)]
PSCI: Migrate ARM reference platforms to new platform API

This patch migrates ARM reference platforms, Juno and FVP, to the new platform
API mandated by the new PSCI power domain topology and composite power state
frameworks. The platform specific makefiles now exports the build flag
ENABLE_PLAT_COMPAT=0 to disable the platform compatibility layer.

Change-Id: I3040ed7cce446fc66facaee9c67cb54a8cd7ca29

9 years agoPSCI: Migrate TF to the new platform API and CM helpers
Soby Mathew [Mon, 13 Jul 2015 10:21:11 +0000 (11:21 +0100)]
PSCI: Migrate TF to the new platform API and CM helpers

This patch migrates the rest of Trusted Firmware excluding Secure Payload and
the dispatchers to the new platform and context management API. The per-cpu
data framework APIs which took MPIDRs as their arguments are deleted and only
the ones which take core index as parameter are retained.

Change-Id: I839d05ad995df34d2163a1cfed6baa768a5a595d

9 years agoPSCI: Add deprecated API for SPD when compatibility is disabled
Soby Mathew [Mon, 13 Jul 2015 15:26:11 +0000 (16:26 +0100)]
PSCI: Add deprecated API for SPD when compatibility is disabled

This patch defines deprecated platform APIs to enable Trusted
Firmware components like Secure Payload and their dispatchers(SPD)
to continue to build and run when platform compatibility is disabled.
This decouples the migration of platform ports to the new platform API
from SPD and enables them to be migrated independently. The deprecated
platform APIs defined in this patch are : platform_get_core_pos(),
platform_get_stack() and platform_set_stack().

The patch also deprecates MPIDR based context management helpers like
cm_get_context_by_mpidr(), cm_set_context_by_mpidr() and cm_init_context().
A mechanism to deprecate APIs and identify callers of these APIs during
build is introduced, which is controlled by the build flag WARN_DEPRECATED.
If WARN_DEPRECATED is defined to 1, the users of the deprecated APIs will be
flagged either as a link error for assembly files or compile time warning
for C files during build.

Change-Id: Ib72c7d5dc956e1a74d2294a939205b200f055613

9 years agoPSCI: Switch to the new PSCI frameworks
Soby Mathew [Mon, 13 Jul 2015 13:10:57 +0000 (14:10 +0100)]
PSCI: Switch to the new PSCI frameworks

This commit does the switch to the new PSCI framework implementation replacing
the existing files in PSCI folder with the ones in PSCI1.0 folder. The
corresponding makefiles are modified as required for the new implementation.
The platform.h header file is also is switched to the new one
as required by the new frameworks. The build flag ENABLE_PLAT_COMPAT defaults
to 1 to enable compatibility layer which let the existing platform ports to
continue to build and run with minimal changes.

The default weak implementation of platform_get_core_pos() is now removed from
platform_helpers.S and is provided by the compatibility layer.

Note: The Secure Payloads and their dispatchers still use the old platform
and framework APIs and hence it is expected that the ENABLE_PLAT_COMPAT build
flag will remain enabled in subsequent patch. The compatibility for SPDs using
the older APIs on platforms migrated to the new APIs will be added in the
following patch.

Change-Id: I18c51b3a085b564aa05fdd98d11c9f3335712719

9 years agoPSCI: Implement platform compatibility layer
Soby Mathew [Wed, 10 Jun 2015 12:49:59 +0000 (13:49 +0100)]
PSCI: Implement platform compatibility layer

The new PSCI topology framework and PSCI extended State framework introduces
a breaking change in the platform port APIs. To ease the migration of the
platform ports to the new porting interface, a compatibility layer is
introduced which essentially defines the new platform API in terms of the
old API. The old PSCI helpers to retrieve the power-state, its associated
fields and the highest coordinated physical OFF affinity level of a core
are also implemented for compatibility. This allows the existing
platform ports to work with the new PSCI framework without significant
rework. This layer will be enabled by default once the switch to the new
PSCI framework is done and is controlled by the build flag ENABLE_PLAT_COMPAT.

Change-Id: I4b17cac3a4f3375910a36dba6b03d8f1700d07e3

9 years agoPSCI: Unify warm reset entry points
Sandrine Bailleux [Thu, 11 Jun 2015 09:46:48 +0000 (10:46 +0100)]
PSCI: Unify warm reset entry points

There used to be 2 warm reset entry points:

 - the "on finisher", for when the core has been turned on using a
   PSCI CPU_ON call;

 - the "suspend finisher", entered upon resumption from a previous
   PSCI CPU_SUSPEND call.

The appropriate warm reset entry point used to be programmed into the
mailboxes by the power management hooks.

However, it is not required to provide this information to the PSCI
entry point code, as it can figure it out by itself. By querying affinity
info state, a core is able to determine on which execution path it is.
If the state is ON_PENDING then it means it's been turned on else
it is resuming from suspend.

This patch unifies the 2 warm reset entry points into a single one:
psci_entrypoint(). The patch also implements the necessary logic
to distinguish between the 2 types of warm resets in the power up
finisher.

The plat_setup_psci_ops() API now takes the
secure entry point as an additional parameter to enable the platforms
to configure their mailbox. The platform hooks `pwr_domain_on`
and `pwr_domain_suspend` no longer take secure entry point as
a parameter.

Change-Id: I7d1c93787b54213aefdbc046b8cd66a555dfbfd9

9 years agoPSCI: Add framework to handle composite power states
Soby Mathew [Tue, 7 Apr 2015 11:16:56 +0000 (12:16 +0100)]
PSCI: Add framework to handle composite power states

The state-id field in the power-state parameter of a CPU_SUSPEND call can be
used to describe composite power states specific to a platform. The current PSCI
implementation does not interpret the state-id field. It relies on the target
power level and the state type fields in the power-state parameter to perform
state coordination and power management operations. The framework introduced
in this patch allows the PSCI implementation to intepret generic global states
like RUN, RETENTION or OFF from the State-ID to make global state coordination
decisions and reduce the complexity of platform ports. It adds support to
involve the platform in state coordination which facilitates the use of
composite power states and improves the support for entering standby states
at multiple power domains.

The patch also includes support for extended state-id format for the power
state parameter as specified by PSCIv1.0.

The PSCI implementation now defines a generic representation of the power-state
parameter. It depends on the platform port to convert the power-state parameter
(possibly encoding a composite power state) passed in a CPU_SUSPEND call to this
representation via the `validate_power_state()` plat_psci_ops handler. It is an
array where each index corresponds to a power level. Each entry contains the
local power state the power domain at that power level could enter.

The meaning of the local power state values is platform defined, and may vary
between levels in a single platform. The PSCI implementation constrains the
values only so that it can classify the state as RUN, RETENTION or OFF as
required by the specification:
   * zero means RUN
   * all OFF state values at all levels must be higher than all RETENTION
     state values at all levels
   * the platform provides PLAT_MAX_RET_STATE and PLAT_MAX_OFF_STATE values
     to the framework

The platform also must define the macros PLAT_MAX_RET_STATE and
PLAT_MAX_OFF_STATE which lets the PSCI implementation find out which power
domains have been requested to enter a retention or power down state. The PSCI
implementation does not interpret the local power states defined by the
platform. The only constraint is that the PLAT_MAX_RET_STATE <
PLAT_MAX_OFF_STATE.

For a power domain tree, the generic implementation maintains an array of local
power states. These are the states requested for each power domain by all the
cores contained within the domain. During a request to place multiple power
domains in a low power state, the platform is passed an array of requested
power-states for each power domain through the plat_get_target_pwr_state()
API. It coordinates amongst these states to determine a target local power
state for the power domain. A default weak implementation of this API is
provided in the platform layer which returns the minimum of the requested
power-states back to the PSCI state coordination.

Finally, the plat_psci_ops power management handlers are passed the target
local power states for each affected power domain using the generic
representation described above. The platform executes operations specific to
these target states.

The platform power management handler for placing a power domain in a standby
state (plat_pm_ops_t.pwr_domain_standby()) is now only used as a fast path for
placing a core power domain into a standby or retention state should now be
used to only place the core power domain in a standby or retention state.

The extended state-id power state format can be enabled by setting the
build flag PSCI_EXTENDED_STATE_ID=1 and it is disabled by default.

Change-Id: I9d4123d97e179529802c1f589baaa4101759d80c

9 years agoPSCI: Introduce new platform interface to describe topology
Soby Mathew [Wed, 8 Apr 2015 16:42:06 +0000 (17:42 +0100)]
PSCI: Introduce new platform interface to describe topology

This patch removes the assumption in the current PSCI implementation that MPIDR
based affinity levels map directly to levels in a power domain tree. This
enables PSCI generic code to support complex power domain topologies as
envisaged by PSCIv1.0 specification. The platform interface for querying
the power domain topology has been changed such that:

1. The generic PSCI code does not generate MPIDRs and use them to query the
   platform about the number of power domains at a particular power level. The
   platform now provides a description of the power domain tree on the SoC
   through a data structure. The existing platform APIs to provide the same
   information have been removed.

2. The linear indices returned by plat_core_pos_by_mpidr() and
   plat_my_core_pos() are used to retrieve core power domain nodes from the
   power domain tree. Power domains above the core level are accessed using a
   'parent' field in the tree node descriptors.

The platform describes the power domain tree in an array of 'unsigned
char's. The first entry in the array specifies the number of power domains at
the highest power level implemented in the system. Each susbsequent entry
corresponds to a power domain and contains the number of power domains that are
its direct children. This array is exported to the generic PSCI implementation
via the new `plat_get_power_domain_tree_desc()` platform API.

The PSCI generic code uses this array to populate its internal power domain tree
using the Breadth First Search like algorithm. The tree is split into two
arrays:

1. An array that contains all the core power domain nodes

2. An array that contains all the other power domain nodes

A separate array for core nodes allows certain core specific optimisations to
be implemented e.g. remove the bakery lock, re-use per-cpu data framework for
storing some information.

Entries in the core power domain array are allocated such that the
array index of the domain is equal to the linear index returned by
plat_core_pos_by_mpidr() and plat_my_core_pos() for the MPIDR
corresponding to that domain. This relationship is key to be able to use
an MPIDR to find the corresponding core power domain node, traverse to higher
power domain nodes and index into arrays that contain core specific
information.

An introductory document has been added to briefly describe the new interface.

Change-Id: I4b444719e8e927ba391cae48a23558308447da13

9 years agoPSCI: Introduce new platform and CM helper APIs
Soby Mathew [Thu, 9 Apr 2015 12:40:55 +0000 (13:40 +0100)]
PSCI: Introduce new platform and CM helper APIs

This patch introduces new platform APIs and context management helper APIs
to support the new topology framework based on linear core position. This
framework will be introduced in the follwoing patch and it removes the
assumption that the MPIDR based affinity levels map directly to levels
in a power domain tree. The new platforms APIs and context management
helpers based on core position are as described below:

* plat_my_core_pos() and plat_core_pos_by_mpidr()

These 2 new mandatory platform APIs are meant to replace the existing
'platform_get_core_pos()' API. The 'plat_my_core_pos()' API returns the
linear index of the calling core and 'plat_core_pos_by_mpidr()' returns
the linear index of a core specified by its MPIDR. The latter API will also
validate the MPIDR passed as an argument and will return an error code (-1)
if an invalid MPIDR is passed as the argument. This enables the caller to
safely convert an MPIDR of another core to its linear index without querying
the PSCI topology tree e.g. during a call to PSCI CPU_ON.

Since the 'plat_core_pos_by_mpidr()' API verifies an MPIDR, which is always
platform specific, it is no longer possible to maintain a default implementation
of this API. Also it might not be possible for a platform port to verify an
MPIDR before the C runtime has been setup or the topology has been initialized.
This would prevent 'plat_core_pos_by_mpidr()' from being callable prior to
topology setup. As a result, the generic Trusted Firmware code does not call
this API before the topology setup has been done.

The 'plat_my_core_pos' API should be able to run without a C runtime.
Since this API needs to return a core position which is equal to the one
returned by 'plat_core_pos_by_mpidr()' API for the corresponding MPIDR,
this too cannot have default implementation and is a mandatory API for
platform ports. These APIs will be implemented by the ARM reference platform
ports later in the patch stack.

* plat_get_my_stack() and plat_set_my_stack()

These APIs are the stack management APIs which set/return stack addresses
appropriate for the calling core. These replace the 'platform_get_stack()' and
'platform_set_stack()' APIs. A default weak MP version and a global UP version
of these APIs are provided for the platforms.

* Context management helpers based on linear core position

A set of new context management(CM) helpers viz cm_get_context_by_index(),
cm_set_context_by_index(), cm_init_my_context() and cm_init_context_by_index()
are defined which are meant to replace the old helpers which took MPIDR
as argument. The old CM helpers are implemented based on the new helpers to
allow for code consolidation and will be deprecated once the switch to the new
framework is done.

Change-Id: I89758632b370c2812973a4b2efdd9b81a41f9b69

9 years agoMerge pull request #360 from vwadekar/tegra-platform-def-v2
danh-arm [Wed, 12 Aug 2015 08:54:25 +0000 (09:54 +0100)]
Merge pull request #360 from vwadekar/tegra-platform-def-v2

Tegra: fix PLATFORM_{MAX_AFFLVL|CORE_COUNT|NUM_AFFS} macros

9 years agoMerge pull request #357 from vwadekar/tegra-bl31-memmap-fix
danh-arm [Wed, 12 Aug 2015 08:40:35 +0000 (09:40 +0100)]
Merge pull request #357 from vwadekar/tegra-bl31-memmap-fix

Tegra: memmap the actual memory available for BL31

9 years agoTegra: fix PLATFORM_{CORE_COUNT|NUM_AFFS} macros
Varun Wadekar [Wed, 12 Aug 2015 03:54:50 +0000 (09:24 +0530)]
Tegra: fix PLATFORM_{CORE_COUNT|NUM_AFFS} macros

This patch fixes the following macros for Tegra SoCs.

* PLATFORM_CORE_COUNT: PLATFORM_CLUSTER_COUNT * PLATFORM_MAX_CPUS_PER_CLUSTER
* PLATFORM_NUM_AFFS: PLATFORM_CORE_COUNT + PLATFORM_CLUSTER_COUNT + 1

Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
9 years agoMerge pull request #356 from mtk09422/mt8173-support-v3
danh-arm [Tue, 11 Aug 2015 09:08:55 +0000 (10:08 +0100)]
Merge pull request #356 from mtk09422/mt8173-support-v3

Mt8173 support v3

9 years agoTegra: memmap the actual memory available for BL31
Varun Wadekar [Tue, 11 Aug 2015 08:50:14 +0000 (14:20 +0530)]
Tegra: memmap the actual memory available for BL31

On Tegra SoCs, the TZDRAM contains the BL31 and BL32 images. This patch
uses only the actual memory available for BL31 instead of mapping the
entire TZDRAM.

Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
9 years agoInitial platform port for MediaTek mt8173
CC Ma [Mon, 13 Apr 2015 06:47:57 +0000 (14:47 +0800)]
Initial platform port for MediaTek mt8173

- Boot up 4 cores.
- Add a generic UART driver.
- Add generic CPU helper functions
- Supoort suspend
- Add system_off & system_reset implementation
- Add crash console reporting implementation
- Add get_sys_suspend_power_state() for PSCI 1.0 SYSTEM_SUSPEND
- Add Mediatek SIP runtime service
- Add delay timer platform implementation

Change-Id: I44138249f115ee10b9cbd26fdbc2dd3af04d825f
Signed-off-by: CC Ma <cc.ma@mediatek.com>
Signed-off-by: Jimmy Huang <jimmy.huang@mediatek.com>
9 years agoPSCI: Remove references to affinity based power management
Soby Mathew [Tue, 5 May 2015 15:33:16 +0000 (16:33 +0100)]
PSCI: Remove references to affinity based power management

As per Section 4.2.2. in the PSCI specification, the term "affinity"
is used in the context of describing the hierarchical arrangement
of cores. This often, but not always, maps directly to the processor
power domain topology of the system. The current PSCI implementation
assumes that this is always the case i.e. MPIDR based levels of
affinity always map to levels in a power domain topology tree.

This patch is the first in a series of patches which remove this
assumption. It removes all occurences of the terms "affinity
instances and levels" when used to describe the power domain
topology. Only the terminology is changed in this patch. Subsequent
patches will implement functional changes to remove the above
mentioned assumption.

Change-Id: Iee162f051b228828310610c5a320ff9d31009b4e

9 years agoPSCI: Invoke PM hooks only for the highest level
Soby Mathew [Tue, 30 Jun 2015 10:00:24 +0000 (11:00 +0100)]
PSCI: Invoke PM hooks only for the highest level

This patch optimizes the invocation of the platform power management hooks for
ON, OFF and SUSPEND such that they are called only for the highest affinity
level which will be powered off/on. Earlier, the hooks were being invoked for
all the intermediate levels as well.

This patch requires that the platforms migrate to the new semantics of the PM
hooks.  It also removes the `state` parameter from the pm hooks as the `afflvl`
parameter now indicates the highest affinity level for which power management
operations are required.

Change-Id: I57c87931d8a2723aeade14acc710e5b78ac41732

9 years agoPSCI: Create new directory to implement new frameworks
Soby Mathew [Mon, 29 Jun 2015 15:30:12 +0000 (16:30 +0100)]
PSCI: Create new directory to implement new frameworks

This patch creates a copy of the existing PSCI files and related psci.h and
platform.h header files in a new `PSCI1.0` directory. The changes for the
new PSCI power domain topology and extended state-ID frameworks will be
added incrementally to these files. This incremental approach will
aid in review and in understanding the changes better. Once all the
changes have been introduced, these files will replace the existing PSCI
files.

Change-Id: Ibb8a52e265daa4204e34829ed050bddd7e3316ff

9 years agocortex_a53: Add A53 errata #826319, #836870
Jimmy Huang [Wed, 29 Jul 2015 12:55:31 +0000 (20:55 +0800)]
cortex_a53: Add A53 errata #826319, #836870

- Apply a53 errata #826319 to revision <= r0p2
- Apply a53 errata #836870 to revision <= r0p3
- Update docs/cpu-specific-build-macros.md for newly added errata build flags

Change-Id: I44918e36b47dca1fa29695b68700ff9bf888865e
Signed-off-by: Jimmy Huang <jimmy.huang@mediatek.com>
9 years agoAdd mmio utility functions
Jimmy Huang [Fri, 31 Jul 2015 05:48:22 +0000 (13:48 +0800)]
Add mmio utility functions

- Add mmio 16 bits read/write functions.
- Add clear/set/clear-and-set utility functions.

Change-Id: I00fdbdf24af537424f8666b1cadaa5f77a2a46ed
Signed-off-by: Jimmy Huang <jimmy.huang@mediatek.com>
9 years agoFix build error with optimizations disabled (-O0)
Juan Castillo [Tue, 4 Aug 2015 13:31:27 +0000 (14:31 +0100)]
Fix build error with optimizations disabled (-O0)

If Trusted Firmware is built with optimizations disabled (-O0), the
linker throws the following error:

    undefined reference to 'xxx'

Where 'xxx' is a raw inline function defined in a header file. The
reason is that, with optimizations disabled, GCC may decide to skip
the inlining. If that is the case, an external definition to the
compilation unit must be provided. Because no external definition
is present, the linker throws the error.

This patch fixes the problem by declaring the following inline
functions static, so the internal definition is used:

    inline void soc_css_security_setup(void)
    inline const arm_config_t *get_arm_config(void)

Change-Id: Id650d6be1b1396bdb48af1ac8a4c7900d212e95f

9 years agoMerge pull request #351 from davwan01/davwan01/docs-update
danh-arm [Tue, 4 Aug 2015 08:13:53 +0000 (09:13 +0100)]
Merge pull request #351 from davwan01/davwan01/docs-update

Some minor fixes to interrupt-framework-design.md

9 years agoMerge pull request #349 from jcastillo-arm/jc/tbb_cert_opt
danh-arm [Tue, 4 Aug 2015 08:07:37 +0000 (09:07 +0100)]
Merge pull request #349 from jcastillo-arm/jc/tbb_cert_opt

TBB: rework cert_create tool to follow a data driven approach

9 years agoMerge pull request #348 from vwadekar/bootargs-tzdram-base-v2
danh-arm [Tue, 4 Aug 2015 08:05:59 +0000 (09:05 +0100)]
Merge pull request #348 from vwadekar/bootargs-tzdram-base-v2

Bootargs tzdram base v2

9 years agoSome minor fixes to interrupt-framework-design.md
David Wang [Wed, 29 Jul 2015 03:42:10 +0000 (11:42 +0800)]
Some minor fixes to interrupt-framework-design.md

This patch fixes a pair of typos. The security state had been described
as non-secure where it should have been secure.

Change-Id: Ib3f424708a6b8e2084e5447f8507ea4e9c99ee79

9 years agodocs: fix the command to compile BL31 on Tegra
Varun Wadekar [Sat, 1 Aug 2015 05:44:32 +0000 (11:14 +0530)]
docs: fix the command to compile BL31 on Tegra

This patch fixes the command line used to compile BL31 on
Tegra platforms.

Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
9 years agoTegra132: set TZDRAM_BASE to 0xF5C00000
Varun Wadekar [Fri, 31 Jul 2015 04:45:41 +0000 (10:15 +0530)]
Tegra132: set TZDRAM_BASE to 0xF5C00000

The TZDRAM base on the reference platform has been bumped up due to
some BL2 memory cleanup. Platforms can also use a different TZDRAM
base by setting TZDRAM_BASE=<value> in the build command line.

Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
9 years agoTegra: retrieve BL32's bootargs from bl32_ep_info
Varun Wadekar [Fri, 31 Jul 2015 04:33:01 +0000 (10:03 +0530)]
Tegra: retrieve BL32's bootargs from bl32_ep_info

This patch removes the bootargs pointer from the platform params
structure. Instead the bootargs are passed by the BL2 in the
bl32_ep_info struct which is a part of the EL3 params struct.

Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
9 years agoMerge pull request #344 from vwadekar/tegra-mselect-restore-v2
danh-arm [Tue, 28 Jul 2015 14:14:42 +0000 (15:14 +0100)]
Merge pull request #344 from vwadekar/tegra-mselect-restore-v2

Tegra210: enable WRAP to INCR burst type conversions

9 years agoTegra210: enable WRAP to INCR burst type conversions
Varun Wadekar [Mon, 27 Jul 2015 07:30:50 +0000 (13:00 +0530)]
Tegra210: enable WRAP to INCR burst type conversions

The Memory Select Switch Controller routes any CPU transactions to
the appropriate slave depending on the transaction address. During
system suspend, it loses all config settings and hence the CPU has
to restore them during resume.

This patch restores the controller's settings for enabling WRAP to
INCR burst type conversions on the master ports, for any incoming
requests from the AXI slave ports.

Tested by performing multiple system suspend cycles.

Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
9 years agoMerge pull request #342 from vwadekar/tlkd-delete-need-bl32-v1
danh-arm [Fri, 24 Jul 2015 15:17:17 +0000 (16:17 +0100)]
Merge pull request #342 from vwadekar/tlkd-delete-need-bl32-v1

tlkd: delete 'NEED_BL32' build variable

9 years agotlkd: delete 'NEED_BL32' build variable
Varun Wadekar [Fri, 24 Jul 2015 12:30:33 +0000 (18:00 +0530)]
tlkd: delete 'NEED_BL32' build variable

Remove the 'NEED_BL32' flag from the makefile. TLK compiles using a
completely different build system and is present on the device as a
binary blob. The NEED_BL32 flag does not influence the TLK load/boot
sequence at all. Moreover, it expects that TLK binary be present on
the host before we can compile BL31 support for Tegra.

This patch removes the flag from the makefile and thus decouples both
the build systems.

Tested by booting TLK without the NEED_BL32 flag.

Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
9 years agoMerge pull request #341 from vwadekar/tegra-denver-plat-support-v3
danh-arm [Fri, 24 Jul 2015 09:40:18 +0000 (10:40 +0100)]
Merge pull request #341 from vwadekar/tegra-denver-plat-support-v3

Tegra denver plat support v3

9 years agoTegra: modify 'BUILD_PLAT' to point to soc specific build dirs
Varun Wadekar [Tue, 21 Jul 2015 04:46:13 +0000 (10:16 +0530)]
Tegra: modify 'BUILD_PLAT' to point to soc specific build dirs

This patch modifies the 'BUILD_PLAT' makefile variable to point to the soc
specific build directory in order to allow each Tegra soc to have its own
build directory. This way we can keep the build outputs separate and can
keep multiple soc specific builds alive at the same time.

Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
9 years agoTegra: Support for Tegra's T132 platforms
Varun Wadekar [Thu, 16 Jul 2015 06:06:33 +0000 (11:36 +0530)]
Tegra: Support for Tegra's T132 platforms

This patch implements support for T132 (Denver CPU) based Tegra
platforms.

The following features have been added:

* SiP calls to switch T132 CPU's AARCH mode
* Complete PSCI support, including 'System Suspend'
* Platform specific MMIO settings
* Locking of CPU vector registers

Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
9 years agoAdd "Project Denver" CPU support
Varun Wadekar [Tue, 14 Jul 2015 11:41:20 +0000 (17:11 +0530)]
Add "Project Denver" CPU support

Denver is NVIDIA's own custom-designed, 64-bit, dual-core CPU which is
fully ARMv8 architecture compatible.  Each of the two Denver cores
implements a 7-way superscalar microarchitecture (up to 7 concurrent
micro-ops can be executed per clock), and includes a 128KB 4-way L1
instruction cache, a 64KB 4-way L1 data cache, and a 2MB 16-way L2
cache, which services both cores.

Denver implements an innovative process called Dynamic Code Optimization,
which optimizes frequently used software routines at runtime into dense,
highly tuned microcode-equivalent routines. These are stored in a
dedicated, 128MB main-memory-based optimization cache. After being read
into the instruction cache, the optimized micro-ops are executed,
re-fetched and executed from the instruction cache as long as needed and
capacity allows.

Effectively, this reduces the need to re-optimize the software routines.
Instead of using hardware to extract the instruction-level parallelism
(ILP) inherent in the code, Denver extracts the ILP once via software
techniques, and then executes those routines repeatedly, thus amortizing
the cost of ILP extraction over the many execution instances.

Denver also features new low latency power-state transitions, in addition
to extensive power-gating and dynamic voltage and clock scaling based on
workloads.

Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
9 years agoTegra: implement per-SoC validate_power_state() handler
Varun Wadekar [Thu, 23 Jul 2015 04:37:54 +0000 (10:07 +0530)]
Tegra: implement per-SoC validate_power_state() handler

The validate_power_state() handler checks the power_state for a valid afflvl
and state id. Although the afflvl check is common, the state ids are implementation
defined.

This patch moves the handler to the tegra/soc folder to allow each SoC to validate
the power_state for supported parameters.

Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
9 years agoTegra: T210: include CPU files from SoC's platform.mk
Varun Wadekar [Tue, 21 Jul 2015 06:23:35 +0000 (11:53 +0530)]
Tegra: T210: include CPU files from SoC's platform.mk

This patch moves the inclusion of CPU code (A53, A57) to T210's
makefile. This way we can reduce code size for Tegra platforms by
including only the required CPU files.

Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
9 years agoMerge pull request #337 from vwadekar/tegra-misc-fixes-v3
danh-arm [Fri, 17 Jul 2015 13:48:14 +0000 (14:48 +0100)]
Merge pull request #337 from vwadekar/tegra-misc-fixes-v3

Tegra misc fixes v3

9 years agoTegra: Introduce config for enabling NS access to L2/CPUECTRL regs
Varun Wadekar [Thu, 16 Jul 2015 04:16:28 +0000 (09:46 +0530)]
Tegra: Introduce config for enabling NS access to L2/CPUECTRL regs

A new config, ENABLE_NS_L2_CPUECTRL_RW_ACCESS, allows Tegra platforms to
enable read/write access to the L2 and CPUECTRL registers. T210 is the
only platform that needs to enable this config for now.

Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
9 years agoTegra210: lock PMC registers holding CPU vector addresses
Varun Wadekar [Thu, 16 Jul 2015 06:28:19 +0000 (11:58 +0530)]
Tegra210: lock PMC registers holding CPU vector addresses

This patch locks access to the PMC registers which hold the CPU reset
vector addresses. The PMC registers are used by the warmboot code and
must be locked during boot/resume to avoid booting into custom firmware
installed by unknown parties e.g. hackers.

Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
9 years agoTegra: PMC: lock SCRATCH22 register
Varun Wadekar [Thu, 16 Jul 2015 05:08:11 +0000 (10:38 +0530)]
Tegra: PMC: lock SCRATCH22 register

The PMC Scratch22 register contains the CPU reset vector to
be used by the warmboot code to power up the CPU while resuming
from  system suspend. This patch locks this PMC register to avoid
any further writes.

Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
9 years agoTegra: PMC: check if a CPU is already online
Varun Wadekar [Thu, 16 Jul 2015 05:05:12 +0000 (10:35 +0530)]
Tegra: PMC: check if a CPU is already online

This patch checks if the target CPU is already online before
proceeding with it's power ON sequence.

Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
9 years agoTegra210: deassert CPU reset signals during power on
Varun Wadekar [Wed, 8 Jul 2015 12:12:02 +0000 (17:42 +0530)]
Tegra210: deassert CPU reset signals during power on

This patch de-asserts the CPU reset signals for each CPU as
part of it's power on sequence. This is needed to get rid of
the wait in BPMP firmware during SC7 exit.

Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
9 years agoTegra: Fix the delay loop used during SC7 exit
Varun Wadekar [Wed, 8 Jul 2015 08:16:42 +0000 (13:46 +0530)]
Tegra: Fix the delay loop used during SC7 exit

This patch fixes the delay loop used to wake up the BPMP during SC7 exit.
The earlier loop would fail just when the timer was about to wrap-around
(e.g. when TEGRA_TMRUS_BASE is 0xfffffffe, the target value becomes 0,
which would cause the loop to exit before it's expiry).

Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
9 years agoTegra: introduce delay timer support
Varun Wadekar [Thu, 16 Jul 2015 10:17:03 +0000 (15:47 +0530)]
Tegra: introduce delay timer support

This patch introduces the backend required for implementing the delay
timer API. Tegra has an on-chip free flowing us timer which can be
used as the delay timer.

Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
9 years agoMerge pull request #336 from danh-arm/sb/move-user-guide-to-linaro-release
danh-arm [Fri, 17 Jul 2015 13:01:32 +0000 (14:01 +0100)]
Merge pull request #336 from danh-arm/sb/move-user-guide-to-linaro-release

Update user guide to use Linaro releases

9 years agoMerge pull request #335 from jcastillo-arm/jc/sh_write
danh-arm [Fri, 17 Jul 2015 09:16:51 +0000 (10:16 +0100)]
Merge pull request #335 from jcastillo-arm/jc/sh_write

Fix bug in semihosting write function