1*91f16700SchasingluluContributor's Guide 2*91f16700Schasinglulu******************* 3*91f16700Schasinglulu 4*91f16700SchasingluluGetting Started 5*91f16700Schasinglulu=============== 6*91f16700Schasinglulu 7*91f16700Schasinglulu- Make sure you have a Github account and you are logged on both 8*91f16700Schasinglulu `developer.trustedfirmware.org`_ and `review.trustedfirmware.org`_. 9*91f16700Schasinglulu 10*91f16700Schasinglulu- If you plan to contribute a major piece of work, it is usually a good idea to 11*91f16700Schasinglulu start a discussion around it on the mailing list. This gives everyone 12*91f16700Schasinglulu visibility of what is coming up, you might learn that somebody else is 13*91f16700Schasinglulu already working on something similar or the community might be able to 14*91f16700Schasinglulu provide some early input to help shaping the design of the feature. 15*91f16700Schasinglulu 16*91f16700Schasinglulu If you intend to include Third Party IP in your contribution, please mention 17*91f16700Schasinglulu it explicitly in the email thread and ensure that the changes that include 18*91f16700Schasinglulu Third Party IP are made in a separate patch (or patch series). 19*91f16700Schasinglulu 20*91f16700Schasinglulu- Clone `Trusted Firmware-A`_ on your own machine as described in 21*91f16700Schasinglulu :ref:`prerequisites_get_source`. 22*91f16700Schasinglulu 23*91f16700Schasinglulu- Create a local topic branch based on the `Trusted Firmware-A`_ ``master`` 24*91f16700Schasinglulu branch. 25*91f16700Schasinglulu 26*91f16700SchasingluluMaking Changes 27*91f16700Schasinglulu============== 28*91f16700Schasinglulu 29*91f16700Schasinglulu- Ensure commits adhere to the the project's :ref:`Commit Style`. 30*91f16700Schasinglulu 31*91f16700Schasinglulu- Make commits of logical units. See these general `Git guidelines`_ for 32*91f16700Schasinglulu contributing to a project. 33*91f16700Schasinglulu 34*91f16700Schasinglulu- Keep the commits on topic. If you need to fix another bug or make another 35*91f16700Schasinglulu enhancement, please address it on a separate topic branch. 36*91f16700Schasinglulu 37*91f16700Schasinglulu- Split the patch in manageable units. Small patches are usually easier to 38*91f16700Schasinglulu review so this will speed up the review process. 39*91f16700Schasinglulu 40*91f16700Schasinglulu- Avoid long commit series. If you do have a long series, consider whether 41*91f16700Schasinglulu some commits should be squashed together or addressed in a separate topic. 42*91f16700Schasinglulu 43*91f16700Schasinglulu- Follow the :ref:`Coding Style` and :ref:`Coding Guidelines`. 44*91f16700Schasinglulu 45*91f16700Schasinglulu - Use the checkpatch.pl script provided with the Linux source tree. A 46*91f16700Schasinglulu Makefile target is provided for convenience, see :ref:`this 47*91f16700Schasinglulu section<automatic-compliance-checking>` for more details. 48*91f16700Schasinglulu 49*91f16700Schasinglulu- Where appropriate, please update the documentation. 50*91f16700Schasinglulu 51*91f16700Schasinglulu - Consider whether the :ref:`Porting Guide`, :ref:`Firmware Design` document 52*91f16700Schasinglulu or other in-source documentation needs updating. 53*91f16700Schasinglulu 54*91f16700Schasinglulu - If you are submitting new files that you intend to be the code owner for 55*91f16700Schasinglulu (for example, a new platform port), then also update the 56*91f16700Schasinglulu :ref:`code owners` file. 57*91f16700Schasinglulu 58*91f16700Schasinglulu - For topics with multiple commits, you should make all documentation changes 59*91f16700Schasinglulu (and nothing else) in the last commit of the series. Otherwise, include 60*91f16700Schasinglulu the documentation changes within the single commit. 61*91f16700Schasinglulu 62*91f16700Schasinglulu.. _copyright-license-guidance: 63*91f16700Schasinglulu 64*91f16700Schasinglulu- Ensure that each changed file has the correct copyright and license 65*91f16700Schasinglulu information. Files that entirely consist of contributions to this project 66*91f16700Schasinglulu should have a copyright notice and BSD-3-Clause SPDX license identifier of 67*91f16700Schasinglulu the form as shown in :ref:`license`. Files that contain changes to imported 68*91f16700Schasinglulu Third Party IP files should retain their original copyright and license 69*91f16700Schasinglulu notices. 70*91f16700Schasinglulu 71*91f16700Schasinglulu For significant contributions you may add your own copyright notice in the 72*91f16700Schasinglulu following format: 73*91f16700Schasinglulu 74*91f16700Schasinglulu :: 75*91f16700Schasinglulu 76*91f16700Schasinglulu Portions copyright (c) [XXXX-]YYYY, <OWNER>. All rights reserved. 77*91f16700Schasinglulu 78*91f16700Schasinglulu where XXXX is the year of first contribution (if different to YYYY) and YYYY 79*91f16700Schasinglulu is the year of most recent contribution. <OWNER> is your name or your company 80*91f16700Schasinglulu name. 81*91f16700Schasinglulu 82*91f16700Schasinglulu- Ensure that each patch in the patch series compiles in all supported 83*91f16700Schasinglulu configurations. Patches which do not compile will not be merged. 84*91f16700Schasinglulu 85*91f16700Schasinglulu- Please test your changes. As a minimum, ensure that Linux boots on the 86*91f16700Schasinglulu Foundation FVP. See :ref:`Arm Fixed Virtual Platforms (FVP)` for more 87*91f16700Schasinglulu information. For more extensive testing, consider running the `TF-A Tests`_ 88*91f16700Schasinglulu against your patches. 89*91f16700Schasinglulu 90*91f16700Schasinglulu- Ensure that all CI automated tests pass. Failures should be fixed. They might 91*91f16700Schasinglulu block a patch, depending on how critical they are. 92*91f16700Schasinglulu 93*91f16700SchasingluluSubmitting Changes 94*91f16700Schasinglulu================== 95*91f16700Schasinglulu 96*91f16700Schasinglulu- Submit your changes for review at https://review.trustedfirmware.org 97*91f16700Schasinglulu targeting the ``integration`` branch. 98*91f16700Schasinglulu 99*91f16700Schasinglulu- Add reviewers for your patch: 100*91f16700Schasinglulu 101*91f16700Schasinglulu - At least one code owner for each module modified by the patch. See the list 102*91f16700Schasinglulu of modules and their :ref:`code owners`. 103*91f16700Schasinglulu 104*91f16700Schasinglulu - At least one maintainer. See the list of :ref:`maintainers`. 105*91f16700Schasinglulu 106*91f16700Schasinglulu - If some module has no code owner, try to identify a suitable (non-code 107*91f16700Schasinglulu owner) reviewer. Running ``git blame`` on the module's source code can 108*91f16700Schasinglulu help, as it shows who has been working the most recently on this area of 109*91f16700Schasinglulu the code. 110*91f16700Schasinglulu 111*91f16700Schasinglulu Alternatively, if it is impractical to identify such a reviewer, you might 112*91f16700Schasinglulu send an email to the `TF-A mailing list`_ to broadcast your review request 113*91f16700Schasinglulu to the community. 114*91f16700Schasinglulu 115*91f16700Schasinglulu Note that self-reviewing a patch is prohibited, even if the patch author is 116*91f16700Schasinglulu the only code owner of a module modified by the patch. Getting a second pair 117*91f16700Schasinglulu of eyes on the code is essential to keep up with the quality standards the 118*91f16700Schasinglulu project aspires to. 119*91f16700Schasinglulu 120*91f16700Schasinglulu- The changes will then undergo further review by the designated people. Any 121*91f16700Schasinglulu review comments will be made directly on your patch. This may require you to 122*91f16700Schasinglulu do some rework. For controversial changes, the discussion might be moved to 123*91f16700Schasinglulu the `TF-A mailing list`_ to involve more of the community. 124*91f16700Schasinglulu 125*91f16700Schasinglulu Refer to the `Gerrit Uploading Changes documentation`_ for more details. 126*91f16700Schasinglulu 127*91f16700Schasinglulu- The patch submission rules are the following. For a patch to be approved 128*91f16700Schasinglulu and merged in the tree, it must get: 129*91f16700Schasinglulu 130*91f16700Schasinglulu - One ``Code-Owner-Review+1`` for each of the modules modified by the patch. 131*91f16700Schasinglulu - A ``Maintainer-Review+1``. 132*91f16700Schasinglulu 133*91f16700Schasinglulu In the case where a code owner could not be found for a given module, 134*91f16700Schasinglulu ``Code-Owner-Review+1`` is substituted by ``Code-Review+1``. 135*91f16700Schasinglulu 136*91f16700Schasinglulu In addition to these various code review labels, the patch must also get a 137*91f16700Schasinglulu ``Verified+1``. This is usually set by the Continuous Integration (CI) bot 138*91f16700Schasinglulu when all automated tests passed on the patch. Sometimes, some of these 139*91f16700Schasinglulu automated tests may fail for reasons unrelated to the patch. In this case, 140*91f16700Schasinglulu the maintainers might (after analysis of the failures) override the CI bot 141*91f16700Schasinglulu score to certify that the patch has been correctly tested. 142*91f16700Schasinglulu 143*91f16700Schasinglulu In the event where the CI system lacks proper tests for a patch, the patch 144*91f16700Schasinglulu author or a reviewer might agree to perform additional manual tests 145*91f16700Schasinglulu in their review and the reviewer incorporates the review of the additional 146*91f16700Schasinglulu testing in the ``Code-Review+1`` or ``Code-Owner-Review+1`` as applicable to 147*91f16700Schasinglulu attest that the patch works as expected. Where possible additional tests should 148*91f16700Schasinglulu be added to the CI system as a follow up task. For example, for a 149*91f16700Schasinglulu platform-dependent patch where the said platform is not available in the CI 150*91f16700Schasinglulu system's board farm. 151*91f16700Schasinglulu 152*91f16700Schasinglulu- When the changes are accepted, the :ref:`maintainers` will integrate them. 153*91f16700Schasinglulu 154*91f16700Schasinglulu - Typically, the :ref:`maintainers` will merge the changes into the 155*91f16700Schasinglulu ``integration`` branch. 156*91f16700Schasinglulu 157*91f16700Schasinglulu - If the changes are not based on a sufficiently-recent commit, or if they 158*91f16700Schasinglulu cannot be automatically rebased, then the :ref:`maintainers` may rebase it 159*91f16700Schasinglulu on the ``integration`` branch or ask you to do so. 160*91f16700Schasinglulu 161*91f16700Schasinglulu - After final integration testing, the changes will make their way into the 162*91f16700Schasinglulu ``master`` branch. If a problem is found during integration, the 163*91f16700Schasinglulu :ref:`maintainers` will request your help to solve the issue. They may 164*91f16700Schasinglulu revert your patches and ask you to resubmit a reworked version of them or 165*91f16700Schasinglulu they may ask you to provide a fix-up patch. 166*91f16700Schasinglulu 167*91f16700SchasingluluAdd CI Configurations 168*91f16700Schasinglulu===================== 169*91f16700Schasinglulu 170*91f16700Schasinglulu- TF-A uses Jenkins tool for Continuous Integration and testing activities. 171*91f16700Schasinglulu Various CI Jobs are deployed which run tests on every patch before being 172*91f16700Schasinglulu merged. So each of your patches go through a series of checks before they 173*91f16700Schasinglulu get merged on to the master branch. Kindly ensure, that everytime you add 174*91f16700Schasinglulu new files under your platform, they are covered under the following two sections: 175*91f16700Schasinglulu 176*91f16700SchasingluluCoverity Scan 177*91f16700Schasinglulu------------- 178*91f16700Schasinglulu 179*91f16700Schasinglulu- ``Coverity Scan analysis`` is one of the tests we perform on our source code 180*91f16700Schasinglulu at regular intervals. We maintain a build script ``tf-cov-make`` which contains the 181*91f16700Schasinglulu build configurations of various platforms in order to cover the entire source 182*91f16700Schasinglulu code being analysed by Coverity. 183*91f16700Schasinglulu 184*91f16700Schasinglulu- When you submit your patches for review containing new source files, please 185*91f16700Schasinglulu ensure to include them for the ``Coverity Scan analysis`` by adding the 186*91f16700Schasinglulu respective build configurations in the ``tf-cov-make`` build script. 187*91f16700Schasinglulu 188*91f16700Schasinglulu- In this section you find the details on how to append your new build 189*91f16700Schasinglulu configurations for Coverity scan analysis illustrated with examples: 190*91f16700Schasinglulu 191*91f16700Schasinglulu#. We maintain a separate repository named `tf-a-ci-scripts repository`_ 192*91f16700Schasinglulu for placing all the test scripts which will be executed by the CI Jobs. 193*91f16700Schasinglulu 194*91f16700Schasinglulu#. In this repository, ``tf-cov-make`` script is located at 195*91f16700Schasinglulu ``tf-a-ci-scripts/script/tf-coverity/tf-cov-make`` 196*91f16700Schasinglulu 197*91f16700Schasinglulu#. Edit `tf-cov-make`_ script by appending all the possible build configurations with 198*91f16700Schasinglulu the specific ``build-flags`` relevant to your platform, so that newly added 199*91f16700Schasinglulu source files get built and analysed by Coverity. 200*91f16700Schasinglulu 201*91f16700Schasinglulu#. For better understanding follow the below specified examples listed in the 202*91f16700Schasinglulu ``tf-cov-make`` script. 203*91f16700Schasinglulu 204*91f16700Schasinglulu.. code:: shell 205*91f16700Schasinglulu 206*91f16700Schasinglulu Example 1: 207*91f16700Schasinglulu #Intel 208*91f16700Schasinglulu make PLAT=stratix10 $(common_flags) all 209*91f16700Schasinglulu make PLAT=agilex $(common_flags) all 210*91f16700Schasinglulu 211*91f16700Schasinglulu- In the above example there are two different SoCs ``stratix`` and ``agilex`` 212*91f16700Schasinglulu under the Intel platform and the build configurations has been added suitably 213*91f16700Schasinglulu to include most of their source files. 214*91f16700Schasinglulu 215*91f16700Schasinglulu.. code:: shell 216*91f16700Schasinglulu 217*91f16700Schasinglulu Example 2: 218*91f16700Schasinglulu #Hikey 219*91f16700Schasinglulu make PLAT=hikey $(common_flags) ${TBB_OPTIONS} ENABLE_PMF=1 all 220*91f16700Schasinglulu make PLAT=hikey960 $(common_flags) ${TBB_OPTIONS} all 221*91f16700Schasinglulu make PLAT=poplar $(common_flags) all 222*91f16700Schasinglulu 223*91f16700Schasinglulu- In this case for ``Hikey`` boards additional ``build-flags`` has been included 224*91f16700Schasinglulu along with the ``commom_flags`` to cover most of the files relevant to it. 225*91f16700Schasinglulu 226*91f16700Schasinglulu- Similar to this you can still find many other different build configurations 227*91f16700Schasinglulu of various other platforms listed in the ``tf-cov-make`` script. Kindly refer 228*91f16700Schasinglulu them and append your build configurations respectively. 229*91f16700Schasinglulu 230*91f16700SchasingluluTest Build Configuration (``tf-l1-build-plat``) 231*91f16700Schasinglulu----------------------------------------------- 232*91f16700Schasinglulu 233*91f16700Schasinglulu- Coverity Scan analysis, runs on a daily basis and will not be triggered for 234*91f16700Schasinglulu every individual trusted-firmware patch. 235*91f16700Schasinglulu 236*91f16700Schasinglulu- Considering this, we have other distinguished CI jobs which run a set of test 237*91f16700Schasinglulu configurations on every patch, before they are being passed to ``Coverity scan analysis``. 238*91f16700Schasinglulu 239*91f16700Schasinglulu- ``tf-l1-build-plat`` is the test group, which holds the test configurations 240*91f16700Schasinglulu to build all the platforms. So be kind enough to verify that your newly added 241*91f16700Schasinglulu files are built as part of one of the existing platform configurations present 242*91f16700Schasinglulu in ``tf-l1-build-plat`` test group. 243*91f16700Schasinglulu 244*91f16700Schasinglulu- In this section you find the details on how to add the appropriate files, 245*91f16700Schasinglulu needed to build your newly introduced platform as part of ``tf-l1-build-plat`` 246*91f16700Schasinglulu test group, illustrated with an example: 247*91f16700Schasinglulu 248*91f16700Schasinglulu- Lets consider ``Hikey`` platform: 249*91f16700Schasinglulu In the `tf-a-ci-scripts repository`_ we need to add a build configuration file ``hikey-default`` 250*91f16700Schasinglulu under tf_config folder, ``tf_config/hikey-default`` listing all the build parameters 251*91f16700Schasinglulu relevant to it. 252*91f16700Schasinglulu 253*91f16700Schasinglulu.. code:: shell 254*91f16700Schasinglulu 255*91f16700Schasinglulu #Hikey Build Parameters 256*91f16700Schasinglulu CROSS_COMPILE=aarch64-none-elf- 257*91f16700Schasinglulu PLAT=hikey 258*91f16700Schasinglulu 259*91f16700Schasinglulu- Further a test-configuration file ``hikey-default:nil`` need to be added under the 260*91f16700Schasinglulu test group, ``tf-l1-build-plat`` located at ``tf-a-ci-scripts/group/tf-l1-build-plat``, 261*91f16700Schasinglulu to allow the platform to be built as part of this group. 262*91f16700Schasinglulu 263*91f16700Schasinglulu.. code:: shell 264*91f16700Schasinglulu 265*91f16700Schasinglulu # 266*91f16700Schasinglulu # Copyright (c) 2019-2022 Arm Limited. All rights reserved. 267*91f16700Schasinglulu # 268*91f16700Schasinglulu # SPDX-License-Identifier: BSD-3-Clause 269*91f16700Schasinglulu # 270*91f16700Schasinglulu 271*91f16700Schasinglulu- As illustrated above, you need to add the similar files supporting your platform. 272*91f16700Schasinglulu 273*91f16700SchasingluluBinary Components 274*91f16700Schasinglulu================= 275*91f16700Schasinglulu 276*91f16700Schasinglulu- Platforms may depend on binary components submitted to the `Trusted Firmware 277*91f16700Schasinglulu binary repository`_ if they require code that the contributor is unable or 278*91f16700Schasinglulu unwilling to open-source. This should be used as a rare exception. 279*91f16700Schasinglulu- All binary components must follow the contribution guidelines (in particular 280*91f16700Schasinglulu licensing rules) outlined in the `readme.rst <tf-binaries-readme_>`_ file of 281*91f16700Schasinglulu the binary repository. 282*91f16700Schasinglulu- Binary components must be restricted to only the specific functionality that 283*91f16700Schasinglulu cannot be open-sourced and must be linked into a larger open-source platform 284*91f16700Schasinglulu port. The majority of the platform port must still be implemented in open 285*91f16700Schasinglulu source. Platform ports that are merely a thin wrapper around a binary 286*91f16700Schasinglulu component that contains all the actual code will not be accepted. 287*91f16700Schasinglulu- Only platform port code (i.e. in the ``plat/<vendor>`` directory) may rely on 288*91f16700Schasinglulu binary components. Generic code must always be fully open-source. 289*91f16700Schasinglulu 290*91f16700Schasinglulu-------------- 291*91f16700Schasinglulu 292*91f16700Schasinglulu*Copyright (c) 2013-2022, Arm Limited and Contributors. All rights reserved.* 293*91f16700Schasinglulu 294*91f16700Schasinglulu.. _developer.trustedfirmware.org: https://developer.trustedfirmware.org 295*91f16700Schasinglulu.. _review.trustedfirmware.org: https://review.trustedfirmware.org 296*91f16700Schasinglulu.. _Trusted Firmware-A: https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git 297*91f16700Schasinglulu.. _Git guidelines: http://git-scm.com/book/ch5-2.html 298*91f16700Schasinglulu.. _Gerrit Uploading Changes documentation: https://review.trustedfirmware.org/Documentation/user-upload.html 299*91f16700Schasinglulu.. _TF-A Tests: https://trustedfirmware-a-tests.readthedocs.io 300*91f16700Schasinglulu.. _Trusted Firmware binary repository: https://review.trustedfirmware.org/admin/repos/tf-binaries 301*91f16700Schasinglulu.. _tf-binaries-readme: https://git.trustedfirmware.org/tf-binaries.git/tree/readme.rst 302*91f16700Schasinglulu.. _TF-A mailing list: https://lists.trustedfirmware.org/mailman3/lists/tf-a.lists.trustedfirmware.org/ 303*91f16700Schasinglulu.. _tf-a-ci-scripts repository: https://git.trustedfirmware.org/ci/tf-a-ci-scripts.git/ 304*91f16700Schasinglulu.. _tf-cov-make: https://git.trustedfirmware.org/ci/tf-a-ci-scripts.git/tree/script/tf-coverity/tf-cov-make 305