public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* [edk2-non-osi][PATCH 0/2] Add prerequisite binary files for RPi4 platform
@ 2019-12-11 11:23 Pete Batard
  2019-12-11 11:23 ` [edk2-non-osi][PATCH 1/2] Platforms/RPi4: Add Device Tree Pete Batard
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Pete Batard @ 2019-12-11 11:23 UTC (permalink / raw)
  To: devel; +Cc: ard.biesheuvel, leif.lindholm, philmd

This series of patches adds the binaries we need available to introduce
Raspberry Pi 4 support.

Similar to the Pi 3, we must have TF-A and Device Tree binaries we can embed.

Pete Batard (2):
  Platforms/RPi4: Add Device Tree
  Platforms/RPi4: Add Trusted Firmware binaries

 Platform/RaspberryPi/RPi4/DeviceTree/License.txt            | 340 ++++++++++++++++++++
 Platform/RaspberryPi/RPi4/DeviceTree/Readme.md              |  13 +
 Platform/RaspberryPi/RPi4/DeviceTree/bcm2711-rpi-4-b.dtb    | Bin 0 -> 40697 bytes
 Platform/RaspberryPi/RPi4/TrustedFirmware/License.txt       |  26 ++
 Platform/RaspberryPi/RPi4/TrustedFirmware/Readme.md         |  12 +
 Platform/RaspberryPi/RPi4/TrustedFirmware/bl31_miniuart.bin | Bin 0 -> 41072 bytes
 Platform/RaspberryPi/RPi4/TrustedFirmware/bl31_pl011.bin    | Bin 0 -> 41072 bytes
 7 files changed, 391 insertions(+)
 create mode 100644 Platform/RaspberryPi/RPi4/DeviceTree/License.txt
 create mode 100644 Platform/RaspberryPi/RPi4/DeviceTree/Readme.md
 create mode 100644 Platform/RaspberryPi/RPi4/DeviceTree/bcm2711-rpi-4-b.dtb
 create mode 100644 Platform/RaspberryPi/RPi4/TrustedFirmware/License.txt
 create mode 100644 Platform/RaspberryPi/RPi4/TrustedFirmware/Readme.md
 create mode 100644 Platform/RaspberryPi/RPi4/TrustedFirmware/bl31_miniuart.bin
 create mode 100644 Platform/RaspberryPi/RPi4/TrustedFirmware/bl31_pl011.bin

-- 
2.21.0.windows.1


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [edk2-non-osi][PATCH 1/2] Platforms/RPi4: Add Device Tree
  2019-12-11 11:23 [edk2-non-osi][PATCH 0/2] Add prerequisite binary files for RPi4 platform Pete Batard
@ 2019-12-11 11:23 ` Pete Batard
  2019-12-11 11:24 ` [edk2-non-osi][PATCH 2/2] Platforms/RPi4: Add Trusted Firmware binaries Pete Batard
  2019-12-11 14:13 ` [edk2-non-osi][PATCH 0/2] Add prerequisite binary files for RPi4 platform Ard Biesheuvel
  2 siblings, 0 replies; 6+ messages in thread
From: Pete Batard @ 2019-12-11 11:23 UTC (permalink / raw)
  To: devel; +Cc: ard.biesheuvel, leif.lindholm, philmd

Similar to what is the case with the Raspberry Pi 3, the Raspberry Pi 4
UEFI firmware requires a binary Device Tree for the Broadcom 2711 SoC.

This patch adds the most up to date Device Tree binary, as published
with commit 601d36df3aa541560e4cf9b571105d20db2b4b7c from
https://github.com/raspberrypi/firmware/tree/master/boot

Signed-off-by: Pete Batard <pete@akeo.ie>
---
 Platform/RaspberryPi/RPi4/DeviceTree/License.txt         | 340 ++++++++++++++++++++
 Platform/RaspberryPi/RPi4/DeviceTree/Readme.md           |  13 +
 Platform/RaspberryPi/RPi4/DeviceTree/bcm2711-rpi-4-b.dtb | Bin 0 -> 40697 bytes
 3 files changed, 353 insertions(+)

diff --git a/Platform/RaspberryPi/RPi4/DeviceTree/License.txt b/Platform/RaspberryPi/RPi4/DeviceTree/License.txt
new file mode 100644
index 000000000000..1603937dad82
--- /dev/null
+++ b/Platform/RaspberryPi/RPi4/DeviceTree/License.txt
@@ -0,0 +1,340 @@
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                       51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                            NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/Platform/RaspberryPi/RPi4/DeviceTree/Readme.md b/Platform/RaspberryPi/RPi4/DeviceTree/Readme.md
new file mode 100644
index 000000000000..923dd1aa675e
--- /dev/null
+++ b/Platform/RaspberryPi/RPi4/DeviceTree/Readme.md
@@ -0,0 +1,13 @@
+Device Tree for Raspberry Pi 4
+==============================
+
+This directory contains a copy of the official Device Tree for the
+Raspberry Pi 4 as published by the Raspberry Pi Foundation at
+https://github.com/raspberrypi/firmware/tree/master/boot.
+
+Especially, the dtb found in this directory is an exact copy of
+the one updated by the Raspberry Pi Foundation with commit
+`601d36df3aa541560e4cf9b571105d20db2b4b7c`.
+
+As per [the Foundation's Readme](https://github.com/raspberrypi/firmware/blob/master/README.md),
+the license that applies to these files is the GPLv2.
diff --git a/Platform/RaspberryPi/RPi4/DeviceTree/bcm2711-rpi-4-b.dtb b/Platform/RaspberryPi/RPi4/DeviceTree/bcm2711-rpi-4-b.dtb
new file mode 100644
index 0000000000000000000000000000000000000000..8b7b1f58bf2ed4fcb12da5fcde6814927816764e
GIT binary patch
literal 40697
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
F|3CdZd9wfj

literal 0
HcmV?d00001

-- 
2.21.0.windows.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [edk2-non-osi][PATCH 2/2] Platforms/RPi4: Add Trusted Firmware binaries
  2019-12-11 11:23 [edk2-non-osi][PATCH 0/2] Add prerequisite binary files for RPi4 platform Pete Batard
  2019-12-11 11:23 ` [edk2-non-osi][PATCH 1/2] Platforms/RPi4: Add Device Tree Pete Batard
@ 2019-12-11 11:24 ` Pete Batard
  2019-12-11 14:14   ` Leif Lindholm
  2019-12-11 14:13 ` [edk2-non-osi][PATCH 0/2] Add prerequisite binary files for RPi4 platform Ard Biesheuvel
  2 siblings, 1 reply; 6+ messages in thread
From: Pete Batard @ 2019-12-11 11:24 UTC (permalink / raw)
  To: devel; +Cc: ard.biesheuvel, leif.lindholm, philmd

Similar to what is the case with the Raspberry Pi 3, the Raspberry Pi
4 UEFI firmware requires the provision of a Trusted Firmware binary
(TF-A).

The binary is built for a dtb base address of 0x00020000 and a UEFI
payload base address of 0x00030000.

Binaries are built using a custom version of TF-A (the source of which
is documented in the Readme), since the official repository is missing
a fix to get proper baudrate when using a recent version of start4.elf,
as we as the ability to switch between PL011 and mini UART. We are
currently working with TF-A to upstream both these fixes so that we can
switch to binaries built from official source at a later date.

In order to provide the ability to switch serial I/O controllers, a
feature we will be adding to the RPi4 UEFI Firmware, and not lose TF-A
output, two binaries are provided, one for mini UART output and one for
PL011 output.

Signed-off-by: Pete Batard <pete@akeo.ie>
---
 Platform/RaspberryPi/RPi4/TrustedFirmware/License.txt       |  26 ++++++++++++++++++++
 Platform/RaspberryPi/RPi4/TrustedFirmware/Readme.md         |  12 +++++++++
 Platform/RaspberryPi/RPi4/TrustedFirmware/bl31_miniuart.bin | Bin 0 -> 41072 bytes
 Platform/RaspberryPi/RPi4/TrustedFirmware/bl31_pl011.bin    | Bin 0 -> 41072 bytes
 4 files changed, 38 insertions(+)

diff --git a/Platform/RaspberryPi/RPi4/TrustedFirmware/License.txt b/Platform/RaspberryPi/RPi4/TrustedFirmware/License.txt
new file mode 100644
index 000000000000..48429979fec2
--- /dev/null
+++ b/Platform/RaspberryPi/RPi4/TrustedFirmware/License.txt
@@ -0,0 +1,26 @@
+Copyright (c) 2013-2019, ARM Limited and Contributors. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+  list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice, this
+  list of conditions and the following disclaimer in the documentation and/or
+  other materials provided with the distribution.
+
+* Neither the name of ARM nor the names of its contributors may be used to
+  endorse or promote products derived from this software without specific prior
+  written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/Platform/RaspberryPi/RPi4/TrustedFirmware/Readme.md b/Platform/RaspberryPi/RPi4/TrustedFirmware/Readme.md
new file mode 100644
index 000000000000..7f1749dfc3a0
--- /dev/null
+++ b/Platform/RaspberryPi/RPi4/TrustedFirmware/Readme.md
@@ -0,0 +1,12 @@
+ARM Trusted Firmware for Raspberry Pi 4
+=======================================
+
+The `bl31_#####.bin` TF-A binaries found in this repository were built on a Debian 10.2 system
+from https://github.com/pbatard/arm-trusted-firmware/tree/pi4 (pi4 branch) using the command:
+
+```
+make PLAT=rpi4 RPI3_PRELOADED_DTB_BASE=0x20000 PRELOADED_BL33_BASE=0x30000 SUPPORT_VFP=1 [RPI3_USE_PL011_UART=1] DEBUG=0 all
+```
+
+The only difference between these firmwares is that the `RPI3_USE_PL011_UART=1` option was added
+to build `bl31_pl011.bin` so that it uses PL011 for serial output rather than the "mini UART".
diff --git a/Platform/RaspberryPi/RPi4/TrustedFirmware/bl31_miniuart.bin b/Platform/RaspberryPi/RPi4/TrustedFirmware/bl31_miniuart.bin
new file mode 100644
index 0000000000000000000000000000000000000000..e53aa0ef40fd2a8a66fee22439de2860813aa42f
GIT binary patch
literal 41072
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
Ni$`vR$v+3){{yX=nGOH|

literal 0
HcmV?d00001

diff --git a/Platform/RaspberryPi/RPi4/TrustedFirmware/bl31_pl011.bin b/Platform/RaspberryPi/RPi4/TrustedFirmware/bl31_pl011.bin
new file mode 100644
index 0000000000000000000000000000000000000000..e0d53f4bdc4e3404d39b7176543d64bdcef03886
GIT binary patch
literal 41072
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%0DNs-;d~e0uYrGTOd6L}BQDPg$b)Hi<kQ!SX1A$#
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
L7sBM91MmL=wAOXu

literal 0
HcmV?d00001

-- 
2.21.0.windows.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [edk2-non-osi][PATCH 0/2] Add prerequisite binary files for RPi4 platform
  2019-12-11 11:23 [edk2-non-osi][PATCH 0/2] Add prerequisite binary files for RPi4 platform Pete Batard
  2019-12-11 11:23 ` [edk2-non-osi][PATCH 1/2] Platforms/RPi4: Add Device Tree Pete Batard
  2019-12-11 11:24 ` [edk2-non-osi][PATCH 2/2] Platforms/RPi4: Add Trusted Firmware binaries Pete Batard
@ 2019-12-11 14:13 ` Ard Biesheuvel
  2 siblings, 0 replies; 6+ messages in thread
From: Ard Biesheuvel @ 2019-12-11 14:13 UTC (permalink / raw)
  To: Pete Batard
  Cc: edk2-devel-groups-io, Leif Lindholm, Philippe Mathieu-Daudé

On Wed, 11 Dec 2019 at 12:24, Pete Batard <pete@akeo.ie> wrote:
>
> This series of patches adds the binaries we need available to introduce
> Raspberry Pi 4 support.
>
> Similar to the Pi 3, we must have TF-A and Device Tree binaries we can embed.
>
> Pete Batard (2):
>   Platforms/RPi4: Add Device Tree
>   Platforms/RPi4: Add Trusted Firmware binaries
>

Thanks Pete

Pushed as d580026dbbe8..a2484c34ceba


>  Platform/RaspberryPi/RPi4/DeviceTree/License.txt            | 340 ++++++++++++++++++++
>  Platform/RaspberryPi/RPi4/DeviceTree/Readme.md              |  13 +
>  Platform/RaspberryPi/RPi4/DeviceTree/bcm2711-rpi-4-b.dtb    | Bin 0 -> 40697 bytes
>  Platform/RaspberryPi/RPi4/TrustedFirmware/License.txt       |  26 ++
>  Platform/RaspberryPi/RPi4/TrustedFirmware/Readme.md         |  12 +
>  Platform/RaspberryPi/RPi4/TrustedFirmware/bl31_miniuart.bin | Bin 0 -> 41072 bytes
>  Platform/RaspberryPi/RPi4/TrustedFirmware/bl31_pl011.bin    | Bin 0 -> 41072 bytes
>  7 files changed, 391 insertions(+)
>  create mode 100644 Platform/RaspberryPi/RPi4/DeviceTree/License.txt
>  create mode 100644 Platform/RaspberryPi/RPi4/DeviceTree/Readme.md
>  create mode 100644 Platform/RaspberryPi/RPi4/DeviceTree/bcm2711-rpi-4-b.dtb
>  create mode 100644 Platform/RaspberryPi/RPi4/TrustedFirmware/License.txt
>  create mode 100644 Platform/RaspberryPi/RPi4/TrustedFirmware/Readme.md
>  create mode 100644 Platform/RaspberryPi/RPi4/TrustedFirmware/bl31_miniuart.bin
>  create mode 100644 Platform/RaspberryPi/RPi4/TrustedFirmware/bl31_pl011.bin
>
> --
> 2.21.0.windows.1
>

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [edk2-non-osi][PATCH 2/2] Platforms/RPi4: Add Trusted Firmware binaries
  2019-12-11 11:24 ` [edk2-non-osi][PATCH 2/2] Platforms/RPi4: Add Trusted Firmware binaries Pete Batard
@ 2019-12-11 14:14   ` Leif Lindholm
  2019-12-11 15:35     ` Pete Batard
  0 siblings, 1 reply; 6+ messages in thread
From: Leif Lindholm @ 2019-12-11 14:14 UTC (permalink / raw)
  To: Pete Batard; +Cc: devel, ard.biesheuvel, philmd

On Wed, Dec 11, 2019 at 11:24:00 +0000, Pete Batard wrote:
> Similar to what is the case with the Raspberry Pi 3, the Raspberry Pi
> 4 UEFI firmware requires the provision of a Trusted Firmware binary
> (TF-A).
> 
> The binary is built for a dtb base address of 0x00020000 and a UEFI
> payload base address of 0x00030000.
> 
> Binaries are built using a custom version of TF-A (the source of which
> is documented in the Readme), since the official repository is missing
> a fix to get proper baudrate when using a recent version of start4.elf,
> as we as the ability to switch between PL011 and mini UART. We are
> currently working with TF-A to upstream both these fixes so that we can
> switch to binaries built from official source at a later date.
> 
> In order to provide the ability to switch serial I/O controllers, a
> feature we will be adding to the RPi4 UEFI Firmware, and not lose TF-A
> output, two binaries are provided, one for mini UART output and one for
> PL011 output.
> 
> Signed-off-by: Pete Batard <pete@akeo.ie>
> ---
>  Platform/RaspberryPi/RPi4/TrustedFirmware/License.txt       |  26 ++++++++++++++++++++
>  Platform/RaspberryPi/RPi4/TrustedFirmware/Readme.md         |  12 +++++++++
>  Platform/RaspberryPi/RPi4/TrustedFirmware/bl31_miniuart.bin | Bin 0 -> 41072 bytes
>  Platform/RaspberryPi/RPi4/TrustedFirmware/bl31_pl011.bin    | Bin 0 -> 41072 bytes
>  4 files changed, 38 insertions(+)
> 

> new file mode 100644
> index 000000000000..7f1749dfc3a0
> --- /dev/null
> +++ b/Platform/RaspberryPi/RPi4/TrustedFirmware/Readme.md
> @@ -0,0 +1,12 @@
> +ARM Trusted Firmware for Raspberry Pi 4
> +=======================================
> +
> +The `bl31_#####.bin` TF-A binaries found in this repository were built on a Debian 10.2 system
> +from https://github.com/pbatard/arm-trusted-firmware/tree/pi4 (pi4 branch) using the command:
> +
> +```
> +make PLAT=rpi4 RPI3_PRELOADED_DTB_BASE=0x20000 PRELOADED_BL33_BASE=0x30000 SUPPORT_VFP=1 [RPI3_USE_PL011_UART=1] DEBUG=0 all
> +```
> +
> +The only difference between these firmwares is that the `RPI3_USE_PL011_UART=1` option was added
> +to build `bl31_pl011.bin` so that it uses PL011 for serial output rather than the "mini UART".

Sanity check: do the build commands still use RPI3_ options for rpi4?

Best Regards,

Leif

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [edk2-non-osi][PATCH 2/2] Platforms/RPi4: Add Trusted Firmware binaries
  2019-12-11 14:14   ` Leif Lindholm
@ 2019-12-11 15:35     ` Pete Batard
  0 siblings, 0 replies; 6+ messages in thread
From: Pete Batard @ 2019-12-11 15:35 UTC (permalink / raw)
  To: Leif Lindholm; +Cc: devel, ard.biesheuvel, philmd

Hi Leif,

On 2019.12.11 14:14, Leif Lindholm wrote:
> On Wed, Dec 11, 2019 at 11:24:00 +0000, Pete Batard wrote:
>> Similar to what is the case with the Raspberry Pi 3, the Raspberry Pi
>> 4 UEFI firmware requires the provision of a Trusted Firmware binary
>> (TF-A).
>>
>> The binary is built for a dtb base address of 0x00020000 and a UEFI
>> payload base address of 0x00030000.
>>
>> Binaries are built using a custom version of TF-A (the source of which
>> is documented in the Readme), since the official repository is missing
>> a fix to get proper baudrate when using a recent version of start4.elf,
>> as we as the ability to switch between PL011 and mini UART. We are
>> currently working with TF-A to upstream both these fixes so that we can
>> switch to binaries built from official source at a later date.
>>
>> In order to provide the ability to switch serial I/O controllers, a
>> feature we will be adding to the RPi4 UEFI Firmware, and not lose TF-A
>> output, two binaries are provided, one for mini UART output and one for
>> PL011 output.
>>
>> Signed-off-by: Pete Batard <pete@akeo.ie>
>> ---
>>   Platform/RaspberryPi/RPi4/TrustedFirmware/License.txt       |  26 ++++++++++++++++++++
>>   Platform/RaspberryPi/RPi4/TrustedFirmware/Readme.md         |  12 +++++++++
>>   Platform/RaspberryPi/RPi4/TrustedFirmware/bl31_miniuart.bin | Bin 0 -> 41072 bytes
>>   Platform/RaspberryPi/RPi4/TrustedFirmware/bl31_pl011.bin    | Bin 0 -> 41072 bytes
>>   4 files changed, 38 insertions(+)
>>
> 
>> new file mode 100644
>> index 000000000000..7f1749dfc3a0
>> --- /dev/null
>> +++ b/Platform/RaspberryPi/RPi4/TrustedFirmware/Readme.md
>> @@ -0,0 +1,12 @@
>> +ARM Trusted Firmware for Raspberry Pi 4
>> +=======================================
>> +
>> +The `bl31_#####.bin` TF-A binaries found in this repository were built on a Debian 10.2 system
>> +from https://github.com/pbatard/arm-trusted-firmware/tree/pi4 (pi4 branch) using the command:
>> +
>> +```
>> +make PLAT=rpi4 RPI3_PRELOADED_DTB_BASE=0x20000 PRELOADED_BL33_BASE=0x30000 SUPPORT_VFP=1 [RPI3_USE_PL011_UART=1] DEBUG=0 all
>> +```
>> +
>> +The only difference between these firmwares is that the `RPI3_USE_PL011_UART=1` option was added
>> +to build `bl31_pl011.bin` so that it uses PL011 for serial output rather than the "mini UART".
> 
> Sanity check: do the build commands still use RPI3_ options for rpi4?

That's correct. This is an option that's meant to apply to both Pi 3 and 
Pi 4, and for now, I'm keeping everything in line with the current RPi 
common options that are still prefixed with RPI3_.

There are some vague talks about merging the Pi 3 and Pi 4 TF-A 
platforms, so maybe we'll drop RPI3_ prefixed options then, but for now, 
pretty much all of the Pi 4 build options I know of use RPI3_ as a prefix.

Regards,

/Pete

> 
> Best Regards,
> 
> Leif
> 


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2019-12-11 15:36 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-12-11 11:23 [edk2-non-osi][PATCH 0/2] Add prerequisite binary files for RPi4 platform Pete Batard
2019-12-11 11:23 ` [edk2-non-osi][PATCH 1/2] Platforms/RPi4: Add Device Tree Pete Batard
2019-12-11 11:24 ` [edk2-non-osi][PATCH 2/2] Platforms/RPi4: Add Trusted Firmware binaries Pete Batard
2019-12-11 14:14   ` Leif Lindholm
2019-12-11 15:35     ` Pete Batard
2019-12-11 14:13 ` [edk2-non-osi][PATCH 0/2] Add prerequisite binary files for RPi4 platform Ard Biesheuvel

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox