| .. SPDX-License-Identifier: GPL-2.0+ |
| |
| Sending patches |
| =============== |
| |
| *Before you begin* to implement any new ideas or concepts it is always a good |
| idea to present your plans on the `U-Boot mailing list |
| <https://lists.denx.de/listinfo/u-boot>`_. U-Boot supports a huge amount of |
| very different systems, and it is often impossible for the individual developer |
| to oversee the consequences of a specific change to all architectures. |
| Discussing concepts early can help you to avoid spending effort on code which, |
| when submitted as a patch, might be rejected and/or will need lots of rework |
| because it does not fit for some reason. Early peer review is an important |
| resource - use it. Being familiar with the :doc:`process` is also important. |
| |
| A good introduction how to prepare for submitting patches can be found in the |
| LWN article `How to Get Your Change Into the Linux Kernel |
| <http://lwn.net/Articles/139918/>`_ as the same rules apply to U-Boot, too. |
| |
| Using patman |
| ------------ |
| |
| You can use a tool called patman to prepare, check and send patches. It creates |
| change logs, cover letters and patch notes. It also simplifies the process of |
| sending multiple versions of a series. |
| |
| See more details at :doc:`patman`. |
| |
| General Patch Submission Rules |
| ------------------------------ |
| |
| * All patches must be sent to the `u-boot@lists.denx.de |
| <https://lists.denx.de/listinfo/u-boot>`_ mailing list. |
| |
| * If your patch affects the code maintained by one of the :ref:`custodians`, CC |
| them when emailing your patch. The easiest way to make sure you don't forget |
| this even when you resubmit the patch later is to add a ``Cc: name |
| <address>`` line after your ``Signed-off-by:`` line (see the example below). |
| |
| * Take a look at the commit logs of the files you are modifying. Authors of |
| past commits might have input to your change, so also CC them if you think |
| they may have feedback. |
| |
| * Patches should always contain exactly one complete logical change, i.e. |
| |
| * Changes that contain different, unrelated modifications shall be submitted |
| as *separate* patches, one patch per changeset. |
| |
| * If one logical set of modifications affects or creates several files, all |
| these changes shall be submitted in a *single* patch. |
| |
| * Non-functional changes, i.e. whitespace and reformatting changes, should be |
| done in separate patches marked as ``cosmetic``. This separation of functional |
| and cosmetic changes greatly facilitates the review process. |
| |
| * Some comments on running :doc:`checkpatch.pl <checkpatch>`: |
| |
| * Checkpatch is a tool that can help you find some style problems, but is |
| imperfect, and the things it complains about are of varying importance. |
| So use common sense in interpreting the results. |
| |
| * Warnings that clearly only make sense in the Linux kernel can be ignored. |
| This includes ``Use #include <linux/$file> instead of <asm/$file>`` for |
| example. |
| |
| * If you encounter warnings for existing code, not modified by your patch, |
| consider submitting a separate, cosmetic-only patch -- clearly described |
| as such -- that *precedes* your substantive patch. |
| |
| * For minor modifications (e.g. changed arguments of a function call), |
| adhere to the present coding style of the module. Relating checkpatch |
| warnings can be ignored in this case. A respective note in the commit or |
| cover letter why they are ignored is desired. |
| |
| * Send your patches as plain text messages: no HTML, no MIME, no links, no |
| compression, no attachments. Just plain text. The best way the generate |
| patches is by using the ``git format-patch`` command. Please use the |
| ``master`` branch of the mainline U-Boot git repository |
| (``https://source.denx.de/u-boot/u-boot.git``) as reference, unless (usually |
| late in a release cycle) there has been an announcement to use the ``next`` |
| branch of this repository instead. |
| |
| * Make sure that your mailer does not mangle the patch by automatic changes |
| like wrapping of longer lines etc. |
| The best way to send patches is by not using your regular mail tool, but by |
| using either ``git send-email`` or the ``git imap-send`` command instead. |
| If you believe you need to use a mailing list for testing (instead of any |
| regular mail address you own), we have a special test list for such purposes. |
| It would be best to subscribe to the list for the duration of your tests to |
| avoid repeated moderation - see https://lists.denx.de/listinfo/test |
| |
| * Choose a meaningful Subject: - keep in mind that the Subject will also be |
| visible as headline of your commit message. Make sure the subject does not |
| exceed 60 characters or so. |
| |
| * The start of the subject should be a meaningful tag (arm:, ppc:, tegra:, |
| net:, ext2:, etc) |
| |
| * Include the string "PATCH" in the Subject: line of your message, e. g. |
| "[PATCH] Add support for feature X". ``git format-patch`` should automatically |
| do this. |
| |
| * If you are sending a patch series composed of multiple patches, make sure |
| their titles clearly state the patch order and total number of patches (``git |
| format-patch -n``). Also, often times an introductory email describing what |
| the patchset does is useful (``git format-patch -n --cover-letter``). As an |
| example:: |
| |
| [PATCH 0/3] Add support for new SuperCPU2000 |
| (This email does not contain a patch, just a description) |
| [PATCH 1/3] Add core support for SuperCPU2000 |
| [PATCH 2/3] Add support for SuperCPU2000's on-chip I2C controller |
| [PATCH 3/3] Add support for SuperCPU2000's on-chip UART |
| |
| * In the message body, include a description of your changes. |
| |
| * For bug fixes: a description of the bug and how your patch fixes this bug. |
| Please try to include a way of demonstrating that the patch actually fixes |
| something. |
| |
| * For new features: a description of the feature and your implementation. |
| |
| * Additional comments which you don't want included in U-Boot's history can be |
| included below the first "---" in the message body. |
| |
| * If your description gets too long, that's a strong indication that you should |
| split up your patch. |
| |
| * Remember that there is a size limit of 100 kB on the mailing list. In most |
| cases, you did something wrong if your patch exceeds this limit. Think again |
| if you should not split it into separate logical parts. |
| |
| Attributing Code, Copyrights, Signing |
| ------------------------------------- |
| |
| * Sign your changes, i. e. add a *Signed-off-by:* line to the message body. |
| This can be automated by using ``git commit -s``. Please see the |
| :ref:`Developer Certificate of Origin <dco>` section for more details here. |
| |
| * If you change or add *significant* parts to a file, then please make sure to |
| add your copyright to that file, for example like this:: |
| |
| (C) Copyright 2010 Joe Hacker <jh@hackers.paradise.com> |
| |
| Please do *not* include a detailed description of your |
| changes. We use the *git* commit messages for this purpose. |
| |
| * If you add new files, please always make sure that these contain your |
| copyright note and a GPLv2+ SPDX-License-Identifier, for example like this:: |
| |
| (C) Copyright 2010 Joe Hacker <jh@hackers.paradise.com> |
| |
| SPDX-License-Identifier:<TAB>GPL-2.0+ |
| |
| * If you are copying or adapting code from other projects, like the Linux |
| kernel, or BusyBox, or similar, please make sure to state clearly where you |
| copied the code from, and provide terse but precise information which exact |
| version or even commit ID was used. Follow the ideas of this note from the |
| Linux "SubmittingPatches" document:: |
| |
| Special note to back-porters: It seems to be a common and useful practice |
| to insert an indication of the origin of a patch at the top of the commit |
| message (just after the subject line) to facilitate tracking. For instance, |
| here's what we see in 2.6-stable : |
| |
| Date: Tue May 13 19:10:30 2008 +0000 |
| |
| SCSI: libiscsi regression in 2.6.25: fix nop timer handling |
| |
| commit 4cf1043593db6a337f10e006c23c69e5fc93e722 upstream |
| |
| And here's what appears in 2.4 : |
| |
| Date: Tue May 13 22:12:27 2008 +0200 |
| |
| wireless, airo: waitbusy() won't delay |
| |
| [backport of 2.6 commit b7acbdfbd1f277c1eb23f344f899cfa4cd0bf36a] |
| |
| Whatever the format, this information provides a valuable help to people |
| tracking your trees, and to people trying to trouble-shoot bugs in your |
| tree. |
| |
| Commit message conventions |
| -------------------------- |
| |
| Please adhere to the following conventions when writing your commit |
| log messages. |
| |
| * The first line of the log message is the summary line. Keep this less than 70 |
| characters long. |
| |
| * Don't use periods to end the summary line (e.g., don't do "Add support for |
| X.") |
| |
| * Use the present tense in your summary line (e.g., "Add support for X" rather |
| than "Added support for X"). Furthermore, use the present tense in your log |
| message to describe what the patch is doing. This isn't a strict rule -- it's |
| OK to use the past tense for describing things that were happening in the old |
| code for example. |
| |
| * Use the imperative tense in your summary line (e.g., "Add support for X" |
| rather than "Adds support for X"). In general, you can think of the summary |
| line as "this commit is meant to 'Add support for X'" |
| |
| * If applicable, prefix the summary line with a word describing what area of |
| code is being affected followed by a colon. This is a standard adopted by |
| both U-Boot and Linux. For example, if your change affects all mpc85xx |
| boards, prefix your summary line with "mpc85xx:". If your change affects the |
| PCI common code, prefix your summary line with "pci:". The best thing to do |
| is look at the "git log <file>" output to see what others have done so you |
| don't break conventions. |
| |
| * Insert a blank line after the summary line |
| |
| * For bug fixes, it's good practice to briefly describe how things behaved |
| before this commit |
| |
| * Put a detailed description after the summary and blank line. If the summary |
| line is sufficient to describe the change (e.g. it is a trivial spelling |
| correction or whitespace update), you can omit the blank line and detailed |
| description. |
| |
| * End your log message with S.O.B. (Signed-off-by) line. This is done |
| automatically when you use ``git commit -s``. Please see the |
| :ref:`Developer Certificate of Origin <dco>` section for more details here. |
| |
| * Keep EVERY line under 72 characters. That is, your message should be |
| line-wrapped with line-feeds. However, don't get carried away and wrap it too |
| short either since this also looks funny. |
| |
| * Detail level: The audience of the commit log message that you should cater to |
| is those familiar with the underlying source code you are modifying, but who |
| are _not_ familiar with the patch you are submitting. They should be able to |
| determine what is being changed and why. Avoid excessive low-level detail. |
| Before submitting, re-read your commit log message with this audience in mind |
| and adjust as needed. |
| |
| Sending updated patch versions |
| ------------------------------ |
| |
| It is pretty normal that the first version of a patch you are submitting does |
| not get accepted as is, and that you are asked to submit another, improved |
| version. |
| |
| When re-posting such a new version of your patch(es), please always make sure |
| to observe the following rules. |
| |
| * Make an appropriate note that this is a re-submission in the subject line, |
| e.g. "[PATCH v2] Add support for feature X". ``git format-patch |
| --subject-prefix="PATCH v2"`` can be used in this case (see the example |
| below). |
| |
| * Please make sure to keep a "change log", i.e. a description of what you have |
| changed compared to previous versions of this patch. This change log should |
| be added below the "---" line in the patch, which starts the "comment |
| section", i.e. which contains text that does not get included into the |
| actual commit message. |
| Note: it is *not* sufficient to provide a change log in some cover letter |
| that gets sent as a separate message with the patch series. The reason is |
| that such cover letters are not as easily reviewed in our `patchwork queue |
| <http://patchwork.ozlabs.org/project/uboot/list/>`_ so they are not helpful |
| to any reviewers using this tool. Example:: |
| |
| From: Joe Hacker <jh@hackers.paradise.com> |
| Date: Thu, 1 Jan 2222 12:21:22 +0200 |
| Subject: [PATCH 1/2 v3] FOO: add timewarp-support |
| |
| This patch adds timewarp-support for the FOO family of processors. |
| |
| adapted for the current kernel structures. |
| |
| Signed-off-by: Joe Hacker <jh@hackers.paradise.com> |
| Cc: Tom Maintainer <tm@u-boot.custodians.org> |
| --- |
| Changes for v2: |
| - Coding Style cleanup |
| - fixed miscalculation of time-space discontinuities |
| Changes for v3: |
| - fixed compiler warnings observed with GCC-17.3.5 |
| - worked around integer overflow in warp driver |
| |
| arch/foo/cpu/spacetime.c | 8 + |
| drivers/warp/Kconfig | 7 + |
| drivers/warp/Makefile | 42 +++ |
| drivers/warp/warp-core.c | 255 +++++++++++++++++++++++++ |
| |
| * Make sure that your mailer adds or keeps correct ``In-reply-to:`` and |
| ``References:`` headers, so threading of messages is working and everybody |
| can see that the new message refers to some older posting of the same topic. |
| |
| Uncommented and un-threaded repostings are extremely annoying and |
| time-consuming, as we have to try to remember if anything similar has been |
| posted before, look up the old threads, and then manually compare if anything |
| has been changed, or what. |
| |
| If you have problems with your e-mail client, for example because it mangles |
| white space or wraps long lines, then please read this article about `Email |
| Clients and Patches <http://kerneltrap.org/Linux/Email_Clients_and_Patches>`_. |
| |
| Notes |
| ----- |
| |
| 1. U-Boot is Free Software that can redistributed and/or modified under the |
| terms of the `GNU General Public License |
| <http://www.fsf.org/licensing/licenses/gpl.html>`_ (GPL). Currently (August |
| 2022) version 2 of the GPL applies. Please see :download:`Licensing |
| <../../Licenses/README>` for details. To allow that later versions of U-Boot |
| may be released under a later version of the GPL, all new code that gets |
| added to U-Boot shall use a "GPL-2.0+" SPDX-License-Identifier. |
| |
| 2. All code must follow the :doc:`codingstyle` requirements. |
| |
| 3. Before sending the patch, you *must* run some form of local testing. |
| Submitting a patch that does not build or function correctly is a mistake. For |
| non-trivial patches, either building a number of platforms locally or making |
| use of :doc:`ci_testing` is strongly encouraged in order to avoid problems |
| that can be found when attempting to merge the patch. |
| |
| 4. If you modify existing code, make sure that your new code does not add to |
| the memory footprint of the code. Remember: Small is beautiful! When adding |
| new features follow the guidelines laid out in :doc:`system_configuration`. |
| |
| Patch Tracking |
| -------------- |
| |
| Like some other projects, U-Boot uses `Patchwork <http://patchwork.ozlabs.org/>`_ |
| to track the state of patches. This is one of the reasons why it is mandatory |
| to submit all patches to the U-Boot mailing list - only then they will be |
| picked up by patchwork. |
| |
| At http://patchwork.ozlabs.org/project/uboot/list/ you can find the list of |
| open U-Boot patches. By using the "Filters" link (Note: requires JavaScript) |
| you can also select other views, for example, to include old patches that have, |
| for example, already been applied or rejected. |
| |
| Note that Patchwork automatically tracks and collects a number of git tags from |
| follow-up mails, so it is usually better to apply a patch through the Patchwork |
| commandline interface than just manually applying it from a posting on the |
| mailing list (in which case you have to do all the tracking and adding of git |
| tags yourself). This also obviates the need of a developer to resubmit a patch |
| only in order to collect these tags. |
| |
| A Custodian has additional privileges and can: |
| |
| * **Delegate** a patch |
| |
| * **Change the state** of a patch. The following states exist: |
| |
| * New |
| |
| * Under Review |
| |
| * Accepted |
| |
| * Rejected |
| |
| * RFC |
| |
| * Not Applicable |
| |
| * Changes Requested |
| |
| * Awaiting Upstream |
| |
| * Superseeded |
| |
| * Deferred |
| |
| * Archived |
| |
| Patchwork work-flow |
| ^^^^^^^^^^^^^^^^^^^ |
| |
| The following are a "rule of thumb" as to how the states are used in patchwork |
| today. Not all states are used by all custodians. |
| |
| * New: Patch has been submitted to the list, and none of the maintainers has |
| changed it's state since. |
| |
| * Under Review: A custodian is reviewing the patch currently. |
| |
| * Accepted: When a patch has been applied to a custodian repository that gets |
| used for pulling from into upstream, they are put into "accepted" state. |
| |
| * Rejected: Rejected means we just don't want to do what the patch does. |
| |
| * RFC: The patch is not intended to be applied to any of the mainline |
| repositories, but merely for discussing or testing some idea or new feature. |
| |
| * Not Applicable: The patch either was not intended to be applied, as it was |
| a debugging or discussion aide that patchwork picked up, or was cross-posted |
| to our list but intended for another project entirely. |
| |
| * Changes Requested: The patch looks mostly OK, but requires some rework before |
| it will be accepted for mainline. |
| |
| * Awaiting Upstream: A custodian may have applied this to the ``next`` branch |
| and has not merged yet to master, or has queued the patch up to be submitted |
| to be merged, but has not yet. |
| |
| * Superseeded: Patches are marked as 'superseeded' when the poster submits a |
| new version of these patches. |
| |
| * Deferred: Deferred usually means the patch depends on something else that |
| isn't upstream, such as patches that only apply against some specific other |
| repository. This is also used when a patch has been in patchwork for over a |
| year and it is unlikely to be applied as-is. |
| |
| * Archived: Archiving puts the patch away somewhere where it doesn't appear in |
| the normal pages and needs extra effort to get to. |
| |
| Apply patches |
| ^^^^^^^^^^^^^ |
| |
| To apply a patch from the `patchwork queue |
| <http://patchwork.ozlabs.org/project/uboot/list/>`_ using ``git``, download the |
| mbox file and apply it using:: |
| |
| git am file |
| |
| The `openembedded wiki <http://wiki.openembedded.net/>`_ also provides a script |
| named `pw-am.sh |
| <http://cgit.openembedded.org/cgit.cgi/openembedded/tree/contrib/patchwork/pw-am.sh>`_ |
| which can be used to fetch an 'mbox' patch from patchwork and git am it:: |
| |
| usage: pw-am.sh <number> |
| example: 'pw-am.sh 71002' will get and apply the patch from http://patchwork.ozlabs.org/patch/71002/ |
| |
| Update the state of patches |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| |
| You have to register to be able to update the state of patches. You can use the |
| Web interface, `pwclient`, or `pwparser`. |
| |
| pwclient |
| ^^^^^^^^ |
| |
| The `pwclient` command line tool can be used for example to retrieve patches, |
| search the queue or update the state. |
| |
| All necessary information for `pwclient` is linked from the bottom of |
| http://patchwork.ozlabs.org/project/uboot/ |
| |
| Use:: |
| |
| pwclient help |
| |
| for an overview on how to use it. |
| |
| pwparser |
| ^^^^^^^^ |
| |
| See http://www.mail-archive.com/patchwork@lists.ozlabs.org/msg00057.html |