summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2015-10-07Merge pull request #402 from soby-mathew/sm/psci_cpu_offdanh-arm
PSCI: Update state only if CPU_OFF is not denied by SPD
2015-10-06PSCI: Update state only if CPU_OFF is not denied by SPDSoby Mathew
This patch fixes an issue in the PSCI framework where the affinity info state of a core was being set to OFF even when the SPD had denied the CPU_OFF request. Now, the state remains set to ON instead. Fixes ARM-software/tf-issues#323 Change-Id: Ia9042aa41fae574eaa07fd2ce3f50cf8cae1b6fc
2015-09-30Merge pull request #401 from sandrine-bailleux/sb/fix-sp804-bug-v2danh-arm
Bug fix in the SP804 dual timer driver
2015-09-30Merge pull request #400 from vwadekar/tlkd-pm-handlers-v5Achin Gupta
Send power management events to the Trusted OS (TLK)
2015-09-30Merge pull request #393 from mtk09422/misc-updatesdanh-arm
mt8173: Update SPM and fix watchdog setting
2015-09-30Send power management events to the Trusted OS (TLK)Varun Wadekar
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>
2015-09-28Bug fix in the SP804 dual timer driverSandrine Bailleux
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
2015-09-28Merge pull request #398 from achingupta/vk/fix_bakery_lock_sizeAchin Gupta
Fix relocation of __PERCPU_BAKERY_LOCK_SIZE__ in PR #390
2015-09-25Fix relocation of __PERCPU_BAKERY_LOCK_SIZE__Vikram Kanigiri
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
2015-09-22Merge pull request #394 from achingupta/ag/ccn_driverAchin Gupta
Support for ARM CoreLink CCN interconnects
2015-09-14Add a generic driver for ARM CCN IPAchin Gupta
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
2015-09-14Tegra: Perform cache maintenance on video carveout memoryVikram Kanigiri
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
2015-09-14Make generic code work in presence of system cachesAchin Gupta
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
2015-09-14Merge pull request #390 from vikramkanigiri/at/unify_bakery_locks_v2Achin Gupta
Re-design bakery lock allocation and algorithm
2015-09-14Merge pull request #389 from vikramkanigiri/vk/css_reworkAchin Gupta
Add more configurability options in ARM platform port code
2015-09-14mt8173: fix watchdog register settingJimmy Huang
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>
2015-09-14mt8173: update spm suspend pcm codesyt.lee
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>
2015-09-11Use unified bakery locks API in Mediatek portVikram Kanigiri
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
2015-09-11Update ARM platform ports to use new bakery lock apis.Vikram Kanigiri
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
2015-09-11Re-design bakery lock memory allocation and algorithmAndrew Thoelke
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
2015-09-11Merge pull request #388 from achingupta/ag/spd_suspend_levels_v3Achin Gupta
Pass the target suspend level to SPD suspend hooks
2015-09-11Separate CSS security setup from SOC security setupVikram Kanigiri
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
2015-09-11Define the Non-Secure timer frame ID for ARM platformsVikram Kanigiri
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
2015-09-11Re-factor definition of TZC-400 base addressVikram Kanigiri
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
2015-09-10Pass the target suspend level to SPD suspend hooksAchin Gupta
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
2015-09-02Merge pull request #383 from vikramkanigiri/vk/tf-issues-314-v1danh-arm
Ensure BL2 security state is secure
2015-09-02Ensure BL2 security state is secureVikram Kanigiri
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
2015-09-02Merge pull request #382 from vikramkanigiri/vk/tf-issues-312danh-arm
Configure all secure interrupts on ARM platforms
2015-09-02Merge pull request #381 from vikramkanigiri/hl/gic_v3danh-arm
Remove EL2/EL1 GICv3 register updates
2015-09-01Configure all secure interrupts on ARM platformsVikram Kanigiri
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
2015-09-01Remove EL2/EL1 GICv3 register updatesVikram Kanigiri
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
2015-09-01Merge pull request #375 from vwadekar/clear-videomem-region-v2danh-arm
Tegra: fix logic to clear videomem regions
2015-08-26Tegra: fix logic to clear videomem regionsVarun Wadekar
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>
2015-08-25Merge pull request #371 from vwadekar/retention-entry-v3Achin Gupta
Retention entry v3
2015-08-24Tegra210: wait for 512 timer ticks before retention entryVarun Wadekar
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>
2015-08-24Add macros for retention control in Cortex-A53/A57Varun Wadekar
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>
2015-08-21Merge pull request #368 from jcastillo-arm/jc/genfw/1126danh-arm
TBB: abort boot if BL3-2 cannot be authenticated
2015-08-20Merge pull request #367 from soby-mathew/sm/mig_guide_fixdanh-arm
docs: Fixes to platform-migration-guide.md
2015-08-20TBB: abort boot if BL3-2 cannot be authenticatedJuan Castillo
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
2015-08-18docs: Fixes to platform-migration-guide.mdSoby Mathew
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
2015-08-18Merge pull request #365 from mtk09422/plat_topologydanh-arm
mt8173: Fix cluster 0 core count
2015-08-18Merge pull request #364 from mtk09422/spm_suspenddanh-arm
mt8173: update spm wake_src setting
2015-08-18Merge pull request #362 from jcastillo-arm/jc/inlinedanh-arm
Fix build error with optimizations disabled (-O0)
2015-08-18mt8173: Fix cluster 0 core countJimmy Huang
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>
2015-08-18mt8173: update spm wake_src settingkenny liang
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>
2015-08-17Merge pull request #361 from achingupta/for_sm/psci_proto_v5Achin Gupta
For sm/psci proto v5
2015-08-13PSCI: Rework generic code to conform to coding guidelinesSoby Mathew
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
2015-08-13PSCI: Add documentation and fix plat_is_my_cpu_primary()Soby Mathew
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
2015-08-13PSCI: Validate non secure entrypoint on ARM platformsSoby Mathew
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
2015-08-13PSCI: Fix the return code for invalid entrypointSoby Mathew
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