Updates for ARM Trusted Firmware tag v1.0

* New load address for plat-vexpress,fvp
* Entry vector extended with system_off and system_reset
  entries
Add documentation for ARM Trusted Firmware

Adds documentation how to compile and run with
ARM Trusted Firmware.
MMU: Simplify tee_mmu_switch function

Replaced direct CP15 instructions with macros instead and removed some
unnecessary code.
Make license terms more explicit

It fixes #37 "README.md is unclear about license"
Makefile variables $(*-dir) should not have a trailing slash

As a general rule, Makefile variables that are directories should not have
a trailing slash, and should be used as: $(some-dir)/some-file rather than
$(some-dir)some-file. This is more readable.
Fix #6294: Full HW Random Generator

Change-Id: I9babada92991c646d844a25af175150d530a8ddb
Reviewed-on: https://gerrit.st.com/11597
Reviewed-by: Jean-Michel DELORME <jean-michel.delorme@st.com>
Tested-by: Jean-Michel DELORME <jean-michel.delorme@st.com>
Reviewed-by: Jocelyn RICARD <jocelyn.ricard@st.com>
Reviewed-by: Pascal BRAND <pascal.brand@st.com>

Conflicts:
	core/arch/st231/plat-stm/rng_support.c
Fix #6323: A failing RSA decode leads to panic

Change-Id: Ia4762f076922338f280d431f104b653e731bf64f
Reviewed-on: https://gerrit.st.com/11598
Reviewed-by: Jean-Michel DELORME <jean-michel.delorme@st.com>
Tested-by: Jean-Michel DELORME <jean-michel.delorme@st.com>
Tested-by: Jocelyn RICARD <jocelyn.ricard@st.com>
Reviewed-by: Pascal BRAND <pascal.brand@st.com>

Update wrt comments from review

Fix returned error when the mode is not ok
Fix TA build error

This fixes a bug introduced by commit 4334e8d. In ta_dev_kit.mk, out-dir must
be set to '.' and not left empty when output directory (O=) is not specified.
Otherwise, when building a trusted app, the compile rule will have an unwanted
leading slash (result from the expansion of $(out-dir)/$(...) in compile.mk).
Error is:

make[1]: Entering directory `/home/jerome/tmp/lcu14_optee_hello_world/ta'
  CC      /hello_world_ta.o
hello_world_ta.c:101:1: fatal error: opening dependency file /.hello_world_ta.o.d: Permission denied
 }
 ^
compilation terminated.
Generic secure time layer

Provided a time source api in order to let soc vendors implement their
own secure counter

- Moved platform-dependent code out of tee_time.c to make it a generic
  time layer.
- Added an abstract layer for platforms to implement their own secure
  time source.
- Implemented arm cntpct as one of secure time source.
- Moved rtt0 related time operation from tee_time.c to tee_time_rtt.c,
  act as another secure time source.
- Added tee_time_ree.c for the plaform that doesn't have secure time
  source. In this case, using ree time as secure time source.
Implemented wait in normal world

Instead of busy waiting in secure world, it is more efficient to wait
in normal world such that HLOS can schedule another task to execute
while waiting

- Added a new RPC command to wait in linux driver
- Remove wait_specific() hook in time_source, it seems can be a generic
  function.
- This patch depends on "Implemented wait in normal world" in
  optee_linuxdrver
"Core Status" service on malloc

- Gets teecore heap info.
- Enabled only on CFG_TEE_FW_DEBUG != 0.
- Update dirty tests
- Reset max allocated size after malloc dirty tests.
vexpress,qemu: Change memory layout

Start QEMU with -m 1057
Use vexpress-v2p-ca15-tc1.dtb from the Linux kernel tree
Update references to ARM Trusted Firmware

We must never abbreviate ARM so we either reference as "ARM
Trusted Firmware" or "ARM-TF".
Fix dirty tests

* Makes dirty tests work again
* Fixes compile issues when enabling the LOG features in dirty tests
Fix GCM Authentication

Authentication tag length, given during the enc_final(),
was wrong. It was the max of the tag buffer, instead of the
value provided during the init.

Other cleanup also takes place to simplify CCM authentication.

Change-Id: I14c02b2a39a51fb485b0ff04707895f91fcc73a3
Reviewed-on: https://gerrit.st.com/12369
Tested-by: Pascal BRAND <pascal.brand@st.com>
Tested-by: Jean-Michel DELORME <jean-michel.delorme@st.com>
Reviewed-by: Jean-Michel DELORME <jean-michel.delorme@st.com>
Signed-off-by: Pascal Brand <pascal.brand@st.com>
plat-vexpress: fix non-debug build

Fixes a number of build errors when 'PLATFORM=vexpress' and 'DEBUG=':
- '<var> may be used uninitialized'
- 'dereferencing type-punned pointer will break strict-aliasing rules'
This one is addressed by adding -fno-strict-aliasing to the cflags for the
problematic files, which is a temporary solution.
- 'inlining failed'

Also, make sure tee_svc_syscall_table is aligned on a 32-bit boundary.
Otherwise, an alignment fault might occur:
  ERR [0x0] TEE-CORE:tee_pager_print_error_abort:101: data-abort at 0x602f16b
  FSR 0x1 PC 0x6007bd4 TTBR0 0x603804A CONTEXIDR 0x1
  CPUID 0x80000001 DBGPCSR 0x0 CPSR 0x80000013 (read from SPSR)
  ERR [0x0] TEE-CORE:tee_pager_handle_abort:164: [TEE_PAGER] alignement fault!  (trap CPU)

Note: on Foundation_v8, I measured a ~3x speedup between debug and non-debug
builds for asymmetric crypto tests.
XTS implementation

Fix libtomcrypt XTS: when applying XTS
encryption / decryption, onto partial buffers,
the tweak is now updated.

Signed-off-by: Pascal Brand <pascal.brand@st.com>
Add generation of memory usage report of tee.elf
Trace syscall entry when CFG_TEE_CORE_LOG_LEVEL == TRACE_FLOW (5)
Add crypto provider internal API.

This commit re-factors the crypto code to make it more modular. It will make
it possible to choose an alternative implementation at compile-time.
The main changes are:

- Add core/include/tee/tee_cryp_provider.h.
Defines struct crypto_ops which gathers the functions that were previously in
core/include/tee/tee_{acipher,authenc,cipher,hash,mac}.h and also contains
some functions to manipulate "big numbers".
Prototypes of asymmetric cypher functions were adjusted to use generic key
types (rsa_keypair_s, rsa_public_key_s, and so on), in which the big numbers
are accessible though an opaque type (bignum *).
- The code that was previously in tee/tee_{acipher,authenc,cipher,hash,mac}.c
was moved to lib/libtomcrypt/src/tee_ltc_provider.c, which also
replaces tee_ltc_wrapper.c. This file uses LibTomCrypt and libmpa to implement
the crypto_ops interface.
- tee_svc_cryp.c still handles data copying to/from user and parameter checking
and formatting, but it has no direct dependency on LibTomCrypt/libmpa anymore.
Instead, it relies on a global crypto_ops instance to implement the crypto
algorithms.

This code compiles but was not tested.