unified VC4 and ARM runtime code (including C++ runtime), updated some minor bits
[rpi-open-firmware.git] / README.md
index 6efcafd..6849ef4 100755 (executable)
--- a/README.md
+++ b/README.md
@@ -1,5 +1,5 @@
 # Minimal Raspberry Pi VPU firmware\r
-This is a small firmware for RPi VPU (VideoCore4) versions 1/2/3 that is capable of initializing UART, VPU PLL (PLLC) and ARM itself. It's intended to be used instead of stock `bootcode.bin` on RPi's SD card. You **need** to have UART to see anything meaningful as far as output goes.\r
+This is a small firmware for RPi VPU (VideoCore4) versions 1/2/3 that is capable of initializing UART, VPU PLL (PLLC) and ARM itself. It's intended to be used instead of stock `bootcode.bin` on RPi's SD card. You **need** to have UART to see anything meaningful as far as output goes. The project additionally maintains a second-stage chainloader running on ARM capable of initializing eMMC, FAT, and the Linux kernel, as well as a shrinking set of patches to the Linux kernel.\r
 \r
 This has been tested on RPi1 Model B (Hynix PoP DDR), RPi 2 Model B and RPi 3 Model B (both Elpida DDR), but it should work with minimal modifications on all of the models. Development primarily targets the RPi 2 Model B.\r
 \r
@@ -21,13 +21,13 @@ You need Julian Brown's VC4 toolchain to build this (https://github.com/puppeh/v
     + compilation instructions for OSX in the [pdf](https://launchpadlibrarian.net/287100910/How-to-build-toolchain.pdf)\r
 \r
 #### Build instructions: \r
-Compiling for osx is basically the same; you just have to be careful of OSX's built-in gcc (it's actually llvm) and the default version of guile (2.x and totally not compatible with older syntax). \r
+Compiling for osx is similar, but be careful with OSX's built-in "gcc" (LLVM-based) and the default version of guile (2.x), which is incompatible.\r
 \r
-install dependencies: \r
+Install dependencies: \r
 \r
     brew install gcc-6 guile18\r
 \r
-install the arm toolchain.\r
+Install the arm toolchain.\r
 \r
     # follow the instructions in the pdf linked above\r
 \r
@@ -44,7 +44,7 @@ From the main instructions ("After you've done it, run buildall.sh and you shoul
     git clone https://github.com/christinaa/rpi-open-firmware; cd rpi-open-firmware\r
     CC=gcc-6 LIBRARY_PATH=/lib:/lib64 ./build-all.sh\r
 \r
-Note: on the last step, i set the library path here because mine initially had a trailing “:” and something in the build chain didn’t like that. CC=gcc-6 is just to ensure it's using the gcc install from the first step.\r
+Note: on the last step, the library path is set as it initially had a trailing ":" which broke the build. `CC=gcc-6` is just to ensure it's using the gcc install from the first step.\r
 \r
 That's it! Your shiny new binary is sitting at rpi-open-firmware/build/bootcode.bin.\r
 \r
@@ -53,17 +53,17 @@ The firmware is split into two parts, a VC4 part and and ARM part. The VC4 part
 \r
 The ARM chainloader then initializes the eMMC controller and access the boot partition with a FAT driver. From here, it chainloads the Linux kernel (other payloads are not tested and are not likely to work due to dependence on the firmware).\r
 \r
-The current makefiles in the ARM part of it aim at **RPi1** (ie. ARMv6) but they can be changed to ARMv7 if you want to build it for a newer model. I tested it on all RPi models and it works without any issues as far as I can tell (ARM can access peripherals and memory just fine as AXI supervisor). However it cannot access any secure peripherals (OTP/SDRAM/etc) since they appear to be on a separate bus accessible only to VC4.\r
+The current makefiles in the ARM part of it aim at **RPi1** (ie. ARMv6) but they can be changed to ARMv7 if you want to build it for a newer model. It was tested on all RPi models and it seems to work without any issues (ARM can access peripherals and memory just fine as AXI supervisor). However, it cannot access any secure peripherals (OTP/SDRAM/etc) since they appear to be on a separate bus accessible only to VC4.\r
 \r
 ## Does it boot Linux?\r
 \r
-Soon! Since `start.elf` is responsible for clock and power management in the original firmware (all registers in the `cpr` block), these drivers will have to be rewritten on ARM or our VC4 firmware to have most of the peripherals working properly (HDMI, for example). You can soon be able boot a very minimal version of Linux without the firmware and get it to work with UART and some USB devices and Ethernet, which is sufficient for certain headless systems. Still, you can expect half of the things to be broken (most importantly, video and DMA).\r
+Yes, with some conditions. You can boot a very minimal version of Linux without the firmware and get it to work with UART. Support for eMMC, some USB devices, and Ethernet are in the works, which will be sufficient for certain headless systems. Still, you can expect half of the things to be broken (most importantly, video and DMA). Additionally, since `start.elf` is responsible for clock and power management in the original firmware (all registers in the `cpr` block), these drivers will have to be rewritten on ARM or our VC4 firmware to have most of the peripherals working properly (HDMI, for example).\r
 \r
 ## Thanks To\r
- * **[Herman Hermitage](https://github.com/hermanhermitage)** for his VC4 documentation and for helping with working out suitable ARM PLL configurations.\r
+ * **[Herman Hermitage](https://github.com/hermanhermitage)** for his VC4 documentation and for helping determine suitable ARM PLL configurations.\r
  * **[Julian Brown](https://github.com/puppeh)** for reviewing the code and for his awesome VC4 toolchain.\r
  * **[Alyssa Rosenzweig](https://github.com/bobbybee)** for her contributions to the firmware especially in areas of Linux bringup and early ARM side initialization, as well as fixing mailbox support.\r
- * **[David Given](https://github.com/davidgiven)** for his initial LLVM project which I used as the base for my LLVM toolchain before moving to GCC.\r
- * **[phire](https://github.com/phire)** for reviewing my code.\r
+ * **[David Given](https://github.com/davidgiven)** for his initial LLVM project used as the base for the initial LLVM toolchain before moving to GCC.\r
+ * **[phire](https://github.com/phire)** for reviewing the code.\r
  * **[Broadcom](https://github.com/broadcom)** for their header release.\r
  * Various other people not mentioned here.\r
This page took 0.02997 seconds and 4 git commands to generate.