NameLast modifiedSizeLicense

Parent Directory Parent Directory
image/png FrontPanel.png 12-Jan-2018 17:03 142.0K open
other Image 26-Feb-2018 19:50 9.4M open
image/png RearPanel.png 12-Jan-2018 17:03 168.1K open
application/zip board_recovery_image_0.7.5.zip 12-Jan-2018 17:03 4.6M open
application/zip board_recovery_image_0.8.1.zip 12-Jan-2018 17:03 4.6M open
other fvp-base-gicv2-psci.dtb 12-Jan-2018 17:03 10.7K open
application/octet-stream fvp_bl1.bin 12-Jan-2018 17:03 16.0K open
application/octet-stream fvp_fip.bin 12-Jan-2018 17:03 2.5M open
text hwpack_linaro-arm64_supported.manifest.txt 12-Jan-2018 17:04 703 open
text hwpack_linaro-lt-vexpress64-rtsm_20140823-686_arm64_supported.manifest.txt 12-Jan-2018 17:04 602 open
application/x-tar hwpack_linaro-lt-vexpress64-rtsm_20140823-686_arm64_supported.tar.gz 26-Feb-2018 19:50 43.6M open
other img-foundation.axf 26-Feb-2018 19:50 9.6M open
other img.axf 26-Feb-2018 19:50 9.6M open
other juno.dtb 12-Jan-2018 17:04 9.8K open
application/octet-stream juno_bl1.bin 12-Jan-2018 17:04 14.0K open
application/octet-stream juno_fip.bin 12-Jan-2018 17:04 1.0M open
other linaro-image-lamp-genericarmv8-20140823-710.manifest 12-Jan-2018 17:04 142.1K open
other linaro-image-lamp-genericarmv8-20140823-710.rootfs.manifest 12-Jan-2018 17:04 53.7K open
application/x-tar linaro-image-lamp-genericarmv8-20140823-710.rootfs.tar.gz 26-Feb-2018 19:50 425.1M open
other linaro-image-minimal-genericarmv8-20140823-710.manifest 12-Jan-2018 17:04 8.3K open
other linaro-image-minimal-genericarmv8-20140823-710.rootfs.manifest 12-Jan-2018 17:04 2.8K open
application/x-tar linaro-image-minimal-genericarmv8-20140823-710.rootfs.tar.gz 26-Feb-2018 19:51 16.2M open
text lt-vexpress64-openembedded_lamp-armv8-gcc-4.9_20140823-686.html 12-Jan-2018 17:04 3.5K open
other lt-vexpress64-openembedded_lamp-armv8-gcc-4.9_20140823-686.img.gz 26-Feb-2018 19:51 487.5M open
other lt-vexpress64-openembedded_lamp-armv8-gcc-4.9_20140823-686.img.gz.zsync 26-Feb-2018 19:51 19.5M open
text lt-vexpress64-openembedded_minimal-armv8-gcc-4.9_20140823-686.html 12-Jan-2018 17:05 3.5K open
other lt-vexpress64-openembedded_minimal-armv8-gcc-4.9_20140823-686.img.gz 26-Feb-2018 19:51 75.3M open
other lt-vexpress64-openembedded_minimal-armv8-gcc-4.9_20140823-686.img.gz.zsync 26-Feb-2018 19:51 19.5M open
other startup.nsh 12-Jan-2018 17:06 163 open
application/octet-stream uefi_juno.bin 12-Jan-2018 17:06 960.0K open


Update on 9th September 2014
A new firmware is available from ARM that addresses the board lock-ups associated with CPUidle. Please install the new board_recovery_image v0.8.1 (for instructions please see the “firmware update” section at the bottom of the binary image installation tab).
You will still need to enable CPUIdle in the kernel config before you can use it. Note that the new firmware held up to constant aggressive CPUidle stress testing for 8 days, but did eventually lock up after that time. If you intend to run an extermely long soak test then you may wish to consider leaving CPUidle disabled.

About the Linaro OpenEmbedded Release for ARMv8-A

OpenEmbedded is a software framework used for creating Linux distributions aimed for, but not restricted to, embedded devices. The port offered here has been built using Linaro GCC version 4.8.

About the Juno ARM Development Platform

The Juno ARM Development Platform (ADP) is a software development platform for ARMv8-A. It includes:

  • The Juno Versatile Express board
  • ARMv8-A reference software ports available through Linaro
  • Optional LogicTile Express FPGA board to extend the Juno system – this adds a large FPGA to Juno that can be used for driver development or prototyping.

The Juno hardware delivers to software developers an open, vendor neutral ARMv8-A development platform with:

  • Cortex® A57 and A53 MPCore™ for ARMv8-A big.LITTLE
  • Mali™-T624 for 3D Graphics Acceleration and GP-GPU compute
  • A SoC architecture aligned with Level 1 (Server) Base System Architecture

The Juno ADP is available from ARM, please visit www.arm.com/juno for details.

About the Linaro Stable Kernel (LSK)

The Linaro Stable Kernel (LSK) is produced, validated and released by Linaro and is based on the Linux stable kernel tree. The LSK focuses on quality and stability and is therefore a great foundation for product development. It also includes backports of commonly desired features, provided they meet the quality requirements, and also any bug fixes.

LSK releases appear monthly. Sources are also made available so you can build your own images (see the ‘Building from Source’ tab).

License

The use of Juno software is subject to the terms of the Juno End User License Agreement.

Support

Please send any ARM support enquiries to juno-support@arm.com. Engineers at Linaro Members can receive support for Juno by sending support requests to support@linaro.org or visiting http://support.linaro.org.

Functionality Listed by Software Component

Linux Kernel

  • Support for the ARM Juno Development Platform
  • Limited set of peripherals present on the Juno development board: on-chip USB, non-secure UART, HDMI output, keyboard and mouse functionality over PS/2 connector, ethernet support is provided via on-board SMSC ethernet chip.
  • Full USB driver support in Linux, for access to mass storage and input devices.
  • big.LITTLE MP support for all 6 cores.
  • DVFS stable operating points are enabled for nominal and overdrive

UEFI

  • Booting an Operating System from NOR Flash or USB mass storage
  • Support for Ethernet and PXE boot
  • Version: v1.0-rc0

ARM Trusted Firmware

  • The ARM Trusted Firmware provides an open source framework enabling easy integration of secure OS and run-time services to ARMv8-A platforms
  • Loads the System Control Processor(SCP) firmware into the SCP
  • Initializes the Trusted World before transitioning into Normal World.
  • Services CPU hotplug requests coming from Normal World
  • Provides a standard Power State Coordintion Interface (PSCI) implementation
  • Version: v0.4-Juno-0.5-rc1

SCP Firmware

  • System configuration
  • DDR initialization
  • Basic power state management for frequency and C-states
  • SCPI commands (Ready, Set/Get Clocks, Set/Get CPU power states)
  • Thermal protection (shutdown at 85C, Linux will receive a warning at 75C)
  • DVFS support
  • Version: 1.0.0-rc3

Known Limitations Listed by Software Component

Linux Kernel

  • The big.LITTLE support is functional but has not yet been tuned for efficiency and performance.
  • The CPUIdle framework is present but disabled in the kernel config due to firmware issues which will be addressed in a future release.

UEFI

  • No display controller support
  • No USB OHCI support. Only EHCI is supported

ARM Trusted Firmware

  • Does not support changing the primary core using SCC General Purpose Register 1.
  • Does not support bringing up secondary cores using PSCI CPU_ON when they have been enabled at boot time by SCP using SCC General Purpose Register 1.

Known Issues

The following known issues are present in this release. Please contact support@linaro.org if you wish to know more information about these issues or have access problems when attempting to view them.

Bug ID Bug title Bug summary
Bug 136 2nd USB Mass storage device fails When attempting to use a second USB storage device on Juno, both sda and sdb will go r/o and then fail to read from the device.
Bug 137 nfs v4 hangs when creating symlinks nfs v4 hangs when creating symlinks
Bug 48 password authentication over SSH doesn’t work please see public bug for details
ARM JSW-749 Linux [Juno-Beta-rc3] Performance is degraded with idle enabled With cpuidle enabled android 64 bit fs shows performance degradation
ARM JSW-746 USB Drive failure at maximum OPP With the overdrive operating point enabled, some USB hard drives don’t work (causes kernel panic)
ARM JSW-727 ’Trace’ does not work in UEFI While configuring DS-5 to trace UEFI execution, an error was returned when connecting DS-5 to the debugger
ARM JSW-711 Reset failure Reset fails if button is pressed during NOR flash write
LP:1212126 perf self test does not execute on Linaro openembedded lamp image please see public bug for details
LP:1212115 phpmysql test fail on Linaro openembedded Lamp image on Lava please see public bug for details
LP:1235239 level 1 translation fault when extracting bzipped tarball please see public bug for details

License

The use of Juno software is subject to the terms of the Juno End User License Agreement.

Installation

Linaro OpenEmbedded releases are made up of the following components.

  • img.gz
pre-built images for minimal and LAMP root filesystems
hwpack_*.tar.gz hardware pack
linaro-image-*.rootfs.tar.gz a choice of Root file system (RootFS) images
Image kernel used by UEFI
juno_bl1.bin ARM Trused Firmware BL1 binary
juno_fip.bin ARM Trused Firmware Firmware Image Package (FIP) binary
juno.dtb Device Tree Binary
board_recovery_image_0.7.5.zip Juno board firmware recovery image

Other files such as *.manifest, *.txt and *.html provide information such as package contents or MD5SUMs about the files they share a common filename with.

Linaro OpenEmbedded images are made up of two components. The Hardware Pack, which contains the kernel, boot loader and/or Device Tree blob and a Root file system (RootFS) of your choice to generate an image.

Linaro provides two methods for installing Linaro binary builds:

  1. Using a pre-built image, which you can download
  2. Assembling your own image using provided components

Pre-Installation Steps

Before any installation begins, it is important that you ensure your board has the latest firmware installed. Please see Juno Board Recovery Image and MCC firmware update below for the latest updates and installation instructions. The 14.08 release has been formally QA tested with Firmware version 0.7.1 and sanity tested with Firmware version 0.7.5, but we always recommend that users install the latest version available.

Using pre-built image

Prerequisites

Installation Steps

  • Unzip the downloaded pre-built image
  • Insert USB drive into your PC and note the assigned '/dev/sdX'
dmesg
DRIVE=/dev/sdX # USB drive found from dmesg above
  • Unmount all partitions on the drive
    • If you do not unmount all of the USB drive’s partitions, you run the risk that the image will not be created successfully.
  • Write the image to the drive
gunzip *minimal*.img.gz
sudo dd if=*minimal*.img of=$DRIVE

Replace *minimal*.img.gz with the full filename of the prebuilt image you are attempting to write to the disk.

After you have created the disk image and before you remove the USB drive from your system, you should make sure you wait for all writes to the USB drive to complete.

The following commands may help with this:

$ sync
$ sudo eject $DRIVE

You should also ensure that you have written the image to the USB drive correctly. To do this, after running the eject command, physically remove the USB drive from the system and re-connect the USB drive again. You must unmount all partitions on the USB drive at this point. Note, due to disconnecting and reconnecting the drive, the device path /dev/sdX may have changed. You should check the dmesg output again to ensure that you know the correct path of your USB drive.

Once you are ready, run the following commands:

$ sudo cmp /dev/sdX *minimal*.img
$ sync
$ sudo eject /dev/sdX

Replace *minimal*.img.gz with the full filename of the prebuilt image you are attempting to write to the disk.

When you are confident that the image was created successfully, skip down to the section “Booting the image”.

Note: Windows users may use the Image Writer for Windows


Building a custom image using pre-built components

Sometimes, you may wish to build your own custom image for your board. Perhaps you wish to use a more recent snapshot of the hardware pack or take the latest Android build. Whatever the reason, you will want to use the Linaro Image Tools to create a custom image.

Using components to generate the image will yield the same functionality found in the pre-built image of the same release.

Prerequisites

  • Ubuntu 12.04 64 bit or newer on your desktop PC, which you can download from www.ubuntu.com
  • Download Artifacts from above
  • Get Linaro image tools. There are multiple ways you can get the latest Linaro Image Tools:

  • Method 1: Install them from the Linaro Image Tools PPA

sudo add-apt-repository ppa:linaro-maintainers/tools
sudo apt-get update
sudo apt-get install linaro-image-tools

  • Method 2: Building from source

wget http://releases.linaro.org/14.08/components/platform/linaro-image-tools/linaro-image-tools-2014.08.tar.gz
  • Insert the USB drive and note the assigned '/dev/sdX'
dmesg | less

Look for a line that looks like the following at the end of the log

[288582.790722] sdc: sdc1 sdc2 sdc3 sdc4 <sdc5 sdc6 >

WARNING: In the next step, make sure you use /dev/"whatever you see above". You can erase your hard drive with the wrong parameter.

  • Create media
sudo linaro-media-create --mmc /dev/sdX --dev juno --hwpack <hwpack filename> --binary <rootfs filename>

After you have created the disk image and before you remove the USB drive from your system, you should make sure you wait for all writes to the USB drive to complete.

The following commands may help with this:

$ sync
$ sudo eject /dev/sdX

Where /dev/sdX is the device node for the USB drive as discovered in the instructions above.

Booting the image

After the media create tool has finished executing, remove the USB drive from your PC and insert it into the board.

Before you can boot the image you will need to install the latest firmware on the board. The instructions below provide information on how to do this.

Once you have the latest firmware installed, you will need to configure UEFI to boot the kernel from the “boot” partition of the USB stick. See the steps directly below for instructions on how to configure UEFI.

UEFI Configuration

The example below shows how a test system was configured. Please note: some of the menu option numbers may be different on your board. In particular, the menu option used to choose the boot partition may change number over a reboot. In the example below, the partition named “boot” was option 4. Please be careful that you choose the correct option that corresponds to the menu options you see on your board.

Also take care that the USB partitions are showing in the menu before selecting a menu option. There is a known bug in UEFI where the partitions on USB drives does not show the first time the menu is displayed. To overcome this, as shown in the example below, the user should enter the menu option "[1] Add Boot Device Entry", by pressing 1 followed by the enter key. Then, when the list display and the USB partitions are missing, please press the ESC key once. This will exit out of the current menu prompt and leave you back at the Boot Menu again. At this point, please press 1 again to re-enter the menu option "[1] Add Boot Device Entry" and continue by selecting the partition named “boot” on the USB drive.

UEFI outputs to UART0 on the board. UART0 uses 115200 baud with 8 bits and no stop bit. Please see the “UARTs” section on the Getting Started tab for more details on the UART configuration of the board.

Example UEFI Configuration

When booting your system, after a short time, you be presented by a boot countdown from 10, thus:

The default boot selection will start in  10 seconds

When you see this prompt, please press the enter key to interrupt the countdown. You will then be presented with a menu, thus:

[1] Linux from NOR Flash
[2] Shell
[3] Boot Manager
Start:

Depending on the configuration of your board, the menu option called “Boot Manager” may not be option 3. In this example, we can see that the Boot Menu is indeed option “3”, so we choose it by pressing the “3” key and pressing enter. You will then be presented with a boot menu, thus:

[1] Add Boot Device Entry
[2] Update Boot Device Entry
[3] Remove Boot Device Entry
[4] Update FDT path
[5] Return to main menu
Choice:

The first thing we need to do is to delete all of the existing Boot Device Entries. Deleting a Boot Device Entry is achieved by pressing the 3 key and pressing enter:

[1] Linux from NOR Flash
Delete entry:

In our example, using the default config from the first time you boot the board, there is only 1 Boot Device Entry: “Linux from NOR Flash”. You must delete this entry by pressing the 1 key and pressing enter. After this, you will be returned to the Boot Menu where you should continue by deleting all Boot Device Entries that are configured.

Once you have done this, you should continue by creating a new Boot Device Entry by selecting option 1 from from the Boot Menu. After selecting the menu option by pressing the 1 key folllowed by enter, you will see a list of available Boot Devices, thus:

[1] Add Boot Device Entry
[2] Update Boot Device Entry
[3] Remove Boot Device Entry
[4] Update FDT path
[5] Return to main menu
Choice: 1
[1] Firmware Volume (0 MB)
[2] Firmware Volume (0 MB)
[3] NOR Flash (63 MB)
[4] VenHw(E7223039-5836-41E1-B542-D7EC736C5E59)
[5] VenHw(02118005-9DA7-443A-92D5-781F022AEDBB)
[6] PXE on MAC Address: 00:02:F7:00:57:DD
[7] TFTP on MAC Address: 00:02:F7:00:57:DD
Select the Boot Device:  

As you will see in the example above, there is no partition named “boot” available to the user. At this point, the user must press the ESC key to exit the “Select the Boot Device” option and return to the Boot Menu. From the Boot Menu, please select option 1 again. The example below shows how this looked on our test system, your results may differ:

[1] Add Boot Device Entry
[2] Update Boot Device Entry
[3] Remove Boot Device Entry
[4] Update FDT path
[5] Return to main menu
Choice: 1
[1] Firmware Volume (4068 MB)
[2] Firmware Volume (4068 MB)
[3] NOR Flash (63 MB)
[4] boot (67 MB)
[5] VenHw(E7223039-5836-41E1-B542-D7EC736C5E59)
[6] VenHw(02118005-9DA7-443A-92D5-781F022AEDBB)
[7] PXE on MAC Address: 00:02:F7:00:57:DD
[8] TFTP on MAC Address: 00:02:F7:00:57:DD
Select the Boot Device:

As you will see, the menu option "boot" has now appeared, allowing us to select the partition named “boot” on the USB drive. In the example above, the partition named “boot” is option 4. Your system may show a different option for the partition named boot on your USB drive. Please examine the menu and choose the appropriate option.

Once you have choosen the Boot Device, you will be prompted for the configuration of that Boot Device.

The first quesion will ask for the file path of the kernel, thus:

File path of the EFI Application or the kernel:

When configuring a system to boot OpenEmbedded, you enter the file path of the kernel as “Image” without the quotes and followed by the enter key, for this is the filename of the kernel in the boot partition on the USB drive.

Next you will be prompted if the kernel has Flattened Device Tree support:

Has FDT support? [y/n]

The answer is yes, so please press the “y” key followed by enter. Next you will be asked if you wish to configure an “initrd” for your system:

Add an initrd: [y/n]

The answer is no, so please press the “n” key followed by enter.

After this you will be asked to supply the arguments required to boot the kernel:

Arguments to pass to the binary:

Please note, copy and paste does not work well over the serial terminal. The user is advised to type the commandline arguments by hand, character at a time, followed by the enter key. The commandline used is shown below:

console=ttyAMA0,115200 rootwait root=/dev/sda2

Finally, after entering the commandline, the final question is simply asking for a title that will appear in the Boot Menu:

Description for this new Entry:

You may enter a simple string of alphanumberic characters use to represent the name of this Boot Device. On our example system, we chose to type the string “Linux on USB”, without the quotes, followed by pressing the enter key.

After entering the description string, you will then be returned to the boot menu:

[1] Add Boot Device Entry
[2] Update Boot Device Entry
[3] Remove Boot Device Entry
[4] Update FDT path
[5] Return to main menu

It may take a long time, perhaps over a minute for UEFI to save the Boot Device Entry.

After you have configured the Boot Device Entry, next you must configure the Flattened Device Tree (FDT) path. You do this by selecting the option “Update FDT path” by pressing the 4 key and pressing enter. As with the Add Boot Device Entry option, next you will be presented with a list of Boot Devices that can host the FDT file. On our test system, the list looked like this:

[1] Firmware Volume (4068 MB)
[2] Firmware Volume (4068 MB)
[3] NOR Flash (63 MB)
[4] boot (67 MB)
[5] VenHw(E7223039-5836-41E1-B542-D7EC736C5E59)
[6] VenHw(02118005-9DA7-443A-92D5-781F022AEDBB)
[7] PXE on MAC Address: 00:02:F7:00:57:DD
[8] TFTP on MAC Address: 00:02:F7:00:57:DD

Choose the option that corresponds to the partition named “boot” on your system. In the example above, this is option 4. Enter the option number and press the enter key. You will then be prompted for the file path for the FDT file:

File path of the FDT blob:

At this prompt, type the filename “juno\juno.dtb” and press the enter key. Please note, the string contains a Windows style backslash, not a Unix style forward slash. The system may take some time to save the configuration. After which, you will be returned to the Boot Menu:

[1] Add Boot Device Entry
[2] Update Boot Device Entry
[3] Remove Boot Device Entry
[4] Update FDT path
[5] Return to main menu

At this point, we have completed our configuration and we can return to the main menu by selecting option 5 “Return to main menu”. To select option 5, press the 5 key and press enter.

Once you are back at the main menu, you will see that the selection of Boot Devices has now changed. On our test system, the selection looked like this:

[1] Linux on USB
[2] Shell
[3] Boot Manager
Start:

Where option 1, “Linux on USB” was the Boot Device Entry that we created by following the instructions above.

You should now choose this option to boot from your USB drive. When booting, you will see output similar to this:

[1] Linux on USB
[2] Shell
[3] Boot Manager
Start: 1
   PEI    217 ms
   DXE     48 ms
   BDS 368934797873 ms
   BDS   3650 ms
Total Time = 368934801789 ms
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Linux version 3.10.52.0-1-linaro-lt-vexpress64 (buildslave@x86-64-07) (gcc version 4.8.3 20140401 (prerelease) (crosstool-NG linaro-1.13.1-4.8-2014.04 - Linaro GCC 4.8-2014.04) ) #1ubuntu1~ci+140823053732 SMP Sat Aug 23 05:38:15 UTC 2014
[    0.000000] CPU: AArch64 Processor [410fd030] revision 0
[    0.000000] Machine: Juno

One important part of the output is the Linux version, shown above as 3.10.52.0-1-linaro-lt-vexpress64. It is critical that you ensure you are booting Linux version 3.10.52.0-1-linaro-lt-vexpress64. If you are not, it may be that you have mis-cofigured your system and you should revise your configuration by repeating the steps above.

note: it is normal for the BDS to show a excessively long time to load the images. This is a known intermittent bug. It did not take such a long time to load.

Restoring the default UEFI configuration

If you wish to restore UEFI to a clean default configuration:

1. Start the board into the “ARM V2M-Juno Boot loader”. Either:

  • Turn on the power.
  • If the board was already powered on, press the black HW RESET button.

The bootloader is accessible on the UART0 port (the top UART port on the back panel). The UART settings are 115200 bauds, 8 bits data, no parity, 1 bit for stop.

2. Run the following commands:

Cmd> flash
Flash> areas
Base      Area Size Blocks Block Size
----      --------- ------ ----------
0x08000000    65280K    255      256K
0x0BFC0000      256K      4        64K
Flash> eraserange 0x0BFC0000
Erasing Flash

DS-5 Configuration Files for Juno

As an optional step, you may wish to install DS-5 configuration files that will allow you to debug Juno. The procedure is as follows:

1. Extract the DS-5 config files anywhere on your host PC.

2. Start DS-5 and select "Preferences" from the "Window" menu.

3. In the window that opens, expand the "DS-5" heading and select "Configuration Database"

4. In the dialogue that opens, fill in:

  a. Name, which can be any string you like e.g. "Juno".

  b. Location, which must be the directory that you extracted the DS-5 config files to. Note this is not the "boards" directory, but the parent directory that now contains "boards".

5. Click Ok to close the dialogue

6. Back in the "Configuration Database" screen, click on "Rebuild database" then click Ok.

 

Firmware update

This section describes how to update the firmware on the Juno board.

The configuration of the Juno Development Platform board is determined by a set of files stored on a flash memory device on the board. The flash memory can be accessed via a USB-B socket on the rear panel of the board. When connected to a host computer, the flash memory will appear as a USB mass storage device with a FAT16 filesystem. The files in this filesystem are edited to control the configuration of the board.

The configuration of the Juno Development Platform board can be returned to factory default by extracting the Juno board recovery image onto the flash memory device, replacing any files already in the flash memory.

To install firmware images that you have built yourself, the procedure is the same except that you will overwrite the contents of the /SOFTWARE/ directory with your own images.

To update the MCC firmware only, the procedure is the same except that the MCC firmware update bundle will contain only a subset of the files contained in the full recovery image.


To carry out a system recovery, update the MCC firmware, or install your own custom firmware images, follow these steps:

1. Connect a serial terminal to the top 9-pin UART0 connector on the rear panel (115200 baud, 8, n, 1).

2. Connect a USB cable between the USB-B connector on the rear panel and a USB port of your host computer.

3. Connect the 12 volt power supply to the board.

The serial terminal will show the command prompt Cmd>

4. At the Cmd> prompt on the serial terminal, issue the command usb_on

Cmd> usb_on

The configuration flash memory should now be visible on the host computer as a mass storage device.

5. Save to the host PC any of the existing files in the configuration flash memory that you wish to retain for future use.

6. If you wish to update one or more of the firmware components then skip to step 7. Otherwise, for a full system recovery, format the configuration flash memory (FAT16).

7. Extract the board recovery image (board_recovery_image_0.7.5.zip) to the root directory of the configuration flash memory, preserving the directory structure.

Update: A new firmware is available from ARM that addresses the board lock-ups associated with CPUidle. Please install the new board_recovery_image v0.8.1.
You will still need to enable CPUIdle in the kernel config before you can use it. Note that the new firmware held up to constant aggressive CPUidle stress testing for 8 days, but did eventually lock up after that time. If you intend to run an extermely long soak test then you may wish to consider leaving CPUidle disabled.

8. If you are performing a system recovery or installing an update from ARM then skip to step 9. Otherwise if you wish to install firmware images that you have built yourself then delete the bl1.bin and fip.bin from the /SOFTWARE/ directory in the configuration flash memory, and copy your own bl1.bin and fip.bin images into that directory to replace them.

9. Safely eject the mass storage device, giving it time to write the files to the internal storage.

10. Press the red ON/OFF button on the rear panel of the board and wait for reprogramming to complete.

The board will load the default configuration and boot up.

License

The use of Juno software is subject to the terms of the Juno End User License Agreement.

Building the Linaro Kernel

Prerequisites

  • Ubuntu 12.04 64 bit system. You can download Ubuntu from ubuntu.com
  • git
sudo apt-get install build-essential git
  • toolchain
mkdir -p ~/bin
cd ~/bin
wget http://releases.linaro.org/13.11/components/toolchain/binaries/gcc-linaro-aarch64-linux-gnu-4.8-2013.11_linux.tar.xz
tar xf gcc-linaro-aarch64-linux-gnu-4.8-2013.11_linux.tar.xz
PATH=$PATH:~/bin/gcc-linaro-aarch64-linux-gnu-4.8-2013.11_linux/bin

Get the Linaro Kernel Source

git clone https://git.linaro.org/landing-teams/working/arm/kernel-release.git
cd kernel
git checkout lsk-3.10-armlt-juno-20140814

Create a kernel config

Do not use the arm64 defconfig, instead, build a config from the config fragments that Linaro provides:

ARCH=arm64 scripts/kconfig/merge_config.sh \
linaro/configs/linaro-base.conf \
linaro/configs/distribution.conf \
linaro/configs/vexpress64.conf \

Note: the config fragments are part of the git repository and the source tarball.

Build the kernel

To build the kernel Image and juno.dtb files, use the following command:

make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image dtbs

Install your kernel

Copy the kernel Image and the juno.dtb files to the BOOT partition on the USB drive created in the Binary Installation tab.

cp arch/arm64/boot/Image /media/BOOT/Image
cp arch/arm64/boot/dts/juno.dtb /media/BOOT/juno/juno.dtb

Building Firmware From Source

Prerequisites

The following tools and environment are required:

  • Ubuntu desktop OS and the following packages. ARM have only tested with Ubuntu 12.04.02 (64-bit).
    • `git` package to obtain source code
    • `ia32-libs` package
    • `build-essential` and `uuid-dev` packages for building the UEFI and Firmware Image Package (FIP) tool
  • The instructions on this page below assume that the environment variable $JUNO_ROOT_DIR has been initialised to a working directory.
$ export JUNO_ROOT_DIR=<path-to-working-dir>/<name-of-working-dir>

SCP Firmware

The SCP Firmware is only available as a pre-built binary.

 

ARM Trusted Firmware

The ARM trusted firmware consists of the following images:

Filename Image Type Image Name
bl1.bin BL1 ARM Trusted ROM image
bl2.bin BL2 ARM Trusted Firmware
bl31.bin BL3-1 EL3 runtime
bl32.bin (optional) BL3-2 Test Secure Payload

The bl2.bin, bl31.bin and bl32.bin images are inputs to the process of creating a Firmware Image Package.

Obtaining sources

Clone the ARM Trusted Firmware repository from GitHub:

$ cd $JUNO_ROOT_DIR
$ git clone https://github.com/ARM-software/arm-trusted-firmware.git
$ cd arm-trusted-firmware
$ git checkout v0.4-Juno-0.5

Configuration

Set the compiler path

$ export CROSS_COMPILE=<path-to-aarch64-gcc>/bin/aarch64-none-elf-

Building

1. Change to the trusted firmware directory:

$ cd $JUNO_ROOT_DIR/arm-trusted-firmware

2. Build the different firmware images:

$ make PLAT=juno all

To build the optional bl3-2 Test Secure Payload component, use the following commands instead (the ‘make realclean’ is important):

$ make realclean
$ make PLAT=juno SPD=tspd all

By default the preceding commands produce a release version of the build. To produce a debug version instead and make the build more verbose use:

$ make PLAT=juno DEBUG=1 V=1 all

The build process creates products in a `build` directory tree, building the objects for each boot loader stage in separate sub-directories. The following boot loader binary files are created:

  • build/juno/<build-type>/bl1.bin
  • build/juno/<build-type>/bl2.bin
  • build/juno/<build-type>/bl31.bin
  • build/juno/<build-type>/bl32.bin (if the ‘SPD=tspd’ flag is used)

… where <build-type> is either `debug` or `release`.

To clean the ARM Trusted Firmware source tree (warning, this will remove the binaries too):

$ make realclean
 

UEFI

UEFI is a single bl33.bin image that is an input to the process of creating a Firmware Image Package.

Obtaining sources

Clone the Juno UEFI Github repository:

$ cd $JUNO_ROOT_DIR
$ git clone https://github.com/ARM-software/edk2.git -b juno
$ cd edk2
$ git checkout v1.0-rc0
 

Configuration

1. Define the AArch64 GCC toolchain:

$ export GCC48_AARCH64_PREFIX=<path-to-aarch64-gcc>/bin/aarch64-none-elf-

2. Configure Tianocore environment:

$ cd $JUNO_ROOT_DIR/edk2
$ . edksetup.sh
$ make -C BaseTools

Building

1. Change to the EDK2 directory:

$ cd $JUNO_ROOT_DIR/edk2

2. To build DEBUG version of UEFI firmware:

$ make -f ArmPlatformPkg/ArmJunoPkg/Makefile

The build produces the binary $JUNO_ROOT_DIR/edk2/Build/ArmJuno/DEBUG_GCC48/FV/BL33_AP_UEFI.fd that should be used as ‘bl33.bin’ when generating the Firmware Image Package binary.

To build RELEASE version of UEFI firmware:

$ make -f ArmPlatformPkg/ArmJunoPkg/Makefile EDK2_BUILD=RELEASE

Use the release binary $JUNO_ROOT_DIR/edk2/Build/ArmJuno/RELEASE_GCC48/FV/BL33_AP_UEFI.fd as bl33.bin when generating the Firmware Image Package binary.

To clean EDK2 source tree:

$ make -f ArmPlatformPkg/ArmJunoPkg/Makefile clean
 

Packaging the binaries

ARM Trusted Firmware uses the Firmware Image Package (FIP) binary blob to load images into the system, so that the firmware can avoid managing lots of smaller images. The FIP will contain:

  • BL2 and BL3-1 boot loader images
  • Test Secure Payload (BL3-2 image – optional)
  • UEFI firmware (BL3-3 image)
  • SCP firmware (BL3-0 image)

Note: BL1 image is NOT part of the FIP.

Building a FIP binary

The steps to create a FIP are as follows:

1. Build the ‘fip_create’ tool.

$ cd $JUNO_ROOT_DIR/arm-trusted-firmware
$ make fiptool

2. Define the FIP environment. Specifically, include the FIP tool in the path.

$ export PATH=$JUNO_ROOT_DIR/arm-trusted-firmware/tools/fip_create:$PATH

3. Download the firmware image artefacts and extract to a working directory (hereafter referred to as "<path to prebuilt binary>").

4. Gather the binary files (the following example is for release builds only).

$ cd $JUNO_ROOT_DIR
$ mkdir fip
$ cd fip
$ cp <path to prebuilt binary>/bl30.bin .
$ cp $JUNO_ROOT_DIR/arm-trusted-firmware/build/juno/release/bl2.bin .
$ cp $JUNO_ROOT_DIR/arm-trusted-firmware/build/juno/release/bl31.bin .
$ cp $JUNO_ROOT_DIR/arm-trusted-firmware/build/juno/release/bl32.bin .
$ cp $JUNO_ROOT_DIR/edk2/Build/ArmJuno/RELEASE_GCC48/FV/BL33_AP_UEFI.fd  bl33.bin

If you wish to use the pre-built ARM trusted firmware and UEFI EDK2 images instead of building them from source, then the last four lines of the above block can independently be replaced with the following:

$ cp <path to prebuilt binary>/bl2.bin .
$ cp <path to prebuilt binary>/bl31.bin .
$ cp <path to prebuilt binary>/bl32.bin .
$ cp <path to prebuilt binary>/bl33.bin .

5. Create the FIP file:

$ fip_create --dump          \
             --bl2 bl2.bin   \
             --bl30 bl30.bin \
             --bl31 bl31.bin \
             --bl32 bl32.bin \    (if the optional bl32 image is present)
             --bl33 bl33.bin \
             fip.bin

The previous command will display the FIP layout:

Firmware Image Package ToC:
---------------------------
- Trusted Boot Firmware BL2: offset=0xD8, size=0x5268
- SCP Firmware BL3-0: offset=0x5340, size=0x9C64
- EL3 Runtime Firmware BL3-1: offset=0xEFA4, size=0x82A0
- Non-Trusted Firmware BL3-3: offset=0x17244, size=0xF0000
---------------------------
Creating "fip.bin";

6. Optional: the `fip_create` tool can be used in the exact same way to update individual images inside an existing FIP file. For example, to update the SCP Firmware BL3-0 image:

$ fip_create --dump --bl30 new_bl30.bin fip.bin

The previous command will again display the FIP layout:

Firmware Image Package ToC:
---------------------------
- Trusted Boot Firmware BL2: offset=0xD8, size=0x5268
- SCP Firmware BL3-0: offset=0x5340, size=0x9C64
file: 'new_bl30.bin'
- EL3 Runtime Firmware BL3-1: offset=0xEFA4, size=0x82A0
- Non-Trusted Firmware BL3-3: offset=0x17244, size=0xF0000
---------------------------
Updating "fip.bin"

For more details and options about the `fip_create` tool:

$ fip_create --help

Installing the binaries

Please refer to the section titled “Firmware update” on the Binary Image Installation tab.

License

The use of Juno software is subject to the terms of the Juno End User License Agreement.

Juno ports

 

Back panel

Front panel

UARTs

There are 4 UARTs on the Juno board:

UART Location Used by Baud Data bits Stop bits *Parity
SoC UART0 back panel The motherboard, UEFI and the Linux kernel. 115200 8 1 None
SoC UART1 back panel SCP firmware 115200 8 1 None
FPGA UART0 Corresponds to the J55 header on the board. Please contact ARM for more information about this type of header. AP Trusted Firmware 115200 8 1 None
FPGA UART1 Corresponds to the J56 header on the board. Please contact ARM for more information about this type of header Unused at the moment - - - -

Quick Start

If you have just unpacked a new Juno board and would like to get it booting straight away, you may wish to skip ahead to the Set up and boot the Juno board section.

 

Juno software stack overview

There are several pieces of software that make up the complete Juno software stack, and a description of each one follows below.

Juno MCC Microcontroller Firmware

The MCC is a microcontroller on the motherboard that takes care of early setup before the SCP or applications processors are powered on. The MCC is also responsible for managing firmware upgrades.

System Control Processor (SCP) Firmware

The Juno System Control Processor (SCP) is an on-chip Cortex-M3 that provides low level power management and system control for the Juno platform.

Application Processor (AP) Trusted Firmware

The Juno AP Trusted Firmware provides low-level Trusted World support for the Juno platform.

Unified Extensible Firmware Interface (UEFI)

The Juno UEFI implementation provides Linux loader support for the Juno platform. It is based on the open source EFI Development Kit 2 (EDK2) implementation from the Tianocore sourceforge project.

Linux Kernel

The Linaro Stable Kernel (LSK) for Juno.

Linux filesystem

An Openembedded filesystem from Linaro can be mounted via USB (recommended) or NFS over Ethernet.

Android kernel and AOSP

The LSK image contains Android patches and has a unified defconfig, so the same kernel binary will work with a Linux filesystem or an AOSP filesystem (available from Linaro).

 

Software preloaded on new Juno boards

New Juno boards arrive preloaded with MCC firmware, SCP firmware, AP trusted firmware, UEFI, and a Linux kernel. The Juno board does not contain a Linux filesystem or Android AOSP filesystem anywhere in onboard storage.

Please note that early batches of Juno boards contained an SCP firmware image that limits the CPU clock to 50 MHz. ARM strongly recommends that you immediately upgrade to the latest firmware image hosted on this website by following the instructions in the section titled “Firmware update” on the Binary Image Installation tab.

When the power is first turned on, it should boot straight through to Linux. UEFI offers a 10 second window during which you can interrupt the boot sequence by pressing a key on the serial terminal, otherwise the Linux kernel will be launched. In order to reach the Linux shell you must attach a Linux filesystem via USB. If no filesystem is attached then Linux will boot as far as it can and then announce that it is waiting for a filesystem to be attached.

New Juno boards do not contain any Android software pre-installed.

 

Set up and boot the Juno board

You are strongly recommended to update to the latest firmware before doing anything productive with your Juno board.

The steps to set up and boot the board are:

  1. Connect a serial terminal to the UART0 connector (settings).
  2. Connect the 12 volt power, then press the red ON/OFF button on the back panel.

Getting Juno to boot to the Linux shell

If you have just received a new board and powered it on for the first time, you will not reach the Linux shell. Juno will boot Linux to the point where it looks for a filesystem, and when it can’t find one it will sit and wait for one to be attached. To boot all the way to the Linux shell you will need to attach a root filesystem.

Setting the Real Time Clock (required for Android)

New Juno boards do not have the correct time programmed into the real time clock. Some software (notably Android) will not operate correctly until a sensible time is programmed. To set the time, start a terminal session with UART0 connector (settings). Ensure there is power to the board, but the SoC must be powered off (if it is not, then press the black “Hardware Reset” button).

Execute the following:

ARM V2M-Juno Boot loader v1.0.0
HBI0262 build 596
ARM V2M_Juno Firmware v1.1.7
Build Date: May 27 2014
Time :  11:52:35 
Date :  09:07:2060 
Cmd> debug
Debug> date
09/07/2060
Change Date? Y\N >y
D:>23
M:>6
Y:>2014
Debug> time
15 : 51 : 58
Change Time? Y\N >y
s:>0 
m:>08
h:>14
Debug> 
 

Enabling Texture Compression Formats

The Mali GPU in Juno is able to use a variety of texture compression formats, many of which are subject to license from third parties. It is the responsibility of the end user to obtain a license for each texture that will be used on Juno. Once such licenses are obtained, the textures can be enabled by the following procedure:

1. Connect a serial terminal to the top 9-pin UART0 connector on the rear panel (115200 baud, 8, n, 1).

2. Connect a USB cable between the USB Configuration Port on the rear panel and a USB port of your host computer.

3. Connect the 12 volt power supply to the board.

The serial terminal will show the command prompt Cmd>

4. At the Cmd> prompt on the serial terminal, issue the command usb_on

Cmd> usb_on

The configuration flash memory should now be visible on the host computer as a mass storage device.

5. Open the file SITE1/HBI0262B/board.txt for editing.

6. Consult table 1 below to determine the correct value that should be programmed into the GPU texture format register to enable only the registers that you have licensed for use with Juno. To reset to factory settings, the value to program should be 0×00FE001E.

7. In the [SCC REGISTERS] section, below the “TOTALSCCS” line, insert the following line:

SCC: 0x05C <value from step 6 above>         ;Optional comment to explain which texture you have enabled

8. Update the TOTALSCCS count (increment it by one) so that it now reflects the total number of SCC registers that are programmed.

9. Press the red ON/OFF button on the rear panel of the board and wait for reprogramming to complete.

The board will load the default configuration and boot up.



Table 1. Bit mappings for the CONFIG_TEX_COMPRESSED_FORMAT_ENABLE register.

    Please ensure you have obtained the appropriate license(s) before enabling these texture compression formats

Bit Texture compression format Direct X 9 DirectX 10 DirectX 11 OpenGL ES 1.1 OpenGL ES 2.0 OpenGL ES 3.0 OpenGL 2.0 – 2.1 OpenGL 3.0 – 3.1 OpenGL 3.2 – 4.1 OpenGL 4.2
0 Invalid format
1 ETC2 x[a] x[a] x
2 EAC, 1 component x
3 ETC2 + EAC x
4 EAC, 2 components x
5 Reserved
6 NXR
7 BC1_UNORM (DXT1) x x x x[b] x[b] x[b] x[f] x[f] x[f] x[f]
8 BC2_UNORM (DXT3) x x x x[c] x[c] x[f] x[f] x[f] x[f]
9 BC3_UNORM (DXT5) x x x x[d] x[d] x[f] x[f] x[f] x[f]
10 BC4_UNORM (RGTC1_UNORM) x x x[g] x x x
11 BC4_SNORM (RGTC1_SNORM) x x x[g] x x x
12 BC5_UNORM (RGTC2_UNORM) x x x[g] x x x
13 BC5_SNORM (RGTC2_SNORM) x x x[g] x x x
14 BC6H_UF16 x x[h] x
15 BC6H_SF16 x x[h] x
16 BC7_UNORM x x[h] x
17 EAC_SNORM, 1 component x
18 EAC_SNORM, 2 components x
19 ETC2 + punch-through alpha x
20 ASTC 3D LDR
21 ASTC 3D HDR
22 ASTC 2D LDR x[e] x[e] x[e]
23 ASTC 2D HDR
24 – 31 Reserved

Key
   [a]   Enable for GL_OES_compressed_ETC1_RGB8_texture
   [b]   Enable for GL_EXT_texture_compression_dxt1
   [c]   Enable for GL_ANGLE_texture_compression_dxt3
   [d]   Enable for GL_ANGLE_texture_compression_dxt5
   [e]   Enable for GL_KHR_texture_compression_astc_ldr
   [f]   Enable for GL_EXT_texture_compression_s3tc
   [g]   Enable for GL_EXT_texture_compression_rgtc
   [h]   Enable for GL_ARB_texture_compression_bptc

Additional documentation

For further details, please see the following documents.

THIS END USER LICENCE AGREEMENT (“LICENCE”) IS A LEGAL AGREEMENT BETWEEN YOU (EITHER A SINGLE INDIVIDUAL, OR SINGLE LEGAL ENTITY) AND ARM LIMITED (“ARM”) FOR THE USE OF THE DELIVERABLES ACCOMPANYING THIS LICENCE. ARM IS ONLY WILLING TO LICENSE THE DELIVERABLES TO YOU ON CONDITION THAT YOU ACCEPT ALL OF THE TERMS IN THIS LICENCE. BY CLICKING “I AGREE” OR BY INSTALLING OR OTHERWISE USING OR COPYING THE DELIVERABLES YOU INDICATE THAT YOU AGREE TO BE BOUND BY ALL THE TERMS OF THIS LICENCE. IF YOU DO NOT AGREE TO THE TERMS OF THIS LICENCE, ARM IS UNWILLING TO LICENSE THE DELIVERABLES TO YOU AND YOU MAY NOT INSTALL, USE OR COPY THE DELIVERABLES, BUT YOU SHOULD PROMPTLY RETURN THE DELIVERABLES TO YOUR SUPPLIER AND ASK FOR A REFUND OF ANY LICENCE FEE PAID.

“Juno ARM Development Platform” means a hardware development board purchased directly from ARM or its authorised distributors.

“Deliverables”; means any software, firmware, boardfiles, data and documentation accompanying this Licence, any printed, electronic or online documentation supplied with it, and any updates, patches and modifications ARM may make available to you under the terms of this Licence, in all cases relating to the supporting deliverables for the Juno ARM Development Platform.

“Separate Files” means the separate files identified in Part D of the Schedule.

1. LICENCE GRANTS.

(i) DELIVERABLES: ARM hereby grants to you, subject to the terms and conditions of this Licence, a non-exclusive, non-transferable licence solely for use on a Juno ARM Development Platform and only for the purposes of your internal development, testing and debugging of software applications that are designed to run solely on microprocessors manufactured under licence from ARM, to:

(a) use and copy the Deliverables identified in Part A of the Schedule;

(b) use, copy and modify the Deliverables identified in Part B and Part C of the Schedule;

(c) distribute and sub-license to third parties the right to use, copy and modify the Deliverables identified in Part C(i) of the Schedule, or your derivatives thereof, as part of your own products (“Licensed Products”) provided you comply with the terms of Clause 1(ii);

(d) permit either or both your customers and your authorised distributors to redistribute the Deliverables identified in Part C(i) of the Schedule, or your derivatives thereof, solely as part of Licensed Products developed by you or your permitted users (identified in clause 2 paragraph three below).

Except as permitted by clause 1(i)(b) above, you shall not modify the Deliverables. Except as permitted by clauses 1(i)(c) and 1(i)(d) above, you shall not redistribute any of the Deliverables.

(ii) FURTHER CONDITIONS APPLICABLE TO REDISTRIBUTION AND SUB-LICENSING: If you choose to redistribute the Deliverables identified in Part C(i) of the Schedule (“Example Code”) you agree: (a) to ensure that they are licensed for use only as part of Licensed Products and only on microprocessors manufactured or simulated under licence from ARM; (b) not to use ARM’s or any of its licensors names, logos or trademarks to market the Licensed Products; (c) to include valid copyright notices on the Licensed Products, and preserve any copyright notices which are included with, or in, the Example Code; (d) to comply with all the other terms of this Licence; and (e) to ensure that any further redistribution is limited to redistribution by either or both your customers and your authorised distributors only as part of Licensed Products developed by you or your permitted users and only for use on microprocessors manufactured or simulated under licence from ARM and that your customers and authorised distributors comply with the terms of this clause 1(ii).

2. RESTRICTIONS ON USE OF THE DELIVERABLES.

COPYING: You shall not use or copy the Deliverables except as expressly authorised in this Licence. You may make one additional copy of the delivered Deliverables media or image for backup or archival purposes.

PERMITTED USERS: The Deliverables shall be used only by your employees, or by your bona fide sub-contractors for whose acts and omissions you hereby agree to be responsible to ARM to the same extent as you are for any acts and omissions of your employees, and provided always that such sub-contractors; (i) work only onsite at your premises; (ii) comply with the terms of this Licence; (iii) are contractually obligated to use the Deliverables only for your benefit, and (iv) agree to assign all their work product and any rights they create therein in the supply of such work to you. Only the single individual, company or other legal entity to whom ARM is supplying this Licence may use the Deliverables. Except as provided in this clause, you shall not allow third parties (including but not limited to any subsidiary, parent or affiliated companies, or offsite contractors you may have) to use the Deliverables unless ARM specifically agrees otherwise with you on a case by case basis.

NO REMOTE USE: The Deliverables shall only be used onsite at your premises and only for your benefit.

MULTIPLE VERSIONS: The media on which the Deliverables resides may contain more than one version of the Deliverables, each of which is compatible with a different operating system (such as Microsoft Windows XP Professional and Red Hat Linux).

ACADEMIC OR EDUCATIONAL USERS ONLY: If you or your employer or institution paid academic or educational pricing for the Deliverables, or the Deliverables are identified as an academic or educational version (together “Academic Software”), then notwithstanding anything else in this Licence, YOU AGREE TO USE THE ACADEMIC SOFTWARE ONLY FOR ACADEMIC, NON-COMMERCIAL PURPOSES, AND ARM DOES NOT GRANT YOU ANY RIGHTS TO DISTRIBUTE OR SUB-LICENSE ANY APPLICATIONS DEVELOPED USING THE ACADEMIC SOFTWARE UNDER THIS LICENCE.

REVERSE ENGINEERING: Except to the extent that such activity is permitted by applicable law you shall not reverse engineer, decompile or disassemble any of the Deliverables. If the Deliverables were provided to you in Europe you shall not reverse engineer, decompile or disassemble any of the Deliverables for the purposes of error correction.

BENCHMARKING: This licence does not prevent you from using the Deliverables for internal benchmarking purposes. However, you shall treat any and all benchmarking data, and any other results of your use or testing of the Deliverables which are indicative of performance, efficacy, reliability or quality, as confidential information and you shall not disclose such information to any third party without the express written permission of ARM.

RESTRICTIONS ON TRANSFER OF LICENSED RIGHTS: The rights granted to you under this Licence may not be assigned, sublicensed or otherwise transferred by you to any third party without the prior written consent of ARM. An assignment shall be deemed to include, without limitation; (i) any transaction or series of transactions whereby a third party acquires, directly or indirectly, the power to control the management and policies of you, whether through the acquisition of voting securities, by contract or otherwise; or (ii) the sale of more than fifty percent (50%) of the your assets whether in a single transaction or series of transactions. You shall not rent or lease the Deliverables. You shall not share the Deliverables with contractors (except as identified in the ‘PERMITTED USERS’ clause above) or other third parties.

COPYRIGHT AND RESERVATION OF RIGHTS: The Deliverables are owned by ARM or its licensors and are protected by copyright and other intellectual property laws and international treaties. The Deliverables are licensed not sold. You acquire no rights to the Deliverables other than as expressly provided by this Licence. You shall not remove from the Deliverables any copyright notice or other notice and shall ensure that any such notice is reproduced in any copies of the whole or any part of the Deliverables made by you or your permitted users.

3. SUPPORT AND MAINTENANCE.

If you purchased the Deliverables directly from ARM, and you are not receiving them as an update or upgrade or as Academic Software (defined in Clause 2), you are entitled to reasonable support and maintenance for the Deliverables for the period of one (1) year from the date of purchase. The support will be provided on any version of the Deliverables which, at the date of your support request, are either; (a) the current version made generally available by ARM; or (b) the previous version made generally available by ARM at some time during the previous ninety (90) days.

Support will be provided by telephone, email or other written format designated by ARM, prioritised at ARM’s discretion, and may not be used as a substitute for training or as additional resource for your programming projects. Maintenance will be provided in the form of upgrades, updates and patch releases to the Deliverables as and when they are made generally available from ARM.

ARM’s obligation under this Clause 3 is limited to the provision of support and maintenance to you and ARM is under no obligation to provide any support and maintenance to any third parties under this Licence. If you purchase support and maintenance for additional years it will be provided pursuant to this Clause 3 and will be subject to the terms and conditions of this Licence.

If; (i) you obtained the Deliverables from an ARM authorised reseller or other third party; (ii) Deliverables were provided free of charge or for evaluation; or (iii) it is Academic Software, you are not entitled to any support for the Deliverables from ARM, but ARM may, at its sole discretion provide limited support to you. The vendor of the Deliverables may or may not offer support to you for the Deliverables. Please refer to the Technical Support area of http://www.arm.com for contact details for ARM’s support service and (if applicable) other authorised support channels. ARM shall be under no obligation to provide support in respect of any modifications (where permitted) to the Deliverables.

4. CONFIDENTIALITY.

You acknowledge that the Deliverables and any benchmarking data and related information mentioned in Clause 2 contains trade secrets and confidential material, and you agree to maintain all such information in confidence and apply security measures no less stringent than the measures which you apply to protect your own like information, but not less than a reasonable degree of care, to prevent their unauthorised disclosure and use. Subject to any restrictions imposed by applicable law, the period of confidentiality shall be indefinite. You agree that you shall not use any such information other than in normal use of the Deliverables under the licences granted in this Licence.

Notwithstanding the foregoing you may disclose the Deliverables identified in Part C(i) of the Schedule to third parties solely in exercise of the licence rights contained in Clause 1(i)(c) of this Licence.

5. LIMITED WARRANTIES.

For the period of ninety (90) days from the date of receipt by you of the Deliverables, ARM warrants to you that (i) the media on which the Deliverables are provided shall be free from defects in materials and workmanship under normal use; and (ii) the Deliverables will perform substantially in accordance with the accompanying documentation (if any). ARM’s total liability and your exclusive remedy for breach of these limited warranties shall be limited to ARM, at ARM’s option; (a) replacing the defective Deliverables; or (b) using reasonable efforts to correct material, documented, reproducible defects in the Deliverables and delivering such corrected Deliverables to you. Any replacement Deliverables will be warranted for the remainder of the original warranty period or thirty (30) days, whichever is the longer.

EXCEPT AS PROVIDED ABOVE, YOU AGREE THAT THE DELIVERABLES ARE LICENSED “AS IS”, AND THAT ARM EXPRESSLY DISCLAIMS ALL REPRESENTATIONS, WARRANTIES, CONDITIONS OR OTHER TERMS, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON- INFRINGEMENT, SATISFACTORY QUALITY, AND FITNESS FOR A PARTICULAR PURPOSE.

YOU EXPRESSLY ASSUME ALL LIABILITIES AND RISKS, FOR USE OR OPERATION OF SOFTWARE APPLICATIONS, INCLUDING WITHOUT LIMITATION, APPLICATIONS DESIGNED OR INTENDED FOR MISSION CRITICAL APPLICATIONS, SUCH AS PACEMAKERS, WEAPONARY, AIRCRAFT NAVIGATION, FACTORY CONTROL SYSTEMS, ETC. SHOULD THE DELIVERABLES PROVE DEFECTIVE, YOU ASSUME THE ENTIRE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

6. LIMITATION OF LIABILITY.

TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT SHALL ARM BE LIABLE FOR ANY INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES (INCLUDING LOSS OF PROFITS) ARISING OUT OF THE USE OR INABILITY TO USE THE DELIVERABLES WHETHER BASED ON A CLAIM UNDER CONTRACT, TORT OR OTHER LEGAL THEORY, EVEN IF ARM WAS ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

ARM does not seek to limit or exclude liability for death or personal injury arising from ARM’s negligence or ARM’s fraud and because some jurisdictions do not permit the exclusion or limitation of liability for consequential or incidental damages the above limitation relating to liability for consequential damages may not apply to you.

NOTWITHSTANDING ANYTHING TO THE CONTRARY CONTAINED IN THIS LICENCE, THE MAXIMUM LIABILITY OF ARM TO YOU IN AGGREGATE FOR ALL CLAIMS MADE AGAINST ARM IN CONTRACT TORT OR OTHERWISE UNDER OR IN CONNECTION WITH THE SUBJECT MATTER OF THIS LICENCE SHALL NOT EXCEED THE GREATER OF; (I) THE TOTAL OF SUMS PAID BY YOU TO ARM (IF ANY) FOR THIS LICENCE; AND (II) $10 USD.

THE EXISTENCE OF MORE THAN ONE CLAIM WILL NOT ENLARGE OR EXTEND THE LIMIT.

7. THIRD PARTY RIGHTS.

The Separate Files are delivered subject to and your use is governed by their own separate licence agreements. This Licence does not apply to such Separate Files and they are not included in the term “Deliverables” under this Licence. You agree to comply with all terms and conditions imposed on you in respect of such Separate Files including those identified in the Schedule (“Third Party Terms”).

ARM HEREBY DISCLAIMS ANY AND ALL WARRANTIES EXPRESS OR IMPLIED FROM ANY THIRD PARTIES REGARDING ANY SEPARATE FILES, ANY THIRD PARTY MATERIALS INCLUDED IN THE DELIVERABLES, ANY THIRD PARTY MATERIALS FROM WHICH THE DELIVERABLES ARE DERIVED (COLLECTIVELYOTHER CODE”), AND THE USE OF ANY OR ALL THE OTHER CODE IN CONNECTION WITH THE DELIVERABLES, INCLUDING (WITHOUT LIMITATION) ANY WARRANTIES OF SATISFACTORY QUALITY OR FITNESS FOR A PARTICULAR PURPOSE.

NO THIRD PARTY LICENSORS OF OTHER CODE SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND WHETHER MADE UNDER CONTRACT, TORT OR OTHER LEGAL THEORY, ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE OTHER CODE OR THE EXERCISE OF ANY RIGHTS GRANTED UNDER EITHER OR BOTH THIS LICENCE AND THE LEGAL TERMS APPLICABLE TO ANY SEPARATE FILES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

8. GOVERNMENT END USERS.

US Government Restrictions: Use, duplication, reproduction, release, modification, disclosure or transfer of the Deliverables is restricted in accordance with the terms of this Licence.

9. TERM AND TERMINATION.

This Licence shall remain in force until terminated by you or by ARM. Without prejudice to any of its other rights if you are in breach of any of the terms and conditions of this Licence then ARM may terminate this Licence immediately upon giving written notice to you. You may terminate this Licence at any time. Upon termination of this Licence by you or by ARM you shall stop using the Deliverables and confidential information and destroy all copies of the Deliverables and confidential information in your possession together with all documentation and related materials. Notwithstanding the foregoing, except where ARM has terminated this Licence for your breach, your rights to distribute the Example Code as part of Licensed Products developed prior to termination shall survive termination of this Licence, subject to the terms of this Licence. The provisions of Clauses 4, 6, 7, 8, 9 and 10 shall survive termination of this Licence.

10. GENERAL.

This Licence is governed by English Law. Except where ARM agrees otherwise in; (i) a written contract signed by you and ARM; or (ii) a written contract provided by ARM and accepted by you, this is the only agreement between you and ARM relating to the Deliverables and it may only be modified by written agreement between you and ARM. This Licence may not be modified by purchase orders, advertising or other representation by any person. If any clause or sentence in this Licence is held by a court of law to be illegal or unenforceable the remaining provisions of this Licence shall not be affected thereby. The failure by ARM to enforce any of the provisions of this Licence, unless waived in writing, shall not constitute a waiver of ARM’s rights to enforce such provision or any other provision of this Licence in the future.

The Deliverables provided under this Licence are subject to U.S. export control laws, including the U.S. Export Administration Act and its associated regulations, and may be subject to export or import regulations in other countries. You agree to comply fully with all laws and regulations of the United States and other countries (“Export Laws”) to assure that the Deliverables, are not (1) exported, directly or indirectly, in violation of Export Laws, either to any countries that are subject to U.S.A. export restrictions or to any end user who has been prohibited from participating in the U.S.A. export transactions by any federal agency of the U.S.A. government; or (2) intended to be used for any purpose prohibited by Export Laws, including, without limitation, nuclear, chemical, or biological weapons proliferation.

To the extent that the provisions contained in this Licence conflict with any provisions of any other licence you have entered with ARM governing the Deliverables the provisions contained in this Licence shall prevail over and shall supersede any such conflicting provisions.

SCHEDULE

Part A

Hardware Binaries:

FPGA bitstream file for any or all of the Hardware Source identified below in this Part A

Software Binaries:

Motherboard configuration controller

Daughterboard configuration controller

Daughterboard Application note SelfTest

SCP firmware

Mali GPU Driver

Documentation:

Documentation, provided as PDF

Hardware Source:

Hardware netlists of the ARM CoreLink peripheral technology and components known as TLX-400, NIC-400, and PL330

Header Files:

Provided as part of and with the Mali GPU Driver

Part B

Wrapper:

Application Note wrapper file provided as hardware source files and netlists.

Part C: Example Code

(i) Platform specific libraries and source code.

(ii) ARM source code of Application note SelfTest.

Part D: Separate Files

A. UEFI firmware, including drivers for third party components licensed to you under BSD 3-Clause.

B. Linux kernel licensed to you under the GNU General Public License version 2.0

To the extent that ARM is obliged to do so, ARM hereby offers to supply the files which are subject to the GNU General Public Licence version 2 (identified above), in source code form, subject to the terms of the GNU General Public License version 2, upon request. This offer is valid for three (3) years from the date of your acceptance of this Licence.

C. ARM Trusted Firmware licensed to you under BSD 3-Clause.

D. ARM Gator Profile driver and daemon licensed to you under the GNU General Public License version 2.0

To the extent that ARM is obliged to do so, ARM hereby offers to supply the files which are subject to the GNU General Public Licence version 2 (identified above), in source code form, subject to the terms of the GNU General Public License version 2, upon request. This offer is valid for three (3) years from the date of your acceptance of this Licence.

/end

ARM contract references: LES-PRE-20435 JUNO ARM DEVELOPMENT PLATFORM DELIVERABLES