xref: /aosp_15_r20/external/arm-trusted-firmware/docs/process/contributing.rst (revision 54fd6939e177f8ff529b10183254802c76df6d08)
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