1. 26 Feb, 2015 5 commits
    • Siarhei Siamashka's avatar
      fel: Set the AUXCR L2EN bit for A10/A13 · f6a1382b
      Siarhei Siamashka authored
      
      
      This is needed to have feature parity with the normal boot mode,
      where the L2EN bit in the CP15 Auxiliary Control Register is set
      by the BROM code right from the start. And if L2EN is not set,
      then the Linux system ends up booted with the L2 cache disabled.
      
      According to the Cortex-A8 TRM, the L2 cache is only enabled when
      both L2EN bit and the C bit from the CP15 Control Register c1 are
      set. Because the BROM does not set the C bit, this change should
      not affect the functionality of the FEL mode in any way.
      Signed-off-by: default avatarSiarhei Siamashka <siarhei.siamashka@gmail.com>
      Acked-by: default avatarHans de Goede <hdegoede@redhat.com>
      f6a1382b
    • Siarhei Siamashka's avatar
      fel: Fix USB timeout on large transfers · eae30b2a
      Siarhei Siamashka authored
      
      
      Trying to use oversized initrd files (20 MB or more) can fail
      with the "libusb usb_bulk_send error -1" error message.
      
      To address this problem, we can split the transfer into smaller
      chunks and the problem disappears. Effectively, this is a revert
      of the older "fel: Increase timeout to 60 seconds instead of
      splitting bulk transfers" commmit.
      Signed-off-by: default avatarSiarhei Siamashka <siarhei.siamashka@gmail.com>
      Acked-by: default avatarHans de Goede <hdegoede@redhat.com>
      eae30b2a
    • Siarhei Siamashka's avatar
      fel: Faster USB transfers via 'fel write' to DRAM · e4b3da2b
      Siarhei Siamashka authored
      
      
      By adjusting the MMU translation table before restoring it
      and by enabling the I-cache with branch prediction, we can
      improve performance. The DRAM area (0x40000000-0xC0000000)
      becomes write-combine mapped and the BROM code becomes mapped
      as cacheable memory. This is expected to be safe and should
      not cause any coherency problems.
      
      Transfer speed improvements:
      
      A10  : ~330 KB/s -> ~600 KB/s
      A13  : ~330 KB/s -> ~600 KB/s
      A20  : ~320 KB/s -> ~960 KB/s
      A31s : ~250 KB/s -> ~510 KB/s
      Signed-off-by: default avatarSiarhei Siamashka <siarhei.siamashka@gmail.com>
      Acked-by: default avatarHans de Goede <hdegoede@redhat.com>
      e4b3da2b
    • Siarhei Siamashka's avatar
      fel: Disable MMU to get more SRAM space and fix A13 problems · dc6c801c
      Siarhei Siamashka authored
      
      
      The FEL BROM code has the MMU enabled for some reason (while
      I-cache and D-cache are disabled). Most likely the intention was
      to get a somewhat better performance. Everything is mapped as
      TEXCB=00000 (strongly ordered), except for the 0x00000000 (SRAM)
      and 0xFFF00000 (BROM) sections, which are mapped as TEXCB=00100
      (normal uncached memory).
      
      This becomes a problem for the A13 SoC, because it has less SRAM
      than the other chips. A13 stores the MMU addresses translation
      table at 0x8000 and uses up 16 KiB of the SRAM space there (while
      the A10, A20 and A31s keep the MMU table in the secure SRAM at
      0x20000). And because the 'spl' command needs space for backing
      up the FEL stacks, it was clashing with the MMU table.
      
      The solution is simple. We just backup the addresses translation
      table and disable the MMU before running the SPL. And then restore
      it back to the original state. This fixes problems on A13.
      
      Re-enabling the MMU in the end is only necessary to avoid performance
      losses. For example, the transfer speed of the 'fel write' command
      on A20 would drop from ~320 KB/s to ~260 KB/s without MMU.
      Signed-off-by: default avatarSiarhei Siamashka <siarhei.siamashka@gmail.com>
      Acked-by: default avatarHans de Goede <hdegoede@redhat.com>
      dc6c801c
    • Siarhei Siamashka's avatar
      fel: Add --verbose option and implement transfer speed reporting · fe276666
      Siarhei Siamashka authored
      
      
      This allows to measure the USB data transfer speed for performance
      tuning purposes.
      Signed-off-by: default avatarSiarhei Siamashka <siarhei.siamashka@gmail.com>
      Acked-by: default avatarHans de Goede <hdegoede@redhat.com>
      fe276666
  2. 11 Feb, 2015 2 commits
    • Siarhei Siamashka's avatar
      fel: New command for loading U-Boot SPL binaries in eGON format · 1627b137
      Siarhei Siamashka authored
      
      
      Now it is possible to load and execute the same U-Boot SPL,
      as used for booting from SD cards. Just a different delivery
      method (a USB OTG cable instead of an SD card) for handling
      exactly the same content.
      
      The only argument for this new command is the name of the SPL
      binary file (with a eGON header generated by the 'mksunxiboot'
      tool). Now the 'fel' tool can be run as:
      
          fel spl u-boot-sunxi-with-spl.bin
      
      Before this change, the SPL was only able to use the memory between
      addresses 0x2000 and ~0x5D00, totalling to something like ~15 KiB.
      This is the biggest contiguous area in SRAM, which is not used
      by the FEL code from the BROM. Unfortunately, it is rather small.
      And also the unusual starting offset was making it difficult to
      use the same SPL binary for booting from the SD card and via FEL.
      
      There are surely more unused parts of SRAM, but they are scattered
      across multiple locations, primarily because the FEL code from the
      BROM sets up two stacks at inconvenient locations (the IRQ handler
      stack at 0x2000, and a regular stack at 0x7000). Essentially, the
      problem to solve here is to ensure a sufficiently large and consistent
      SRAM address space for the SPL without any potentially SoC specific
      holes in the case of booting over USB via FEL.
      
      This is achieved by injecting special entry/exit thunk code, which
      is moving the data in SRAM to provide a contiguous space for the SPL
      at the beginning of SRAM, while still preserving the the data from
      the BROM elsewhere. When the SPL tries to return control back to the
      FEL code in the BROM, the thunk code moves the data back to its
      original place. Additionally, the eGON checksum is verified to
      ensure that no data corruption has happened due to some unexpected
      clash with the FEL protocol code from the BROM.
      
      So the thunk code takes care of the address space allocation uglyness
      and provides the U-Boot SPL with a somewhat nicer abstraction.
      Now the FEL booted SPL on A10/A13/A20/A31 can use up to 32 KiB of
      SRAM because the BROM data is saved to different SRAM section.
      There is also generic code, which does not rely on extra SRAM
      sections, but just glues together the unused free space from
      both BROM FEL stacks to provide something like ~21 KiB to the SPL.
      Signed-off-by: default avatarSiarhei Siamashka <siarhei.siamashka@gmail.com>
      Acked-by: default avatarHans de Goede <hdegoede@redhat.com>
      1627b137
    • Siarhei Siamashka's avatar
      fel: Split 'aw_fel_get_version' into 'get' and 'print' variants · 91949d62
      Siarhei Siamashka authored
      
      
      Now aw_fel_get_version() can get the SoC ID for internal usage
      from the other functions. And aw_fel_print_version() is used
      to print the formatted string to stdout.
      Signed-off-by: default avatarSiarhei Siamashka <siarhei.siamashka@gmail.com>
      Acked-by: default avatarHans de Goede <hdegoede@redhat.com>
      91949d62
  3. 24 Jan, 2015 3 commits
  4. 28 Oct, 2014 1 commit
  5. 27 Sep, 2014 1 commit
  6. 21 Sep, 2014 2 commits
  7. 06 Sep, 2014 7 commits
  8. 02 Sep, 2014 3 commits
  9. 19 Aug, 2014 4 commits
  10. 18 Aug, 2014 1 commit
  11. 16 Aug, 2014 1 commit
  12. 14 Aug, 2014 7 commits
  13. 02 Aug, 2014 1 commit
  14. 05 Jul, 2014 1 commit
  15. 01 Jul, 2014 1 commit
    • Ian Campbell's avatar
      Add copyright headers to various files. · 227c7e03
      Ian Campbell authored
      I'd like to package sunxi-tools for Debian and therefore it is important for
      the licensing information to be complete/accurate. I believe the intention was
      for everything here to be GPL2+ by default, since that is the license on every
      file which has one and COPYING contains GPL2.
      
      Early on the license applied to this repo was GPLv3 however this was changed to
      GPL2+ by Alejandro in 79ea14d4 at which point he had been the only
      contributor.
      
      This patch adds the standard GPL2+ stanza used already in sunxi-tools.git or
      the MIT license stanza when requested by the copyright holder to various files
      which were missing one as follows:
      
      adb-devprobe.sh
      fel-gpio
          According to git all of these were written by Henrik. Copyright years
          according to git. Henrik requested that these be put under an MIT license,
          so that is what has been done.
      
      boot_head.lds
      fel-pio.lds
      fel-sdboot.lds
      jtag-loop.lds
          According to git all of these were written by Henrik. Copyright years
          according to git. According to Henrik "These linker scripts are all GPLv2+
          as the C / ASM sources they refer to".
      
      include/endian_compat.h
          The content of this file was originally added to fel.c (commit
          c71ff92c), which had a GPL2+ stanza at the time, by Eric Molitor and later
          those lines were moved by Alejandro (commit bcde0fc7) into this file.
          I originally added GPL2+ from fel.c and added Eric's copyright with the
          correct year according to git but Eric said "Ack but also would prefer
          MIT/Dual :)", so it has now been changed to MIT.
      
      include/types.h:
          Henrik originally added some of these lines to bootinfo.c, along with a
          GPL2+ stanza, in the original version (commit c26e5ff8). Later on
          Alejandro moved them into this file (commit 329a13ed
      
      ) and added more.
          I've copied the stanza from bootinfo.c and added both copyrights with the
          years according to git. Authors:
            Henrik, who says "OK".
            Alejandro Mery
      
      Makefile:
          GPL2+ with copyrights and years according to git. Authors are:
            Alejandro Mery
            Henrik Nordstrom, who says "Yes"
            Pat Wood, who says "Fine with me"
      
      usb-boot:
          Henrik is the primary author, added MIT license on Henrik's request with
          his copyright and years according to git. Authors are:
            Henrik Nordstrom, who says "Yes, that too should be MIT"
            Alejandro Mery (typo fix)
            Michal Suchanek (typo fix)
      
      Everyone affected by the above is CCd.
      
      This probably seems pretty obvious to most people, sorry for being so pedantic
      about it. It will save hassel when it comes to getting it into Debian though.
      Signed-off-by: default avatarIan Campbell <ijc@hellion.org.uk>
      Cc: Henrik Nordstrom <henrik@henriknordstrom.net>
      Cc: Eric Molitor <eric@molitor.org>
      Cc: Alejandro Mery <amery@geeks.cl>
      Cc: Pat Wood <Pat.Wood@efi.com>
      Cc: Michal Suchanek <hramrach@gmail.com>
      ---
      v2: Gathered feedback from the authors
       - Pat said "Fine with me"
       - Henrik asked that adb-devprobe.sh, fel-gpio and usb-boot be MIT, acked
         *.lds, types.h and Makefile
       - Explicitly listed authors of Makefile and usb-boot
       - Michal Suchanek make a typo fix to usb-boot but wasn't CCd, sorry.
       - Reworded commit message due to some bits now being MIT on request of the
         author.
      227c7e03