arch: xtensa: Add ESP32 SoC
Due to the configurable nature of the Xtensa platform, the generic name of "LX6" cannot be used to describe an SoC as far as Zephyr goes. So ESP32 is defined both as a SoC and as a board. This is based on work by Rajavardhan Gundi. Signed-off-by: Leandro Pereira <leandro.pereira@intel.com>
This commit is contained in:
parent
bb19e08cde
commit
88790ae71d
4 changed files with 242 additions and 0 deletions
15
arch/xtensa/soc/esp32/Kconfig.defconfig
Normal file
15
arch/xtensa/soc/esp32/Kconfig.defconfig
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
# Kconfig - ESP32 board configuration
|
||||||
|
#
|
||||||
|
# Copyright (c) 2017 Intel Corporation
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
if SOC_ESP32
|
||||||
|
|
||||||
|
config SOC
|
||||||
|
string
|
||||||
|
default esp32
|
||||||
|
|
||||||
|
config IRQ_OFFLOAD_INTNUM
|
||||||
|
default 7
|
||||||
|
|
||||||
|
endif
|
6
arch/xtensa/soc/esp32/Kconfig.soc
Normal file
6
arch/xtensa/soc/esp32/Kconfig.soc
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
# Copyright (c) 2017 Intel Corporation
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
config SOC_ESP32
|
||||||
|
bool "ESP32"
|
||||||
|
|
1
arch/xtensa/soc/esp32/Makefile
Normal file
1
arch/xtensa/soc/esp32/Makefile
Normal file
|
@ -0,0 +1 @@
|
||||||
|
obj- = soc.o
|
220
arch/xtensa/soc/esp32/linker.ld
Normal file
220
arch/xtensa/soc/esp32/linker.ld
Normal file
|
@ -0,0 +1,220 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2016 Cadence Design Systems, Inc.
|
||||||
|
* Copyright (c) 2017 Intel Corporation
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* @brief Linker command/script file
|
||||||
|
*
|
||||||
|
* Linker script for the Xtensa platform.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define _LINKER
|
||||||
|
#define _ASMLANGUAGE
|
||||||
|
|
||||||
|
#include <autoconf.h>
|
||||||
|
#include <linker/sections.h>
|
||||||
|
#include <linker/linker-defs.h>
|
||||||
|
#include <linker/linker-tool.h>
|
||||||
|
|
||||||
|
#define RAMABLE_REGION dram0_0_seg :dram0_0_phdr
|
||||||
|
#define ROMABLE_REGION iram0_0_seg :iram0_0_phdr
|
||||||
|
|
||||||
|
PROVIDE ( __stack = 0x3ffe3f20 );
|
||||||
|
|
||||||
|
MEMORY
|
||||||
|
{
|
||||||
|
iram0_0_seg(RX): org = 0x40080000, len = 0x20000
|
||||||
|
iram0_2_seg(RX): org = 0x400D0018, len = 0x330000
|
||||||
|
dram0_0_seg(RW): org = 0x3FFB0000, len = 0x50000
|
||||||
|
drom0_0_seg(R): org = 0x3F400010, len = 0x800000
|
||||||
|
rtc_iram_seg(RWX): org = 0x400C0000, len = 0x2000
|
||||||
|
rtc_slow_seg(RW): org = 0x50000000, len = 0x1000
|
||||||
|
}
|
||||||
|
|
||||||
|
PHDRS
|
||||||
|
{
|
||||||
|
iram0_0_phdr PT_LOAD;
|
||||||
|
dram0_0_phdr PT_LOAD;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Default entry point: */
|
||||||
|
PROVIDE ( _ResetVector = 0x40000400 );
|
||||||
|
|
||||||
|
_rom_store_table = 0;
|
||||||
|
|
||||||
|
PROVIDE(_memmap_vecbase_reset = 0x40000450);
|
||||||
|
PROVIDE(_memmap_reset_vector = 0x40000400);
|
||||||
|
|
||||||
|
SECTIONS
|
||||||
|
{
|
||||||
|
/* RTC fast memory holds RTC wake stub code,
|
||||||
|
including from any source file named rtc_wake_stub*.c
|
||||||
|
*/
|
||||||
|
.rtc.text :
|
||||||
|
{
|
||||||
|
. = ALIGN(4);
|
||||||
|
*(.rtc.literal .rtc.text)
|
||||||
|
*rtc_wake_stub*.o(.literal .text .literal.* .text.*)
|
||||||
|
} >rtc_iram_seg
|
||||||
|
|
||||||
|
/* RTC slow memory holds RTC wake stub
|
||||||
|
data/rodata, including from any source file
|
||||||
|
named rtc_wake_stub*.c
|
||||||
|
*/
|
||||||
|
.rtc.data :
|
||||||
|
{
|
||||||
|
_rtc_data_start = ABSOLUTE(.);
|
||||||
|
*(.rtc.data)
|
||||||
|
*(.rtc.rodata)
|
||||||
|
*rtc_wake_stub*.o(.data .rodata .data.* .rodata.* .bss .bss.*)
|
||||||
|
_rtc_data_end = ABSOLUTE(.);
|
||||||
|
} > rtc_slow_seg
|
||||||
|
|
||||||
|
/* RTC bss, from any source file named rtc_wake_stub*.c */
|
||||||
|
.rtc.bss (NOLOAD) :
|
||||||
|
{
|
||||||
|
_rtc_bss_start = ABSOLUTE(.);
|
||||||
|
*rtc_wake_stub*.o(.bss .bss.*)
|
||||||
|
*rtc_wake_stub*.o(COMMON)
|
||||||
|
_rtc_bss_end = ABSOLUTE(.);
|
||||||
|
} > rtc_slow_seg
|
||||||
|
|
||||||
|
/* Send .iram0 code to iram */
|
||||||
|
.iram0.vectors : ALIGN(4)
|
||||||
|
{
|
||||||
|
/* Vectors go to IRAM */
|
||||||
|
_init_start = ABSOLUTE(.);
|
||||||
|
/* Vectors according to builds/RF-2015.2-win32/esp108_v1_2_s5_512int_2/config.html */
|
||||||
|
. = 0x0;
|
||||||
|
KEEP(*(.WindowVectors.text));
|
||||||
|
. = 0x180;
|
||||||
|
KEEP(*(.Level2InterruptVector.text));
|
||||||
|
. = 0x1c0;
|
||||||
|
KEEP(*(.Level3InterruptVector.text));
|
||||||
|
. = 0x200;
|
||||||
|
KEEP(*(.Level4InterruptVector.text));
|
||||||
|
. = 0x240;
|
||||||
|
KEEP(*(.Level5InterruptVector.text));
|
||||||
|
. = 0x280;
|
||||||
|
KEEP(*(.DebugExceptionVector.text));
|
||||||
|
. = 0x2c0;
|
||||||
|
KEEP(*(.NMIExceptionVector.text));
|
||||||
|
. = 0x300;
|
||||||
|
KEEP(*(.KernelExceptionVector.text));
|
||||||
|
. = 0x340;
|
||||||
|
KEEP(*(.UserExceptionVector.text));
|
||||||
|
. = 0x3C0;
|
||||||
|
KEEP(*(.DoubleExceptionVector.text));
|
||||||
|
. = 0x400;
|
||||||
|
*(.*Vector.literal)
|
||||||
|
|
||||||
|
*(.UserEnter.literal);
|
||||||
|
*(.UserEnter.text);
|
||||||
|
. = ALIGN (16);
|
||||||
|
*(.entry.text)
|
||||||
|
*(.init.literal)
|
||||||
|
*(.init)
|
||||||
|
_init_end = ABSOLUTE(.);
|
||||||
|
|
||||||
|
/* This goes here, not at top of linker script, so addr2line finds it last,
|
||||||
|
and uses it in preference to the first symbol in IRAM */
|
||||||
|
_iram_start = ABSOLUTE(0);
|
||||||
|
} GROUP_LINK_IN(ROMABLE_REGION)
|
||||||
|
|
||||||
|
#include <linker/common-ram.ld>
|
||||||
|
#include <linker/common-rom.ld>
|
||||||
|
|
||||||
|
SECTION_PROLOGUE(_TEXT_SECTION_NAME, , ALIGN(4))
|
||||||
|
{
|
||||||
|
/* Code marked as running out of IRAM */
|
||||||
|
_iram_text_start = ABSOLUTE(.);
|
||||||
|
*(.iram1 .iram1.*)
|
||||||
|
*(.iram0.literal .iram.literal .iram.text.literal .iram0.text .iram.text)
|
||||||
|
*libhal.a:(.literal .text .literal.* .text.*)
|
||||||
|
_iram_text_end = ABSOLUTE(.);
|
||||||
|
} GROUP_LINK_IN(ROMABLE_REGION)
|
||||||
|
|
||||||
|
.dram0.data :
|
||||||
|
{
|
||||||
|
_data_start = ABSOLUTE(.);
|
||||||
|
KEEP(*(.data))
|
||||||
|
KEEP(*(.data.*))
|
||||||
|
KEEP(*(.gnu.linkonce.d.*))
|
||||||
|
KEEP(*(.data1))
|
||||||
|
KEEP(*(.sdata))
|
||||||
|
KEEP(*(.sdata.*))
|
||||||
|
KEEP(*(.gnu.linkonce.s.*))
|
||||||
|
KEEP(*(.sdata2))
|
||||||
|
KEEP(*(.sdata2.*))
|
||||||
|
KEEP(*(.gnu.linkonce.s2.*))
|
||||||
|
KEEP(*(.jcr))
|
||||||
|
*(.dram1 .dram1.*)
|
||||||
|
_data_end = ABSOLUTE(.);
|
||||||
|
. = ALIGN(4);
|
||||||
|
} GROUP_LINK_IN(RAMABLE_REGION)
|
||||||
|
|
||||||
|
/* Shared RAM */
|
||||||
|
SECTION_DATA_PROLOGUE(_BSS_SECTION_NAME,(NOLOAD),)
|
||||||
|
{
|
||||||
|
. = ALIGN (8);
|
||||||
|
_bss_start = ABSOLUTE(.);
|
||||||
|
*(.dynsbss)
|
||||||
|
*(.sbss)
|
||||||
|
*(.sbss.*)
|
||||||
|
*(.gnu.linkonce.sb.*)
|
||||||
|
*(.scommon)
|
||||||
|
*(.sbss2)
|
||||||
|
*(.sbss2.*)
|
||||||
|
*(.gnu.linkonce.sb2.*)
|
||||||
|
*(.dynbss)
|
||||||
|
*(.bss)
|
||||||
|
*(.bss.*)
|
||||||
|
*(.share.mem)
|
||||||
|
*(.gnu.linkonce.b.*)
|
||||||
|
*(COMMON)
|
||||||
|
. = ALIGN (8);
|
||||||
|
_bss_end = ABSOLUTE(.);
|
||||||
|
_heap_start = ABSOLUTE(.);
|
||||||
|
} GROUP_LINK_IN(RAMABLE_REGION)
|
||||||
|
|
||||||
|
SECTION_PROLOGUE(_RODATA_SECTION_NAME,,ALIGN(4))
|
||||||
|
{
|
||||||
|
_rodata_start = ABSOLUTE(.);
|
||||||
|
*(.rodata)
|
||||||
|
*(.rodata.*)
|
||||||
|
*(.gnu.linkonce.r.*)
|
||||||
|
*(.rodata1)
|
||||||
|
__XT_EXCEPTION_TABLE__ = ABSOLUTE(.);
|
||||||
|
KEEP (*(.xt_except_table))
|
||||||
|
KEEP (*(.gcc_except_table))
|
||||||
|
*(.gnu.linkonce.e.*)
|
||||||
|
*(.gnu.version_r)
|
||||||
|
KEEP (*(.eh_frame))
|
||||||
|
/* C++ constructor and destructor tables, properly ordered: */
|
||||||
|
KEEP (*crtbegin.o(.ctors))
|
||||||
|
KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
|
||||||
|
KEEP (*(SORT(.ctors.*)))
|
||||||
|
KEEP (*(.ctors))
|
||||||
|
KEEP (*crtbegin.o(.dtors))
|
||||||
|
KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
|
||||||
|
KEEP (*(SORT(.dtors.*)))
|
||||||
|
KEEP (*(.dtors))
|
||||||
|
/* C++ exception handlers table: */
|
||||||
|
__XT_EXCEPTION_DESCS__ = ABSOLUTE(.);
|
||||||
|
*(.xt_except_desc)
|
||||||
|
*(.gnu.linkonce.h.*)
|
||||||
|
__XT_EXCEPTION_DESCS_END__ = ABSOLUTE(.);
|
||||||
|
*(.xt_except_desc_end)
|
||||||
|
*(.dynamic)
|
||||||
|
*(.gnu.version_d)
|
||||||
|
. = ALIGN(4); /* this table MUST be 4-byte aligned */
|
||||||
|
_bss_table_start = ABSOLUTE(.);
|
||||||
|
LONG(_bss_start)
|
||||||
|
LONG(_bss_end)
|
||||||
|
_bss_table_end = ABSOLUTE(.);
|
||||||
|
_rodata_end = ABSOLUTE(.);
|
||||||
|
} GROUP_LINK_IN(ROMABLE_REGION)
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue