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