SAMA5D4-EK: Add a configuration to load a boot program into AT25 FLASH

This commit is contained in:
Gregory Nutt
2014-06-28 08:40:11 -06:00
parent 7694c39527
commit 80fd710ce7
9 changed files with 1456 additions and 23 deletions
+34 -2
View File
@@ -63,10 +63,34 @@ config SAMA5D4EK_DRAM_START
SAMA5D4EK_DRAM_START is defined, then it will not wait but will,
instead, immediately start the program in DRAM.
config SAMA5D4EK_AT25_MAIN
bool "Build at25_main"
default n
depends on SAMA5_BOOT_ISRAM
---help---
at25_main is a tiny program that runs in ISRAM. at25_main will
enable SDRAM and configure the AT25 Serial FLASH. It will prompt
and then load an Intel HEX program into SDRAM over the serial
console. If the program is successfully loaded in SDRAM, at25_main
will copy the program at the beginning of the AT26 Serial FLASH.
If the jumpering is set correctly, the SAMA5D4 RomBOOT loader will
then boot the program from the serial FLASH the next time that it
reset.
config SAMA5D4EK_AT25_PROGSIZE
int "AT25 partition size"
default 131072
depends on SAMA5D4EK_AT25_MAIN
---help---
This is the size of the partition at the beginning to the AT25
serial FLASH that will be used to hold the boot program. Since
this program must run from SRAM, there would be no purpose int
making this size any larger than the size of the internal SRAM.
config SAMA5D4EK_DRAM_BOOT
bool "Using DRAM boot loader"
default y
depends on SAMA5_BOOT_SDRAM && !SAMA5D4EK_DRAM_MAIN
depends on SAMA5_BOOT_SDRAM && !SAMA5D4EK_DRAM_MAIN && !SAMA5D4EK_AT25_MAIN
---help---
Select this option if you are going to boot using the sdram_main
bootloader (created with SAMA5D4EK_DRAM_MAIN=y). This selection
@@ -115,7 +139,7 @@ endchoice # NAND FLASH configuration
config SAMA5D4EK_AT25_AUTOMOUNT
bool "AT25 serial FLASH auto-mount"
default n
depends on NSH_ARCHINIT && SAMA5_SPI0 && MTD_AT25
depends on (NSH_ARCHINIT || SAMA5D4EK_AT25_MAIN) && SAMA5_SPI0 && MTD_AT25
---help---
Automatically initialize the AT25 SPI FLASH driver when NSH starts.
@@ -132,6 +156,14 @@ config SAMA5D4EK_AT25_FTL
any other file system. Any file system may be used, but there will
be no wear-leveling.
config SAMA5D4EK_AT25_CHARDEV
bool "Create AT25 Serial FLASH character driver"
---help---
Create the MTD driver for the AT25 and "wrap" the AT25 as a standard
character driver that could then, for example, via simple open, close,
read, write file system operations. There will be no wear-leveling
in this configuration.
config SAMA5D4EK_AT25_NXFFS
bool "Create AT25 serial FLASH NXFFS file system"
depends on FS_NXFFS
+130
View File
@@ -0,0 +1,130 @@
############################################################################
# configs/sama5d4-ek/at25boot/Make.defs
#
# Copyright (C) 2014 Gregory Nutt. All rights reserved.
# Author: Gregory Nutt <gnutt@nuttx.org>
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in
# the documentation and/or other materials provided with the
# distribution.
# 3. Neither the name NuttX nor the names of its contributors may be
# used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
############################################################################
include ${TOPDIR}/.config
include ${TOPDIR}/tools/Config.mk
include ${TOPDIR}$(DELIM)arch$(DELIM)arm$(DELIM)src$(DELIM)armv7-a$(DELIM)Toolchain.defs
ifeq ($(CONFIG_SAMA5_BOOT_ISRAM),y)
LDSCRIPT = isram.ld
endif
ifeq ($(CONFIG_SAMA5_BOOT_SDRAM),y)
ifeq ($(CONFIG_SAMA5D4EK_DRAM_BOOT),y)
LDSCRIPT = dramboot.ld
else
LDSCRIPT = uboot.ld
endif
endif
ifeq ($(WINTOOL),y)
# Windows-native toolchains
ARCHINCLUDES = -I. -isystem "${shell cygpath -w $(TOPDIR)$(DELIM)include}"
ARCHXXINCLUDES = -I. -isystem "${shell cygpath -w $(TOPDIR)$(DELIM)include}" -isystem "${shell cygpath -w $(TOPDIR)$(DELIM)include$(DELIM)cxx}"
ARCHSCRIPT = -T "${shell cygpath -w $(TOPDIR)$(DELIM)configs$(DELIM)$(CONFIG_ARCH_BOARD)$(DELIM)scripts$(DELIM)$(LDSCRIPT)}"
else
# Linux/Cygwin-native toolchain
ARCHINCLUDES = -I. -isystem $(TOPDIR)$(DELIM)include
ARCHXXINCLUDES = -I. -isystem $(TOPDIR)$(DELIM)include -isystem $(TOPDIR)$(DELIM)include$(DELIM)cxx
ARCHSCRIPT = -T$(TOPDIR)$(DELIM)configs$(DELIM)$(CONFIG_ARCH_BOARD)$(DELIM)scripts$(DELIM)$(LDSCRIPT)
endif
CC = $(CROSSDEV)gcc
CXX = $(CROSSDEV)g++
CPP = $(CROSSDEV)gcc -E
LD = $(CROSSDEV)ld
AR = $(ARCROSSDEV)ar rcs
NM = $(ARCROSSDEV)nm
OBJCOPY = $(CROSSDEV)objcopy
OBJDUMP = $(CROSSDEV)objdump
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 -fno-rtti
ARCHWARNINGS = -Wall -Wstrict-prototypes -Wshadow
ARCHWARNINGSXX = -Wall -Wshadow
ARCHDEFINES =
ARCHPICFLAGS = -fpic -msingle-pic-base -mpic-register=r10
CFLAGS = $(ARCHCFLAGS) $(ARCHWARNINGS) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES) -pipe
CPICFLAGS = $(ARCHPICFLAGS) $(CFLAGS)
CXXFLAGS = $(ARCHCXXFLAGS) $(ARCHWARNINGSXX) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHXXINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES) -pipe
CXXPICFLAGS = $(ARCHPICFLAGS) $(CXXFLAGS)
CPPFLAGS = $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES)
AFLAGS = $(CFLAGS) -D__ASSEMBLY__
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
OBJEXT = .o
LIBEXT = .a
EXEEXT =
ifneq ($(CROSSDEV),arm-nuttx-elf-)
LDFLAGS += -nostartfiles -nodefaultlibs
endif
ifeq ($(CONFIG_DEBUG_SYMBOLS),y)
LDFLAGS += -g
endif
HOSTCC = gcc
HOSTINCLUDES = -I.
HOSTCFLAGS = -Wall -Wstrict-prototypes -Wshadow -g -pipe
HOSTLDFLAGS =
ifeq ($(CONFIG_HOST_WINDOWS),y)
HOSTEXEEXT = .exe
else
HOSTEXEEXT =
endif
ifeq ($(WINTOOL),y)
# Windows-native host tools
DIRLINK = $(TOPDIR)$(DELIM)tools$(DELIM)copydir.sh
DIRUNLINK = $(TOPDIR)$(DELIM)tools$(DELIM)unlink.sh
MKDEP = $(TOPDIR)$(DELIM)tools$(DELIM)mknulldeps.sh
else
# Linux/Cygwin-native host tools
MKDEP = $(TOPDIR)$(DELIM)tools$(DELIM)mkdeps$(HOSTEXEEXT)
endif
File diff suppressed because it is too large Load Diff
+76
View File
@@ -0,0 +1,76 @@
#!/bin/bash
# configs/sama5d4-ek/at25boot/setenv.sh
#
# Copyright (C) 2014 Gregory Nutt. All rights reserved.
# Author: Gregory Nutt <gnutt@nuttx.org>
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in
# the documentation and/or other materials provided with the
# distribution.
# 3. Neither the name NuttX nor the names of its contributors may be
# used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
if [ "$_" = "$0" ] ; then
echo "You must source this script, not run it!" 1>&2
exit 1
fi
WD=`pwd`
if [ ! -x "setenv.sh" ]; then
echo "This script must be executed from the top-level NuttX build directory"
exit 1
fi
if [ -z "${PATH_ORIG}" ]; then
export PATH_ORIG="${PATH}"
fi
# This is the Cygwin path to the location where I installed the Atmel GCC
# toolchain under Windows. You will also have to edit this if you install
# this toolchain in any other location
#export TOOLCHAIN_BIN="/cygdrive/c/Program Files (x86)/Atmel/Atmel Toolchain/ARM GCC/Native/4.7.3.99/arm-gnu-toolchain/bin"
# This is the Cygwin path to the location where I installed the CodeSourcery
# toolchain under windows. You will also have to edit this if you install
# the CodeSourcery toolchain in any other location
#export TOOLCHAIN_BIN="/cygdrive/c/Program Files (x86)/CodeSourcery/Sourcery G++ Lite/bin"
export TOOLCHAIN_BIN="/cygdrive/c/Program Files (x86)/CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_EABI/bin"
# These are the Cygwin paths to the locations where I installed the Atollic
# toolchain under windows. You will also have to edit this if you install
# the Atollic toolchain in any other location. /usr/bin is added before
# the Atollic bin path because there is are binaries named gcc.exe and g++.exe
# at those locations as well.
#export TOOLCHAIN_BIN="/usr/bin:/cygdrive/c/Program Files (x86)/Atollic/TrueSTUDIO for ARM Pro 2.3.0/ARMTools/bin"
#export TOOLCHAIN_BIN="/usr/bin:/cygdrive/c/Program Files (x86)/Atollic/TrueSTUDIO for STMicroelectronics STM32 Lite 2.3.0/ARMTools/bin"
# This is the Cygwin path to the location where I build the buildroot
# toolchain.
#export TOOLCHAIN_BIN="${WD}/../misc/buildroot/build_arm/staging_dir/bin"
# Add the path to the toolchain to the PATH varialble
export PATH="${TOOLCHAIN_BIN}:/sbin:/usr/sbin:${PATH_ORIG}"
echo "PATH : ${PATH}"
+274
View File
@@ -0,0 +1,274 @@
/*****************************************************************************
* configs/sama5d4-ek/src/at25_main.c
*
* Copyright (C) 2014 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. Neither the name NuttX nor the names of its contributors may be
* used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
****************************************************************************/
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
#include <stdint.h>
#include <stdio.h>
#include <debug.h>
#include <arch/irq.h>
#include <apps/hex2bin.h>
#include "sama5d4-ek.h"
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
/* Configuration ************************************************************/
#ifndef HAVE_AT25
# error The AT25 Serial FLASH is not available
#endif
#ifndef CONFIG_SAMA5D4EK_NAND_AUTOMOUNT
# error CONFIG_SAMA5D4EK_NAND_AUTOMOUNT must be selected
#endif
#ifndef CONFIG_SAMA5D4EK_AT25_CHARDEV
# error CONFIG_SAMA5D4EK_AT25_CHARDEV must be selected
#endif
#ifndef CONFIG_BOOT_SDRAM_DATA
# error CONFIG_BOOT_SDRAM_DATA must be selected
#endif
#if defined(CONFIG_SAMA5D4EK_AT25_PROGSIZE) || CONFIG_SAMA5D4EK_AT25_PROGSIZE < 128
# error Large CONFIG_SAMA5D4EK_AT25_PROGSIZE must be selected
#endif
#define DEVNAME_MAXSIZE 12
#define IOBUFFER_SIZE 512
/****************************************************************************
* Private Types
****************************************************************************/
/****************************************************************************
* Private Data
****************************************************************************/
static uint8_t g_heximage[CONFIG_SAMA5D4EK_AT25_PROGSIZE];
static uint8_t g_iobuffer[IOBUFFER_SIZE];
statid uint8_t g_at25dev[DEVNAME_MAXSIZE];
/****************************************************************************
* Private Functions
****************************************************************************/
/****************************************************************************
* Public Functions
****************************************************************************/
/****************************************************************************
* Name: at25_main
*
* Description:
* at25_main is a tiny program that runs in ISRAM. at25_main will
* configure DRAM and the AT25 serial FLASH, present a prompt, and load
* an Intel HEX file into the AT25 serial FLASH (after first buffering
* the binary data into memory). On re-boot, the program loaded into
* the AT25 FLASH should then execute.
*
* On entry:
* - SDRAM has already been initialized (we are using it for .bss!)
* - SPI0 chip select has already been configured.
*
****************************************************************************/
int at25_main(int argc, char *argv)
{
struct lib_rawinstream_s rawinstream;
struct lib_memsostream_s memoutstream;
const uint8_t *src;
uint8_t *dest;
ssize_t nwritten;
ssize_t nread;
ssize_t remaining;
size_t rdsize;
int fd;
int ret;
/* Configure the AT25 as the a character device. */
ret = sam_at25_automount(AT25_MINOR);
if (ret < 0)
{
fprintf(stderr, "ERROR: Failed to mount AT25 FLASH: %d\n", ret);
return EXIT_FAILURE;
}
/* Open the AT25 device for writing */
snprintf(g_at25dev, DEVNAME_MAXSIZE, "/dev/mtd%d", AT25_MINOR);
fd = open(g_at25dev, O_WRONLY);
if (fd < 0)
{
int errcode = errno;
fprintf(stderr, "ERROR: Failed to open %s: %d\n", g_at25dev, errcode);
return EXIT_FAILURE;
}
/* Wrap stdin as an IN stream that can the HEX data over the serial port */
lib_rawinstream(&rawinstream, 0);
/* Wrap the memory buffer as a seek-able OUT stream in which we can buffer
* the binary data.
*/
lib_memsostream(&memoutstream, (FAR char *)g_heximage,
CONFIG_SAMA5D4EK_AT25_PROGSIZE);
/* We are ready to load the Intel HEX stream into DRAM.
*
* Hmm.. With no hardware handshake, there is a possibility of data loss
* to overrunning incoming data buffer. So far I have not seen this at
* 115200 8N1, but still it is a possibility.
*/
printf("Send Intel HEX file now\n");
fflush(stdout);
return hex2bin(&rawinstream.public, &memoutstream.public,
(uint32_t)SAM_ISRAM_VSECTION,
(uint32_t)(SAM_ISRAM_VSECTION + CONFIG_SAMA5D4EK_AT25_PROGSIZE),
0);
if (ret < 0)
{
/* We failed the load */
fprintf(stderr, "ERROR: Intel HEX file load failed: %d\n", ret);
close(fd);
return EXIT_FAILURE;
}
/* The HEX file load was successful, write the data to FLASH */
printf("Successfully loaded the Intel HEX file into memory...\n");
printf(" Writing %d bytes to the AT25 Serial FLASH\n",
memoutstream.public.nput);
remaining = memoutstream.public.nput;
dest = g_heximage;
do
{
nwritten = write(fd, dest, memoutstream.public.nput);
if (nwritten <= 0)
{
int errcode = errno;
if (errno != EINTR)
{
fprintf(stderr, "ERROR: Write failed: %d\n", errcode);
close(fd);
return EXIT_FAILURE;
}
}
else
{
remaining -= nwritten;
dest += nwritten;
}
}
while (remaining > 0);
close(fd);
/* Now verify that the image in memory and the image in FLASH are truly
* the same.
*/
printf(" Verifying %d bytes in the AT25 Serial FLASH\n",
memoutstream.public.nput);
/* Open the AT25 device for writing */
fd = open(g_at25dev, O_RDONLY);
if (fd < 0)
{
int errcode = errno;
fprintf(stderr, "ERROR: Failed to open %s: %d\n", g_at25dev, errcode);
return EXIT_FAILURE;
}
remaining = memoutstream.public.nput;
src = g_heximage;
do
{
rdsize = remaining;
if (rdsize > IOBUFFER_SIZE)
{
rdsize = IOBUFFER_SIZE;
}
nread = read(fd, g_iobuffer, rdsize);
if (nread <= 0)
{
int errcode = errno;
if (errno != EINTR)
{
fprintf(stderr, "ERROR: Read failed: %d\n", errcode);
close(fd);
return EXIT_FAILURE;
}
}
else
{
if (memcmp(g_iobuffer, src, nread) != 0)
{
fprintf(stderr, "ERROR: Verify failed at offset %d\n",
memoutstream.public.nput - remaining);
close(fd);
return EXIT_FAILURE;
}
remaining -= nwritten;
dest += nwritten;
}
}
while (remaining > 0);
printf(" Successfully verified %d bytes in the AT25 Serial FLASH\n",
memoutstream.public.nput);
close(fd);
return EXIT_SUCCESS;
}
+2 -2
View File
@@ -85,7 +85,7 @@ typedef void (*dram_entry_t)(void);
*
* Description:
* dram_main is a tiny program that runs in ISRAM. dram_main will
* configure DRAM, present a prompt, load and Intel HEX file into DRAM,
* configure DRAM, present a prompt, load an Intel HEX file into DRAM,
* and either start that program or wait for you to break in with the
* debugger.
*
@@ -105,7 +105,7 @@ int dram_main(int argc, char *argv)
* Intel HEX stream into DRAM.
*
* Hmm.. With no hardware handshake, there is a possibility of data loss
* to overruning incoming data buffer. So far I have not seen this at
* to overrunning incoming data buffer. So far I have not seen this at
* 115200 8N1, but still it is a possibility.
*/
+36 -3
View File
@@ -46,6 +46,7 @@
#include <errno.h>
#include <debug.h>
#include <nuttx/fs/fs.h>
#include <nuttx/spi/spi.h>
#include <nuttx/mtd/mtd.h>
#include <nuttx/fs/nxffs.h>
@@ -75,6 +76,10 @@ int sam_at25_automount(int minor)
{
FAR struct spi_dev_s *spi;
FAR struct mtd_dev_s *mtd;
#ifdef CONFIG_SAMA5D4EK_AT25_CHARDEV
uint8_t blockdev[18];
uint8_t chardev[12];
#endif
static bool initialized = false;
int ret;
@@ -101,15 +106,41 @@ int sam_at25_automount(int minor)
}
#if defined(CONFIG_SAMA5D4EK_AT25_FTL)
/* And finally, use the FTL layer to wrap the MTD driver as a block driver */
/* And finally, use the FTL layer to wrap the MTD driver as a block
* driver.
*/
ret = ftl_initialize(AT25_MINOR, mtd);
ret = ftl_initialize(minor, mtd);
if (ret < 0)
{
fdbg("ERROR: Failed to initialize the FTL layer: %d\n", ret);
return ret;
}
#elif defined(CONFIG_SAMA5D4EK_AT25_CHARDEV)
/* Use the FTL layer to wrap the MTD driver as a block driver */
ret = ftl_initialize(minor, mtd);
if (ret < 0)
{
fdbg("ERROR: Failed to initialize the FTL layer: %d\n", ret);
return ret;
}
/* Use the minor number to create device paths */
snprintf(blockdev, 18, "/dev/mtdblock%d", minor);
snprintf(chardev, 12, "/dev/mtd%d", minor);
/* Now create a character device on the block device */
ret = bchdev_register(blockdev, chardev, false);
if (ret < 0)
{
fdbg("ERROR: bchdev_register %s failed: %d\n", chardev, ret);
return ret;
}
#elif defined(CONFIG_SAMA5D4EK_AT25_NXFFS)
/* Initialize to provide NXFFS on the MTD interface */
@@ -128,8 +159,10 @@ int sam_at25_automount(int minor)
fdbg("ERROR: Failed to mount the NXFFS volume: %d\n", errno);
return ret;
}
#endif
/* Now we are initializeed */
/* Now we are initialized */
initialized = true;
}
+2 -1
View File
@@ -71,7 +71,8 @@ void sam_boardinitialize(void)
* sam_spiinitialize() has been brought into the link.
*/
#if defined(CONFIG_SAMA5_SPI0) || defined(CONFIG_SAMA5_SPI1)
#if defined(CONFIG_SAMA5_SPI0) || defined(CONFIG_SAMA5_SPI1) || \
defined(CONFIG_SAMA5_SPI2)
if (sam_spiinitialize)
{
sam_spiinitialize();
+24 -15
View File
@@ -152,16 +152,29 @@
# undef CONFIG_SAMA5D4EK_AT25_NXFFS
#endif
#if !defined(CONFIG_SAMA5D4EK_AT25_FTL) && !defined(CONFIG_SAMA5D4EK_AT25_NXFFS)
#if !defined(CONFIG_SAMA5D4EK_AT25_FTL) && !defined(CONFIG_SAMA5D4EK_AT25_CHARDEV) && \
!defined(CONFIG_SAMA5D4EK_AT25_NXFFS)
# undef HAVE_AT25
#endif
#if defined(CONFIG_SAMA5D4EK_AT25_FTL) && defined(CONFIG_SAMA5D4EK_AT25_CHARDEV)
# warning Both CONFIG_SAMA5D4EK_AT25_CHARDEV and CONFIG_SAMA5D4EK_AT25_FTL are set
# warning Ignoring CONFIG_SAMA5D4EK_AT25_FTL
# undef CONFIG_SAMA5D4EK_AT25_FTL
#endif
#if defined(CONFIG_SAMA5D4EK_AT25_FTL) && defined(CONFIG_SAMA5D4EK_AT25_NXFFS)
# warning Both CONFIG_SAMA5D4EK_AT25_FTL and CONFIG_SAMA5D4EK_AT25_NXFFS are set
# warning Ignoring CONFIG_SAMA5D4EK_AT25_NXFFS
# undef CONFIG_SAMA5D4EK_AT25_NXFFS
#endif
#if defined(CONFIG_SAMA5D4EK_AT25_CHARDEV) && defined(CONFIG_SAMA5D4EK_AT25_NXFFS)
# warning Both CONFIG_SAMA5D4EK_AT25_CHARDEV and CONFIG_SAMA5D4EK_AT25_NXFFS are set
# warning Ignoring CONFIG_SAMA5D4EK_AT25_NXFFS
# undef CONFIG_SAMA5D4EK_AT25_NXFFS
#endif
/* Assign minor device numbers. For example, if we also use MINOR number 0
* for the AT25, it should appear as /dev/mtdblock0
*/
@@ -509,25 +522,21 @@
#endif
/* SPI Chip Selects *****************************************************************/
/* Both the Ronetix and Embest versions of the SAMAD3x CPU modules include an
* Atmel AT25DF321A, 32-megabit, 2.7-volt SPI serial flash. The SPI
* connection is as follows:
/* The SAMA5D4-EK includes an Atmel AT25DF321A, 32-megabit, 2.7-volt SPI serial
* FLASH on board. The connection is as follows:
*
* AT25DF321A SAMA5
* --------------- -----------------------------------------------
* SI PD11 SPI0_MOSI
* SO PD10 SPI0_MIS0
* SCK PD12 SPI0_SPCK
* /CS PD13 via NL17SZ126 if JP1 is closed (See below)
* AT25DF321A SAMA5D4-EK SAMA5
* ---------- --------------- --------------------------------
* SI AT25_SPI0_SI PC1 PC1/SPI0_MOSI/PWML2/ISI_D9
* SO AT25_SPI0_SO PC0 PC0/SPI0_MISO/PWMH2/ISI_D8
* SCK AT25_SPI0_SPCK PC2 PC2/SPI0_SPCK/PWMH3/ISI_D10
* /CS AT25_SPI0_NCPS0 PC3 PC3/SPI0_NPCS0/PWML3/ISI_D11
*
* JP1 and JP2 seem to related to /CS on the Ronetix board, but the usage is
* less clear. For the Embest module, JP1 must be closed to connect /CS to
* PD13; on the Ronetix schematic, JP11 seems only to bypass a resistor (may
* not be populated?). I think closing JP1 is correct in either case.
* AT25_SPI0_NCPS0 goes to the AT25DF321A as via a NL17SZ126 if JP6 is closed
*/
#define PIO_AT25_NPCS0 (PIO_OUTPUT | PIO_CFG_PULLUP | PIO_OUTPUT_SET | \
PIO_PORT_PIOD | PIO_PIN13)
PIO_PORT_PIOC | PIO_PIN3)
#define AT25_PORT SPI0_CS0
/************************************************************************************