From ec8528c22ffa3fd7e6e6fc74f5cb679637a39499 Mon Sep 17 00:00:00 2001 From: Svyatoslav Ryhel Date: Sun, 24 Dec 2023 10:16:34 +0200 Subject: [PATCH 1/6] doc: board: tegra30: update information in board documents Recently, the U-Boot installation process has changed significantly. This should be depicted in documentation. Signed-off-by: Svyatoslav Ryhel --- doc/board/asus/grouper_common.rst | 128 ++++++++++++++-------- doc/board/asus/transformer_t30.rst | 167 ++++++++++++++++++----------- doc/board/htc/endeavoru.rst | 120 +++++++++++++-------- doc/board/lg/x3_t30.rst | 121 +++++++++++++-------- 4 files changed, 342 insertions(+), 194 deletions(-) diff --git a/doc/board/asus/grouper_common.rst b/doc/board/asus/grouper_common.rst index 2e4450b40e0..47a854e9163 100644 --- a/doc/board/asus/grouper_common.rst +++ b/doc/board/asus/grouper_common.rst @@ -3,26 +3,25 @@ U-Boot for the ASUS/Google Nexus 7 (2012) ========================================= -``DISCLAMER!`` Moving your ASUS/Google Nexus 7 (2012) to use -U-Boot assumes replacement of the vendor ASUS bootloader. Vendor -android firmwares will no longer be able to run on the device. -This replacement IS reversible. +``DISCLAMER!`` Moving your ASUS/Google Nexus 7 (2012) to use U-Boot assumes +replacement of the vendor ASUS bootloader. Vendor android firmwares will no +longer be able to run on the device. This replacement IS reversible. Quick Start ----------- - Build U-Boot -- Pack U-Boot into repart-block -- Flash repart-block into the eMMC +- Process U-Boot +- Flashing U-Boot into the eMMC - Boot - Self Upgrading Build U-Boot ------------ -Device support is implemented by applying config fragment to a generic -board defconfig. Valid fragments are ``grouper_E1565.config``, -``grouper_PM269.config`` and ``tilapia.config``. +Device support is implemented by applying config fragment to a generic board +defconfig. Valid fragments are ``tilapia.config``, ``grouper_E1565.config`` +and ``grouper_PM269.config``. .. code-block:: bash @@ -31,64 +30,103 @@ board defconfig. Valid fragments are ``grouper_E1565.config``, $ make After the build succeeds, you will obtain the final ``u-boot-dtb-tegra.bin`` -image, ready for flashing (but check the next section for additional -adjustments). +image, ready for further processing. -Pack U-Boot into repar-block ----------------------------- +Process U-Boot +-------------- -``DISCLAMER!`` All questions related to re-crypt work should be asked +``DISCLAMER!`` All questions related to the re-crypt work should be asked in re-crypt repo issues. NOT HERE! -re-crypt is a small script which packs ``u-boot-dtb-tegra.bin`` in -form usable by device. This process is required only on the first -installation or to recover the device in case of a failed update. -You need to know your tablet's individual SBK to continue. +re-crypt is a tool that processes the ``u-boot-dtb-tegra.bin`` binary into form +usable by device. This process is required only on the first installation or +to recover the device in case of a failed update. You need to know your +tablet's individual SBK to continue. + +Permanent installation can be performed either by using the nv3p protocol or by +pre-loading just built U-Boot into RAM. + +Processing for the NV3P protocol +******************************** .. code-block:: bash - $ git clone https://github.com/clamor-s/re-crypt.git - $ cd re-crypt # place your u-boot-dtb-regra.bin here - $ ./re-crypt.sh -d grouper -k deadbeefdeadc0dedeadd00dfee1dead + $ git clone https://gitlab.com/grate-driver/re-crypt.git + $ cd re-crypt # place your u-boot-dtb-tegra.bin here + $ ./re-crypt.py --dev grouper --sbk -Script will produce you a ``repart-block.bin`` ready to flash. +where SBK has next form ``0xXXXXXXXX`` ``0xXXXXXXXX`` ``0xXXXXXXXX`` ``0xXXXXXXXX`` -Flash repart-block into the eMMC --------------------------------- +The script will produce a ``repart-block.bin`` ready to flash. -``DISCLAMER!`` All questions related to NvFlash should be asked -in the proper place. NOT HERE! Flashing repart-block will erase -all your eMMC, so make a backup before! +Processing for pre-loaded U-Boot +******************************** -``repart-block.bin`` contains BCT and bootloader in encrypted state -in form which can just be written RAW at the start of eMMC. +The procedure is the same, but the ``--split`` argument is used with the +``re-crypt.py``. The script will produce ``bct.img`` and ``ebt.img`` ready +to flash. + +Flashing U-Boot into the eMMC +----------------------------- + +``DISCLAMER!`` All questions related to NvFlash should be asked in the proper +place. NOT HERE! Flashing U-Boot will erase all eMMC, so make a backup before! + +Permanent installation can be performed either by using the nv3p protocol or by +pre-loading just built U-Boot into RAM. + +Flashing with the NV3P protocol +******************************* + +Nv3p is a custom Nvidia protocol used to recover bricked devices. Devices can +enter it either by using ``wheelie`` with the correct ``blob.bin`` file or by +pre-loading vendor bootloader with the Fusée Gelée. + +With nv3p, ``repart-block.bin`` is used. It contains BCT and a bootloader in +encrypted state in form, which can just be written RAW at the start of eMMC. .. code-block:: bash $ wheelie --blob blob.bin $ nvflash --resume --rawdevicewrite 0 1024 repart-block.bin +When flashing is done, reboot the device. + +Flashing with a pre-loaded U-Boot +********************************* + +U-Boot pre-loaded into RAM acts the same as when it was booted "cold". Currently +U-Boot supports bootmenu entry fastboot, which allows to write a processed copy +of U-Boot permanently into eMMC. + +While pre-loading U-Boot, hold the ``volume down`` button which will trigger +the bootmenu. There, select ``fastboot`` using the volume and power buttons. +After, on host PC, do: + +.. code-block:: bash + + $ fastboot flash 0.1 bct.img + $ fastboot flash 0.2 ebt.img + $ fastboot reboot + +Device will reboot. + Boot ---- -After flashing ``repart-block.bin`` the device should reboot and turn -itself off. This is normal behavior if no boot configuration is -found. +To boot Linux, U-Boot will look for an ``extlinux.conf`` on eMMC. Additionally, +if the Volume Down button is pressed while booting, the device will enter +bootmenu. Bootmenu contains entries to mount eMMC as mass storage, fastboot, +reboot, reboot RCM, poweroff, enter U-Boot console and update bootloader (check +the next chapter). -To boot Linux, U-Boot will look for an ``extlinux.conf`` configuration -on eMMC. Additionally if Volume Down button is pressed while booting -device will enter bootmenu. Bootmenu contains entries to mount eMMC as -mass storage, fastboot, reboot, reboot RCM, poweroff, enter U-Boot -console and update bootloader (check next chapter). - -Flashing ``repart-block.bin`` eliminates vendor restriction on eMMC -and allows the user to use/partition it in any way the user desires. +Flashing ``repart-block.bin`` eliminates vendor restrictions on eMMC and allows +the user to use/partition it in any way the user desires. Self Upgrading -------------- -Place your ``u-boot-dtb-tegra.bin`` on the first partition of the -eMMC (using ability of u-boot to mount it). Enter bootmenu, choose -update bootloader option with Power button and U-Boot should update -itself. Once the process is completed, U-Boot will ask to press any -button to reboot. +Place your ``u-boot-dtb-tegra.bin`` on the first partition of the eMMC (using +ability of u-boot to mount it). Enter bootmenu, choose update bootloader option +with Power button and U-Boot should update itself. Once the process is +completed, U-Boot will ask to press any button to reboot. diff --git a/doc/board/asus/transformer_t30.rst b/doc/board/asus/transformer_t30.rst index b6b61015409..ff9792dc0fc 100644 --- a/doc/board/asus/transformer_t30.rst +++ b/doc/board/asus/transformer_t30.rst @@ -3,28 +3,27 @@ U-Boot for the ASUS Transformer device family ============================================= -``DISCLAMER!`` Moving your ASUS Transformer to use U-Boot -assumes replacement of the vendor ASUS bootloader. Vendor -android firmwares will no longer be able to run on the device. -This replacement IS reversible. +``DISCLAMER!`` Moving your ASUS Transformer to use U-Boot assumes replacement +of the vendor ASUS bootloader. Vendor Android firmwares will no longer be +able to run on the device. This replacement IS reversible. Quick Start ----------- - Build U-Boot -- Pack U-Boot into repart-block -- Flash repart-block into the eMMC -- Flash repart-block into TF600T SPI flash +- Process U-Boot +- Flashing U-Boot into the eMMC +- Flashing U-Boot into the SPI flash - Boot - Self Upgrading Build U-Boot ------------ -Device support is implemented by applying config fragment -to a generic board defconfig. Valid fragments are ``tf201.config``, -``tf300t.config``, ``tf300tg.config``, ``tf300tl.config``, -``tf700t.config``, ``tf600t.config`` and ``p1801-t.config``. +Device support is implemented by applying a config fragment to a generic board +defconfig. Valid fragments are ``tf201.config``, ``tf300t.config``, +``tf300tg.config``, ``tf300tl.config``, ``tf700t.config``, ``tf600t.config`` and +``p1801-t.config``. .. code-block:: bash @@ -33,84 +32,124 @@ to a generic board defconfig. Valid fragments are ``tf201.config``, $ make After the build succeeds, you will obtain the final ``u-boot-dtb-tegra.bin`` -image, ready for flashing (but check the next section for additional -adjustments). +image, ready for further processing. -Pack U-Boot into repar-block ----------------------------- +Process U-Boot +-------------- -``DISCLAMER!`` All questions related to re-crypt work should be asked +``DISCLAMER!`` All questions related to the re-crypt work should be asked in re-crypt repo issues. NOT HERE! -re-crypt is a small script which packs ``u-boot-dtb-tegra.bin`` in -form usable by device. This process is required only on the first -installation or to recover the device in case of a failed update. -You need to know your tablet's individual SBK to continue. +re-crypt is a tool that processes the ``u-boot-dtb-tegra.bin`` binary into form +usable by device. This process is required only on the first installation or +to recover the device in case of a failed update. You need to know your +tablet's individual SBK to continue. + +Permanent installation can be performed either by using the nv3p protocol or by +pre-loading just built U-Boot into RAM. + +Processing for the NV3P protocol +******************************** .. code-block:: bash - $ git clone https://github.com/clamor-s/re-crypt.git - $ cd re-crypt # place your u-boot-dtb-regra.bin here - $ ./re-crypt.sh -d tf201 -k deadbeefdeadc0dedeadd00dfee1dead + $ git clone https://gitlab.com/grate-driver/re-crypt.git + $ cd re-crypt # place your u-boot-dtb-tegra.bin here + $ ./re-crypt.py --dev tf201 --sbk -Script will produce you a `repart-block.bin` ready to flash. +where SBK has next form ``0xXXXXXXXX`` ``0xXXXXXXXX`` ``0xXXXXXXXX`` ``0xXXXXXXXX`` -Flash repart-block into the eMMC --------------------------------- +The script will produce a ``repart-block.bin`` ready to flash. -``DISCLAMER!`` All questions related to NvFlash should be asked -in the proper place. NOT HERE! Flashing repart-block will erase -all your eMMC, so make a backup before! +Processing for pre-loaded U-Boot +******************************** -``repart-block.bin`` contains BCT and bootloader in encrypted state -in form which can just be written RAW at the start of eMMC. +The procedure is the same, but the ``--split`` argument is used with the +``re-crypt.py``. The script will produce ``bct.img`` and ``ebt.img`` ready +to flash. + +Flashing U-Boot into the eMMC +----------------------------- + +``DISCLAMER!`` All questions related to NvFlash should be asked in the proper +place. NOT HERE! Flashing U-Boot will erase all eMMC, so make a backup before! + +Permanent installation can be performed either by using the nv3p protocol or by +pre-loading just built U-Boot into RAM. + +Flashing with the NV3P protocol +******************************* + +Nv3p is a custom Nvidia protocol used to recover bricked devices. Devices can +enter it either by using ``wheelie`` with the correct ``blob.bin`` file or by +pre-loading vendor bootloader with the Fusée Gelée. + +With nv3p, ``repart-block.bin`` is used. It contains BCT and a bootloader in +encrypted state in form, which can just be written RAW at the start of eMMC. .. code-block:: bash $ wheelie --blob blob.bin $ nvflash --resume --rawdevicewrite 0 1024 repart-block.bin -Flash repart-block into TF600T SPI flash ----------------------------------------- +When flashing is done, reboot the device. -Unlike other transformers TF600T uses separate 4 MB SPI flash which -contains all data required for boot. It is flashed from within u-boot -itself preloaded into RAM using fusee gelee. After creating your -``repart-block.bin`` you have to place it on a 1st partition of microSD -card formated in fat. Then insert this microSD card into your tablet -and boot it using fusee gelee and u-boot which was included into -repart-block.bin, while booting you must hold volume down button. -Process should take less then a minute, if everything goes correct, -on microSD will appear ``spi-flash-backup.bin`` file, which is dump of -your spi flash content and can be used to restore UEFI, do not loose it, -tablet will power itself off. +Flashing with a pre-loaded U-Boot +********************************* -Self-updating of u-boot is performed by placing ``u-boot-dtb-tegra.bin`` -on 1st partition of microSD, inserting it into tablet and booting with -pressed volume down button. +U-Boot pre-loaded into RAM acts the same as when it was booted "cold". Currently +U-Boot supports bootmenu entry fastboot, which allows to write a processed copy +of U-Boot permanently into eMMC. + +While pre-loading U-Boot, hold the ``volume down`` button which will trigger +the bootmenu. There, select ``fastboot`` using the volume and power buttons. +After, on host PC, do: + +.. code-block:: bash + + $ fastboot flash 0.1 bct.img + $ fastboot flash 0.2 ebt.img + $ fastboot reboot + +Device will reboot. + +Flashing U-Boot into the SPI Flash +---------------------------------- + +Some of Transformers use a separate 4 MB SPI flash, which contains all data +required for boot. It is flashed from within U-Boot itself, preloaded into RAM +using Fusée Gelée. + +After creating your ``repart-block.bin`` you have to place it on a 1st partition +of microSD card formated in fat. Then insert this microSD card into your tablet +and boot it using Fusée Gelée and U-Boot, which was included into +``repart-block.bin``, while booting you must hold the ``volume down`` button. + +The process should take less than a minute, if everything goes correctly, +on microSD will appear ``spi-flash-backup.bin`` file, which is the dump of your +SPI Flash content and can be used to restore UEFI, do not lose it, tablet will +power itself off. + +Self-updating of U-Boot is performed by placing ``u-boot-dtb-tegra.bin`` on 1st +partition of microSD, inserting it into the tablet and booting with a pressed +``volume down`` button. Boot ---- -After flashing ``repart-block.bin`` the device should reboot and turn -itself off. This is normal behavior if no boot configuration is -found. +To boot Linux, U-Boot will look for an ``extlinux.conf`` on MicroSD and then on +eMMC. Additionally, if the Volume Down button is pressed while booting, the +device will enter bootmenu. Bootmenu contains entries to mount MicroSD and eMMC +as mass storage, fastboot, reboot, reboot RCM, poweroff, enter U-Boot console +and update bootloader (check the next chapter). -To boot Linux, U-Boot will look for an ``extlinux.conf`` on MicroSD -and then on eMMC. Additionally if Volume Down button is pressed -while booting device will enter bootmenu. Bootmenu contains entries -to mount MicroSD and eMMC as mass storage, fastboot, reboot, reboot -RCM, poweroff, enter U-Boot console and update bootloader (check next -chapter). - -Flashing ``repart-block.bin`` eliminates vendor restriction on eMMC -and allows the user to use/partition it in any way the user desires. +Flashing ``repart-block.bin`` eliminates vendor restrictions on eMMC and allows +the user to use/partition it in any way the user desires. Self Upgrading -------------- -Place your ``u-boot-dtb-tegra.bin`` on the first partition of the -MicroSD card and insert it into the tablet. Enter bootmenu, choose -update bootloader option with Power button and U-Boot should update -itself. Once the process is completed, U-Boot will ask to press any -button to reboot. +Place your ``u-boot-dtb-tegra.bin`` on the first partition of the MicroSD card +and insert it into the tablet. Enter bootmenu, choose update the bootloader +option with the Power button and U-Boot should update itself. Once the process +is completed, U-Boot will ask to press any button to reboot. diff --git a/doc/board/htc/endeavoru.rst b/doc/board/htc/endeavoru.rst index 950c713f2fa..e0edefe28ae 100644 --- a/doc/board/htc/endeavoru.rst +++ b/doc/board/htc/endeavoru.rst @@ -3,17 +3,16 @@ U-Boot for the HTC One X (endeavoru) ==================================== -``DISCLAMER!`` Moving your HTC ONe X to use U-Boot assumes -replacement of the vendor hboot. Vendor android firmwares -will no longer be able to run on the device. -This replacement IS reversible. +``DISCLAMER!`` Moving your HTC ONe X to use U-Boot assumes replacement of the +vendor hboot. Vendor android firmwares will no longer be able to run on the +device. This replacement IS reversible. Quick Start ----------- - Build U-Boot -- Pack U-Boot into repart-block -- Flash repart-block into the eMMC +- Process U-Boot +- Flashing U-Boot into the eMMC - Boot - Self Upgrading @@ -27,63 +26,100 @@ Build U-Boot $ make After the build succeeds, you will obtain the final ``u-boot-dtb-tegra.bin`` -image, ready for flashing (but check the next section for additional -adjustments). +image, ready for further processing. -Pack U-Boot into repar-block ----------------------------- +Process U-Boot +-------------- -``DISCLAMER!`` All questions related to re-crypt work should be -asked in re-crypt repo issues. NOT HERE! +``DISCLAMER!`` All questions related to the re-crypt work should be asked +in re-crypt repo issues. NOT HERE! -re-crypt is a small script which packs ``u-boot-dtb-tegra.bin`` in -form usable by device. This process is required only on the first -installation or to recover the device in case of a failed update. +re-crypt is a tool that processes the ``u-boot-dtb-tegra.bin`` binary into form +usable by device. This process is required only on the first installation or +to recover the device in case of a failed update. + +Permanent installation can be performed either by using the nv3p protocol or by +pre-loading just built U-Boot into RAM. + +Processing for the NV3P protocol +******************************** .. code-block:: bash - $ git clone https://github.com/clamor-s/re-crypt.git - $ cd re-crypt # place your u-boot-dtb-regra.bin here - $ ./re-crypt.sh -d endeavoru + $ git clone https://gitlab.com/grate-driver/re-crypt.git + $ cd re-crypt # place your u-boot-dtb-tegra.bin here + $ ./re-crypt.py --dev endeavoru -Script will produce you a ``repart-block.bin`` ready to flash. +The script will produce a ``repart-block.bin`` ready to flash. -Flash repart-block into the eMMC --------------------------------- +Processing for pre-loaded U-Boot +******************************** -``DISCLAMER!`` All questions related to NvFlash should be asked -in the proper place. NOT HERE! Flashing repart-block will erase -all your eMMC, so make a backup before! +The procedure is the same, but the ``--split`` argument is used with the +``re-crypt.py``. The script will produce ``bct.img`` and ``ebt.img`` ready +to flash. -``repart-block.bin`` contains BCT and bootloader in encrypted state -in form which can just be written RAW at the start of eMMC. +Flashing U-Boot into the eMMC +----------------------------- + +``DISCLAMER!`` All questions related to NvFlash should be asked in the proper +place. NOT HERE! Flashing U-Boot will erase all eMMC, so make a backup before! + +Permanent installation can be performed either by using the nv3p protocol or by +pre-loading just built U-Boot into RAM. + +Flashing with the NV3P protocol +******************************* + +Nv3p is a custom Nvidia protocol used to recover bricked devices. Devices can +enter it either by using ``wheelie`` with the correct ``blob.bin`` file or by +pre-loading vendor bootloader with the Fusée Gelée. + +With nv3p, ``repart-block.bin`` is used. It contains BCT and a bootloader in +encrypted state in form, which can just be written RAW at the start of eMMC. .. code-block:: bash $ wheelie --blob blob.bin $ nvflash --resume --rawdevicewrite 0 1024 repart-block.bin +When flashing is done, reboot the device. + +Flashing with a pre-loaded U-Boot +********************************* + +U-Boot pre-loaded into RAM acts the same as when it was booted "cold". Currently +U-Boot supports bootmenu entry fastboot, which allows to write a processed copy +of U-Boot permanently into eMMC. + +While pre-loading U-Boot, hold the ``volume down`` button which will trigger +the bootmenu. There, select ``fastboot`` using the volume and power buttons. +After, on host PC, do: + +.. code-block:: bash + + $ fastboot flash 0.1 bct.img + $ fastboot flash 0.2 ebt.img + $ fastboot reboot + +Device will reboot. + Boot ---- -After flashing ``repart-block.bin`` the device should reboot and turn -itself off. This is normal behavior if no boot configuration is -found. +To boot Linux, U-Boot will look for an ``extlinux.conf`` on eMMC. Additionally, +if the Volume Down button is pressed while booting, the device will enter +bootmenu. Bootmenu contains entries to mount eMMC as mass storage, fastboot, +reboot, reboot RCM, poweroff, enter U-Boot console and update bootloader (check +the next chapter). -To boot Linux, U-Boot will look for an ``extlinux.conf`` configuration -on eMMC. Additionally if Volume Down button is pressed while booting -device will enter bootmenu. Bootmenu contains entries to mount eMMC as -mass storage, fastboot, reboot, reboot RCM, poweroff, enter U-Boot -console and update bootloader (check next chapter). - -Flashing ``repart-block.bin`` eliminates vendor restriction on eMMC -and allows the user to use/partition it in any way the user desires. +Flashing ``repart-block.bin`` eliminates vendor restrictions on eMMC and allows +the user to use/partition it in any way the user desires. Self Upgrading -------------- -Place your ``u-boot-dtb-tegra.bin`` on the first partition of the -eMMC (using ability of u-boot to mount it). Enter bootmenu, choose -update bootloader option with Power button and U-Boot should update -itself. Once the process is completed, U-Boot will ask to press any -button to reboot. +Place your ``u-boot-dtb-tegra.bin`` on the first partition of the eMMC (using +ability of u-boot to mount it). Enter bootmenu, choose update bootloader option +with Power button and U-Boot should update itself. Once the process is +completed, U-Boot will ask to press any button to reboot. diff --git a/doc/board/lg/x3_t30.rst b/doc/board/lg/x3_t30.rst index 5c564aabc6a..618b00d34e3 100644 --- a/doc/board/lg/x3_t30.rst +++ b/doc/board/lg/x3_t30.rst @@ -3,17 +3,16 @@ U-Boot for the LG X3 T30 device family ====================================== -``DISCLAMER!`` Moving your LG P880 or P895 to use U-Boot -assumes replacement of the vendor LG bootloader. Vendor -android firmwares will no longer be able to run on the -device. This replacement IS reversible. +``DISCLAMER!`` Moving your LG P880 or P895 to use U-Boot assumes replacement +of the vendor LG bootloader. Vendor android firmwares will no longer be able +to run on the device. This replacement IS reversible. Quick Start ----------- - Build U-Boot -- Pack U-Boot into repart-block -- Flash repart-block into the eMMC +- Process U-Boot +- Flashing U-Boot into the eMMC - Boot - Self Upgrading @@ -30,64 +29,100 @@ board defconfig. Valid fragments are ``p880.config`` and ``p895.config``. $ make After the build succeeds, you will obtain the final ``u-boot-dtb-tegra.bin`` -image, ready for flashing (but check the next section for additional -adjustments). +image, ready for further processing. -Pack U-Boot into repar-block ----------------------------- +Process U-Boot +-------------- -``DISCLAMER!`` All questions related to re-crypt work should be -asked in re-crypt repo issues. NOT HERE! +``DISCLAMER!`` All questions related to the re-crypt work should be asked +in re-crypt repo issues. NOT HERE! -re-crypt is a small script which packs ``u-boot-dtb-tegra.bin`` in -form usable by device. This process is required only on the first -installation or to recover the device in case of a failed update. +re-crypt is a tool that processes the ``u-boot-dtb-tegra.bin`` binary into form +usable by device. This process is required only on the first installation or +to recover the device in case of a failed update. + +Permanent installation can be performed either by using the nv3p protocol or by +pre-loading just built U-Boot into RAM. + +Processing for the NV3P protocol +******************************** .. code-block:: bash - $ git clone https://github.com/clamor-s/re-crypt.git - $ cd re-crypt # place your u-boot-dtb-regra.bin here - $ ./re-crypt.sh -d p895 + $ git clone https://gitlab.com/grate-driver/re-crypt.git + $ cd re-crypt # place your u-boot-dtb-tegra.bin here + $ ./re-crypt.py --dev p895 -Script will produce you a ``repart-block.bin`` ready to flash. +The script will produce a ``repart-block.bin`` ready to flash. -Flash repart-block into the eMMC --------------------------------- +Processing for pre-loaded U-Boot +******************************** -``DISCLAMER!`` All questions related to NvFlash should be asked -in the proper place. NOT HERE! Flashing repart-block will erase -all your eMMC, so make a backup before! +The procedure is the same, but the ``--split`` argument is used with the +``re-crypt.py``. The script will produce ``bct.img`` and ``ebt.img`` ready +to flash. -``repart-block.bin`` contains BCT and bootloader in encrypted state -in form which can just be written RAW at the start of eMMC. +Flashing U-Boot into the eMMC +----------------------------- + +``DISCLAMER!`` All questions related to NvFlash should be asked in the proper +place. NOT HERE! Flashing U-Boot will erase all eMMC, so make a backup before! + +Permanent installation can be performed either by using the nv3p protocol or by +pre-loading just built U-Boot into RAM. + +Flashing with the NV3P protocol +******************************* + +Nv3p is a custom Nvidia protocol used to recover bricked devices. Devices can +enter it either by using ``wheelie`` with the correct ``blob.bin`` file or by +pre-loading vendor bootloader with the Fusée Gelée. + +With nv3p, ``repart-block.bin`` is used. It contains BCT and a bootloader in +encrypted state in form, which can just be written RAW at the start of eMMC. .. code-block:: bash $ wheelie --blob blob.bin $ nvflash --resume --rawdevicewrite 0 1024 repart-block.bin +When flashing is done, reboot the device. + +Flashing with a pre-loaded U-Boot +********************************* + +U-Boot pre-loaded into RAM acts the same as when it was booted "cold". Currently +U-Boot supports bootmenu entry fastboot, which allows to write a processed copy +of U-Boot permanently into eMMC. + +While pre-loading U-Boot, hold the ``volume down`` button which will trigger +the bootmenu. There, select ``fastboot`` using the volume and power buttons. +After, on host PC, do: + +.. code-block:: bash + + $ fastboot flash 0.1 bct.img + $ fastboot flash 0.2 ebt.img + $ fastboot reboot + +Device will reboot. + Boot ---- -After flashing ``repart-block.bin`` the device should reboot and turn -itself off. This is normal behavior if no boot configuration is -found. +To boot Linux, U-Boot will look for an ``extlinux.conf`` on eMMC. Additionally, +if the Volume Down button is pressed while booting, the device will enter +bootmenu. Bootmenu contains entries to mount eMMC as mass storage, fastboot, +reboot, reboot RCM, poweroff, enter U-Boot console and update bootloader (check +the next chapter). -To boot Linux, U-Boot will look for an ``extlinux.conf`` on MicroSD -and then on eMMC. Additionally if Volume Down button is pressed -while booting device will enter bootmenu. Bootmenu contains entries -to mount MicroSD and eMMC as mass storage, fastboot, reboot, reboot -RCM, poweroff, enter U-Boot console and update bootloader (check next -chapter). - -Flashing ``repart-block.bin`` eliminates vendor restriction on eMMC -and allows the user to use/partition it in any way the user desires. +Flashing ``repart-block.bin`` eliminates vendor restrictions on eMMC and allows +the user to use/partition it in any way the user desires. Self Upgrading -------------- -Place your ``u-boot-dtb-tegra.bin`` on the first partition of the -eMMC (using ability of u-boot to mount it). Enter bootmenu, choose -update bootloader option with Power button and U-Boot should update -itself. Once the process is completed, U-Boot will ask to press any -button to reboot. +Place your ``u-boot-dtb-tegra.bin`` on the first partition of the eMMC (using +ability of u-boot to mount it). Enter bootmenu, choose update bootloader option +with Power button and U-Boot should update itself. Once the process is +completed, U-Boot will ask to press any button to reboot. From bb8a602ca9bb6577309081b66d0f01556a2700f3 Mon Sep 17 00:00:00 2001 From: Svyatoslav Ryhel Date: Mon, 25 Dec 2023 17:30:37 +0200 Subject: [PATCH 2/6] tegra114: clock: define MIPI calibration peripheral clock TEGRA114_CLK_MIPI_CAL is a fixed child of PLLP and is used as clock source of the MIPI PHY calibration mechanism. Signed-off-by: Svyatoslav Ryhel --- arch/arm/include/asm/arch-tegra114/clock-tables.h | 2 +- arch/arm/mach-tegra/tegra114/clock.c | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/arch/arm/include/asm/arch-tegra114/clock-tables.h b/arch/arm/include/asm/arch-tegra114/clock-tables.h index 95fadd0c594..af4d48144a8 100644 --- a/arch/arm/include/asm/arch-tegra114/clock-tables.h +++ b/arch/arm/include/asm/arch-tegra114/clock-tables.h @@ -109,7 +109,7 @@ enum periph_id { PERIPH_ID_UART3, /* 56 */ - PERIPH_ID_RESERVED56, + PERIPH_ID_MIPI_CAL, PERIPH_ID_EMC, PERIPH_ID_USB2, PERIPH_ID_USB3, diff --git a/arch/arm/mach-tegra/tegra114/clock.c b/arch/arm/mach-tegra/tegra114/clock.c index 418ad48ddc2..2ee755bc649 100644 --- a/arch/arm/mach-tegra/tegra114/clock.c +++ b/arch/arm/mach-tegra/tegra114/clock.c @@ -299,7 +299,7 @@ static s8 periph_id_to_internal_id[PERIPH_ID_COUNT] = { PERIPHC_UART3, /* 56 */ - NONE(RESERVED56), + NONE(MIPI_CAL), PERIPHC_EMC, NONE(USB2), NONE(USB3), @@ -635,7 +635,6 @@ enum periph_id clk_id_to_periph_id(int clk_id) case PERIPH_ID_RESERVED35: case PERIPH_ID_RESERVED43: case PERIPH_ID_RESERVED45: - case PERIPH_ID_RESERVED56: case PERIPH_ID_RESERVED76: case PERIPH_ID_RESERVED77: case PERIPH_ID_RESERVED78: From 27e69fe99ac102c626a251e2e1efb7e17d73171c Mon Sep 17 00:00:00 2001 From: Svyatoslav Ryhel Date: Mon, 11 Dec 2023 11:29:40 +0200 Subject: [PATCH 3/6] ARM: tegra124: convert TEGRA_SUPPORT_NON_SECURE into Kconfig Signed-off-by: Svyatoslav Ryhel --- README | 7 ------- arch/arm/mach-tegra/Kconfig | 7 +++++++ arch/arm/mach-tegra/board.c | 3 --- 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/README b/README index 8efaebcf528..5d472ecc85b 100644 --- a/README +++ b/README @@ -300,13 +300,6 @@ The following options need to be configured: different from COUNTER_FREQUENCY, and can only be determined at run time. -- Tegra SoC options: - CONFIG_TEGRA_SUPPORT_NON_SECURE - - Support executing U-Boot in non-secure (NS) mode. Certain - impossible actions will be skipped if the CPU is in NS mode, - such as ARM architectural timer initialization. - - Linux Kernel Interface: CONFIG_OF_LIBFDT diff --git a/arch/arm/mach-tegra/Kconfig b/arch/arm/mach-tegra/Kconfig index b18885f4c1f..fb1a46b7808 100644 --- a/arch/arm/mach-tegra/Kconfig +++ b/arch/arm/mach-tegra/Kconfig @@ -176,6 +176,13 @@ config TEGRA_DISCONNECT_UDC_ON_BOOT USB controller when U-Boot boots to avoid leaving a stale USB device present. +config TEGRA_SUPPORT_NON_SECURE + bool "Support executing U-Boot in non-secure (NS) mode" + depends on TEGRA124 + help + Certain impossible actions will be skipped if the CPU is in NS mode, + such as ARM architectural timer initialization. + config CI_UDC_HAS_HOSTPC def_bool y depends on CI_UDC && !TEGRA20 diff --git a/arch/arm/mach-tegra/board.c b/arch/arm/mach-tegra/board.c index 9224743d0ed..327d70bd4cc 100644 --- a/arch/arm/mach-tegra/board.c +++ b/arch/arm/mach-tegra/board.c @@ -77,9 +77,6 @@ bool spl_was_boot_source(void) } #if defined(CONFIG_TEGRA_SUPPORT_NON_SECURE) -#if !defined(CONFIG_TEGRA124) -#error tegra_cpu_is_non_secure has only been validated on Tegra124 -#endif bool tegra_cpu_is_non_secure(void) { /* From e692aded5e31a9a08a618d3ce17b826decbd04dc Mon Sep 17 00:00:00 2001 From: Svyatoslav Ryhel Date: Mon, 11 Dec 2023 11:10:23 +0200 Subject: [PATCH 4/6] ARM: tegra114: expand MC register map This expansion is required for nonsecure detection to work correctly. Signed-off-by: Svyatoslav Ryhel --- arch/arm/include/asm/arch-tegra114/mc.h | 29 +++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/arch/arm/include/asm/arch-tegra114/mc.h b/arch/arm/include/asm/arch-tegra114/mc.h index 3930bab571f..2fd2f50b0e5 100644 --- a/arch/arm/include/asm/arch-tegra114/mc.h +++ b/arch/arm/include/asm/arch-tegra114/mc.h @@ -25,9 +25,34 @@ struct mc_ctlr { u32 mc_emem_adr_cfg; /* offset 0x54 */ u32 mc_emem_adr_cfg_dev0; /* offset 0x58 */ u32 mc_emem_adr_cfg_dev1; /* offset 0x5C */ - u32 reserved3[12]; /* offset 0x60 - 0x8C */ + u32 reserved3[4]; /* offset 0x60 - 0x6C */ + u32 mc_security_cfg0; /* offset 0x70 */ + u32 mc_security_cfg1; /* offset 0x74 */ + u32 reserved4[6]; /* offset 0x7C - 0x8C */ u32 mc_emem_arb_reserved[28]; /* offset 0x90 - 0xFC */ - u32 reserved4[338]; /* offset 0x100 - 0x644 */ + u32 reserved5[74]; /* offset 0x100 - 0x224 */ + u32 mc_smmu_translation_enable_0; /* offset 0x228 */ + u32 mc_smmu_translation_enable_1; /* offset 0x22C */ + u32 mc_smmu_translation_enable_2; /* offset 0x230 */ + u32 mc_smmu_translation_enable_3; /* offset 0x234 */ + u32 mc_smmu_afi_asid; /* offset 0x238 */ + u32 mc_smmu_avpc_asid; /* offset 0x23C */ + u32 mc_smmu_dc_asid; /* offset 0x240 */ + u32 mc_smmu_dcb_asid; /* offset 0x244 */ + u32 reserved6[2]; /* offset 0x248 - 0x24C */ + u32 mc_smmu_hc_asid; /* offset 0x250 */ + u32 mc_smmu_hda_asid; /* offset 0x254 */ + u32 mc_smmu_isp_asid; /* offset 0x258 */ + u32 reserved7[2]; /* offset 0x25C - 0x260 */ + u32 mc_smmu_mpe_asid; /* offset 0x264 */ + u32 mc_smmu_nv_asid; /* offset 0x268 */ + u32 mc_smmu_nv2_asid; /* offset 0x26C */ + u32 mc_smmu_ppcs_asid; /* offset 0x270 */ + u32 reserved8[1]; /* offset 0x274 */ + u32 mc_smmu_sata_asid; /* offset 0x278 */ + u32 mc_smmu_vde_asid; /* offset 0x27C */ + u32 mc_smmu_vi_asid; /* offset 0x280 */ + u32 reserved9[241]; /* offset 0x284 - 0x644 */ u32 mc_video_protect_bom; /* offset 0x648 */ u32 mc_video_protect_size_mb; /* offset 0x64c */ u32 mc_video_protect_reg_ctrl; /* offset 0x650 */ From 5c39fbfa134a28ae580a9d6768d36d7f5b964724 Mon Sep 17 00:00:00 2001 From: Svyatoslav Ryhel Date: Mon, 11 Dec 2023 11:37:07 +0200 Subject: [PATCH 5/6] ARM: tegra114: support nonsecure state detection Principle is exactly the same as on T124, testing of register which behaves differently in secure and non-secure states. Signed-off-by: Svyatoslav Ryhel --- arch/arm/mach-tegra/Kconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/arm/mach-tegra/Kconfig b/arch/arm/mach-tegra/Kconfig index fb1a46b7808..c8907bccec5 100644 --- a/arch/arm/mach-tegra/Kconfig +++ b/arch/arm/mach-tegra/Kconfig @@ -178,7 +178,7 @@ config TEGRA_DISCONNECT_UDC_ON_BOOT config TEGRA_SUPPORT_NON_SECURE bool "Support executing U-Boot in non-secure (NS) mode" - depends on TEGRA124 + depends on TEGRA114 || TEGRA124 help Certain impossible actions will be skipped if the CPU is in NS mode, such as ARM architectural timer initialization. From 86e581a5609dc4b2876e5c3e2e458c91879b353c Mon Sep 17 00:00:00 2001 From: Svyatoslav Ryhel Date: Fri, 5 Jan 2024 17:35:26 +0200 Subject: [PATCH 6/6] board: htc: endeavoru: add an early SPL RCM hook Unlike all other supported Tegra devices and most known Tegra devices, the HTC One X has no hardware way to enter APX/RCM mode, which may lead to a dangerous situation when, if BCT is set correctly and the bootloader is faulty, the device will hang in a permanent brick state. Exiting from this state can be done only by disassembling the device and shortening the testpad to the ground. To prevent this or to minimize the probability of such an accident, it was proposed to add the RCM rebooting hook as early into SPL as possible since SPL is much more robust and has minimal changes that can break bootflow. gpio_early_init_uart() function was chosen as it is the earliest function exposed for setup by the device. Hook performs a check for volume up button state and triggers RCM if it is pressed. Signed-off-by: Svyatoslav Ryhel --- board/htc/endeavoru/endeavoru-spl.c | 56 +++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/board/htc/endeavoru/endeavoru-spl.c b/board/htc/endeavoru/endeavoru-spl.c index 2525b50d3e8..3c4caff8069 100644 --- a/board/htc/endeavoru/endeavoru-spl.c +++ b/board/htc/endeavoru/endeavoru-spl.c @@ -9,7 +9,12 @@ * Svyatoslav Ryhel */ +#include +#include +#include #include +#include +#include #include #include @@ -30,6 +35,8 @@ #define TPS80032_SMPS1_CFG_STATE_DATA (0x0100 | TPS80032_SMPS1_CFG_STATE_REG) #define TPS80032_SMPS2_CFG_STATE_DATA (0x0100 | TPS80032_SMPS2_CFG_STATE_REG) +#define TEGRA_GPIO_PS0 144 + void pmic_enable_cpu_vdd(void) { /* Set VDD_CORE to 1.200V. */ @@ -45,3 +52,52 @@ void pmic_enable_cpu_vdd(void) tegra_i2c_ll_write(TPS80032_CTL1_I2C_ADDR, TPS80032_SMPS1_CFG_STATE_DATA); udelay(10 * 1000); } + +/* + * Unlike all other supported Tegra devices and most known Tegra devices, the + * HTC One X has no hardware way to enter APX/RCM mode, which may lead to a + * dangerous situation when, if BCT is set correctly and the bootloader is + * faulty, the device will hang in a permanent brick state. Exiting from this + * state can be done only by disassembling the device and shortening testpad + * to the ground. + * + * To prevent this or to minimize the probability of such an accident, it was + * proposed to add the RCM rebooting hook as early into SPL as possible since + * SPL is much more robust and has minimal changes that can break bootflow. + * + * gpio_early_init_uart() function was chosen as it is the earliest function + * exposed for setup by the device. Hook performs a check for volume up + * button state and triggers RCM if it is pressed. + */ +void gpio_early_init_uart(void) +{ + struct gpio_ctlr *ctlr = (struct gpio_ctlr *)NV_PA_GPIO_BASE; + struct gpio_ctlr_bank *bank = &ctlr->gpio_bank[GPIO_BANK(TEGRA_GPIO_PS0)]; + u32 value; + + /* Configure pinmux */ + pinmux_set_func(PMUX_PINGRP_KB_ROW8_PS0, PMUX_FUNC_KBC); + pinmux_set_pullupdown(PMUX_PINGRP_KB_ROW8_PS0, PMUX_PULL_UP); + pinmux_tristate_disable(PMUX_PINGRP_KB_ROW8_PS0); + pinmux_set_io(PMUX_PINGRP_KB_ROW8_PS0, PMUX_PIN_INPUT); + + /* Configure GPIO direction as input. */ + value = readl(&bank->gpio_dir_out[GPIO_PORT(TEGRA_GPIO_PS0)]); + value &= ~(1 << GPIO_BIT(TEGRA_GPIO_PS0)); + writel(value, &bank->gpio_dir_out[GPIO_PORT(TEGRA_GPIO_PS0)]); + + /* Enable the pin as a GPIO */ + value = readl(&bank->gpio_config[GPIO_PORT(TEGRA_GPIO_PS0)]); + value |= 1 << GPIO_BIT(TEGRA_GPIO_PS0); + writel(value, &bank->gpio_config[GPIO_PORT(TEGRA_GPIO_PS0)]); + + /* Get GPIO value */ + value = readl(&bank->gpio_in[GPIO_PORT(TEGRA_GPIO_PS0)]); + value = (value >> GPIO_BIT(TEGRA_GPIO_PS0)) & 1; + + /* Enter RCM if button is pressed */ + if (!value) { + tegra_pmc_writel(2, PMC_SCRATCH0); + tegra_pmc_writel(PMC_CNTRL_MAIN_RST, PMC_CNTRL); + } +}