project/bcm63xx/atf.git
7 years agoAArch32: Enable override of plat_set_my_stack/plat_get_my_stack
Soby Mathew [Tue, 14 Feb 2017 10:21:55 +0000 (10:21 +0000)]
AArch32: Enable override of plat_set_my_stack/plat_get_my_stack

This patch makes the default MP definitions of plat_get_my_stack()
and plat_set_my_stack() as weak so that they can be overridden by
the AArch32 Secure Payload if it requires.

Change-Id: I3b6ddff5750443a776505e3023ff2934227592b6
Signed-off-by: Soby Mathew <soby.mathew@arm.com>
7 years agoAArch32: Fix conditional inclusion of bakery_locks
Soby Mathew [Tue, 28 Feb 2017 22:58:29 +0000 (22:58 +0000)]
AArch32: Fix conditional inclusion of bakery_locks

Due to incorrect conditional compilation checks, bakery locks were
excluded from the CCN driver and the power controller driver for FVP
when BL32 was built as the EL3 Runtime Software in AArch32 mode.
This patch corrects the same.

Change-Id: Ib1f163d9167a5c38e4d622232c4835cad9c235aa
Signed-off-by: Soby Mathew <soby.mathew@arm.com>
7 years agoAArch32: Fix normal memory bakery compilation
Soby Mathew [Tue, 14 Feb 2017 10:16:18 +0000 (10:16 +0000)]
AArch32: Fix normal memory bakery compilation

This patch fixes a compilation issue with bakery locks when
PSCI library is compiled with USE_COHERENT_MEM = 0 build option.

Change-Id: Ic7f6cf9f2bb37f8a946eafbee9cbc3bf0dc7e900
Signed-off-by: Soby Mathew <soby.mathew@arm.com>
7 years agoMerge pull request #851 from jeenu-arm/assert-fix
danh-arm [Tue, 28 Feb 2017 12:07:55 +0000 (12:07 +0000)]
Merge pull request #851 from jeenu-arm/assert-fix

Remove redundant assert

7 years agoMerge pull request #848 from douglas-raillard-arm/dr/improve_errata_doc
danh-arm [Tue, 28 Feb 2017 12:07:32 +0000 (12:07 +0000)]
Merge pull request #848 from douglas-raillard-arm/dr/improve_errata_doc

Clarify errata ERRATA_A53_836870 documentation

7 years agoMerge pull request #847 from douglas-raillard-arm/dr/fix_abort_smc
danh-arm [Tue, 28 Feb 2017 12:06:54 +0000 (12:06 +0000)]
Merge pull request #847 from douglas-raillard-arm/dr/fix_abort_smc

Fix TSPD implementation of STD SMC ABORT

7 years agoMerge pull request #837 from douglas-raillard-arm/dr/fix_tools_cflags
danh-arm [Tue, 28 Feb 2017 11:58:12 +0000 (11:58 +0000)]
Merge pull request #837 from douglas-raillard-arm/dr/fix_tools_cflags

build: Use separate CFLAGS for tools

7 years agoMerge pull request #835 from rockchip-linux/rk3399-atf-cleanup-20170210
davidcunado-arm [Mon, 27 Feb 2017 15:25:45 +0000 (15:25 +0000)]
Merge pull request #835 from rockchip-linux/rk3399-atf-cleanup-20170210

RK3399 ARM TF clean up 20170210

7 years agoMerge pull request #849 from vwadekar/tegra-changes-from-downstream-v2
davidcunado-arm [Mon, 27 Feb 2017 14:41:24 +0000 (14:41 +0000)]
Merge pull request #849 from vwadekar/tegra-changes-from-downstream-v2

Tegra changes from downstream v2

7 years agorockchip: rk3399: enable secure accessing for SRAM
Xing Zheng [Tue, 14 Feb 2017 10:03:20 +0000 (18:03 +0800)]
rockchip: rk3399: enable secure accessing for SRAM

Sorry to miss the security configuration for SRAM, if we don't support
it, somebody may modify the comment of SRAM in the non-secure space.
Let's fix this issue.

Signed-off-by: Xing Zheng <zhengxing@rock-chips.com>
7 years agorockchip: rk3399: Use tFC value instead of tRFC value
Derek Basehore [Fri, 10 Feb 2017 06:08:48 +0000 (22:08 -0800)]
rockchip: rk3399: Use tFC value instead of tRFC value

This fixes code that set a tFC value in a register using the tRFC
value instead.

Signed-off-by: Derek Basehore <dbasehore@chromium.org>
7 years agorockchip: rk3399: Fix CAS latency setting
Derek Basehore [Fri, 10 Feb 2017 06:02:42 +0000 (22:02 -0800)]
rockchip: rk3399: Fix CAS latency setting

The F1 CAS latency setting was not bit shifted, which resulted in
setting the DRAM additive latency value instead.

Signed-off-by: Derek Basehore <dbasehore@chromium.org>
7 years agorockchip: rk3399: disable training modules after DDR DFS
Xing Zheng [Thu, 9 Feb 2017 06:51:38 +0000 (14:51 +0800)]
rockchip: rk3399: disable training modules after DDR DFS

On resume, we use the DFS hardware to switch frequency index,
followed by a full training sequence on that index. Leaving
the DFS training modules enabled causes issues with the full
training done at resume. We also only needs these enabled
during a call to ddr_set_rate during runtime, so there's no
issue disabling them at the end of ddr_set_rate.

Signed-off-by: Derek Basehore <dbasehore@chromium.org>
Signed-off-by: Xing Zheng <zhengxing@rock-chips.com>
7 years agorockchip: rk3399: Move DQS drive strength setting to M0
Derek Basehore [Thu, 2 Feb 2017 02:09:13 +0000 (18:09 -0800)]
rockchip: rk3399: Move DQS drive strength setting to M0

This moves the setting of the DQS drive strength to the M0 to minimize
the impact on DDR transactions. We need to have the DQS drive strength
changed for data training, which is triggered by the M0, but it also
needs to be changed back when data training is finished.

Signed-off-by: Derek Basehore <dbasehore@chromium.org>
7 years agorockchip: rk3399: Remove dram dfs optimization
Derek Basehore [Wed, 1 Feb 2017 00:37:01 +0000 (16:37 -0800)]
rockchip: rk3399: Remove dram dfs optimization

This removes an optimization to not recalculate parameters if the
frequency index being switched to hold the next frequency. This is
because some registers do not have a copy per frequency index, so this
optimization might be causing problems.

Signed-off-by: Derek Basehore <dbasehore@chromium.org>
7 years agorockchip: rk3399: Save and restore RX_CAL_DQS values
Derek Basehore [Tue, 31 Jan 2017 08:20:19 +0000 (00:20 -0800)]
rockchip: rk3399: Save and restore RX_CAL_DQS values

We were getting far off values on resume for the RX_CAL_DQS values.
This saves and restores the values for suspend/resume until the root
of the problem is figured out

Signed-off-by: Derek Basehore <dbasehore@chromium.org>
7 years agorockchip: Add MIN() and MAX() macros back to M0 code
Julius Werner [Tue, 31 Jan 2017 02:26:07 +0000 (18:26 -0800)]
rockchip: Add MIN() and MAX() macros back to M0 code

These macros were accidentally deleted in a previous cleanup. This
slipped through because the code using them is currently unused, but
that may change in the future.

Signed-off-by: Julius Werner <jwerner@chromium.org>
7 years agorockchip: Clean up M0 Makefile, clarify float-abi
Julius Werner [Tue, 31 Jan 2017 00:13:21 +0000 (16:13 -0800)]
rockchip: Clean up M0 Makefile, clarify float-abi

This patch shuffles the M0 Makefile flags around a bit trying to make
their purpose clearer and remove duplication. Since all three build
steps (compiling, assembling, linking) actually call GCC, remove the
misleading aliases $(AS) and $(LD) to avoid confusion that those tools
might be called directly. Split flags into a common group that has
meaning for all three steps and separate variables specific to each
step. Remove -nostartfiles which is a strict subset of -nostdlib.

Also add explicit parameters for -mfloat-abi=soft, -fomit-frame-pointer
and -fno-common. If omitted these settings depend on the toolchain's
built-in default and cause various problems if they resolve to
unexpected values.

Signed-off-by: Julius Werner <jwerner@chromium.org>
7 years agorockchip: rk3399: Clean up and seprate secure parts from SoC codes
Xing Zheng [Fri, 24 Feb 2017 06:56:41 +0000 (14:56 +0800)]
rockchip: rk3399: Clean up and seprate secure parts from SoC codes

The goal is that make clear the secure and SoC codes. Now cleaning them
will help secure code extensions for RK3399 in the future.

Signed-off-by: Xing Zheng <zhengxing@rock-chips.com>
7 years agorockchip: rk3399: sperate the BL31 parameters for sharing
Xing Zheng [Thu, 22 Dec 2016 10:34:14 +0000 (18:34 +0800)]
rockchip: rk3399: sperate the BL31 parameters for sharing

Maybe the coreboot will reference the BL31 parameters (e.g the TZRAM_BASE
and TZRAM_SIZE for DDR secure regions), we can split them and don't have
to hardcode the range in two places.

Signed-off-by: Xing Zheng <zhengxing@rock-chips.com>
7 years agorockchip: rk3399: configure the DDR secure region for BL31 image
Xing Zheng [Fri, 24 Feb 2017 06:47:51 +0000 (14:47 +0800)]
rockchip: rk3399: configure the DDR secure region for BL31 image

Move the BL31 loaded base address 0x10000 to 0x1000, and configure
the the memory range 0~1MB is secure, the goal is that make sure
the BL31 image will be not modified.

Signed-off-by: Xing Zheng <zhengxing@rock-chips.com>
7 years agorockchip: Clean up header and referenced files
Xing Zheng [Fri, 24 Feb 2017 08:26:11 +0000 (16:26 +0800)]
rockchip: Clean up header and referenced files

So far, there are more and more features are supported on the RK3399,
meanwhile, these features are increasingly being defined and intertwined.
It's time to clean up and make them clearer.

Signed-off-by: Xing Zheng <zhengxing@rock-chips.com>
7 years agorockchip: rk3399: Don't wait for vblank in M0 for ddrfreq
Derek Basehore [Mon, 9 Jan 2017 23:38:57 +0000 (15:38 -0800)]
rockchip: rk3399: Don't wait for vblank in M0 for ddrfreq

This removes waiting for vblank on the M0 during ddrfreq transitions.
That will now be done in the kernel to allow scheduling to be done on
the CPU core that changes the ddr frequency. Waiting for vblank in
the M0 would have the CPU core that waits on the M0 spin looping for
up to 16ms (1 frame for the display).

Signed-off-by: Derek Basehore <dbasehore@chromium.org>
7 years agorockchip: rk3399: restore PMU_CRU_GATEDIS_CON0 value after ddr dvfs
Lin Huang [Fri, 30 Dec 2016 03:50:01 +0000 (11:50 +0800)]
rockchip: rk3399: restore PMU_CRU_GATEDIS_CON0 value after ddr dvfs

we will set PMU_CRU_GATEDIS_CON0 when idle port, it will enable
all clock, for save power consumption, we need to restore old value
when finish it.

Signed-off-by: Lin Huang <hl@rock-chips.com>
7 years agorockchip: rk3399: fix PMU_CRU_GATEDIS_CON0 setting error
Lin Huang [Fri, 30 Dec 2016 05:53:25 +0000 (13:53 +0800)]
rockchip: rk3399: fix PMU_CRU_GATEDIS_CON0 setting error

As rk3399 TRM1.1 document show, when set PMU_CRU_GATEDIS_CON0/1
register, it need set the write_mask bit (bit16 ~ bit31), but as
we test, it not need it. So need to correct the setting way, otherwise
it will set wrong value to this register.

Signed-off-by: Lin Huang <hl@rock-chips.com>
7 years agoFIXUP: rockchip: rk3399: fix the incorrect bit during m0_init
Xing Zheng [Tue, 20 Dec 2016 12:44:41 +0000 (20:44 +0800)]
FIXUP: rockchip: rk3399: fix the incorrect bit during m0_init

We found that the DUT will be hanged if we don't set the bit_1 of the
PMUCRU_GATEDIS_CON0. But, from the TRM, there is weird that the bit_1
is set the clk_center1_gating_dis, not clk_pmum0_gating_dis. Is the
TRM incorrect? We need to check it with the IC team and re-clean the
commit message and explain it tomorrow.

Signed-off-by: Xing Zheng <zhengxing@rock-chips.com>
7 years agorockchip: rk3399: improve the m0 enable flow
Lin Huang [Mon, 12 Dec 2016 07:18:08 +0000 (15:18 +0800)]
rockchip: rk3399: improve the m0 enable flow

This patch do following things:
1. Request hresetn_cm0s_pmu_req first then request
   poresetn_cm0s_pmu_req during M0 enable.
2. Do not diable M0 clock for ddr dvfs.
3. Correct the clk_pmum0_gating_dis bit, it is BIT0 not BIT1
4. do not set/clear hclk_noc_pmu_en in M0 code, it does not relate
   to the M0 clock.

Signed-off-by: Lin Huang <hl@rock-chips.com>
Signed-off-by: Derek Basehore <dbasehore@chromium.org>
7 years agorockchip: rk3399: check vop status when we wait dma finish flag
Lin Huang [Thu, 1 Dec 2016 08:55:05 +0000 (16:55 +0800)]
rockchip: rk3399: check vop status when we wait dma finish flag

When vop is disabled and we read the vop register the system will
hang, so check vop status when we wait for the DMA finish flag to
avoid this sitiuation. This is done by checking for standby, DMA stop
mode, and disabled window states. Any one of these will prevent the
DMA finish flag from triggering.

Signed-off-by: Lin Huang <hl@rock-chips.com>
Signed-off-by: Derek Basehore <dbasehore@chromium.org>
7 years agorockchip: rk3399: add stopwatch functions to m0
Lin Huang [Wed, 30 Nov 2016 08:57:08 +0000 (16:57 +0800)]
rockchip: rk3399: add stopwatch functions to m0

There is system timer in m0, we can use it to implement a set of
stopwatch functions for measuring timeouts.

Signed-off-by: Lin Huang <hl@rock-chips.com>
Signed-off-by: Derek Basehore <dbasehore@chromium.org>
7 years agorockchip: rk3399: dram: set all ddr frequency pll_postdiv values to 0
Lin Huang [Thu, 15 Dec 2016 07:08:47 +0000 (15:08 +0800)]
rockchip: rk3399: dram: set all ddr frequency pll_postdiv values to 0

The phy pll needs to get 2X frequency to the DDR, so set the
pll_postdiv to 0.

Signed-off-by: Lin Huang <hl@rock-chips.com>
Signed-off-by: Derek Basehore <dbasehore@chromium.org>
7 years agorockchip: rk3399: enable CA training when do ddr dfs
Lin Huang [Fri, 16 Dec 2016 05:59:07 +0000 (13:59 +0800)]
rockchip: rk3399: enable CA training when do ddr dfs

For ddr dfs stable, We need to enable ddr CA training
when do ddr dfs.

Signed-off-by: Lin Huang <hl@rock-chips.com>
7 years agorockchip: rk3399: fix hang in ddr set rate
Derek Basehore [Fri, 24 Feb 2017 06:33:03 +0000 (14:33 +0800)]
rockchip: rk3399: fix hang in ddr set rate

This fixes a hang with setting the DRAM rate based on a race condition
with the M0 which sets the DRAM rate. The AP can also starve the M0,
so this also delays the AP reads to the DONE parameter for the M0.

Signed-off-by: Derek Basehore <dbasehore@chromium.org>
7 years agorockchip: rk3399: Enable per CS training at 666MHz
Derek Basehore [Thu, 10 Nov 2016 02:28:19 +0000 (18:28 -0800)]
rockchip: rk3399: Enable per CS training at 666MHz

This enables per CS training at 666MHz and above for ddrfreq per
vendor recommendation. Since the threshold was used for latency was
the same value, this also adds a new value for that.

Signed-off-by: Derek Basehore <dbasehore@chromium.org>
7 years agorockchip: rk3399: add support for ddrfreq suspend/resume
Derek Basehore [Fri, 24 Feb 2017 06:31:36 +0000 (14:31 +0800)]
rockchip: rk3399: add support for ddrfreq suspend/resume

This patch sets the frequency configuration of the next DRAM DFS index
to the configuration of the current index. This does not perform a
frequency transition. It just configures registers so the training on
resume for both indices will be correct.

Signed-off-by: Derek Basehore <dbasehore@chromium.org>
Signed-off-by: Xing Zheng <zhengxing@rock-chips.com>
7 years agork3399: dram: use PMU M0 to do ddr frequency scaling
Xing Zheng [Wed, 26 Oct 2016 13:25:26 +0000 (21:25 +0800)]
rk3399: dram: use PMU M0 to do ddr frequency scaling

We used dcf do ddr frequency scaling, but we just include a dcf
binary, it hard to maintain later, we have M0 compile flow in ATF,
and M0 can also work for ddr frequency scaling, so let's use it.

Signed-off-by: Lin Huang <hl@rock-chips.com>
Signed-off-by: Xing Zheng <zhengxing@rock-chips.com>
7 years agorockchip/rk3399: Cleanup platform.mk file
Derek Basehore [Thu, 20 Oct 2016 23:19:22 +0000 (16:19 -0700)]
rockchip/rk3399: Cleanup platform.mk file

This makes the file consistently use tabs instead of mixing in spaces.

Signed-off-by: Derek Basehore <dbasehore@chromium.org>
7 years agorockchip: update the raw read/write APIs for M0
Xing Zheng [Mon, 24 Oct 2016 13:06:25 +0000 (21:06 +0800)]
rockchip: update the raw read/write APIs for M0

Since the ATF project, we usually use the mmio_read_32 and
mmio_write_32. And the mmio_write_32, the firse parameter
is ADDR, the second is VALUE. In order to style consistency:

1/ rename readl/writel to mmio_read_32/mmio_write_32
2/ for keeping the same with mmio_write_32 in the ATF project,
   swap the order of the parameters for M0 mmio_write_32

Signed-off-by: Xing Zheng <zhengxing@rock-chips.com>
Signed-off-by: Lin Huang <hl@rock-chips.com>
7 years agork3399: dram: making phy into dll bypass mode at low frequency
Derek Basehore [Fri, 21 Oct 2016 05:09:22 +0000 (22:09 -0700)]
rk3399: dram: making phy into dll bypass mode at low frequency

when dram frequency below 260MHz, phy master dll may unlock, so
let phy master dll working at dll bypass mode when frequency is
below 260MHz.

Signed-off-by: Lin Huang <hl@rock-chips.com>
7 years agorockchip: rk3399: dram: remove dram_init and dts_timing_receive function
Derek Basehore [Fri, 21 Oct 2016 03:46:43 +0000 (20:46 -0700)]
rockchip: rk3399: dram: remove dram_init and dts_timing_receive function

we can reuse the dram config from loader, so we can remove dram_init()
and dts_timing_receive() funciton in dram.c, add the dram_set_odt_pd()
function to get the odt and auto power down parameter from kernel.

This also removes the dcf_code_init function to allow the system to
actually boot.

Signed-off-by: Lin Huang <hl@rock-chips.com>
Signed-off-by: Derek Basehore <dbasehore@chromium.org>
Signed-off-by: Xing Zheng <zhengxing@rock-chips.com>
7 years agoTegra: implement pwr_domain_pwr_down_wfi() handler
Varun Wadekar [Fri, 18 Mar 2016 21:35:28 +0000 (14:35 -0700)]
Tegra: implement pwr_domain_pwr_down_wfi() handler

This patch adds the pwr_domain_power_down_wfi() handler for Tegra
platforms which in turn executes the soc specific `power_down_wfi`
handler.

Change-Id: I5deecc09959db3c3d73f928f5c871966331cfd95
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
7 years agoTegra: memmap BL31's TZDRAM carveout
Varun Wadekar [Fri, 18 Mar 2016 20:01:12 +0000 (13:01 -0700)]
Tegra: memmap BL31's TZDRAM carveout

This patch maps the TZDRAM carveout used by the BL31. In the near
future BL31 would be running from the TZRAM for security and
performance reasons. The only downside to this solution is that
the TZRAM loses its state in System Suspend. So, we map the TZDRAM
carveout that the BL31 would use to save its state before entering
System Suspend.

Change-Id: Id5bda7e9864afd270cf86418c703fa61c2cb095f
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
7 years agoTegra: increase BL31 image size to 256KB
Varun Wadekar [Fri, 4 Mar 2016 02:27:28 +0000 (18:27 -0800)]
Tegra: increase BL31 image size to 256KB

This patch increases the BL31 image size for all Tegra platforms to
256KB, so that we can relocate BL31 to TZSRAM on supported chips.

Change-Id: I467063c68632b53b5d4ef8ff1f76f5988096bd9c
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
7 years agoTegra: allow individual SoCs to restore their settings
Varun Wadekar [Thu, 3 Mar 2016 21:28:10 +0000 (13:28 -0800)]
Tegra: allow individual SoCs to restore their settings

This patch uses the Memory controller driver's handler to restore
its settings and moves the other chip specific code to their own
'pwr_domain_on_finish' handlers.

Change-Id: I3c9d23bdab9e2e3c05034ff6812cf941ccd7a75e
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
7 years agocpus: denver: disable DCO operations from platform code
Varun Wadekar [Mon, 22 Feb 2016 19:09:41 +0000 (11:09 -0800)]
cpus: denver: disable DCO operations from platform code

This patch moves the code to disable DCO operations out from common
CPU files. This allows the platform code to call thsi API as and
when required. There are certain CPU power down states which require
the DCO to be kept ON and platforms can decide selectively now.

Change-Id: Icb946fe2545a7d8c5903c420d1ee169c4921a2d1
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
7 years agoTegra: enable PSCI extended state ID processing
Varun Wadekar [Wed, 27 Jan 2016 19:31:06 +0000 (11:31 -0800)]
Tegra: enable PSCI extended state ID processing

This patch enables the PSCI_EXTENDED_STATE_ID macro. Tegra platforms
have moved on to using the extended state ID for CPU_SUSPEND, where
the NS world passes the state ID and wakeup time as part of the
state ID field.

Change-Id: Ie8b0fec285d8b2330bc26ff239a4f628425c9fcf
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
7 years agoTegra: define platform power states
Varun Wadekar [Tue, 19 Jan 2016 21:55:19 +0000 (13:55 -0800)]
Tegra: define platform power states

The platform power states, PLAT_MAX_RET_STATE and PLAT_MAX_OFF_STATE,
can change on Tegra SoCs and so should be defined per-soc.

This patch moves these macro definitions to individual SoC's tegra_def.h
files.

Change-Id: Ib9b2752bc4d79cef6f79bee49882d340f71977a2
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
7 years agoTegra: drivers: memctrl: introduce function to secure on-chip TZRAM
Varun Wadekar [Wed, 30 Dec 2015 23:06:41 +0000 (15:06 -0800)]
Tegra: drivers: memctrl: introduce function to secure on-chip TZRAM

This patch introduces a function to secure the on-chip TZRAM memory. The
Tegra132 and Tegra210 chips do not have a compelling use case to lock the
TZRAM. The trusted OS owns the TZRAM aperture on these chips and so it
can take care of locking the aperture. This might not be true for future
chips and this patch makes the TZRAM programming flexible.

Change-Id: I3ac9f1de1b792ccd23d4ded274784bbab2ea224a
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
7 years agoTegra: enable runtime console
Varun Wadekar [Sat, 9 Jan 2016 01:48:42 +0000 (17:48 -0800)]
Tegra: enable runtime console

This patch enables the runtime console for all Tegra platforms
before exiting BL31. This would enable debug/error prints to be
always displayed on the UART console.

Change-Id: Ic48d61d05b0ab07973d6fc2dc6b68733a42a3f63
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
7 years agoTegra: PM: soc-specific system off handler
Varun Wadekar [Thu, 7 Jan 2016 22:04:21 +0000 (14:04 -0800)]
Tegra: PM: soc-specific system off handler

This patch introduces a power down handler which can be overriden
by SoCs to customise the power down process. The current SoCs do
not have a way of powering down the entire system as external PMIC
chips are involved in the process.

But future SoCs will have a way to power off the entire system
without talking to an external PMIC.

Change-Id: Ie7750714141a29cb0a1a616fafc531c4f11d0985
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
7 years agoTegra: handlers for common and SoC-specific SiP calls
Varun Wadekar [Thu, 10 Dec 2015 02:18:53 +0000 (18:18 -0800)]
Tegra: handlers for common and SoC-specific SiP calls

This patch implements a handler for common SiP calls. A weak
implementation for the SoC-specific handler has been provided
which can be overridden by SoCs to implement any custom SiP
calls.

Change-Id: I45122892a84ea35d7b44be0f35dc15f6bb95193e
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
7 years agospd: trusty: OEN_TAP_START aperture for standard calls
Amith [Thu, 20 Aug 2015 03:13:12 +0000 (20:13 -0700)]
spd: trusty: OEN_TAP_START aperture for standard calls

This patch uses the OEN_TAP_START aperture for all the standard
calls being passed to Trusty.

Change-Id: Id78d01c7f48e4f54855600d7c789ffbfb898c541
Signed-off-by: Amith <aramachan@nvidia.com>
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
7 years agoMerge pull request #845 from vwadekar/tegra-changes-from-downstream-v1
davidcunado-arm [Thu, 23 Feb 2017 17:30:54 +0000 (17:30 +0000)]
Merge pull request #845 from vwadekar/tegra-changes-from-downstream-v1

Tegra changes from downstream v1

7 years agoClarify errata ERRATA_A53_836870 documentation
Douglas Raillard [Wed, 15 Feb 2017 17:38:43 +0000 (17:38 +0000)]
Clarify errata ERRATA_A53_836870 documentation

The errata is enabled by default on r0p4, which is confusing given that
we state we do not enable errata by default.

This patch clarifies this sentence by saying it is enabled in hardware
by default.

Change-Id: I70a062d93e1da2416d5f6d5776a77a659da737aa
Signed-off-by: Douglas Raillard <douglas.raillard@arm.com>
7 years agoFix TSPD implementation of STD SMC ABORT
Douglas Raillard [Fri, 3 Feb 2017 18:01:51 +0000 (18:01 +0000)]
Fix TSPD implementation of STD SMC ABORT

ABORT SMC used to return to the previously executing world, which
happened to be S-EL1 as it calls a TSP handler using synchronous entry
into the TSP.

Now properly save and restore the non-secure context (including system
registers) and return to non-secure world as it should.

fixes ARM-Software/tf-issues#453

Change-Id: Ie40c79ca2636ab8b6b2ab3106e8f49e0f9117f5f
Signed-off-by: Douglas Raillard <douglas.raillard@arm.com>
7 years agoTegra: init normal/crash console for platforms
Varun Wadekar [Thu, 29 Oct 2015 05:07:28 +0000 (10:37 +0530)]
Tegra: init normal/crash console for platforms

The BL2 fills in the UART controller ID to be used as the normal as
well as the crash console on Tegra platforms. The controller ID to
UART controller base address mapping is handled by each Tegra SoC
the base addresses might change across Tegra chips.

This patch adds the handler to parse the platform params to get the
UART ID for the per-soc handlers.

Change-Id: I4d167b20a59aaf52a31e2a8edf94d8d6f89598fa
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
7 years agoTegra: add tzdram_base to plat_params_from_bl2 struct
Varun Wadekar [Tue, 6 Oct 2015 07:19:31 +0000 (12:49 +0530)]
Tegra: add tzdram_base to plat_params_from_bl2 struct

This patch adds another member, tzdram_base, to the plat_params_from_bl2 struct
in order to store the TZDRAM carveout base address used to load the Trusted OS.
The monitor programs the memory controller with the TZDRAM base and size in order
to deny any accesses from the NS world.

Change-Id: If39b8674d548175d7ccb6525c18d196ae8a8506c
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
7 years agoTegra: Memory Controller Driver (v1)
Varun Wadekar [Fri, 18 Sep 2015 05:51:22 +0000 (11:21 +0530)]
Tegra: Memory Controller Driver (v1)

This patch renames the current Memory Controller driver files to
"_v1". This is done to add a driver for the new Memory Controller
hardware (v2).

Change-Id: I668dbba42f6ee0db2f59a7103f0ae7e1d4684ecf
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
7 years agoTegra: sanity check members of the "from_bl2" struct
Varun Wadekar [Tue, 22 Sep 2015 09:30:06 +0000 (15:00 +0530)]
Tegra: sanity check members of the "from_bl2" struct

This patch checks that the pointers to BL3-3 and BL3-2 ep_info
structs are valid before accessing them. Add some INFO prints
in the BL3-1 setup path for early debugging purposes.

Change-Id: I62b23fa870f1b2fb783c8de69aab819f1749d15a
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
7 years agocpus: Add support for all Denver variants
Varun Wadekar [Thu, 3 Sep 2015 11:45:06 +0000 (17:15 +0530)]
cpus: Add support for all Denver variants

This patch adds support for all variants of the Denver CPUs. The
variants export their cpu_ops to allow all Denver platforms to run
the Trusted Firmware stack.

Change-Id: I1488813ddfd506ffe363d8a32cda1b575e437035
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
7 years agoRemove redundant assert
Jeenu Viswambharan [Tue, 21 Feb 2017 16:01:31 +0000 (16:01 +0000)]
Remove redundant assert

Static checks flag an assert added in commit 1f786b0 that compares
unsigned value to 0, which will never fail.

Change-Id: I4b02031c2cfbd9a25255d12156919dda7d4805a0
Signed-off-by: Jeenu Viswambharan <jeenu.viswambharan@arm.com>
7 years agoTegra: use ClusterId for calculating core position
Varun Wadekar [Tue, 22 Sep 2015 08:15:07 +0000 (13:45 +0530)]
Tegra: use ClusterId for calculating core position

This patch modifies platform_get_core_pos() to use the Cluster ID
field as well to calculate the final index value. This helps the
system to store CPU data for multi-cluster configurations.

Change-Id: I76e35f723f741e995c6c9156e9d61b0b2cdd2709
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
7 years agoTegra: enable processor retention and L2/CPUECTLR access
Varun Wadekar [Tue, 22 Sep 2015 08:03:56 +0000 (13:33 +0530)]
Tegra: enable processor retention and L2/CPUECTLR access

This patch enables the processor retention and L2/CPUECTLR read/write
access from the NS world only for Cortex-A57 CPUs on the Tegra SoCs.

Change-Id: I9941a67686ea149cb95d80716fa1d03645325445
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
7 years agoTegra: define MAX_XLAT_TABLES and MAX_MMAP_REGIONS per-platform
Varun Wadekar [Wed, 9 Sep 2015 05:59:24 +0000 (11:29 +0530)]
Tegra: define MAX_XLAT_TABLES and MAX_MMAP_REGIONS per-platform

This patch moves these address translation helper macros to individual
Tegra SoC makefiles to provide more control.

Change-Id: Ieab53c457c73747bd0deb250459befb5b7b9363f
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
7 years agoTegra: SoC specific SiP handlers
Varun Wadekar [Thu, 3 Sep 2015 09:02:44 +0000 (14:32 +0530)]
Tegra: SoC specific SiP handlers

This patch converts the common SiP handler to SoC specific SiP
handler. T210 and T132 have different SiP SMCs and so it makes
sense to move the SiP handler to soc/t132 and soc/t210 folders.

Change-Id: Idfe48384d63641137d74a095432df4724986b241
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
7 years agoTegra: include flowctlr driver from SoC specific makefiles
Varun Wadekar [Tue, 25 Aug 2015 11:31:06 +0000 (17:01 +0530)]
Tegra: include flowctlr driver from SoC specific makefiles

The Flow Controller hardware block is not present across all Tegra
SoCs, hence include the driver files from SoC specific makefiles.

T132/T210 are the SoCs which include this hardware block while future
SoCs have removed it.

Change-Id: Iaca25766a4fa51567293d10cf14dae968b0fae80
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
7 years agoMerge pull request #844 from antonio-nino-diaz-arm/an/no-timingsafe
danh-arm [Mon, 20 Feb 2017 14:00:05 +0000 (14:00 +0000)]
Merge pull request #844 from antonio-nino-diaz-arm/an/no-timingsafe

Revert "tbbr: Use constant-time bcmp() to compare hashes"

7 years agoMerge pull request #843 from jeenu-arm/cas-lock
danh-arm [Mon, 20 Feb 2017 13:59:50 +0000 (13:59 +0000)]
Merge pull request #843 from jeenu-arm/cas-lock

Introduce locking primitives using CAS instruction

7 years agoMerge pull request #842 from jeenu-arm/io-memmap-asserts
danh-arm [Mon, 20 Feb 2017 13:59:12 +0000 (13:59 +0000)]
Merge pull request #842 from jeenu-arm/io-memmap-asserts

Add bounds checking asserts to memmap IO driver

7 years agoMerge pull request #841 from dp-arm/dp/debug-regs
danh-arm [Mon, 20 Feb 2017 13:58:48 +0000 (13:58 +0000)]
Merge pull request #841 from dp-arm/dp/debug-regs

Disable secure self-hosted debug

7 years agoRevert "tbbr: Use constant-time bcmp() to compare hashes"
Antonio Nino Diaz [Thu, 9 Feb 2017 10:26:54 +0000 (10:26 +0000)]
Revert "tbbr: Use constant-time bcmp() to compare hashes"

This reverts commit b621fb503c76f3bdf06ed5ed1d3a995df8da9c50.

Because of the Trusted Firmware design, timing-safe functions are not
needed. Using them may be misleading as it could be interpreted as being
a protection against private data leakage, which isn't the case here.

For each image, the SHA-256 hash is calculated. Some padding is appended
and the result is encrypted with a private key using RSA-2048. This is
the signature of the image. The public key is stored along with BL1 in
read-only memory and the encrypted hash is stored in the FIP.

When authenticating an image, the TF decrypts the hash stored in the FIP
and recalculates the hash of the image. If they don't match, the boot
sequence won't continue.

A constant-time comparison does not provide additional security as all
the data involved in this process is already known to any attacker.
There is no private data that can leaked through a timing attack when
authenticating an image.

`timingsafe_bcmp()` is kept in the codebase because it could be useful
in the future.

Change-Id: I44bdcd58faa586a050cc89447e38c142508c9888
Signed-off-by: Antonio Nino Diaz <antonio.ninodiaz@arm.com>
7 years agoMerge pull request #834 from douglas-raillard-arm/dr/use_dc_zva_zeroing
davidcunado-arm [Thu, 16 Feb 2017 14:49:37 +0000 (14:49 +0000)]
Merge pull request #834 from douglas-raillard-arm/dr/use_dc_zva_zeroing

Use DC ZVA instruction to zero memory

7 years agoMerge pull request #840 from dp-arm/dp/cppcheck-fixes
davidcunado-arm [Thu, 16 Feb 2017 09:57:56 +0000 (09:57 +0000)]
Merge pull request #840 from dp-arm/dp/cppcheck-fixes

Fix minor issues found by cppcheck

7 years agoMerge pull request #838 from davidcunado-arm/dc/update_userguide
davidcunado-arm [Thu, 16 Feb 2017 09:56:45 +0000 (09:56 +0000)]
Merge pull request #838 from davidcunado-arm/dc/update_userguide

Migrate to Linaro Release 16.12

7 years agoMerge pull request #829 from masahir0y/build
davidcunado-arm [Thu, 16 Feb 2017 09:56:17 +0000 (09:56 +0000)]
Merge pull request #829 from masahir0y/build

Makefile: use git describe for BUILD_STRING

7 years agoJuno: Disable SPIDEN in release builds
dp-arm [Wed, 8 Feb 2017 12:16:42 +0000 (12:16 +0000)]
Juno: Disable SPIDEN in release builds

On Juno, the secure privileged invasive debug authentication signal
(SPIDEN) is controlled by board SCC registers, which by default enable
SPIDEN.  Disable secure privileged external debug in release builds by
programming the appropriate Juno SoC registers.

Change-Id: I61045f09a47dc647bbe95e1b7a60e768f5499f49
Signed-off-by: dp-arm <dimitris.papastamos@arm.com>
7 years agoDisable secure self-hosted debug via MDCR_EL3/SDCR
dp-arm [Wed, 8 Feb 2017 11:51:50 +0000 (11:51 +0000)]
Disable secure self-hosted debug via MDCR_EL3/SDCR

Trusted Firmware currently has no support for secure self-hosted
debug.  To avoid unexpected exceptions, disable software debug
exceptions, other than software breakpoint instruction exceptions,
from all exception levels in secure state.  This applies to both
AArch32 and AArch64 EL3 initialization.

Change-Id: Id097e54a6bbcd0ca6a2be930df5d860d8d09e777
Signed-off-by: dp-arm <dimitris.papastamos@arm.com>
7 years agoFix minor issues found by cppcheck
dp-arm [Thu, 9 Feb 2017 10:25:29 +0000 (10:25 +0000)]
Fix minor issues found by cppcheck

cppcheck highlighted variables that were initialized but then later
reassigned.

Change-Id: Ie12742c01fd3bf48b2d6c05a3b448da91d57a2e4
Signed-off-by: dp-arm <dimitris.papastamos@arm.com>
7 years agoAdd bounds checking asserts to memmap IO driver
Jeenu Viswambharan [Mon, 13 Feb 2017 13:06:18 +0000 (13:06 +0000)]
Add bounds checking asserts to memmap IO driver

The memmap IO driver doesn't perform bounds check when reading, writing,
or seeking. The onus to vet parameters is on the caller, and this patch
asserts that:

  - non-negative size is specified for for backing memory;

  - valid parameters are passed into the driver for read, write and seek
    operations.

Change-Id: I6518c4065817e640e9e7e39a8a4577655f2680f7
Signed-off-by: Jeenu Viswambharan <jeenu.viswambharan@arm.com>
7 years agoIntroduce locking primitives using CAS instruction
Jeenu Viswambharan [Mon, 16 Jan 2017 16:52:35 +0000 (16:52 +0000)]
Introduce locking primitives using CAS instruction

The ARMv8v.1 architecture extension has introduced support for far
atomics, which includes compare-and-swap. Compare and Swap instruction
is only available for AArch64.

Introduce build options to choose the architecture versions to target
ARM Trusted Firmware:

  - ARM_ARCH_MAJOR: selects the major version of target ARM
    Architecture. Default value is 8.

  - ARM_ARCH_MINOR: selects the minor version of target ARM
    Architecture. Default value is 0.

When:

  (ARM_ARCH_MAJOR > 8) || ((ARM_ARCH_MAJOR == 8) && (ARM_ARCH_MINOR >= 1)),

for AArch64, Compare and Swap instruction is used to implement spin
locks. Otherwise, the implementation falls back to using
load-/store-exclusive instructions.

Update user guide, and introduce a section in Firmware Design guide to
summarize support for features introduced in ARMv8 Architecture
Extensions.

Change-Id: I73096a0039502f7aef9ec6ab3ae36680da033f16
Signed-off-by: Jeenu Viswambharan <jeenu.viswambharan@arm.com>
7 years agoMerge pull request #833 from masahir0y/cert_create
davidcunado-arm [Tue, 14 Feb 2017 08:56:44 +0000 (08:56 +0000)]
Merge pull request #833 from masahir0y/cert_create

Bug fix and cleanup of cert_create tool

7 years agoMerge pull request #828 from masahir0y/fiptool
davidcunado-arm [Mon, 13 Feb 2017 17:33:43 +0000 (17:33 +0000)]
Merge pull request #828 from masahir0y/fiptool

Fiptool cleanup

7 years agoMigrate to Linaro Release 16.12
David Cunado [Fri, 10 Feb 2017 14:49:23 +0000 (14:49 +0000)]
Migrate to Linaro Release 16.12

This Linaro release updates both the binaries and the toolchain:
Linaro binaries upgraded 16.06 --> 16.12
AArch64 compiler upgraded 15.05 (gcc 4.9) --> 5.3-2015.05 (gcc 5.3)
AArch32 compiler upgraded 15.05 (gcc 4.9) --> 5.3-2015.05 (gcc 5.3)

The ARM TF codebase has been tested against these new binaries. This patch
updates the User Guide to reflect that the 16.12 release is now a supported
Linaro Release.

Change-Id: I6247e820f591df7d05df4f622ee45a3abf2c2d72
Signed-off-by: David Cunado <david.cunado@arm.com>
7 years agoMerge pull request #826 from dp-arm/dp/psci-stat-abstraction
davidcunado-arm [Mon, 13 Feb 2017 17:21:03 +0000 (17:21 +0000)]
Merge pull request #826 from dp-arm/dp/psci-stat-abstraction

Decouple PSCI stat residency calculation from PMF

7 years agoPSCI: Do stat accounting for retention/standby states
dp-arm [Tue, 31 Jan 2017 13:03:00 +0000 (13:03 +0000)]
PSCI: Do stat accounting for retention/standby states

Perform stat accounting for retention/standby states also when
requested at multiple power levels.

Change-Id: I2c495ea7cdff8619bde323fb641cd84408eb5762
Signed-off-by: dp-arm <dimitris.papastamos@arm.com>
7 years agoPSCI: Decouple PSCI stat residency calculation from PMF
dp-arm [Tue, 31 Jan 2017 13:01:04 +0000 (13:01 +0000)]
PSCI: Decouple PSCI stat residency calculation from PMF

This patch introduces the following three platform interfaces:

* void plat_psci_stat_accounting_start(const psci_power_state_t *state_info)

  This is an optional hook that platforms can implement in order
  to perform accounting before entering a low power state.  This
  typically involves capturing a timestamp.

* void plat_psci_stat_accounting_stop(const psci_power_state_t *state_info)

  This is an optional hook that platforms can implement in order
  to perform accounting after exiting from a low power state.  This
  typically involves capturing a timestamp.

* u_register_t plat_psci_stat_get_residency(unsigned int lvl,
const psci_power_state_t *state_info,
unsigned int last_cpu_index)

  This is an optional hook that platforms can implement in order
  to calculate the PSCI stat residency.

If any of these interfaces are overridden by the platform, it is
recommended that all of them are.

By default `ENABLE_PSCI_STAT` is disabled.  If `ENABLE_PSCI_STAT`
is set but `ENABLE_PMF` is not set then an alternative PSCI stat
collection backend must be provided.  If both are set, then default
weak definitions of these functions are provided, using PMF to
calculate the residency.

NOTE: Previously, platforms did not have to explicitly set
`ENABLE_PMF` since this was automatically done by the top-level
Makefile.

Change-Id: I17b47804dea68c77bc284df15ee1ccd66bc4b79b
Signed-off-by: dp-arm <dimitris.papastamos@arm.com>
7 years agoMerge pull request #836 from davidcunado-arm/dc/update_userguide
davidcunado-arm [Mon, 13 Feb 2017 11:15:02 +0000 (11:15 +0000)]
Merge pull request #836 from davidcunado-arm/dc/update_userguide

Update AEM and Cortex Models versions

7 years agofiptool: remove unneeded declarations
Masahiro Yamada [Sat, 11 Feb 2017 04:02:12 +0000 (13:02 +0900)]
fiptool: remove unneeded declarations

These functions are defined above any calls.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
7 years agofiptool: stretch out printf strings for readability and grep'ability
Masahiro Yamada [Thu, 2 Feb 2017 07:37:37 +0000 (16:37 +0900)]
fiptool: stretch out printf strings for readability and grep'ability

We should follow the Linux coding style, which is clearly stated in
the docs/user-guide.mk:

  When making changes to the source for submission to the project,
  the source must be in compliance with the Linux style guide

and Documentation/process/coding-style.rst of Linux Kernel says:

  The limit on the length of lines is 80 columns and this is a
  strongly preferred limit.
     [ snip ]
  However, never break user-visible strings such as printk messages,
  because that breaks the ability to grep for them.

The strings for printf() are user-visible, and can exceed the 80
column limit.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
7 years agofiptool: print new lines of usage to stdout instead of stderr
Masahiro Yamada [Thu, 2 Feb 2017 07:34:14 +0000 (16:34 +0900)]
fiptool: print new lines of usage to stdout instead of stderr

The strings in usage functions are sent to stdout by printf(),
but some new lines are sent to stderr by fputc(..., stderr).

This inconsistency will break the usage format when users re-direct
stdout or stderr.  Just use printf() for consistency.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
7 years agocert_create: remove unneeded initializers
Masahiro Yamada [Mon, 6 Feb 2017 10:47:44 +0000 (19:47 +0900)]
cert_create: remove unneeded initializers

These variables store return values of functions.  Remove all of
meaningless initializers.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
7 years agocert_create: merge successive i2d_ASN1_INTEGER() calls
Masahiro Yamada [Mon, 6 Feb 2017 10:00:11 +0000 (19:00 +0900)]
cert_create: merge successive i2d_ASN1_INTEGER() calls

The ext_new_nvcounter() function calls i2d_ASN1_INTEGER() twice;
the first call to get the return value "sz", and the second one
for writing data into the buffer.  This is actually redundant.
We can do both by one function call.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
7 years agocert_create: fix memory leak bug caused by key container overwrite
Masahiro Yamada [Mon, 6 Feb 2017 12:15:01 +0000 (21:15 +0900)]
cert_create: fix memory leak bug caused by key container overwrite

In the current code, both key_load() and key_create() call key_new()
to allocate a key container (and they do not free it even if they
fail).  If a specific key is not given by the command option,
key_load() fails, then key_create() is called.  At this point, the
key container that has been allocated in key_load() is still alive,
and it is overwritten by a new key container created by key_create().

Move the key_new() call to the main() function to make sure it is
called just once for each descriptor.

While we are here, let's fix one more bug; the error handling code
  ERROR("Malloc error while loading '%s'\n", keys[i].fn);
is wrong because keys[i].fn is NULL pointer unless a specific key is
given by the command option.  This code could be run in either case.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
7 years agoUpdate AEM and Cortex Models versions
David Cunado [Thu, 9 Feb 2017 12:20:32 +0000 (12:20 +0000)]
Update AEM and Cortex Models versions

AEMv8-A Model release v8.2 has been made available and Trusted Firmware
has been tested against these versions as part of its CI system. This
patch updates the user guide documentation to reflect the version of AEM
and Cortex Models that Trusted Firmware has been tested against.

Also, the Linaro Release Notes link was broken and this patch updates the
link.

Change-Id: I88729cef909a69fff629036f480fd6168ad7dc9a
Signed-off-by: David Cunado <david.cunado@arm.com>
7 years agoMerge pull request #831 from masahir0y/zynqmp
danh-arm [Tue, 7 Feb 2017 15:15:03 +0000 (15:15 +0000)]
Merge pull request #831 from masahir0y/zynqmp

zynqmp: remove RESET_TO_BL31=1 from build instruction

7 years agoReplace some memset call by zeromem
Douglas Raillard [Thu, 26 Jan 2017 15:54:44 +0000 (15:54 +0000)]
Replace some memset call by zeromem

Replace all use of memset by zeromem when zeroing moderately-sized
structure by applying the following transformation:
memset(x, 0, sizeof(x)) => zeromem(x, sizeof(x))

As the Trusted Firmware is compiled with -ffreestanding, it forbids the
compiler from using __builtin_memset and forces it to generate calls to
the slow memset implementation. Zeromem is a near drop in replacement
for this use case, with a more efficient implementation on both AArch32
and AArch64.

Change-Id: Ia7f3a90e888b96d056881be09f0b4d65b41aa79e
Signed-off-by: Douglas Raillard <douglas.raillard@arm.com>
7 years agoIntroduce unified API to zero memory
Douglas Raillard [Fri, 2 Dec 2016 13:51:54 +0000 (13:51 +0000)]
Introduce unified API to zero memory

Introduce zeromem_dczva function on AArch64 that can handle unaligned
addresses and make use of DC ZVA instruction to zero a whole block at a
time. This zeroing takes place directly in the cache to speed it up
without doing external memory access.

Remove the zeromem16 function on AArch64 and replace it with an alias to
zeromem. This zeromem16 function is now deprecated.

Remove the 16-bytes alignment constraint on __BSS_START__ in
firmware-design.md as it is now not mandatory anymore (it used to comply
with zeromem16 requirements).

Change the 16-bytes alignment constraints in SP min's linker script to a
8-bytes alignment constraint as the AArch32 zeromem implementation is now
more efficient on 8-bytes aligned addresses.

Introduce zero_normalmem and zeromem helpers in platform agnostic header
that are implemented this way:
* AArch32:
* zero_normalmem: zero using usual data access
* zeromem: alias for zero_normalmem
* AArch64:
* zero_normalmem: zero normal memory  using DC ZVA instruction
                  (needs MMU enabled)
* zeromem: zero using usual data access

Usage guidelines: in most cases, zero_normalmem should be preferred.

There are 2 scenarios where zeromem (or memset) must be used instead:
* Code that must run with MMU disabled (which means all memory is
  considered device memory for data accesses).
* Code that fills device memory with null bytes.

Optionally, the following rule can be applied if performance is
important:
* Code zeroing small areas (few bytes) that are not secrets should use
  memset to take advantage of compiler optimizations.

  Note: Code zeroing security-related critical information should use
  zero_normalmem/zeromem instead of memset to avoid removal by
  compilers' optimizations in some cases or misbehaving versions of GCC.

Fixes ARM-software/tf-issues#408

Change-Id: Iafd9663fc1070413c3e1904e54091cf60effaa82
Signed-off-by: Douglas Raillard <douglas.raillard@arm.com>
7 years agoMerge pull request #830 from masahir0y/misc
danh-arm [Mon, 6 Feb 2017 16:13:32 +0000 (16:13 +0000)]
Merge pull request #830 from masahir0y/misc

gitignore: ignore GNU GLOBAL tag files

7 years agoMerge pull request #827 from dp-arm/dp/pmf-constants
danh-arm [Mon, 6 Feb 2017 16:12:13 +0000 (16:12 +0000)]
Merge pull request #827 from dp-arm/dp/pmf-constants

PMF: Fixup PMF constants

7 years agozynqmp: remove RESET_TO_BL31=1 from build instruction
Masahiro Yamada [Mon, 6 Feb 2017 08:59:58 +0000 (17:59 +0900)]
zynqmp: remove RESET_TO_BL31=1 from build instruction

RESET_TO_BL31=1 is specified by plat/xilinx/zynqmp/platform.mk with
"override" directive.  So, RESET_TO_BL31=1 is guaranteed without any
operation on users' side.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
7 years agogitignore: ignore GNU GLOBAL tag files
Masahiro Yamada [Fri, 3 Feb 2017 02:07:15 +0000 (11:07 +0900)]
gitignore: ignore GNU GLOBAL tag files

GNU GLOBAL (https://www.gnu.org/software/global/) is source code
tagging system.  It creates 4 tag files (GTAGS, GRTAGS, GSYMS and
GPATH) for the symbol cross-reference.  Ignore them.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>