From e36950bd6994f0168db66626394398a6dec1ae1d Mon Sep 17 00:00:00 2001 From: Sathees Balya Date: Wed, 30 Jan 2019 15:56:44 +0000 Subject: [PATCH] docs: Document romlib design Change-Id: I2b75be16f452a8ab7c2445ccd519fb057a135812 Co-authored-by: John Tsichritzis Signed-off-by: John Tsichritzis --- docs/diagrams/romlib_design.dia | Bin 0 -> 2985 bytes docs/diagrams/romlib_design.png | Bin 0 -> 17244 bytes docs/diagrams/romlib_wrapper.dia | Bin 0 -> 2543 bytes docs/diagrams/romlib_wrapper.png | Bin 0 -> 12085 bytes docs/firmware-design.rst | 6 ++ docs/romlib-design.rst | 125 +++++++++++++++++++++++++++++++ 6 files changed, 131 insertions(+) create mode 100755 docs/diagrams/romlib_design.dia create mode 100755 docs/diagrams/romlib_design.png create mode 100755 docs/diagrams/romlib_wrapper.dia create mode 100755 docs/diagrams/romlib_wrapper.png create mode 100644 docs/romlib-design.rst diff --git a/docs/diagrams/romlib_design.dia b/docs/diagrams/romlib_design.dia new file mode 100755 index 0000000000000000000000000000000000000000..d12eec07dde88316538645ac5605977de5e1222f GIT binary patch literal 2985 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 literal 0 HcmV?d00001 diff --git a/docs/diagrams/romlib_design.png b/docs/diagrams/romlib_design.png new file mode 100755 index 0000000000000000000000000000000000000000..bfffcde7bacedf077f78339ec488b51ec16b1c23 GIT binary patch literal 17244 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 literal 0 HcmV?d00001 diff --git a/docs/diagrams/romlib_wrapper.dia b/docs/diagrams/romlib_wrapper.dia new file mode 100755 index 0000000000000000000000000000000000000000..30cfbd801033ef4fdf501d26dfb54be746793f22 GIT binary patch literal 2543 zcmVDKATLo8(2hDWUn<>qpB*B*?kpHvS<}wO=r>k&t;L{XNzfF ztEo57)4Z5GMCsM^%dPuNFPdg9UbM5P?RB(_XGI+S+1)fYAFYpRdL0+L&92sYnV2fo z)B07Fj&|(7TXmXRrKyxHufP12eW`D$x$xXp+l_XDRI8|1CfREoGd5{G5Ckbgh#3s7 zmBx}u*o?{h;by0WOHT_|oE9!AZ`OHH6;V>XhMeVj8b?`;S{3*4@i^r?N)5&Kb*o1& zZj-9Y-?;zVC@l}^Kz;f9+xFf!cUdHh{V(o|8Xc`XCX4Fs=9{PCs#|~Z)cQkGCbKkd zyZa=o25bIlnC5q%j#KaFAMeSAy0uR8uuw6N`TNbo@;+I_2a!fkanUsY+q0RTG!M8@oJlmVl7~%cYfSRlAMw0uI{U9G$`( zA5peU<7XsjkN}HI!VxfA7Kp>K$Z;C4ZsvKBz4jS~?xcfq67#yF8+l=f620{S(gW)* zPL_97HyA|>Z+{3J2UgzYk2ft2<=fV>{ms63rtty1{yqLyZ4nz9V#5H$){b7pJbT~7 z-XH;!mxLm!q_RcLq&g0`vZL~br0>+}db-XBeo=47UH)UWu4XApI-KS`mZr;X$+M~r z&|aV1Myn)!GWQi_<#bY3PgW9*oYg=2_c(ost7IN+EBE{F;MJ?s^7>$;@XHVD2l|qa z@8aY!a4&7}od`vfLe8BRQaU!AbmW9)(UA%L1SRl zzQB@$M_Lm^h~x|u0WN@2V4o=bZ@Ea(oV@7{c^|<~9n|ocguAL^ME{TEh!kv2##}O6}Y5_U++ec2^Ol zsd4i(F=qE@)jiPeQYkQF0&5{SBT{}MyDNtvHRfO+Inhk{_9rb8Lqcn1?Jk8HnK3qo zNuB#@9;~i^tJ_J*V0Fi5byZ)1Qb;Po>`X8y<#W#20MQ1BDsgF-c^xoAgetGgy+d^I z5VI?h(P1Gxh zEvus)ic`irvq?SE7$P3u5l<&6KSRU=NpjulbtZGFRjJdKRBT>ZrstkH~3O#J4WYELW z=%EQXK1LAfAc9y2976jSL@R(MYQ~Kqa_!2BjYbf|&c@RSVjCrcAdW^5^#|!;|1D=m zjj(ostRl?o!Z$$@hzpSk(e#qq4O-HbwLBL2w0dX{r$qK#H0HE%z-PV#NDGys|i(syfB6O;yDw_QC zSVZe}Tm+>$#c8ZoY6hhmqf+SsPOb=TCyNCVN;1DES2jpk6Xs5?kh-ksvB;-Bx$-p# z)Cmr*v@k>ovh;&+<6khN0Tin2-Hags*R9ApGG+K zO!}vscSy!_l9$GnX98S8H*Egnd-}PnpY0iynCA7)Ll9y9`BTq7 zv-iwDQ_s`S?dP@#>3?oZ06#aO3oz;R)D{=~oFgrmyaZ*wa=XUKso;K(Z1wHk510SU z9vqUO7^Vs^!%BXl{AYyrUrgbIvU7=;*2?Qz3X?Ss)5;Q>N#Uj^rMc{r(F1fa#nPB|^M^8<{X^5wWNXC$ zv{uYz|6~e-Us_urjg;bG4K9~8uAs-_o_Niu3>Nnk7Pp;`!RU_A=nk+|P*CP(Dj6fx zzdG3oSxu-lx*Vu*OWHzFzecxz7ekWKlNw#spVm@hRwsV&>q^!*)QG9JHdiX#r0`=Q z!DukKd)XK)?ihDz=>FQIuyi@Ei4@YSIMqN52?cHnj?o&J5h24avY<|T`55GBgz`l3 z0PrDyG&N&iZfA!~g7%Z$VVPLkP@OVxz23_*4 zOYKw)x->>z>YrScB0+$k+ut@Le1>z+K)}F+bIhjHGbN?O2!c6;P!J~XSw%az7^G>8 z(!_?4CQaOLU8V{=OOpix#2E!AP1^Bg6c^WLb;0~y7SZbZ?Ej0npo|!s F005p7;Vu9G literal 0 HcmV?d00001 diff --git a/docs/diagrams/romlib_wrapper.png b/docs/diagrams/romlib_wrapper.png new file mode 100755 index 0000000000000000000000000000000000000000..ec3a44118b71f2f31e13a4c9b81fc0b793e2ab83 GIT binary patch literal 12085 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 L+p>8wCeQvKK0#5L literal 0 HcmV?d00001 diff --git a/docs/firmware-design.rst b/docs/firmware-design.rst index 617cbb886..4f51ff1d3 100644 --- a/docs/firmware-design.rst +++ b/docs/firmware-design.rst @@ -1866,6 +1866,11 @@ BL image during boot. | MHU | 0x04000000 +----------+ +Library at ROM +--------------- + +Please refer to the `ROMLIB Design`_ document. + Firmware Image Package (FIP) ---------------------------- @@ -2662,5 +2667,6 @@ References .. _TF-A Interrupt Management Design guide: ./interrupt-framework-design.rst .. _Xlat_tables design: xlat-tables-lib-v2-design.rst .. _Exception Handling Framework: exception-handling.rst +.. _ROMLIB Design: romlib-design.rst .. |Image 1| image:: diagrams/rt-svc-descs-layout.png?raw=true diff --git a/docs/romlib-design.rst b/docs/romlib-design.rst new file mode 100644 index 000000000..34a7980be --- /dev/null +++ b/docs/romlib-design.rst @@ -0,0 +1,125 @@ +Library at ROM +============== + +.. section-numbering:: + :suffix: . + +.. contents:: + +This document provides an overview of the "library at ROM" implementation in +Trusted Firmware-A (TF-A). + +Introduction +~~~~~~~~~~~~ + +The "library at ROM" feature allows platforms to build a library of functions to +be placed in ROM. This reduces SRAM usage by utilising the available space in +ROM. The "library at ROM" contains a jump table with the list of functions that +are placed in ROM. The capabilities of the "library at ROM" are: + +1. Functions can be from one or several libraries. + +2. Functions can be patched after they have been programmed into ROM. + +3. Platform-specific libraries can be placed in ROM. + +4. Functions can be accessed by one or more BL images. + +Index file +~~~~~~~~~~ + +.. image:: diagrams/romlib_design.png + :width: 600 + +Library at ROM is described by an index file with the list of functions to be +placed in ROM. The index file is platform specific and its format is: + +:: + + lib function [patch] + + lib -- Name of the library the function belongs to + function -- Name of the function to be placed in library at ROM + [patch] -- Option to patch the function + +It is also possible to insert reserved spaces in the list by using the keyword +"reserved" rather than the "lib" and "function" names as shown below: + +:: + + reserved reserved + +The reserved spaces can be used to add more functions in the future without +affecting the order and location of functions already existing in the jump +table. Also, for additional flexibility and modularity, the index file can +include other index files. + +For an index file example, refer to ``lib/romlib/jmptbl.i``. + +Wrapper functions +~~~~~~~~~~~~~~~~~ + +.. image:: diagrams/romlib_wrapper.png + :width: 600 + +When invoking a function of the "library at ROM", the calling sequence is as +follows: + +BL image --> wrapper function --> jump table entry --> library at ROM + +The index file is used to create a jump table which is placed in ROM. Then, the +wrappers refer to the jump table to call the "library at ROM" functions. The +wrappers essentially contain a branch instruction to the jump table entry +corresponding to the original function. Finally, the original function in the BL +image(s) is replaced with the wrapper function. + +The "library at ROM" contains a necessary init function that initialises the +global variables defined by the functions inside "library at ROM". + +Scripts +~~~~~~~ + +There are several scripts that generate the necessary files for the "library at +ROM" to work: + +1. ``gentbl.sh`` - Generates the jump table by parsing the index file. + +2. ``genvar.sh`` - Generates the jump table global variable (**not** the jump +table itself) with the absolute address in ROM. This global variable is, +basically, a pointer to the jump table. + +3. ``genwrappers.sh`` - Generates a wrapper function for each entry in the index +file except for the ones that contain the keyword ``patch``. The generated +wrapper file is called ``_.S``. + +Patching of functions in library at ROM +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The ``genwrappers.sh`` script does not generate wrappers for the entries in the +index file that contain the keyword ``patch``. Thus, it allows calling the +function from the actual library by breaking the link to the "library at ROM" +version of this function. + +The calling sequence for a patched function is as follows: + +BL image --> function + +Build library at ROM +~~~~~~~~~~~~~~~~~~~~~ + +The environment variable ``CROSS_COMPILE`` must be set as per the user guide. + +:: + + make PLAT=fvp \ + MBEDTLS_DIR= \ + TRUSTED_BOARD_BOOT=1 GENERATE_COT=1 \ + ARM_ROTPK_LOCATION=devel_rsa \ + ROT_KEY=plat/arm/board/common/rotpk/arm_rotprivk_rsa.pem \ + BL33= \ + USE_ROMLIB=1 \ + all fip + +-------------- + +*Copyright (c) 2019, Arm Limited. All rights reserved.*