SAMA5D4-EK: Updates to get the at25boot configuration building correctly

This commit is contained in:
Gregory Nutt 2014-06-28 09:39:50 -06:00
parent 810f579330
commit 668f50e116
7 changed files with 68 additions and 18 deletions

View File

@ -2,19 +2,23 @@ AIC Advanced Interrupt Controller (Atmel SAM)
ADC Analog to Digital Conversion
ARP Address Resolution Protocol (networking)
BCH Block to Character
BINFMT Binary Format (Dynamic Loader)
CAN Controller Area Network
CP15 Coprocessor 15 (ARM)
DEVIF Device Interface (networking)
DAC Digital to Analog Conversion
DEV Device
DRAM Dynamic RAM
FAT File Allocation Table
FTL FLASH Translation Layer
IRQ Interrupt Request
I2C Inter-Integrated Circuit
I2S Inter IC Sound
ICMP Internet Control Message Protocol (networking)
IOB I/O Buffer (networking)
LIBC The "C" Library
MM Memory Management/Manager
MMAP Memory Map
MMC Multi-Media Card
MMCSD See MMC and SD
MTD Memory Technology Device

View File

@ -616,8 +616,19 @@
# endif
# define PGTABLE_IN_HIGHSRAM 1
/* If we execute from SRAM but keep data in SDRAM, then we will also have
* to position the initial, IDLE stack in SRAM. SDRAM will not be ready
* soon enough to serve as the stack.
*
* In this case, the initial IDLE stack can just follow the vector table,
* lying between the vector table and the page table. We don't really
* know how much memory to set aside for the vector table, but 4KiB should
* be much more than enough
*/
# ifdef CONFIG_BOOT_SDRAM_DATA
# error CONFIG_BOOT_SDRAM_DATA not suupported in this configuration
# define IDLE_STACK_PBASE (SAM_ISRAM0_PADDR + 0x0001000)
# define IDLE_STACK_VBASE (SAM_ISRAM0_VADDR + 0x0001000)
# endif
# else /* CONFIG_SAMA5_BOOT_ISRAM && CONFIG_ARCH_LOWVECTORS */
@ -657,7 +668,13 @@
# error "One of PGTABLE_BASE_PADDR or PGTABLE_BASE_VADDR is undefined"
# endif
/* If data is in SDRAM, then the IDLE stack at the beginning of ISRAM */
/* If we execute from SRAM but keep data in SDRAM, then we will also have
* to position the initial, IDLE stack in SRAM. SDRAM will not be ready
* soon enough to serve as the stack.
*
* In this case, the initial IDLE stack can just follow the page table
* in ISRAM.
*/
# ifdef CONFIG_BOOT_SDRAM_DATA
# define IDLE_STACK_PBASE (SAM_ISRAM0_PADDR + PGTABLE_SIZE)

View File

@ -608,8 +608,19 @@
# endif
# define PGTABLE_IN_HIGHSRAM 1
/* If we execute from SRAM, but keep data in SDRAM, then we will also have
* to position the initial, IDLE stack in SRAM. SDRAM will not be ready
* soon enough to serve as the stack.
*
* In this case, the initial IDLE stack can just follow the vector table,
* lying between the vector table and the page table. We don't really
* know how much memory to set aside for the vector table, but 4KiB should
* be much more than enough
*/
# ifdef CONFIG_BOOT_SDRAM_DATA
# error CONFIG_BOOT_SDRAM_DATA not suupported in this configuration
# define IDLE_STACK_PBASE (SAM_ISRAM0_PADDR + 0x0001000)
# define IDLE_STACK_VBASE (SAM_ISRAM0_VADDR + 0x0001000)
# endif
# else /* CONFIG_SAMA5_BOOT_ISRAM && CONFIG_ARCH_LOWVECTORS */
@ -625,6 +636,14 @@
# endif
# define PGTABLE_IN_LOWSRAM 1
/* If we execute from SRAM, but keep data in SDRAM, then we will also have
* to position the initial, IDLE stack in SRAM. SDRAM will not be ready
* soon enough to serve as the stack.
*
* In this case, the initial IDLE stack can just follow the page table
* in ISRAM.
*/
# ifdef CONFIG_BOOT_SDRAM_DATA
# define IDLE_STACK_PBASE (PGTABLE_BASE_PADDR + PGTABLE_SIZE)
# define IDLE_STACK_VBASE (PGTABLE_BASE_VADDR + PGTABLE_SIZE)

View File

@ -293,7 +293,7 @@ CONFIG_RAM_START=0x00200000
CONFIG_RAM_VSTART=0x00200000
CONFIG_RAM_SIZE=114688
CONFIG_ARCH_HAVE_SDRAM=y
CONFIG_BOOT_SDRAM_DATA=y
# CONFIG_BOOT_SDRAM_DATA is not set
#
# Board Selection

View File

@ -66,6 +66,10 @@ ifeq ($(CONFIG_SAMA5D4EK_DRAM_MAIN),y)
CSRCS += dram_main.c
endif
ifeq ($(CONFIG_SAMA5D4EK_AT25_MAIN),y)
CSRCS += at25_main.c
endif
ifeq ($(CONFIG_MTD_AT25),y)
ifeq ($(CONFIG_SAMA5_SPI0),y)
CSRCS += sam_at25.c

View File

@ -40,9 +40,15 @@
#include <nuttx/config.h>
#include <stdint.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <debug.h>
#include <nuttx/streams.h>
#include <arch/irq.h>
#include <apps/hex2bin.h>
@ -57,19 +63,19 @@
# error The AT25 Serial FLASH is not available
#endif
#ifndef CONFIG_SAMA5D4EK_NAND_AUTOMOUNT
# error CONFIG_SAMA5D4EK_NAND_AUTOMOUNT must be selected
#ifndef CONFIG_SAMA5D4EK_AT25_AUTOMOUNT
# error CONFIG_SAMA5D4EK_AT25_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
#ifdef CONFIG_BOOT_SDRAM_DATA
# error CONFIG_BOOT_SDRAM_DATA must NOT be selected
#endif
#if defined(CONFIG_SAMA5D4EK_AT25_PROGSIZE) || CONFIG_SAMA5D4EK_AT25_PROGSIZE < 128
#if !defined(CONFIG_SAMA5D4EK_AT25_PROGSIZE) || CONFIG_SAMA5D4EK_AT25_PROGSIZE < 128
# error Large CONFIG_SAMA5D4EK_AT25_PROGSIZE must be selected
#endif
@ -84,9 +90,8 @@
* 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];
static char g_at25dev[DEVNAME_MAXSIZE];
/****************************************************************************
* Private Functions
@ -149,11 +154,12 @@ int at25_main(int argc, char *argv)
lib_rawinstream(&rawinstream, 0);
/* Wrap the memory buffer as a seek-able OUT stream in which we can buffer
* the binary data.
/* Define a memory buffer of size CONFIG_SAMA5D4EK_AT25_PROGSIZE at the
* beginning of SDRAM. 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,
lib_memsostream(&memoutstream, (FAR char *)SAM_DDRCS_VSECTION,
CONFIG_SAMA5D4EK_AT25_PROGSIZE);
/* We are ready to load the Intel HEX stream into DRAM.
@ -186,7 +192,7 @@ int at25_main(int argc, char *argv)
memoutstream.public.nput);
remaining = memoutstream.public.nput;
dest = g_heximage;
dest = (uint8_t *)CONFIG_SAMA5D4EK_AT25_PROGSIZE;
do
{
@ -229,7 +235,7 @@ int at25_main(int argc, char *argv)
}
remaining = memoutstream.public.nput;
src = g_heximage;
src = (const uint8_t *)CONFIG_SAMA5D4EK_AT25_PROGSIZE;
do
{

View File

@ -77,8 +77,8 @@ 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];
char blockdev[18];
char chardev[12];
#endif
static bool initialized = false;
int ret;