You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by gn...@apache.org on 2020/09/16 19:24:50 UTC

[incubator-nuttx] branch master updated (b76c467 -> 6e7d966)

This is an automated email from the ASF dual-hosted git repository.

gnutt pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git.


    from b76c467  vfs: Create a node as the root of pseudo file system
     new cab3598  giant-board support (SAMA5D27C-D1G)
     new 1784a3a  Update boards/arm/sama5/giant-board/src/sam_i2schar.c
     new 6a31da6  Update boards/arm/sama5/giant-board/src/sam_sdram.c
     new 1aed2f1  Update boards/arm/sama5/giant-board/src/sam_i2schar.c
     new 6e7d966  converted spaces to tabs for giant-board entries

The 5 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 boards/Kconfig                                     |  21 +-
 boards/arm/sama5/giant-board/Kconfig               | 126 +++++
 boards/arm/sama5/giant-board/README.md             | 615 +++++++++++++++++++++
 .../arm/sama5/giant-board/configs/netnsh/defconfig | 115 ++++
 boards/arm/sama5/giant-board/configs/nsh/defconfig |  76 +++
 .../giant-board/configs/sdmmc-net-nsh/defconfig    | 151 +++++
 .../sama5/giant-board/configs/sdmmcnsh/defconfig   | 138 +++++
 boards/arm/sama5/giant-board/helpers/netusb-up.sh  |  57 ++
 .../{sama5d4-ek => giant-board}/include/.gitignore |   0
 boards/arm/sama5/giant-board/include/board.h       | 195 +++++++
 .../arm/sama5/giant-board/include/board_492mhz.h   | 207 +++++++
 .../sama5/giant-board/include/board_memorymap.h    |  59 ++
 boards/arm/sama5/giant-board/include/board_sdram.h | 167 ++++++
 boards/arm/sama5/giant-board/scripts/Make.defs     |  88 +++
 boards/arm/sama5/giant-board/scripts/dramboot.ld   | 123 +++++
 boards/arm/sama5/giant-board/scripts/gnu-elf.ld    | 124 +++++
 boards/arm/sama5/giant-board/scripts/isram.ld      | 119 ++++
 boards/arm/sama5/giant-board/scripts/uboot.ld      | 124 +++++
 boards/arm/sama5/giant-board/src/Makefile          | 105 ++++
 boards/arm/sama5/giant-board/src/giant-board.h     | 436 +++++++++++++++
 boards/arm/sama5/giant-board/src/sam_adc.c         |  86 +++
 boards/arm/sama5/giant-board/src/sam_ajoystick.c   | 437 +++++++++++++++
 boards/arm/sama5/giant-board/src/sam_appinit.c     |  76 +++
 boards/arm/sama5/giant-board/src/sam_autoleds.c    | 138 +++++
 boards/arm/sama5/giant-board/src/sam_boot.c        |  90 +++
 boards/arm/sama5/giant-board/src/sam_bringup.c     | 400 ++++++++++++++
 boards/arm/sama5/giant-board/src/sam_i2schar.c     | 111 ++++
 boards/arm/sama5/giant-board/src/sam_ostest.c      |  95 ++++
 boards/arm/sama5/giant-board/src/sam_pwm.c         | 147 +++++
 boards/arm/sama5/giant-board/src/sam_reset.c       |  62 +++
 boards/arm/sama5/giant-board/src/sam_sdmmc.c       | 319 +++++++++++
 boards/arm/sama5/giant-board/src/sam_sdram.c       | 573 +++++++++++++++++++
 boards/arm/sama5/giant-board/src/sam_spi.c         | 166 ++++++
 boards/arm/sama5/giant-board/src/sam_usb.c         | 479 ++++++++++++++++
 boards/arm/sama5/giant-board/src/sam_usbmsc.c      |  91 +++
 boards/arm/sama5/giant-board/src/sam_userleds.c    |  98 ++++
 36 files changed, 6410 insertions(+), 4 deletions(-)
 create mode 100644 boards/arm/sama5/giant-board/Kconfig
 create mode 100644 boards/arm/sama5/giant-board/README.md
 create mode 100644 boards/arm/sama5/giant-board/configs/netnsh/defconfig
 create mode 100644 boards/arm/sama5/giant-board/configs/nsh/defconfig
 create mode 100644 boards/arm/sama5/giant-board/configs/sdmmc-net-nsh/defconfig
 create mode 100644 boards/arm/sama5/giant-board/configs/sdmmcnsh/defconfig
 create mode 100755 boards/arm/sama5/giant-board/helpers/netusb-up.sh
 copy boards/arm/sama5/{sama5d4-ek => giant-board}/include/.gitignore (100%)
 create mode 100644 boards/arm/sama5/giant-board/include/board.h
 create mode 100644 boards/arm/sama5/giant-board/include/board_492mhz.h
 create mode 100644 boards/arm/sama5/giant-board/include/board_memorymap.h
 create mode 100644 boards/arm/sama5/giant-board/include/board_sdram.h
 create mode 100644 boards/arm/sama5/giant-board/scripts/Make.defs
 create mode 100644 boards/arm/sama5/giant-board/scripts/dramboot.ld
 create mode 100644 boards/arm/sama5/giant-board/scripts/gnu-elf.ld
 create mode 100644 boards/arm/sama5/giant-board/scripts/isram.ld
 create mode 100644 boards/arm/sama5/giant-board/scripts/uboot.ld
 create mode 100644 boards/arm/sama5/giant-board/src/Makefile
 create mode 100644 boards/arm/sama5/giant-board/src/giant-board.h
 create mode 100644 boards/arm/sama5/giant-board/src/sam_adc.c
 create mode 100644 boards/arm/sama5/giant-board/src/sam_ajoystick.c
 create mode 100644 boards/arm/sama5/giant-board/src/sam_appinit.c
 create mode 100644 boards/arm/sama5/giant-board/src/sam_autoleds.c
 create mode 100644 boards/arm/sama5/giant-board/src/sam_boot.c
 create mode 100644 boards/arm/sama5/giant-board/src/sam_bringup.c
 create mode 100644 boards/arm/sama5/giant-board/src/sam_i2schar.c
 create mode 100644 boards/arm/sama5/giant-board/src/sam_ostest.c
 create mode 100644 boards/arm/sama5/giant-board/src/sam_pwm.c
 create mode 100644 boards/arm/sama5/giant-board/src/sam_reset.c
 create mode 100644 boards/arm/sama5/giant-board/src/sam_sdmmc.c
 create mode 100644 boards/arm/sama5/giant-board/src/sam_sdram.c
 create mode 100644 boards/arm/sama5/giant-board/src/sam_spi.c
 create mode 100644 boards/arm/sama5/giant-board/src/sam_usb.c
 create mode 100644 boards/arm/sama5/giant-board/src/sam_usbmsc.c
 create mode 100644 boards/arm/sama5/giant-board/src/sam_userleds.c


[incubator-nuttx] 01/05: giant-board support (SAMA5D27C-D1G)

Posted by gn...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

gnutt pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git

commit cab35983d439a0199892a4025797fc87bfd295d6
Author: Adam Feuer <ad...@starcat.io>
AuthorDate: Mon Sep 14 12:49:19 2020 -0700

    giant-board support (SAMA5D27C-D1G)
---
 boards/Kconfig                                     |  23 +-
 boards/arm/sama5/giant-board/Kconfig               | 127 +++++
 boards/arm/sama5/giant-board/README.md             | 615 +++++++++++++++++++++
 .../arm/sama5/giant-board/configs/netnsh/defconfig | 115 ++++
 boards/arm/sama5/giant-board/configs/nsh/defconfig |  76 +++
 .../giant-board/configs/sdmmc-net-nsh/defconfig    | 151 +++++
 .../sama5/giant-board/configs/sdmmcnsh/defconfig   | 138 +++++
 boards/arm/sama5/giant-board/helpers/netusb-up.sh  |  57 ++
 boards/arm/sama5/giant-board/include/.gitignore    |   1 +
 boards/arm/sama5/giant-board/include/board.h       | 195 +++++++
 .../arm/sama5/giant-board/include/board_492mhz.h   | 207 +++++++
 .../sama5/giant-board/include/board_memorymap.h    |  59 ++
 boards/arm/sama5/giant-board/include/board_sdram.h | 167 ++++++
 boards/arm/sama5/giant-board/scripts/Make.defs     |  88 +++
 boards/arm/sama5/giant-board/scripts/dramboot.ld   | 123 +++++
 boards/arm/sama5/giant-board/scripts/gnu-elf.ld    | 124 +++++
 boards/arm/sama5/giant-board/scripts/isram.ld      | 119 ++++
 boards/arm/sama5/giant-board/scripts/uboot.ld      | 124 +++++
 boards/arm/sama5/giant-board/src/Makefile          | 105 ++++
 boards/arm/sama5/giant-board/src/giant-board.h     | 436 +++++++++++++++
 boards/arm/sama5/giant-board/src/sam_adc.c         |  86 +++
 boards/arm/sama5/giant-board/src/sam_ajoystick.c   | 437 +++++++++++++++
 boards/arm/sama5/giant-board/src/sam_appinit.c     |  76 +++
 boards/arm/sama5/giant-board/src/sam_autoleds.c    | 138 +++++
 boards/arm/sama5/giant-board/src/sam_boot.c        |  90 +++
 boards/arm/sama5/giant-board/src/sam_bringup.c     | 400 ++++++++++++++
 boards/arm/sama5/giant-board/src/sam_i2schar.c     | 111 ++++
 boards/arm/sama5/giant-board/src/sam_ostest.c      |  95 ++++
 boards/arm/sama5/giant-board/src/sam_pwm.c         | 147 +++++
 boards/arm/sama5/giant-board/src/sam_reset.c       |  62 +++
 boards/arm/sama5/giant-board/src/sam_sdmmc.c       | 319 +++++++++++
 boards/arm/sama5/giant-board/src/sam_sdram.c       | 572 +++++++++++++++++++
 boards/arm/sama5/giant-board/src/sam_spi.c         | 166 ++++++
 boards/arm/sama5/giant-board/src/sam_usb.c         | 479 ++++++++++++++++
 boards/arm/sama5/giant-board/src/sam_usbmsc.c      |  91 +++
 boards/arm/sama5/giant-board/src/sam_userleds.c    |  98 ++++
 36 files changed, 6412 insertions(+), 5 deletions(-)

diff --git a/boards/Kconfig b/boards/Kconfig
index 6e9b2a7..b42b7b6 100644
--- a/boards/Kconfig
+++ b/boards/Kconfig
@@ -1364,13 +1364,22 @@ config ARCH_BOARD_SABRE_6QUAD
 		board featuring the iMX 6Quad CPU.
 
 config ARCH_BOARD_SAMA5D2_XULT
-	bool "Atmel SAMA5D2 Xplained Ultra development board"
+    bool "Atmel SAMA5D2 Xplained Ultra development board"
+    depends on ARCH_CHIP_ATSAMA5D27
+    select ARCH_HAVE_LEDS
+    select ARCH_HAVE_BUTTONS
+    select ARCH_HAVE_IRQBUTTONS
+    ---help---
+        The port of NuttX to the Atmel SAMA5D2-XULT development board
+
+config ARCH_BOARD_GIANT_BOARD
+	bool "Groboards Giant Board (SAMA5D27C-D1G)"
 	depends on ARCH_CHIP_ATSAMA5D27
+    select SAMA5D27_GIANT_BOARD_492MHZ
 	select ARCH_HAVE_LEDS
-	select ARCH_HAVE_BUTTONS
-	select ARCH_HAVE_IRQBUTTONS
 	---help---
-		The port of NuttX to the Atmel SAMA5D2-XULT development board
+	    This options selects support for NuttX on the Groboards Giant Board,
+	    featuring the SAMA5D27C-D1G SIP with 128MB DDR2 RAM.
 
 config ARCH_BOARD_SAMA5D3X_EK
 	bool "Atmel SAMA5D3x-EK development board"
@@ -2268,7 +2277,8 @@ config ARCH_BOARD
 	default "s32k146evb"               if ARCH_BOARD_S32K146EVB
 	default "s32k148evb"               if ARCH_BOARD_S32K148EVB
 	default "sabre-6quad"              if ARCH_BOARD_SABRE_6QUAD
-	default "sama5d2-xult"             if ARCH_BOARD_SAMA5D2_XULT
+    default "sama5d2-xult"             if ARCH_BOARD_SAMA5D2_XULT
+    default "giant-board"              if ARCH_BOARD_GIANT_BOARD
 	default "sama5d3x-ek"              if ARCH_BOARD_SAMA5D3X_EK
 	default "sama5d3-xplained"         if ARCH_BOARD_SAMA5D3_XPLAINED
 	default "sama5d4-ek"               if ARCH_BOARD_SAMA5D4_EK
@@ -2589,6 +2599,9 @@ endif
 if ARCH_BOARD_SAMA5D2_XULT
 source "boards/arm/sama5/sama5d2-xult/Kconfig"
 endif
+if ARCH_BOARD_GIANT_BOARD
+source "boards/arm/sama5/giant-board/Kconfig"
+endif
 if ARCH_BOARD_SAMA5D3X_EK
 source "boards/arm/sama5/sama5d3x-ek/Kconfig"
 endif
diff --git a/boards/arm/sama5/giant-board/Kconfig b/boards/arm/sama5/giant-board/Kconfig
new file mode 100644
index 0000000..2c31aef
--- /dev/null
+++ b/boards/arm/sama5/giant-board/Kconfig
@@ -0,0 +1,127 @@
+#
+# For a description of the syntax of this configuration file,
+# see the file kconfig-language.txt in the NuttX tools repository.
+#
+
+if ARCH_BOARD_GIANT_BOARD
+
+choice
+    prompt "CPU Frequency"
+    default SAMA5D27_GIANT_BOARD_492MHZ
+
+config SAMA5D27_GIANT_BOARD_492MHZ
+    bool "492 MHz"
+
+endchoice # CPU Frequency
+
+config SAMA5D27_GIANT_BOARD_USBHOST_STACKSIZE
+    int "USB host waiter stack size"
+    default 1536 if USBHOST_HUB
+    default 1024 if !USBHOST_HUB
+    depends on USBHOST
+
+config SAMA5D27_GIANT_BOARD_USBHOST_PRIO
+    int "USB host waiter task priority"
+    default 100
+    depends on USBHOST
+
+config SAMA5_SDMMC
+    bool "enable SDMMC controller"
+    default y if SAMA5_HAVE_SDMMC
+    select SDIO_DMA
+    select SCHED_WORKQUEUE
+    select SCHED_HPWORK
+    select MMCSD
+    select MMCSD_SDIO
+    select SDIO_BLOCKSETUP
+    select ARCH_HAVE_SDIO
+    select SAMA5_SDMMC_DMA
+    ---help---
+    Enable SD Card interface SDMMC0. Selects SAMA5_SDMMC SAMA5_SDMMC0
+    SAMA5_SDMMC_DMA SDIO_DMA SCHED_WORKQUEUE SCHED_HPWORK SDIO_BLOCKSETUP
+
+config SAMA5_SDMMC0
+    bool "Enable SDMMC0 (built-in eMMC)"
+    default n if SAMA5_SDMMC
+    depends on SAMA5_SDMMC
+
+config SAMA5_SDMMC0_SIZE
+    int "SDMMC0 size in bytes"
+    default 4294967296
+    depends on SAMA5_SDMMC0
+    ---help---
+    Size of eMMC flash in bytes. Default: 4GB
+
+config SAMA5D27_SDMMC0_MOUNT
+    bool "Mount SDMMC0 at startup"
+    default n
+    depends on SAMA5_SDMMC0
+
+config SAMA5D27_SDMMC0_MOUNT_BLKDEV
+    string "SDMMC0 block device name"
+    default mmc0
+    depends on SAMA5_SDMMC0
+
+config SAMA5D27_SDMMC0_MOUNT_MOUNTPOINT
+    string "SDMMC0 mountpoint"
+    default "/mnt/sdmmc0"
+    depends on SAMA5_SDMMC0
+
+config SAMA5D27_SDMMC0_MOUNT_FSTYPE
+    string "SDMMC0 file system type"
+    default "vfat"
+    depends on SAMA5_SDMMC0
+
+config CONFIG_SAMA5_SDMMC1_WIDTH_D1_D8
+    bool "SDMMC0 data bus width 8 bits"
+    default y
+    depends on SAMA5_SDMMC0
+
+config SAMA5_SDMMC1
+    bool "Enable SDMMC1"
+    default y if SAMA5_SDMMC
+    select SAMA5_SDMMC1_WIDTH_D1_D4
+    depends on SAMA5_SDMMC
+
+config SAMA5_SDMMC1_SIZE
+    int "SDMMC1 size in bytes"
+    default 1073741824
+    depends on SAMA5_SDMMC1
+    ---help---
+    Size of SD Card in bytes. Default: 16GB
+
+config SAMA5D27_SDMMC1_MOUNT
+    bool "Mount SDMMC1 at startup"
+    default n
+    depends on SAMA5_SDMMC1
+
+config SAMA5D27_SDMMC1_MOUNT_BLKDEV
+    string "SDMMC1 block device name"
+    default mmc1
+    depends on SAMA5_SDMMC1
+
+config SAMA5D27_SDMMC1_MOUNT_MOUNTPOINT
+    string "SDMMC1 mountpoint"
+    default "/mnt/sdmmc1"
+    depends on SAMA5_SDMMC1
+
+config SAMA5D27_SDMMC1_MOUNT_FSTYPE
+    string "SDMMC1 file system type"
+    default "vfat"
+    depends on SAMA5_SDMMC1
+
+config MMCSD_HAVE_CARDDETECT
+    bool "SDMMC1 card detect"
+    default y
+    depends on SAMA5_SDMMC1
+
+config SAMA5_SDMMC1_WIDTH_D1_D4
+    bool "SDMMC1 data bus width 4 bits"
+    default y
+    depends on SAMA5_SDMMC1
+
+config SAMA5_SYSTEMRESET
+    bool "Enable system reset - this will enable the nsh reboot command"
+    select BOARDCTL_RESET
+
+endif # ARCH_BOARD_GIANT_BOARD
diff --git a/boards/arm/sama5/giant-board/README.md b/boards/arm/sama5/giant-board/README.md
new file mode 100644
index 0000000..159a55f
--- /dev/null
+++ b/boards/arm/sama5/giant-board/README.md
@@ -0,0 +1,615 @@
+# README
+
+  This README file describes the port of NuttX to the Groboards Giant Board
+  development board. This board features the Atmel SAMA5D27 microprocessor
+  as a SIP with 128KB on-chip DDR2 RAM (part number `ATSAMA5D27C-D1G`).
+  See https://groboards.com/giant-board/ for further information.
+
+  This was copied from the SAMA5D2-XULT README, and needs updating.
+
+## Contents
+
+  - STATUS
+  - Loading Code into SRAM with J-Link
+  - DRAMBOOT, AT25BOOT, SRAMBOOT
+  - Running NuttX from SDRAM
+  - Buttons and LEDs
+  - Serial Console
+  - Giant Board Configuration Options
+  - Configurations
+
+## Status
+
+1. Most of this document is a partially corrected clone of the SAMA5D2-XULT
+   README.txt and still contains errors and inconsistencies.
+
+## Loading Code into SRAM from SD Card
+
+There is no JTAG connector on the Giant Board. There are pads to wire up an SWD
+adapter, but this has not been tested.
+
+The way to run NuttX is to boot from an SD Card. You can download an SD Card image
+or a zip file of the required files from this page:
+
+https://www.starcat.io/starcat-nuttx/
+
+The SD Card has to be FAT formatted, have an AT91Bootstrap binary called boot.bin,
+a U-Boot binary called u-boot.bin as well as a compiled device tree for the 
+SAMA5D27C-D1G called `at91-sama5d27_giantboard.dtb` in the `dtbs/` folder. You can 
+build these yourself using the tools at
+
+https://github.com/Groboards/giantboard-tools
+
+The layout should look like this:
+
+    BOOT.BIN
+    uboot.env
+    nuttx.bin
+    u-boot.bin
+    dtbs/
+      at91-sama5d27_giantboard.dtb
+      
+You only need uboot.env if you want to boot automatically. See the U-Boot
+documentation for instructions on how to create this file.
+
+## Running NuttX from SDRAM
+
+NuttX will be executed from SDRAM, and NuttX binary must reside on SD Card media.
+
+### NuttX Configuration
+
+In order to run from SDRAM, NuttX must be built at origin 0x20008000 in
+SDRAM (skipping over SDRAM memory used by the bootloader). The following
+configuration option is required:
+
+    CONFIG_SAMA5_BOOT_SDRAM=y
+    CONFIG_BOOT_RUNFROMSDRAM=y
+
+These options tell the NuttX code that it will be booting and running from
+SDRAM. In this case, the start-logic will do to things:  (1) it will not
+configure the SAMA5D2 clocking. Rather, it will use the clock configuration
+as set up by the bootloader. And (2) it will not attempt to configure the
+SDRAM. Since NuttX is already running from SDRAM, it must accept the SDRAM
+configuration as set up by the bootloader.
+
+### Boot sequence
+
+Reference: http://www.at91.com/linux4sam/bin/view/Linux4SAM/GettingStarted
+
+Several pieces of software are involved to boot a Nutt5X into SDRAM. First
+is the primary bootloader in ROM which is in charge to check if a valid
+application is present on supported media (NOR FLASH, Serial DataFlash,
+NAND FLASH, SD card).
+
+The boot sequence of linux4SAM is done in several steps :
+
+1. The ROM bootloader checks if a valid application is present in FLASH
+   and if it is the case downloads it into internal SRAM. This program
+   is usually a second level bootloader called AT91BootStrap.
+
+2. AT91Bootstrap is the second level bootloader. It is in charge of the
+   hardware configuration. It downloads U-Boot / Barebox binary from
+   FLASH to SDRAM / DDRAM and starts the third level bootloader
+   (U-Boot / Barebox)
+
+  (see http://www.at91.com/linux4sam/bin/view/Linux4SAM/AT91Bootstrap).
+
+3. The third level bootloader is either U-Boot or Barebox. The third
+   level bootloader is in charge of downloading NuttX binary from FLASH,
+   network, SD card, etc. It then starts NuttX.
+
+ 4. Then NuttX runs from SDRAM
+
+### NAND FLASH Memory Map
+
+Reference: http://www.at91.com/linux4sam/bin/view/Linux4SAM/GettingStarted
+
+    0x0000:0000 - 0x0003:ffff: AT91BootStrap
+    0x0004:0000 - 0x000b:ffff: U-Boot
+    0x000c:0000 - 0x000f:ffff: U-Boot environment
+    0x0010:0000 - 0x0017:ffff: U-Boot environment redundant
+    0x0018:0000 - 0x001f:ffff: Device tree (DTB)
+    0x0020:0000 - 0x007f:ffff: NuttX
+    0x0080:0000 - end:         Available for use as a NAND file system
+
+### Load NuttX with U-Boot on AT91 boards
+
+Reference http://www.at91.com/linux4sam/bin/view/Linux4SAM/U-Boot
+
+#### Preparing NuttX image
+
+U-Boot does not support normal binary images. Instead you have to
+create an nuttx.bin file. The NuttX build generates this file
+automatically. Copy it to the root of the SD Card that you made,
+and boot the card. The SD Card image above will automatically boot
+using the nuttx.bin file. If you are using another image (the
+Giant Board linux image for instance), you can hit space to enter
+U-Boot, and then from the U-Boot prompt do the following:
+
+    U-Boot> fatload mmc 0 0x20008000 nuttx.bin
+    mci: setting clock 257812 Hz, block size 512
+    mci: setting clock 257812 Hz, block size 512
+    mci: setting clock 257812 Hz, block size 512
+    gen_atmel_mci: CMDR 00001048 ( 8) ARGR 000001aa (SR: 0c100025) Command Time Out
+    mci: setting clock 257812 Hz, block size 512
+    mci: setting clock 22000000 Hz, block size 512
+    reading nuttx.bin
+    108076 bytes read in 23 ms (4.5 MiB/s)
+
+    U-Boot> go 0x20008040
+    ## Starting application at 0x20008040 ...
+
+    NuttShell (NSH) NuttX-7.2
+    nsh>
+
+## Buttons and LEDs
+
+### Buttons
+
+A single button, PB1, is available on the Giant Board. This is connected to the
+Power Management Integrated Circuit (PMIC). It is not available to the user.
+
+This appears to have no affect under NuttX.
+
+You can add your own buttons, support for pollable buttons is enabled with:
+
+    CONFIG_ARCH_BUTTONS=y
+
+For interrupt driven buttons, add:
+
+    CONFIG_ARCH_IRQBUTTONS=y
+
+Program interfaces for button access are described in nuttx/include/nuttx/arch.h
+
+There is an example that can be enabled to test button interrupts. That
+example is enabled like:
+
+    CONFIG_EXAMPLES_BUTTONS=y
+    CONFIG_EXAMPLES_BUTTONS_MAX=0
+    CONFIG_EXAMPLES_BUTTONS_MIN=0
+    CONFIG_EXAMPLES_BUTTONS_NAME0="PB_USER"
+    CONFIG_EXAMPLES_IRQBUTTONS_MAX=0
+    CONFIG_EXAMPLES_IRQBUTTONS_MIN=0
+
+### LEDs
+
+There is an Orange LED on the Giant Board, driven by pin (PA6) labeled STATUS.
+Bringing the pin high will illuminate the LED.
+
+    ------------------------------ ------------------- -------------------------
+    SAMA5D2 PIO                    SIGNAL              USAGE
+    ------------------------------ ------------------- -------------------------
+    PA6                            STATUS_LED          Orange LED
+    ------------------------------ ------------------- -------------------------
+
+When CONFIG_ARCH_LEDS is defined in the NuttX configuration, NuttX will
+control the Orange LED as follows:
+
+    SYMBOL              Meaning                 Orange LED
+    ------------------- ----------------------- ---------
+    LED_STARTED         NuttX has been started  OFF
+    LED_HEAPALLOCATE    Heap has been allocated OFF
+    LED_IRQSENABLED     Interrupts enabled      OFF
+    LED_STACKCREATED    Idle stack created      ON
+    LED_INIRQ           In an interrupt         N/C
+    LED_SIGNAL          In a signal handler     N/C
+    LED_ASSERTION       An assertion failed     N/C
+    LED_PANIC           The system has crashed  FLASH
+
+Thus if the Orange LED is statically on, NuttX has successfully  booted and
+is, apparently, running normally. If LED is flashing at approximately
+2Hz, then a fatal error has been detected and the system has halted.
+
+## Serial Console
+
+The default serial console is UART1 (TX and RX on the pin connectors).
+There is a TTL serial connection available on pins 14 and 15 of the J1
+connector.
+
+    ---- ------------------------ -------------
+    J1   SCHEMATIC                   SAMA5D2
+    PIN  NAME(s)                  PIO  FUNCTION
+    ---- ------------------------ -------------
+    15   UART1_RX  DBGU_UTXD1_PD3 PD3  UTXD1
+    14   UART1_TX  DBGU_URXD1_PD2 PD2  URXD1
+    ---- ------------------------ -------------
+
+The other UART on the connectors (J1 and J1) is FLEXCOM4.
+Terminology: FLEXCOM is the same as USART in previous SAMA5D versions.
+
+    ---- ----------- -------------
+           BOARD        SAMA5D2
+    PIN    NAME       PIO  FUNCTION
+    ---- ------------ -------------
+    J2 4  FLEXCOM_IO1 PD21 FLEXCOM4
+    J1 6  AD2         PD13 FLEXCOM4
+    ---- ------------ -------------
+
+By default, the standard UART on the connectors (FLEXCOM4) is
+enabled in all of these configurations unless otherwise noted.
+
+REVISIT: UART1 on the DBGU connect might be a better choice for the
+default serial console
+
+## Giant Board Configuration Options
+
+CONFIG_ARCH - Identifies the arch/ subdirectory. This should
+be set to:
+
+    CONFIG_ARCH="arm"
+
+CONFIG_ARCH_family - For use in C code:
+
+    CONFIG_ARCH_ARM=y
+
+CONFIG_ARCH_architecture - For use in C code:
+
+    CONFIG_ARCH_CORTEXA5=y
+
+CONFIG_ARCH_CHIP - Identifies the arch/*/chip subdirectory
+
+    CONFIG_ARCH_CHIP="sama5"
+
+CONFIG_ARCH_CHIP_name - For use in C code to identify the exact
+chip:
+
+    CONFIG_ARCH_CHIP_SAMA5=y
+    CONFIG_ARCH_CHIP_ATSAMA5D27=y
+
+CONFIG_ARCH_BOARD - Identifies the boards/ subdirectory and
+hence, the board that supports the particular chip or SoC.
+
+    CONFIG_ARCH_BOARD="giant-board" (for the Groboards Giant Board)
+
+CONFIG_ARCH_BOARD_name - For use in C code
+
+    CONFIG_ARCH_BOARD_GIANT_BOARD=y
+
+CONFIG_ARCH_LOOPSPERMSEC - Must be calibrated for correct operation
+of delay loops
+
+CONFIG_ENDIAN_BIG - define if big endian (default is little
+endian)
+
+CONFIG_RAM_SIZE - Describes the installed DRAM (SRAM in this case):
+
+    CONFIG_RAM_SIZE=0x0002000 (128Kb)
+
+CONFIG_RAM_START - The physical start address of installed DRAM
+
+    CONFIG_RAM_START=0x20000000
+
+CONFIG_RAM_VSTART - The virtual start address of installed DRAM
+
+    CONFIG_RAM_VSTART=0x20000000
+
+CONFIG_ARCH_LEDS - Use LEDs to show state. Unique to boards that
+have LEDs
+
+CONFIG_ARCH_INTERRUPTSTACK - This architecture supports an interrupt
+stack. If defined, this symbol is the size of the interrupt
+stack in bytes. If not defined, the user task stacks will be
+used during interrupt handling.
+
+CONFIG_ARCH_STACKDUMP - Do stack dumps after assertions
+
+CONFIG_ARCH_LEDS -  Use LEDs to show state. Unique to board architecture.
+
+Individual subsystems can be enabled:
+
+REVISIT: Unverified, cloned text from the SAMA5D4-EK README.txt
+
+    CONFIG_SAMA5_DBGU        - Debug Unit
+    CONFIG_SAMA5_PIT         - Periodic Interval Timer
+    CONFIG_SAMA5_WDT         - Watchdog timer
+    CONFIG_SAMA5_HSMC        - Multi-bit ECC
+    CONFIG_SAMA5_SMD         - SMD Soft Modem
+    CONFIG_SAMA5_FLEXCOM0    - Flexcom 0
+    CONFIG_SAMA5_FLEXCOM1    - Flexcom 0
+    CONFIG_SAMA5_FLEXCOM2    - Flexcom 0
+    CONFIG_SAMA5_FLEXCOM3    - Flexcom 0
+    CONFIG_SAMA5_FLEXCOM4    - Flexcom 0
+    CONFIG_SAMA5_UART0       - UART 0 (not available on the pins)
+    CONFIG_SAMA5_UART1       - UART 1
+    CONFIG_SAMA5_UART2       - UART 2 (not available on the pins)
+    CONFIG_SAMA5_UART3       - UART 3 (not available on the pins)
+    CONFIG_SAMA5_UART4       - UART 4 (not available on the pins)
+    CONFIG_SAMA5_TWI0        - Two-Wire Interface 0
+    CONFIG_SAMA5_TWI1        - Two-Wire Interface 1
+    CONFIG_SAMA5_SDMMC0      - SD MMC card interface 0 (not available on the pins)
+    CONFIG_SAMA5_SDMMC1      - SD MMC card interface 1
+    CONFIG_SAMA5_SPI0        - Serial Peripheral Interface 0
+    CONFIG_SAMA5_SPI1        - Serial Peripheral Interface 1
+    CONFIG_SAMA5_TC0         - Timer Counter 0 (ch. 0, 1, 2)
+    CONFIG_SAMA5_TC1         - Timer Counter 1 (ch. 3, 4, 5)
+    CONFIG_SAMA5_PWM         - Pulse Width Modulation Controller
+    CONFIG_SAMA5_ADC         - Touch Screen ADC Controller
+    CONFIG_SAMA5_XDMAC0      - XDMA Controller 0
+    CONFIG_SAMA5_XDMAC1      - XDMA Controller 1
+    CONFIG_SAMA5_UHPHS       - USB Host High Speed
+    CONFIG_SAMA5_UDPHS       - USB Device High Speed
+    CONFIG_SAMA5_EMAC0       - Ethernet MAC 0 (GMAC0) (not available on the pins)
+    CONFIG_SAMA5_EMAC1       - Ethernet MAC 1 (GMAC1) (not available on the pins)
+    CONFIG_SAMA5_LCDC        - LCD Controller (not available on the pins)
+    CONFIG_SAMA5_ISI         - Image Sensor Interface (not available on the pins)
+    CONFIG_SAMA5_SSC0        - Synchronous Serial Controller 0
+    CONFIG_SAMA5_SSC1        - Synchronous Serial Controller 1
+    CONFIG_SAMA5_SHA         - Secure Hash Algorithm
+    CONFIG_SAMA5_AES         - Advanced Encryption Standard
+    CONFIG_SAMA5_TDES        - Triple Data Encryption Standard
+    CONFIG_SAMA5_TRNG        - True Random Number Generator
+    CONFIG_SAMA5_ARM         - Performance Monitor Unit
+    CONFIG_SAMA5_FUSE        - Fuse Controller
+    CONFIG_SAMA5_MPDDRC      - MPDDR controller
+
+Some subsystems can be configured to operate in different ways. The drivers
+need to know how to configure the subsystem.
+
+    CONFIG_SAMA5_PIOA_IRQ    - Support PIOA interrupts
+    CONFIG_SAMA5_PIOB_IRQ    - Support PIOB interrupts
+    CONFIG_SAMA5_PIOC_IRQ    - Support PIOD interrupts
+    CONFIG_SAMA5_PIOD_IRQ    - Support PIOD interrupts
+
+    CONFIG_USART0_SERIALDRIVER - Flexcom0 is configured as a UART
+    CONFIG_USART1_SERIALDRIVER - Flexcom1 is configured as a UART
+    CONFIG_USART2_SERIALDRIVER - Flexcom2 is configured as a UART
+    CONFIG_USART3_SERIALDRIVER - Flexcom3 is configured as a UART
+    CONFIG_USART4_SERIALDRIVER - Flexcom4 is configured as a UART
+
+#### AT91SAMA5 specific device driver settings
+
+    CONFIG_SAMA5_DBGU_SERIAL_CONSOLE - selects the DBGU
+      for the console and ttyDBGU
+    CONFIG_SAMA5_DBGU_RXBUFSIZE - Characters are buffered as received.
+       This specific the size of the receive buffer
+    CONFIG_SAMA5_DBGU_TXBUFSIZE - Characters are buffered before
+       being sent. This specific the size of the transmit buffer
+    CONFIG_SAMA5_DBGU_BAUD - The configure BAUD of the DBGU.
+    CONFIG_SAMA5_DBGU_PARITY - 0=no parity, 1=odd parity, 2=even parity
+
+    CONFIG_U[S]ARTn_SERIAL_CONSOLE - selects the USARTn (n=0,1,2,3) or UART
+           m (m=4,5) for the console and ttys0 (default is the DBGU).
+    CONFIG_U[S]ARTn_RXBUFSIZE - Characters are buffered as received.
+       This specific the size of the receive buffer
+    CONFIG_U[S]ARTn_TXBUFSIZE - Characters are buffered before
+       being sent. This specific the size of the transmit buffer
+    CONFIG_U[S]ARTn_BAUD - The configure BAUD of the UART. Must be
+    CONFIG_U[S]ARTn_BITS - The number of bits. Must be either 7 or 8.
+    CONFIG_U[S]ARTn_PARITY - 0=no parity, 1=odd parity, 2=even parity
+    CONFIG_U[S]ARTn_2STOP - Two stop bits
+
+#### AT91SAMA5 USB Host Configuration
+  
+Pre-requisites
+
+    CONFIG_USBDEV          - Enable USB device support
+    CONFIG_USBHOST         - Enable USB host support
+    CONFIG_SAMA5_UHPHS     - Needed
+    CONFIG_SAMA5_OHCI      - Enable the STM32 USB OTG FS block
+    CONFIG_SCHED_WORKQUEUE - Worker thread support is required
+
+Options:
+
+    CONFIG_SAMA5_OHCI_NEDS
+      Number of endpoint descriptors
+    CONFIG_SAMA5_OHCI_NTDS
+      Number of transfer descriptors
+    CONFIG_SAMA5_OHCI_TDBUFFERS
+      Number of transfer descriptor buffers
+    CONFIG_SAMA5_OHCI_TDBUFSIZE
+      Size of one transfer descriptor buffer
+    CONFIG_USBHOST_INT_DISABLE
+      Disable interrupt endpoint support
+    CONFIG_USBHOST_ISOC_DISABLE
+      Disable isochronous endpoint support
+    CONFIG_USBHOST_BULK_DISABLE
+      Disable bulk endpoint support
+
+config SAMA5_OHCI_REGDEBUG
+
+## Configurations
+
+### Information Common to All Configurations
+
+Each Giant Board configuration is maintained in a sub-directory and
+can be selected as follow:
+
+    tools/configure.sh giant-board:<subdir>
+
+Before building, make sure the PATH environment variable includes the
+correct path to the directory than holds your toolchain binaries.
+
+And then build NuttX by simply typing the following. At the conclusion of
+the make, the nuttx binary will reside in an ELF file called, simply, nuttx.
+
+    make
+
+The <subdir> that is provided above as an argument to the tools/configure.sh
+must be is one of the following.
+
+NOTES:
+
+  1. These configurations use the mconf-based configuration tool. To
+    change any of these configurations using that tool, you should:
+
+    a. Build and install the kconfig-mconf tool. See nuttx/README.txt
+       see additional README.txt files in the NuttX tools repository.
+
+    b. Execute 'make menuconfig' in nuttx/ in order to start the
+       reconfiguration process.
+
+  2. Unless stated otherwise, all configurations generate console
+     output on the DBGU (J23).
+
+  3. All of these configurations use the Code Sourcery for Windows toolchain
+     (unless stated otherwise in the description of the configuration). That
+     toolchain selection can easily be reconfigured using 'make menuconfig'.
+     Here are the relevant current settings:
+
+     Build Setup:
+     
+    CONFIG_HOST_WINDOWS=y               : Microsoft Windows
+    CONFIG_WINDOWS_CYGWIN=y             : Using Cygwin or other POSIX environment
+
+System Type -> Toolchain:
+
+    CONFIG_ARMV7A_TOOLCHAIN_GNU_EABIW=y : GNU EABI toolchain for windows
+
+4. The SAMA5Dx is running at 528MHz by default in these configurations.
+
+Board Selection -> CPU Frequency
+
+    CONFIG_SAMA5D2XULT_528MHZ=y       : Enable 528MHz operation
+    CONFIG_BOARD_LOOPSPERMSEC=65775   : Calibrated on SAMA5D3-Xplained at 528MHz running from SDRAM
+
+### Configuration Sub-directories
+
+Summary:  Some of the descriptions below are long and wordy. Here is the
+concise summary of the available Giant Board configurations:
+
+- nsh:  
+  
+    This is a basic NuttShell (NSH) configuration.
+
+    There may be issues with some of these configurations. See the details
+    for status of individual configurations.
+
+#### Now for the gory details:
+
+- netnsh:
+
+  This is a network enabled configuration based on the NuttShell (NSH).
+  The CDC-ECM driver is enabled, so you can plug a USB cable into the
+  USB-Micro port (USB-A) and the board will appear as an CDC-ECM
+  ethernet adapter.
+
+- nsh:
+
+  This configuration directory provide the NuttShell (NSH). This is a
+  very simple NSH configuration upon which you can build further
+  functionality.
+
+    NOTES:
+
+    1. This configuration uses the UART1 (PD2 and PD3) for the serial
+       console. USART1 is available at the "DBGU" RS-232 connector (J24).
+       This is easily changed by reconfiguring to (1) enable a different
+       serial peripheral, and (2) selecting that serial peripheral as the
+       console device.
+
+    2. By default, this configuration is set up to build on Windows
+       under either a Cygwin or MSYS environment using a recent, Windows-
+       native, generic ARM EABI GCC toolchain (such as the ARM supported
+       toolchain). Both the build environment and the toolchain
+       selection can easily be changed by reconfiguring:
+
+       CONFIG_HOST_WINDOWS=y           : Windows operating system
+       CONFIG_WINDOWS_CYGWIN=y         : POSIX environment under windows
+       CONFIG_ARMV7A_TOOLCHAIN_EABIW=y : Generic GCC EABI toolchain for Windows
+
+       If you are running on Linux, make *certain* that you have
+       CONFIG_HOST_LINUX=y *before* the first make or you will create a
+       corrupt configuration that may not be easy to recover from. See
+       the warning in the section "Information Common to All Configurations"
+       for further information.
+
+    4. This configuration supports logging of debug output to a circular
+       buffer in RAM. This feature is discussed fully in this Wiki page:
+       http://nuttx.org/doku.php?id=wiki:howtos:syslog . Relevant
+       configuration settings are summarized below:
+
+       File System:
+
+       Device Drivers:
+       CONFIG_RAMLOG=y             : Enable the RAM-based logging feature.
+       CONFIG_RAMLOG_SYSLOG=y      : This enables the RAM-based logger as the
+                                     system logger.
+       CONFIG_RAMLOG_NONBLOCKING=y : Needs to be non-blocking for dmesg
+       CONFIG_RAMLOG_BUFSIZE=16384 : Buffer size is 16KiB
+
+       NOTE: This RAMLOG feature is really only of value if debug output
+       is enabled. But, by default, no debug output is disabled in this
+       configuration. Therefore, there is no logic that will add anything
+       to the RAM buffer. This feature is configured and in place only
+       to support any future debugging needs that you may have.
+
+       If you don't plan on using the debug features, then by all means
+       disable this feature and save 16KiB of RAM!
+
+       NOTE: There is an issue with capturing data in the RAMLOG:  If
+       the system crashes, all of the crash dump information will into
+       the RAMLOG and you will be unable to access it!  You can tell that
+       the system has crashed because (a) it will be unresponsive and (b)
+       the RED LED will be blinking at about 2Hz.
+
+       That is another good reason to disable the RAMLOG!
+
+    5. This configuration executes out of SDRAM flash and is loaded into
+       SDRAM from SD card U-Boot. Data also is positioned in SDRAM.
+
+       Booting with U-Boot from nuttx.bin on an SD card is the only boot
+       method that has been tested. These are the commands that I used to boot NuttX
+       from the SD card:
+
+         U-Boot> fatload mmc 0 0x20008000 nuttx.bin
+         U-Boot> go 0x20008040
+
+    6. This configuration supports /dev/null, /dev/zero, and /dev/random.
+
+         CONFIG_DEV_NULL=y    : Enables /dev/null
+         CONFIG_DEV_ZERO=y    : Enabled /dev/zero
+
+       Support for /dev/random is implemented using the SAMA5D2's True
+       Random Number Generator (TRNG). See the section above entitled
+       "TRNG and /dev/random" for information about configuring /dev/random.
+
+        CONFIG_SAMA5_TRNG=y   : Enables the TRNG peripheral
+        CONFIG_DEV_RANDOM=y   : Enables /dev/random
+
+    7. This configuration has support for NSH built-in applications enabled.
+       No built-in applications are enabled, however.
+
+    8. This configuration has support for the FAT and PROCFS file
+       systems built in.
+
+       The FAT file system includes long file name support. Please be aware
+       that Microsoft claims patents against the long file name support (see
+       more discussion in the top-level COPYING file).
+
+         CONFIG_FS_FAT=y        : Enables the FAT file system
+         CONFIG_FAT_LCNAMES=y   : Enable lower case 8.3 file names
+         CONFIG_FAT_LFN=y       : Enables long file name support
+         CONFIG_FAT_MAXFNAME=32 : Arbitrarily limits the size of a path
+                                  segment name to 32 bytes
+
+       The PROCFS file system is enabled simply with:
+
+         CONFIG_FS_PROCFS=y     : Enable PROCFS file system
+
+    9. The Real Time Clock/Calendar (RTC) is enabled in this configuration.
+       See the section entitled "RTC" above for detailed configuration
+       settings.
+
+       The RTC alarm is not enabled by default since there is nothing in
+       this configuration that uses it. The alarm can easily be enabled,
+       however, as described in the "RTC" section.
+
+       The time value from the RTC will be used as the NuttX system time
+       in all timestamp operations. You may use the NSH 'date' command
+       to set or view the RTC as described above in the "RTC" section.
+
+       NOTE:  If you want the RTC to preserve time over power cycles, you
+       will need to install a battery in the battery holder (J12) and close
+       the jumper, JP13.
+
+- sdmmcnsh:
+
+    This is a configuration based on the NuttShell (NSH). The SDMMC
+    peripheral is enabled, and can read and write to a VFAT filesystem
+    on the SD Card.
+
+    NuttX will mount the SD Card at `/mnt/mmcsd1`.
+    
+- sdmmc-net-nsh:
+  
+    This is a combination of the netnsh and sdmmcnsh configurations.   
diff --git a/boards/arm/sama5/giant-board/configs/netnsh/defconfig b/boards/arm/sama5/giant-board/configs/netnsh/defconfig
new file mode 100644
index 0000000..e8e88f3
--- /dev/null
+++ b/boards/arm/sama5/giant-board/configs/netnsh/defconfig
@@ -0,0 +1,115 @@
+#
+# This file is autogenerated: PLEASE DO NOT EDIT IT.
+#
+# You can use "make menuconfig" to make any modifications to the installed .config file.
+# You can then do "make savedefconfig" to generate a new defconfig file that includes your
+# modifications.
+#
+# CONFIG_AUDIO_FORMAT_MP3 is not set
+# CONFIG_NSH_CMDOPT_HEXDUMP is not set
+# CONFIG_SAMA5_UART0 is not set
+# CONFIG_SAMA5_UHPHS_RHPORT3 is not set
+CONFIG_ARCH="arm"
+CONFIG_ARCH_BOARD="giant-board"
+CONFIG_ARCH_BOARD_GIANT_BOARD=y
+CONFIG_ARCH_CHIP="sama5"
+CONFIG_ARCH_CHIP_ATSAMA5D27=y
+CONFIG_ARCH_CHIP_SAMA5=y
+CONFIG_ARCH_CHIP_SAMA5D2=y
+CONFIG_ARCH_INTERRUPTSTACK=2048
+CONFIG_ARCH_LOWVECTORS=y
+CONFIG_ARCH_STACKDUMP=y
+CONFIG_AUDIO=y
+CONFIG_AUDIO_NUM_BUFFERS=8
+CONFIG_BOARD_LOOPSPERMSEC=65775
+CONFIG_BOOT_RUNFROMSDRAM=y
+CONFIG_BUILTIN=y
+CONFIG_CDCACM=y
+CONFIG_DEV_ZERO=y
+CONFIG_EXAMPLES_TCPBLASTER=y
+CONFIG_EXAMPLES_TCPECHO=y
+CONFIG_EXAMPLES_UDPBLASTER=y
+CONFIG_FAT_LCNAMES=y
+CONFIG_FAT_LFN=y
+CONFIG_FS_BINFS=y
+CONFIG_FS_FAT=y
+CONFIG_FS_FATTIME=y
+CONFIG_FS_PROCFS=y
+CONFIG_FS_PROCFS_REGISTER=y
+CONFIG_FS_TMPFS=y
+CONFIG_HAVE_CXX=y
+CONFIG_HAVE_CXXINITIALIZE=y
+CONFIG_HIDKBD_POLLUSEC=80000
+CONFIG_I2S=y
+CONFIG_INTELHEX_BINARY=y
+CONFIG_IOB_NBUFFERS=24
+CONFIG_IOB_THROTTLE=0
+CONFIG_MAX_TASKS=16
+CONFIG_NETINIT_NOMAC=y
+CONFIG_NETUTILS_TELNETD=y
+CONFIG_NET_ARP_SEND=y
+CONFIG_NET_CDCECM=y
+CONFIG_NET_ETH_PKTSIZE=1500
+CONFIG_NET_ICMP=y
+CONFIG_NET_ICMP_SOCKET=y
+CONFIG_NET_LOOPBACK=y
+CONFIG_NET_SENDFILE=y
+CONFIG_NET_SOCKOPTS=y
+CONFIG_NET_SOLINGER=y
+CONFIG_NET_TCP=y
+CONFIG_NET_TCPBACKLOG=y
+CONFIG_NET_TCP_DELAYED_ACK=y
+CONFIG_NET_TCP_KEEPALIVE=y
+CONFIG_NET_TCP_WRITE_BUFFERS=y
+CONFIG_NET_UDP=y
+CONFIG_NET_UDP_WRITE_BUFFERS=y
+CONFIG_NFILE_DESCRIPTORS=8
+CONFIG_NSH_ARCHINIT=y
+CONFIG_NSH_BUILTIN_APPS=y
+CONFIG_NSH_FILEIOSIZE=512
+CONFIG_PREALLOC_TIMERS=4
+CONFIG_RAMLOG=y
+CONFIG_RAMLOG_BUFSIZE=16384
+CONFIG_RAMLOG_SYSLOG=y
+CONFIG_RAM_SIZE=268435456
+CONFIG_RAM_START=0x20000000
+CONFIG_RAM_VSTART=0x20000000
+CONFIG_READLINE_CMD_HISTORY=y
+CONFIG_READLINE_TABCOMPLETION=y
+CONFIG_RR_INTERVAL=200
+CONFIG_SAMA5_BOOT_SDRAM=y
+CONFIG_SAMA5_DDRCS_HEAP_END=0x2fa00000
+CONFIG_SAMA5_DDRCS_RESERVE=y
+CONFIG_SAMA5_EHCI=y
+CONFIG_SAMA5_OHCI=y
+CONFIG_SAMA5_PIO_IRQ=y
+CONFIG_SAMA5_RTC=y
+CONFIG_SAMA5_TRNG=y
+CONFIG_SAMA5_UART1=y
+CONFIG_SAMA5_UDPHS=y
+CONFIG_SAMA5_UHPHS=y
+CONFIG_SCHED_HPWORK=y
+CONFIG_SCHED_HPWORKPRIORITY=192
+CONFIG_SCHED_LPWORK=y
+CONFIG_SCHED_WAITPID=y
+CONFIG_SERIAL_TERMIOS=y
+CONFIG_SIG_DEFAULT=y
+CONFIG_SIG_EVTHREAD=y
+CONFIG_SYMTAB_ORDEREDBYNAME=y
+CONFIG_SYSLOG_TIMESTAMP=y
+CONFIG_SYSTEM_NSH=y
+CONFIG_SYSTEM_PING=y
+CONFIG_TTY_SIGINT=y
+CONFIG_TTY_SIGSTP=y
+CONFIG_UART1_SERIAL_CONSOLE=y
+CONFIG_UBOOT_UIMAGE=y
+CONFIG_UIMAGE_ENTRY_POINT=0x20008040
+CONFIG_UIMAGE_LOAD_ADDRESS=0x20008000
+CONFIG_USBDEV=y
+CONFIG_USBDEV_DUALSPEED=y
+CONFIG_USBHOST_CDCACM=y
+CONFIG_USBHOST_COMPOSITE=y
+CONFIG_USBHOST_HIDKBD=y
+CONFIG_USBHOST_HUB=y
+CONFIG_USBHOST_MSC=y
+CONFIG_USER_ENTRYPOINT="nsh_main"
diff --git a/boards/arm/sama5/giant-board/configs/nsh/defconfig b/boards/arm/sama5/giant-board/configs/nsh/defconfig
new file mode 100644
index 0000000..facaec1
--- /dev/null
+++ b/boards/arm/sama5/giant-board/configs/nsh/defconfig
@@ -0,0 +1,76 @@
+#
+# This file is autogenerated: PLEASE DO NOT EDIT IT.
+#
+# You can use "make menuconfig" to make any modifications to the installed .config file.
+# You can then do "make savedefconfig" to generate a new defconfig file that includes your
+# modifications.
+#
+# CONFIG_AUDIO_FORMAT_MP3 is not set
+# CONFIG_NSH_CMDOPT_HEXDUMP is not set
+# CONFIG_SAMA5_UART0 is not set
+# CONFIG_SAMA5_UHPHS_RHPORT1 is not set
+CONFIG_ARCH="arm"
+CONFIG_ARCH_BOARD="giant-board"
+CONFIG_ARCH_BOARD_GIANT_BOARD=y
+CONFIG_ARCH_CHIP="sama5"
+CONFIG_ARCH_CHIP_ATSAMA5D27=y
+CONFIG_ARCH_CHIP_SAMA5=y
+CONFIG_ARCH_CHIP_SAMA5D2=y
+CONFIG_ARCH_INTERRUPTSTACK=2048
+CONFIG_ARCH_LOWVECTORS=y
+CONFIG_ARCH_STACKDUMP=y
+CONFIG_AUDIO=y
+CONFIG_AUDIO_NUM_BUFFERS=8
+CONFIG_BOARD_LOOPSPERMSEC=65775
+CONFIG_BOOT_RUNFROMSDRAM=y
+CONFIG_BUILTIN=y
+CONFIG_DEV_ZERO=y
+CONFIG_FAT_LCNAMES=y
+CONFIG_FAT_LFN=y
+CONFIG_FS_FAT=y
+CONFIG_FS_PROCFS=y
+CONFIG_HAVE_CXX=y
+CONFIG_HAVE_CXXINITIALIZE=y
+CONFIG_HIDKBD_POLLUSEC=80000
+CONFIG_I2S=y
+CONFIG_INTELHEX_BINARY=y
+CONFIG_MAX_TASKS=16
+CONFIG_NFILE_DESCRIPTORS=8
+CONFIG_NSH_ARCHINIT=y
+CONFIG_NSH_BUILTIN_APPS=y
+CONFIG_NSH_FILEIOSIZE=512
+CONFIG_NSH_READLINE=y
+CONFIG_NXPLAYER_DEFAULT_MEDIADIR="/mnt/sdcard"
+CONFIG_NXPLAYER_INCLUDE_SYSTEM_RESET=y
+CONFIG_NXPLAYER_RECURSIVE_MEDIA_SEARCH=y
+CONFIG_PREALLOC_TIMERS=4
+CONFIG_RAMLOG=y
+CONFIG_RAMLOG_BUFSIZE=16384
+CONFIG_RAMLOG_SYSLOG=y
+CONFIG_RAM_SIZE=268435456
+CONFIG_RAM_START=0x20000000
+CONFIG_RAM_VSTART=0x20000000
+CONFIG_RR_INTERVAL=200
+CONFIG_SAMA5_BOOT_SDRAM=y
+CONFIG_SAMA5_DDRCS_HEAP_END=0x2fa00000
+CONFIG_SAMA5_DDRCS_RESERVE=y
+CONFIG_SAMA5_EHCI=y
+CONFIG_SAMA5_OHCI=y
+CONFIG_SAMA5_PIO_IRQ=y
+CONFIG_SAMA5_RTC=y
+CONFIG_SAMA5_TRNG=y
+CONFIG_SAMA5_UART1=y
+CONFIG_SAMA5_UHPHS=y
+CONFIG_SCHED_HPWORK=y
+CONFIG_SCHED_HPWORKPRIORITY=192
+CONFIG_SCHED_WAITPID=y
+CONFIG_SYMTAB_ORDEREDBYNAME=y
+CONFIG_SYSTEM_NSH=y
+CONFIG_SYSTEM_NXPLAYER=y
+CONFIG_UART1_SERIAL_CONSOLE=y
+CONFIG_UBOOT_UIMAGE=y
+CONFIG_UIMAGE_ENTRY_POINT=0x20008040
+CONFIG_UIMAGE_LOAD_ADDRESS=0x20008000
+CONFIG_USBHOST_HIDKBD=y
+CONFIG_USBHOST_MSC=y
+CONFIG_USER_ENTRYPOINT="nsh_main"
diff --git a/boards/arm/sama5/giant-board/configs/sdmmc-net-nsh/defconfig b/boards/arm/sama5/giant-board/configs/sdmmc-net-nsh/defconfig
new file mode 100644
index 0000000..7dfea4e
--- /dev/null
+++ b/boards/arm/sama5/giant-board/configs/sdmmc-net-nsh/defconfig
@@ -0,0 +1,151 @@
+#
+# This file is autogenerated: PLEASE DO NOT EDIT IT.
+#
+# You can use "make menuconfig" to make any modifications to the installed .config file.
+# You can then do "make savedefconfig" to generate a new defconfig file that includes your
+# modifications.
+#
+CONFIG_ARCH="arm"
+CONFIG_ARCH_BOARD="giant-board"
+CONFIG_ARCH_BOARD_GIANT_BOARD=y
+CONFIG_ARCH_CHIP="sama5"
+CONFIG_ARCH_CHIP_ATSAMA5D27=y
+CONFIG_ARCH_CHIP_SAMA5=y
+CONFIG_ARCH_CHIP_SAMA5D2=y
+CONFIG_ARCH_INTERRUPTSTACK=2048
+CONFIG_ARCH_LOWVECTORS=y
+CONFIG_ARCH_STACKDUMP=y
+CONFIG_AUDIO=y
+CONFIG_AUDIO_NUM_BUFFERS=8
+CONFIG_BOARDCTL_ROMDISK=y
+CONFIG_BOARD_LOOPSPERMSEC=65775
+CONFIG_BOOT_RUNFROMSDRAM=y
+CONFIG_BUILTIN=y
+CONFIG_CDCACM=y
+CONFIG_CONSOLE_SYSLOG=y
+CONFIG_DEBUG_FULLOPT=y
+CONFIG_DEBUG_SYMBOLS=y
+CONFIG_DEV_LOOP=y
+CONFIG_DEV_ZERO=y
+CONFIG_EXAMPLES_HELLO=y
+CONFIG_EXAMPLES_TCPBLASTER=y
+CONFIG_EXAMPLES_TCPECHO=y
+CONFIG_EXAMPLES_UDPBLASTER=y
+CONFIG_EXAMPLES_WGET=y
+CONFIG_EXAMPLES_WGET_URL="http://10.0.0.1/"
+CONFIG_FAT_LCNAMES=y
+CONFIG_FAT_LFN=y
+CONFIG_FS_AUTOMOUNTER=y
+CONFIG_FS_BINFS=y
+CONFIG_FS_FAT=y
+CONFIG_FS_FATTIME=y
+CONFIG_FS_PROCFS=y
+CONFIG_FS_PROCFS_EXCLUDE_VERSION=y
+CONFIG_FS_PROCFS_REGISTER=y
+CONFIG_FS_TMPFS=y
+CONFIG_HAVE_CXX=y
+CONFIG_HAVE_CXXINITIALIZE=y
+CONFIG_HIDKBD_POLLUSEC=80000
+CONFIG_I2S=y
+CONFIG_INTELHEX_BINARY=y
+CONFIG_IOB_NBUFFERS=72
+CONFIG_IOB_THROTTLE=16
+CONFIG_MAX_TASKS=16
+CONFIG_NETDB_BUFSIZE=128
+CONFIG_NETINIT_NETLOCAL=y
+CONFIG_NETINIT_NOMAC=y
+CONFIG_NETUTILS_TELNETC=y
+CONFIG_NETUTILS_TELNETD=y
+CONFIG_NETUTILS_WEBCLIENT=y
+CONFIG_NET_ARP_IPIN=y
+CONFIG_NET_ARP_SEND=y
+CONFIG_NET_BROADCAST=y
+CONFIG_NET_CDCECM=y
+CONFIG_NET_ETH_PKTSIZE=1514
+CONFIG_NET_ICMP=y
+CONFIG_NET_ICMP_SOCKET=y
+CONFIG_NET_LOOPBACK=y
+CONFIG_NET_ROUTE=y
+CONFIG_NET_SENDFILE=y
+CONFIG_NET_SOLINGER=y
+CONFIG_NET_STATISTICS=y
+CONFIG_NET_TCP=y
+CONFIG_NET_TCPBACKLOG=y
+CONFIG_NET_TCP_DELAYED_ACK=y
+CONFIG_NET_TCP_KEEPALIVE=y
+CONFIG_NET_TCP_WRITE_BUFFERS=y
+CONFIG_NET_UDP=y
+CONFIG_NET_UDP_WRITE_BUFFERS=y
+CONFIG_NFILE_DESCRIPTORS=8
+CONFIG_NSH_ARCHINIT=y
+CONFIG_NSH_BUILTIN_APPS=y
+CONFIG_NSH_FILEIOSIZE=512
+CONFIG_NSH_PROMPT_STRING="nsh>  "
+CONFIG_NSH_READLINE=y
+CONFIG_PREALLOC_TIMERS=4
+CONFIG_RAMLOG=y
+CONFIG_RAMLOG_BUFSIZE=16384
+CONFIG_RAMLOG_SYSLOG=y
+CONFIG_RAM_SIZE=268435456
+CONFIG_RAM_START=0x20000000
+CONFIG_RAM_VSTART=0x20000000
+CONFIG_READLINE_CMD_HISTORY=y
+CONFIG_READLINE_CMD_HISTORY_LEN=100
+CONFIG_READLINE_CMD_HISTORY_LINELEN=120
+CONFIG_READLINE_TABCOMPLETION=y
+CONFIG_RR_INTERVAL=200
+CONFIG_SAMA5D27_SDMMC0_MOUNT_BLKDEV="/dev/mmcsd0"
+CONFIG_SAMA5D27_SDMMC0_MOUNT_MOUNTPOINT="/mnt/mmcsd0"
+CONFIG_SAMA5D27_SDMMC1_MOUNT=y
+CONFIG_SAMA5D27_SDMMC1_MOUNT_BLKDEV="/dev/mmcsd1"
+CONFIG_SAMA5D27_SDMMC1_MOUNT_MOUNTPOINT="/mnt/mmcsd1"
+CONFIG_SAMA5_BOOT_SDRAM=y
+CONFIG_SAMA5_DDRCS_HEAP_END=0x2fa00000
+CONFIG_SAMA5_DDRCS_RESERVE=y
+CONFIG_SAMA5_EHCI=y
+CONFIG_SAMA5_HSMC=y
+CONFIG_SAMA5_OHCI=y
+CONFIG_SAMA5_PIOA_IRQ=y
+CONFIG_SAMA5_PIOB_IRQ=y
+CONFIG_SAMA5_PIOC_IRQ=y
+CONFIG_SAMA5_PIO_IRQ=y
+CONFIG_SAMA5_RTC=y
+CONFIG_SAMA5_SDMMC0=y
+CONFIG_SAMA5_SDMMC0_SIZE=1073741824
+CONFIG_SAMA5_SDMMC=y
+CONFIG_SAMA5_TRNG=y
+CONFIG_SAMA5_UART1=y
+CONFIG_SAMA5_UDPHS=y
+CONFIG_SAMA5_UHPHS=y
+CONFIG_SCHED_HPWORKPRIORITY=192
+CONFIG_SCHED_LPNTHREADS=2
+CONFIG_SCHED_WAITPID=y
+CONFIG_SDCLONE_DISABLE=y
+CONFIG_SERIAL_TERMIOS=y
+CONFIG_SIG_DEFAULT=y
+CONFIG_SIG_EVTHREAD=y
+CONFIG_START_DAY=31
+CONFIG_START_MONTH=7
+CONFIG_START_YEAR=2014
+CONFIG_SYMTAB_ORDEREDBYNAME=y
+CONFIG_SYSLOG_TIMESTAMP=y
+CONFIG_SYSTEM_NSH=y
+CONFIG_SYSTEM_PING=y
+CONFIG_SYSTEM_VI=y
+CONFIG_TTY_SIGINT=y
+CONFIG_TTY_SIGSTP=y
+CONFIG_UART1_SERIAL_CONSOLE=y
+CONFIG_UBOOT_UIMAGE=y
+CONFIG_UIMAGE_ENTRY_POINT=0x20008040
+CONFIG_UIMAGE_LOAD_ADDRESS=0x20008000
+CONFIG_USBDEV=y
+CONFIG_USBDEV_DMA=y
+CONFIG_USBDEV_DUALSPEED=y
+CONFIG_USBDEV_TRACE=y
+CONFIG_USBDEV_TRACE_NRECORDS=512
+CONFIG_USBHOST_CDCACM=y
+CONFIG_USBHOST_COMPOSITE=y
+CONFIG_USBHOST_HIDKBD=y
+CONFIG_USBHOST_HUB=y
+CONFIG_USBHOST_MSC=y
+CONFIG_USER_ENTRYPOINT="nsh_main"
diff --git a/boards/arm/sama5/giant-board/configs/sdmmcnsh/defconfig b/boards/arm/sama5/giant-board/configs/sdmmcnsh/defconfig
new file mode 100644
index 0000000..5e5a24e
--- /dev/null
+++ b/boards/arm/sama5/giant-board/configs/sdmmcnsh/defconfig
@@ -0,0 +1,138 @@
+#
+# This file is autogenerated: PLEASE DO NOT EDIT IT.
+#
+# You can use "make menuconfig" to make any modifications to the installed .config file.
+# You can then do "make savedefconfig" to generate a new defconfig file that includes your
+# modifications.
+#
+# CONFIG_AUDIO_FORMAT_MP3 is not set
+# CONFIG_DISABLE_OS_API is not set
+# CONFIG_NSH_ARGCAT is not set
+# CONFIG_NSH_CMDOPT_HEXDUMP is not set
+# CONFIG_NSH_CMDPARMS is not set
+# CONFIG_SAMA5_UART0 is not set
+CONFIG_ARCH="arm"
+CONFIG_ARCH_BOARD="giant-board"
+CONFIG_ARCH_BOARD_GIANT_BOARD=y
+CONFIG_ARCH_CHIP="sama5"
+CONFIG_ARCH_CHIP_ATSAMA5D27=y
+CONFIG_ARCH_CHIP_SAMA5=y
+CONFIG_ARCH_CHIP_SAMA5D2=y
+CONFIG_ARCH_INTERRUPTSTACK=2048
+CONFIG_ARCH_LOWVECTORS=y
+CONFIG_ARCH_STACKDUMP=y
+CONFIG_AUDIO=y
+CONFIG_AUDIO_NUM_BUFFERS=8
+CONFIG_BOARDCTL_ROMDISK=y
+CONFIG_BOARD_LOOPSPERMSEC=65775
+CONFIG_BOOT_RUNFROMSDRAM=y
+CONFIG_BUILTIN=y
+CONFIG_CONSOLE_SYSLOG=y
+CONFIG_DEBUG_FULLOPT=y
+CONFIG_DEBUG_SYMBOLS=y
+CONFIG_DEV_LOOP=y
+CONFIG_DEV_ZERO=y
+CONFIG_EXAMPLES_HELLO=y
+CONFIG_EXAMPLES_TCPBLASTER=y
+CONFIG_EXAMPLES_TCPECHO=y
+CONFIG_EXAMPLES_WGET=y
+CONFIG_EXAMPLES_WGET_URL="http://10.0.0.1/"
+CONFIG_FAT_LCNAMES=y
+CONFIG_FAT_LFN=y
+CONFIG_FS_AUTOMOUNTER=y
+CONFIG_FS_FAT=y
+CONFIG_FS_PROCFS=y
+CONFIG_FS_PROCFS_EXCLUDE_VERSION=y
+CONFIG_HAVE_CXX=y
+CONFIG_HAVE_CXXINITIALIZE=y
+CONFIG_HIDKBD_POLLUSEC=80000
+CONFIG_I2S=y
+CONFIG_INTELHEX_BINARY=y
+CONFIG_IOB_NBUFFERS=72
+CONFIG_IOB_THROTTLE=16
+CONFIG_MAX_TASKS=16
+CONFIG_NETDB_BUFSIZE=128
+CONFIG_NETINIT_NETLOCAL=y
+CONFIG_NETINIT_NOMAC=y
+CONFIG_NETUTILS_TELNETC=y
+CONFIG_NETUTILS_WEBCLIENT=y
+CONFIG_NET_ARP_IPIN=y
+CONFIG_NET_ARP_SEND=y
+CONFIG_NET_BROADCAST=y
+CONFIG_NET_CDCECM=y
+CONFIG_NET_ETH_PKTSIZE=1514
+CONFIG_NET_ICMP=y
+CONFIG_NET_ICMP_SOCKET=y
+CONFIG_NET_ROUTE=y
+CONFIG_NET_STATISTICS=y
+CONFIG_NET_TCP=y
+CONFIG_NET_TCPBACKLOG=y
+CONFIG_NET_TCP_NOTIFIER=y
+CONFIG_NET_TCP_WRITE_BUFFERS=y
+CONFIG_NET_UDP=y
+CONFIG_NFILE_DESCRIPTORS=8
+CONFIG_NSH_ARCHINIT=y
+CONFIG_NSH_BUILTIN_APPS=y
+CONFIG_NSH_FILEIOSIZE=512
+CONFIG_NSH_PROMPT_STRING="nsh>  "
+CONFIG_NSH_QUOTE=y
+CONFIG_NSH_READLINE=y
+CONFIG_PREALLOC_TIMERS=4
+CONFIG_RAM_SIZE=268435456
+CONFIG_RAM_START=0x20000000
+CONFIG_RAM_VSTART=0x20000000
+CONFIG_RAW_BINARY=y
+CONFIG_READLINE_CMD_HISTORY=y
+CONFIG_READLINE_CMD_HISTORY_LEN=100
+CONFIG_READLINE_CMD_HISTORY_LINELEN=120
+CONFIG_READLINE_TABCOMPLETION=y
+CONFIG_RR_INTERVAL=200
+CONFIG_SAMA5D27_SDMMC0_MOUNT_BLKDEV="/dev/mmcsd0"
+CONFIG_SAMA5D27_SDMMC0_MOUNT_MOUNTPOINT="/mnt/mmcsd0"
+CONFIG_SAMA5D27_SDMMC1_MOUNT=y
+CONFIG_SAMA5D27_SDMMC1_MOUNT_BLKDEV="/dev/mmcsd1"
+CONFIG_SAMA5D27_SDMMC1_MOUNT_MOUNTPOINT="/mnt/mmcsd1"
+CONFIG_SAMA5_BOOT_SDRAM=y
+CONFIG_SAMA5_DDRCS_HEAP_END=0x2fa00000
+CONFIG_SAMA5_DDRCS_RESERVE=y
+CONFIG_SAMA5_EHCI=y
+CONFIG_SAMA5_HSMC=y
+CONFIG_SAMA5_OHCI=y
+CONFIG_SAMA5_PIOA_IRQ=y
+CONFIG_SAMA5_PIOB_IRQ=y
+CONFIG_SAMA5_PIOC_IRQ=y
+CONFIG_SAMA5_PIO_IRQ=y
+CONFIG_SAMA5_RTC=y
+CONFIG_SAMA5_SDMMC0=y
+CONFIG_SAMA5_SDMMC0_SIZE=1073741824
+CONFIG_SAMA5_SDMMC=y
+CONFIG_SAMA5_TRNG=y
+CONFIG_SAMA5_UART1=y
+CONFIG_SAMA5_UDPHS=y
+CONFIG_SAMA5_UHPHS=y
+CONFIG_SCHED_HPWORKPRIORITY=192
+CONFIG_SCHED_LPNTHREADS=2
+CONFIG_SCHED_WAITPID=y
+CONFIG_SDCLONE_DISABLE=y
+CONFIG_SERIAL_TERMIOS=y
+CONFIG_SIG_DEFAULT=y
+CONFIG_SIG_EVTHREAD=y
+CONFIG_START_DAY=31
+CONFIG_START_MONTH=7
+CONFIG_START_YEAR=2014
+CONFIG_SYMTAB_ORDEREDBYNAME=y
+CONFIG_SYSLOG_TIMESTAMP=y
+CONFIG_SYSTEM_NSH=y
+CONFIG_SYSTEM_PING=y
+CONFIG_SYSTEM_VI=y
+CONFIG_TTY_SIGINT=y
+CONFIG_TTY_SIGSTP=y
+CONFIG_UART1_SERIAL_CONSOLE=y
+CONFIG_USBDEV=y
+CONFIG_USBDEV_DMA=y
+CONFIG_USBDEV_DUALSPEED=y
+CONFIG_USBDEV_TRACE=y
+CONFIG_USBDEV_TRACE_NRECORDS=512
+CONFIG_USBHOST_HIDKBD=y
+CONFIG_USBHOST_MSC=y
+CONFIG_USER_ENTRYPOINT="nsh_main"
diff --git a/boards/arm/sama5/giant-board/helpers/netusb-up.sh b/boards/arm/sama5/giant-board/helpers/netusb-up.sh
new file mode 100755
index 0000000..28bb698
--- /dev/null
+++ b/boards/arm/sama5/giant-board/helpers/netusb-up.sh
@@ -0,0 +1,57 @@
+#!/bin/bash
+############################################################################
+# boards/arm/sama5/giant-board/helpers/netusb-up.sh
+#
+#  Licensed to the Apache Software Foundation (ASF) under one or more
+#  contributor license agreements.  See the NOTICE file distributed with
+#  this work for additional information regarding copyright ownership.  The
+#  ASF licenses this file to you under the Apache License, Version 2.0 (the
+#  "License"); you may not use this file except in compliance with the
+#  License.  You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+#  License for the specific language governing permissions and limitations
+#  under the License.
+#
+############################################################################/
+
+set -x
+
+# This script can be used to set up the USB Ethernet Gadget interfaces
+# on Linux. Tested on Ubuntu 19.10, kernel 5.3.0-24-generic
+#
+# You may have to change the IF_HOST variable to match your network interface.
+
+# USB Ethernet Gadget interface
+IF_USB=usb0
+# external interface
+IF_HOST=wlp0s20f3
+
+IP_NET="10.0.0.0/24"
+IP_NETMASK="255.255.255.0"
+IP_BROADCAST="10.0.0.255"
+IP_HOST="10.0.0.1"
+IP_NUTTX="10.0.0.2"
+
+sudo ifconfig $IF_USB up
+ifconfig -a
+sudo ifconfig $IF_USB add $IP_HOST
+sudo ifconfig $IF_USB:0 broadcast $IP_BROADCAST netmask $IP_NETMASK
+sudo ip route delete $IP_NET
+ip route add $IP_NET dev $IF_USB src $IP_HOST
+sudo ip route add $IP_NET dev $IF_USB src $IP_HOST
+sudo ip route add $IP_NUTTX/32 dev ens35u2 src $IP_HOST
+
+# nat to allow NuttX to access the internet
+sudo iptables -t nat -A POSTROUTING -o $IF_HOST -j MASQUERADE
+sudo iptables -A FORWARD -i $IF_HOST -o $IF_USB -m state --state RELATED,ESTABLISHED -j ACCEPT
+sudo iptables -A FORWARD -i $IF_USB -o $IF_HOST -j ACCEPT
+
+ip route show
+
+# pinging the nuttx system should work now
+ping -c 1 $IP_NUTTX
diff --git a/boards/arm/sama5/giant-board/include/.gitignore b/boards/arm/sama5/giant-board/include/.gitignore
new file mode 100644
index 0000000..c8c7108
--- /dev/null
+++ b/boards/arm/sama5/giant-board/include/.gitignore
@@ -0,0 +1 @@
+/boot_romfsimg.h
diff --git a/boards/arm/sama5/giant-board/include/board.h b/boards/arm/sama5/giant-board/include/board.h
new file mode 100644
index 0000000..a0d672b
--- /dev/null
+++ b/boards/arm/sama5/giant-board/include/board.h
@@ -0,0 +1,195 @@
+/****************************************************************************
+ * boards/arm/sama5/giant-board/include/board.h
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.  The
+ * ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the
+ * License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ ****************************************************************************/
+
+#ifndef __BOARDS_ARM_SAMA5_GIANT_BOARD_INCLUDE_BOARD_H
+#define __BOARDS_ARM_SAMA5_GIANT_BOARD_INCLUDE_BOARD_H
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#ifndef __ASSEMBLY__
+#  include <stdbool.h>
+#  include <nuttx/irq.h>
+#endif
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+/* Clocking *****************************************************************/
+
+/* After power-on reset, the SAMA5 device is running on a 12MHz internal RC.
+ * These definitions will configure operational clocking.
+ */
+
+/* On-board crystal frequencies */
+
+#define BOARD_MAINOSC_FREQUENCY    (24000000)  /* MAINOSC: 12MHz crystal on-board */
+#define BOARD_SLOWCLK_FREQUENCY    (32768)     /* Slow Clock: 32.768KHz */
+
+#if defined(CONFIG_SAMA5_BOOT_SDRAM)
+/* When booting from SDRAM, NuttX is loaded in SDRAM by an intermediate
+ * bootloader.
+ * That bootloader had to have already configured the PLL and SDRAM for
+ * proper operation.
+ *
+ * In this case, we do not reconfigure the clocking.
+ * Rather, we need to query the register settings to determine the clock
+ * frequencies.
+ * We can only assume that the Main clock source is the on-board 24MHz
+ * crystal.
+ */
+
+#  include <arch/board/board_sdram.h>
+
+#elif defined(CONFIG_GIANT_BOARD_492MHZ)
+
+/* This configuration results in a CPU clock of 492MHz.
+ *
+ * In this configuration, UPLL is the source of the UHPHS clock (if enabled).
+ */
+
+#  include <arch/board/board_492mhz.h>
+
+#endif
+
+/* LED definitions **********************************************************/
+
+/* There is a status LED on board the Giant Board.
+ *
+ *   ------------------------------ ------------------- ---------------------
+ *   SAMA5D27 PIO                   SIGNAL              USAGE
+ *   ------------------------------ ------------------- ---------------------
+ *   PA6                            STATUS_LED          Orange LED
+ *   ------------------------------ ------------------- ---------------------
+ */
+
+/* LED index values for use with board_userled() */
+
+#define BOARD_ORANGE      0
+#define BOARD_NLEDS       1
+
+/* LED bits for use with board_userled_all() */
+
+#define BOARD_ORANGE_BIT  (1 << BOARD_ORANGE)
+
+/* These LEDs are not used by the board port unless CONFIG_ARCH_LEDS is
+ * defined.  In that case, the usage by the board port is defined in
+ * include/board.h and src/sam_leds.c. The LEDs are used to encode OS-related
+ * events as follows.  Note that only the GREEN LED is used in this case
+ *
+ *      SYMBOL            Val    Meaning                   Green LED
+ *      ----------------- ---   -----------------------  -----------
+ */
+
+#define LED_STARTED       0  /* NuttX has been started     OFF       */
+#define LED_HEAPALLOCATE  0  /* Heap has been allocated    OFF       */
+#define LED_IRQSENABLED   0  /* Interrupts enabled         OFF       */
+#define LED_STACKCREATED  1  /* Idle stack created         ON        */
+#define LED_INIRQ         2  /* In an interrupt            N/C       */
+#define LED_SIGNAL        2  /* In a signal handler        N/C       */
+#define LED_ASSERTION     2  /* An assertion failed        N/C       */
+#define LED_PANIC         3  /* The system has crashed     Flash     */
+#undef  LED_IDLE             /* MCU is is sleep mode       Not used  */
+
+/* Thus if the Orange LED is statically on, NuttX has successfully  booted
+ * and is, apparently, running normally.
+ * If LED is flashing at approximately 2Hz, then a fatal error has been
+ * detected and the system has halted.
+ */
+
+/* Pin disambiguation *******************************************************/
+
+/* Alternative pin selections are provided with a numeric suffix like _1, _2,
+ * etc. Drivers, however, will use the pin selection without the numeric
+ * suffix.
+ * Additional definitions are required in this board.h file.
+ * For example, if we wanted the PCK0on PB26, then the following definition
+ * should appear in the board.h header file for that board:
+ *
+ *   #define PIO_PMC_PCK0 PIO_PMC_PCK0_1
+ *
+ * The PCK logic will then automatically configure PB26 as the PCK0 pin.
+ */
+
+/* UART1. There is a TTL serial connection available on
+ * pins RX and TX.  This is be driven by UART1.
+ *
+ *   ---- ------------------------ -------------
+ *   J1/2  SCHEMATIC                   SAMA5D2
+ *   PIN   NAME(s)                  PIO  FUNCTION
+ *   ---- ------------------------ -------------
+ *    14   UART1_RX                 PD3  UTXD1
+ *    15   UART1_TX                 PD2  URXD1
+ *   ---- ------------------------ -------------
+ */
+
+#define PIO_UART1_RXD     PIO_UART1_RXD_1
+#define PIO_UART1_TXD     PIO_UART1_TXD_1
+
+/* FLEXCOM4 is available as a UART.
+ *
+ *   ----- ------- -------------
+ *   J1/2  BOARD      SAMA5D2
+ *   PIN   NAME    PIO  FUNCTION
+ *   ----- ------- -------------
+ *    6    AD2     PD21 FLEXCOM4
+ *    9    AD3     PD22 FLEXCOM4
+ *   ----- ------- -------------
+ */
+
+#define PIO_FLEXCOM4_IO0  PIO_FLEXCOM4_IO0_2
+#define PIO_FLEXCOM4_IO1  PIO_FLEXCOM4_IO1_2
+
+/* PIO pins */
+
+#define PIO_TX      IO_
+
+/* SDIO - Used for both Port 0 & 1 ******************************************/
+
+/* 386 KHz for initial inquiry stuff */
+
+#define BOARD_SDMMC_IDMODE_PRESCALER    SDMMC_SYSCTL_SDCLKFS_DIV256
+#define BOARD_SDMMC_IDMODE_DIVISOR      SDMMC_SYSCTL_DVS_DIV(2)
+
+/* 24.8MHz for other modes */
+
+#define BOARD_SDMMC_MMCMODE_PRESCALER   SDMMC_SYSCTL_SDCLKFS_DIV8
+#define BOARD_SDMMC_MMCMODE_DIVISOR     SDMMC_SYSCTL_DVS_DIV(1)
+
+#define BOARD_SDMMC_SD1MODE_PRESCALER   SDMMC_SYSCTL_SDCLKFS_DIV8
+#define BOARD_SDMMC_SD1MODE_DIVISOR     SDMMC_SYSCTL_DVS_DIV(1)
+
+#define BOARD_SDMMC_SD4MODE_PRESCALER   SDMMC_SYSCTL_SDCLKFS_DIV8
+#define BOARD_SDMMC_SD4MODE_DIVISOR     SDMMC_SYSCTL_DVS_DIV(1)
+
+/****************************************************************************
+ * Assembly Language Macros
+ ****************************************************************************/
+
+#ifdef __ASSEMBLY__
+  .macro config_sdram
+  .endm
+#endif /* __ASSEMBLY__ */
+
+#endif /* __BOARDS_ARM_SAMA5_GIANT_BOARD_INCLUDE_BOARD_H */
diff --git a/boards/arm/sama5/giant-board/include/board_492mhz.h b/boards/arm/sama5/giant-board/include/board_492mhz.h
new file mode 100644
index 0000000..9e3068e
--- /dev/null
+++ b/boards/arm/sama5/giant-board/include/board_492mhz.h
@@ -0,0 +1,207 @@
+/****************************************************************************
+ * boards/arm/sama5/giant-board/include/board_492mhz.h
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.  The
+ * ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the
+ * License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ ****************************************************************************/
+
+#ifndef __BOARDS_ARM_SAMA5_GIANT_BOARD_INCLUDE_BOARD_492MHZ_H
+#define __BOARDS_ARM_SAMA5_GIANT_BOARD_INCLUDE_BOARD_492MHZ_H
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+/* Clocking *****************************************************************/
+
+/* After power-on reset, the SAMA5 device is running on a 12MHz internal RC.
+ * These definitions will configure operational clocking.
+ *
+ * This configuration results in a CPU clock of 492MHz:
+ *
+ * MAINOSC:  Frequency = 24MHz (crystal)
+ * PLLA: PLL Multiplier = 40+1 to generate PLLACK = 984MHz
+ * Master Clock (MCK): Source = PLLACK/1, Prescalar = 1, MDIV = 6 to generate
+ *     MCK      =  164MHz
+ *     CPU clock = 492MHz
+ */
+
+/* Main oscillator register settings.
+ *
+ *   The start up time should be should be:
+ *   Start Up Time = 8 * MOSCXTST / SLCK = 56 Slow Clock Cycles.
+ */
+
+#define BOARD_CKGR_MOR_MOSCXTST    (62 << PMC_CKGR_MOR_MOSCXTST_SHIFT) /* Start-up Time */
+#define BOARD_CKGR_PLLAR_COUNT     (63 << PMC_CKGR_PLLAR_COUNT_SHIFT)
+#define BOARD_CKGR_PLLAR_OUT       (0)
+#define BOARD_CKGR_PLLAR_MUL       (40 << PMC_CKGR_PLLAR_MUL_SHIFT)
+
+/* PMC master clock register settings.
+ *
+ *  Master/Processor Clock Source Selection = PLLA
+ *  Master/Processor Clock Prescaler        = 1
+ *  PLLA Divider                            = 1
+ *  Master Clock Division (MDIV)            = 6
+ *
+ *  NOTE: Bit PLLADIV2 must always be set to 1 when MDIV is set to 3.
+ *
+ *  Prescaler input                         = 984MHz / 1 = 984MHz
+ *  Prescaler output                        = 984MHz / 1 = 984MHz
+ *  Processor Clock (PCK)                   = 984Mhz / 2 = 492MHz
+ *  Master clock (MCK)                      = 984MHz / 6 = 164Mhz
+ */
+
+#define BOARD_PMC_MCKR_CSS         PMC_MCKR_CSS_PLLA
+#define BOARD_PMC_MCKR_PRES        PMC_MCKR_PRES_DIV1
+#define BOARD_PMC_MCKR_PLLADIV     PMC_MCKR_PLLADIV1
+#define BOARD_PMC_MCKR_MDIV        PMC_MCKR_MDIV_PCKDIV4
+
+/* ADC Configuration
+ *
+ * ADCClock = MCK / ((PRESCAL+1) * 2)
+ *
+ * Given:
+ *   MCK      = 164MHz
+ *   ADCClock = 8MHz
+ * Then:
+ *   PRESCAL  = 20.5
+ *
+ * PRESCAL=20 and MCK=164MHz yields ADC clock of 8.2MHz
+ */
+
+#define BOARD_ADC_PRESCAL          (20)
+#define BOARD_TSD_STARTUP          (40)        /* 40 nanoseconds */
+#define BOARD_TSD_TRACKTIM         (2000)      /* Min 1�s at 8MHz */
+#define BOARD_TSD_DEBOUNCE         (10000000)  /* 10 milliseconds (units nanoseconds) */
+
+/* Resulting frequencies */
+
+/* Giant Board
+ *
+ * Crystal frequency:       24 MHz
+ * CPU clock:              492 MHz
+ * Master clock:           164 MHz
+ */
+
+#define BOARD_MAINCK_FREQUENCY     BOARD_MAINOSC_FREQUENCY
+#define BOARD_PLLA_FREQUENCY       (984000000) /* PLLACK: 41 * 24Mhz / 1 */
+#define BOARD_PCK_FREQUENCY        (492000000) /* CPU:  PLLACK / 2 / 1  */
+#define BOARD_MCK_FREQUENCY        (164000000) /* MCK:  PLLACK / 1 / 1 / 3 */
+#define BOARD_ADCCLK_FREQUENCY     (10250000)  /* ADCCLK: MCK / ((7+1)*2) */
+
+/* Clocking to certain peripherals may be MCK/2.
+ *
+ * REVISIT:  I am not sure why this is.  Perhaps because of H32MXDIV?
+ */
+
+#define BOARD_PIT_FREQUENCY        (BOARD_MCK_FREQUENCY >> 1)
+#define BOARD_USART_FREQUENCY      (BOARD_MCK_FREQUENCY >> 1)
+#define BOARD_FLEXCOM_FREQUENCY    (BOARD_MCK_FREQUENCY >> 1)
+
+#if defined(CONFIG_SAMA5_EHCI) || defined(CONFIG_SAMA5_OHCI) || \
+    defined(CONFIG_SAMA5_UDPHS)
+
+/* The USB Host High Speed requires a 480 MHz clock (UPLLCK) for the embedded
+ * High-speed transceivers. UPLLCK is the output of the 480 MHz UTMI PLL
+ * (UPLL).  The source clock of the UTMI PLL is the Main OSC output:  Either
+ * the 12MHz internal RC oscillator on a an external 12MHz crystal.  The
+ * Main OSC must be 12MHz because the UPLL has a built-in 40x multiplier.
+ *
+ * For High-speed operations, the user has to perform the following:
+ *
+ *   1) Enable UHP peripheral clock, bit (1 << AT91C_ID_UHPHS) in
+ *      PMC_PCER register.
+ *   2) Write CKGR_PLLCOUNT field in PMC_UCKR register.
+ *   3) Enable UPLL, bit AT91C_CKGR_UPLLEN in PMC_UCKR register.
+ *   4) Wait until UTMI_PLL is locked. LOCKU bit in PMC_SR register
+ *   5) Enable BIAS, bit AT91C_CKGR_BIASEN in PMC_UCKR register.
+ *   6) Select UPLLCK as Input clock of OHCI part, USBS bit in PMC_USB
+ *      register.
+ *   7) Program the OHCI clocks (UHP48M and UHP12M) with USBDIV field in
+ *      PMC_USB register. USBDIV must be 9 (division by 10) if UPLLCK is
+ *      selected.
+ *   8) Enable OHCI clocks, UHP bit in PMC_SCER register.
+ *
+ * Steps 2 through 7 performed here.  1 and 8 are performed in the EHCI
+ * driver is initialized.
+ */
+
+#  define BOARD_USE_UPLL             1     /* Use UPLL for clock source */
+#  define BOARD_CKGR_UCKR_UPLLCOUNT  (15)  /* Maximum value */
+#  define BOARD_CKGR_UCKR_BIASCOUNT  (15)  /* Maximum value */
+#  define BOARD_UPLL_OHCI_DIV        (10)  /* Divide by 10 */
+#endif
+
+/* HSMCI clocking
+ *
+ * Multimedia Card Interface clock (MCCK or MCI_CK) is Master Clock (MCK)
+ * divided by (2*(CLKDIV) + CLOCKODD + 2).
+ *
+ *   MCI_SPEED = MCK / (2*CLKDIV + CLOCKODD + 2)
+ *
+ * Where CLKDIV has a range of 0-255.
+ */
+
+/* MCK = 132MHz, CLKDIV = 164,
+ * MCI_SPEED = 132MHz / (2*164 + 0 + 2) = 400 KHz
+ */
+
+#define SDMMC_INIT_CLKDIV          (164 << SDMMC_MR_CLKDIV_SHIFT)
+
+/* MCK = 132MHz, CLKDIV = 2 w/CLOCKODD,
+ * MCI_SPEED = 132MHz /(2*2 + 1 + 2) = 18.9 MHz
+ */
+
+#define SDMMC_MMCXFR_CLKDIV        ((2 << SDMMC_MR_CLKDIV_SHIFT) | SDMMC_MR_CLKODD)
+
+/* MCK = 132MHz, CLKDIV = 2, MCI_SPEED = 132MHz /(2*2 + 0 + 2) = 22 MHz */
+
+#define SDMMC_SDXFR_CLKDIV         (2 << SDMMC_MR_CLKDIV_SHIFT)
+#define SDMMC_SDWIDEXFR_CLKDIV     SDMMC_SDXFR_CLKDIV
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+#ifndef __ASSEMBLY__
+
+#undef EXTERN
+#if defined(__cplusplus)
+#define EXTERN extern "C"
+extern "C"
+{
+#else
+#define EXTERN extern
+#endif
+
+/****************************************************************************
+ * Public Function Prototypes
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* !__ASSEMBLY__ */
+#endif  /* __BOARDS_ARM_SAMA5_GIANT_BOARD_INCLUDE_BOARD_492MHZ_H */
diff --git a/boards/arm/sama5/giant-board/include/board_memorymap.h b/boards/arm/sama5/giant-board/include/board_memorymap.h
new file mode 100644
index 0000000..4ac8791
--- /dev/null
+++ b/boards/arm/sama5/giant-board/include/board_memorymap.h
@@ -0,0 +1,59 @@
+/****************************************************************************
+ * boards/arm/sama5/giant-board/include/board_memorymap.h
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.  The
+ * ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the
+ * License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ ****************************************************************************/
+
+#ifndef __BOARDS_ARM_SAMA5_GIANT_BOARD_INCLUDE_BOARD_MEMORYMAP_H
+#define __BOARDS_ARM_SAMA5_GIANT_BOARD_INCLUDE_BOARD_MEMORYMAP_H
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+#ifndef __ASSEMBLY__
+
+#undef EXTERN
+#if defined(__cplusplus)
+#define EXTERN extern "C"
+extern "C"
+{
+#else
+#define EXTERN extern
+#endif
+
+/****************************************************************************
+ * Public Function Prototypes
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* __ASSEMBLY__ */
+#endif /* __BOARDS_ARM_SAMA5_GIANT_BOARD_INCLUDE_BOARD_MEMORYMAP_H */
diff --git a/boards/arm/sama5/giant-board/include/board_sdram.h b/boards/arm/sama5/giant-board/include/board_sdram.h
new file mode 100644
index 0000000..c61bb5f
--- /dev/null
+++ b/boards/arm/sama5/giant-board/include/board_sdram.h
@@ -0,0 +1,167 @@
+/****************************************************************************
+ * boards/arm/sama5/giant-board/include/board_sdram.h
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.  The
+ * ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the
+ * License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ ****************************************************************************/
+
+#ifndef __BOARDS_ARM_SAMA5_GIANT_BOARD_INCLUDE_BOARD_SDRAM_H
+#define __BOARDS_ARM_SAMA5_GIANT_BOARD_INCLUDE_BOARD_SDRAM_H
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+#include "sam_pmc.h"
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+/* Clocking *****************************************************************/
+
+/* After power-on reset, the SAMA5 device is running on a 24MHz internal RC.
+ * When booting from SDRAM, NuttX is loaded in SDRAM by an intermediate
+ * bootloader.  That bootloader had to have already configured the PLL
+ * and SDRAM for proper operation.
+ *
+ * In this case, we do not reconfigure the clocking.
+ * Rather, we need to query the register settings to determine the clock
+ * frequencies.
+ * We can only assume that the Main clock source is the on-board 12MHz
+ * crystal.
+ */
+
+#define BOARD_MAINCK_FREQUENCY     BOARD_MAINOSC_FREQUENCY
+#define BOARD_PLLA_FREQUENCY       (sam_pllack_frequency(BOARD_MAINOSC_FREQUENCY))
+#define BOARD_PLLADIV2_FREQUENCY   (sam_plladiv2_frequency(BOARD_MAINOSC_FREQUENCY))
+#define BOARD_PCK_FREQUENCY        (sam_pck_frequency(BOARD_MAINOSC_FREQUENCY))
+#define BOARD_MCK_FREQUENCY        (sam_mck_frequency(BOARD_MAINOSC_FREQUENCY))
+
+/* Clocking to certain peripherals may be MCK/2.
+ *
+ * REVISIT:  I am not sure why this is.  Perhaps because of H32MXDIV?
+ */
+
+#define BOARD_PIT_FREQUENCY        (BOARD_MCK_FREQUENCY >> 1)
+#define BOARD_USART_FREQUENCY      (BOARD_MCK_FREQUENCY >> 1)
+#define BOARD_FLEXCOM_FREQUENCY    (BOARD_MCK_FREQUENCY >> 1)
+
+#if defined(CONFIG_SAMA5_EHCI) || defined(CONFIG_SAMA5_OHCI) || \
+    defined(CONFIG_SAMA5_UDPHS)
+
+/* The USB Host High Speed requires a 480 MHz clock (UPLLCK) for the embedded
+ * High-speed transceivers. UPLLCK is the output of the 480 MHz UTMI PLL
+ * (UPLL).  The source clock of the UTMI PLL is the Main OSC output:  Either
+ * the 12MHz internal RC oscillator on a an external 12MHz crystal.  The
+ * Main OSC must be 12MHz because the UPLL has a built-in 40x multiplier.
+ *
+ * For High-speed operations, the user has to perform the following:
+ *
+ *   1) Enable UHP peripheral clock, bit (1 << AT91C_ID_UHPHS) in
+ *      PMC_PCER register.
+ *   2) Write CKGR_PLLCOUNT field in PMC_UCKR register.
+ *   3) Enable UPLL, bit AT91C_CKGR_UPLLEN in PMC_UCKR register.
+ *   4) Wait until UTMI_PLL is locked. LOCKU bit in PMC_SR register
+ *   5) Enable BIAS, bit AT91C_CKGR_BIASEN in PMC_UCKR register.
+ *   6) Select UPLLCK as Input clock of OHCI part, USBS bit in PMC_USB
+ *      register.
+ *   7) Program the OHCI clocks (UHP48M and UHP12M) with USBDIV field in
+ *      PMC_USB register. USBDIV must be 9 (division by 10) if UPLLCK is
+ *      selected.
+ *   8) Enable OHCI clocks, UHP bit in PMC_SCER register.
+ *
+ * Steps 2 through 7 performed here.  1 and 8 are performed in the EHCI
+ * driver is initialized.
+ */
+
+#  define BOARD_USE_UPLL             1     /* Use UPLL for clock source */
+#  define BOARD_CKGR_UCKR_UPLLCOUNT  (15)  /* Maximum value */
+#  define BOARD_CKGR_UCKR_BIASCOUNT  (15)  /* Maximum value */
+#  define BOARD_UPLL_OHCI_DIV        (10)  /* Divide by 10 */
+#endif
+
+/* ADC Configuration
+ *
+ * ADCClock = MCK / ((PRESCAL+1) * 2)
+ * PRESCAL  = (MCK / (2 * ADCClock) - 1)
+ */
+
+#define BOARD_ADCCLK_FREQUENCY     (8000000)   /* ADCCLK:  MCK / ((7+1)*2) */
+#define BOARD_ADCCLK_FREQUENCY \
+  ((BOARD_PLLADIV2_FREQUENCY / (2 *BOARD_PLLADIV2_FREQUENCY)) - 1)
+
+#define BOARD_ADC_PRESCAL          (7)
+#define BOARD_TSD_STARTUP          (40)        /* 40 nanoseconds */
+#define BOARD_TSD_TRACKTIM         (2000)      /* Min 1�s at 8MHz */
+#define BOARD_TSD_DEBOUNCE         (10000000)  /* 10 milliseconds (units nanoseconds) */
+
+/* SDMMC clocking
+ *
+ * Multimedia Card Interface clock (MCCK or MCI_CK) is Master Clock (MCK)
+ * divided by (2*(CLKDIV) + CLOCKODD + 2).
+ *
+ *   CLKFULLDIV = 2*CLKDIV + CLOCKODD;
+ *   MCI_SPEED  = MCK / (CLKFULLDIV + 2)
+ *   CLKFULLDIV = MCK / MCI_SPEED - 2
+ *
+ *   CLKDIV     = CLKFULLDIV >> 1
+ *   CLOCKODD   = CLKFULLDIV & 1
+ *
+ * Where CLKDIV has a range of 0-255.
+ */
+
+/* Initial clock: 400 KHz (target) */
+
+#define HSMCI_INIT_CLKDIV          sam_hsmci_clkdiv(400000)
+
+/* MMC transfer clock: 20 MHz (target) */
+
+#define HSMCI_MMCXFR_CLKDIV        sam_hsmci_clkdiv(20000000)
+
+/* SD transfer clock: 25 MHz (target) */
+
+#define HSMCI_SDXFR_CLKDIV         sam_hsmci_clkdiv(25000000)
+
+#define HSMCI_SDWIDEXFR_CLKDIV     HSMCI_SDXFR_CLKDIV
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+#ifndef __ASSEMBLY__
+
+#undef EXTERN
+#if defined(__cplusplus)
+#define EXTERN extern "C"
+extern "C"
+{
+#else
+#define EXTERN extern
+#endif
+
+/****************************************************************************
+ * Public Function Prototypes
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* !__ASSEMBLY__ */
+#endif /* __BOARDS_ARM_SAMA5_GIANT_BOARD_INCLUDE_BOARD_SDRAM_H */
diff --git a/boards/arm/sama5/giant-board/scripts/Make.defs b/boards/arm/sama5/giant-board/scripts/Make.defs
new file mode 100644
index 0000000..4e6817f
--- /dev/null
+++ b/boards/arm/sama5/giant-board/scripts/Make.defs
@@ -0,0 +1,88 @@
+############################################################################
+# boards/arm/sama5/giant-board/scripts/Make.defs
+#
+#  Licensed to the Apache Software Foundation (ASF) under one or more
+#  contributor license agreements.  See the NOTICE file distributed with
+#  this work for additional information regarding copyright ownership.  The
+#  ASF licenses this file to you under the Apache License, Version 2.0 (the
+#  "License"); you may not use this file except in compliance with the
+#  License.  You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+#  License for the specific language governing permissions and limitations
+#  under the License.
+#
+############################################################################/
+
+include $(TOPDIR)/.config
+include $(TOPDIR)/tools/Config.mk
+include $(TOPDIR)/arch/arm/src/armv7-a/Toolchain.defs
+
+ifeq ($(CONFIG_SAMA5_BOOT_ISRAM),y)
+  LDSCRIPT = isram.ld
+endif
+
+ifeq ($(CONFIG_SAMA5_BOOT_SDRAM),y)
+ifeq ($(CONFIG_SAMA5D2XULT_DRAM_BOOT),y)
+  LDSCRIPT = dramboot.ld
+else
+  LDSCRIPT = uboot.ld
+endif
+endif
+
+ifeq ($(CONFIG_CYGWIN_WINTOOL),y)
+  ARCHSCRIPT = -T "${shell cygpath -w $(BOARD_DIR)$(DELIM)scripts$(DELIM)$(LDSCRIPT)}"
+else
+  ARCHSCRIPT = -T$(BOARD_DIR)$(DELIM)scripts$(DELIM)$(LDSCRIPT)
+endif
+
+ifeq ($(CONFIG_DEBUG_SYMBOLS),y)
+  ARCHOPTIMIZATION = -g
+endif
+
+ifneq ($(CONFIG_DEBUG_NOOPT),y)
+  ARCHOPTIMIZATION += $(MAXOPTIMIZATION) -fno-strict-aliasing -fno-strength-reduce -fomit-frame-pointer
+endif
+
+ARCHCPUFLAGS = -mcpu=cortex-a5 -mfpu=vfpv4-d16
+ARCHCFLAGS = -fno-builtin
+ARCHCXXFLAGS = -fno-builtin -fno-exceptions -fcheck-new -fno-rtti
+ARCHWARNINGS = -Wall -Wstrict-prototypes -Wshadow -Wundef
+ARCHWARNINGSXX = -Wall -Wshadow -Wundef
+ARCHPICFLAGS = -fpic -msingle-pic-base -mpic-register=r10
+
+CFLAGS = $(ARCHCFLAGS) $(ARCHWARNINGS) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRAFLAGS) -pipe
+CPICFLAGS = $(ARCHPICFLAGS) $(CFLAGS)
+CXXFLAGS = $(ARCHCXXFLAGS) $(ARCHWARNINGSXX) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHXXINCLUDES) $(ARCHDEFINES) $(EXTRAFLAGS) -pipe
+CXXPICFLAGS = $(ARCHPICFLAGS) $(CXXFLAGS)
+CPPFLAGS = $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRAFLAGS)
+AFLAGS = $(CFLAGS) -D__ASSEMBLY__
+
+# NXFLAT module definitions
+
+NXFLATLDFLAGS1 = -r -d -warn-common
+NXFLATLDFLAGS2 = $(NXFLATLDFLAGS1) -T$(TOPDIR)$(DELIM)binfmt$(DELIM)libnxflat$(DELIM)gnu-nxflat-pcrel.ld -no-check-sections
+LDNXFLATFLAGS = -e main -s 2048
+
+# ELF module definitions
+
+CELFFLAGS = $(CFLAGS) -mlong-calls # --target1-abs
+CXXELFFLAGS = $(CXXFLAGS) -mlong-calls # --target1-abs
+
+LDELFFLAGS = -r -e main
+ifeq ($(CONFIG_CYGWIN_WINTOOL),y)
+  LDELFFLAGS += -T "${shell cygpath -w $(BOARD_DIR)$(DELIM)scripts$(DELIM)gnu-elf.ld}"
+else
+  LDELFFLAGS += -T $(BOARD_DIR)$(DELIM)scripts$(DELIM)gnu-elf.ld
+endif
+
+ifneq ($(CROSSDEV),arm-nuttx-elf-)
+  LDFLAGS += -nostartfiles -nodefaultlibs
+endif
+ifeq ($(CONFIG_DEBUG_SYMBOLS),y)
+  LDFLAGS += -g
+endif
diff --git a/boards/arm/sama5/giant-board/scripts/dramboot.ld b/boards/arm/sama5/giant-board/scripts/dramboot.ld
new file mode 100644
index 0000000..c37f48e
--- /dev/null
+++ b/boards/arm/sama5/giant-board/scripts/dramboot.ld
@@ -0,0 +1,123 @@
+/****************************************************************************
+ * boards/arm/sama5/giant-board/scripts/dramboot.ld
+ *
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.  The
+ *  ASF licenses this file to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance with the
+ *  License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ *  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ *  License for the specific language governing permissions and limitations
+ *  under the License.
+ *
+ ****************************************************************************/
+
+/* The SAMA5D27C-D1G has 128 KB of ISRAM beginning at virtual address 0x0020:0000.
+ * This memory configuration, however, loads into the 256MB SDRAM on board
+ * the SAMA5D27C-D1G which lies at 0x2000:0000.
+ *
+ * Vectors in low memory are assumed and 16KB of ISRAM is reserved at the
+ * high end of ISRAM for the page table.
+ */
+
+MEMORY
+{
+    isram (W!RX) : ORIGIN = 0x00200000, LENGTH = 128K - 16K
+    sdram (W!RX) : ORIGIN = 0x20000000, LENGTH = 128M
+}
+
+ENTRY(entry)
+ENTRY(_stext)
+
+SECTIONS
+{
+    .text :
+    {
+        _stext = ABSOLUTE(.);
+        *(.vectors)
+        *(.text .text.*)
+        *(.fixup)
+        *(.gnu.warning)
+        *(.rodata .rodata.*)
+        *(.gnu.linkonce.t.*)
+        *(.glue_7)
+        *(.glue_7t)
+        *(.got)
+        *(.gcc_except_table)
+        *(.gnu.linkonce.r.*)
+        *(.ARM.extab*)
+        *(.gnu.linkonce.armextab.*)
+        _etext = ABSOLUTE(.);
+    } > sdram
+
+    .init_section :
+    {
+        _sinit = ABSOLUTE(.);
+        *(.init_array .init_array.*)
+        _einit = ABSOLUTE(.);
+    } > sdram
+
+    .ARM.extab :
+    {
+        *(.ARM.extab*)
+    } > sdram
+
+    /* .ARM.exidx is sorted, so has to go in its own output section.  */
+
+    PROVIDE_HIDDEN (__exidx_start = .);
+    .ARM.exidx :
+    {
+        *(.ARM.exidx* .gnu.linkonce.armexidx.*)
+    } > sdram
+    PROVIDE_HIDDEN (__exidx_end = .);
+
+    .data :
+    {
+        _sdata = ABSOLUTE(.);
+        *(.data .data.*)
+        *(.gnu.linkonce.d.*)
+        CONSTRUCTORS
+        . = ALIGN(4);
+        _edata = ABSOLUTE(.);
+    } > sdram
+
+    .bss :
+    {
+        _sbss = ABSOLUTE(.);
+        *(.bss .bss.*)
+        *(.gnu.linkonce.b.*)
+        *(COMMON)
+        . = ALIGN(4);
+        _ebss = ABSOLUTE(.);
+    } > sdram
+
+    /* Uninitialized data */
+
+    .noinit :
+    {
+        _snoinit = ABSOLUTE(.);
+        *(.noinit*)
+        _enoinit = ABSOLUTE(.);
+    } > sdram
+
+    /* Stabs debugging sections. */
+
+    .stab 0 : { *(.stab) }
+    .stabstr 0 : { *(.stabstr) }
+    .stab.excl 0 : { *(.stab.excl) }
+    .stab.exclstr 0 : { *(.stab.exclstr) }
+    .stab.index 0 : { *(.stab.index) }
+    .stab.indexstr 0 : { *(.stab.indexstr) }
+    .comment 0 : { *(.comment) }
+    .debug_abbrev 0 : { *(.debug_abbrev) }
+    .debug_info 0 : { *(.debug_info) }
+    .debug_line 0 : { *(.debug_line) }
+    .debug_pubnames 0 : { *(.debug_pubnames) }
+    .debug_aranges 0 : { *(.debug_aranges) }
+}
diff --git a/boards/arm/sama5/giant-board/scripts/gnu-elf.ld b/boards/arm/sama5/giant-board/scripts/gnu-elf.ld
new file mode 100644
index 0000000..5732749
--- /dev/null
+++ b/boards/arm/sama5/giant-board/scripts/gnu-elf.ld
@@ -0,0 +1,124 @@
+/****************************************************************************
+ * boards/arm/sama5/giant-board/scripts/gnu-elf.ld
+ *
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.  The
+ *  ASF licenses this file to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance with the
+ *  License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ *  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ *  License for the specific language governing permissions and limitations
+ *  under the License.
+ *
+ ****************************************************************************/
+
+SECTIONS
+{
+  .text 0x00000000 :
+    {
+      _stext = . ;
+      *(.text)
+      *(.text.*)
+      *(.gnu.warning)
+      *(.stub)
+      *(.glue_7)
+      *(.glue_7t)
+      *(.jcr)
+
+      /* C++ support:  The .init and .fini sections contain specific logic
+       * to manage static constructors and destructors.
+       */
+
+      *(.gnu.linkonce.t.*)
+      *(.init)             /* Old ABI */
+      *(.fini)             /* Old ABI */
+      _etext = . ;
+    }
+
+  .rodata :
+    {
+      _srodata = . ;
+      *(.rodata)
+      *(.rodata1)
+      *(.rodata.*)
+      *(.gnu.linkonce.r*)
+      _erodata = . ;
+    }
+
+  .data :
+    {
+      _sdata = . ;
+      *(.data)
+      *(.data1)
+      *(.data.*)
+      *(.gnu.linkonce.d*)
+        . = ALIGN(4);
+      _edata = . ;
+    }
+
+  /* Uninitialized data */
+
+  .noinit :
+    {
+      _snoinit = . ;
+      *(.noinit*)
+      _enoinit = . ;
+    }
+
+  /* C++ support. For each global and static local C++ object,
+   * GCC creates a small subroutine to construct the object. Pointers
+   * to these routines (not the routines themselves) are stored as
+   * simple, linear arrays in the .ctors section of the object file.
+   * Similarly, pointers to global/static destructor routines are
+   * stored in .dtors.
+   */
+
+  .ctors :
+    {
+      _sctors = . ;
+      *(.ctors)       /* Old ABI:  Unallocated */
+      *(.init_array)  /* New ABI:  Allocated */
+      _edtors = . ;
+    }
+
+  .dtors :
+    {
+      _sdtors = . ;
+      *(.dtors)       /* Old ABI:  Unallocated */
+      *(.fini_array)  /* New ABI:  Allocated */
+      _edtors = . ;
+    }
+
+  .bss :
+    {
+      _sbss = . ;
+      *(.bss)
+      *(.bss.*)
+      *(.sbss)
+      *(.sbss.*)
+      *(.gnu.linkonce.b*)
+      *(COMMON)
+      _ebss = . ;
+    }
+
+    /* Stabs debugging sections.    */
+
+    .stab 0 : { *(.stab) }
+    .stabstr 0 : { *(.stabstr) }
+    .stab.excl 0 : { *(.stab.excl) }
+    .stab.exclstr 0 : { *(.stab.exclstr) }
+    .stab.index 0 : { *(.stab.index) }
+    .stab.indexstr 0 : { *(.stab.indexstr) }
+    .comment 0 : { *(.comment) }
+    .debug_abbrev 0 : { *(.debug_abbrev) }
+    .debug_info 0 : { *(.debug_info) }
+    .debug_line 0 : { *(.debug_line) }
+    .debug_pubnames 0 : { *(.debug_pubnames) }
+    .debug_aranges 0 : { *(.debug_aranges) }
+}
diff --git a/boards/arm/sama5/giant-board/scripts/isram.ld b/boards/arm/sama5/giant-board/scripts/isram.ld
new file mode 100644
index 0000000..bb3e2dd
--- /dev/null
+++ b/boards/arm/sama5/giant-board/scripts/isram.ld
@@ -0,0 +1,119 @@
+/****************************************************************************
+ * boards/arm/sama5/giant-board/scripts/isram.ld
+ *
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.  The
+ *  ASF licenses this file to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance with the
+ *  License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ *  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ *  License for the specific language governing permissions and limitations
+ *  under the License.
+ *
+ ****************************************************************************/
+
+/* The SAMA5D27C-D1G has 128 KB of ISRAM beginning at virtual address 0x0020:0000.
+ *
+ * Vectors in low memory are assumed and 16KB of ISRAM is reserved at the
+ * high end of ISRAM for the page table.
+ */
+
+MEMORY
+{
+    isram (W!RX) : ORIGIN = 0x00200000, LENGTH = 128K - 16K
+}
+
+ENTRY(entry)
+ENTRY(_stext)
+
+SECTIONS
+{
+    .text :
+    {
+        _stext = ABSOLUTE(.);
+        *(.vectors)
+        *(.text .text.*)
+        *(.fixup)
+        *(.gnu.warning)
+        *(.rodata .rodata.*)
+        *(.gnu.linkonce.t.*)
+        *(.glue_7)
+        *(.glue_7t)
+        *(.got)
+        *(.gcc_except_table)
+        *(.gnu.linkonce.r.*)
+        *(.ARM.extab*)
+        *(.gnu.linkonce.armextab.*)
+        _etext = ABSOLUTE(.);
+    } > isram
+
+    .init_section :
+    {
+        _sinit = ABSOLUTE(.);
+        *(.init_array .init_array.*)
+        _einit = ABSOLUTE(.);
+    } > isram
+
+    .ARM.extab : {
+        *(.ARM.extab*)
+    } > isram
+
+    /* .ARM.exidx is sorted, so has to go in its own output section.  */
+
+    PROVIDE_HIDDEN (__exidx_start = .);
+    .ARM.exidx :
+    {
+        *(.ARM.exidx* .gnu.linkonce.armexidx.*)
+    } > isram
+    PROVIDE_HIDDEN (__exidx_end = .);
+
+    .data :
+    {
+        _sdata = ABSOLUTE(.);
+        *(.data .data.*)
+        *(.gnu.linkonce.d.*)
+        CONSTRUCTORS
+        . = ALIGN(4);
+        _edata = ABSOLUTE(.);
+    } > isram
+
+    .bss :
+    {
+        _sbss = ABSOLUTE(.);
+        *(.bss .bss.*)
+        *(.gnu.linkonce.b.*)
+        *(COMMON)
+        . = ALIGN(4);
+        _ebss = ABSOLUTE(.);
+    } > isram
+
+    /* Uninitialized data */
+
+    .noinit :
+    {
+        _snoinit = ABSOLUTE(.);
+        *(.noinit*)
+        _enoinit = ABSOLUTE(.);
+    } > isram
+
+    /* Stabs debugging sections. */
+
+    .stab 0 : { *(.stab) }
+    .stabstr 0 : { *(.stabstr) }
+    .stab.excl 0 : { *(.stab.excl) }
+    .stab.exclstr 0 : { *(.stab.exclstr) }
+    .stab.index 0 : { *(.stab.index) }
+    .stab.indexstr 0 : { *(.stab.indexstr) }
+    .comment 0 : { *(.comment) }
+    .debug_abbrev 0 : { *(.debug_abbrev) }
+    .debug_info 0 : { *(.debug_info) }
+    .debug_line 0 : { *(.debug_line) }
+    .debug_pubnames 0 : { *(.debug_pubnames) }
+    .debug_aranges 0 : { *(.debug_aranges) }
+}
diff --git a/boards/arm/sama5/giant-board/scripts/uboot.ld b/boards/arm/sama5/giant-board/scripts/uboot.ld
new file mode 100644
index 0000000..e661748
--- /dev/null
+++ b/boards/arm/sama5/giant-board/scripts/uboot.ld
@@ -0,0 +1,124 @@
+/****************************************************************************
+ * boards/arm/sama5/giant-board/scripts/uboot.ld
+ *
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.  The
+ *  ASF licenses this file to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance with the
+ *  License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ *  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ *  License for the specific language governing permissions and limitations
+ *  under the License.
+ *
+ ****************************************************************************/
+
+/* The SAMA5D27C-D1G has 128 KB of ISRAM beginning at virtual address 0x0020:0000.
+ * This memory configuration, however, loads into the 256MB SDRAM on board
+ * the SAMA5D27C-D1G which lies at 0x2000:0000.  An offset 0x00008000 is
+ * reserved for used by the U-boot bootloader.
+ *
+ * Vectors in low memory are assumed and 16KB of ISRAM is reserved at the
+ * high end of ISRAM for the page table.
+ */
+
+MEMORY
+{
+    isram (W!RX) : ORIGIN = 0x00200000, LENGTH = 128K - 16K
+    sdram (W!RX) : ORIGIN = 0x20008000, LENGTH = 128M - 32K
+}
+
+ENTRY(entry)
+ENTRY(_stext)
+
+SECTIONS
+{
+    .text :
+    {
+        _stext = ABSOLUTE(.);
+        *(.vectors)
+        *(.text .text.*)
+        *(.fixup)
+        *(.gnu.warning)
+        *(.rodata .rodata.*)
+        *(.gnu.linkonce.t.*)
+        *(.glue_7)
+        *(.glue_7t)
+        *(.got)
+        *(.gcc_except_table)
+        *(.gnu.linkonce.r.*)
+        *(.ARM.extab*)
+        *(.gnu.linkonce.armextab.*)
+        _etext = ABSOLUTE(.);
+    } > sdram
+
+    .init_section :
+    {
+        _sinit = ABSOLUTE(.);
+        *(.init_array .init_array.*)
+        _einit = ABSOLUTE(.);
+    } > sdram
+
+    .ARM.extab :
+    {
+        *(.ARM.extab*)
+    } > sdram
+
+    /* .ARM.exidx is sorted, so has to go in its own output section.  */
+
+    PROVIDE_HIDDEN (__exidx_start = .);
+    .ARM.exidx :
+    {
+        *(.ARM.exidx* .gnu.linkonce.armexidx.*)
+    } > sdram
+    PROVIDE_HIDDEN (__exidx_end = .);
+
+    .data :
+    {
+        _sdata = ABSOLUTE(.);
+        *(.data .data.*)
+        *(.gnu.linkonce.d.*)
+        CONSTRUCTORS
+        . = ALIGN(4);
+        _edata = ABSOLUTE(.);
+    } > sdram
+
+    .bss :
+    {
+        _sbss = ABSOLUTE(.);
+        *(.bss .bss.*)
+        *(.gnu.linkonce.b.*)
+        *(COMMON)
+        . = ALIGN(4);
+        _ebss = ABSOLUTE(.);
+    } > sdram
+
+    /* Uninitialized data */
+
+    .noinit :
+    {
+        _snoinit = ABSOLUTE(.);
+        *(.noinit*)
+        _enoinit = ABSOLUTE(.);
+    } > sdram
+
+    /* Stabs debugging sections. */
+
+    .stab 0 : { *(.stab) }
+    .stabstr 0 : { *(.stabstr) }
+    .stab.excl 0 : { *(.stab.excl) }
+    .stab.exclstr 0 : { *(.stab.exclstr) }
+    .stab.index 0 : { *(.stab.index) }
+    .stab.indexstr 0 : { *(.stab.indexstr) }
+    .comment 0 : { *(.comment) }
+    .debug_abbrev 0 : { *(.debug_abbrev) }
+    .debug_info 0 : { *(.debug_info) }
+    .debug_line 0 : { *(.debug_line) }
+    .debug_pubnames 0 : { *(.debug_pubnames) }
+    .debug_aranges 0 : { *(.debug_aranges) }
+}
diff --git a/boards/arm/sama5/giant-board/src/Makefile b/boards/arm/sama5/giant-board/src/Makefile
new file mode 100644
index 0000000..306635a
--- /dev/null
+++ b/boards/arm/sama5/giant-board/src/Makefile
@@ -0,0 +1,105 @@
+############################################################################
+# boards/arm/sama5/giant-board/src/Makefile
+#
+#  Licensed to the Apache Software Foundation (ASF) under one or more
+#  contributor license agreements.  See the NOTICE file distributed with
+#  this work for additional information regarding copyright ownership.  The
+#  ASF licenses this file to you under the Apache License, Version 2.0 (the
+#  "License"); you may not use this file except in compliance with the
+#  License.  You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+#  License for the specific language governing permissions and limitations
+#  under the License.
+#
+############################################################################/
+
+include $(TOPDIR)/Make.defs
+
+CSRCS = sam_boot.c
+
+ifeq ($(CONFIG_SAMA5_SPI0),y)
+CSRCS += sam_spi.c
+else
+ifeq ($(CONFIG_SAMA5_SPI1),y)
+CSRCS += sam_spi.c
+endif
+endif
+
+ifeq ($(CONFIG_SAMA5_DDRCS),y)
+CSRCS += sam_sdram.c
+endif
+
+ifeq ($(CONFIG_SAMA5_SDMMC0),y)
+CSRCS += sam_sdmmc.c
+else
+ifeq ($(CONFIG_SAMA5_SDMMC1),y)
+CSRCS += sam_sdmmc.c
+endif
+
+endif
+ifeq ($(CONFIG_SAMA5_HSMCI0),y)
+CSRCS += sam_hsmci.c
+else
+ifeq ($(CONFIG_SAMA5_HSMCI1),y)
+CSRCS += sam_hsmci.c
+endif
+endif
+
+ifeq ($(CONFIG_SAMA5_UHPHS),y)
+CSRCS += sam_usb.c
+else
+ifeq ($(CONFIG_SAMA5_UDPHS),y)
+CSRCS += sam_usb.c
+endif
+endif
+
+ifeq ($(CONFIG_LIB_BOARDCTL),y)
+CSRCS += sam_appinit.c
+CSRCS += sam_bringup.c
+endif
+
+ifeq ($(CONFIG_ADC),y)
+CSRCS += sam_adc.c
+ifeq ($(CONFIG_AJOYSTICK),y)
+CSRCS += sam_ajoystick.c
+endif
+endif
+
+ifeq ($(CONFIG_PWM),y)
+CSRCS += sam_pwm.c
+endif
+
+ifeq ($(CONFIG_AUDIO_I2SCHAR),y)
+ifeq ($(CONFIG_SAMA5_SSC0),y)
+CSRCS += sam_i2schar.c
+else
+ifeq ($(CONFIG_SAMA5_SSC1),y)
+CSRCS += sam_i2schar.c
+endif
+endif
+endif
+
+ifeq ($(CONFIG_USBMSC),y)
+CSRCS += sam_usbmsc.c
+endif
+
+ifeq ($(CONFIG_ARCH_FPU),y)
+CSRCS += sam_ostest.c
+endif
+
+ifeq ($(CONFIG_ARCH_LEDS),y)
+CSRCS += sam_autoleds.c
+else
+CSRCS += sam_userleds.c
+endif
+
+ifeq ($(CONFIG_BOARDCTL_RESET),y)
+CSRCS += sam_reset.c
+endif
+
+include $(TOPDIR)/boards/Board.mk
diff --git a/boards/arm/sama5/giant-board/src/giant-board.h b/boards/arm/sama5/giant-board/src/giant-board.h
new file mode 100644
index 0000000..e43c238
--- /dev/null
+++ b/boards/arm/sama5/giant-board/src/giant-board.h
@@ -0,0 +1,436 @@
+/****************************************************************************
+ *  boards/arm/sama5/giant-board/src/giant-board.h
+ *
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.  The
+ *  ASF licenses this file to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance with the
+ *  License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ *  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ *  License for the specific language governing permissions and limitations
+ *  under the License.
+ *
+ ****************************************************************************/
+
+#ifndef __BOARDS_ARM_SAMA5_GIANT_BOARD_SRC_GIANT_BOARD_H
+#define __BOARDS_ARM_SAMA5_GIANT_BOARD_SRC_GIANT_BOARD_H
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+#include <nuttx/compiler.h>
+
+#include <stdint.h>
+#include <stdbool.h>
+
+#include <arch/irq.h>
+#include <nuttx/irq.h>
+
+#include "hardware/sam_pinmap.h"
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+/* Configuration ************************************************************/
+
+#define HAVE_SDMMC      1
+#define HAVE_USBHOST    1
+#define HAVE_USBDEV     1
+#define HAVE_USBMONITOR 1
+#define HAVE_NETWORK    1
+
+/* SDMMC */
+
+/* Can't support MMC/SD if the card interface(s) are not enable */
+
+#if !defined(CONFIG_SAMA5_SDMMC) && !defined(CONFIG_SAMA5_SDMMC0)
+#  undef HAVE_SDMMC
+#endif
+
+/* Can't support MMC/SD features if mountpoints are disabled */
+
+#if defined(HAVE_SDMMC) && defined(CONFIG_DISABLE_MOUNTPOINT)
+#  warning Mountpoints disabled.  No MMC/SD support
+#  undef HAVE_SDMCC
+#endif
+
+/* We need PIO interrupts on PIOD to support card detect interrupts */
+
+#if defined(HAVE_SDMMC) && !defined(CONFIG_SAMA5_PIOA_IRQ)
+#  warning PIOA interrupts not enabled.  No MMC/SD support.
+#  undef HAVE_SDMMC
+#endif
+
+/* MMC/SD minor numbers:  The NSH device minor extended is extended to
+ * support two devices.  If CONFIG_NSH_MMCSDMINOR is zero, these will be:
+ * /dev/mmcsd0 and /dev/mmcsd1.
+ */
+
+#ifndef CONFIG_NSH_MMCSDMINOR
+#  define CONFIG_NSH_MMCSDMINOR 0
+#endif
+
+#ifdef HAVE_SDMMC
+
+#  if ( defined(CONFIG_SAMA5_SDMMC0) && defined(CONFIG_SAMA5_SDMMC1) )
+#    define SDMMC0_SLOTNO 0
+#    define SDMMC1_SLOTNO 1
+#  else
+#    if ( defined(CONFIG_SAMA5_SDMMC0) )
+#      define SDMMC0_SLOTNO 0
+#    endif
+#    if ( defined(CONFIG_SAMA5_SDMMC1) )
+#      define SDMMC1_SLOTNO 0
+#    endif
+#  endif
+
+#  ifdef CONFIG_SAMA5_SDMMC0
+#     define SDMMC0_MINOR  CONFIG_NSH_MMCSDMINOR
+#     define SDMMC1_MINOR  (CONFIG_NSH_MMCSDMINOR+1)
+#  else
+#     define SDMMC1_MINOR  CONFIG_NSH_MMCSDMINOR
+#  endif
+#else
+#endif
+
+/* USB Host / USB Device */
+
+/* Either CONFIG_SAMA5_UHPHS or CONFIG_SAMA5_UDPHS must be defined,
+ * or there is no USB of any kind.
+ */
+
+#if !defined(CONFIG_SAMA5_UHPHS)
+#  undef CONFIG_SAMA5_OHCI
+#  undef CONFIG_SAMA5_EHCI
+#endif
+
+#if !defined(CONFIG_SAMA5_UDPHS)
+#  undef HAVE_USBDEV
+#endif
+
+/* CONFIG_USBDEV and CONFIG_USBHOST must also be defined */
+
+#if !defined(CONFIG_USBDEV)
+#  undef HAVE_USBDEV
+#endif
+
+#if defined(CONFIG_USBHOST)
+#  if !defined(CONFIG_SAMA5_OHCI) && !defined(CONFIG_SAMA5_EHCI)
+#    warning CONFIG_USBHOST is defined, but neither CONFIG_SAMA5_OHCI nor CONFIG_SAMA5_EHCI are defined
+#  endif
+#else
+#  undef CONFIG_SAMA5_OHCI
+#  undef CONFIG_SAMA5_EHCI
+#endif
+
+#if !defined(CONFIG_SAMA5_OHCI) && !defined(CONFIG_SAMA5_EHCI)
+#  undef HAVE_USBHOST
+#endif
+
+/* Check if we should enable the USB monitor before starting NSH */
+
+#ifndef CONFIG_USBMONITOR
+#  undef HAVE_USBMONITOR
+#endif
+
+#ifndef HAVE_USBDEV
+#  undef CONFIG_USBDEV_TRACE
+#endif
+
+#ifndef HAVE_USBHOST
+#  undef CONFIG_USBHOST_TRACE
+#endif
+
+#if !defined(CONFIG_USBDEV_TRACE) && !defined(CONFIG_USBHOST_TRACE)
+#  undef HAVE_USBMONITOR
+#endif
+
+/* Networking */
+
+#if !defined(CONFIG_NET)
+#  undef HAVE_NETWORK
+#endif
+
+/* procfs File System */
+
+#ifdef CONFIG_FS_PROCFS
+#  ifdef CONFIG_NSH_PROC_MOUNTPOINT
+#    define SAMA5_PROCFS_MOUNTPOINT CONFIG_NSH_PROC_MOUNTPOINT
+#  else
+#    define SAMA5_PROCFS_MOUNTPOINT "/proc"
+#  endif
+#endif
+
+/* Giant Board pinout
+ *
+ * Orientation is on pinout diagram, USB connector up.
+ * https://groboards.com/giant-board/
+ *
+ * The Giant Board doesn't have pin numbers, instead the pins are labeled
+ * with the first function in this list. (AD4, AD2, etc.)
+ *
+ * J1 - left pins
+ *
+ * Reset
+ * 3.3V
+ * VREF
+ * GND
+ * AD4 / PD23
+ * AD2 / PD21
+ * AD1 / PD20
+ * AD5 / PD24
+ * AD3 / PD22
+ * AD0 / PD19
+ * SCK / PA14
+ * MOSI / PA15
+ * MISO / PA16
+ * RX / PD2
+ * TX / PD3
+ * GND
+ *
+ * J2 - right pins
+ *
+ * VBAT
+ * EN
+ * VBUS
+ * PD13
+ * PD31
+ * PWM1 / PB0
+ * PWM3 / PB7
+ * PWML1 / PB1
+ * PWM2 / PB5
+ * PB3 / PWMEXTRG
+ * SCL / PC0
+ * SDA / PB31
+ *
+ */
+
+/* J1 - left pins */
+
+#define GB_PIO_AD4          PIO_ADC_AD4         /* AD4 / PD23 */
+#define GB_PIO_PD23         PIO_ADC_AD4         /* AD4 / PD23 */
+
+#define GB_PIO_AD2          PIO_ADC_AD2         /* AD2 / PD21 */
+#define GB_PIO_PD21         PIO_ADC_AD2         /* AD2 / PD21 */
+
+#define GB_PIO_AD1          PIO_ADC_AD1         /* AD1 / PD20 */
+#define GB_PIO_PD20         PIO_ADC_AD1         /* AD1 / PD20 */
+
+#define GB_PIO_AD5          PIO_ADC_AD5         /* AD5 / PD24 */
+#define GB_PIO_PD24         PIO_ADC_AD5         /* AD5 / PD24 */
+
+#define GB_PIO_AD3          PIO_ADC_AD3         /* AD3 / PD22 */
+#define GB_PIO_PD22         PIO_ADC_AD3         /* AD3 / PD22 */
+
+#define GB_PIO_AD0          PIO_ADC_AD0         /* AD0 / PD19 */
+#define GB_PIO_PD19         PIO_ADC_AD0         /* AD0 / PD19 */
+
+#define GB_PIO_SCK          PIO_SPI0_SPCK_1     /* SCK / PA14 */
+#define GB_PIO_PA14         PIO_SPI0_SPCK_1     /* SCK / PA14 */
+
+#define GB_PIO_MOSI         PIO_SPI0_MOSI_1     /* MOSI / PA15 */
+#define GB_PIO_PA15         PIO_SPI0_MOSI_1     /* MOSI / PA15 */
+
+#define GB_PIO_MISO         PIO_SPI0_MISO_1     /* MISO / PA16 */
+#define GB_PIO_PA16         PIO_SPI0_MISO_1     /* MISO / PA16 */
+
+#define GB_PIO_RX           PIO_UART0_TXD       /* RX / PD2 */
+#define GB_PIO_PD2          PIO_UART0_TXD       /* RX / PD2 */
+
+#define GB_PIO_TX           PIO_UART0_RXD       /* TX / PD3 */
+#define GB_PIO_PD3          PIO_UART0_RXD       /* TX / PD3 */
+
+/* J2 - right pins */
+
+#define GB_PIO_PD13         PIO_TC1_CLK_2       /* PD13 */
+
+#define GB_PIO_PD31         PIO_TC3_CLK_3       /* PD31 */
+
+#define GB_PIO_PWM1         PIO_PWM0_H1         /* PWM1 / PB0 */
+#define GB_PIO_PB0          PIO_PWM0_H1         /* PWM1 / PB0 */
+
+#define GB_PIO_PWM3         PIO_PWM0_H3         /* PWM3 / PB7 */
+#define GB_PIO_PB7          PIO_PWM0_H3         /* PWM3 / PB7 */
+
+#define GB_PIO_PWML1        PIO_PWM0_L1         /* PWML1 / PB1 */
+#define GB_PIO_PB1          PIO_PWM0_L1         /* PWML1 / PB1 */
+
+#define GB_PIO_PWM2         PIO_PWM0_H2         /* PWM2 / PB5 */
+#define GB_PIO_PB5          PIO_PWM0_H2         /* PWM2 / PB5 */
+
+#define GB_PIO_PB3          PIO_PWM0_EXTRG0     /* PB3 / PWMEXTRG */
+#define GB_PIO_PWMEXTRG     PIO_PWM0_EXTRG0     /* PB3 / PWMEXTRG */
+
+#define GB_PIO_SCL          PIO_TWI0_CK_2       /* SCL / PC0 */
+#define GB_PIO_PC0          PIO_TWI0_CK_2       /* SCL / PC0 */
+
+#define GB_PIO_SDA          PIO_TWI0_D_2        /* SDA / PB31 */
+#define GB_PIO_PB31         PIO_TWI0_D_2        /* SDA / PB31 */
+
+/* LEDs *********************************************************************/
+
+/* There is an orange status LED on board the Giant Board
+ * driven by pin (PA6).
+ *
+ *   ------------------------------ ------------------- ---------------------
+ *   SAMA5D2 PIO                    SIGNAL              USAGE
+ *   ------------------------------ ------------------- ---------------------
+ *   PA6                            STATUS_LED          Orange LED
+ *   ------------------------------ ------------------- ---------------------
+ */
+
+#define PIO_LED_ORANGE (PIO_OUTPUT | PIO_CFG_DEFAULT | PIO_OUTPUT_SET | \
+                       PIO_PORT_PIOA | PIO_PIN6)
+
+/* SDMMC clocking
+ *
+ * Multimedia Card Interface clock (MCCK or MCI_CK) is Master Clock (MCK)
+ * divided by (2*(CLKDIV+1)).
+ *
+ *   MCI_SPEED = MCK / (2*(CLKDIV+1))
+ *   CLKDIV = MCI / MCI_SPEED / 2 - 1
+ *
+ * Where CLKDIV has a range of 0-255.
+ */
+
+/* MCK = 96MHz, CLKDIV = 119, MCI_SPEED = 96MHz / 2 * (119+1) = 400 KHz */
+
+#define SDMMC_INIT_CLKDIV          (119 << SDMMC_MR_CLKDIV_SHIFT)
+
+/* MCK = 96MHz, CLKDIV = 3, MCI_SPEED = 96MHz / 2 * (3+1) = 12 MHz */
+
+#define SDMMC_MMCXFR_CLKDIV        (3 << SDMMC_MR_CLKDIV_SHIFT)
+
+/* MCK = 96MHz, CLKDIV = 1, MCI_SPEED = 96MHz / 2 * (1+1) = 24 MHz */
+
+#define SDMMC_SDXFR_CLKDIV         (1 << SDMMC_MR_CLKDIV_SHIFT)
+#define SDMMC_SDWIDEXFR_CLKDIV     SDMMC_SDXFR_CLKDIV
+
+/* SDMMC Card Slots *********************************************************/
+
+/* The Giant Board provides a SD memory card slot:
+ *  a full size SD card slot (J6)
+ *
+ * The full size SD card slot connects via SDMMC1.  The card detect discrete
+ * is available on PA21 (pulled high) and shared with DAT3.  The write
+ * protect discrete is not connected and not available to software.  The
+ * slot only supports 4-bit wide transfer mode, and the NuttX driver
+ * currently uses only the 4-bit wide transfer mode.
+ *
+ *   PA18 SDMMC1_DAT0
+ *   PA19 SDMMC1_DAT1
+ *   PA20 SDMMC1_DAT2
+ *   PA21 SDMMC1_DAT3/SDMMC1_CD
+ *   PA22 SDMMC1_CK
+ *   PA28 SDMMC1_CMD
+ */
+
+#define IRQ_SDMMC1_CD   SAM_IRQ_PA30
+
+/* USB Ports ****************************************************************/
+
+/* The Giant Board features two USB communication ports:
+ *
+ *   1. Port A Host High Speed (EHCI) and Full Speed (OHCI) multiplexed with
+ *      USB Device High Speed Micro AB connector, J3
+ *
+ *   2. Port B Host High Speed (EHCI) and Full Speed (OHCI) High Speed Micro
+ *      AB connector, J7
+ *
+ */
+
+/****************************************************************************
+ * Public data
+ ****************************************************************************/
+
+#ifndef __ASSEMBLY__
+
+/****************************************************************************
+ * Public Function Prototypes
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: sam_bringup
+ *
+ * Description:
+ *   Bring up board features
+ *
+ ****************************************************************************/
+
+int sam_bringup(void);
+
+/****************************************************************************
+ * Name: sam_sdmmc_initialize
+ *
+ * Description:
+ *   Initialize and configure one SDMMC slot
+ *
+ ****************************************************************************/
+
+#ifdef HAVE_SDMMC
+int sam_sdmmc_initialize(int slotno, int minor);
+#endif
+
+/****************************************************************************
+ * Name: sam_cardinserted
+ *
+ * Description:
+ *   Check if a card is inserted into the selected SDMMC slot
+ *
+ ****************************************************************************/
+
+#ifdef HAVE_SDMMC
+bool sam_cardinserted(int slotno);
+#endif
+
+/****************************************************************************
+ * Name: sam_writeprotected
+ *
+ * Description:
+ *   Check if the card in the MMCSD slot is write protected
+ *
+ ****************************************************************************/
+
+#ifdef HAVE_SDMMC
+bool sam_writeprotected(int slotno);
+#endif
+
+/****************************************************************************
+ * Name: sam_usbinitialize
+ *
+ * Description:
+ *   Called from sam_usbinitialize very early in initialization to setup
+ *   USB-related PIO pins for the SAMA5D2-XULT board.
+ *
+ ****************************************************************************/
+
+#if defined(CONFIG_SAMA5_UHPHS) || defined(CONFIG_SAMA5_UDPHS)
+void weak_function sam_usbinitialize(void);
+#endif
+
+/****************************************************************************
+ * Name: stm32_usbhost_initialize
+ *
+ * Description:
+ *   Called at application startup time to initialize the USB host
+ *   functionality.
+ *   This function will start a thread that will monitor for device
+ *   connection/disconnection events.
+ *
+ ****************************************************************************/
+
+#ifdef HAVE_USBHOST
+int sam_usbhost_initialize(void);
+#endif
+
+#endif /* __ASSEMBLY__ */
+#endif /* __BOARDS_ARM_SAMA5_GIANT_BOARD_SRC_GIANT_BOARD_H */
diff --git a/boards/arm/sama5/giant-board/src/sam_adc.c b/boards/arm/sama5/giant-board/src/sam_adc.c
new file mode 100644
index 0000000..1063fdc
--- /dev/null
+++ b/boards/arm/sama5/giant-board/src/sam_adc.c
@@ -0,0 +1,86 @@
+/****************************************************************************
+ *  boards/arm/sama5/giant-board/src/sam_adc.c
+ *
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.  The
+ *  ASF licenses this file to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance with the
+ *  License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ *  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ *  License for the specific language governing permissions and limitations
+ *  under the License.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/board.h>
+#include <nuttx/analog/adc.h>
+
+#include "sam_adc.h"
+#include "giant-board.h"
+
+#ifdef CONFIG_SAMA5_ADC
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: sam_adc_setup
+ *
+ * Description:
+ *   Initialize ADC and register the ADC driver.
+ *
+ ****************************************************************************/
+
+int sam_adc_setup(void)
+{
+  static bool initialized = false;
+  struct adc_dev_s *adc;
+  int ret;
+
+  /* Check if we have already initialized */
+
+  if (!initialized)
+    {
+      /* Call stm32_adcinitialize() to get an instance of the ADC interface */
+
+      adc = sam_adc_initialize();
+      if (adc == NULL)
+        {
+          aerr("ERROR: Failed to get ADC interface\n");
+          return -ENODEV;
+        }
+
+      /* Register the ADC driver at "/dev/adc0" */
+
+      ret = adc_register("/dev/adc0", adc);
+      if (ret < 0)
+        {
+          aerr("ERROR: adc_register failed: %d\n", ret);
+          return ret;
+        }
+
+      /* Now we are initialized */
+
+      initialized = true;
+    }
+
+  return OK;
+}
+
+#endif /* CONFIG_ADC */
diff --git a/boards/arm/sama5/giant-board/src/sam_ajoystick.c b/boards/arm/sama5/giant-board/src/sam_ajoystick.c
new file mode 100644
index 0000000..5ed84c22
--- /dev/null
+++ b/boards/arm/sama5/giant-board/src/sam_ajoystick.c
@@ -0,0 +1,437 @@
+/****************************************************************************
+ *  boards/arm/sama5/giant-board/src/sam_ajoystick.c
+ *
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.  The
+ *  ASF licenses this file to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance with the
+ *  License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ *  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ *  License for the specific language governing permissions and limitations
+ *  under the License.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdint.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/irq.h>
+#include <nuttx/arch.h>
+#include <nuttx/fs/fs.h>
+#include <nuttx/input/ajoystick.h>
+
+#include "sam_pio.h"
+#include "sam_adc.h"
+#include "hardware/sam_adc.h"
+#include "giant-board.h"
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+/* Check for pre-requisites and pin conflicts */
+
+#ifdef CONFIG_AJOYSTICK
+#  if !defined(CONFIG_ADC)
+#    error CONFIG_ADC is required for the Itead joystick
+#    undef CONFIG_AJOYSTICK
+#  elif !defined(CONFIG_SAMA5_ADC_CHAN0) || !defined(CONFIG_SAMA5_ADC_CHAN1)
+#    error CONFIG_SAMA5_ADC_CHAN0 and 1 are required for Itead joystick
+#  elif !defined(CONFIG_SAMA5_PIOC_IRQ)
+#    error CONFIG_SAMA5_PIOC_IRQ is required for the Itead joystick
+#    undef CONFIG_AJOYSTICK
+#  elif defined(CONFIG_SAMA5_EMACA)
+#    error EMAC conflicts with the Itead PIO usage
+#    undef CONFIG_AJOYSTICK
+#  elif defined(CONFIG_SAMA5_SSC0)
+#    error SSC0 conflicts with the Itead PIO usage
+#    undef CONFIG_AJOYSTICK
+#  elif defined(CONFIG_SAMA5_SPI1)
+#    warning SPI1 may conflict with the Itead PIO usage
+#  elif defined(CONFIG_SAMA5_ISI)
+#    warning ISI may conflict with the Itead PIO usage
+#  endif
+#endif /* CONFIG_AJOYSTICK */
+
+#ifdef CONFIG_AJOYSTICK
+
+/* Number of Joystick buttons */
+
+#define AJOY_NGPIOS  7
+
+/* Bitset of supported Joystick buttons */
+
+#define AJOY_SUPPORTED (AJOY_BUTTON_1_BIT | AJOY_BUTTON_2_BIT | \
+                        AJOY_BUTTON_3_BIT | AJOY_BUTTON_4_BIT | \
+                        AJOY_BUTTON_5_BIT | AJOY_BUTTON_6_BIT | \
+                        AJOY_BUTTON_7_BIT )
+
+/****************************************************************************
+ * Private Function Prototypes
+ ****************************************************************************/
+
+static ajoy_buttonset_t ajoy_supported(FAR const struct ajoy_lowerhalf_s
+        *lower);
+static int ajoy_sample(FAR const struct ajoy_lowerhalf_s *lower,
+                       FAR struct ajoy_sample_s *sample);
+static ajoy_buttonset_t ajoy_buttons(FAR const struct ajoy_lowerhalf_s
+        *lower);
+static void ajoy_enable(FAR const struct ajoy_lowerhalf_s *lower,
+                         ajoy_buttonset_t press, ajoy_buttonset_t release,
+                         ajoy_handler_t handler, FAR void *arg);
+
+static void ajoy_disable(void);
+static int ajoy_interrupt(int irq, FAR void *context, FAR void *arg);
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/* Pin configuration for each Itead joystick button.  Index using AJOY_*
+ * button definitions in include/nuttx/input/ajoystick.h.
+ */
+
+static const pio_pinset_t g_joypio[AJOY_NGPIOS] =
+{
+  PIO_BUTTON_1, PIO_BUTTON_2, PIO_BUTTON_3, PIO_BUTTON_4,
+  PIO_BUTTON_5, PIO_BUTTON_6, PIO_BUTTON_6
+};
+
+static const uint8_t g_joyirq[AJOY_NGPIOS] =
+{
+  IRQ_BUTTON_1, IRQ_BUTTON_2, IRQ_BUTTON_3, IRQ_BUTTON_4,
+  IRQ_BUTTON_5, IRQ_BUTTON_6, IRQ_BUTTON_6
+};
+
+/* This is the button joystick lower half driver interface */
+
+static const struct ajoy_lowerhalf_s g_ajoylower =
+{
+  .al_supported  = ajoy_supported,
+  .al_sample     = ajoy_sample,
+  .al_buttons    = ajoy_buttons,
+  .al_enable     = ajoy_enable,
+};
+
+/* Thread-independent file structure for the open ADC driver */
+
+static struct file g_adcfile;
+
+/* Current interrupt handler and argument */
+
+static ajoy_handler_t g_ajoyhandler;
+static FAR void *g_ajoyarg;
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: ajoy_supported
+ *
+ * Description:
+ *   Return the set of buttons supported on the button joystick device
+ *
+ ****************************************************************************/
+
+static ajoy_buttonset_t ajoy_supported(FAR const struct ajoy_lowerhalf_s
+        *lower)
+{
+  iinfo("Supported: %02x\n", AJOY_SUPPORTED);
+  return (ajoy_buttonset_t)AJOY_SUPPORTED;
+}
+
+/****************************************************************************
+ * Name: ajoy_sample
+ *
+ * Description:
+ *   Return the current state of all button joystick buttons
+ *
+ ****************************************************************************/
+
+static int ajoy_sample(FAR const struct ajoy_lowerhalf_s *lower,
+                       FAR struct ajoy_sample_s *sample)
+{
+  struct adc_msg_s adcmsg[SAM_ADC_NCHANNELS];
+  FAR struct adc_msg_s *ptr;
+  ssize_t nread;
+  ssize_t offset;
+  int have;
+  int i;
+
+  /* Read all of the available samples (handling the case where additional
+   * channels are enabled).
+   */
+
+  nread = file_read(&g_adcfile, adcmsg,
+                    MAX_ADC_CHANNELS * sizeof(struct adc_msg_s));
+  if (nread < 0)
+    {
+      if (nread != EINTR)
+        {
+          ierr("ERROR: read failed: %d\n", (int)nread);
+        }
+
+      return nread;
+    }
+  else if (nread < 2 * sizeof(struct adc_msg_s))
+    {
+      ierr("ERROR: read too small: %ld\n", (long)nread);
+      return -EIO;
+    }
+
+  /* Sample and the raw analog inputs */
+
+  for (i = 0, offset = 0, have = 0;
+       i < SAM_ADC_NCHANNELS && offset < nread && have != 3;
+       i++, offset += sizeof(struct adc_msg_s))
+    {
+      ptr = &adcmsg[i];
+
+      /* Is this one of the channels that we need? */
+
+      if ((have & 1) == 0 && ptr->am_channel == 0)
+        {
+          int32_t tmp = ptr->am_data;
+          sample->as_x = (int16_t)tmp;
+          have |= 1;
+
+          iinfo("X sample: %ld -> %d\n", (long)tmp, (int)sample->as_x);
+        }
+
+      if ((have & 2) == 0 && ptr->am_channel == 1)
+        {
+          int32_t tmp = ptr->am_data;
+          sample->as_y = (int16_t)tmp;
+          have |= 2;
+
+          iinfo("Y sample: %ld -> %d\n", (long)tmp, (int)sample->as_y);
+        }
+    }
+
+  if (have != 3)
+    {
+      ierr("ERROR: Could not find joystack channels\n");
+      return -EIO;
+    }
+
+  /* Sample the discrete button inputs */
+
+  sample->as_buttons = ajoy_buttons(lower);
+  iinfo("Returning: %02x\n", AJOY_SUPPORTED);
+  return OK;
+}
+
+/****************************************************************************
+ * Name: ajoy_buttons
+ *
+ * Description:
+ *   Return the current state of button data (only)
+ *
+ ****************************************************************************/
+
+static ajoy_buttonset_t ajoy_buttons(FAR const struct ajoy_lowerhalf_s
+        *lower)
+{
+  ajoy_buttonset_t ret = 0;
+  int i;
+
+  /* Read each joystick GPIO value */
+
+  for (i = 0; i < AJOY_NGPIOS; i++)
+    {
+      /* Button outputs are pulled high. So a sensed low level means that the
+       * button is pressed.
+       */
+
+      if (!sam_pioread(g_joypio[i]))
+        {
+          ret |= (1 << i);
+        }
+    }
+
+  iinfo("Returning: %02x\n", ret);
+  return ret;
+}
+
+/****************************************************************************
+ * Name: ajoy_enable
+ *
+ * Description:
+ *   Enable interrupts on the selected set of joystick buttons.  And empty
+ *   set will disable all interrupts.
+ *
+ ****************************************************************************/
+
+static void ajoy_enable(FAR const struct ajoy_lowerhalf_s *lower,
+                         ajoy_buttonset_t press, ajoy_buttonset_t release,
+                         ajoy_handler_t handler, FAR void *arg)
+{
+  irqstate_t flags;
+  ajoy_buttonset_t either = press | release;
+  ajoy_buttonset_t bit;
+  int i;
+
+  /* Start with all interrupts disabled */
+
+  flags = enter_critical_section();
+  ajoy_disable();
+
+  iinfo("press: %02x release: %02x handler: %p arg: %p\n",
+        press, release, handler, arg);
+
+  /* If no events are indicated or if no handler is provided, then this
+   * must really be a request to disable interrupts.
+   */
+
+  if (either && handler)
+    {
+      /* Save the new the handler and argument */
+
+      g_ajoyhandler = handler;
+      g_ajoyarg     = arg;
+
+      /* Check each GPIO. */
+
+      for (i = 0; i < AJOY_NGPIOS; i++)
+        {
+          /* Enable interrupts on each pin that has either a press or
+           * release event associated with it.
+           */
+
+          bit = (1 << i);
+          if ((either & bit) != 0)
+            {
+              /* REVISIT:  It would be better if we reconfigured for
+               * the edges of interest so that we do not get spurious
+               * interrupts.
+               */
+
+               sam_pioirqenable(g_joyirq[i]);
+            }
+        }
+    }
+
+  leave_critical_section(flags);
+}
+
+/****************************************************************************
+ * Name: ajoy_disable
+ *
+ * Description:
+ *   Disable all joystick interrupts
+ *
+ ****************************************************************************/
+
+static void ajoy_disable(void)
+{
+  irqstate_t flags;
+  int i;
+
+  /* Disable each joystick interrupt */
+
+  flags = enter_critical_section();
+  for (i = 0; i < AJOY_NGPIOS; i++)
+    {
+      sam_pioirqdisable(g_joyirq[i]);
+    }
+
+  leave_critical_section(flags);
+
+  /* Nullify the handler and argument */
+
+  g_ajoyhandler = NULL;
+  g_ajoyarg     = NULL;
+}
+
+/****************************************************************************
+ * Name: ajoy_interrupt
+ *
+ * Description:
+ *   Discrete joystick interrupt handler
+ *
+ ****************************************************************************/
+
+static int ajoy_interrupt(int irq, FAR void *context, FAR void *arg)
+{
+  DEBUGASSERT(g_ajoyhandler);
+  if (g_ajoyhandler)
+    {
+      g_ajoyhandler(&g_ajoylower, g_ajoyarg);
+    }
+
+  return OK;
+}
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: sam_ajoy_initialization
+ *
+ * Description:
+ *   Initialize and register the button joystick driver
+ *
+ ****************************************************************************/
+
+int sam_ajoy_initialization(void)
+{
+  int ret;
+  int i;
+
+  /* NOTE: The ADC driver was initialized earlier in the bring-up sequence. */
+
+  /* Open the ADC driver for reading. */
+
+  ret = file_open(&g_adcfile, "/dev/adc0", O_RDONLY);
+  if (ret < 0)
+    {
+      ierr("ERROR: Failed to open /dev/adc0: %d\n", ret);
+      return ret;
+    }
+
+  /* Configure the GPIO pins as interrupting inputs. */
+
+  for (i = 0; i < AJOY_NGPIOS; i++)
+    {
+      /* Configure the PIO as an input */
+
+      sam_configpio(g_joypio[i]);
+
+      /* Configure PIO interrupts, attach the interrupt handler, but leave
+       * the interrupt disabled.
+       */
+
+      sam_pioirq(g_joypio[i]);
+      irq_attach(g_joyirq[i], ajoy_interrupt, NULL);
+      sam_pioirqdisable(g_joyirq[i]);
+    }
+
+  /* Register the joystick device as /dev/ajoy0 */
+
+  ret = ajoy_register("/dev/ajoy0", &g_ajoylower);
+  if (ret < 0)
+    {
+      ierr("ERROR: ajoy_register failed: %d\n", ret);
+      file_close(&g_adcfile);
+    }
+
+  return ret;
+}
+
+#endif /* CONFIG_AJOYSTICK */
diff --git a/boards/arm/sama5/giant-board/src/sam_appinit.c b/boards/arm/sama5/giant-board/src/sam_appinit.c
new file mode 100644
index 0000000..87974df
--- /dev/null
+++ b/boards/arm/sama5/giant-board/src/sam_appinit.c
@@ -0,0 +1,76 @@
+/****************************************************************************
+ *  boards/arm/sama5/giant-board/src/sam_appinit.c
+ *
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.  The
+ *  ASF licenses this file to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance with the
+ *  License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ *  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ *  License for the specific language governing permissions and limitations
+ *  under the License.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+#include <syslog.h>
+#include <debug.h>
+
+#include <nuttx/board.h>
+
+#include "giant-board.h"
+
+#ifndef CONFIG_BUILD_KERNEL
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: board_app_initialize
+ *
+ * Description:
+ *   Perform application specific initialization.  This function is never
+ *   called directly from application code, but only indirectly via the
+ *   (non-standard) boardctl() interface using the command BOARDIOC_INIT.
+ *
+ * Input Parameters:
+ *   arg - The boardctl() argument is passed to the board_app_initialize()
+ *         implementation without modification.  The argument has no
+ *         meaning to NuttX; the meaning of the argument is a contract
+ *         between the board-specific initialization logic and the
+ *         matching application logic.  The value could be such things as a
+ *         mode enumeration value, a set of DIP switch switch settings, a
+ *         pointer to configuration data read from a file or serial FLASH,
+ *         or whatever you would like to do with it.  Every implementation
+ *         should accept zero/NULL as a default configuration.
+ *
+ * Returned Value:
+ *   Zero (OK) is returned on success; a negated errno value is returned on
+ *   any failure to indicate the nature of the failure.
+ *
+ ****************************************************************************/
+
+int board_app_initialize(uintptr_t arg)
+{
+#ifndef CONFIG_BOARD_LATE_INITIALIZE
+  /* Perform board initialization */
+
+  mcinfo("Entry\n");
+  return sam_bringup();
+#else
+  return OK;
+#endif
+}
+
+#endif /* CONFIG_BUILD_KERNEL */
diff --git a/boards/arm/sama5/giant-board/src/sam_autoleds.c b/boards/arm/sama5/giant-board/src/sam_autoleds.c
new file mode 100644
index 0000000..e19e5e2
--- /dev/null
+++ b/boards/arm/sama5/giant-board/src/sam_autoleds.c
@@ -0,0 +1,138 @@
+/****************************************************************************
+ *  boards/arm/sama5/giant-board/src/sam_autoleds.c
+ *
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.  The
+ *  ASF licenses this file to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance with the
+ *  License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ *  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ *  License for the specific language governing permissions and limitations
+ *  under the License.
+ *
+ ****************************************************************************/
+
+/* There is an Orange LED on board the Giant Board.  The LED is
+ * driven by the STATUS_LED pin (PA6). Bringing the LED high will illuminate
+ * the LED.
+ *
+ *   ------------------------------ ------------------- ---------------------
+ *   SAMA5D2 PIO                    SIGNAL              USAGE
+ *   ------------------------------ ------------------- ---------------------
+ *   PA6                            STATUS_LED          Orange LED
+ *   ------------------------------ ------------------- ---------------------
+ *
+ * The LED is not used by the board port unless CONFIG_ARCH_LEDS is
+ * defined.  In that case, the usage by the board port is defined in
+ * include/board.h and src/sam_leds.c. The LEDs are used to encode OS-related
+ * events as follows.  Note that only the Orange LED is used in this case
+ *
+ *   SYMBOL              Meaning                 Orange LED
+ *   ------------------- ----------------------- ---------
+ *   LED_STARTED         NuttX has been started  OFF
+ *   LED_HEAPALLOCATE    Heap has been allocated OFF
+ *   LED_IRQSENABLED     Interrupts enabled      OFF
+ *   LED_STACKCREATED    Idle stack created      ON
+ *   LED_INIRQ           In an interrupt         N/C
+ *   LED_SIGNAL          In a signal handler     N/C
+ *   LED_ASSERTION       An assertion failed     N/C
+ *   LED_PANIC           The system has crashed  FLASH
+ *
+ * Thus if the Orange LED is statically on, NuttX has successfully  booted
+ * and is, apparently, running normally.  If LED is flashing at
+ * approximately 2Hz, then a fatal error has been detected and the system
+ * has halted.
+ */
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdint.h>
+#include <stdbool.h>
+#include <debug.h>
+
+#include <nuttx/board.h>
+#include <arch/board/board.h>
+
+#include "sam_pio.h"
+#include "giant-board.h"
+
+#ifdef CONFIG_ARCH_LEDS
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: board_autoled_initialize
+ ****************************************************************************/
+
+void board_autoled_initialize(void)
+{
+  /* Configure LED PIOs for output */
+
+  sam_configpio(PIO_LED_ORANGE);
+}
+
+/****************************************************************************
+ * Name: board_autoled_on
+ ****************************************************************************/
+
+void board_autoled_on(int led)
+{
+  switch (led)
+    {
+      default:
+      case 0:   /* LED_STARTED, LED_HEAPALLOCATE, LED_IRQSENABLED */
+        break;  /* Leave Orange LED off */
+
+      case 1:   /* LED_STACKCREATED */
+      case 3:   /* LED_PANIC */
+        {
+          /* Orange LED is ON (High illuminates) */
+
+          sam_piowrite(PIO_LED_ORANGE, true);
+        }
+        break;
+
+      case 2:   /* LED_INIRQ, LED_SIGNAL, LED_ASSERTION */
+        break;  /* No change */
+    }
+}
+
+/****************************************************************************
+ * Name: board_autoled_off
+ ****************************************************************************/
+
+void board_autoled_off(int led)
+{
+  switch (led)
+    {
+      default:
+      case 0:  /* LED_STARTED, LED_HEAPALLOCATE, LED_IRQSENABLED,  */
+      case 1:  /* LED_STACKCREATED */
+        break; /* Will not happen */
+
+      case 2:  /* LED_INIRQ, LED_SIGNAL, LED_ASSERTION */
+        break; /* No change */
+
+      case 3:  /* LED_PANIC */
+        {
+          /* Power LED is OFF (Low illuminates) */
+
+          sam_piowrite(PIO_LED_ORANGE, false);
+        }
+        break;
+    }
+}
+
+#endif /* CONFIG_ARCH_LEDS */
diff --git a/boards/arm/sama5/giant-board/src/sam_boot.c b/boards/arm/sama5/giant-board/src/sam_boot.c
new file mode 100644
index 0000000..c75d80f
--- /dev/null
+++ b/boards/arm/sama5/giant-board/src/sam_boot.c
@@ -0,0 +1,90 @@
+/****************************************************************************
+ *  boards/arm/sama5/giant-board/src/sam_boot.c
+ *
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.  The
+ *  ASF licenses this file to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance with the
+ *  License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ *  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ *  License for the specific language governing permissions and limitations
+ *  under the License.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <debug.h>
+
+#include <nuttx/board.h>
+
+#include "giant-board.h"
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: sam_boardinitialize
+ *
+ * Description:
+ *   All SAMA5 architectures must provide the following entry point.
+ *   This entry point is called early in the initialization -- after all
+ *   memory has been configured and mapped but before any devices have been
+ *   initialized.
+ *
+ ****************************************************************************/
+
+void sam_boardinitialize(void)
+{
+  /* Initialize USB if the 1) the HS host or device controller is in the
+   * configuration and 2) the weak function sam_usbinitialize() has been
+   * brought into the build.
+   * Presumeably either CONFIG_USBDEV or CONFIG_USBHOST is also selected.
+   */
+
+#if defined(CONFIG_SAMA5_UHPHS) || defined(CONFIG_SAMA5_UDPHS)
+  if (sam_usbinitialize)
+    {
+      sam_usbinitialize();
+    }
+#endif
+
+#ifdef CONFIG_ARCH_LEDS
+  /* Configure on-board LEDs if LED support has been selected. */
+
+  board_autoled_initialize();
+#endif
+}
+
+/****************************************************************************
+ * Name: board_late_initialize
+ *
+ * Description:
+ *   If CONFIG_BOARD_LATE_INITIALIZE is selected, then an additional
+ *   initialization call will be performed in the boot-up sequence to a
+ *   function called board_late_initialize(). board_late_initialize() will be
+ *   called immediately after up_initialize() is called and just before the
+ *   initial application is started.  This additional initialization phase
+ *   may be used, for example, to initialize board-specific device drivers.
+ *
+ ****************************************************************************/
+
+#ifdef CONFIG_BOARD_LATE_INITIALIZE
+void board_late_initialize(void)
+{
+  /* Perform board initialization */
+
+  sam_bringup();
+}
+#endif /* CONFIG_BOARD_LATE_INITIALIZE */
diff --git a/boards/arm/sama5/giant-board/src/sam_bringup.c b/boards/arm/sama5/giant-board/src/sam_bringup.c
new file mode 100644
index 0000000..b12f5c6
--- /dev/null
+++ b/boards/arm/sama5/giant-board/src/sam_bringup.c
@@ -0,0 +1,400 @@
+/****************************************************************************
+ *  boards/arm/sama5/giant-board/src/sam_bringup.c
+ *
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.  The
+ *  ASF licenses this file to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance with the
+ *  License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ *  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ *  License for the specific language governing permissions and limitations
+ *  under the License.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <sys/mount.h>
+#include <stdlib.h>
+#include <syslog.h>
+#include <debug.h>
+#include <string.h>
+
+#include <nuttx/irq.h>
+#include <nuttx/kthread.h>
+#include <nuttx/usb/usbdev.h>
+#include <nuttx/usb/usbhost.h>
+#include <nuttx/usb/usbdev_trace.h>
+
+#include "giant-board.h"
+
+#ifdef CONFIG_CDCACM
+#  include <nuttx/usb/cdcacm.h>
+#endif
+
+#ifdef CONFIG_NET_CDCECM
+#  include <nuttx/usb/cdcecm.h>
+#  include <net/if.h>
+#endif
+
+#ifdef CONFIG_USBMONITOR
+#  include <nuttx/usb/usbmonitor.h>
+#endif
+
+#ifdef CONFIG_RNDIS
+#  include <nuttx/usb/rndis.h>
+#endif
+
+#ifdef CONFIG_MMCSD
+#  include <nuttx/mmcsd.h>
+#  include "sam_sdmmc.h"
+#endif
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+#define NSECTORS(n) \
+  (((n)+CONFIG_GIANTBOARD_ROMFS_ROMDISK_SECTSIZE-1) / \
+   CONFIG_GIANTBOARD_ROMFS_ROMDISK_SECTSIZE)
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: sam_i2c_register
+ *
+ * Description:
+ *   Register one I2C drivers for the I2C tool.
+ *
+ ****************************************************************************/
+
+#ifdef HAVE_I2CTOOL
+static void sam_i2c_register(int bus)
+{
+  FAR struct i2c_master_s *i2c;
+  int ret;
+
+  i2c = sam_i2cbus_initialize(bus);
+  if (i2c == NULL)
+    {
+      i2cerr("ERROR: Failed to get I2C%d interface\n", bus);
+    }
+  else
+    {
+      ret = i2c_register(i2c, bus);
+      if (ret < 0)
+        {
+          i2cerr("ERROR: Failed to register I2C%d driver: %d\n", bus, ret);
+          sam_i2cbus_uninitialize(i2c);
+        }
+    }
+}
+#endif
+
+/****************************************************************************
+ * Name: sam_i2ctool
+ *
+ * Description:
+ *   Register I2C drivers for the I2C tool.
+ *
+ ****************************************************************************/
+
+#ifdef HAVE_I2CTOOL
+static void sam_i2ctool(void)
+{
+#ifdef CONFIG_SAMA5_TWI0
+  sam_i2c_register(0);
+#endif
+#ifdef CONFIG_SAMA5_TWI1
+  sam_i2c_register(1);
+#endif
+#ifdef CONFIG_SAMA5_TWI2
+  sam_i2c_register(2);
+#endif
+#ifdef CONFIG_SAMA5_TWI3
+  sam_i2c_register(3);
+#endif
+}
+#else
+#  define sam_i2ctool()
+#endif
+
+/****************************************************************************
+ * Name: nsh_sdmmc_initialize
+ *
+ * Description:
+ *   Initialize SDMMC drivers
+ *
+ ****************************************************************************/
+
+#ifdef CONFIG_SAMA5_SDMMC
+
+static int nsh_sdmmc_initialize(void)
+{
+  struct sdio_dev_s *sdmmc0;
+  struct sdio_dev_s *sdmmc1;
+  int ret = 0;
+
+  /* Get an instance of the SDIO interface */
+
+#ifdef CONFIG_SAMA5_SDMMC0
+  sdmmc0 = sam_sdmmc_sdio_initialize(SDMMC0_SLOTNO);
+  if (!sdmmc0)
+    {
+      mcerr("ERROR: Failed to initialize SD/MMC\n");
+    }
+  else
+    {
+      /* Bind the SDIO interface to the MMC/SD driver */
+
+      ret = mmcsd_slotinitialize(SDMMC0_MINOR, sdmmc0);
+      if (ret != OK)
+        {
+          mcerr("ERROR: Failed to bind SDIO to the MMC/SD driver (slot 0): "
+                "%d\n",
+                ret);
+        }
+    }
+
+#ifdef CONFIG_SAMA5D27_SDMMC0_MOUNT
+  /* Mount the volume on SDMMC0 */
+
+  ret = mount(CONFIG_SAMA5D27_SDMMC0_MOUNT_BLKDEV,
+              CONFIG_SAMA5D27_SDMMC0_MOUNT_MOUNTPOINT,
+              CONFIG_SAMA5D27_SDMMC0_MOUNT_FSTYPE,
+              0, NULL);
+
+  if (ret < 0)
+    {
+      mcerr("ERROR: Failed to mount %s: %d\n",
+           CONFIG_SAMA5D27_SDMMC0_MOUNT_MOUNTPOINT, errno);
+    }
+#endif
+#endif
+
+#ifdef CONFIG_SAMA5_SDMMC1
+  sdmmc1 = sam_sdmmc_sdio_initialize(SDMMC1_SLOTNO);
+  if (!sdmmc1)
+    {
+      syslog(LOG_ERR, "ERROR: Failed to initialize SD/MMC\n");
+    }
+  else
+    {
+      /* Bind the SDIO interface to the MMC/SD driver */
+
+      ret = mmcsd_slotinitialize(SDMMC1_MINOR, sdmmc1);
+      if (ret != OK)
+        {
+          syslog(LOG_ERR,
+                 "ERROR: Failed to bind SDIO to the MMC/SD driver (slot 0): "
+                 "%d\n",
+                 ret);
+        }
+    }
+
+#ifdef CONFIG_SAMA5D27_SDMMC1_MOUNT
+  /* Mount the volume on SDMMC1 */
+
+  ret = mount(CONFIG_SAMA5D27_SDMMC1_MOUNT_BLKDEV,
+              CONFIG_SAMA5D27_SDMMC1_MOUNT_MOUNTPOINT,
+              CONFIG_SAMA5D27_SDMMC1_MOUNT_FSTYPE,
+              0, NULL);
+
+  if (ret < 0)
+    {
+      mcerr("ERROR: Failed to mount %s: %d\n",
+           CONFIG_SAMA5D27_SDMMC1_MOUNT_MOUNTPOINT, errno);
+    }
+#endif
+#endif
+
+  return OK;
+}
+#else
+#  define nsh_sdmmc_initialize() (OK)
+#endif
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: sam_bringup
+ *
+ * Description:
+ *   Bring up board features
+ *
+ ****************************************************************************/
+
+int sam_bringup(void)
+{
+  int ret;
+
+  /* Register I2C drivers on behalf of the I2C tool */
+
+  sam_i2ctool();
+
+#ifdef HAVE_SDMMC
+#ifdef CONFIG_SAMA5_SDMMC
+  /* Initialize SDMCC-based MMC/SD card support */
+
+  nsh_sdmmc_initialize();
+#endif
+#endif
+
+#ifdef HAVE_AUTOMOUNTER
+  /* Initialize the auto-mounter */
+
+  sam_automount_initialize();
+#endif
+
+#ifdef HAVE_ROMFS
+  /* Create a ROM disk for the /etc filesystem */
+
+  ret = romdisk_register(CONFIG_GIANT_BOARD_ROMFS_ROMDISK_MINOR, romfs_img,
+                         NSECTORS(romfs_img_len),
+                         CONFIG_GIANT_BOARD_ROMFS_ROMDISK_SECTSIZE);
+  if (ret < 0)
+    {
+      fserr("ERROR: romdisk_register failed: %d\n", -ret);
+    }
+  else
+    {
+      /* Mount the file system */
+
+      ret = mount(CONFIG_GIANT_BOARD_ROMFS_ROMDISK_DEVNAME,
+                  CONFIG_GIANT_BOARD_ROMFS_MOUNT_MOUNTPOINT,
+                  "romfs", MS_RDONLY, NULL);
+      if (ret < 0)
+        {
+          fserr("ERROR: mount(%s,%s,romfs) failed: %d\n",
+               CONFIG_GIANT_BOARD_ROMFS_ROMDISK_DEVNAME,
+               CONFIG_GIANT_BOARD_ROMFS_MOUNT_MOUNTPOINT, errno);
+        }
+    }
+#endif
+
+#ifdef HAVE_USBHOST
+  /* Initialize USB host operation.  sam_usbhost_initialize() starts a thread
+   * will monitor for USB connection and disconnection events.
+   */
+
+  ret = sam_usbhost_initialize();
+  if (ret != OK)
+    {
+        uerr("ERROR: Failed to initialize USB host: %d\n", ret);
+    }
+#endif
+
+#ifdef HAVE_USBMONITOR
+  /* Start the USB Monitor */
+
+  ret = usbmonitor_start();
+  if (ret != OK)
+    {
+        _uerr("ERROR: Failed to start the USB monitor: %d\n", ret);
+    }
+#endif
+
+#ifdef HAVE_MAXTOUCH
+  /* Initialize the touchscreen */
+
+  ret = sam_tsc_setup(0);
+  if (ret < 0)
+    {
+      tmrerr("ERROR: sam_tsc_setup failed: %d\n", ret);
+    }
+#endif
+
+#ifdef CONFIG_PWM
+  /* Initialize PWM and register the PWM device. */
+
+  ret = sam_pwm_setup();
+  if (ret < 0)
+    {
+      pwmerr("ERROR: sam_pwm_setup() failed: %d\n", ret);
+    }
+#endif
+
+#ifdef CONFIG_ADC
+  /* Initialize ADC and register the ADC driver. */
+
+  ret = sam_adc_setup();
+  if (ret < 0)
+    {
+      aerr("ERROR: sam_adc_setup failed: %d\n", ret);
+    }
+#endif
+
+#ifdef HAVE_WM8904
+  /* Configure WM8904 audio */
+
+  ret = sam_wm8904_initialize(0);
+  if (ret != OK)
+    {
+      auderr("ERROR: Failed to initialize WM8904 audio: %d\n", ret);
+    }
+#endif
+
+#ifdef HAVE_AUDIO_NULL
+  /* Configure the NULL audio device */
+
+  ret = sam_audio_null_initialize(0);
+  if (ret != OK)
+    {
+      auderr("ERROR: Failed to initialize the NULL audio device: %d\n", ret);
+    }
+#endif
+
+#ifdef CONFIG_FS_PROCFS
+  /* Mount the procfs file system */
+
+  ret = mount(NULL, SAMA5_PROCFS_MOUNTPOINT, "procfs", 0, NULL);
+  if (ret < 0)
+    {
+      ferr("ERROR: Failed to mount procfs at %s: %d\n",
+           SAMA5_PROCFS_MOUNTPOINT, ret);
+    }
+#endif
+
+#if defined(CONFIG_RNDIS)
+  /* Set up a MAC address for the RNDIS device. */
+
+  uint8_t mac[6];
+  mac[0] = 0xa0; /* TODO */
+  mac[1] = (CONFIG_NETINIT_MACADDR_2 >> (8 * 0)) & 0xff;
+  mac[2] = (CONFIG_NETINIT_MACADDR_1 >> (8 * 3)) & 0xff;
+  mac[3] = (CONFIG_NETINIT_MACADDR_1 >> (8 * 2)) & 0xff;
+  mac[4] = (CONFIG_NETINIT_MACADDR_1 >> (8 * 1)) & 0xff;
+  mac[5] = (CONFIG_NETINIT_MACADDR_1 >> (8 * 0)) & 0xff;
+  usbdev_rndis_initialize(mac);
+#endif
+
+#ifdef CONFIG_NET_CDCECM
+    ret = cdcecm_initialize(0, NULL);
+  if (ret < 0)
+    {
+      nerr("ERROR: cdcecm_initialize() failed: %d\n", ret);
+    }
+#endif
+
+  /* If we got here then perhaps not all initialization was successful, but
+   * at least enough succeeded to bring-up NSH with perhaps reduced
+   * capabilities.
+   */
+
+  UNUSED(ret);
+  return OK;
+}
diff --git a/boards/arm/sama5/giant-board/src/sam_i2schar.c b/boards/arm/sama5/giant-board/src/sam_i2schar.c
new file mode 100644
index 0000000..7ccf1b8
--- /dev/null
+++ b/boards/arm/sama5/giant-board/src/sam_i2schar.c
@@ -0,0 +1,111 @@
+/****************************************************************************
+ *  boards/arm/sama5/giant-board/src/sam_i2schar.c
+ *
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.  The
+ *  ASF licenses this file to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance with the
+ *  License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ *  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ *  License for the specific language governing permissions and limitations
+ *  under the License.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <sys/types.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/audio/i2s.h>
+
+#include "sam_ssc.h"
+#include "giant-board.h"
+
+#if defined(CONFIG_AUDIO_I2SCHAR) && \
+   (defined(CONFIG_SAMA5_SSC0) || defined(CONFIG_SAMA5_SSC1))
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+#ifndef CONFIG_GIANT_BOARD_SSC_PORT
+#  if defined(CONFIG_SAMA5_SSC0)
+#    define CONFIG_GIANT_BOARD_SSC_PORT 0
+#  elif defined(CONFIG_SAMA5_SSC1)
+#    define CONFIG_GIANT_BOARD_SSC_PORT 1
+#  endif
+#endif
+
+#ifndef CONFIG_GIANT_BOARD_I2SCHAR_MINOR
+#  define CONFIG_GIANT_BOARD_I2SCHAR_MINOR 0
+#endif
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: i2schar_devinit
+ *
+ * Description:
+ *   All architectures must provide the following interface in order to work
+ *   with apps/examples/i2schar.
+ *
+ ****************************************************************************/
+
+int i2schar_devinit(void)
+{
+  static bool initialized = false;
+  struct i2s_dev_s *i2s;
+  int ret;
+
+  /* Have we already initialized? */
+
+  if (!initialized)
+    {
+      /* Call sam_ssc_initialize() to get an instance of the SSC/I2S
+       * interface
+       */
+
+      i2s = sam_ssc_initialize(CONFIG_GIANT_BOARD_SSC_PORT);
+      if (!i2s)
+        {
+          _err("ERROR: Failed to get the SAMA5 SSC/I2S driver for SSC%d\n",
+              CONFIG_GIANT_BOARD_SSC_PORT);
+          return -ENODEV;
+        }
+
+      /* Register the I2S character driver at "/dev/i2schar0" */
+
+      ret = i2schar_register(i2s, CONFIG_GIANT_BOARD_I2SCHAR_MINOR);
+      if (ret < 0)
+        {
+          aerr("ERROR: i2schar_register failed: %d\n", ret);
+          return ret;
+        }
+
+      /* Now we are initialized */
+
+      initialized = true;
+    }
+
+  return OK;
+}
+
+#endif /* CONFIG_AUDIO_I2SCHAR && (CONFIG_SAMA5_SSC0 || CONFIG_SAMA5_SSC1) */
diff --git a/boards/arm/sama5/giant-board/src/sam_ostest.c b/boards/arm/sama5/giant-board/src/sam_ostest.c
new file mode 100644
index 0000000..35108c1
--- /dev/null
+++ b/boards/arm/sama5/giant-board/src/sam_ostest.c
@@ -0,0 +1,95 @@
+/****************************************************************************
+ *  boards/arm/sama5/giant-board/src/sam_ostest.c
+ *
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.  The
+ *  ASF licenses this file to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance with the
+ *  License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ *  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ *  License for the specific language governing permissions and limitations
+ *  under the License.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdint.h>
+#include <stdbool.h>
+#include <string.h>
+#include <debug.h>
+
+#include <nuttx/irq.h>
+#include <arch/board/board.h>
+
+#include "arm_arch.h"
+#include "arm_internal.h"
+#include "giant-board.h"
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+/* Configuration ************************************************************/
+
+#undef HAVE_FPU
+#if defined(CONFIG_ARCH_FPU) && !defined(CONFIG_TESTING_OSTEST_FPUTESTDISABLE) && \
+    defined(CONFIG_TESTING_OSTEST_FPUSIZE) && defined(CONFIG_SCHED_WAITPID)
+#    define HAVE_FPU 1
+#endif
+
+#ifdef HAVE_FPU
+
+#if CONFIG_TESTING_OSTEST_FPUSIZE != (4*FPU_CONTEXT_REGS)
+#  error "CONFIG_TESTING_OSTEST_FPUSIZE has the wrong size"
+#endif
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+static uint32_t g_saveregs[XCPTCONTEXT_REGS];
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/* Given an array of size CONFIG_TESTING_OSTEST_FPUSIZE, this function will
+ * return the current FPU registers.
+ */
+
+void arch_getfpu(FAR uint32_t *fpusave)
+{
+  irqstate_t flags;
+
+  /* Take a snapshot of the thread context right now */
+
+  flags = enter_critical_section();
+  arm_saveusercontext(g_saveregs);
+
+  /* Return only the floating register values */
+
+  memcpy(fpusave, &g_saveregs[REG_S0], (4*FPU_CONTEXT_REGS));
+  leave_critical_section(flags);
+}
+
+/* Given two arrays of size CONFIG_TESTING_OSTEST_FPUSIZE this function
+ * will compare them and return true if they are identical.
+ */
+
+bool arch_cmpfpu(FAR const uint32_t *fpusave1, FAR const uint32_t *fpusave2)
+{
+  return memcmp(fpusave1, fpusave2, (4*FPU_CONTEXT_REGS)) == 0;
+}
+
+#endif /* HAVE_FPU */
diff --git a/boards/arm/sama5/giant-board/src/sam_pwm.c b/boards/arm/sama5/giant-board/src/sam_pwm.c
new file mode 100644
index 0000000..ba3e6e4
--- /dev/null
+++ b/boards/arm/sama5/giant-board/src/sam_pwm.c
@@ -0,0 +1,147 @@
+/****************************************************************************
+ *  boards/arm/sama5/giant-board/src/sam_pwm.c
+ *
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.  The
+ *  ASF licenses this file to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance with the
+ *  License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ *  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ *  License for the specific language governing permissions and limitations
+ *  under the License.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <sys/types.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/board.h>
+#include <nuttx/timers/pwm.h>
+
+#include <arch/board/board.h>
+
+#include "sam_pwm.h"
+#include "giant-board.h"
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+/* Configuration ************************************************************/
+
+/* PWM.
+ * There are no dedicated PWM output pins available to the user for PWM
+ * testing.
+ * Care must be taken because all PWM output pins conflict with some other
+ * usage of the pin by other devices:
+ *
+ *    -----+---+---+----+--------------------
+ *     PWM  PIN PER PIO  CONFLICTS
+ *    -----+---+---+----+--------------------
+ *     PWM0 FI   B  PC28   SPI1, ISI
+ *          H    B  PB0    GMAC
+ *               B  PA20   LCDC, ISI
+ *          L    B  PB1    GMAC
+ *               B  PA21   LCDC, ISI
+ *    -----+---+---+----+--------------------
+ *     PWM1 FI   B  PC31   HDMI
+ *          H    B  PB4    GMAC
+ *               B  PA22   LCDC, ISI
+ *          L    B  PB5    GMAC
+ *               B  PE31   ISI, HDMI
+ *               B  PA23   LCDC, ISI
+ *    -----+---+---+----+--------------------
+ *     PWM2 FI   B  PC29   UART0, ISI, HDMI
+ *          H    C  PD5    HSMCI0
+ *               B  PB8    GMAC
+ *          L    C  PD6    HSMCI0
+ *               B  PB9    GMAC
+ *    -----+---+---+----+--------------------
+ *     PWM3 FI   C  PD16   SPI0, Audio
+ *          H    C  PD7    HSMCI0
+ *               B  PB12   GMAC
+ *          L    C  PD8    HSMCI0
+ *               B  PB13   GMAC
+ *    -----+---+---+----+--------------------
+ */
+
+#ifndef CONFIG_GIANT_BOARD_CHANNEL
+#  if defined(CONFIG_SAMA5_PWM_CHAN0)
+#    warning Assuming PWM channel 0
+#    define CONFIG_GIANT_BOARD_CHANNEL 0
+#  elif defined(CONFIG_SAMA5_PWM_CHAN1)
+#    warning Assuming PWM channel 1
+#    define CONFIG_GIANT_BOARD_CHANNEL 1
+#  elif defined(CONFIG_SAMA5_PWM_CHAN2)
+#    warning Assuming PWM channel 2
+#    define CONFIG_GIANT_BOARD_CHANNEL 2
+#  elif defined(CONFIG_SAMA5_PWM_CHAN3)
+#    warning Assuming PWM channel 3
+#    define CONFIG_GIANT_BOARD_CHANNEL 3
+#  endif
+#endif
+
+#if defined(CONFIG_PWM) && defined(CONFIG_SAMA5_PWM)
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: sam_pwm_setup
+ *
+ * Description:
+ *   Initialize PWM and register the PWM device.
+ *
+ ****************************************************************************/
+
+int sam_pwm_setup(void)
+{
+  static bool initialized = false;
+  struct pwm_lowerhalf_s *pwm;
+  int ret;
+
+  /* Have we already initialized? */
+
+  if (!initialized)
+    {
+      /* Call sam_pwminitialize() to get an instance of the PWM interface */
+
+      pwm = sam_pwminitialize(CONFIG_SAMA5D3XPLAINED_CHANNEL);
+      if (!pwm)
+        {
+          _err("ERROR: Failed to get the SAMA5 PWM lower half\n");
+          return -ENODEV;
+        }
+
+      /* Register the PWM driver at "/dev/pwm0" */
+
+      ret = pwm_register("/dev/pwm0", pwm);
+      if (ret < 0)
+        {
+          aerr("ERROR: pwm_register failed: %d\n", ret);
+          return ret;
+        }
+
+      /* Now we are initialized */
+
+      initialized = true;
+    }
+
+  return OK;
+}
+
+#endif /* CONFIG_PWM */
diff --git a/boards/arm/sama5/giant-board/src/sam_reset.c b/boards/arm/sama5/giant-board/src/sam_reset.c
new file mode 100644
index 0000000..570c0db
--- /dev/null
+++ b/boards/arm/sama5/giant-board/src/sam_reset.c
@@ -0,0 +1,62 @@
+/****************************************************************************
+ * boards/arm/sama5/giant-board/src/sam_reset.c
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.  The
+ * ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the
+ * License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <nuttx/arch.h>
+#include <nuttx/board.h>
+
+#ifdef CONFIG_BOARDCTL_RESET
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: board_reset
+ *
+ * Description:
+ *   Reset board.  Support for this function is required by board-level
+ *   logic if CONFIG_BOARDCTL_RESET is selected.
+ *
+ * Input Parameters:
+ *   status - Status information provided with the reset event.  This
+ *            meaning of this status information is board-specific.  If not
+ *            used by a board, the value zero may be provided in calls to
+ *            board_reset().
+ *
+ * Returned Value:
+ *   If this function returns, then it was not possible to power-off the
+ *   board due to some constraints.  The return value int this case is a
+ *   board-specific reason for the failure to shutdown.
+ *
+ ****************************************************************************/
+
+int board_reset(int status)
+{
+  up_systemreset();
+  return 0;
+}
+
+#endif /* CONFIG_BOARDCTL_RESET */
diff --git a/boards/arm/sama5/giant-board/src/sam_sdmmc.c b/boards/arm/sama5/giant-board/src/sam_sdmmc.c
new file mode 100644
index 0000000..d479c8d
--- /dev/null
+++ b/boards/arm/sama5/giant-board/src/sam_sdmmc.c
@@ -0,0 +1,319 @@
+/****************************************************************************
+ *  boards/arm/sama5/giant-board/src/sam_sdmmc.c
+ *
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.  The
+ *  ASF licenses this file to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance with the
+ *  License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ *  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ *  License for the specific language governing permissions and limitations
+ *  under the License.
+ *
+ ****************************************************************************/
+
+/* The Giant Board provide one Micro SD memory card slot at J6 (SDMMC1).
+ *
+ * SDMMC1: The Micro SD card slot connects via SDMMC1.  The card detect
+ * discrete is available on PA21 (pulled high), shared with DAT3. The write
+ * protect discrete is tied to ground and not available to software. The
+ * slot only supports 4-bit wide transfer mode.
+ *
+ *   PA18  SDMMC1_DAT0
+ *   PA19  SDMMC1_DAT1
+ *   PA20  SDMMC1_DAT2
+ *   PA21  SDMMC1_DAT3 / CD
+ *   PD22  SDMMC1_CK
+ *   PA28  SDMMC1_CMD
+ *
+ */
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdbool.h>
+#include <stdio.h>
+#include <debug.h>
+#include <errno.h>
+
+#include <nuttx/sdio.h>
+#include <nuttx/mmcsd.h>
+
+#include "chip.h"
+#include "arm_internal.h"
+#include "arm_arch.h"
+
+#include "sam_pio.h"
+#include "sam_sdmmc.h"
+
+#include "giant-board.h"
+
+#ifdef HAVE_SDMMC
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/* This structure holds static information unique to one SDMMC peripheral */
+
+struct sam_sdmmc_state_s
+{
+  struct sdio_dev_s *sdmmc;   /* R/W device handle */
+  pio_pinset_t pincfg;        /* Card detect PIO pin configuration */
+  uint8_t irq;                /* Interrupt number (same as pid) */
+  uint8_t slotno;             /* Slot number */
+  bool cd;                    /* TRUE: card is inserted */
+  xcpt_t handler;             /* Interrupt handler */
+};
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/* SDMMC device state */
+
+#ifdef CONFIG_SAMA5_SDMMC0
+static int sam_sdmmc0_cardetect(int irq, void *regs, FAR void *arg);
+
+static struct sam_sdmmc_state_s g_sdmmc0 =
+{
+  .pincfg  = PIO_SDMMC0_CD,
+  .irq     = -1,
+  .slotno  = 0,
+  .handler = sam_sdmmc0_cardetect,
+};
+#endif
+
+#ifdef CONFIG_SAMA5_SDMMC1
+static int sam_sdmmc1_cardetect(int irq, void *regs, FAR void *arg);
+
+static struct sam_sdmmc_state_s g_sdmmc1 =
+{
+  .pincfg  = PIO_SDMMC1_CD,
+  .irq     = IRQ_SDMMC1_CD,
+  .slotno  = 1,
+  .handler = sam_sdmmc1_cardetect,
+};
+#endif
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: sam_cardinserted_internal
+ *
+ * Description:
+ *   Check if a card is inserted into the selected SDMMC slot
+ *
+ ****************************************************************************/
+
+bool sam_cardinserted_internal(struct sam_sdmmc_state_s *state)
+{
+  bool inserted;
+
+  /* Get the state of the PIO pin */
+
+  inserted = sam_pioread(state->pincfg);
+  finfo("Slot %d inserted: %s\n", state->slotno, inserted ? "NO" : "YES");
+  return !inserted;
+}
+
+/****************************************************************************
+ * Name: sam_sdmmc_cardetect, sam_sdmmc0_cardetect, and sam_sdmmc1_cardetect
+ *
+ * Description:
+ *   Card detect interrupt handlers
+ *
+ ****************************************************************************/
+
+static int sam_sdmmc_cardetect(struct sam_sdmmc_state_s *state)
+{
+  /* Get the current card insertion state */
+
+  bool cd = sam_cardinserted_internal(state);
+
+  /* Has the card detect state changed? */
+
+  if (cd != state->cd)
+    {
+      /* Yes... remember that new state and inform the SDMMC driver */
+
+      state->cd = cd;
+
+      /* Report the new state to the SDIO driver */
+
+      sdio_mediachange(state->sdmmc, cd);
+    }
+
+  return OK;
+}
+
+#ifdef CONFIG_SAMA5_SDMMC0
+static int sam_sdmmc0_cardetect(int irq, void *regs, FAR void *arg)
+{
+  return sam_sdmmc_cardetect(&g_sdmmc0);
+}
+#endif
+
+#ifdef CONFIG_SAMA5_SDMMC1
+static int sam_sdmmc1_cardetect(int irq, void *regs, FAR void *arg)
+{
+  return sam_sdmmc_cardetect(&g_sdmmc1);
+}
+#endif
+
+/****************************************************************************
+ * Name: sam_sdmmc_state
+ *
+ * Description:
+ *   Initialize SDMMC PIOs.
+ *
+ ****************************************************************************/
+
+static struct sam_sdmmc_state_s *sam_sdmmc_state(int slotno)
+{
+  struct sam_sdmmc_state_s *state = NULL;
+
+#ifdef CONFIG_SAMA5_SDMMC0
+#ifdef CONFIG_SAMA5_SDMMC1
+  if (slotno == 0)
+#endif
+    {
+      state = &g_sdmmc0;
+    }
+#ifdef CONFIG_SAMA5_SDMMC1
+  else
+#endif
+#endif
+
+#ifdef CONFIG_SAMA5_SDMMC1
+    {
+      state = &g_sdmmc1;
+    }
+#endif
+
+  return state;
+}
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: sam_sdmmc_initialize
+ *
+ * Description:
+ *   Perform architecture specific initialization
+ *
+ ****************************************************************************/
+
+int sam_sdmmc_initialize(int slotno, int minor)
+{
+  struct sam_sdmmc_state_s *state;
+  int ret;
+
+  mcinfo("Entry.\n");
+  mcinfo("slotno: %d\n", slotno);
+
+  /* Get the static SDMMC description */
+
+  state = sam_sdmmc_state(slotno);
+  if (!state)
+    {
+      ferr("ERROR: No state for slotno %d\n", slotno);
+      return -EINVAL;
+    }
+
+  /* Initialize card-detect and write-protect PIOs */
+
+  sam_configpio(state->pincfg);
+
+  /* Mount the SDIO-based MMC/SD block driver */
+
+  /* First, get an instance of the SDIO interface */
+
+  state->sdmmc = sam_sdmmc_sdio_initialize(slotno);
+  if (!state->sdmmc)
+    {
+      ferr("ERROR: Failed to initialize SDIO slot %d\n",  slotno);
+      return -ENODEV;
+    }
+
+  /* Now bind the SDIO interface to the MMC/SD driver */
+
+  ret = mmcsd_slotinitialize(minor, state->sdmmc);
+  if (ret != OK)
+    {
+      ferr("ERROR: Failed to bind SDIO to the MMC/SD driver: %d\n", ret);
+      return ret;
+    }
+
+  /* Configure card detect interrupts */
+
+  sam_pioirq(state->pincfg);
+  irq_attach(state->irq, state->handler, NULL);
+
+  /* Then inform the SDMMC driver if there is or is not a card in the slot. */
+
+  state->cd = sam_cardinserted_internal(state);
+  sdio_mediachange(state->sdmmc, state->cd);
+
+  /* Enable card detect interrupts */
+
+  sam_pioirqenable(state->irq);
+  return OK;
+}
+
+/****************************************************************************
+ * Name: sam_cardinserted
+ *
+ * Description:
+ *   Check if a card is inserted into the selected SDMMC slot
+ *
+ ****************************************************************************/
+
+bool sam_cardinserted(int slotno)
+{
+  struct sam_sdmmc_state_s *state;
+
+  /* Get the SDMMC description */
+
+  state = sam_sdmmc_state(slotno);
+  if (!state)
+    {
+      ferr("ERROR: No state for slotno %d\n", slotno);
+      return false;
+    }
+
+  /* Return the state of the PIO pin */
+
+  return sam_cardinserted_internal(state);
+}
+
+/****************************************************************************
+ * Name: sam_writeprotected
+ *
+ * Description:
+ *   Check if a card is inserted into the selected SDMMC slot
+ *
+ ****************************************************************************/
+
+bool sam_writeprotected(int slotno)
+{
+  /* There are no write protect pins */
+
+  return false;
+}
+
+#endif /* HAVE_SDMMC */
+
diff --git a/boards/arm/sama5/giant-board/src/sam_sdram.c b/boards/arm/sama5/giant-board/src/sam_sdram.c
new file mode 100644
index 0000000..97aa1d3
--- /dev/null
+++ b/boards/arm/sama5/giant-board/src/sam_sdram.c
@@ -0,0 +1,572 @@
+/****************************************************************************
+ *  boards/arm/sama5/giant-board/src/sam_sdram.c
+ *
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.  The
+ *  ASF licenses this file to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance with the
+ *  License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ *  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ *  License for the specific language governing permissions and limitations
+ *  under the License.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <debug.h>
+
+#include "arm_arch.h"
+
+#include "sam_periphclks.h"
+#include "hardware/sam_memorymap.h"
+#include "hardware/sam_pmc.h"
+#include "hardware/sam_sfr.h"
+#include "hardware/sam_mpddrc.h"
+
+#include "giant-board.h"
+
+/* This file requires:
+ *
+ * CONFIG_SAMA5_DDRCS -- DRAM support is enabled, and
+ * !CONFIG_SAMA5_BOOT_SDRAM - We did not boot into SRAM.
+ */
+
+#if defined(CONFIG_SAMA5_DDRCS) && !defined(CONFIG_SAMA5_BOOT_SDRAM)
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+/* SDRAM differences */
+
+#if defined(CONFIG_GIANT_BOARD_W971GG6SB)
+  /* Used for SDRAM command handshaking */
+
+#  define DDR2_BA0    (1 << 26)
+#  define DDR2_BA1    (1 << 27)
+
+#else
+#  error Unknown SDRAM type
+#endif
+
+/* The delay loop in sam_sdram_delay requires 6 core cycles per iteration.
+ *
+ *   At 492MHz:
+ *
+ *     (6 cycles/iteration) / (0.492 cycles/nanosecond) =
+ *       12.1951 nanoseconds per iteration
+ */
+
+#define LOOP_GUARD 100
+#  define CYCLES_TO_COUNT(cycles) (((cycles) / 6) + LOOP_GUARD)
+
+#if defined(CONFIG_GIANT_BOARD_492MHZ)
+#  define NSEC_TO_COUNT(nsec)     ((((nsec) * 1000) / 12195) + LOOP_GUARD)
+#  define USEC_TO_COUNT(usec)     ((((usec) * 1000000) / 12195) + LOOP_GUARD)
+#endif
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: sam_sdram_delay
+ *
+ * Description:
+ *   Precision delay function for SDRAM configuration.
+ *
+ *   This delay loop requires 6 core cycles per iteration.  The actual
+ *   amount of time delayed will then vary with PCK.
+ *
+ ****************************************************************************/
+
+static inline void sam_sdram_delay(unsigned int loops)
+{
+  volatile unsigned int i;
+
+  for (i = 0; i < loops; i++)
+    {
+      asm("nop");
+    }
+}
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: sam_sdram_config
+ *
+ * Description:
+ *   Configures DDR2 (W971GG6SB)
+ *
+ *   TODO: test (so far only booting into SDRAM has been tested using U-Boot)
+ *
+ *   Per the SAMA5D-Xplained User guide:
+ *   "Two DDR2/SDRAM (MT47H64M16HR) used as main system memory (256 MByte).
+ *   The board includes 2 Gbits of on-board soldered DDR2 (double data rate)
+ *   SDRAM. The footprints can also host two DDR2(MT47H128M16RT) from Micron
+ *   for a total of 512 MBytes of DDR2 memory.
+ *   The memory bus is 32 bits wide and operates with a frequency of up
+ *   to 166 MHz."
+ *
+ *   From the Atmel Code Example:
+ *     MT47H64M16HR : 8 Meg x 16 x 8 banks
+ *     Refresh count: 8K
+ *     Row address: A[12:0] (8K)
+ *     Column address A[9:0] (1K)
+ *     Bank address BA[2:0] a(24,25) (8)
+ *
+ *  This logic was taken from Atmel sample code for the SAMA5D3x-EK.
+ *
+ *  Input Parameters:
+ *     devtype - Either DDRAM_MT47H128M16RT or DDRAM_MT47H64M16HR
+ *
+ *  Assumptions:
+ *    The DDR memory regions is configured as strongly ordered memory.  When
+ *    we complete initialization of SDRAM and it is ready for use, we will
+ *    make DRAM into normal memory.
+ *
+ ****************************************************************************/
+
+void sam_sdram_config(void)
+{
+  volatile uint8_t *ddr = (uint8_t *)SAM_DDRCS_VSECTION;
+  uint32_t regval;
+
+  /* Enable x2 clocking to the MPDDRC */
+
+  sam_mpddrc_enableclk();
+
+  /* Enable DDR clocking */
+
+  regval  = getreg32(SAM_PMC_SCER);
+  regval |= PMC_DDRCK;
+  putreg32(regval, SAM_PMC_SCER);
+
+  /* Clear the low power register */
+
+  putreg32(0, SAM_MPDDRC_LPR);
+
+  /* Enable autofresh during calibration (undocumented) */
+
+  regval  = getreg32(SAM_MPDDRC_HS);
+  regval |= MPDDRC_HS_AUTOREFRESH_CAL;
+  putreg32(regval, SAM_MPDDRC_HS);
+
+  /* Force DDR_DQ and DDR_DQS input buffer always on */
+
+  regval  = getreg32(SAM_SFR_DDRCFG);
+  regval |= SFR_FDQIEN | SFR_FDQSIEN;
+  putreg32(regval, SAM_SFR_DDRCFG);
+
+  /* Configure the slave offset register */
+
+  regval = MPDDRC_DLL_SOR_S0OFF(1) |      /* DLL Slave 0 Delay Line Offset */
+           MPDDRC_DLL_SOR_S1OFF(0) |      /* DLL Slave 1 Delay Line Offset */
+           MPDDRC_DLL_SOR_S2OFF(1) |      /* DLL Slave 2 Delay Line Offset */
+           MPDDRC_DLL_SOR_S3OFF(1);       /* DLL Slave 3 Delay Line Offset */
+  putreg32(regval, SAM_MPDDRC_DLL_SOR);
+
+  /* Configure the master offset register (including upper mystery bits) */
+
+  regval = MPDDRC_DLL_MOR_MOFF(7) |       /* DLL Master Delay Line Offset */
+           MPDDRC_DLL_MOR_CLK90OFF(31) |  /* DLL CLK90 Delay Line Offset */
+           MPDDRC_DLL_MOR_SELOFF |        /* DLL Offset Selection */
+           MPDDRC_DLL_MOR_KEY;            /* Undocumented key */
+  putreg32(regval, SAM_MPDDRC_DLL_MOR);
+
+  /* Configure the I/O calibration register */
+
+  regval  =  getreg32(SAM_MPDDRC_IO_CALIBR);
+  regval &= ~(MPDDRC_IO_CALIBR_RDIV_MASK | MPDDRC_IO_CALIBR_TZQIO_MASK);
+  regval |= (MPDDRC_IO_CALIBR_RZQ48_40 |  MPDDRC_IO_CALIBR_TZQIO(3));
+  putreg32(regval, SAM_MPDDRC_IO_CALIBR);
+
+  /* Force DDR_DQ and DDR_DQS input buffer always on */
+
+  putreg32(SFR_FDQIEN | SFR_FDQSIEN, SAM_SFR_DDRCFG);
+
+  /* Step 1: Program the memory device type
+   *
+   *   DBW = 0 (32-bit bus wide)
+   *   Memory Device = DDR2-SDRAM
+   */
+
+  putreg32(MPDDRC_MD_DDR2_SDRAM, SAM_MPDDRC_MD);
+
+  /* Step 2: Program the features of DDR2-SDRAM device into the Timing
+   * Register
+   */
+
+  /* SAMA5D27D1G uses Winbond W971GG6SB 1GB DDR2 RAM
+   *
+   * See datasheet http://ww1.microchip.com/downloads/en/DeviceDoc/SAMA5D2-Plus-DDR2-LPDDR2-System-in-Package-(SIP)-60001484b.pdf
+   *
+   */
+
+#if defined(CONFIG_GIANT_BOARD_W971GG6SB)
+
+  /* For W971GG6SB
+   *
+   *   NC      = 13 DDR column bits
+   *   NR      = 16 DDR row bits
+   *   CAS     = DDR2/LPDDR2 CAS Latency 4
+   *   DLL     = Disable reset (0)
+   *   DIC_DS  = 0
+   *   DIS_DLL = Enable PLL (0)
+   *   ZQ      = Calibration command after initialization (0)
+   *   OCD     = OCD calibration mode exit, maintain setting (0)
+   *   DQMS    = Not shared (0)
+   *   ENDRM   = Disable read measure (0)
+   *   NB      = 8 banks
+   *   NDQS    = Not DQS disabled
+   *   DECODE  = Sequential decoding (0)
+   *   UNAL    = Unaliged access supported
+   */
+
+  regval = MPDDRC_CR_NC_10 |    /* Number of Column Bits */
+           MPDDRC_CR_NR_13 |    /* Number of Row Bits */
+           MPDDRC_CR_CAS_4 |    /* CAS Latency */
+           MPDDRC_CR_OCD_EXIT | /* Off-chip Driver */
+           MPDDRC_CR_8BANKS |   /* Number of Banks */
+           MPDDRC_CR_NDQS |     /* Not DQS */
+           MPDDRC_CR_UNAL;      /* upport Unaligned Access */
+
+#else
+#  error Unknown SDRAM type
+#endif
+
+  putreg32(regval, SAM_MPDDRC_CR);
+
+  /* Configure the Timing Parameter 0 Register */
+
+  regval = MPDDRC_TPR0_TRAS(6) | /*  Active to Precharge Delay:    6 * 7.5 = 45 ns */
+           MPDDRC_TPR0_TRCD(2) | /*  Row to Column Delay:          2 * 7.5 = 15 ns */
+           MPDDRC_TPR0_TWR(2) |  /*  Write Recovery Delay:         3 * 7.5 = 22.5 ns */
+           MPDDRC_TPR0_TRC(8) |  /*  Row Cycle Delay:              8 * 7.5 = 60 ns */
+           MPDDRC_TPR0_TRP(2) |  /*  Row Precharge Delay:          2 * 7.5 = 15 ns */
+           MPDDRC_TPR0_TRRD(1) | /*  Active BankA to Active BankB: 2 * 7.5 = 15 ns */
+           MPDDRC_TPR0_TWTR(2) | /*  Internal Write to Read Delay: 2 clock cycle */
+           MPDDRC_TPR0_TMRD(2);  /* Load Mode Register Command to
+                                  * Activate or Refresh Command:  2 clock
+                                  * cycles
+                                  */
+  putreg32(regval, SAM_MPDDRC_TPR0);
+
+  /* Configure the Timing Parameter 1 Register */
+
+  regval = MPDDRC_TPR1_TRFC(14) |   /* Row Cycle Delay:
+                                     *   18 * 7.5 = 135 ns
+                                     * (min 127.5 ns for 1Gb DDR)
+                                     */
+           MPDDRC_TPR1_TXSNR(16) |  /* Exit Self Refresh Delay to Non Read
+                                     * Command:
+                                     *   20 * 7.5 > 142.5ns TXSNR: Exit self
+                                     *   refresh delay to Non Read command
+                                     */
+           MPDDRC_TPR1_TXSRD(208) | /* Exit Self Refresh Delay to Read
+                                     * Command:
+                                     *   min 200 clock cycles, TXSRD: Exit
+                                     *   self refresh delay to Read command
+                                     */
+           MPDDRC_TPR1_TXP(2);      /* Exit Power-down Delay to First
+                                     * Command:
+                                     *   2 * 7.5 = 15 ns
+                                     */
+  putreg32(regval, SAM_MPDDRC_TPR1);
+
+  /* Configure the Timing Parameter 2 Register */
+
+  regval = MPDDRC_TPR2_TXARD(7) |   /* Exit Active Power Down Delay to
+                                     * Read Command in Mode 'Fast Exit':
+                                     *   min 2 clock cycles
+                                     */
+           MPDDRC_TPR2_TXARDS(7) |  /* Exit Active Power Down Delay to
+                                     * Read Command in Mode 'Slow Exit':
+                                     *   min 7 clock cycles
+                                     */
+           MPDDRC_TPR2_TRPA(2) |    /* Row Precharge All Delay:
+                                     *   min 18ns
+                                     */
+           MPDDRC_TPR2_TRTP(2) |    /* Four Active Windows:
+                                     *   2 * 7.5 = 15 ns
+                                     *   (min 7.5ns)
+                                     */
+           MPDDRC_TPR2_TFAW(10);
+  putreg32(regval, SAM_MPDDRC_TPR2);
+
+  /* DDRSDRC Low-power Register */
+
+  sam_sdram_delay(USEC_TO_COUNT(200));
+
+  regval = MPDDRC_LPR_LPCB_DISABLED |  /* Low-power Feature is inhibited */
+           MPDDRC_LPR_TIMEOUT_0CLKS |  /* Activates low-power mode after the end of transfer */
+           MPDDRC_LPR_APDE_FAST;       /* Active Power Down Exit Time */
+  putreg32(regval, SAM_MPDDRC_LPR);
+
+  /* Step 3: An NOP command is issued to the DDR2-SDRAM. Program the NOP
+   * command into the Mode Register, the application must set MODE to 1 in
+   * the Mode Register.
+   */
+
+  putreg32(MPDDRC_MR_MODE_NOP, SAM_MPDDRC_MR);
+
+  /* Perform a write access to any DDR2-SDRAM address to acknowledge this
+   * command.
+   */
+
+  *ddr = 0;
+
+  /* Now clocks which drive DDR2-SDRAM device are enabled.
+   *
+   * A minimum pause of 200 usec is provided to precede any signal toggle.
+   * (6 core cycles per iteration, core is at 396MHz: min 13200 loops)
+   */
+
+  sam_sdram_delay(USEC_TO_COUNT(200));
+
+  /* Step 4:  An NOP command is issued to the DDR2-SDRAM */
+
+  putreg32(MPDDRC_MR_MODE_NOP, SAM_MPDDRC_MR);
+
+  /* Perform a write access to any DDR2-SDRAM address to
+   * acknowledge this command.
+   */
+
+  *ddr = 0;
+
+  /* Now CKE is driven high. */
+
+  /* Wait 400 ns min */
+
+  sam_sdram_delay(NSEC_TO_COUNT(400));
+
+  /* Step 5: An all banks precharge command is issued to the DDR2-SDRAM. */
+
+  putreg32(MPDDRC_MR_MODE_PRCGALL, SAM_MPDDRC_MR);
+
+  /* Perform a write access to any DDR2-SDRAM address to
+   * acknowledge this command.
+   */
+
+  *ddr = 0;
+
+  /* Wait 400 ns min */
+
+  sam_sdram_delay(NSEC_TO_COUNT(400));
+
+  /* Step 6: An Extended Mode Register set (EMRS2) cycle is  issued to chose
+   * between commercialor high  temperature operations.
+   *
+   * The write address must be chosen so that BA[1] is set to 1 and BA[0] is
+   * set to 0.
+   */
+
+  putreg32(MPDDRC_MR_MODE_EXTLMR, SAM_MPDDRC_MR);
+  *((volatile uint8_t *)(ddr + DDR2_BA1)) = 0;
+
+  /* Wait 2 cycles min */
+
+  sam_sdram_delay(100);  /* CYCLES_TO_COUNT(2) */
+
+  /* Step 7: An Extended Mode Register set (EMRS3) cycle is issued to set
+   * all registers to 0.
+   *
+   * The write address must be chosen so that BA[1] is set to 1 and BA[0] is
+   * set to 1.
+   */
+
+  putreg32(MPDDRC_MR_MODE_LMR, SAM_MPDDRC_MR);
+  *((volatile uint8_t *)(ddr + DDR2_BA1 + DDR2_BA0)) = 0;
+
+  /* Wait 2 cycles min */
+
+  sam_sdram_delay(100);  /* CYCLES_TO_COUNT(2) */
+
+  /* Step 8:  An Extended Mode Register set (EMRS1) cycle
+   * is issued to enable DLL.
+   *
+   * The write address must be chosen so that BA[1] is set to
+   * 0 and BA[0] is set to 1.
+   */
+
+  putreg32(MPDDRC_MR_MODE_EXTLMR, SAM_MPDDRC_MR);
+  *((volatile uint8_t *)(ddr + DDR2_BA0)) = 0;
+
+  /* An additional 200 cycles of clock are required for locking DLL */
+
+  sam_sdram_delay(10000);  /* CYCLES_TO_COUNT(200) */
+
+  /* Step 9:  Program DLL field into the Configuration Register. */
+
+  regval  = getreg32(SAM_MPDDRC_CR);
+  regval |= MPDDRC_CR_DLL;
+  putreg32(regval, SAM_MPDDRC_CR);
+
+  /* Step 10: A Mode Register set (MRS) cycle is issued to reset DLL.
+   *
+   * The write address must be chosen so that BA[1:0] bits are set to 0.
+   */
+
+  putreg32(MPDDRC_MR_MODE_LMR, SAM_MPDDRC_MR);
+  *ddr = 0;
+
+  /* Wait 2 cycles min */
+
+  sam_sdram_delay(100);  /* CYCLES_TO_COUNT(2) */
+
+  /* Step 11: An all banks precharge command is issued to the DDR2-SDRAM.
+   *
+   * Perform a write access to any DDR2-SDRAM address to acknowledge this
+   * command
+   */
+
+  putreg32(MPDDRC_MR_MODE_PRCGALL, SAM_MPDDRC_MR);
+  *ddr = 0;
+
+  /* Wait 2 cycles min */
+
+  sam_sdram_delay(100);  /* CYCLES_TO_COUNT(2) */
+
+  /* Step 12: Two auto-refresh (CBR) cycles are provided. Program the auto
+   * refresh command (CBR) into the Mode Register.
+   *
+   * Perform a write access to any DDR2-SDRAM address to acknowledge this
+   * command.
+   */
+
+  putreg32(MPDDRC_MR_MODE_RFSH, SAM_MPDDRC_MR);
+  *ddr = 0;
+
+  /* Wait 2 cycles min */
+
+  sam_sdram_delay(100);  /* CYCLES_TO_COUNT(2) */
+
+  /* Configure 2nd CBR.
+   *
+   * Perform a write access to any DDR2-SDRAM address to
+   * acknowledge this command.
+   */
+
+  putreg32(MPDDRC_MR_MODE_RFSH, SAM_MPDDRC_MR);
+  *ddr = 0;
+
+  /* Wait 2 cycles min */
+
+  sam_sdram_delay(100);  /* CYCLES_TO_COUNT(2) */
+
+  /* Step 13: Program DLL field into the Configuration Register to low
+   * (Disable DLL reset).
+   */
+
+  regval  = getreg32(SAM_MPDDRC_CR);
+  regval &= ~MPDDRC_CR_DLL;
+  putreg32(regval, SAM_MPDDRC_CR);
+
+  /* Step 14: A Mode Register set (MRS) cycle is issued to program the
+   * parameters of the DDR2-SDRAM devices.
+   *
+   * The write address must be chosen so that BA[1:0] are set to 0.
+   */
+
+  putreg32(MPDDRC_MR_MODE_LMR, SAM_MPDDRC_MR);
+  *ddr = 0;
+
+  /* Wait 2 cycles min */
+
+  sam_sdram_delay(100);  /* CYCLES_TO_COUNT(2) */
+
+  /* Step 15: Program OCD field into the Configuration Register to high (OCD
+   * calibration default).
+   */
+
+  regval  = getreg32(SAM_MPDDRC_CR);
+  regval |= MPDDRC_CR_OCD_DEFAULT;
+  putreg32(regval, SAM_MPDDRC_CR);
+
+  /* Step 16: An Extended Mode Register set (EMRS1) cycle is issued to OCD
+   * default value.
+   *
+   * The write address must be chosen so that BA[1] is set to 0 and BA[0] is
+   * set to 1.
+   */
+
+  putreg32(MPDDRC_MR_MODE_EXTLMR, SAM_MPDDRC_MR);
+  *((volatile uint8_t *)(ddr + DDR2_BA0)) = 0;
+
+  /* Wait 2 cycles min */
+
+  sam_sdram_delay(100);  /* CYCLES_TO_COUNT(2) */
+
+  /* Step 17: Program OCD field into the Configuration Register to low (OCD
+   * calibration mode exit).
+   */
+
+#if 0
+  regval  = getreg32(SAM_MPDDRC_CR);
+  regval &= ~MPDDRC_CR_OCD_MASK;
+  putreg32(regval, SAM_MPDDRC_CR);
+#endif
+
+  /* Step 18: An Extended Mode Register set (EMRS1) cycle is issued to
+   * enable OCD exit.
+   *
+   * The write address must be chosen so that BA[1] is set to 0 and BA[0] is
+   * set to 1.
+   */
+
+  putreg32(MPDDRC_MR_MODE_EXTLMR, SAM_MPDDRC_MR);
+  *((volatile uint8_t *)(ddr + DDR2_BA0)) = 0;
+
+  /* Wait 2 cycles min */
+
+  sam_sdram_delay(100);  /* CYCLES_TO_COUNT(2) */
+
+  /* Step 19,20: A mode Normal command is provided. Program the Normal mode
+   * into Mode Register.
+   */
+
+  putreg32(MPDDRC_MR_MODE_NORMAL, SAM_MPDDRC_MR);
+  *ddr = 0;
+
+  /* Step 21: Write the refresh rate into the count field in the Refresh
+   * Timer register. The DDR2-SDRAM device requires a refresh every 15.625
+   * usec or 7.81 usec.
+   *
+   * With a 100MHz frequency, the refresh timer count register must to be
+   * set with (15.625 /100 MHz) = 1562 i.e. 0x061A or (7.81 /100MHz) = 781
+   * i.e. 0x030d.
+   */
+
+  /* For W971GG6SB, The refresh period is 64ms (commercial), This equates
+   * to an average refresh rate of 7.8125usec (commercial), To ensure all
+   * rows of all banks are properly refreshed, 8192 REFRESH commands must be
+   * issued every 64ms (commercial)
+   */
+
+  /* ((64 x 10(^-3))/8192) x133 x (10^6) */
+
+  /* Set Refresh timer 7.8125 us */
+
+  putreg32(MPDDRC_RTR_COUNT(300), SAM_MPDDRC_RTR);
+
+  /* OK now we are ready to work on the DDRSDR */
+
+  /* Wait for end of calibration */
+
+  sam_sdram_delay(500);
+}
+
+#endif /* CONFIG_SAMA5_DDRCS && !CONFIG_SAMA5_BOOT_SDRAM */
diff --git a/boards/arm/sama5/giant-board/src/sam_spi.c b/boards/arm/sama5/giant-board/src/sam_spi.c
new file mode 100644
index 0000000..a16b369
--- /dev/null
+++ b/boards/arm/sama5/giant-board/src/sam_spi.c
@@ -0,0 +1,166 @@
+/****************************************************************************
+ *  boards/arm/sama5/giant-board/src/sam_spi.c
+ *
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.  The
+ *  ASF licenses this file to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance with the
+ *  License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ *  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ *  License for the specific language governing permissions and limitations
+ *  under the License.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdint.h>
+#include <stdbool.h>
+#include <debug.h>
+#include <errno.h>
+
+#include <nuttx/spi/spi.h>
+#include <arch/board/board.h>
+
+#include "arm_arch.h"
+#include "chip.h"
+#include "sam_pio.h"
+#include "sam_spi.h"
+#include "giant-board.h"
+
+#if defined(CONFIG_SAMA5_SPI0) || defined(CONFIG_SAMA5_SPI1)
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: sam_spidev_initialize
+ *
+ * Description:
+ *   Called to configure SPI chip select PIO pins for the SAMA5D3-Xplained
+ *   board.
+ *
+ ****************************************************************************/
+
+void weak_function sam_spidev_initialize(void)
+{
+#ifdef CONFIG_SAMA5_SPI0
+#endif
+
+#ifdef CONFIG_SAMA5_SPI1
+#endif
+}
+
+/****************************************************************************
+ * Name:  sam_spi[0|1]select, sam_spi[0|1]status, and sam_spi[0|1]cmddata
+ *
+ * Description:
+ *   These external functions must be provided by board-specific logic.
+ *   They include:
+ *
+ *   o sam_spi[0|1]select is a functions tomanage the board-specific chip
+ *           selects
+ *   o sam_spi[0|1]status and sam_spi[0|1]cmddata:
+ *     Implementations of the status and cmddata methods of the SPI interface
+ *     defined by struct spi_ops_(see include/nuttx/spi/spi.h).
+ *     All other methods including sam_spibus_initialize()) are provided by
+ *     common SAM3/4 logic.
+ *
+ *  To use this common SPI logic on your board:
+ *
+ *   1. Provide logic in sam_boardinitialize() to configure SPI chip select
+ *      pins.
+ *   2. Provide sam_spi[0|1]select() and sam_spi[0|1]status() functions in
+ *      your board-specific logic.
+ *      These functions will perform chip selection and status operations
+ *      using PIOs in the way your board is configured.
+ *   2. If CONFIG_SPI_CMDDATA is defined in the NuttX configuration, provide
+ *      sam_spi[0|1]cmddata() functions in your board-specific logic.  This
+ *      function will perform cmd/data selection operations using PIOs in
+ *      the way your board is configured.
+ *   3. Add a call to sam_spibus_initialize() in your low level application
+ *      initialization logic
+ *   4. The handle returned by sam_spibus_initialize() may then be used to
+ *      bind the SPI driver to higher level logic (e.g., calling
+ *      mmcsd_spislotinitialize(), for example, will bind the SPI driver to
+ *      the SPI MMC/SD driver).
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: sam_spi[0|1]select
+ *
+ * Description:
+ *   PIO chip select pins may be programmed by the board specific logic in
+ *   one of two different ways.  First, the pins may be programmed as SPI
+ *   peripherals.  In that case, the pins are completely controlled by the
+ *   SPI driver.  This method still needs to be provided, but it may be only
+ *   a stub.
+ *
+ *   An alternative way to program the PIO chip select pins is as a normal
+ *   PIO output.  In that case, the automatic control of the CS pins is
+ *   bypassed and this function must provide control of the chip select.
+ *   NOTE:  In this case, the PIO output pin does *not* have to be the
+ *   same as the NPCS pin normal associated with the chip select number.
+ *
+ * Input Parameters:
+ *   devid - Identifies the (logical) device
+ *   selected - TRUE:Select the device, FALSE:De-select the device
+ *
+ * Returned Value:
+ *   None
+ *
+ ****************************************************************************/
+
+#ifdef CONFIG_SAMA5_SPI0
+void sam_spi0select(uint32_t devid, bool selected)
+{
+}
+#endif
+
+#ifdef CONFIG_SAMA5_SPI1
+void sam_spi1select(uint32_t devid, bool selected)
+{
+}
+#endif
+
+/****************************************************************************
+ * Name: sam_spi[0|1]status
+ *
+ * Description:
+ *   Return status information associated with the SPI device.
+ *
+ * Input Parameters:
+ *   devid - Identifies the (logical) device
+ *
+ * Returned Value:
+ *   Bit-encoded SPI status (see include/nuttx/spi/spi.h.
+ *
+ ****************************************************************************/
+
+#ifdef CONFIG_SAMA5_SPI0
+uint8_t sam_spi0status(FAR struct spi_dev_s *dev, uint32_t devid)
+{
+  return 0;
+}
+#endif
+
+#ifdef CONFIG_SAMA5_SPI0
+uint8_t sam_spi1status(FAR struct spi_dev_s *dev, uint32_t devid)
+{
+  return 0;
+}
+#endif
+
+#endif /* CONFIG_SAMA5_SPI0 || CONFIG_SAMA5_SPI1 */
diff --git a/boards/arm/sama5/giant-board/src/sam_usb.c b/boards/arm/sama5/giant-board/src/sam_usb.c
new file mode 100644
index 0000000..7f726b5
--- /dev/null
+++ b/boards/arm/sama5/giant-board/src/sam_usb.c
@@ -0,0 +1,479 @@
+/****************************************************************************
+ *  boards/arm/sama5/giant-board/src/sam_usb.c
+ *
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.  The
+ *  ASF licenses this file to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance with the
+ *  License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ *  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ *  License for the specific language governing permissions and limitations
+ *  under the License.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <sys/types.h>
+#include <stdint.h>
+#include <stdbool.h>
+#include <sched.h>
+#include <errno.h>
+#include <assert.h>
+#include <debug.h>
+
+#include <nuttx/irq.h>
+#include <nuttx/kthread.h>
+#include <nuttx/usb/usbdev.h>
+#include <nuttx/usb/usbhost.h>
+#include <nuttx/usb/usbdev_trace.h>
+
+#include "arm_arch.h"
+#include "sam_pio.h"
+#include "sam_usbhost.h"
+#include "hardware/sam_ohci.h"
+#include "giant-board.h"
+
+#if defined(CONFIG_SAMA5_UHPHS) || defined(CONFIG_SAMA5_UDPHS)
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+#ifndef CONFIG_SAMA5D3XPLAINED_USBHOST_PRIO
+#  define CONFIG_SAMA5D3XPLAINED_USBHOST_PRIO 50
+#endif
+
+#ifndef CONFIG_SAMA5D3XPLAINED_USBHOST_STACKSIZE
+#  define CONFIG_SAMA5D3XPLAINED_USBHOST_STACKSIZE 1024
+#endif
+
+#ifdef HAVE_USBDEV
+#  undef CONFIG_SAMA5_UHPHS_RHPORT1
+#endif
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/* Retained device driver handles */
+
+#ifdef CONFIG_SAMA5_OHCI
+static struct usbhost_connection_s *g_ohciconn;
+#endif
+#ifdef CONFIG_SAMA5_EHCI
+static struct usbhost_connection_s *g_ehciconn;
+#endif
+
+/* Overcurrent interrupt handler */
+
+#if defined(HAVE_USBHOST) && defined(CONFIG_SAMA5_PIOD_IRQ)
+static xcpt_t g_ochandler;
+#endif
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: usbhost_waiter
+ *
+ * Description:
+ *   Wait for USB devices to be connected to either the OHCI or EHCI hub.
+ *
+ ****************************************************************************/
+
+#ifdef HAVE_USBHOST
+#ifdef CONFIG_DEBUG_USB
+static int usbhost_waiter(struct usbhost_connection_s *dev,
+                          const char *hcistr)
+#else
+static int usbhost_waiter(struct usbhost_connection_s *dev)
+#endif
+{
+  struct usbhost_hubport_s *hport;
+
+  uinfo("Running\n");
+  for (; ; )
+    {
+      /* Wait for the device to change state */
+
+      DEBUGVERIFY(CONN_WAIT(dev, &hport));
+      uinfo("%s\n", hport->connected ? "connected" : "disconnected");
+
+      /* Did we just become connected? */
+
+      if (hport->connected)
+        {
+          /* Yes.. enumerate the newly connected device */
+
+          CONN_ENUMERATE(dev, hport);
+        }
+    }
+
+  /* Keep the compiler from complaining */
+
+  return 0;
+}
+#endif
+
+/****************************************************************************
+ * Name: ohci_waiter
+ *
+ * Description:
+ *   Wait for USB devices to be connected to the OHCI hub.
+ *
+ ****************************************************************************/
+
+#ifdef CONFIG_SAMA5_OHCI
+static int ohci_waiter(int argc, char *argv[])
+{
+#ifdef CONFIG_DEBUG_USB
+  return usbhost_waiter(g_ohciconn, "OHCI");
+#else
+  return usbhost_waiter(g_ohciconn);
+#endif
+}
+#endif
+
+/****************************************************************************
+ * Name: ehci_waiter
+ *
+ * Description:
+ *   Wait for USB devices to be connected to the EHCI hub.
+ *
+ ****************************************************************************/
+
+#ifdef CONFIG_SAMA5_EHCI
+static int ehci_waiter(int argc, char *argv[])
+{
+#ifdef CONFIG_DEBUG_USB
+  return usbhost_waiter(g_ehciconn, "EHCI");
+#else
+  return usbhost_waiter(g_ehciconn);
+#endif
+}
+#endif
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: sam_usbinitialize
+ *
+ * Description:
+ *   Called from sam_usbinitialize very early in inialization to setup
+ *   USB-related GPIO pins for the SAMA5D3-Xplained board.
+ *
+ * USB Ports
+ *   The SAMA5D2 series-MB features three USB communication ports:
+ *
+ *     1. Port A Host High Speed (EHCI) and Full Speed (OHCI) multiplexed
+ *        with USB Device High Speed Micro AB connector, J20
+ *
+ *     2. Port B Host High Speed (EHCI) and Full Speed (OHCI) standard type A
+ *        connector, J19 upper port
+ *
+ *     3. Port C Host Full Speed (OHCI) only standard type A connector, J19
+ *        lower port
+ *
+ *   The two USB host ports (only) are equipped with 500-mA high-side power
+ *   switch for self-powered and bus-powered applications.
+ *
+ * That offers a lot of flexibility.  However, here we enable the ports only
+ * as follows:
+ *
+ *   Port A -- USB device
+ *   Port B -- EHCI host
+ *   Port C -- OHCI host
+ *
+ ****************************************************************************/
+
+void weak_function sam_usbinitialize(void)
+{
+#ifdef HAVE_USBDEV
+  /* Configure Port A to support the USB device function */
+
+#endif
+
+#ifdef HAVE_USBHOST
+#  ifdef CONFIG_SAMA5_UHPHS_RHPORT1
+#  endif
+
+#  ifdef CONFIG_SAMA5_UHPHS_RHPORT2
+#  endif
+#endif /* HAVE_USBHOST */
+}
+
+/****************************************************************************
+ * Name: sam_usbhost_initialize
+ *
+ * Description:
+ *   Called at application startup time to initialize the USB host
+ *   functionality.
+ *   This function will start a thread that will monitor for device
+ *   connection/disconnection events.
+ *
+ ****************************************************************************/
+
+#ifdef HAVE_USBHOST
+int sam_usbhost_initialize(void)
+{
+  pid_t pid;
+  int ret;
+
+  /* First, register all of the class drivers needed to support the drivers
+   * that we care about
+   */
+
+#ifdef CONFIG_USBHOST_HUB
+  /* Initialize USB hub class support */
+
+  ret = usbhost_hub_initialize();
+  if (ret < 0)
+    {
+      uerr("ERROR: usbhost_hub_initialize failed: %d\n", ret);
+    }
+#endif
+
+#ifdef CONFIG_USBHOST_MSC
+  /* Register theUSB host Mass Storage Class */
+
+  ret = usbhost_msc_initialize();
+  if (ret != OK)
+    {
+      uerr("ERROR: Failed to register the mass storage class: %d\n", ret);
+    }
+#endif
+
+#ifdef CONFIG_USBHOST_CDCACM
+  /* Register the CDC/ACM serial class */
+
+  ret = usbhost_cdcacm_initialize();
+  if (ret != OK)
+    {
+      uerr("ERROR: Failed to register the CDC/ACM serial class: %d\n", ret);
+    }
+#endif
+
+#ifdef CONFIG_USBHOST_HIDKBD
+  /* Register the USB host HID keyboard class driver */
+
+  ret = usbhost_kbdinit();
+  if (ret != OK)
+    {
+      uerr("ERROR: Failed to register the KBD class\n");
+    }
+#endif
+
+  /* Then get an instance of the USB host interface. */
+
+#ifdef CONFIG_SAMA5_OHCI
+  /* Get an instance of the USB OHCI interface */
+
+  g_ohciconn = sam_ohci_initialize(0);
+  if (!g_ohciconn)
+    {
+      uerr("ERROR: sam_ohci_initialize failed\n");
+      return -ENODEV;
+    }
+
+  /* Start a thread to handle device connection. */
+
+  pid = kthread_create("OHCI Monitor",
+                       CONFIG_SAMA5D27_GIANT_BOARD_USBHOST_PRIO,
+                       CONFIG_SAMA5D27_GIANT_BOARD_USBHOST_STACKSIZE,
+                       (main_t)ohci_waiter, (FAR char * const *)NULL);
+  if (pid < 0)
+    {
+      uerr("ERROR: Failed to create ohci_waiter task: %d\n", ret);
+      return -ENODEV;
+    }
+#endif
+
+#ifdef CONFIG_SAMA5_EHCI
+  /* Get an instance of the USB EHCI interface */
+
+  g_ehciconn = sam_ehci_initialize(0);
+  if (!g_ehciconn)
+    {
+      uerr("ERROR: sam_ehci_initialize failed\n");
+      return -ENODEV;
+    }
+
+  /* Start a thread to handle device connection. */
+
+  pid = kthread_create("EHCI Monitor",
+                       CONFIG_SAMA5D27_GIANT_BOARD_USBHOST_PRIO,
+                       CONFIG_SAMA5D27_GIANT_BOARD_USBHOST_STACKSIZE,
+                       (main_t)ehci_waiter, (FAR char * const *)NULL);
+  if (pid < 0)
+    {
+      uerr("ERROR: Failed to create ehci_waiter task: %d\n", ret);
+      return -ENODEV;
+    }
+#endif
+
+  return OK;
+}
+#endif
+
+/****************************************************************************
+ * Name: sam_usbhost_vbusdrive
+ *
+ * Description:
+ *   Enable/disable driving of VBUS 5V output.
+ *   This function must be provided by each platform that implements the
+ *   OHCI or EHCI host interface
+ *
+ * Input Parameters:
+ *   rhport - Selects root hub port to be powered host interface.
+ *            See SAM_RHPORT_* definitions above.
+ *   enable - true: enable VBUS power; false: disable VBUS power
+ *
+ * Returned Value:
+ *   None
+ *
+ ****************************************************************************/
+
+#ifdef HAVE_USBHOST
+void sam_usbhost_vbusdrive(int rhport, bool enable)
+{
+  pio_pinset_t pinset = 0;
+
+  uinfo("RHPort%d: enable=%d\n", rhport + 1, enable);
+
+  /* Pick the PIO configuration associated with the selected root hub port */
+
+  switch (rhport)
+    {
+    case SAM_RHPORT1:
+#if !defined(CONFIG_SAMA5_UHPHS_RHPORT1)
+      uerr("ERROR: RHPort1 is not available in this configuration\n");
+      return;
+
+#elif !defined(PIO_USBA_VBUS_ENABLE)
+      /* SAMA5D2-XULT has no port A VBUS enable */
+
+      uerr("ERROR: RHPort1 has no VBUS enable\n");
+      return;
+#else
+      break;
+#endif
+
+    case SAM_RHPORT2:
+#ifndef CONFIG_SAMA5_UHPHS_RHPORT2
+      uerr("ERROR: RHPort2 is not available in this configuration\n");
+      return;
+#else
+      break;
+#endif
+
+    default:
+      uerr("ERROR: RHPort%d is not supported\n", rhport + 1);
+      return;
+    }
+
+  /* Then enable or disable VBUS power (active high) */
+
+  if (enable)
+    {
+      /* Enable the Power Switch by driving the enable pin high */
+
+      sam_piowrite(pinset, true);
+    }
+  else
+    {
+      /* Disable the Power Switch by driving the enable pin low */
+
+      sam_piowrite(pinset, false);
+    }
+}
+#endif
+
+/****************************************************************************
+ * Name: sam_setup_overcurrent
+ *
+ * Description:
+ *   Setup to receive an interrupt-level callback if an overcurrent condition
+ *   is detected on port B or C.
+ *
+ *   REVISIT: Since this is a common signal, we will need to come up with
+ *   some way to inform both EHCI and OHCI drivers when this error occurs.
+ *
+ * Input Parameters:
+ *   handler - New overcurrent interrupt handler
+ *
+ * Returned Value:
+ *   Old overcurrent interrupt handler
+ *
+ ****************************************************************************/
+
+#ifdef HAVE_USBHOST
+xcpt_t sam_setup_overcurrent(xcpt_t handler)
+{
+#if defined(CONFIG_SAMA5_PIOD_IRQ) && (defined(CONFIG_SAMA5_UHPHS_RHPORT2) || \
+    defined(CONFIG_SAMA5_UHPHS_RHPORT3))
+
+  xcpt_t oldhandler;
+  irqstate_t flags;
+
+  /* Disable interrupts until we are done.  This guarantees that the
+   * following operations are atomic.
+   */
+
+  flags = enter_critical_section();
+
+  /* Get the old interrupt handler and save the new one */
+
+  oldhandler  = g_ochandler;
+  g_ochandler = handler;
+
+  /* Configure the interrupt */
+
+  sam_pioirq(PIO_USBBC_VBUS_OVERCURRENT);
+  irq_attach(IRQ_USBBC_VBUS_OVERCURRENT, handler, NULL);
+  sam_pioirqenable(IRQ_USBBC_VBUS_OVERCURRENT);
+
+  /* Return the old handler (so that it can be restored) */
+
+  leave_critical_section(flags);
+  return oldhandler;
+
+#else
+  return NULL;
+
+#endif
+}
+#endif /* CONFIG_SAMA5_PIOD_IRQ ... */
+
+/****************************************************************************
+ * Name:  sam_usbsuspend
+ *
+ * Description:
+ *   Board logic must provide the sam_usbsuspend logic if the USBDEV driver
+ *   is used.
+ *   This function is called whenever the USB enters or leaves suspend mode.
+ *   This is an opportunity for the board logic to shutdown clocks, power,
+ *   etc. while the USB is suspended.
+ *
+ ****************************************************************************/
+
+#ifdef CONFIG_USBDEV
+void sam_usbsuspend(FAR struct usbdev_s *dev, bool resume)
+{
+  uinfo("resume: %d\n", resume);
+}
+#endif
+#endif /* CONFIG_SAMA5_UHPHS || CONFIG_SAMA5_UDPHS */
diff --git a/boards/arm/sama5/giant-board/src/sam_usbmsc.c b/boards/arm/sama5/giant-board/src/sam_usbmsc.c
new file mode 100644
index 0000000..61211c8
--- /dev/null
+++ b/boards/arm/sama5/giant-board/src/sam_usbmsc.c
@@ -0,0 +1,91 @@
+/****************************************************************************
+ *  boards/arm/sama5/giant-board/src/sam_usbmsc.c
+ *
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.  The
+ *  ASF licenses this file to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance with the
+ *  License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ *  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ *  License for the specific language governing permissions and limitations
+ *  under the License.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdio.h>
+#include <syslog.h>
+#include <errno.h>
+
+#include <nuttx/board.h>
+
+#include "giant-board.h"
+
+#ifdef CONFIG_USBMSC
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+/* Configuration ************************************************************/
+
+#ifndef HAVE_AT25
+#  error AT25 Serial FLASH not supported
+#endif
+
+#ifndef CONFIG_SAMA5D3XPLAINED_AT25_FTL
+#  error AT25 FTL support required (CONFIG_SAMA5D3XPLAINED_AT25_FTL)
+#  undef HAVE_AT25
+#endif
+
+#ifndef CONFIG_SYSTEM_USBMSC_DEVMINOR1
+#  define CONFIG_SYSTEM_USBMSC_DEVMINOR1 0
+#endif
+
+#if CONFIG_SYSTEM_USBMSC_DEVMINOR1 != AT25_MINOR
+#  error Confusion in the assignment of minor device numbers
+#  undef HAVE_AT25
+#endif
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: board_usbmsc_initialize
+ *
+ * Description:
+ *   Perform architecture specific initialization as needed to establish
+ *   the mass storage device that will be exported by the USB MSC device.
+ *
+ ****************************************************************************/
+
+int board_usbmsc_initialize(int port)
+{
+  /* Initialize the AT25 MTD driver */
+
+#ifdef HAVE_AT25
+  int ret = sam_at25_automount(AT25_MINOR);
+  if (ret < 0)
+    {
+      syslog(LOG_ERR, "ERROR: sam_at25_automount failed: %d\n", ret);
+    }
+
+  return ret;
+#else
+  return -ENODEV;
+#endif
+}
+
+#endif /* CONFIG_USBMSC */
diff --git a/boards/arm/sama5/giant-board/src/sam_userleds.c b/boards/arm/sama5/giant-board/src/sam_userleds.c
new file mode 100644
index 0000000..7552953
--- /dev/null
+++ b/boards/arm/sama5/giant-board/src/sam_userleds.c
@@ -0,0 +1,98 @@
+/****************************************************************************
+ *  boards/arm/sama5/giant-board/src/sam_userleds.c
+ *
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.  The
+ *  ASF licenses this file to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance with the
+ *  License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ *  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ *  License for the specific language governing permissions and limitations
+ *  under the License.
+ *
+ ****************************************************************************/
+
+/* There is an orange status LED on board the Giant Board
+ * driven by pin (PA6).
+ *
+ *   ------------------------------ ------------------- ---------------------
+ *   SAMA5D27 PIO                   SIGNAL              USAGE
+ *   ------------------------------ ------------------- ---------------------
+ *   PA6                            STATUS_LED          Orange LED
+ *   ------------------------------ ------------------- ---------------------
+ */
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdint.h>
+#include <stdbool.h>
+#include <debug.h>
+
+#include <arch/board/board.h>
+
+#include "sam_pio.h"
+#include "giant-board.h"
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: board_userled_initialize
+ ****************************************************************************/
+
+uint32_t board_userled_initialize(void)
+{
+  /* Configure LED PIOs for output */
+
+#ifndef CONFIG_ARCH_LEDS
+  sam_configpio(PIO_LED_ORANGE);
+#endif
+  return BOARD_NLEDS;
+}
+
+/****************************************************************************
+ * Name: board_userled
+ ****************************************************************************/
+
+void board_userled(int led, bool ledon)
+{
+  uint32_t ledcfg;
+
+  if (led == BOARD_ORANGE)
+    {
+      ledcfg = PIO_LED_ORANGE;
+    }
+  else
+    {
+      return;
+    }
+
+  /* High illuminates */
+
+  sam_piowrite(ledcfg, ledon);
+}
+
+/****************************************************************************
+ * Name: board_userled_all
+ ****************************************************************************/
+
+void board_userled_all(uint32_t ledset)
+{
+  bool ledon;
+
+  /* High illuminates */
+
+  ledon = ((ledset & BOARD_ORANGE_BIT) != 0);
+  sam_piowrite(PIO_LED_ORANGE, ledon);
+}


[incubator-nuttx] 05/05: converted spaces to tabs for giant-board entries

Posted by gn...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

gnutt pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git

commit 6e7d966b0ad16b5b421fbd54fecfe5003e0e54d1
Author: Adam Feuer <ad...@starcat.io>
AuthorDate: Wed Sep 16 12:08:16 2020 -0700

    converted spaces to tabs for giant-board entries
---
 boards/Kconfig                       |   4 +-
 boards/arm/sama5/giant-board/Kconfig | 149 +++++++++++++++++------------------
 2 files changed, 76 insertions(+), 77 deletions(-)

diff --git a/boards/Kconfig b/boards/Kconfig
index b42b7b6..ef0913f 100644
--- a/boards/Kconfig
+++ b/boards/Kconfig
@@ -2277,8 +2277,8 @@ config ARCH_BOARD
 	default "s32k146evb"               if ARCH_BOARD_S32K146EVB
 	default "s32k148evb"               if ARCH_BOARD_S32K148EVB
 	default "sabre-6quad"              if ARCH_BOARD_SABRE_6QUAD
-    default "sama5d2-xult"             if ARCH_BOARD_SAMA5D2_XULT
-    default "giant-board"              if ARCH_BOARD_GIANT_BOARD
+	default "sama5d2-xult"             if ARCH_BOARD_SAMA5D2_XULT
+	default "giant-board"              if ARCH_BOARD_GIANT_BOARD
 	default "sama5d3x-ek"              if ARCH_BOARD_SAMA5D3X_EK
 	default "sama5d3-xplained"         if ARCH_BOARD_SAMA5D3_XPLAINED
 	default "sama5d4-ek"               if ARCH_BOARD_SAMA5D4_EK
diff --git a/boards/arm/sama5/giant-board/Kconfig b/boards/arm/sama5/giant-board/Kconfig
index 2c31aef..ccc8430 100644
--- a/boards/arm/sama5/giant-board/Kconfig
+++ b/boards/arm/sama5/giant-board/Kconfig
@@ -6,122 +6,121 @@
 if ARCH_BOARD_GIANT_BOARD
 
 choice
-    prompt "CPU Frequency"
-    default SAMA5D27_GIANT_BOARD_492MHZ
+	prompt "CPU Frequency"
+	default SAMA5D27_GIANT_BOARD_492MHZ
 
 config SAMA5D27_GIANT_BOARD_492MHZ
-    bool "492 MHz"
+	bool "492 MHz"
 
 endchoice # CPU Frequency
 
 config SAMA5D27_GIANT_BOARD_USBHOST_STACKSIZE
-    int "USB host waiter stack size"
-    default 1536 if USBHOST_HUB
-    default 1024 if !USBHOST_HUB
-    depends on USBHOST
+	int "USB host waiter stack size"
+	default 1536 if USBHOST_HUB
+	default 1024 if !USBHOST_HUB
+	depends on USBHOST
 
 config SAMA5D27_GIANT_BOARD_USBHOST_PRIO
-    int "USB host waiter task priority"
-    default 100
-    depends on USBHOST
+	int "USB host waiter task priority"
+	default 100
+	depends on USBHOST
 
 config SAMA5_SDMMC
-    bool "enable SDMMC controller"
-    default y if SAMA5_HAVE_SDMMC
-    select SDIO_DMA
-    select SCHED_WORKQUEUE
-    select SCHED_HPWORK
-    select MMCSD
-    select MMCSD_SDIO
-    select SDIO_BLOCKSETUP
-    select ARCH_HAVE_SDIO
-    select SAMA5_SDMMC_DMA
-    ---help---
-    Enable SD Card interface SDMMC0. Selects SAMA5_SDMMC SAMA5_SDMMC0
-    SAMA5_SDMMC_DMA SDIO_DMA SCHED_WORKQUEUE SCHED_HPWORK SDIO_BLOCKSETUP
+	bool "enable SDMMC controller"
+	default y if SAMA5_HAVE_SDMMC
+	select SDIO_DMA
+	select SCHED_WORKQUEUE
+	select SCHED_HPWORK
+	select MMCSD
+	select MMCSD_SDIO
+	select SDIO_BLOCKSETUP
+	select ARCH_HAVE_SDIO
+	select SAMA5_SDMMC_DMA
+	---help---
+		Enable SD Card interface SDMMC0. Selects SAMA5_SDMMC SAMA5_SDMMC0
+		SAMA5_SDMMC_DMA SDIO_DMA SCHED_WORKQUEUE SCHED_HPWORK SDIO_BLOCKSETUP
 
 config SAMA5_SDMMC0
-    bool "Enable SDMMC0 (built-in eMMC)"
-    default n if SAMA5_SDMMC
-    depends on SAMA5_SDMMC
+	bool "Enable SDMMC0 (built-in eMMC)"
+	default n if SAMA5_SDMMC
+	depends on SAMA5_SDMMC
 
 config SAMA5_SDMMC0_SIZE
-    int "SDMMC0 size in bytes"
-    default 4294967296
-    depends on SAMA5_SDMMC0
-    ---help---
-    Size of eMMC flash in bytes. Default: 4GB
+	int "SDMMC0 size in bytes"
+	default 4294967296
+	depends on SAMA5_SDMMC0
+	---help---
+		Size of eMMC flash in bytes. Default: 4GB
 
 config SAMA5D27_SDMMC0_MOUNT
-    bool "Mount SDMMC0 at startup"
-    default n
-    depends on SAMA5_SDMMC0
+	bool "Mount SDMMC0 at startup"
+	default n
+	depends on SAMA5_SDMMC0
 
 config SAMA5D27_SDMMC0_MOUNT_BLKDEV
-    string "SDMMC0 block device name"
-    default mmc0
-    depends on SAMA5_SDMMC0
+	string "SDMMC0 block device name"
+	default mmc0
+	depends on SAMA5_SDMMC0
 
 config SAMA5D27_SDMMC0_MOUNT_MOUNTPOINT
-    string "SDMMC0 mountpoint"
-    default "/mnt/sdmmc0"
-    depends on SAMA5_SDMMC0
+	string "SDMMC0 mountpoint"
+	default "/mnt/sdmmc0"
+	depends on SAMA5_SDMMC0
 
 config SAMA5D27_SDMMC0_MOUNT_FSTYPE
-    string "SDMMC0 file system type"
-    default "vfat"
-    depends on SAMA5_SDMMC0
+	string "SDMMC0 file system type"
+	default "vfat"
+	depends on SAMA5_SDMMC0
 
 config CONFIG_SAMA5_SDMMC1_WIDTH_D1_D8
-    bool "SDMMC0 data bus width 8 bits"
-    default y
-    depends on SAMA5_SDMMC0
+	bool "SDMMC0 data bus width 8 bits"
+	default y
+	depends on SAMA5_SDMMC0
 
 config SAMA5_SDMMC1
-    bool "Enable SDMMC1"
-    default y if SAMA5_SDMMC
-    select SAMA5_SDMMC1_WIDTH_D1_D4
-    depends on SAMA5_SDMMC
+	bool "Enable SDMMC1"
+	default y if SAMA5_SDMMC
+	select SAMA5_SDMMC1_WIDTH_D1_D4
+	depends on SAMA5_SDMMC
 
 config SAMA5_SDMMC1_SIZE
-    int "SDMMC1 size in bytes"
-    default 1073741824
-    depends on SAMA5_SDMMC1
-    ---help---
-    Size of SD Card in bytes. Default: 16GB
+	int "SDMMC1 size in bytes"
+	default 1073741824
+	depends on SAMA5_SDMMC1
+	---help---
+		Size of SD Card in bytes. Default: 16GB
 
 config SAMA5D27_SDMMC1_MOUNT
-    bool "Mount SDMMC1 at startup"
-    default n
-    depends on SAMA5_SDMMC1
+	bool "Mount SDMMC1 at startup"
+	default n
+	depends on SAMA5_SDMMC1
 
 config SAMA5D27_SDMMC1_MOUNT_BLKDEV
-    string "SDMMC1 block device name"
-    default mmc1
-    depends on SAMA5_SDMMC1
+	string "SDMMC1 block device name"
+	default mmc1
+	depends on SAMA5_SDMMC1
 
 config SAMA5D27_SDMMC1_MOUNT_MOUNTPOINT
-    string "SDMMC1 mountpoint"
-    default "/mnt/sdmmc1"
-    depends on SAMA5_SDMMC1
+	string "SDMMC1 mountpoint"
+	default "/mnt/sdmmc1"
+	depends on SAMA5_SDMMC1
 
 config SAMA5D27_SDMMC1_MOUNT_FSTYPE
-    string "SDMMC1 file system type"
-    default "vfat"
-    depends on SAMA5_SDMMC1
+	string "SDMMC1 file system type" default "vfat"
+	depends on SAMA5_SDMMC1
 
 config MMCSD_HAVE_CARDDETECT
-    bool "SDMMC1 card detect"
-    default y
-    depends on SAMA5_SDMMC1
+	bool "SDMMC1 card detect"
+	default y
+	depends on SAMA5_SDMMC1
 
 config SAMA5_SDMMC1_WIDTH_D1_D4
-    bool "SDMMC1 data bus width 4 bits"
-    default y
-    depends on SAMA5_SDMMC1
+	bool "SDMMC1 data bus width 4 bits"
+	default y
+	depends on SAMA5_SDMMC1
 
 config SAMA5_SYSTEMRESET
-    bool "Enable system reset - this will enable the nsh reboot command"
-    select BOARDCTL_RESET
+	bool "Enable system reset - this will enable the nsh reboot command"
+	select BOARDCTL_RESET
 
 endif # ARCH_BOARD_GIANT_BOARD


[incubator-nuttx] 04/05: Update boards/arm/sama5/giant-board/src/sam_i2schar.c

Posted by gn...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

gnutt pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git

commit 1aed2f1a2a75a047e925dfac3953efaae53d07a6
Author: Adam Feuer <ad...@adamfeuer.com>
AuthorDate: Wed Sep 16 12:06:05 2020 -0700

    Update boards/arm/sama5/giant-board/src/sam_i2schar.c
    
    Co-authored-by: patacongo <sp...@yahoo.com>
---
 boards/arm/sama5/giant-board/src/sam_i2schar.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/boards/arm/sama5/giant-board/src/sam_i2schar.c b/boards/arm/sama5/giant-board/src/sam_i2schar.c
index 362fd1b..aa88dee 100644
--- a/boards/arm/sama5/giant-board/src/sam_i2schar.c
+++ b/boards/arm/sama5/giant-board/src/sam_i2schar.c
@@ -86,7 +86,7 @@ int i2schar_devinit(void)
       i2s = sam_ssc_initialize(CONFIG_GIANT_BOARD_SSC_PORT);
       if (!i2s)
         {
-          _err("ERROR: Failed to get the SAMA5 SSC/I2S driver for SSC%d\n",
+          auderr("ERROR: Failed to get the SAMA5 SSC/I2S driver for SSC%d\n",
               CONFIG_GIANT_BOARD_SSC_PORT);
           return -ENODEV;
         }


[incubator-nuttx] 02/05: Update boards/arm/sama5/giant-board/src/sam_i2schar.c

Posted by gn...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

gnutt pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git

commit 1784a3a675bc3dd8fcff43f0bc83a2c04238638c
Author: Adam Feuer <ad...@adamfeuer.com>
AuthorDate: Wed Sep 16 09:41:41 2020 -0700

    Update boards/arm/sama5/giant-board/src/sam_i2schar.c
    
    Co-authored-by: patacongo <sp...@yahoo.com>
---
 boards/arm/sama5/giant-board/src/sam_i2schar.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/boards/arm/sama5/giant-board/src/sam_i2schar.c b/boards/arm/sama5/giant-board/src/sam_i2schar.c
index 7ccf1b8..362fd1b 100644
--- a/boards/arm/sama5/giant-board/src/sam_i2schar.c
+++ b/boards/arm/sama5/giant-board/src/sam_i2schar.c
@@ -96,7 +96,7 @@ int i2schar_devinit(void)
       ret = i2schar_register(i2s, CONFIG_GIANT_BOARD_I2SCHAR_MINOR);
       if (ret < 0)
         {
-          aerr("ERROR: i2schar_register failed: %d\n", ret);
+          auderr("ERROR: i2schar_register failed: %d\n", ret);
           return ret;
         }
 


[incubator-nuttx] 03/05: Update boards/arm/sama5/giant-board/src/sam_sdram.c

Posted by gn...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

gnutt pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git

commit 6a31da67ff1c9d6c188fb021016b1da837b81b97
Author: Adam Feuer <ad...@adamfeuer.com>
AuthorDate: Wed Sep 16 09:42:28 2020 -0700

    Update boards/arm/sama5/giant-board/src/sam_sdram.c
    
    Co-authored-by: patacongo <sp...@yahoo.com>
---
 boards/arm/sama5/giant-board/src/sam_sdram.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/boards/arm/sama5/giant-board/src/sam_sdram.c b/boards/arm/sama5/giant-board/src/sam_sdram.c
index 97aa1d3..bc61f08 100644
--- a/boards/arm/sama5/giant-board/src/sam_sdram.c
+++ b/boards/arm/sama5/giant-board/src/sam_sdram.c
@@ -212,7 +212,8 @@ void sam_sdram_config(void)
 
   /* SAMA5D27D1G uses Winbond W971GG6SB 1GB DDR2 RAM
    *
-   * See datasheet http://ww1.microchip.com/downloads/en/DeviceDoc/SAMA5D2-Plus-DDR2-LPDDR2-System-in-Package-(SIP)-60001484b.pdf
+   * See datasheet http://ww1.microchip.com/downloads/en/DeviceDoc/
+   *     SAMA5D2-Plus-DDR2-LPDDR2-System-in-Package-(SIP)-60001484b.pdf
    *
    */