..  _netmodule-hw34:

*******************************
NetModule HW34 (XG900 A-Sample)
*******************************

.. important::

  netmodule-hw34 support is currently only available on the features branch
  feat/netmodule-bsp

.. image:: netmodule-hw34/hw34.png

CoreOS build instruction
========================

.. code-block:: 

   MACHINE=netmodule-hw34 bitbake coreos-image-all-features
   cd tmp/deploy/images/netmodule-hw34

.. list-table:: Image artifacts for NetModule HW32
   :widths: 25 75
   :header-rows: 1

   * - Filename
     - Description
   * - <IMAGE>-netmodule-hw34.swu
     - System image bundle used by the CoreOS installer or the CoreOS updater
   * - coreos-installer-netmodule-hw34.efi
     - CoreOS installer bundled in a single EFI binary
   * - tiboot3.bin
     - SPL Bootloader for the wakeup domain (arm32 R5 core)
   * - tispl.bin
     - SPL bootloader for the main domain (aarch64 main core)
   * - u-boot.bin
     - Third stage bootloader the main domain (aarch64 main core)

.. hint:: 

   Only the .swu image is need if you have already a working installation of CoreOS
   running on the board that you want to update.

CoreOS Pre-installation guide
=============================

The CoreOS installation process expect a working EFI firmware based on u-boot
running on the board.

For board that have no firmware or a defect firmware, we can provide the firmware by
booting over USB.

First, we need to put the board in USB Boot mode by modifying the dip-switch
on the back of the board:

.. code-block::

            ON
      S500  ▄ ▀ ▄ ▀ ▄ ▄ ▄ ▄
            1 2 3 4 5 6 7 8

.. hint::

  Unflashed board or board without a valid tiboot3.bin image will default to
  USB boot mode, so settings the dip-switch may be skipped in this case.

Then you need to populate the jumper X600 near the USB port:

.. image:: netmodule-hw34/hw34-usb-device.png

Then power-up the board by first apply 12V throug the main connector, then
connect a USB-C cable. Console access to the board can be accessed using the
serial port on the main connector.


.. important:: 

   When removing the power, ensure that the USB cable is removed first. Otherwise
   the processor will not get shutdown properly


Now you should see the board from you computer:

.. code-block:: sh

   lsusb | grep DFU
   Bus 003 Device 048: ID 0451:6165 Texas Instruments, Inc. AM64x DFU

Now we start downloading the bootloaders into RAM by using dfu-utils:

.. code-block:: sh

   dfu-util -D tiboot3.bin -a 0
   dfu-util -D tispl.bin -a 0

   # Eject and start execution of tispl
   dfu-util -e -a 0
   dfu-util -D u-boot.img -a 1

   # Eject ans tart of u-boot.img
   dfu-util -e -a 1

.. hint::

    The firmware was uploaded to the RAM, thus will not survice a reboot.
    

Now that we have a firmware running, CoreOS can be installed by following
the :ref:`generic installation manual<Installation Manual>`.


CoreOS Post-Installation
========================

When the installation of CoreOS is done, power down the board by first
removing the USB-C cable then the main power.

Now, put the board back in emmc boot mode:

.. code-block::

            ON
      S500  ▀ ▄ ▄ ▀ ▄ ▄ ▄ ▄
            1 2 3 4 5 6 7 8

Then power-up the board again and CoreOS should boot.
