From 852330876b5aeff8ea777597eb5185ffe4e03eab Mon Sep 17 00:00:00 2001 From: Gregory Nutt Date: Wed, 12 Oct 2016 14:50:28 -0600 Subject: [PATCH] arch/xtensa: A little more ESP32 configuration logic --- arch/Kconfig | 7 ++ arch/xtensa/include/esp32/chip.h | 77 +++++++++++++++++++++ arch/xtensa/include/esp32/irq.h | 85 ++++++++++++++++++++++++ arch/xtensa/include/irq.h | 17 ++++- arch/xtensa/include/lx6/chip.h | 7 -- arch/xtensa/include/lx6/irq.h | 2 - arch/xtensa/src/esp32/Kconfig | 9 +++ arch/xtensa/src/{lx6 => esp32}/Make.defs | 0 arch/xtensa/src/lx6/Kconfig | 26 +++++++- 9 files changed, 217 insertions(+), 13 deletions(-) create mode 100644 arch/xtensa/include/esp32/chip.h create mode 100644 arch/xtensa/include/esp32/irq.h create mode 100644 arch/xtensa/src/esp32/Kconfig rename arch/xtensa/src/{lx6 => esp32}/Make.defs (100%) diff --git a/arch/Kconfig b/arch/Kconfig index 319419bb2d1..ee252d2cbd5 100644 --- a/arch/Kconfig +++ b/arch/Kconfig @@ -67,6 +67,11 @@ config ARCH_X86 ---help--- Intel x86 architectures. +config ARCH_XTENSA + bool "Xtensa" + ---help--- + Cadence Cadence® Tensilica® Xtensa® actictures. + config ARCH_Z16 bool "ZNEO" select ARCH_HAVE_HEAP2 @@ -91,6 +96,7 @@ config ARCH default "renesas" if ARCH_RENESAS default "sim" if ARCH_SIM default "x86" if ARCH_X86 + default "xtensa" if ARCH_XTENSA default "z16" if ARCH_Z16 default "z80" if ARCH_Z80 @@ -102,6 +108,7 @@ source arch/rgmp/Kconfig source arch/renesas/Kconfig source arch/sim/Kconfig source arch/x86/Kconfig +source arch/xtensa/Kconfig source arch/z16/Kconfig source arch/z80/Kconfig diff --git a/arch/xtensa/include/esp32/chip.h b/arch/xtensa/include/esp32/chip.h new file mode 100644 index 00000000000..95e9e2cac3b --- /dev/null +++ b/arch/xtensa/include/esp32/chip.h @@ -0,0 +1,77 @@ +/**************************************************************************** + * arch/xtensa/include/esp32/chip.h + * + * Copyright (C) 2016 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt + * + * 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. + * + ****************************************************************************/ + +#ifndef __ARCH_XTENSA_INCLUDE_ESP32_CHIP_H +#define __ARCH_XTENSA_INCLUDE_ESP32_CHIP_H + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include + +/**************************************************************************** + * Pre-processor Definitions + ****************************************************************************/ + +/**************************************************************************** + * Public Types + ****************************************************************************/ + +#ifndef __ASSEMBLY__ + +/**************************************************************************** + * Inline Functions + ****************************************************************************/ + +/**************************************************************************** + * Public Function Prototypes + ****************************************************************************/ + +#ifdef __cplusplus +#define EXTERN extern "C" +extern "C" +{ +#else +#define EXTERN extern +#endif + +#undef EXTERN +#ifdef __cplusplus +} +#endif + +#endif /* __ASSEMBLY__ */ +#endif /* __ARCH_XTENSA_INCLUDE_ESP32_CHIP_H */ diff --git a/arch/xtensa/include/esp32/irq.h b/arch/xtensa/include/esp32/irq.h new file mode 100644 index 00000000000..d67ea047944 --- /dev/null +++ b/arch/xtensa/include/esp32/irq.h @@ -0,0 +1,85 @@ +/**************************************************************************** + * arch/xtensa/include/esp32/irq.h + * + * Copyright (C) 2016 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt + * + * 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. + * + ****************************************************************************/ + +/* This file should never be included directed but, rather, only indirectly + * through nuttx/irq.h + */ + +#ifndef __ARCH_XTENSA_INCLUDE_ESP32_IRQ_H +#define __ARCH_XTENSA_INCLUDE_ESP32_IRQ_H + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include + +/**************************************************************************** + * Pre-processor Definitions + ****************************************************************************/ + +/**************************************************************************** + * Public Types + ****************************************************************************/ + +#ifndef __ASSEMBLY__ + +/**************************************************************************** + * Inline functions + ****************************************************************************/ + +/**************************************************************************** + * Public Data + ****************************************************************************/ + +/**************************************************************************** + * Public Function Prototypes + ****************************************************************************/ + +#ifdef __cplusplus +#define EXTERN extern "C" +extern "C" +{ +#else +#define EXTERN extern +#endif + +#undef EXTERN +#ifdef __cplusplus +} +#endif + +#endif /* __ASSEMBLY__ */ +#endif /* __ARCH_XTENSA_INCLUDE_ESP32_IRQ_H */ diff --git a/arch/xtensa/include/irq.h b/arch/xtensa/include/irq.h index d2af5ba4e4f..19739e7944d 100644 --- a/arch/xtensa/include/irq.h +++ b/arch/xtensa/include/irq.h @@ -48,9 +48,22 @@ #include -/* Include chip-specific IRQ definitions (including IRQ numbers) */ +/* Include architecture-specific IRQ definitions */ -#include +#ifdef CONFIG_ARCH_CHIP_LX6 +# include + +/* Include implementation-specific IRQ definitions (including IRQ numbers) */ + +# ifdef CONFIG_ARCH_CHIP_ESP32 +# include +# else +# error Unknown LX6 implementation +# endif + +#else +# error Unknown XTENSA architecture +#endif /**************************************************************************** * Pre-processor Definitions diff --git a/arch/xtensa/include/lx6/chip.h b/arch/xtensa/include/lx6/chip.h index 060d99e9456..a3cb0e3e846 100644 --- a/arch/xtensa/include/lx6/chip.h +++ b/arch/xtensa/include/lx6/chip.h @@ -45,13 +45,6 @@ /**************************************************************************** * Pre-processor Definitions ****************************************************************************/ -/* Configuration ************************************************************/ - -#if defined(CONFIG_ARCH_CHIP_LX6) -/* To be provided */ -#else -# error "Unrecognized LX6 device -#endif /**************************************************************************** * Public Types diff --git a/arch/xtensa/include/lx6/irq.h b/arch/xtensa/include/lx6/irq.h index ec2b218f585..ddc87e0c2bc 100644 --- a/arch/xtensa/include/lx6/irq.h +++ b/arch/xtensa/include/lx6/irq.h @@ -44,8 +44,6 @@ * Included Files ****************************************************************************/ -#include - /**************************************************************************** * Pre-processor Definitions ****************************************************************************/ diff --git a/arch/xtensa/src/esp32/Kconfig b/arch/xtensa/src/esp32/Kconfig new file mode 100644 index 00000000000..8ccb4fe3923 --- /dev/null +++ b/arch/xtensa/src/esp32/Kconfig @@ -0,0 +1,9 @@ +# +# For a description of the syntax of this configuration file, +# see the file kconfig-language.txt in the NuttX tools repository. +# + +if ARCH_LX6 + +endif # ARCH_LX6 + diff --git a/arch/xtensa/src/lx6/Make.defs b/arch/xtensa/src/esp32/Make.defs similarity index 100% rename from arch/xtensa/src/lx6/Make.defs rename to arch/xtensa/src/esp32/Make.defs diff --git a/arch/xtensa/src/lx6/Kconfig b/arch/xtensa/src/lx6/Kconfig index 8ccb4fe3923..073954b7d6b 100644 --- a/arch/xtensa/src/lx6/Kconfig +++ b/arch/xtensa/src/lx6/Kconfig @@ -3,7 +3,29 @@ # see the file kconfig-language.txt in the NuttX tools repository. # -if ARCH_LX6 +if ARCH_CHIP_LX6 -endif # ARCH_LX6 +choice + prompt "LX6 implementation" + default ARCH_CHIP_ESP32 +config ARCH_CHIP_ESP32 + bool "Expressif ESP32" + ---help--- + The ESP32 is a dual-core system with two Harvard Architecture Xtensa + LX6 CPUs. All embedded memory, external memory and peripherals are + located on the data bus and/or the instruction bus of these CPUs. + With some minor exceptions the address mapping of two CPUs is + symmetric, meaning they use the same addresses to access the same + memory. Multiple peripherals in the system can access embedded + memory via DMA. + + The two CPUs are named "PRO_CPU" and "APP_CPU" (for "protocol" and + "application"), however for most purposes the two CPUs are + interchangeable. + +endchoice # LX6 implementation + +source arch/xtensa/src/esp32/Kconfig + +endif # ARCH_CHIP_LX6