= Gateworks Newport Family Support =
{{{
#!html
}}}
[[PageOutline]]
The Gateworks Newport product family utilizes the Cavium ARM ThunderX CN80xx / CN81xx SoC (System On Chip) offering a large variety of peripherals with a focus on Networking, and Security. See [https://www.gateworks.com/products/industrial-single-board-computers/octeon-tx-single-board-computers-gateworks-newport/ here] for a product comparison matrix.
= Links =
'''Please note: This is a subset of information for Newport, however, please visit our [wiki:WikiStart Main Wiki] for all other information'''
== Software ==
* [#software Software Section] - Bootloader, Boot Firmware, Operating Systems, Kernel, etc
== Peripheral Support ==
* Connector Pinouts - see [http://www.gateworks.com/usermanuals Hardware User Manual]
* [wiki:alternateconnectors Connector and Cable Information]
* [wiki:gettingstarted Newport Serial Console Access]
* [wiki:newport/ethernet Newport Ethernet Information]
* [wiki:newport/bootloader#hwconfig Configuring Mini-PCIe Slot Modes - USB3, SATA, PCIe]
* [wiki:newport/PCIe PCI/PCIe - Mini-PCIe information]
* [wiki:newport/DigitalIO DigitalIO]
* [wiki:USB USB Support]
* [wiki:SPI SPI Support]
* [wiki:I2C I2C Support]
* [wiki:gpio/#gpiolib GPIO Control]
* [wiki:gpio/#led_class LED Control]
* [wiki:sata mSATA Information]
* [wiki:gps GPS Support]
* [wiki:canbus CAN Bus Support]
* [wiki:minipciexpressmodules PCIe Accessory Cards]
* [wiki:MMC MultiMediaCard (microSD/eMMC) Information]
* [wiki:gsc Gateworks System Controller (GSC)] - Temperature, voltage, RTC, GPIO, Digital IO, I/O, pushbutton, etc
== Performance / Processor / Memory / Power / Thermal ==
* [wiki:newport/powerthermal Newport Power & Thermal]
* [wiki:multicoreprocessing Multi Core Processing]
* [wiki:boot_speed Increasing Boot Speeds]
Gateworks uses the Cavium Octeon TX on the Newport family.
All Newport standard models come default with a Dual Core processor. Quad core processors are available on customized orders over 100 pieces or on some max configuration standard boards end in digit '4', such as the GW6304, etc. Ordering options are spelled out on the [wiki:newport/orderoptions Newport Order Options Wiki Page]
The Cavium CPU part numbering scheme is as follows:
* CN802x - Dual Core
* x=0 - BGA676 (used on the larger boards like GW6300)
* x=1 - BGA555 (used on the smaller boards like GW6100)
* CN803x - Quad Core
* x=0 - BGA676 (used on the larger boards like GW6304)
* x=1 - BGA555 (used on the smaller boards like GW6204)
== Other Info ==
* [http://www.gateworks.com/product#newport Product Info]
* [http://shop.gateworks.com Where to Buy]
* [wiki:newport/orderoptions Newport Board Ordering Options]
* [wiki:newport/errata Newport Board Errata]
* [wiki:linux/devicetree Linux Kernel Device-Tree info]
* [wiki:faq#ArethereanyTPMTrustedPlatformModuleorEncryptionchipsontheSBCs Newport Encryption / Security / TPM]
* [wiki:eol End of Life - EOL Dates ]
== User Manuals ==
* [http://www.gateworks.com/usermanuals All Gateworks User Manuals]
== Processor Reference Manual / Datasheet / Errata ==
* [http://www.cavium.com/OCTEON-TX-CN80XX-81XX.html Cavium Website] contains details about the OCTEON TX Dual and Quad core 64bit ARM based SoC's.
* [http://www.cavium.com/pdfFiles/OCTEON-TX-CN80XX-CN81XX-Product-Brief-Rev1.pdf OCTEON TX CN80XX-CN81XX Product Brief]
== Entire Raw Index of Newport Wiki Pages
[[TitleIndex(newport)]]
[=#software]
= Newport Software =
{{{
#!html
}}}
Newport Software is comprised of many pieces, including the following:
* GSC (Gateworks System Controller)
* Boot Firmware
* U-Boot Bootloader
* Operating System (including kernel / rootfs)
Ubuntu is pre-installed on all Newport boards before they ship.
Please view the following links for the appropriate software section:
* [#choosingsoftware Choosing a Newport OS - Ubuntu vs OpenWrt]
* [#softwarecomparison Ubuntu vs OpenWrt Comparison Table]
* [wiki:newport/bsp#images Pre-built Software Images] - Including Ubuntu & !OpenWrt & Boot Related Software
* [wiki:newport/bsp Building & Compiling Newport BSP (Board Support Package)] - This includes all the boot firmware & operating System
* [wiki:/newport/firmware Newport Software Installation page]
* [wiki:newport/bootloader Newport U-Boot Bootloader]
* [wiki:newport/boot Newport Boot Firmware (up to and including the Bootloader)]
* [wiki:gsc#GSCVersionHistory Newport GSC Firmware]
* [#linux Newport Mainline Linux kernel support]
* [#third_party_linux Booting Third Party Linux Distro's on Newport]
* [#jtag Newport JTAG Programming]
* [wiki:ubuntu/#hello-world.c Native Compile Hello World Example]
* [wiki:buildroot Buildroot Linux]
[=#choosingsoftware]
== Choosing a BSP ==
Gateworks offers several Board Support Packages for the Newport Product family. Which one we recommend depends a bit upon what your goal is and what your experience level is. ** Note: By default Newport boards are pre-programmed with Ubuntu. **
* [#Ubuntu Ubuntu]
- '''Recommended for developers trying to heavily leverage opensource software packages or libraries that are not supported by the other BSP's. This is the most user-friendly for developers new to Embedded Linux but will not produce a very trimmed down filesystem image.'''
- Able to use mainline kernel.
- Supports all Newport features.
- Documentation provided to use Ubuntu pre-built packages and debootstrap to create a root filesystem in minutes
- Native compilation: no SDK or cross-toolchain needed
* [#openwrt OpenWrt] - intended for wireless routers and access points (low flash and memory footprint)
- '''Recommended for networking users wanting to create a headless router, VPN, basestation, wireless access point and more. Produces by far the smallest storage and memory footprint but users new to Embedded Linux will have a bit of a learning curve'''
- Fairly up-to-date and/or vanilla kernel support
- Latest wireless drivers (via linux-backports)
- Custom application config and init system (nice for small footprint, but can make adding support for additional packages more work)
- Wide variety of packages (including a fairly nice web-admin)
- Console-based build system (expect 60mins to build BSP for a specific board family)
- Downloadable SDK and Toolchain available to build apps on a development host without building the entire BSP
- easy firmware upgrade (sysupgrade) and factory-default reset mechanism
- Pre-built images available
[=#softwarecomparison]
== Newport BSP Software Support Comparison
The following table shows details on current device support per BSP:
||= Feature =||= OpenWrt =||= [wiki:newport/ubuntu Ubuntu] =||= Notes =||
|| Version || 20.06 || 20.04 (Focal) || ||
|| Kernel || 5.4.45 || 5.4.45 || ||
|| [wiki:serial#rs232 RS232] || Yes || Yes || ||
|| [wiki:MMC MMC] || Yes || Yes || ||
|| [wiki:SPI SPI] || Yes || Yes || ||
|| [wiki:gps GPS / GPS PPS] || Yes || Yes || ||
|| [wiki:gsc#rtc RTC] || Yes || Yes || ||
|| [wiki:gsc#hwmon HWMON] || Yes || Yes || ||
|| [wiki:gpio LED/GPIO] || Yes || Yes || ||
|| [wiki:USB USB 3.0] || Yes || Yes || ||
|| [wiki:newport/PCIe PCI] || Yes || Yes || ||
|| [wiki:sata SATA] || Yes || Yes || ||
|| [wiki:newport/encryption crypto] || Yes || Yes || ||
|| [wiki:canbus CAN] || Yes || Yes || ||
|| [wiki:serial#RS485 RS485] || Yes || Yes || ||
[=#ubuntu]
== Ubuntu ==
Gateworks offers a pre-built Ubuntu distribution using the latest Gateworks kernel as well as instructions on how to build your own Ubuntu based distribution.
* [wiki:newport/ubuntu Newport Ubuntu Wiki and Software]
[=#openwrt]
== OpenWrt Board Support Package (BSP) ==
The Newport OpenWrt BSP provides the following:
* Linux 4.x kernel (fairly vanilla)
* Latest wireless drivers (compat-wireless)
* Simple upgrades and factory-reset capability provided by overlay filesystem
* Newport !OpenWrt BSP:
* [http://dev.gateworks.com/newport/images/ Pre-Built Image] (see [#firmware-update here] for instructions on how to install)
* Building instructions for [wiki:newport/bsp OpenWrt for Newport] are [wiki:newport/bsp here]
* !GitHub Source (if needed):
* [https://github.com/Gateworks/bsp-newport Newport BSP GitHub] - Newport BSP support scripts and Makefile ([https://github.com/Gateworks/bsp-newport/subscription watch])
* [https://github.com/Gateworks/openwrt Gateworks OpenWrt GitHub] - Gateworks !OpenWrt BSP ([https://github.com/Gateworks/openwrt/subscription watch])
* Additional Gateworks OpenWrt pages:[[TitleIndex(OpenWrt)]]
* Join the [https://openwrt.org/contact openwrt-devel] mailing list to follow upstream OpenWrt activity
[=#third_party_linux]
= Third Party Linux Distros =
While Gateworks cannot fully support all Linux distros, it is relatively simple to overlay a Gateworks Newport kernel onto any non-Gateworks third party Linux distro rootfs image.
The following links will describe what is needed:
1. Linux kernel supporting Newport: [wiki:linux/kernel]
2. Root Filesystem: [#rootfs see below]
3. Bootable media: [wiki:linux/blockdev]
[=#rootfs]
=== Root filesystem Sources ===
There are several sources of pre-built root filesystems that are compatible with Newport. As Newport uses an ARM 64bit based SoC, you need to use something that is compatible with an ARMv8 instruction set. Many pre-built distributions will reference 'arm64' which means 'ARM 64-bit' which is appropriate for the CN80XX / CN81XX SoC.
Some popular third-party sources:
* [http://cdimage.ubuntu.com/ubuntu-core/ Ubuntu Core] - this is a minimal filesystem that you can build off of at runtime by adding packages from various repositories.
* [https://releases.linaro.org/ Linaro] - Linaro has several root filesystems including server, nano, developer, core, and ALIP. Each root filesystem will have different things installed for different purposes. Choose carefully which will work for you.
Notes:
* some root filesystems may require you to manually add a user before booting (ie Ubuntu Core)
* the default Newport bootloader expects to find the Image in the /boot directory on the 2nd partition of type ext2/3/4
[=#linux]
[=#mainline-linux]
= Mainline Linux Kernel support =
Gateworks actively participates in the development of the Linux kernel.
Cavium licenses CPU core IP from ARM and the name they give the CPU core within the OCTEON-TX CN80XX / CN81XX is the Cavium 'ThunderX'. Therefore many of the peripheral drivers within the Linux kernel have 'thunderx' in their name and more often then not the 'OCTEON' name refers to the older OCTEON MIP64 core.
The following table shows what OCTEON-TX CN80XX / CN81XX peripherals support is available in the mainline kernel starting from 4.13:
||= Feature =||= Support =||= Notes =||
|| [wiki:multicoreprocessing SMP] || Yes || ARCH_THUNDER ||
|| [wiki:serial] UART (SBSA) || Yes || SERIAL_AMBA_PL011 drivers/tty/serial/amba-pl011.c ||
|| [wiki:watchdog] Watchdog (SBSA) || Yes || ARM_SBSA_WATCHDOG drivers/watchdog/sbsa_gwdt.c ||
|| [wiki:I2C I2C] || Yes (4.9+) || I2C_THUNDERX drivers/i2c/busses/i2c-{octeon-core,thunderx-pcidrv}.c ||
|| Networking BGX (SGMII) || Yes (4.2+) || THUNDER_NIC_BGX drivers/net/ethernet/cavium/thunder/thunder_bgx.c ||
|| Networking RGX (RGMII) || Yes (4.9+) || THUNDER_NIC_RGX drivers/net/ethernet/cavium/thunder/thunder_xcv.c ||
|| Networking MDIO (PHY) || Yes (4.6+) || MDIO_CAVIUM/MDIO_THUNDER drivers/net/phy/mdio-{cavium,thunder}.c ||
|| PCI || Yes (4.6+) || PCI drivers/pci/host/pci-thunder-{ecam,pem}.c ||
|| [wiki:SPI SPI]^^^1^^^ || Yes (4.9+) || SPI_THUNDERX drivers/spi/spi-thunderx.c ||
|| [wiki:MMC] eMMC / microSD || Yes (4.12+) || MMC_CAVIUM_THUNDERX drivers/mmc/host/thunderx-mmc.c ||
|| HW RNG (Hardware Random Number Generator) || Yes (4.9+) || HW_RANDOM_CAVIUM drivers/char/hw_random/cavium-rng*.c ||
|| HW Compressions offload || Yes (4.12+) || DEV_CAVIUM_ZIP drivers/crypto/cavium/zip.c ||
|| Crypto || Yes (4.11+) || DEV_CAVIUM_CPT drivers/crypto/cavium ||
|| [wiki:gsc#rtc RTC] || Yes || RTC_DRV_DS1672 drivers/rtc/rtc-ds1672.c ||
|| [wiki:gpio LED/GPIO] || Yes (4.14+) || GPIO_THUNDERX drivers/gpio/gpio-thunderx.c ||
|| [wiki:USB USB 3.0] || Yes || USB_XHCI_PCI ||
|| [wiki:sata mSATA] || Yes || SATA_AHCI ||
1. Cavium ThunderX SPI hardware only supports half-duplex SPI. Linux drivers that use full-duplex transactions can be modified to support half-duplex (see [https://github.com/Gateworks/linux-newport/commit/cb270339619ccf2b50dfd3604a03626f85830453 'can:mcp251x: convert driver to half-duplex SPI'] as en example
There are a number of features that are enabled in the [https://github.com/Gateworks/linux-newport Gateworks Newport Kernel] which are not yet in mainline. You can look over the patches to our kernel to implement them without much difficulty:
- GSC drivers
- GW16081 support - see [https://github.com/Gateworks/linux-newport/commit/ffe6822da389fefce8e304a12964a18a7ffbe213 here]
- CAN support - see [https://github.com/Gateworks/linux-newport/commit/cb270339619ccf2b50dfd3604a03626f85830453 here]
- RGMII PHY internal delay fix - see [https://github.com/Gateworks/linux-newport/commit/69a99101748bb1bdb2730393ef48bc152c4d244a here]
- SGMII PHY underflow fix - see [https://github.com/Gateworks/linux-newport/commit/b1e7791e688620c9bb8476ac2d0bc99abeb7f825 here]
The following kernel configs should be enabled for the OCTEON-TX CN80XX / CN81XX:
* SERIAL_AMBA_PL011 - ARM SBSA UART
* MMC_CAVIUM_THUNDERX - MMC
* EDAC_THUNDERX - Error Detection and Correction (works with 'edac-util' app from 'edac-utils' package)
* GPIO_THUNDERX - General Purpose I/O
* SPI_THUNDERX - SPI Controller
* I2C_THUNDERX - I2C Controller
* THUNDERX_NIC_VF - NIC virtual function
* THUNDERX_NIC_PF - NIC physical function
* THUNDERX_NIC_BGX - Network Controller (selects MDIO_CAVIUM/MDIO_THUNDER)
* THUNDERX_NIC_RGX - RGMII Network Controller (selects MDIO_CAVIUM/MDIO_THUNDER)
* MDIO_THUNDER (selected automatically by THUNDERX_NIC*)
* MDIO_CAVIUM (selected automatically by THUNDERX_NIC*)
* PCI_HOST_THUNDER_PEM - PCI host controller
* PCI_HOST_THUNDER_ECAM - Enhanced Configuration Access Mechanism for PCIe memory mapped I/O
* ARM_SBSA_WATCHDOG - ARMv8 Watchdog
* CRYPTO_DEV_CAVIUM_ZIP - Hardware Compression / Decompression off-load
* HW_RANDOM_CAVIUM - Hardware accelerated random number generator
Note that there are many kernel drivers using the name 'Octeon' but they typically refer to a different chipset and the CN80XX / CN81XX have more in common with the Cavium 'ThunderX' architecture as that is the SoC core.
For details Newport Linux kernel:
* Prebuilt Newport Kernel: [http://dev.gateworks.com/newport/kernel/]
* Building the Newport Kernel as part of the BSP: [wiki:newport/bsp#kernel]
* Building a Mainline Kernel Wiki: [wiki:linux/kernel]
[=#recovery]
= Creating a microSD recovery image =
[wiki:/newport/firmware#CreatingamicroSDrecoveryimage Click Here]
[=#bootdevice]
= Boot Device =
Some boards have multiple boot device and may allow selection of which one is the 'primary boot device':
||= board =||= Primary Boot Device =||= Alternate Boot Device =||
|| GW640x || on board eMMC || microSD ||
|| GW630x || on board eMMC || microSD ||
|| GW620x || on board eMMC || microSD ||
|| GW610x || on board eMMC || - ||
To boot from the alternate boot device manually you can press-and-release the user pushbutton 5 times in a row and the board will power cycle primary power (the 3.3V LED will go off, then on again) and the board will boot from the alternate boot device.
Boards with an Alternate boot device also have a boot watchdog such that if the current boot device fails to boot within 30 seconds, the board will power cycle primary power and attempt boot from the other boot device.
The bootloader also has a notion of boot device, either the built in eMMC or an external microSD.
This is controlled through the UBoot variable 'dev'. The dev variable is purely for the bootloader, and does not signify what device to boot the kernel/rootfs from.
Note if booting with the onboard eMMC as the primary boot device, “0/mmcblk0” is the U-!Boot/Linux device node for eMMC and “1/mmcblk1” is the U-!Boot/Linux device node for microSD. When booting from the alternate device (microSD) this is swapped.
Please also reference:
* [wiki:newport/boot Newport Boot Firmware (up to and including the Bootloader)]
* [wiki:newport/bootloader Newport U-Boot Bootloader]
=== Booting to a kernel/rootfs on the microSD ===
[wiki:/newport/firmware#BootingtoakernelrootfsonthemicroSD Click Here]