doc: fix typos
[platform/kernel/u-boot.git] / doc / develop / sending_patches.rst
1 .. SPDX-License-Identifier: GPL-2.0+
2
3 Sending patches
4 ===============
5
6 *Before you begin* to implement any new ideas or concepts it is always a good
7 idea to present your plans on the `U-Boot mailing list
8 <https://lists.denx.de/listinfo/u-boot>`_. U-Boot supports a huge amount of
9 very different systems, and it is often impossible for the individual developer
10 to oversee the consequences of a specific change to all architectures.
11 Discussing concepts early can help you to avoid spending effort on code which,
12 when submitted as a patch, might be rejected and/or will need lots of rework
13 because it does not fit for some reason. Early peer review is an important
14 resource - use it. Being familiar with the :doc:`process` is also important.
15
16 A good introduction how to prepare for submitting patches can be found in the
17 LWN article `How to Get Your Change Into the Linux Kernel
18 <http://lwn.net/Articles/139918/>`_ as the same rules apply to U-Boot, too.
19
20 Using patman
21 ------------
22
23 You can use a tool called patman to prepare, check and send patches. It creates
24 change logs, cover letters and patch notes. It also simplifies the process of
25 sending multiple versions of a series.
26
27 See more details at :doc:`patman`.
28
29 General Patch Submission Rules
30 ------------------------------
31
32 * All patches must be sent to the `u-boot@lists.denx.de
33   <https://lists.denx.de/listinfo/u-boot>`_ mailing list.
34
35 * If your patch affects the code maintained by one of the :ref:`custodians`, CC
36   them when emailing your patch. The easiest way to make sure you don't forget
37   this even when you resubmit the patch later is to add a ``Cc: name
38   <address>`` line after your ``Signed-off-by:`` line (see the example below).
39
40 * Take a look at the commit logs of the files you are modifying. Authors of
41   past commits might have input to your change, so also CC them if you think
42   they may have feedback.
43
44 * Patches should always contain exactly one complete logical change, i.e.
45
46    * Changes that contain different, unrelated modifications shall be submitted
47      as *separate* patches, one patch per changeset.
48
49    * If one logical set of modifications affects or creates several files, all
50      these changes shall be submitted in a *single* patch.
51
52 * Non-functional changes, i.e. whitespace and reformatting changes, should be
53   done in separate patches marked as ``cosmetic``. This separation of functional
54   and cosmetic changes greatly facilitates the review process.
55
56 * Some comments on running :doc:`checkpatch.pl <checkpatch>`:
57
58    * Checkpatch is a tool that can help you find some style problems, but is
59      imperfect, and the things it complains about are of varying importance.
60      So use common sense in interpreting the results.
61
62    * Warnings that clearly only make sense in the Linux kernel can be ignored.
63      This includes ``Use #include <linux/$file> instead of <asm/$file>`` for
64      example.
65
66    * If you encounter warnings for existing code, not modified by your patch,
67      consider submitting a separate, cosmetic-only patch -- clearly described
68      as such -- that *precedes* your substantive patch.
69
70    * For minor modifications (e.g. changed arguments of a function call),
71      adhere to the present coding style of the module. Relating checkpatch
72      warnings can be ignored in this case. A respective note in the commit or
73      cover letter why they are ignored is desired.
74
75 * Send your patches as plain text messages: no HTML, no MIME, no links, no
76   compression, no attachments. Just plain text. The best way the generate
77   patches is by using the ``git format-patch`` command. Please use the
78   ``master`` branch of the mainline U-Boot git repository
79   (``https://source.denx.de/u-boot/u-boot.git``) as reference, unless (usually
80   late in a release cycle) there has been an announcement to use the ``next``
81   branch of this repository instead.
82
83 * Make sure that your mailer does not mangle the patch by automatic changes
84   like wrapping of longer lines etc.
85   The best way to send patches is by not using your regular mail tool, but by
86   using either ``git send-email`` or the ``git imap-send`` command instead.
87   If you believe you need to use a mailing list for testing (instead of any
88   regular mail address you own), we have a special test list for such purposes.
89   It would be best to subscribe to the list for the duration of your tests to
90   avoid repeated moderation - see https://lists.denx.de/listinfo/test
91
92 * Choose a meaningful Subject: - keep in mind that the Subject will also be
93   visible as headline of your commit message. Make sure the subject does not
94   exceed 60 characters or so.
95
96 * The start of the subject should be a meaningful tag (arm:, ppc:, tegra:,
97   net:, ext2:, etc)
98
99 * Include the string "PATCH" in the Subject: line of your message, e. g.
100   "[PATCH] Add support for feature X". ``git format-patch`` should automatically
101   do this.
102
103 * If you are sending a patch series composed of multiple patches, make sure
104   their titles clearly state the patch order and total number of patches (``git
105   format-patch -n``). Also, often times an introductory email describing what
106   the patchset does is useful (``git format-patch -n --cover-letter``). As an
107   example::
108
109    [PATCH 0/3] Add support for new SuperCPU2000
110       (This email does not contain a patch, just a description)
111    [PATCH 1/3] Add core support for SuperCPU2000
112    [PATCH 2/3] Add support for SuperCPU2000's on-chip I2C controller
113    [PATCH 3/3] Add support for SuperCPU2000's on-chip UART
114
115 * In the message body, include a description of your changes.
116
117    * For bug fixes: a description of the bug and how your patch fixes this bug.
118      Please try to include a way of demonstrating that the patch actually fixes
119      something.
120
121    * For new features: a description of the feature and your implementation.
122
123 * Additional comments which you don't want included in U-Boot's history can be
124   included below the first "---" in the message body.
125
126 * If your description gets too long, that's a strong indication that you should
127   split up your patch.
128
129 * Remember that there is a size limit of 100 kB on the mailing list. In most
130   cases, you did something wrong if your patch exceeds this limit. Think again
131   if you should not split it into separate logical parts.
132
133 Attributing Code, Copyrights, Signing
134 -------------------------------------
135
136 * Sign your changes, i. e. add a *Signed-off-by:* line to the message body.
137   This can be automated by using ``git commit -s``. Please see the
138   :ref:`Developer Certificate of Origin <dco>` section for more details here.
139
140 * If you change or add *significant* parts to a file, then please make sure to
141   add your copyright to that file, for example like this::
142
143    (C) Copyright 2010  Joe Hacker <jh@hackers.paradise.com>
144
145           Please do *not* include a detailed description of your
146           changes. We use the *git* commit messages for this purpose.
147
148 * If you add new files, please always make sure that these contain your
149   copyright note and a GPLv2+ SPDX-License-Identifier, for example like this::
150
151    (C) Copyright 2010  Joe Hacker <jh@hackers.paradise.com>
152
153    SPDX-License-Identifier:<TAB>GPL-2.0+
154
155 * If you are copying or adapting code from other projects, like the Linux
156   kernel, or BusyBox, or similar, please make sure to state clearly where you
157   copied the code from, and provide terse but precise information which exact
158   version or even commit ID was used. Follow the ideas of this note from the
159   Linux "SubmittingPatches" document::
160
161    Special note to back-porters: It seems to be a common and useful practice
162    to insert an indication of the origin of a patch at the top of the commit
163    message (just after the subject line) to facilitate tracking. For instance,
164    here's what we see in 2.6-stable :
165
166          Date:  Tue May 13 19:10:30 2008 +0000
167
168                   SCSI: libiscsi regression in 2.6.25: fix nop timer handling
169
170                   commit 4cf1043593db6a337f10e006c23c69e5fc93e722 upstream
171
172    And here's what appears in 2.4 :
173
174          Date:  Tue May 13 22:12:27 2008 +0200
175
176                   wireless, airo: waitbusy() won't delay
177
178                   [backport of 2.6 commit b7acbdfbd1f277c1eb23f344f899cfa4cd0bf36a]
179
180 Whatever the format, this information provides a valuable help to people
181 tracking your trees, and to people trying to trouble-shoot bugs in your
182 tree.
183
184 Commit message conventions
185 --------------------------
186
187 Please adhere to the following conventions when writing your commit
188 log messages.
189
190 * The first line of the log message is the summary line. Keep this less than 70
191   characters long.
192
193 * Don't use periods to end the summary line (e.g., don't do "Add support for
194   X.")
195
196 * Use the present tense in your summary line (e.g., "Add support for X" rather
197   than "Added support for X"). Furthermore, use the present tense in your log
198   message to describe what the patch is doing. This isn't a strict rule -- it's
199   OK to use the past tense for describing things that were happening in the old
200   code for example.
201
202 * Use the imperative tense in your summary line (e.g., "Add support for X"
203   rather than "Adds support for X"). In general, you can think of the summary
204   line as "this commit is meant to 'Add support for X'"
205
206 * If applicable, prefix the summary line with a word describing what area of
207   code is being affected followed by a colon. This is a standard adopted by
208   both U-Boot and Linux. For example, if your change affects all mpc85xx
209   boards, prefix your summary line with "mpc85xx:". If your change affects the
210   PCI common code, prefix your summary line with "pci:". The best thing to do
211   is look at the "git log <file>" output to see what others have done so you
212   don't break conventions.
213
214 * Insert a blank line after the summary line
215
216 * For bug fixes, it's good practice to briefly describe how things behaved
217   before this commit
218
219 * Put a detailed description after the summary and blank line. If the summary
220   line is sufficient to describe the change (e.g. it is a trivial spelling
221   correction or whitespace update), you can omit the blank line and detailed
222   description.
223
224 * End your log message with S.O.B. (Signed-off-by) line. This is done
225   automatically when you use ``git commit -s``. Please see the
226   :ref:`Developer Certificate of Origin <dco>` section for more details here.
227
228 * Keep EVERY line under 72 characters. That is, your message should be
229   line-wrapped with line-feeds. However, don't get carried away and wrap it too
230   short either since this also looks funny.
231
232 * Detail level: The audience of the commit log message that you should cater to
233   is those familiar with the underlying source code you are modifying, but who
234   are _not_ familiar with the patch you are submitting. They should be able to
235   determine what is being changed and why. Avoid excessive low-level detail.
236   Before submitting, re-read your commit log message with this audience in mind
237   and adjust as needed.
238
239 Sending updated patch versions
240 ------------------------------
241
242 It is pretty normal that the first version of a patch you are submitting does
243 not get accepted as is, and that you are asked to submit another, improved
244 version.
245
246 When re-posting such a new version of your patch(es), please always make sure
247 to observe the following rules.
248
249 * Make an appropriate note that this is a re-submission in the subject line,
250   e.g. "[PATCH v2] Add support for feature X". ``git format-patch
251   --subject-prefix="PATCH v2"`` can be used in this case (see the example
252   below).
253
254 * Please make sure to keep a "change log", i.e. a description of what you have
255   changed compared to previous versions of this patch. This change log should
256   be added below the "---" line in the patch, which starts the "comment
257   section", i.e. which contains text that does not get included into the
258   actual commit message.
259   Note: it is *not* sufficient to provide a change log in some cover letter
260   that gets sent as a separate message with the patch series. The reason is
261   that such cover letters are not as easily reviewed in our `patchwork queue
262   <http://patchwork.ozlabs.org/project/uboot/list/>`_ so they are not helpful
263   to any reviewers using this tool. Example::
264
265    From: Joe Hacker <jh@hackers.paradise.com>
266    Date: Thu, 1 Jan 2222 12:21:22 +0200
267    Subject: [PATCH 1/2 v3] FOO: add timewarp-support
268
269    This patch adds timewarp-support for the FOO family of processors.
270
271    adapted for the current kernel structures.
272
273    Signed-off-by: Joe Hacker <jh@hackers.paradise.com>
274    Cc: Tom Maintainer <tm@u-boot.custodians.org>
275    ---
276    Changes for v2:
277    - Coding Style cleanup
278    - fixed miscalculation of time-space discontinuities
279    Changes for v3:
280    - fixed compiler warnings observed with GCC-17.3.5
281    - worked around integer overflow in warp driver
282
283     arch/foo/cpu/spacetime.c |   8 +
284     drivers/warp/Kconfig     |   7 +
285     drivers/warp/Makefile    |  42 +++
286     drivers/warp/warp-core.c | 255 +++++++++++++++++++++++++
287
288 * Make sure that your mailer adds or keeps correct ``In-reply-to:`` and
289   ``References:`` headers, so threading of messages is working and everybody
290   can see that the new message refers to some older posting of the same topic.
291
292 Uncommented and un-threaded repostings are extremely annoying and
293 time-consuming, as we have to try to remember if anything similar has been
294 posted before, look up the old threads, and then manually compare if anything
295 has been changed, or what.
296
297 If you have problems with your e-mail client, for example because it mangles
298 white space or wraps long lines, then please read this article about `Email
299 Clients and Patches <http://kerneltrap.org/Linux/Email_Clients_and_Patches>`_.
300
301 Notes
302 -----
303
304 1. U-Boot is Free Software that can redistributed and/or modified under the
305    terms of the `GNU General Public License
306    <http://www.fsf.org/licensing/licenses/gpl.html>`_ (GPL). Currently (August
307    2022) version 2 of the GPL applies. Please see :download:`Licensing
308    <../../Licenses/README>` for details. To allow that later versions of U-Boot
309    may be released under a later version of the GPL, all new code that gets
310    added to U-Boot shall use a "GPL-2.0+" SPDX-License-Identifier.
311
312 2. All code must follow the :doc:`codingstyle` requirements.
313
314 3. Before sending the patch, you *must* run some form of local testing.
315    Submitting a patch that does not build or function correctly is a mistake. For
316    non-trivial patches, either building a number of platforms locally or making
317    use of :doc:`ci_testing` is strongly encouraged in order to avoid problems
318    that can be found when attempting to merge the patch.
319
320 4. If you modify existing code, make sure that your new code does not add to
321    the memory footprint of the code. Remember: Small is beautiful! When adding
322    new features follow the guidelines laid out in :doc:`system_configuration`.
323
324 Patch Tracking
325 --------------
326
327 Like some other projects, U-Boot uses `Patchwork <http://patchwork.ozlabs.org/>`_
328 to track the state of patches. This is one of the reasons why it is mandatory
329 to submit all patches to the U-Boot mailing list - only then they will be
330 picked up by patchwork.
331
332 At http://patchwork.ozlabs.org/project/uboot/list/ you can find the list of
333 open U-Boot patches. By using the "Filters" link (Note: requires JavaScript)
334 you can also select other views, for example, to include old patches that have,
335 for example, already been applied or rejected.
336
337 Note that Patchwork automatically tracks and collects a number of git tags from
338 follow-up mails, so it is usually better to apply a patch through the Patchwork
339 commandline interface than just manually applying it from a posting on the
340 mailing list (in which case you have to do all the tracking and adding of git
341 tags yourself). This also obviates the need of a developer to resubmit a patch
342 only in order to collect these tags.
343
344 A Custodian has additional privileges and can:
345
346 * **Delegate** a patch
347
348 * **Change the state** of a patch. The following states exist:
349
350    * New
351
352    * Under Review
353
354    * Accepted
355
356    * Rejected
357
358    * RFC
359
360    * Not Applicable
361
362    * Changes Requested
363
364    * Awaiting Upstream
365
366    * Superseeded
367
368    * Deferred
369
370    * Archived
371
372 Patchwork work-flow
373 ^^^^^^^^^^^^^^^^^^^
374
375 The following are a "rule of thumb" as to how the states are used in patchwork
376 today. Not all states are used by all custodians.
377
378 * New: Patch has been submitted to the list, and none of the maintainers has
379   changed it's state since.
380
381 * Under Review: A custodian is reviewing the patch currently.
382
383 * Accepted: When a patch has been applied to a custodian repository that gets
384   used for pulling from into upstream, they are put into "accepted" state.
385
386 * Rejected: Rejected means we just don't want to do what the patch does.
387
388 * RFC: The patch is not intended to be applied to any of the mainline
389   repositories, but merely for discussing or testing some idea or new feature.
390
391 * Not Applicable: The patch either was not intended to be applied, as it was
392   a debugging or discussion aide that patchwork picked up, or was cross-posted
393   to our list but intended for another project entirely.
394
395 * Changes Requested: The patch looks mostly OK, but requires some rework before
396   it will be accepted for mainline.
397
398 * Awaiting Upstream: A custodian may have applied this to the ``next`` branch
399   and has not merged yet to master, or has queued the patch up to be submitted
400   to be merged, but has not yet.
401
402 * Superseeded: Patches are marked as 'superseeded' when the poster submits a
403   new version of these patches.
404
405 * Deferred: Deferred usually means the patch depends on something else that
406   isn't upstream, such as patches that only apply against some specific other
407   repository. This is also used when a patch has been in patchwork for over a
408   year and it is unlikely to be applied as-is.
409
410 * Archived: Archiving puts the patch away somewhere where it doesn't appear in
411   the normal pages and needs extra effort to get to.
412
413 Apply patches
414 ^^^^^^^^^^^^^
415
416 To apply a patch from the `patchwork queue
417 <http://patchwork.ozlabs.org/project/uboot/list/>`_ using ``git``, download the
418 mbox file and apply it using::
419
420    git am file
421
422 The `openembedded wiki <http://wiki.openembedded.net/>`_ also provides a script
423 named `pw-am.sh
424 <http://cgit.openembedded.org/cgit.cgi/openembedded/tree/contrib/patchwork/pw-am.sh>`_
425 which can be used to fetch an 'mbox' patch from patchwork and git am it::
426
427    usage: pw-am.sh <number>
428    example: 'pw-am.sh 71002' will get and apply the patch from http://patchwork.ozlabs.org/patch/71002/
429
430 Update the state of patches
431 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
432
433 You have to register to be able to update the state of patches. You can use the
434 Web interface, `pwclient`, or `pwparser`.
435
436 pwclient
437 ^^^^^^^^
438
439 The `pwclient` command line tool can be used for example to retrieve patches,
440 search the queue or update the state.
441
442 All necessary information for `pwclient` is linked from the bottom of
443 http://patchwork.ozlabs.org/project/uboot/
444
445 Use::
446
447    pwclient help
448
449 for an overview on how to use it.
450
451 pwparser
452 ^^^^^^^^
453
454 See http://www.mail-archive.com/patchwork@lists.ozlabs.org/msg00057.html