summaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-meson
Commit message (Collapse)AuthorAgeFilesLines
* arm: meson-gx: add board_usb_init()/cleanup() for USB gadgetNeil Armstrong2020-04-201-0/+118
| | | | | | | | Add arch code to initialize USB Gadget mode using the DWC2 controller, and using the previously added set_mode() phy functions. [narmstrong: fixup board_usb_cleanup call to phy_meson_gxl_usb2_set_mode] Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
* dm: core: Require users of devres to include the headerSimon Glass2020-02-052-0/+2
| | | | | | | | | | At present devres.h is included in all files that include dm.h but few make use of it. Also this pulls in linux/compat which adds several more headers. Drop the automatic inclusion and require files to include devres themselves. This provides a good indication of which files use devres. Signed-off-by: Simon Glass <sjg@chromium.org> Reviewed-by: Anatolij Gustschin <agust@denx.de>
* common: Move RAM-sizing functions to init.hSimon Glass2020-01-173-0/+3
| | | | | | | These functions relate to memory init so move them into the init header. Signed-off-by: Simon Glass <sjg@chromium.org>
* common: Move reset_cpu() to the CPU headerSimon Glass2020-01-171-0/+1
| | | | | | Move this function out of common.h and into a relevant header file. Signed-off-by: Simon Glass <sjg@chromium.org>
* board: amlogic: select PWRSEQ for all amlogic platformAnand Moon2020-01-071-0/+1
| | | | | | | | | | commit a10388dc6982 ("mmc: meson-gx: add support for mmc-pwrseq-emmc") introduce CONFIG_PWRSEQ for power sequence for eMMC module on amlogic platform, so enable this to all amlogic boards. Signed-off-by: Anand Moon <linux.amoon@gmail.com> Reviewed-by: Neil Armstrong <narmstrong@baylibre.com> Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
* common: Move some board functions out of common.hSimon Glass2019-12-021-0/+1
| | | | | | | A number of board function belong in init.h with the others. Move them. Signed-off-by: Simon Glass <sjg@chromium.org> Reviewed-by: Tom Rini <trini@konsulko.com>
* crc32: Use the crc.h header for crc functionsSimon Glass2019-12-021-0/+1
| | | | | | | | | | | Drop inclusion of crc.h in common.h and use the correct header directly instead. With this we can drop the conflicting definition in fw_env.h and rely on the crc.h header, which is already included. Signed-off-by: Simon Glass <sjg@chromium.org> Reviewed-by: Tom Rini <trini@konsulko.com>
* ARM: meson: add SM1 SoC idNeil Armstrong2019-10-181-0/+2
| | | | | | Add the missing IDs to detect the SM1 S905X3 SoC. Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
* arm: meson: Recognize A311D SoCAndreas Färber2019-10-181-0/+1
| | | | | | | | | | Values imported from Linux driver, but in correct numeric order. Khadas VIM3 prints: Amlogic Meson G12B (A311D) Revision 29:b (10:2) Cc: Christian Hewitt <christianshewitt@gmail.com> Signed-off-by: Andreas Färber <afaerber@suse.de> Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
* arm: meson: Tidy SoC information outputAndreas Färber2019-10-181-1/+1
| | | | | | | | Write SoC instead of Soc. The Linux driver is not affected. Fixes: f41d723b9f ("ARM: meson: display Amlogic SoC Information") Signed-off-by: Andreas Färber <afaerber@suse.de> Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
* arm: meson: board-g12a: Setup VPU in fdtNeil Armstrong2019-10-181-0/+5
| | | | | | | | | | | If VIDEO_MESON is enabled, we need to setup the fdt for the framebuffer. Call meson_vpu_rsv_fb() which reserves the framebuffer memory region for EFI, and sets up simple-framebuffer nodes if simplefb support is enabled. Signed-off-by: Neil Armstrong <narmstrong@baylibre.com> Reviewed-by: Anatolij Gustschin <agust@denx.de>
* Merge tag 'u-boot-amlogic-20190812' of ↵Tom Rini2019-08-122-0/+166
|\ | | | | | | | | | | https://gitlab.denx.de/u-boot/custodians/u-boot-amlogic - amlogic: add support for the SEI Robotic SEI510
| * ARM: meson: Add support for fastboot_set_reboot_flag()Neil Armstrong2019-08-121-0/+33
| | | | | | | | | | | | | | Add support for fastboot_set_reboot_flag() by storing the reboot flag in the common code to be used by the custom PSCI reboot handler. Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
| * arm: meson: add sm command to retrieve the reboot reasonNeil Armstrong2019-08-121-1/+86
| | | | | | | | | | | | | | | | | | | | | | | | The Secure Monitor offers multiple services, like returning the SoC unique serial number, and can provide the "reboot reason" as set by the previous booted system. This extends the Amlogic specific "sm" cmd with a "reboot_reason" subcommand to print or set a specified environment variable with the reboot reason in human readable format. Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
| * arm: meson: add sm cmd to retrieve SoC serialNeil Armstrong2019-08-121-0/+48
| | | | | | | | | | | | | | | | | | | | | | | | | | The Secure Monitor offers multiple services, like returning the SoC unique serial number, already used to generate an unique MAC address. This adds a new, Amlogic specific, "sm" cmd with a "serial" subcommand to write the SoC unique serial to memory. This "cm" command will be extended in further patches. Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
* | env: Drop environment.h header file where not neededSimon Glass2019-08-111-1/+0
| | | | | | | | | | | | | | | | This header file is now only used by files that access internal environment features. Drop it from various places where it is not needed. Acked-by: Joe Hershberger <joe.hershberger@ni.com> Signed-off-by: Simon Glass <sjg@chromium.org>
* | env: Move env_set() to env.hSimon Glass2019-08-111-0/+1
|/ | | | | | | Move env_set() over to the new header file. Acked-by: Joe Hershberger <joe.hershberger@ni.com> Signed-off-by: Simon Glass <sjg@chromium.org>
* ARM: meson-g12a: Handle 4GiB DRAM sizeNeil Armstrong2019-07-311-6/+7
| | | | | | | | | | | | | | When configured with 4GiB DRAM size, only 3.8GiB is available, the I/O beeing mapped in the last 256MiB of the first 4GiB physical memory/ First fixup the mm_region to handle the first 3.8GiB as memory and the last 256MiB as I/O. Then limit the real memory reported by the firmware to the available physical space, 3.8GiB aligned with the mm_region memory zone size. Signed-off-by: Neil Armstrong <narmstrong@baylibre.com> Tested-by: Mark Kettenis <kettenis@openbsd.org>
* ARM: meson: add unique MAC address generationNeil Armstrong2019-07-041-0/+31
| | | | | | | | | | | | Add support for generating an unique MAC address using the SoC internal serial number from the Secure Monitor interface. The algorithm generates an unicast locally administered 6bytes minus 2bits address using an crc16 of the serial for the top 16bits with the lower 2 bits masked to setup the unicast locally administered property and a crc24 for the lower 24bits. Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
* ARM: meson: sm: Add secure monitor calls to retrieve SoC serial numberNeil Armstrong2019-07-041-0/+24
| | | | | | | The Secure Monitor interface permits retrieving the SoC Serial Number, add a function to retrieve it. Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
* ARM: meson-gx: Reset GXL/GXM to external PHY when not using internal PHYNeil Armstrong2019-05-311-5/+12
| | | | | | | | When using External PHY, reset the mux to use the external PHY in case U-Boot was chainloaded from a misconfigured bootloader. Fixes: 33e3378091 ("ARM: meson: rework soc arch file to prepare for new SoC") Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
* mach-meson: g12a: add DWC2 peripheral mode supportNeil Armstrong2019-05-091-0/+126
| | | | | | | | | | | | | Adds support for Amlogic G12A USB Device mode. The DWC2 Controller behind the Glue can be connected to an OTG capable PHY. The Glue setups the PHY mode. This patch implements Device mode support by adding a board_usb_init/cleanup setting up the DWC2 controller and switch the OTG capable port to Device before starting the DWC2 controller in Device mode. Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
* ARM: meson: add G12a supportJerome Brunet2019-04-233-1/+159
| | | | | | | | | | | | Add support for the Amlogic G12A SoC, which is a mix between the new physical memory mapping of AXG and the functionnalities of the previous Amlogic GXL/GXM SoCs. To handle the internal ethernet PHY, the Amlogic G12A SoCs now embeds a dedicated PLL to feed the internal PHY. Signed-off-by: Jerome Brunet <jbrunet@baylibre.com> Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
* ARM: meson: display Amlogic SoC InformationJulien Masson2019-04-102-1/+167
| | | | | | | | | | | | | The Amlogic SoCs have a registers containing the die revision and packaging type to determine the SoC family and package marketing name like S905X for the GXL SoC Family. This code is taken from the Linux meson-gx-socinfo driver and adapted to U-Boot printing. Signed-off-by: Julien Masson <jmasson@baylibre.com> Signed-off-by: Neil Armstrong <narmstrong@baylibre.com> [narmstrong: also updated new p200/p201 defconfigs]
* ARM: board: meson: rename odroid-c2 to p200Mohammad Rasim2019-04-101-1/+1
| | | | | | | | | This renames the odroid-c2 to p200 and set it as the default GXBB board Other boards (odroid-c2 and nanopi-k2) will inherit from p200 Signed-off-by: Mohammad Rasim <mohammad.rasim96@gmail.com> Acked-by: Neil Armstrong <narmstrong@baylibre.com> Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
* arm: meson: board-gx: Setup VPU in fdtMaxime Jourdan2019-01-311-0/+5
| | | | | | | | | | | | If VIDEO_MESON is enabled, we need to setup the fdt for the framebuffer. Call meson_vpu_rsv_fb() which reserves the framebuffer memory region for EFI, and sets up simple-framebuffer nodes if simplefb support is enabled. Signed-off-by: Maxime Jourdan <mjourdan@baylibre.com> Signed-off-by: Neil Armstrong <narmstrong@baylibre.com> Reviewed-by: Anatolij Gustschin <agust@denx.de>
* ARM: meson: Add boot device discoveryNeil Armstrong2018-11-264-0/+58
| | | | | | | | | | | | | | | | | | | | | | | | | | | | The Amlogic Meson SoCs ROM supports a boot over USB with a custom protocol. When no other boot medium are available (or by forcing the USB mode), the ROM sets the primary USB port as device mode and waits for a Host to enumerate. When enumerated, a custom protocol described at [1] permits writing to memory and execute some specific FIP init code to run the loaded Arm Trusted Firmware BL2 and BL3 stages before running the BL33 stage. In this mode, we can load different binaries that can be used by U-boot like a script image file. This adds support for a custom USB boot stage only available when the boot mode is USB and the script file at a pre-defined address is valid. This support was heavily copied from the Sunxi Allwinner FEL U-Boot support. The tool pyamlboot described at [2], permits using this boot mode on boards exposing the first USB port, either as OTG or Host port. [1] https://github.com/superna9999/pyamlboot/blob/master/PROTOCOL.md [2] https://github.com/superna9999/pyamlboot/blob/master/README.md Signed-off-by: Jerome Brunet <jbrunet@baylibre.com> Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
* ARM: meson: factorize common code out amlogic's boardsJerome Brunet2018-11-261-0/+17
| | | | | | | | | Now we have moved all the Amlogic board support to common generic board code, we can move the identical board_init() and ft_board_setup() functions to weak functions into the board-common mach-meson file. Signed-off-by: Jerome Brunet <jbrunet@baylibre.com> Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
* board: amlogic: add support for S400 boardNeil Armstrong2018-11-261-0/+1
| | | | | | | | | | | | | | | | | The S400 board is the Amlogic AXG SoC reference board including : - Amlogic A113DX ARM Cortex-A53 quad-core SoC @ 1.2GHz - 1GB DDR4 SDRAM - 10/100 Ethernet - 2 x USB 2.0 Host - eMMC - Infrared receiver - SDIO WiFi Module - MIPI DSI Connector - Audio HAT Connector - PCI-E M.2 Connectors Signed-off-by: Jerome Brunet <jbrunet@baylibre.com> Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
* ARM: meson: Add support for AXG familyNeil Armstrong2018-11-263-0/+121
| | | | | | | | | | | | | This patch adds support for the Amlogic AXG SoC, which is very close from the Amlogic GXL SoCs with : - Same 4xCortex-A53 CPUs but clocked at 1.2GHZ max - DDR Interface limited to DDR4 16bit - The whole physical register address space has been moved to 0xfxxxxxxx - The pinctrl setup has changed - The clock tree is different enough to use a different driver Signed-off-by: Jerome Brunet <jbrunet@baylibre.com> Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
* ARM: meson: rework soc arch file to prepare for new SoCJerome Brunet2018-11-266-110/+118
| | | | | | | | | We are about to add support for the Amlogic AXG SoC. While very close to the Gx SoC family, we will need to handle a few thing which are different in this SoC. Rework the meson arch directory to prepare for this. Signed-off-by: Jerome Brunet <jbrunet@baylibre.com> Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
* ARM: rework amlogic configurationJerome Brunet2018-11-261-37/+36
| | | | | | | | | | | | | Rework the board SYS_BOARD, SYS_VENDOR and SYS_CONFIG_NAME setup by moving the board Kconfig into the mach-meson Kconfig to make it easier to add new boards for a SoC architecture and add a custom config header or custom board handler for a platform. This drops the board CONFIGs and the duplicate boards configs headers in favor of a single meson64.h config header. Signed-off-by: Jerome Brunet <jbrunet@baylibre.com> Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
* board: amlogic: factorise gxbb boardsJerome Brunet2018-11-261-10/+1
| | | | | | | | | | The nanopi-k2 and the odroid-c2 are similar enough to be supported by the same u-boot board. This change use odroid-c2 u-boot board for the nanopi-k2 as well. Dedicated defconfig are kept to customize the names and device tree. Signed-off-by: Jerome Brunet <jbrunet@baylibre.com> Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
* board: amlogic: move khadas-vim2 as q200 ref boardNeil Armstrong2018-11-261-4/+5
| | | | | | | | | The Khadas vim2 derive from amlogic s912 reference design (Q200). This patch moves the khadas-vim2 board support to a generic Q200 board, while keeping a dedicated defconfig to customize the names and device tree. Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
* board: amlogic: remove p212 derivativesJerome Brunet2018-11-261-20/+2
| | | | | | | | | | | | | The Khadas vim and the libretech aml-s905x-cc (aka Potato) derive from amlogic s905x reference design (P212). All the code in these board is a copy/paste from the p212, which is tedious to maintain. This change use p212 u-boot board for all these boards, while keeping a dedicated defconfig to customize the names and device tree. Signed-off-by: Jerome Brunet <jbrunet@baylibre.com> Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
* ARM: meson: clean-up platform selectionJerome Brunet2018-11-261-31/+20
| | | | | | | | | | | | Even if multiple board are selected through Kconfig, u-boot will only compile one. This makes sense since compiling these targets will export global symbols, such as board_init() The change rework amlogic Kconfig so only one board may be selected at a time Signed-off-by: Jerome Brunet <jbrunet@baylibre.com> Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
* ARM: meson: Add Khadas VIM2 board supportLoic Devulder2018-10-101-0/+23
| | | | | | | | | | | | | | | This adds platform code for the Khadas VIM2 board based on a Meson GXM (S912) SoC with the Meson GXM configuration. This initial submission supports UART, MMC/SDCard and Ethernet. USB is partially supported. All the code is from Neil Armstrong! I just rebased the code, do some cleanup and tested on my board. Signed-off-by: Neil Armstrong <narmstrong@baylibre.com> Signed-off-by: Loic Devulder <ldevulder@suse.de> Acked-by: Neil Armstrong <narmstrong@baylibre.com>
* ARM: meson: Extend mem_map to support 3GiB of RAMLoic Devulder2018-10-081-4/+4
| | | | | | | | | | | | | | The current mem_map definition for Meson SoCs has support for up to 2GiB of RAM. According to S905, S905X, S912 and S805X datasheets the DDR region is set from 0x00000000 to 0xBFFFFFFF, so mem_map's definition should be changed accordingly. It is also needed to be able to boot Khadas VIM2 board with S912 SoC. Signed-off-by: Loic Devulder <ldevulder@suse.de> Acked-by: Neil Armstrong <narmstrong@baylibre.com> Acked-by: Marek Vasut <marek.vasut@gmail.com>
* dm: Change CMD_DM enablingMichal Simek2018-07-301-0/+2
| | | | | | | | | | | CMD_DM is used for debug purpose and it shouldn't be enabled by default via Kconfig. Unfortunately this is in the tree for quite a long time that's why solution is to use imply DM for all targets which are enabling DM. Signed-off-by: Michal Simek <michal.simek@xilinx.com> Reviewed-by: Tom Rini <trini@konsulko.com> Reviewed-by: Joe Hershberger <joe.hershberger@ni.com>
* boards: amlogic: Fix boards READMENeil Armstrong2018-07-191-1/+1
| | | | | | Fix typos and update the supported devices for all Amlogic boards. Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
* boards: amlogic: Add FriendlyElec NanoPi K2 board supportThomas McKahan2018-07-191-0/+8
| | | | | | | | | | | | | | | | This adds platform code for the FriendlyElec NanoPi K2 board based on a Meson GXBB (S905) SoC with the Meson GXBB configuration. This initial submission only supports: - UART - MMC/SDCard - Ethernet - Reset Controller - Clock controller Cc: Yuefei Tan <yftan@friendlyarm.com> Signed-off-by: Thomas McKahan <tonymckahan@gmail.com> Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
* meson: use the clock driverBeniamino Galvani2018-06-191-2/+1
| | | | | | | | | Use the clk framework to initialize clocks from drivers that need them instead of having hardcoded frequencies and initializations from board code. Signed-off-by: Beniamino Galvani <b.galvani@gmail.com> Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
* clk: add Amlogic meson clock driverBeniamino Galvani2018-06-191-0/+2
| | | | | | | | Introduce a basic clock driver for Amlogic Meson SoCs which supports enabling/disabling clock gates and getting their frequency. Signed-off-by: Beniamino Galvani <b.galvani@gmail.com> Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
* ARM: meson: rename GXBB to GXNeil Armstrong2018-05-083-27/+27
| | | | | | | Taking into account the Amlogic Family name starts with GX, including the GXBB, GXL and GXM SoCs. Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
* SPDX: Convert all of our single license tags to Linux Kernel styleTom Rini2018-05-074-9/+4
| | | | | | | | | | | | | | | | | | | | When U-Boot started using SPDX tags we were among the early adopters and there weren't a lot of other examples to borrow from. So we picked the area of the file that usually had a full license text and replaced it with an appropriate SPDX-License-Identifier: entry. Since then, the Linux Kernel has adopted SPDX tags and they place it as the very first line in a file (except where shebangs are used, then it's second line) and with slightly different comment styles than us. In part due to community overlap, in part due to better tag visibility and in part for other minor reasons, switch over to that style. This commit changes all instances where we have a single declared license in the tag as both the before and after are identical in tag contents. There's also a few places where I found we did not have a tag and have introduced one. Signed-off-by: Tom Rini <trini@konsulko.com>
* libfdt: move headers to <linux/libfdt.h> and <linux/libfdt_env.h>Masahiro Yamada2018-03-051-1/+1
| | | | | | | | | | | | | | | | | Thomas reported U-Boot failed to build host tools if libfdt-devel package is installed because tools include libfdt headers from /usr/include/ instead of using internal ones. This commit moves the header code: include/libfdt.h -> include/linux/libfdt.h include/libfdt_env.h -> include/linux/libfdt_env.h and replaces include directives: #include <libfdt.h> -> #include <linux/libfdt.h> #include <libfdt_env.h> -> #include <linux/libfdt_env.h> Reported-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com> Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
* ARM: arch-meson: fix writel arguments orderHans Verkuil2017-12-181-2/+2
| | | | | | | Using writel causes a "Synchronous Abort". Invert the arguments. Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
* ARM: arch-meson: build memory banks using reported memory from registersNeil Armstrong2017-12-041-8/+66
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | As discussed at [1], the Amlogic Meson GX SoCs can embed a BL31 firmware and a secondary BL32 firmware. Since mid-2017, the reserved memory address of the BL31 firmware was moved and grown for security reasons. But mainline U-Boot and Linux has the old address and size fixed. These SoCs have a register interface to get the two firmware reserved memory start and sizes. This patch adds a dynamic reservation of the memory zones in the device tree bootmem reserved memory zone used by the kernel in early boot. To be complete, the memory zones are also added to the EFI reserved zones. Depends on patchset "Add support for Amlogic GXL Based SBCs" at [2]. [1] http://lists.infradead.org/pipermail/linux-amlogic/2017-October/004860.html [2] http://lists.infradead.org/pipermail/linux-amlogic/2017-November/005410.html Changes since v1: - switched the #if to if(IS_ENABLED()) to compile all code paths - renamed function to meson_board_add_reserved_memory() - added a mem.h header with comment - updated all boards ft_board_setup() Changes since RFC v2: - reduced preprocessor load - kept Odroid-C2 static memory mapping as exception Changes since RFC v1: - switch to fdt rsv mem table and efi reserve memory - replaced in_le32 by readl() Reviewed-by: Simon Glass <sjg@chromium.org> Signed-off-by: Neil Armstrong <narmstrong@baylibre.com> [trini: Fix warning on khadas-vim over missing <asm/arch/mem.h> Signed-off-by: Tom Rini <trini@konsulko.com>
* arm: Add Khadas VIM support based on Meson GXL familyNeil Armstrong2017-12-041-0/+9
| | | | | | | | | | | | | | This adds platform code for the Khadas VIM board based on a Meson GXL (S905X) SoC with the Meson GXL configuration. This initial submission supports UART, MMC/SDCard and Ethernet with the Internal RMII PHY. The meson-gxl-s905x-khadas-vim.dts is synchronised from the linux 4.13 stable tree as of 4.13.8. Reviewed-by: Simon Glass <sjg@chromium.org> Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
* arm: Add LibreTech CC support based on Meson GXL familyNeil Armstrong2017-12-041-0/+9
| | | | | | | | | | | | | | This adds platform code for the Libre Computer CC "Le Potato" board based on a Meson GXL (S905X) SoC with the Meson GXL configuration. This initial submission supports UART, MMC/SDCard and Ethernet with the Internal RMII PHY. The meson-gxl-s905x-libretech-cc.dts is synchronised from the linux 4.13 stable tree as of 4.13.8. Reviewed-by: Simon Glass <sjg@chromium.org> Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>