Introduction
============

This program is used to send code to a Tegra device in recovery mode.
It does not supported RSA locked devices with signed bootloader, only
open devices such as the ventana, cardhu, or dalmore reference boards,
or production devices with AES encrypted bootloader (with custom
miniloader). It is not capable of flashing firmware to a device, but
can be used to download firmware that is then capable of flashing. For
example in ChromeOS tegrarcm is used to download a special build of
u-boot to the target Tegra device with a payload that it then flashes
to the boot device.

Platforms supported:
-Tegra20
-Tegra30
-Tegra114
-Tegra124

Building
========

Install dependencies (example for Debian-based systems):
$ sudo apt install pkg-config libusb-1.0-0-dev build-essential autoconf automake libtool libcrypto++-dev

Then run ./autogen.sh and make.

Usage
=====

- Connect a USB cable from your development system to your Tegra
device.  You will either need a USB A to A cable or A to micro B
depending on the target board.
- Find the appropriate BCT file for your board.  For reference boards,
BCT files can be found in the L4T distribution from NVIDIA.
- Build some firmware for your device (such as u-boot)
- Run tegrarcm to download the firmware

Example to download u-boot firmware to a Tegra20 seaboard:

$ sudo tegrarcm --bct seaboard.bct --bootloader u-boot.bin --loadaddr 0x108000
bct file: seaboard.bct
booloader file: u-boot.bin
load addr 0x108000
entry addr 0x108000
device id: 0x7820
uid:  0x33c20c0413fb217
RCM version: 2.1
downloading miniloader to target...
miniloader downloaded successfully
Chip UID:                0x33c20c0413fb217
Chip ID:                 0x20
Chip ID Major Version:   0x1
Chip ID Minor Version:   0x4
Chip SKU:                0x18 (t25)
Boot ROM Version:        0x1
Boot Device:             0x3 (SPI)
Operating Mode:          0x3 (developer mode)
Device Config Strap:     0x0
Device Config Fuse:      0x0
SDRAM Config Strap:      0x0
sending file: seaboard.bct
- 4080/4080 bytes sent
seaboard.bct sent successfully
sending file: u-boot.bin
- 268314/268314 bytes sent
u-boot.bin sent successfully

Submitting Changes
==================

To submit patches to this project continuation, please made a pull request
to a repository found here https://gitlab.com/grate-driver/tegrarcm

Patches should be signed off (include a signed-off-by line) to indicate your
acceptance of the code's license (see COPYING and the license header in each
file). See http://developercertificate.org/ for details of what signed-off-by
implies.

Changelog
=========

See git logs for complete list.

V1.9 - Support for production devices with AES encrypted bootloaders.
     - Update README to reflect that this is not official Nvidia repo
       and just a continuation.
     - Added nixOS and musl based system fixes.
     - Minor fixes and tweaks.
V1.8 - Support for production devices with PKC
     - Support for --gen-signed-msgs, --signed-msgs, and --download-signed-msgs
       options.
     - Support for --usb-timeout option.
     - Various man page and code cleanups.
     - Compilation fix when cryptopp isn't installed system-wide.
V1.7 - Documented patch submission process in this file
     - Added better USB debugging message
     - Require a specific minimum version of libusb
     - Added --usb-port-path cmdline option
V1.6 - Added support for ODM secure mode
V1.5 - Added support for RCM protocol version 40
     - Added Tegra124 support
     - Added support for readbct command
     - Added support for passing in miniloader from a file
V1.4 - Added --version command
     - Updated T114 miniloader to fix SPI boot problem
     - Added --help command to man page
V1.3 - Added some better error checking on return values
     - Fixed configure problem related to libcrypto++ and libpthread
       interaction
V1.2 - Added support for T114
     - Added man page
     - Removed autogenerated files from source code control
V1.1 - Added this README file and automake fixes from Mike Frysinger
 <vapier@gentoo.org>
V1.0 - Initial release
