Add a rudimentary arch/arm/src/imx6 directory for the i.MX6 family

This commit is contained in:
Gregory Nutt 2016-02-28 15:32:36 -06:00
parent 75973db9cc
commit a0cdd1ddb1
4 changed files with 213 additions and 8 deletions

View File

@ -14,8 +14,6 @@ config ARCH_CHIP_A1X
bool "Allwinner A1X" bool "Allwinner A1X"
select ARCH_CORTEXA8 select ARCH_CORTEXA8
select ARCH_HAVE_FPU select ARCH_HAVE_FPU
select ARCH_HAVE_MMU
select ARCH_USE_MMU
select ARCH_HAVE_IRQPRIO select ARCH_HAVE_IRQPRIO
select ARCH_HAVE_LOWVECTORS select ARCH_HAVE_LOWVECTORS
select ARCH_HAVE_SDRAM select ARCH_HAVE_SDRAM
@ -58,15 +56,28 @@ config ARCH_CHIP_EFM32
Energy Micro EFM32 microcontrollers (ARM Cortex-M). Energy Micro EFM32 microcontrollers (ARM Cortex-M).
config ARCH_CHIP_IMX1 config ARCH_CHIP_IMX1
bool "Freescale iMX.1" bool "NXP/Freescale iMX.1"
select ARCH_ARM920T select ARCH_ARM920T
select ARCH_HAVE_HEAP2 select ARCH_HAVE_HEAP2
select ARCH_HAVE_LOWVECTORS select ARCH_HAVE_LOWVECTORS
---help--- ---help---
Freescale iMX.1 architectures (ARM920T) Freescale iMX.1 architectures (ARM920T)
config ARCH_CHIP_IMX6
bool "NXP/Freescale iMX.6"
select ARCH_CORTEXA9
select ARCH_HAVE_FPU
select ARCH_HAVE_LOWVECTORS
select ARCH_HAVE_SDRAM
select BOOT_RUNFROMSDRAM
select ARCH_HAVE_ADDRENV
select ARCH_NEED_ADDRENV_MAPPING
depends on EXPERIMENTAL
---help---
Freescale iMX.6 architectures (Cortex-A9)
config ARCH_CHIP_KINETIS config ARCH_CHIP_KINETIS
bool "Freescale Kinetis" bool "NXP/Freescale Kinetis"
select ARCH_CORTEXM4 select ARCH_CORTEXM4
select ARCH_HAVE_MPU select ARCH_HAVE_MPU
select ARM_HAVE_MPU_UNIFIED select ARM_HAVE_MPU_UNIFIED
@ -76,7 +87,7 @@ config ARCH_CHIP_KINETIS
Freescale Kinetis Architectures (ARM Cortex-M4) Freescale Kinetis Architectures (ARM Cortex-M4)
config ARCH_CHIP_KL config ARCH_CHIP_KL
bool "Freescale Kinetis L" bool "NXP/Freescale Kinetis L"
select ARCH_CORTEXM0 select ARCH_CORTEXM0
select ARCH_HAVE_CMNVECTOR select ARCH_HAVE_CMNVECTOR
---help--- ---help---
@ -316,6 +327,13 @@ config ARCH_CORTEXA8
select ARCH_USE_MMU select ARCH_USE_MMU
select ARCH_HAVE_COHERENT_DCACHE if ELF || MODULE select ARCH_HAVE_COHERENT_DCACHE if ELF || MODULE
config ARCH_CORTEXA9
bool
default n
select ARCH_HAVE_MMU
select ARCH_USE_MMU
select ARCH_HAVE_COHERENT_DCACHE if ELF || MODULE
config ARCH_CORTEXR4 config ARCH_CORTEXR4
bool bool
default n default n
@ -359,7 +377,7 @@ config ARCH_FAMILY
string string
default "arm" if ARCH_ARM7TDMI || ARCH_ARM926EJS || ARCH_ARM920T default "arm" if ARCH_ARM7TDMI || ARCH_ARM926EJS || ARCH_ARM920T
default "armv6-m" if ARCH_CORTEXM0 default "armv6-m" if ARCH_CORTEXM0
default "armv7-a" if ARCH_CORTEXA5 || ARCH_CORTEXA8 default "armv7-a" if ARCH_CORTEXA5 || ARCH_CORTEXA8 || ARCH_CORTEXA9
default "armv7-m" if ARCH_CORTEXM3 || ARCH_CORTEXM4 || ARCH_CORTEXM7 default "armv7-m" if ARCH_CORTEXM3 || ARCH_CORTEXM4 || ARCH_CORTEXM7
default "armv7-r" if ARCH_CORTEXR4 || ARCH_CORTEXR4F || ARCH_CORTEXR5 || ARCH_CORTEXR5F || ARCH_CORTEX74 || ARCH_CORTEXR7F default "armv7-r" if ARCH_CORTEXR4 || ARCH_CORTEXR4F || ARCH_CORTEXR5 || ARCH_CORTEXR5F || ARCH_CORTEX74 || ARCH_CORTEXR7F
@ -371,6 +389,7 @@ config ARCH_CHIP
default "dm320" if ARCH_CHIP_DM320 default "dm320" if ARCH_CHIP_DM320
default "efm32" if ARCH_CHIP_EFM32 default "efm32" if ARCH_CHIP_EFM32
default "imx1" if ARCH_CHIP_IMX1 default "imx1" if ARCH_CHIP_IMX1
default "imx6" if ARCH_CHIP_IMX6
default "kinetis" if ARCH_CHIP_KINETIS default "kinetis" if ARCH_CHIP_KINETIS
default "kl" if ARCH_CHIP_KL default "kl" if ARCH_CHIP_KL
default "tiva" if ARCH_CHIP_LM || ARCH_CHIP_TIVA default "tiva" if ARCH_CHIP_LM || ARCH_CHIP_TIVA
@ -527,7 +546,7 @@ config DEBUG_HARDFAULT
if ARCH_CORTEXM0 if ARCH_CORTEXM0
source arch/arm/src/armv6-m/Kconfig source arch/arm/src/armv6-m/Kconfig
endif endif
if ARCH_CORTEXA5 || ARCH_CORTEXA8 if ARCH_CORTEXA5 || ARCH_CORTEXA8 || ARCH_CORTEXA9
source arch/arm/src/armv7-a/Kconfig source arch/arm/src/armv7-a/Kconfig
endif endif
if ARCH_CORTEXM3 || ARCH_CORTEXM4 || ARCH_CORTEXM7 if ARCH_CORTEXM3 || ARCH_CORTEXM4 || ARCH_CORTEXM7
@ -557,6 +576,9 @@ endif
if ARCH_CHIP_IMX1 if ARCH_CHIP_IMX1
source arch/arm/src/imx1/Kconfig source arch/arm/src/imx1/Kconfig
endif endif
if ARCH_CHIP_IMX6
source arch/arm/src/imx6/Kconfig
endif
if ARCH_CHIP_KINETIS if ARCH_CHIP_KINETIS
source arch/arm/src/kinetis/Kconfig source arch/arm/src/kinetis/Kconfig
endif endif

View File

@ -20,7 +20,7 @@ config IMX1_UART2
select ARCH_HAVE_UART2 select ARCH_HAVE_UART2
config IMX1_UART3 config IMX1_UART3
bool "UART2" bool "UART3"
default n default n
select ARCH_HAVE_UART3 select ARCH_HAVE_UART3

48
arch/arm/src/imx6/Kconfig Normal file
View File

@ -0,0 +1,48 @@
#
# For a description of the syntax of this configuration file,
# see the file kconfig-language.txt in the NuttX tools repository.
#
if ARCH_CHIP_IMX6
# choice "iMX.6 Chip Selection"
menu "iMX.6 Peripheral Selection"
config IMX6_UART1
bool "UART1"
default n
select ARCH_HAVE_UART1
config IMX6_UART2
bool "UART2"
default n
select ARCH_HAVE_UART2
config IMX6_UART3
bool "UART3"
default n
select ARCH_HAVE_UART3
config IMX6_UART4
bool "UART4"
default n
select ARCH_HAVE_UART3
config IMX6_UART5
bool "UART5"
default n
select ARCH_HAVE_UART3
config IMX6_SPI1
bool "SPI1"
default n
select SPI
config IMX6_SPI2
bool "SPI2"
default n
select SPI
endmenu # iMX Peripheral Selection
endif # ARCH_CHIP_IMX6

135
arch/arm/src/imx6/Make.defs Normal file
View File

@ -0,0 +1,135 @@
############################################################################
# arch/arm/imx6/Make.defs
#
# Copyright (C) 2016 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 Gregory Nutt 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.
#
############################################################################
# The vector table is the "head" object, i.e., the one that must forced into
# the link in order to draw in all of the other components
HEAD_ASRC = arm_vectortab.S
ifeq ($(CONFIG_BUILD_KERNEL),y)
STARTUP_OBJS = crt0$(OBJEXT)
endif
# Force the start-up logic to be at the beginning of the .text to simplify
# debug.
ifeq ($(CONFIG_PAGING),y)
CMN_ASRCS = arm_pghead.S
else
CMN_ASRCS = arm_head.S
endif
# Common assembly language files
CMN_ASRCS += arm_vectors.S arm_fpuconfig.S arm_fullcontextrestore.S
CMN_ASRCS += arm_saveusercontext.S arm_vectoraddrexcptn.S arm_vfork.S
CMN_ASRCS += arm_testset.S
CMN_ASRCS += cp15_coherent_dcache.S cp15_invalidate_dcache.S
CMN_ASRCS += cp15_clean_dcache.S cp15_flush_dcache.S cp15_invalidate_dcache_all.S
ifeq ($(CONFIG_ARCH_MEMCPY),y)
CMN_ASRCS += arm_memcpy.S
endif
# Common C source files
CMN_CSRCS = up_initialize.c up_idle.c up_interruptcontext.c up_exit.c
CMN_CSRCS += up_createstack.c up_releasestack.c up_usestack.c up_vfork.c
CMN_CSRCS += up_puts.c up_mdelay.c up_stackframe.c up_udelay.c
CMN_CSRCS += up_modifyreg8.c up_modifyreg16.c up_modifyreg32.c
CMN_CSRCS += arm_assert.c arm_blocktask.c arm_copyfullstate.c arm_dataabort.c
CMN_CSRCS += arm_doirq.c arm_initialstate.c arm_mmu.c arm_prefetchabort.c
CMN_CSRCS += arm_releasepending.c arm_reprioritizertr.c
CMN_CSRCS += arm_schedulesigaction.c arm_sigdeliver.c arm_syscall.c
CMN_CSRCS += arm_unblocktask.c arm_undefinedinsn.c
# Use common heap allocation for now (may need to be customized later)
CMN_CSRCS += up_allocateheap.c
# Configuration dependent C and assembly language files
ifeq ($(CONFIG_PAGING),y)
CMN_CSRCS += arm_allocpage.c arm_checkmapping.c arm_pginitialize.c
CMN_CSRCS += arm_va2pte.c
endif
ifeq ($(CONFIG_BUILD_KERNEL),y)
CMN_CSRCS += up_task_start.c up_pthread_start.c arm_signal_dispatch.c
endif
ifeq ($(CONFIG_ARCH_ADDRENV),y)
CMN_CSRCS += arm_addrenv.c arm_addrenv_utils.c arm_pgalloc.c
ifeq ($(CONFIG_ARCH_STACK_DYNAMIC),y)
CMN_CSRCS += arm_addrenv_ustack.c
endif
ifeq ($(CONFIG_ARCH_KERNEL_STACK),y)
CMN_CSRCS += arm_addrenv_kstack.c
endif
ifeq ($(CONFIG_MM_SHM),y)
CMN_CSRCS += arm_addrenv_shm.c
endif
endif
ifeq ($(CONFIG_MM_PGALLOC),y)
CMN_CSRCS += arm_physpgaddr.c
ifeq ($(CONFIG_ARCH_PGPOOL_MAPPING),y)
CMN_CSRCS += arm_virtpgaddr.c
endif
endif
ifeq ($(CONFIG_ELF),y)
CMN_CSRCS += arm_elf.c arm_coherent_dcache.c
else ifeq ($(CONFIG_MODULE),y)
CMN_CSRCS += arm_elf.c arm_coherent_dcache.c
endif
ifeq ($(CONFIG_ARCH_FPU),y)
CMN_ASRCS += arm_savefpu.S arm_restorefpu.S
CMN_CSRCS += arm_copyarmstate.c
endif
ifeq ($(CONFIG_STACK_COLORATION),y)
CMN_CSRCS += up_checkstack.c
endif
# i.MX6-specific assembly language files
CHIP_ASRCS =
# i.MX6-specific C source files
CHIP_CSRCS =